From 934cab75083a4ab79003a583881775b6d4a2b58a Mon Sep 17 00:00:00 2001 From: HTeuMeuLeu Date: Fri, 1 Mar 2024 13:16:53 +0100 Subject: [PATCH 01/96] New welcome email (#28883) Co-authored-by: Eugen Rochko --- .../{step5-off.png => apps_step-off.png} | Bin .../mailer-new/welcome/apps_step-on.png | Bin 0 -> 1291 bytes .../mailer-new/welcome/btn-app-store.png | Bin 0 -> 2054 bytes .../mailer-new/welcome/btn-google-play.png | Bin 0 -> 4512 bytes .../welcome/edit_profile_step-off.png | Bin 0 -> 2247 bytes ...{step1-on.png => edit_profile_step-on.png} | Bin .../mailer-new/welcome/feature_audience.png | Bin 0 -> 96392 bytes .../mailer-new/welcome/feature_control.png | Bin 0 -> 90297 bytes .../mailer-new/welcome/feature_creativity.png | Bin 0 -> 130496 bytes .../mailer-new/welcome/feature_moderation.png | Bin 0 -> 100525 bytes .../{step2-off.png => follow_step-off.png} | Bin .../mailer-new/welcome/follow_step-on.png | Bin 0 -> 1227 bytes .../{step3-off.png => post_step-off.png} | Bin .../mailer-new/welcome/post_step-on.png | Bin 0 -> 1552 bytes .../welcome/purple-extra-soft-spacer.png | Bin 0 -> 939 bytes .../welcome/purple-extra-soft-wave.png | Bin 0 -> 2531 bytes .../{step4-off.png => share_step-off.png} | Bin .../mailer-new/welcome/share_step-on.png | Bin 0 -> 1639 bytes app/javascript/styles/mailer.scss | 349 +++++++++++++++++- app/mailers/user_mailer.rb | 6 + app/models/user.rb | 2 +- .../application/mailer/_button.html.haml | 5 +- .../application/mailer/_checklist.html.haml | 20 +- .../application/mailer/_feature.html.haml | 32 ++ .../application/mailer/_follow.html.haml | 15 + .../application/mailer/_hashtag.html.haml | 20 + app/views/user_mailer/welcome.html.haml | 95 +++-- app/views/user_mailer/welcome.text.erb | 80 +++- config/locales/an.yml | 4 - config/locales/ar.yml | 4 - config/locales/ast.yml | 1 - config/locales/be.yml | 4 - config/locales/bg.yml | 4 - config/locales/ca.yml | 4 - config/locales/ckb.yml | 3 - config/locales/co.yml | 3 - config/locales/cs.yml | 4 - config/locales/cy.yml | 4 - config/locales/da.yml | 4 - config/locales/de.yml | 4 - config/locales/el.yml | 4 - config/locales/en-GB.yml | 4 - config/locales/en.yml | 41 +- config/locales/eo.yml | 4 - config/locales/es-AR.yml | 4 - config/locales/es-MX.yml | 4 - config/locales/es.yml | 4 - config/locales/et.yml | 4 - config/locales/eu.yml | 4 - config/locales/fa.yml | 4 - config/locales/fi.yml | 4 - config/locales/fo.yml | 4 - config/locales/fr-CA.yml | 4 - config/locales/fr.yml | 4 - config/locales/fy.yml | 4 - config/locales/gd.yml | 4 - config/locales/gl.yml | 4 - config/locales/he.yml | 4 - config/locales/hu.yml | 4 - config/locales/hy.yml | 1 - config/locales/ia.yml | 1 - config/locales/id.yml | 4 - config/locales/ie.yml | 4 - config/locales/io.yml | 4 - config/locales/is.yml | 4 - config/locales/it.yml | 4 - config/locales/ja.yml | 4 - config/locales/ka.yml | 3 - config/locales/kab.yml | 2 - config/locales/kk.yml | 3 - config/locales/ko.yml | 4 - config/locales/ku.yml | 4 - config/locales/lad.yml | 4 - config/locales/lt.yml | 4 - config/locales/lv.yml | 4 - config/locales/ms.yml | 4 - config/locales/my.yml | 4 - config/locales/nl.yml | 4 - config/locales/nn.yml | 4 - config/locales/no.yml | 4 - config/locales/oc.yml | 3 - config/locales/pl.yml | 4 - config/locales/pt-BR.yml | 4 - config/locales/pt-PT.yml | 4 - config/locales/ro.yml | 3 - config/locales/ru.yml | 4 - config/locales/sc.yml | 3 - config/locales/sco.yml | 4 - config/locales/si.yml | 3 - config/locales/sk.yml | 3 - config/locales/sl.yml | 4 - config/locales/sq.yml | 4 - config/locales/sr-Latn.yml | 4 - config/locales/sr.yml | 4 - config/locales/sv.yml | 4 - config/locales/th.yml | 4 - config/locales/tr.yml | 4 - config/locales/uk.yml | 4 - config/locales/vi.yml | 4 - config/locales/zh-CN.yml | 4 - config/locales/zh-HK.yml | 4 - config/locales/zh-TW.yml | 4 - 102 files changed, 619 insertions(+), 318 deletions(-) rename app/javascript/images/mailer-new/welcome/{step5-off.png => apps_step-off.png} (100%) create mode 100644 app/javascript/images/mailer-new/welcome/apps_step-on.png create mode 100644 app/javascript/images/mailer-new/welcome/btn-app-store.png create mode 100644 app/javascript/images/mailer-new/welcome/btn-google-play.png create mode 100644 app/javascript/images/mailer-new/welcome/edit_profile_step-off.png rename app/javascript/images/mailer-new/welcome/{step1-on.png => edit_profile_step-on.png} (100%) create mode 100644 app/javascript/images/mailer-new/welcome/feature_audience.png create mode 100644 app/javascript/images/mailer-new/welcome/feature_control.png create mode 100644 app/javascript/images/mailer-new/welcome/feature_creativity.png create mode 100644 app/javascript/images/mailer-new/welcome/feature_moderation.png rename app/javascript/images/mailer-new/welcome/{step2-off.png => follow_step-off.png} (100%) create mode 100644 app/javascript/images/mailer-new/welcome/follow_step-on.png rename app/javascript/images/mailer-new/welcome/{step3-off.png => post_step-off.png} (100%) create mode 100644 app/javascript/images/mailer-new/welcome/post_step-on.png create mode 100644 app/javascript/images/mailer-new/welcome/purple-extra-soft-spacer.png create mode 100644 app/javascript/images/mailer-new/welcome/purple-extra-soft-wave.png rename app/javascript/images/mailer-new/welcome/{step4-off.png => share_step-off.png} (100%) create mode 100644 app/javascript/images/mailer-new/welcome/share_step-on.png create mode 100644 app/views/application/mailer/_feature.html.haml create mode 100644 app/views/application/mailer/_follow.html.haml create mode 100644 app/views/application/mailer/_hashtag.html.haml diff --git a/app/javascript/images/mailer-new/welcome/step5-off.png b/app/javascript/images/mailer-new/welcome/apps_step-off.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/step5-off.png rename to app/javascript/images/mailer-new/welcome/apps_step-off.png diff --git a/app/javascript/images/mailer-new/welcome/apps_step-on.png b/app/javascript/images/mailer-new/welcome/apps_step-on.png new file mode 100644 index 0000000000000000000000000000000000000000..fd631bf97ecf75b75ab3e8b149519c067f640886 GIT binary patch literal 1291 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

Qu#*6Fj=JRFVlcVW_4vkLXPn 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 literal 0 HcmV?d00001 diff --git a/app/javascript/images/mailer-new/welcome/feature_control.png b/app/javascript/images/mailer-new/welcome/feature_control.png new file mode 100644 index 0000000000000000000000000000000000000000..1afb6c238caa18cdb35d3ce9e500742de2e370ac GIT binary patch literal 90297 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

7Qe96H^@(Rka~TF^KYM%o zaq03^F4jqeBW2LT5x@w+7C4~$;%_C^_oS_8k7c2*T?Mw9%LuqF%`IROI4-QS0<*KT z1gK7SnCnW_331fKl?ur%19$Hk5=zjc>s+ z(bSwqZ(pBin`xRT7ERF)b#+R;TLCY}Pm;QVBw$-;vqLv9HZhF0j%E}c3zlQcxe)Y~ zq(tHJiV;Kal!_$v>;zik2sE9Y60+fk=aZ)>xcBUz#f$JwKOBR%wOHky7xzvK{r|}U zYdHV>SI}8;1~u*elQy*WmWTUt$E+(6D8s;84bv0{rC37w2}GEdqajh1!mUp}#=-M# z5INA$+KTM>7~)|AYq!6EE|ygP%8D(yX(MC=MgSZS2ID}m(Y26>w{1^wwMsPQDK1Wl z_29yD`0Tk7RPy-CUq1%n07jU=9o^y4ckc7(WCKdsYMVmgCqZs0SQdDMo-h9<|w5geuv zL5lu`1khQY;irqD4Bdc_Qvd?TWphJftd!@YM52nIFoEZLf5ee_C{R|4wZ)i_i)R_; zFS!l_bxvt}sI70rgKyXI=|69Y?}|lXnnh6uTp^}rc9K}xi-8t_5}}K_e67^Vswyll zUc;|`^-Dw|5x6DxiCrn4wu&~}|6K_S>k6ivQmlc_1PJqjjyx8z`F=Y5%imA?P>{wk@&Zg)MgUoe zd0oj-G8f~(`boO#j5<;X32RM%{_`K8dtumC2%dfdxM7h7=wh=6vAHru-|V6;T;++o z!N>zH5Q~N7@JHl#sQdLpXMHv-rvSK`Uykkka^-VG!V!PWML8RuobxQte*1IRAwd(< zPR?1Oh{>p;II__Z^ULX{AYEipC23KBCo}@od>a?Bg(Xx} z*P^p;2vwx`FN01$XO(;^^ud#-+t&jOXT%BA084 zG(z}k=m22((eWu%*ESM_C(t`E!g4Vbm>x^kU}E+%E?vEbO!fjCJq8;w`2&^tU1L}GB@Z$|PqP~Vis zm8;8`U%H8wu0GZiM!_}^D^Fo`ViwnL{2Vz-AdKmKDg;XkWF_el?v$Jz(Nw=b-qZ=15=E$ig5Q&x{$N2YdypQ>X zMbyI+el# z>$-X41N3G4e2Itz<>uBFEM2>X8#ix~TkB<9pyf_h(@iBoLB@M}~zd z)|%RCWcoW`gj@oqg_e$5EM1?$;ZJUV3HI8{Vk~ImI z^#o7}YfaLK21}x+x1Hlu?YC!$oOPxN^NV9xSQ=$rG4>^dnYm$He{Y6uZ-a{hVsQ@> z(-}0kSK?xBl>M4R|6nVOh;N3`WuH?GFTP5f91=0w*dTLp(CED%jMKm#Oc0P;TlD^1xV# zBSXb82gXH2nxoPKD^|*ANTAK_oKbRn9XXPMIJgkfj<@;fy8fp6G@1(EakxJM0RA6) z&CtH*J>ati1=y-Tq@r*KcfKuXb@c*}iVtwXoPcd&d*cyI7>FmE5KW{B64&7wQGEIJ zH_*69Us+m4q`V51wN045vWU&SeSCiBE~@I%=p7ozVZlXxb2r8(XR-C{1@7EiL+Uhd z?lM5IE2|{H8id z(@bmRcpV-W@nGW#PKq`*x3;jew=cN$OIH@qO0o3n*SGQF;1HA3IkXa-^QH;YDvJJ6 z98b=74SO$MVCVUBJluFBfOh`sA`%r z%U4ih=>7czVH%as!gn>#lKpc|Lq}g<7MqWrU}Iwwa|HL!&JNaLq9@aXsi`TU-GArK z9b~gvjE#*cH<><{27`HR#*ZRi7H6HdII|uc8bbc$gktUlfw)oRPdBGAGc%3HPd4!F zgL~XqwDR2<*pA8ZXh3;+l>M+!EAF%p$g zOihpC=;RevS65J#Ot9>*;M&U*1{xZx#F$0mVPuCok#0$GeAcmlxQq6#X1;R}+t0Vy zj&+Li+mY$%5cykL(#Yi|IR{>1ZGDa98c~sq%khA+wk7+hfcK0KVlR01^A$<*p0aHT zQumWzPsKB2`{HzAEz3U=;tSvA4EVpj)9a~FN-Vv1SB`#!N?333rJZ*V7+kCv|NW6( zlLubPX08S=_~)J9B`g>gr(jtPoIgkx1)=$mk20)PAGXRwMV1hOss4Z zy1E(#i)F$QZ0+pe#WMoN(+!lz%McA2$dJR?-~xE>i_ZkKzu3Hs#>O;4;(CFB=evg# zlYWk)qeDcZArt|Uyt-l-1d@H+`s@>!`6E1f`~;VmZlEUJjzhDER7)E^{?qTVx4Q#8 zVSjaKmX}Z5lgJV zaXcY5{Ku!C;+TNxu02M5x(ziH59^UAqU2uw@X_yCC)0G+380?$M(r|BtgIXZ14G!{+=d4Oce%m&+u#2V*YUXrO==>a|%ylTQiC4-pQ>kgBUDfTj?RaKZ2H#5V-quQ|4^2LfsyQx~VPvT_?ICl&zz ztb6_8IxY-n|IOZ&^+t7`;rA?aX0vDU3K*~mWFaAOKq-`vwPaCJvJjaR$z+DdJeR!xD{^ss8e_gFo3;#MK9=N*u_?4U z!C2HxrdJlh_}LK$;Cex>ez_=hFmS8I1!x)e0&J6bA6$9wy$`A4cHJ`j^VrC4aU7dY zTViHYYt;DBoh%kK^!m5RRCp_Y9sizc`Yr_EF#M?V`v$2bd2QWPl;4GsLa%+DSRp)1M+V~? zy5iC9Wa)TN9ZM@BPIp2q5vf&5GLVI&+na%-)?pF=+Ym}F5rDwV!VS3!>F60q!KG43 zW&j{pFMTF{vq{INLMczF1NJbMb?qt$gG5+&y{?>Q_|bV^*$zFP`FtMN>-ye0C9q^N zA*obax_bKL5LBl1T1BFcEs>}r`2d_O8w3(W*09(g8-Kx7b4)m)rbQ0htyY!okh=xd zCDN5;NLC_|lK%c7+0?&@0~<%V3G^clrXmN1K*G=-9F1yI@;7e^I!HTXK3^2ej*1nD z(iZDCT2d*NM5vN8SdW4GA^^~uTjc?!2ZYuKk3iRQ(pqmwV;~RX0kBM+BVo*WnAY}neX#@7r|GBw&NJ)E@9UZ?*rUP85w~ZxPL2w3+icr(zx!Yey*KBhLYXvjU_1*N|=W}^d&FpRIi*qH74;`66^bU z**q|avONOIr)Ngdj!_n*H#=cDm1>2|nM$(af$6C7{Ze}^dlF77?&rMJ+zPLkD{2mG ztR2_OgF(7qhPQ9Q@1QRhcN5YIISopj6KXE1)!*yd3euGsK)QZwFW>rCI;=% zCdvxxsVciT0K8JGK*}!bHPg}#R;FU)wWoZiN50APnow}`%+RjB4kop}r5<;!7kk@p zfBkhZ zOiDcjV9x>}<({vU@Ooh*jheocRu`lNTj27-qMST=LJ=UthvWmIP)FGys-K@d1ulP7 zQUlv%H|&(#wr!CQ|Mo`!R7FfDA#TgUGZyQ!&Gv3aN|mLPwj1qy%=FJ82sKGWBDTrJ zuf2?|=oD$@ec0^sU&eeU4jn=R4|6Nm4GVH^05`?wXG(G1I`L{q7j zW%AmjOacrH%V66q!{B+9i?|~(2HI#TM>B$wWyf$%=q+t?xG9x!E_Cn_+tC0s5sf&M zHtGFK)t|@n03JFidFZ!oGQO9p<%k{JZ=u zZ$whvy>jZK3p!j#jUigA$*l#zg$Mefr@#=FL0FGrt(0Mh-_P+-Q_Zk4y<-^9@%^Y& zJ*d>DA(i)&0V%B3an$Hd{r>wOh-29b_=0EDn6SQfa+}Wmnp@#{&TnVJ35+Ah0CU3o zOdXK~=8e+m<0B(bZ4b(Yb7!HVUW6Ka5K`=e9N+fVjSYG#lNky(>pFvn^1T3l)1Ww!}ZAqYOzutQrmldu<{wsir*J(+Cqom~9@q?7)>0rnS?Cc)j)ss9=^ zPtwUW2{ukp>SgGW$50y$L`|yUZmulJAP8^+1Zg#&lQg9N;T^-BJLc%|rJpq=y<}Gx z)prj=4ucJ6ZYICsLLzmG9;QB)x{vt zboPOyM2fg|Xgfp4;8+C*riY<^&q-Z}&geq}Iu`@ma09A)gmwYEw()m7k%R-(PM!xL z*IvCQiHk0SAfVRtO#Y_>ZGEyVWi!wl)kuNI`QuODjt zU0jzsMQR9MR5{Pg%)(jh0Q#~bE35g=7-E+H;6o2U8r+R>sX?`S1*+%;$)x+(_I$n| z{V3mYA`*>709r$w!{8H(#$|C~Nmg>J5{tzk2@kSP;Y^Vk)Q&#{&TuWFJvT7tU8r{l z)a0|6KZ77!cReYWt2ioB#h4%jjsQpS^XP4@)1qqCI6>OfYHo(~gdnZw$d?^EcZm~= zQo`JM{{vXZHJD`@;s?bONRvVY&B zvJ>%~hGh~+|8wFb6XgfRdeUT>4c`SJUXTL^_Cv~w!7e%_w$2X5zEVBMTuuRSqkUuY zW*@D5vVy;2`z1Boir=6O%Krldk}T;{A?J706`B ztk0_hEIp47Qe&f|vTyG`fXgFdnI?(l=;#;$q5yy{Luxw$d-BJy&3-;ME~h{F1Wrp& z1h!kMmJ6k#d~*5>9k3W?(@ugx@DwBT0$qfC_ak}!x#!`?Q;}#iit#VV`Sa&7k5tDi z@NG)RM}s8V1pvd5lb7MR^)cEoH~*EkpAwjq^sCg=l%&s`J}b{Y`>Y&2`j&VNCHakx zU&MD0_d6YyLrU(L&w1FGAA__v7Jvl%-{5n?K9tIN8QJ>-I8@z7W*`yog8lhZX?U(o zPEN|6Q}>Q&7wu)QrhSSpparJ@;(7PUX;&Yp+O zeXqQF#qcoGJP+Wmvig~%7Xp-hxDPCo1XT$yiX}3(tYiy9HXkCGnJBpbqJke8e%eVRA`*52f zMSe%v=z3wL_hNv*@6VlaPU~}BdSZ>W*LUsOWx%`iYv;oQ3%mF&;8()!=OTtDUmX9F z{Qft;WELv|oYBA$7D?dH04!7~IkC8Or!u^58bZ5Y4KHWKt%?caY5LSh(WaWhed%;c z%7rpiV@o6`lx1Qzq>?O%yF)M5e4$7O67hXXPN__mZ73B>0GB*Bn~g*hfqIKhCZ^6K z9q-N%q-wPqxb$vH3Z{r;v)xj2Jy`+ZyS1uPXPb^BlQD4nybYGZS%)6gHr z758L&=v7%Lmg$s4+cfHeZI1nS;t3F=1-|@IC(8KO1kN!uYh_sxTee0?aS62bC-3}B z{`!x`P>-|kaVIWLq8rlgazH>CGL*zKzG2eS7$b_`X^dN%67>=sb82Xh zXa>lE)Rs;6vVON(W1Xq)tYk82dNwaF-^3g>)(}9G$p}dSC!q@5M?({WtqI8 zSS*sc!Td3?1^@}5Q=#p*ow6&KbCbZ))fI;nnMC_sO1WL>Zc2lVIum1HjuVU#217=& z6h+&6AbHuA17;*g+ciR^=!d|$6C)(dDA$n;v@7%T^ZFiB5?wJeg@t^X(96Y$k&-j7R}@^Iff}s~D&<>?Aw5dj?ZP3JXOz?sGc%34Jucffi zwOf-1?cpt|Mgp}k6O`KS%xtxDPUE~zE!id*D4zG?7yI2NI0nEoB`^Q@HTgH}(6e(h zwATg?w{&0C$71{7&8f%HB4ZFTJG4cz{aSJg$J%dE{mk}LZP}y~8&0dx5SGU0*k_i( z+2&uK<5&w0PLn!^QYmE`!g_JqV)?cmsxbxULcrnkYNa&)%ih)NMiB$y`Nn%d15^kp zq6iWRh(k~yr9gr=;0chBfSx||P{7MTDhe8S2GT-)3L+sP(dOSZ z^Ko00QJ$*;P?{v7beKDmoOCSOR_7py6X}gm7SnsEBxl!;@uAlfSgrRfSFY09`YH`? z-=dFG5A`2Y4`${8fsSZTv|SyuIjIg*KProai05tfm`$h1F{iTnTU?xi>653AY3uzb zIym^H^t8T@4`kccO3CvgVq@e$41~9`?nvoe%cgH;ZK1l>_9`py!^Z42lyk+GXuT5JkTEN>EHGY$rxyGLTD!SU-*@-v_jEhBgGKIQ z<`_?j?iAaW2J!`<1K>O!He8Q_0D5ks48?Ugn0TtXgVF&UJW=F0iJK5~!B?+7CGu@5 z&L<+Jc3wD0uybm$JDOLwmb>{^kH1zbH46r5(ku-q&s5H>OZ+F2M!xtWDr57`08E(ZOH zH{|LZVGE}h1Z5_b;~QK7Qr3H^3lCigH>^D$Z3RcEm)D0JDDWyUM|WYdTQ5OBWFk=S zVmoZe;PWWsWDA&z1dr1^*WgktSC@_0Hx5>)E$#*ot$nT!kAMSc0B{9}nZ)}`gCZ0+!VyP5PX6y zu!Kx>CkNi>vYbtPZ^hZqs#y#8O}v?XM*H27+rh}}{Q9i$@Pg^N`p zI1#5$B@VTY9_S4R1VOZqd^zldWB~v#*KQ0%Dunl+D(?vk<#VGc0KcG(ho=YN7HpS+ zZy&&(S-^jX6V@O0&ULqK7>2@R_Wln%)I4VfFCas>?y}{_22{ZZMG`5B?uAzDm~TsK zbp~JNHDG_j&^x}4)ZwU-hNHt~#i*qL)#xWKW@P?>Q%vk~N7SVQFn^Slma}Dfos{NZ2d8v3A%r-PgV(k%D2`5JEfsUJ!RDUG|08? zICvL;RayE&mq`WOp5(I~99Dn%+ue{daF~q%HvbKvF0G7l-tPdpf^t*>`6-800Mj^a zqSq}uJ}#GG2j0!JzfMM1QPt6nRmYvwS4H`JqVyPAd<=abx$-+@uE%>PpKq8hQ7Xv> z+~TW+D|cxo1V%j~#Sc-k2v@OkZmbbBqiS^!iR%0sO*$ zAfXdF1uBJN%)zXIC0n4OC2+nD9!HGxxaO~ekO>U!6FA4Fo$j0Po-J=E;DBi(-y0Di z@xCJi(??^0p*XHtHh-56xLLdXF{dRw93a_t`Qen@mOto(4#OAZ_lwE5UP9a(A1!Xu z$m;j^fdBCwFv)K8%~!8nwCAi}PsU%$tcTubz&)X44pwLFgb_jT!1~84PVI;&lIRn7 zLZVi$lZV54Q5=YR-Kewdbo*Lv+o^WQc>Qo7BBmnH96u4SABil~L5^3UCZ($y#8|#h z*8I?u9&bCo6m_=WBI5)pn8A>-7d`T8A}Xm$qBTA||eaf->hCjnzR)yyO{b z<8xt1;RbV-XREp@Y}9q5-qK_sn;OO)pB?$Vj?0&5T~0btbbpL}jV!e6s{CT_>~&>1 zia1_1SD0%gaC8%s0J?U9kS!7LK4b)lfPhzk03jZLw?ag`!L^93GhOv(PIr~6rqtWJ zdvr0!($4Cqp8o#Y-J1TGt`I$#l0V8uE}H|x+)D^A{lr&0VHX0mp<)q2bnuc3z$HP6 z8Z?~+z0z>UmhNK>_%#Y(X09C$e}W1@ygr#Fy^8emrz;a~UHAgjNKLW)VRlf7QDGBu zb}^dL-tBGB@jS9nlfSiM3Vo_;b{u1CIO)a-ek$ z799D&P#A1bswZ9cuhX^XIz{|c78SRkSY25l(J^CA_t2+U^<#TE{6VMU(Wal7Z#ggmv62-rkY>#8u0p% zZcgh7KFx9MENB?~(!#=oQ|qP)#4Bq*KB{t>-i{beWU|gGv%H6!s1x}&3`Eap1)fKB zuY$;gAKQ7oWb36c(?^)xu{JZ5nuj&&8n6mFWlh*e>7@>m)^(B0-0m_X(k^SfBGQTV z%YoE2MnysAh@k_KObHjky~C59pzPJvzx!;?pCi3C^6zl+NG-o zYJEEqzlAk_I5$!}qEvyRM)~8Uj(WUe$6Npd{!mroMJwI^@s#pM2!_H@WA805 zDk*kuF!6F3+JPcXoww@(m~?;{LQ2h$M8qZ4C|4~ed^rLaSS$%p=Z=qLTYaGD{&64F zO-dg=T^pB4%nuZ$g1IEnKFwaVegRd_~C-3BLguC`7&$#B{5fi1gKfbkkm| zboao+W4?ASYQoOebu}Rr_wkN$eczZ!#NNSe9QCRowXr1B-}`Pw$l<_EpF%HfZp3?? zQl?JxI$257B`Za=37-_>`_(M6V#?_03p(%+uFI)BRL_ z$v~|BZV%X$QV_^lU)OcBqqzHjG284U-y&Rr$KdxhAH>1gQr3X)+%Rx|#y@-i1^x1? zuSws$p&itb4g#IA^3xZghR^|KSU70fG!=eo2xLb5pkYh|3sBzktYt*3CF_Y8S%{du z0I_>832g^Vjkg0PNmJH>ZXc%Klew37t}8-hYit9VkSDVNO`|Cn!uvrp0b!=!Lz24~ zY6u~AaGM(f(KEURj@yTT2?2@LQ3EhRXj7li0U6Mdug|x88l(aDcr9L6f*y!rv6<{%ZaO&nw(2(ovGI z2eIA@?e{?u#v=u49*+jDQ&_3T@2(B|!L#p9U;p|m`o;U7f9%ayJh?|P>n><^%VRh6 zD?Ex4K<$`%B;{%i_#+-g$@Iyg7Vi&#{1g5CuYab0|LdRh?V-v{ReOM%up-4bV0_F8 z7BHs-L10AwZ%l&>qUu}yC2-iL&g>~~#evNh0k`DMusQ?tO^*n>z1JIdb~hqr(8l2p z9e%`Yd8(b5%T{KK%Lh6Np#b4RuR@XR^XEeVV;4IqZGJX2M!rCe%e8*PMAR=ID+wLp zl&=gBaK2&asH3+myi1snBd{)?V3ErhZ5a0Ld=%qmCV`1P|7|F5VB*LVTl(F)kGdJ{ zi(D$TTTO95%$NIz)!Lagj+cy9nP?M&!Ip#F6=f6b-$$UvpJ|4;*k4%pYQ$anbFW8l zXSVkCE0>Rr8sE#TK-Z1@<(FU3?|%Q=L;d0>5rJPc0>(kL!(Kz8w{PG2D7e1+ivv2~ zgU4CWuUP;y^Q}UZYnXCYDbtHD9*5TR59$4{enWrx+dt?(-+XiECjFLnk?(rNVl99P zi^hpR>U%Hr6asTK;vSp@I1@^7Y9aU};1S9OuyvClRp&)m0;A27DAKff3Q|+@3EZU`r>+b7Qn={Z<8I%Fk0-D)5#+ri^+C_dY@Ni!7Rxxbeipqc-=eCzaU2xB3ClfMd1-)Eqtgmb?$ zhn-33?Wdp8Pe1>he)QQ7UUUL8fLlhvD6b*mn4x^0ibgtoqYL3G$RB4ze|Hz(?H3!c zI2~tpt2)B9Hl+0xyO;!BXDb1w1k}Cpe-XqenJQy(X#MK%Xzj0y$}LCI%8RfdaEK8% zIg2T1H$%|jq|^YsXm*db62R*}c}stzc+P=Qv|Qn3+ewsQ(e=(BPc^r6(pX$c`M@&& zP+P$3d`taZv4q0^oYmj~`$*EP2>(o6^~9`|G70ulhYw?te!gz<5A~tA6dyN=-&y=D zo3`s6jnzybmR4deX?b55_g`SAnN_R`{`q1C}1Xsjlz_5a2*(!2N;(9N3}D1q7S|&b(vZYXo=)V0)e? zqy0jq3l(rLuzB$qq9N0V>8Q1x%Be?y&AlhWe?C@#)AhwlSw-^Y`T04fbgZHw(Tx+Fpm@OdCBRIA834c>+r0(sBZk?wC^IDv z`V>RA;@abV87xSjc(x8CK(8dg3=Ggh zwcDVyJjaGr@RMr#xZ@In82T~k$Mpw-X^XQ0@*4rB^ErbG$Upcpq~0m%i}+ec92Xo< zfE<|K6u48q2-YmnWj=7K$sw=)pH>S!0_Y77jJYF9?EgJ^(oN@ahT6u1Lv&au9q# z;(I5qC_5Z+SfNKwll-kB5ClOu9rHYMnF(Fi0o#U6vEXd$bLEEejwWHjJ>EW_Dp)}f zgg3(m@kcTbv`a@TK;k=+0QVP6?&8o`f*=UOg#jS117O`$z%|#|Z~ju!0~6`-9|b zGoXFb z!fXQa8&NKAV#|*~>wi_jh@be0-@XF8jst)E_%S>_K6*E1Fz^HN7a>+lc(5*LlDP{y zbziszo5VMz{p()TB7#f zr2%Le(mhPV0#L?)ePE=Sb#%>O2!2dktmc0a@e@Ds`_uUK^eBG*{F&{s;C5ZE-pcC% zUBUPZrYaDBW9IXAK>nrs1W!*-zef;1j2lQ^{KQZE#P0|%FE3oWp8s|nZup-Ico5(p zKYmal2?uNedtDPneA~;BzJLGj3H{oALNde{7h{;`__{@7bL=|*#oEmOE#~Vn*+uT( z&o9m)+q{^`pZVIf_=%tRy+eL6vNkgb>!exCw0;_LoqZ5s0E&QgZSb(`0jQEz%rS*$O-h=qsNK55Z z+AQtep#P3WB$9#YG#ry8ocr!{f9HIkAM%UAHX$JAzb!w)ongQLJwNdizjOKFxT<}b zU)Ci^#v2x$HN8l~hOO2w0Vo*%sE#;Dy5X-

ioyw48J-t>2Qzhn%DpI>C-B{9o@!Eo(t8Y9bJHJp#iX673+TU zHr3O5p6UePIGtu^R0uOx10wif`s)Kc_x|R5ho1*JPvFx0+BcxBhN?8HJkawKKk?g{ zA9wvj#a|+X|r9W*6Ft%=Tq5vbfIRF0k ze1~7hKX6I%O8nSXZ(m{POU)H2uEmvMw)hC>9K6Op_EgO!MdPn3f>f483Q(B3>I*r_7?#T1%#@x z>jDAOv{+hN$hb9&ydgNd39x^CB)c(ue){DKSAlgk3A5ielA3dN)CE1J0K*B!PztjY zE=o7FFX-C`w_Ct5#()X`v3IpGQC(^HIWq$&pk%GuZM6z)*v4J?(QeaC6Qhf+QTu^P zy2Xz|Qk15(C~aD*KsPS2s8#&4&_!aqf(i?4G%Xg$cB@8Bc0pzvchf4MHX>gNBBL-f z%-p$i_U)UQ+{uIvonZ>0okO17n>%56Ip?1DdB4s%5F#*e2k3QlKdHwrOp+DtWax-= zEfx#f+uLyA!Udc?a|X@L&FJavhN9Tvlq&VJ!w(|Dc$O})OscBD=~Q`K91c6~+_}wA z6q{B!C*>rJm(v|7VEN2uGe)dd*lZ&tvjbA9o_!D^;-5?tp77)IfSS)`p*|)dXzj4{ zrFy-NBov`A^h6SH;O7FvyAsbM4DH7mlYWJpnKuEX~2S=h8`6E<(&j9t5OaqiqXmRlzToYFZlWGr0d zD}bw4zeaI!G08(RZQO{|)Kp|=XQQU38hw5J)USe|bM*}nispp~IPi#&-+qi3WBXuD zXZvmc&&HI6$@kUFt$6Rfe3Tw8#o@BUe&M4d zM^I5wj)H>S*t#`?NVo?=APDD$NtSP9#0tCJ&fby>>?J7J;9{+C~ORCCV#~;`oVg4U^+2EiJ>MMT?M^pND<> z_Td5bH+iEhn-H4Cet|{W|Q~vj;Yt4O_Ns!7Hz15W)3f z=gyt1KnnNn#n)ebMW0*Q8+CtA@bkM)9?#y}y~xYmN$<)QHd-!U{x80{c@wufZ=tEF z2}h26gtV7m#?hnY{C|*4A?@;$Azp1h_##{>-E|gxA6UeUzekL!Q|Hg0KW0!-)7d@= zJ5+=m;Ue~ zKL7k5tmq}=xLk9+-hi&IPBb<)V(#3Bv1ZL0=nZ{!q%(Z0EHgUELWR;*Z#9XqlS9$|oI3o{t7;ISwsz16E%ljoUFB)peX58=8n zHVpjVBE@GafsK)OiCiz7KZi%>J&KK+Hel7NRfvs^BjR_$Kr*GJrIQDGl|19qXsE9z zBCJJnax(Js|499=2Qa!vE~OmDIusRm`v<7M-oVg<2grFh2X%FyAu2Kwc9J76ckH9_e>N$=-(hMq%*F-$!VSd3CV=l43`e)I>r;E0v1*C^^kxK%} z${|Vtem*(`hYI;6{@JXDFf=p-sr^19&^BVT!DeIc78Z*c=3z4i2M1xbTF5gVAz1l3 z3fSWtHV@;z$>hHbzWa>($4uXS;J`s5)>U}(t+zO2D!i&6iOe8e{WEXge0;EfKaxp*@>8?}G0 z#p1<@_%)%Sp&pf$Rd6T@qzqL>PyHr91j?}66(YKB3=9nLd{R}F?(d@rk>n2#20lmHU( zadDU)IgQ8Hb@(_63ky+PQsVhClF>Aa(4Mewa)H z*tfqBZEdai;){Qxx~7_yZBEWRM96cHk&%JFe*7_!_BHC`@K7<ASq-v0oi6SQ_ z2j%5QIShE{&>>ddldz_ZJ;<3cF_u9MR;v|Hi`=9(8qf2;Mq<$?(j*dv0M#SB68e@%T=tR*(XA#eq*gsl&>ZE0L1&B8rPkFni8i ztXsDZk3XIORkf3mWI$r#Vm$NAZ}G&FPvZUe3z3=mD&phgP+3(4#cmI2nJJ#*6@ss9 zWVMn9n~?BJNU%o?gIzoW?}Y24+AjZ#`PQM>+i#g z-!CU5Vd>JPXl-pr|DAiTxg-N9>YU^C)I0yn-mf6QQ~!GDZC8*mWE@VRjW{?2?X{N7 z@9mK!0m2P`>I8+Rs6983=;`U^lb0lW#yWJ|y2S(xAtw9Z0$Vef*$#x^ouOvDXF#8ARzD2;>~RDsP=QUq-yhtLv;TM`ZfC2eVG z8bOQ#K~UOCm?)@)N|h+22tsPADi|;nnLO-SB+x!kDU|@j35Db0sY;4Z?JS%%A^b$;`}9Mq-P+7=ZO*!Ja0+=Z zHHI>vM~@`wm=_x5Gp@(u6M7`ourv$`5Lgi=9o|aR^rx@}mDY?eHX~YB(|N9RZ(S^vT{ui0h zw*l`%X-A|?$89t`ebGL^%pb#et%UbGn4~~uGK#Cy)7TW}*iDX$)YQQ|0tL=75Z5i9 z*TVUX33uz30OR)o=J>w`@tRg$RQ$OZaxhiX6$vn2ZV2Nrns=Lgwt3AU5S6dS5ng-Xe&<5K3K# zI9_rfAk@tw7NMx&vWsCW;Jf$kaUzP;%CKR>MAeuqbOAySC!w}`tgYGT8Ufs2-+ukX z!A1{TvxSu@^u9;K8%F0b9ryNl-IA5{oPcmbBZeL@KIipDixQH#gvbK6*q|A0nc_k3 zx0B!BLSDP!XxzNK{4Ub6-r=>Yt13yV+n%>wn3{C66oi}`@OVCA%GsT=JF;ohCdRZY zE2|)=Yvrp51l@rf=OPG#_ke_40^%`Tx`5g4GTfXGVl>cSOfM`hK1re=LQv!}xLllf zocH=%?4uj}(+DF9Xe#wMlPDwu+J26`$VbEz{{Jc9=9CZ@;csHOD+77JqEnF`&CS0R z${Y)QR2detS1HCS|;I3~-NuRx4= zy(B01q{r-bTb%?W3A<4_^-4*BA&|kCFGyJQz^70DE+?cdUy$F$xu{g|1f$|ZchJKW zKxEMZVL%uazm@sDWo2c6)dm3~>kd*=fak)?1A*jI!1|?x^`~Y|V>%UzV^DCQ+hVuj z8&OKX$6AH0o82;icx@Kqh)+nct5;2&qnBaWo?+|rf)$K9pClwENN(;rfk8yF&9a;& zB>E*K^+2JLRf2KOVjSmzSiJt**9B>De9i|B9FSkFUMT#7-RWO|UFbjj1PzKKNAgoh^eQQkKe^3obx=UDN)UYPr zBe!}v!e&ZS8j&=l_N{;ov3rCqr>-j~U!!patlo%G)aZP*#&SvVSaW%B*5&AhDHhRq z6~!Bl795rS0|${c+Yggq*RH?FhBw!P2t`vPpy3 zE0mt1@{DHws!$>G{vnk8;atnnwbcd;l1B4}O*&hdp|$P~qEB_)t2JE=?`*3^KgSP7)7Os3DsM99Vuq@+TMicZQ< z%%`~6t~9oF?r-<*iO4p%1*c#zjWh5okVaV{y^%smPg-ijy+P9=V0myop}`F0`?wXY z^m!5Qw>`3;seD7ng9$;~nrgg%mCDzdM&--&nVg*Er2d-$1$_?%lgZH@qVX#UqH74;(ZY3eVLhk|GhrnJ3fIkZP3AcpVS`j*(v@ zFE}gfc{y>s5M;!^qB_=m*|B2>W7SC0Vrf&v@|jB3sdMLul<9y?S3xt3S{XZb4AS;~ zAhYLuk3B7IsPutxmN_+(#;9p3@&(XfboCWgPZGuFT_!x@ClH>vEf*0-uBxntQTrj$ zIgGE?dcfRCNug||@@>K^Hd(=E?m5Dku{)`l9J@@?c3ysD5E$BQ16^M z-{=0)rAuMd6vz}n>0`!>X4y`}*}TOfyVLJteeQac z9R0Z_pO9Ico107IWA^OX;_-T&PTAr;`Tc&u^CBtk5?ThVjkf8=e;lwh(aoi zmS*|6O0%hSg*U31K2RqI_{*WIuY1C-n`K&@2V9sOf zTw?$J1M;`sdl3K3VO+Yc%K1&4I8hcZTqtknZG&O7SgzF>A$^d4oSdADQw@%z?Cfk5 zLwJ|5{E;I^@_mZcolHRiVlaY+$??Jyh=Wg&->i8J-tbp|=;Hx7cZDa^hwnE5G3qTS zXo7oXfexTB^y*PeB?3Wr;AT&kgYk|zlq#b}JtaC?1;Z9bYPt*tm%?fmxzg=17#E&8 zEkmZkYtEQ5Spq2mkuYn$qX38{bL$aB%2=iMVaPVcfVO9_NQ4F5?rTA_g<6cENwO7V z!8U1o18ih_2skujz-k&w9sr_2OiUM)Z2Uq~nS(x8Yu$yi%nZZim+~JKbiK}i2?wX9 zI>ww01bQMr^l1uc5W;Y*MrO^LML}&U<_I_G-7*%94(poi-?mV7&u3+^sK9~+3*@Kp z>^5%P$kd7Aq9Vf435nfMTq2G4n3tCa=s6z?BfKWV0biSrdYU?REBwva(1S!SBVzY& z3Z5DNp84#vycfW{D2Mrur1W}1ez$cigx(l_UX-M;)uZD#s$u-qg}=?ZeN%Xx=`B;H zWXQKBOrRilBBmJ?9ffo!ra@`t05)`&Fcgz=I;WyO7W|X!Y_gv>z4eyt+_{s=^{Ejf zXpDRY4|v;Ze{f?)YT@@Wi}x4 zxlqb+v9Z=OQqqR$P+XjXi&u;pJx2cU$KSIW67B~nZq@uwx5vX3lG4Yfqh#f)9Gg(S z5$Ww>VL51rlB2|O#vIq#q0A7ZiR8pZgFv% zWy^D&n4WH{lq4sn0}N;<7xHF|G86G#kgd2<)0xw!Wy`T+ymuH2T#aejvK)DG=upC~ zu)4MP+cx)w9yF-9$idQO%TQ5jqPE)U5d(780?2y4Mw==-=1T*5C#foJ*f6FX0oft5 z6~#da&%rWz8uGY3R3xtdvUmQzaTHM; z-`Tx8`{Mkvl=O%K1Sx1pP!JTMp-E*?1c8uJA*G>9iBjY!DBvHUM4~`RLH>Y%VvKY4 z`E+uK6p70Zi4;Ua0x6M#?b~7avQPK))#{lw&iZ_rCx0}%^W)9TzFEJWz1`U~1u_og z;MLW>*_n2Dc;$4M4ZmJ2$kE2rqe%C4Uc{uRFf2@h_qtD=d?VaqeiI9Aq*;oU&RWeD zUOhoyeE5qKi0KjUID&5maypO0U8^4tcIEk>T#i4tY%1&jKGHKo5jbLOo=({am zmQCyRx}WCx=wYkXO48^$qeO`krBu??{kqcaT}*(!y9yg1HBoc{4o-it|hW9@_fBya7jNf{V zJCl`Wx<1Z>>Jhh%Q*}W~U(_}h>7Z>RRNGgtUVZW9mri`0Wa(>Z8lOsz5+zC$%#yP7 zPJgxk-nnxNL&N!cV5hVAIP;z8ThMIK?Y|MsPIfz;!otGB@QW`$e`jlB^J3!tgFGK4 z&1NH!wcH#Q?9UR9-$6F;4PB6w-~jS!^3fK;LZ5(rLFvRc;we8!G|&OvsvSCA_O%YQ zCm?xHzGwsbsOw>U(#O%}CPHqj?gNfpmT})ikCb6VpBz6cA3~*<+RUIF>qUH)I_L-? z2W@mIBhG9yMMNugdE-YCU>9X|!E=>`C1W+ECO7{f#tD{0QZ= zO=X-xR~R2CH`=o751XU6d~wW?hI+fGL)xwFhWr6+3*F^afOutd%8xjW^i|s+j58d+P=<~NbO7vw zu|1_O%7=8pwEt39=RsNN3mro#gZkAt=CLjNG!9F3QQrWcKid9)$E3vZc;|k}Ij8GI zdzN5-m6vR7!+j_n*P>VI)a90zmUTLhJKZ;+z6geRimgbB+D zA1Ig$97I@bD-IEd14j@B!qSOA;%nsSPSfY-=S$+}DSjSMxmx>Iv;L#i`-uEhW|Hkc zzjHfsIXfTkPnrGsnC`j#4;vg}v{T|FEDOJn@)JUnJ_!#a9hT3#unu#g%JYUr?Rxai)q{@V6>6bIF7+Z3#Bu<9&!{Y zk2uo7<*fY*?LEltF!UnNwAvqbtKI(Kf7>5*?vnixk{)IEJ+Z%0ZjQDMr(61aZ|SXP zdA`P){l=N^b2I}cGGII5mN63shBGG09J1cFQU4$e%(9i!>S!1EyS=m9Z5)T8aN;Bl zw)+yj=w09c`LeUZ5C}eSjzf(i#tsP_M5g{Iok%ogr|p2=NObwcak9OH{$;z=XV}HI zcgH`Gu>SwW^IX^A@)@szj`#cf`%33ar&}*xZBvfJ>M&1VAEEQ|Z@gxC*@o4hA!Z-s z*TQT6GuA}su`ONyk^ByOYDK&U|J3F1ukG9u|IE9wp6RLc(lQ^y{Q9d`+n1w)9YIGU z;h&!$M#2q@i0#>k0Piq|!0uirfc7&@ou{8+o1CkJ{+Zuk=?(L5*bM(I;)5<}?q>3@ z`uoR&?PZL3?}2^s@<8NU&wlG!Fpi>$^=HCY`y_ZgZE1X|nf|=H{xlu*#3%Hhf68Nf z{Pc7Rw7sRVn6cR1{5AU&)CQv4<~8#O*7N6)T-w<0d1blL{3E?r{@MP^^55`8{*|5N z${#1&=APv{T?q0Q7j$;ULr`6mYOkMy?rr#_AU`1+57>)-aE-+F+KS4X`7 z9WSvMDhl4G(DAxaFaZZF-;QoyKzqaQE+Pi5B0_efWm_nA4S3Gm7Ld4$)e$+bZm~; zj0D~x2}VHzbs!0fxg>DZbk#!WL?QW^#tngl7Ey<;a}wo zKB7Ejum1~h#;0<;3yz)_;(upbFJA3lwDX0o#~GgmgfkY`L5S!(+;1Qsn~}By`P4J- zL)E2@j#{BwLm#-RBp68HxO@h|$$oRt7sGEnmjm9p zGbZqbQ4W|muOCk{QucLRP|T0Q`A<*snv0uhj0yPxJ1`GkKdLOC#}}Wwvp@DYFS-0{ zzR~Xn`DeeHf7F}Kzoqlmf1H2M*|s*Nu}fx(rW|rsKW*m9dpBkxk#9Q%tZpg|2XvXuaVC`b)(k5wR19v{cj=QbnDo; zoUg+DvkC2l0}(Nc2-S`Km zY5eQG`Db0tzm9g1c2Ul^L`1=%pDRV8V(LeMZR#@GE?zebuqmN_xSa$} z68ehqKcKyYv1af-W?u5`joY|9g5X|zsOP>F4GRRKVq8O?u$iYiLS83qa>(1jyy52Q z)yCOtPd+dC^Y)@#>d4mKW{!Z4SO3(g<(2b&6FEvptiLcz6pWys=-AGpOi-_Zqq|qa z6C?O|q#&H>5Rj7zPHGGM^ExYf)clV>IU2zKL;KgFUbd>|y(PmVVS;yf0q48m%Z@Lz zUc}<(b+ z{sGAqZ0P2n^JCWo`8QpVe=9@I*7=9MV*O|FA3s)h^yPd@raNL{c^0tvh|{R{b^dy} ztT~u8{#V6G*u2&8XWPU6^5-jm{U1G)11@-D_ZB+xMSdpRni1 zvIOff@@Jp4kH7y@WAUK+AXq0d9)s#za3$=E^KX0zdsrvPKhtskfnof^mM!zoHL?r- zF*bsGUgQ54%ITK;-7{kGLILy%h%Jnm&HZ(j31f`(HN*D!T<7yo{RIBe<{Z8fY!8=Z z`7L9qzi3r5(h2h?Oh`X{6Xl&H^)nqT>y33xI`1&n8ELTJbdZ0IgiSwzf7IIu|FkJ> z{S$S}T=J4ahpaY<&W&dou{n=&LJ5m}Q&GSw|8Xp$p8)>>+mra4aFe%r{-?DO$Dy2U zN!GtMY+$5JL7Bsx&7(iEm|$OGq^=!SaQ+$w9xdkcpYOyHK>qW;zxn+8Cx6g4p{|^8 z$(E%5&N{wOhaTm|>$9CE{q~x?&Jp5aLUfeJ|9Bqv&wu~-#nLmzaH#0Dq#QBQp3W^J zL@n5eExIqQkM`X=*61BNbkHjuMMnv6QYahd-`XtxSM0}p?STLIoXDFbNc{=Ol9G~= zl9G~=l9G~=l9G~=l9G~=l9G~=l9G~=l9G~=l9G~=l9DINf1BQO=w^IgkpKVy07*qo IM6N<$f);lkVgLXD literal 0 HcmV?d00001 diff --git a/app/javascript/images/mailer-new/welcome/feature_creativity.png b/app/javascript/images/mailer-new/welcome/feature_creativity.png new file mode 100644 index 0000000000000000000000000000000000000000..3365856699fcaf857a94cce33edd1e70e908a53f GIT binary patch literal 130496 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

fH{(>2o6S%9)okvJ`3X~jHhY) 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 literal 0 HcmV?d00001 diff --git a/app/javascript/images/mailer-new/welcome/feature_moderation.png b/app/javascript/images/mailer-new/welcome/feature_moderation.png new file mode 100644 index 0000000000000000000000000000000000000000..7cee9b29b86721f3ef856e4c9ef48baaa6f9a2e2 GIT binary patch literal 100525 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

uwUG1ZfKBh(|D}V&vP|oww#~w40 zZeIunwgF54yjs8z6tJRllw%B_-2xT}fCNY+M5q9|ff{oC3YT1bsTyVd&j8i+mz5if z>BoMedgxVGUBwoyGt}o)0a{C+y0lET1#st`cEPT@>}ERHuYdjP>T5g`Km!t?;5Yz) zy4WoO()2C{g~Agf};CsYKuhym&I&p&TLCPEc&jVP!PXaJ+<&Lk6QE)5Q5il!}*=kh*&zidooK z$@$xxGeQuUJyU9-&8}Uw{A~E{EF2~vB;YF&lNB>Ur1DsB=>Uixbs3g8GB>sbGYM7( zl&p*8G#qRrDPcU?aozRJ@))MUj%-VuN2EU-&j#sN=#Ige&0JDZXvG&6 zfed@Rpcsce5C^fr`WvV|dm}XzItd%9{&L41cfkJpe;VIcBcL6&-`)Zs{PLH-R6pS( zb+KF=BCr4oC!KVX`s8kB*1zYdk=8CZJBrPP4w55`q*zWL?` zPz{=kQDWF5m{++A5#VgK(A;L5txZHH4n~ZAZ^cDS#O`X9ecW-!sh;_R#zByDw<+Zo zj9XDL`_&*}V0_*m&ogd8xh`CE(M78Jxe_MUS!XI>^kK{QZ3)vMs~G#6-~1+y_{I^&DW87&=`KFD`}f{! zZ~W?4zcS++H8wLNGPQa&pXDU*NFK-~1K^R*$187Ij1LDYQFXw&s*YF=F^Y*_RSat` zaw@(xwTJrN>b#9L35B_`N&6#m-I}Knk4=FzD*035c`!I*K&_A8K!0PbeSaN=C}r-) z|5l+~{F#D<*k@{RY5M5UZHUw!0YaZwL@n;Fh;jsGlX$2qp=fxe8+-oiU;h%tJ|;0R z@>GPMeUEdk*kzYpmHQp70SbO-qU*yB`wBMQY*R2$U3U(! zm*!Fx56@5+o~0CoPdwoS71=KcL{Y<%wJOmVeKE#Ts%JakfX|r4wDyM;RY$7ifd@<% zrY~B>k<$WYsEY=+S8#Mgt~J+OOU2|1YME#+or0d;bC>D54msoywKTrfIBi|vt$~`Y?n+6TPXq+AcEBk^5 z)=)RCak>!*sp}6phi9JRuoivNq#>2Bc}U!-f(B!mM*(?REVJ~oh)i6ThDi(rg%B+g zwFF7*D95&F$N+<>kdIc{O-C9<(BpuUC~G8`x^5xBNrb6yJQRF~ zG@w%Ol?wYLQ!`T6L1}NVT@HQ9Oh3V)vi()Nfb3d+Zf#B-;b=d@x>us)`7ynX^jO_X zC>fXa(yK40Vlvkm4?z(kT42Ct{gQ+QqKMId_hzg_&=yDKYExqt1>=Ja)b`nDALtk= z-CO{f#B3%_-%7y6s&))|bdet$rWdwiV-c|pf`V2W*u$X&H>l-5oDIU^Zt%lEIwVMLIK!O*}j&pQr-jp+yo6~H(EHgvNy0jsUDhHZpKn>vI*NL-!}yuUnndj^uh z#kbZs{ck4;0L88;fkV~J&^2Gif*>OzG8R(5*42gAb^W}G{iovLM<2j{o_PY&hyY!! z#_YLW7G5Lu>k*j5f^LXl;=D`YbNhW2V>lK808;=4gyehxV(yw<7CoD4R!lmaa zSlZ3qD?@O=^srkQ&=&tr0&z@xs{$~@z{-H?#aA)_u2DdVH1n|`G#u<&E0V}Ys)oR! zhkn_DQ78as&l}+cRyCsQ!viGwDjAs7Em`sApXGogpaU^kc7Z9A*RAFkwwX|Uw;l;V z3gZz#;*im&L?oBPBp_3MMtdFz@MZ(B2n6T|fQLJ_7^8{e*H$+hlg2o=2Q5VPcW_`R z_A!(WI934MFaYku$>$#H0Bl`3cnbqW0!HJbG|tri0W<@ zc*MlW5JS|>xXS2UHQnYo7ZL`9*ziOQ2`I*zx~M?easVS#QQuyD?G;Q@5FW%J;8C%F zjB96G+3@^Yj|kc<3xWt1p6{JFX#cNa6vm_Y!UKiYUx9c3-C^)rZ+)780^_Z;~ibp-PM{KH#t)lb`9&Qd*C&iQpE^`6WHg{*AbG-Jsnmo)p4 z9OG2-D_I!k*uGzI8Gv)(b#^*A7Vo3#459MzmhCC`_>789m&II1tO2r6*?Gmph%2q@ zA~qI;2*A=yFFh5k0d_4zhXly4Dc^ zYU@S}mm(ws?P#UFx*nJ$XKo9aAT2J^#@^Eb7s#l#_+Y;`x;IfQ`jsr%scOk8p(Y&)_{{%EY} z7lKr;3vyOH7e_EUj?|2!Q4Ay>7`gziq3RM~K$#-gA%06?7v+&&g2dSp%}O{F#AP>8 zGC#+Vk268WjF|b+vvX6PAZe;WxY!Srn2p{4Ow=dB40C%1F@+;mTAS*Fw5a zM_3bBL&3K$G8RiftnqoT(S!rnlHAH4cy7@LkF+?Gd~?O8F?I{yoaJ@Np_^shPhUpn z3viGb8L172cnD?^mRK`?v`g|P_)WPEc(54_JA!kl888~)vR-oIme8aWnH*smAP8Fj zMUw98dMtswu3ck?{YI}V^>xer&i=af2=;QTLG~K!=JwQ-g|#jo&VPbuwc6Lc&iafKPhm)bK{;u+F&O=_okFy#VAuPcOrU=UDZc|P4$ zvb{LY;>VH*+UvCoz#P^(S?;tL0Yt6IIBC+PyCzSbe4qx@|5cPYZwTQn3BCjqw;sMJ zea=1rj@e@hASe*en5q7~nldS3Y%>>}?sT^OKEsm0GP*Usp)ZaBpD1z9!)nc}= z5tu(QOK4C6S_QkM$Le%TeOG?cqs^*<$?7nWVZka~(JM=A-cwiX> zhHlqc0uar{W~okd>XHMlcPZ**eIumIj|r8CsH!*^bO`Q;zi6&MS;i=qfo!hifV-dbM&ja^?PMfI&9fH&fy1Y-3gk$ysR-e~As@EMZpmbli zSGS%>t_zoJ}&CL zXwGaB4Tzr8ulu#ie_79A?Jl^`#MLx6?JaJT4S|x1pmR<*<$$xX7qTIh6wD6FzU#6#KW(~fAC5h%wUG=DAh z=$t<^U0vFKXsw7F7tTEU6ibTF5FkvV5lQ)_3sNuk>zJaTL|s_C7PyJnl{*au^+f3y z2IvXQM}nesG3L$|9fH}bC=h7^OaYFwZV!-waapP>Eyql<`ko{DV?^v5g(%V6fg~X> z)1Vnl<4X%`a=!&XNe%Bj)_S?VbSWMY>DaiwSGRqVI_|flx?*FBAtHzehLJjOH_)xI zkrD&mE{Gjo=MeX>bWe8VFx&Iw+I-=K7ls;-C@@n&nW#wr7X3S9_ghN6S6_XV3dB%A z&g6dinCBrdjpv+q-n-X(*ZSv$Mu5=$9KEz>$2zNEjWzy4Qtr4j9OTFYu*cHvc+7|x z31Y1I2H6Gpiqu*`iv*C(ES24?0bnu{@5=CkniwUVX+T6@jA*hCN1yyP$QU!if{=M8 zG3$@%_ZL_*)&QXWO+k-(05Qu86OH;X4@H7>h;@9!epE2>@gmv7p@zsl?1W zNqdp7%KBX7pLcjo+QpY#LZ;xG0&(76$`MQQw_m6nyQvf-j*o@4WL` z;&vq&KYlzka0r}$X;8w1c_u^^XTvhbL34ONYLfyNH95HiIR{|WfNud%>#e2R%_pq6TE#@uWpE~d zm|k}vPCiG*Dce0cD2EV4#nV*rG?Xj>ypkv=yBL~P)UMX!X_)breSzW&zAy!{5g|%J zr}36e5#K#An;#+G+9WLQKg&T6$~4*VQ_16AL*U|LrW+lQHK`jr6@T{f z2K7QxvPyf(uFN8GH>9Cc4w5w-aApZjr8XmDwQmVs#t$m^=3p=FaL#$#i!QpTC9$028RRVtzO`@9?C0F-ty~EYcn&lInpM`L5Is9k{>VgXFwZ(8oFUNJfxdGh=2q%a z04WGn4su_&yCnr*7F>|v)QKBXzQ)^irP7<~or=oBSqRWk53)|}f_Qe#!PiN_mkP?_ zpF1!scWiD-sqvPAvG1-c@HL`}rA0Yo_?UwP@kH+dKtwyA_ksC0glE`%B zR#=ByR2-CH2jU<(q^}dnAtMVq;=4Oi7N#;M(OinqbWQ{yCDC_>0kNGMrUGx&lKOK& z$&9$tepNqg=gJM|{YWL276oF62pgjs=F((-#t;M&lGv=0K*)`O;7QKAH$f680DQIz|7|^_7DYwC441jMHKU^8gLXb62AR`tERHV~(GeBeZ zR5Iss6z#V>6pRg%|Uo0ma?_%9tvY}!UTd`K2Foq70Q86^N6p}UAZh<=BQoGWA`ls@BwWv0uE(Kq=uBILZfM_Hvsz_Q=kazG^AQnBR z>w}ftRmniub>u*^W=JD%mOBe|z;mF$E&!17!jIWQWI&mudk%Ouk@rmoEl8z1=$1&! zhGZp(AcFZu2z1M6sqSY4*nSY4?A zcsOL>Tjqk{$rv)cW1AV3(ATEhkdUlZ&{fK3mUaU=P#VkWkeO9ou zMF&jGiA0cHc}C1eqDp|C*RZZLb+^AbL|l?EYc?$w|Gw$4D;f8c#j_TH{VQ{^^#F#p zK-lGxdE4!`E6m$!w{Fcd6am<+)iRDxIvcaib1X*fVHlyh`CR$+Qd&p}+4FW**RwQ< zbjD#Xzx?v@?|=WhWCbmqinIHQoM;&o?en^Y*d3Eo_FPG_fx~6!HHjV^e2dr9`jwI# zm5Wo(9UBO1ff8IyowzVjt)vANsTf*0Vn~eh1>jY}IWY=ix`0YPU7;q3MY1uH+0Oyb zj(&UOb2-wMxn(f>```bLuYK*S#`%8tyWhq7>u=x-Sx4eTwYjjmQxb?{cUo-UJ~K9T9zb4j|z%(m_Fqs*g?8(nx4v!)9fTxqNcLID z?8!fH9WWI`qGE_w%9+VFAGC%8R+2W2q|nMZ%g_BD*9o^HW31ek*p}^43(>QJuDErz zi>v*p6W8JyoIAEjW+m?zp9kfFtI(H#;xI&PXXn|H&}amNRGLC5`fys>L#;C~IEY6d zeHbsj{DK*IE%A;eG5-Sd+q_NI4Zt0@-+}G7-vOgWje66<=ef@B$tRyQYi}Kwx1CU6O(T_Iv&}Xe<|d>^p5k-nzyL0~ag$*~{2z`B{(QFQOAtEPYw4euQBI>zsHsPCANdB8?3Sueoh2O~p zAoJiQwAy8mjk)Q+46(e08t`N}6lt;UPyoS}f&HZEZReZxEMrOsV-|@uy4J4i7SfoO z+ZGu@k4to3SBVtR?h&A1NR}lh64wD&9I%tra=9Gv;CwP!VKsn?;wv7 zGK5|;2b{8)wf4bM(P(zB#4?D||7^EkK|(PDtXz+aSy)%fbA^2B^6w?&&pXVzwBpGa zAkke%%M3{wP$kE~cEVNG>VVs{NM_z}8vu}7Nka>=zdK3Zz|5*Tm&emZ(n_(#nCVLO z>c~VKO%+3XLVu(QACx_0LmCnoFc_N^zzV=LkU~Cu!C+JH;~)PBuT6OsKl;&+u;fxp z;`!&F$B92Z2|qgaIQ;ULzd&Ha`V1ks^{AdVQsV-U!9FLMagp>n_j4_=;?(=>*x%oe zH{N(7T~Hz7ZAP>9yZrLY@Y&CP)~&!n((eD$pDx!O;3HUi>81T8MPFY-k2WqFCrSG} z74_*x#keTF&wn8L%qL(A{f-oX5d!U6tbRC+5D;{{BEaCx0R$3#I&ORZC=iJE-zrzM z2S~9o`)45psP(%6ib$yHN?FuZB6cp4r*tF52(!vk-RAnj3opRwXPjY|MvWegUz~h0 zM1Y`kH|_N|@V)PSUpJ*s*mtw@PCMa~pZp|3qmgqLN;1U51}kJV071j!IMe#|)Z@Mk zQV1tuY&mDlfH7aH{QZ|GMG7N7{IUuJ|wiJw6>4!x@h{|mm=%&V6Y1_Jhn^knqse2YBcqp^9R@ouf zK86`t^Ub%wJoC(BBE-Azz8lLdvkb1i_FC;@Lu|9nHpK_W5*qLQ0c%T)>qCkYP@R&=~1}prW>)#F1z}5OrJg-=bn2mCQh8_0ZXd+z1zmA z*DVJ3$3OmY&67M9dXFvOmtA%#o__inyY~L~zhAlDMR4YsXX1qyU)1OL3r6eW|Dg|k z2n$YJ0FOTOFfLGFP?s-ET6Q_?yz?$tRQ_g-9n$)yGa+ibUO3c?_1n}#n=nW=i|OX{ViLT%BGs(Y4MIc2Zz5QTkjTijYX@#TWjE-~av(*jwj) zqm4EKN#%0q^HiF)@%q}=565)X2S23W$&ugq2KLzFgP1Vi1dlFLyKxAN5Cl-PP?AVk zZVM%l;<}W0(F?#~nv6$(kit4ht6P)Iy?DJdoo2mASZeO8@20zP6-Y*)?ra;AfB#8T zHUYo_2VCHCDtTCI36KsAd-6V@RW~ z#GuRc!_FD!V4t?D+^^(%;xt%?E>I?-R?Z4^ZkMcm75e)6vHYavaOtI&V1o@dz{)GH z1hRouS6u}wuDD|L#WzjQdiL4B!&+;tjmIB<97i90lyRC{ZM8K{KmBy$P`BG|djq8t zPdw3p?$e*%UyqOD*kg}1k+yC!pkS)t_cRVZ`11-hOK6|#qaV?GF2)W!?4aN^21>Z&jyrT*&)H@`V`RGs7~lHVx3KND+hV!pmQ%6vwYG8i z=}&)(XPWB>j4#~I3X>HHbDtYUpsp*``y1NY;LUpN@+ z>bO^4d1c&r`<*!dyz}wf-<*oYmv{&6xb-$1rdGOJ>l`e$*kbtYsi)bqExX(#=y#$0 zJ&S`5I!OCl7VECNu7S03@%X_Het@;tUK{71e?F9KEP4;FzWQq1dFP!rf2x{zQw+d3 zn*cZa+uj@f4pr6gUV8^xZJf;&DT-~lURR09RNV;9tDTs!T%^#K)nNwSBSGy-T{r@p!yX9*5RIV6>Qh4#CtRjR7HLU zq9QQes{)|ug;!Z+Wi`;+9!o8?6hy?hV&#ZUH%kWNJdZr`8w%(v*)HxUKRMn+vfumO zccIqX$`$U00}nh9%C(yAuN7^u{`&aixqq}imAi(LZW=CCj(BJ2rbEXw6@Xyz#TSRR zZ)4ZZg#z(5(DrqHUNW#&>4Aaq5=$(J-FM#|S6p$00{STBruI+{>})a99|Z$( z_z_>jN(#K+RzQy;*mI9P@r8rGfD13U00$rPMI3+p@itdS9C3s_&*bNy!vO~z;KoEa z_0&_LbD_`qJ>z&k@{y02WZ}2J{Vjg@!ynpxs$Zqd-0+s7n5R;TscK!46%P(hKE=dzB-*b=E zg95Xj-viw^Kt$Zf*~F_J&FIlbA2UF|@WP8+>|!8#-+lL?MDx$T0Jh$GYbfX{P;F`) z`Th6*3n!d#f{89kY8%lu5IR>1tXG=YSVi;3UA^?u%cdt*fHuHW@ww@G-~H~5O^i7> zFcX8#0lSxhXbukG_SLIS?b zB|)Nu0_9@r0)UF&S|INS>4sn!avT=ipA3v$l&y<%Ktk@Wq=bqC78OMs2)k8u6{v#> zVDzOy0+U^}uMJuX3-rLipow|a($xGc6@(Pjey>JZ$Kvy!|2)WGB?RY2QqBbU<~P5k zoayZfKIEB^0!9$!#G{Hs@8ch4&MQo zq=}YQhi+p^xxCC;y2ZJSh(9xlj!9$~AuYia#UTF7S;VK*ej$WlqWfv;*5$w^ep%qs z6*M7k$W^r=C{I}g7(ogQ;HgK%Tn`Irk;1Sx-5>)nYz`RC$=7qhJ(}xCL<>yx3<9vD z2n?9J&ymAiqT6XCECW6z7J)VM|INX>jH#zBF> zIgK=-fEIBM!t{1mU3DdX{p(Y(&N^#XBIXkm;BHpn3054m0WpwULUno5Uw<8+``m#F zXk(0XRrivi#B|nA^1`Rwoy$MLPxtuxgYE7rBk<*Ok(FfwVHNgf-&5RRG;O zV0QrB5*@J-fe35MfY=Hk$^AmKMIy1d(RCN668Su!zHX1^5~9166Yy_84ptmf*``kl zM;5$loN^H~+P8u(bCr2Qe#s55{N9>&q;Sj^Flj&XR^gt4kymvdvhbJgC+v0L7H_(k z`#qjt7>#kG9c)1$bv-I^1jeyyq#@PO9;G_oPZ;Q^dz1Rq9*^agH=wD+yG@8BoUFhA zML9y_@@~8BHU*WjcTkIBAOFDe%Po)39Pk+&uk*0Z+UsD|RaV6f zH{M|S`=6h55t8ocIkA?`j+rI6oz6Mg*<`rcNZiN>EO#GJiJhAe)ZAMc=Y>Emp)y=a!w`zwEoI~u z%miFIBpG*0X52|`3PThrI#`y7T}Ts%9?f0k4sRl;-eKDN&oF!(FXkjDt4U=zR?zv) z6s0_|aK`DDLA%TW*ZKFB4ZPY1XHSAmpAZ#8QztG>24P1}wy(rWe;8G-831?^2j_q- zUUWm0%ojJn zD(61Q+Rz{(YEX8Ng647ft{Of~TyUaV zIe!YLoN|h74)huDsZZ^1+_Q>@q0$0oAuRj>}b^?t2nY zAs5k??hXBY5YmmJDjhI~bi0d;2$Di6JrP{ecqVqvt_d<~6P!h4=(?=0+oQRWJb;Tp zst9duhFWFrOsp8vP5_S1jIas@SS5F)ykXWw3dzpf%?&I$IA_;6#G)oHdUnx(PN3_A zk@Xcllw~3C2%ZBlIAbu0%0ko=O|+}rn;BcFIN5+nxl47$8D9ml0M<~zQ89G|3{cLu zsiNCmtCuA}4Vny8m76qBQ?hoI3sxQ8ItrkcpAt?a)yjHDHBj2z^v^1uHGs^gOZzwO zS`DoX;FJu+e*EJf8{m4tj}LulZ)*pjxeIATEE~&c?Q@LYzmDn=`x^b$-UmMLe)T!t z(Lho`-CUX!EN#J8gD4fB{{(|GXPWL;$*iLdhzAEO7{_?s5ShpuHWqU$+UJw|*mVVH zZ_A%k-L$qc?pH$ zH&82*N?B}Bubcj!6Px;7|C(_NA(Q8X=U zk_K;47vWSHko{k&Ak6CZ>-da_?UCp z*00A4DX5rtXpLOifTI=13?LkLA%1Mzn9ELG(nWjReAI3!>O83qR| zbbr?&`-BV|q;11=!37tnzW!Hcy)87s-MBRd zK?(UhL%bxRDCsXrS5|2~>QRmm5s?ByV=^o>38xko1 zle8;>&d*CgAf>;(&3Zj;Er(p<%1h}ia==Z`(_FM+*wPq{^e-qid?MiYdLHc*s*NvozBdL4X2;O5B}9w@O&!Y_Uk@LZk<> zJsJT;a1she;C|{E43)_lGS>sU2Th6TY*$Rp8o*?oAyo}GjC?SuF_-sArShQLm$m14 ziYwsF^})HKoQeL|Ev4z!(AC6K{gMdfg4N=7y``2}=9&<~D6j(#cn(h!Snm^Ao6#hr z2$3d00fgl`k{GqoZZ`@UH!p;9uWcoNXrG3D?kKV2c@I+PjVLA-2oj)VbLSKZNbV-o z!TXU*5N7Gdf&xKABR25z>o4JBU-&4RjfjAdN3kjguEDIP9`z_zQl);Zpd9dNC!B&& zeWO~eT|r3BmvOu@1h*?Swv+88V<0JoA8av$ksnFc1)|Q|ErhykJF^6f50?PC8s`WA z9&^kwnLgNb!4?He&t3d%0WMqz?BJ{7XI7c}MdJrkBPdN?a+#(72Vx0-_Ss-TIlF+q zgJ-1`us&2Gb1<%X&bfdR;LZ27v3^rOOesZfbT-0|Wl_s!4h}*X5zuhM#g?LeiWUd( z5g1>OdL&t5{%&0sJokJ7a65NHsu3Zxg}Aw$;2e?zeF2-9yCn@H(}ehVy#GWO>>RLx zZ+dh}68fhi2Txnb5Q3b2_Suuy+hG0s&}b}yxt2I<+hTHb64sAk?gruRt-b02_|2a; z0U87-g1_B!mj!ScOqdA~Xo*DtMqtlasz)Pe-{{ga4)xoSDgxq=>QKdrGCt+lSh&tM zU-lxGS{Jk<6FGNlY}MXim2xqgi=!QgwU}#?2hvVO&{f8yTvqDm>f8Frj`Phw|5=*n zcQixrKnNHKVia^rk;4}?`{Ec7x==W_vQvolsr6(C047I3LeQlMx{DwVWpTV@2k{ZK zHk6j6ei3+MIi=eyHe(18XawR7wX)v-u+QMXuRV=uBIrH{eUw8b+-FTlfx=u%8&+xT zg6ZkiosD(dMvWQ~Gy&za6GVSWu~_RQckiBzjI_K_maXHWF5w zJL1}ghA_C2{Jag4F2flJl`?~pEL>QgWyxHSq?P_U<%X50QKGKX$V*qKQOj;`ZU4c# z;PtbrZF+f&#zCm@KZVTV>_q~w>|M{|wluF)s5?S)?tAbifUEyXubRj;hzuc=kH`f&irAo+;wn@Ra)G~7*&hrnnW6#t#_lx|?@u%C&h3w$#i5fJ( z#g|@JQ2vtoo~{XC64{t#3mIh&5IPG$j%W|FMbBLyD|mL!d;(F-lDiL^!q9a&GLIn? z41^}`*Jx;`{^3jv(sQo@(at^BZ$y#EG6U7I8&Z#Y6wxFr0Cwx=(CH7ua?88gQtgK_ z;O$xmJQq;+t`#l0;VOUwciCl^$tsH8PqXu!fPgh2$Sq9U?}j-D6HZcFSBjRjIe`&Q zq~D)KIq8W1&7VQ$nlOKqROZAEgx9rp`r@}Txw z+6GTb)}aSv5GjIbkt8HK;QW3+(n{VhV!H6NP4LZCBmr{@bTyTerk?yZ|8xeFU|<{Mw7S=<-W&iIyqTr&-g|Fkl7(v(z-r z8VLt$>=xeKx^5d$CW7qMoulhgARz$Kz^aR_gtJaQ1EU(Ffvh=QzeU&a+zlx`Pjdq2 z1{!FQj6vSU0Bpn#K5GMnO&m>)kY#^gbHfcQt+K*O+ciRC)BaKY%K|d47JxI}ifK2( z)Dqp!(`;1?5D|lhM88gmfWELw$nS5GX|P}c1A`ERc>6IDVwaF-$tp@y7z>70v{Hz& z=55axLYRQrPGTj0!q;A(hS#P|L6kvHGVrFx5e_VaWE815O3X46wx7am#>_YH*nb|y zU4Q=@?!5a>yf%Fbn$iSAunH0c5dgab;7kYHjU~?8wQjF22}CVKKUQ9B1)P2InHbeq zjD+O?oCB;>fjA_~2^Vs2mNfkz zUwOsPJ&*PBUfOOu?bEZo2)5FkNFImMs|h}iM> zDLf;BZ?@T{DjANZEv4!t*WI`Z@Jue-rAonPg$ecou1P) zpXY2nKwn)goC%|+w>yl<1uZK9%;ofx(*f(|8ns6aUM=#4CeBIF>`0~py z<4tdR)3}#|kWJpKH}gfk$YYRyMvSL=G$L-}nv*a*=JvN9<8gn>^+yU5;vQ(327IIA zcmDhj@Uy@4vq0-0RIe}I2O-;|vx%({jPb;y{!Bm1%CM#8QQ%Zb<= z9@N^yK{E7yG&OV&MPi3~_uZ{};M%#=9~svQc0ioGQK=-0(RMR)--z3Wy?*J%yi5J^ z<6Up}Q8RR+AADpI$b3FX7JGeb%jF>5NX9GKkaF4ME6O)km$`?NG9Ae`VrKGX7Us;w z$d}2r%5<&ybJfRHtcPP$@14i?Pg=NLGfn(R!W`yfD|crDTO-y>FP%)%W6VanrUmnO zHWHSbq-|Z;%+SOn*G0xck1r+A{{h{OTFZURa?O%Olv>Sm(d#X1qT!0IbuAWyRBcAa zgpFCbO02=lT?XrYo<(iry#Slax`e)Qt^ldnmBIG<+C@2c%X8`2d`zn6uI>lX*#I5T zj|a&W*6zXCHdnra7+;uow3BeW_Y$PEdqulcn=Vz=6(635IUA8yhH#xg>w7j_AExrO z+_iK2JT!Dh)3}kcX~x4eEs2uMBpt^!$k@K0i1^?C{olXsl~-Q*)`!UpnrM(34p#^K z)}Q_+e(D!~2Av&SWVbM>R2*`nPW(hDyntI?S6QzD@lRO4%n2imL#XR!F-GO%3nQ!N zVybg}u3Vbte%13MDqz>1QQc=j$rd(leEyWcqWyRl6rx`_o3fp*ec}gx1pfF}{s>Q8 zJzG0rt(c(0_bm$2jeQOH-sI+SKE1q5xtP`!Ow#clC*P@#TITYZ#8qPJYev2m&NN}A zrgGO@jgWiqkVJRd>X@Psx+ZMrlNL{71*wko}0O(aDub3wt9 zeULz@PBbwYi@JYRAGpcVA;aeB$9u8*lks`H&^a5=7-?m~#(OKvijwiV=|7n(6RM|q z#JyjRg<~~gTh{J!NZWosEN^G|`6pOZt9h>N%C88Fq%5KLVu_=7dyny`SZFaPg0L=p zoY#O8@=c%M{Mo~drDei`MDs=QW{UfY<)2q$l`ebgAM4druU^k$iV^9r2>3YB)$2 z3RVn4#oP(vI16%^y!>#dmsv;#`NCmEUV!y?@2&y+bIik0W&}BtZbiaO%8*?z+6crL zN!!J78~ZXo$2RJpka@X|gikvMB96FWmbUN1VarI^$QVY#l8kt3tHbtf3KzjLgkdDx z=|8M))b&f+HDfJ!ZZo77SC*usPXwH-JxVzN(*S{h9V-UxnFg$&jZOVvhnNkLenf3d z=LDQahLev`=O$=n@ri2!9wMHX3q7wxgs7>l4zWY?-?LiPu1o$5v-yi1X7c>So`z$f z2BB*Za4~oO)t})Q$Iz&6TeL#5-gloXSWdpRGgk0^PRsW-;Kg#E$PB}{J*le4Lzay* zxAf8T5o5btqz+EzbPn^kpNDf9-Gl=t;o(8u+(C;Lv}5cg{_p?(?{7a6^ta=hMPUuB z$>SF{;rIXI5Agjz@&@oG+^n?|ZIJ_fqepoCa_K1)R!=^E$=21}roQ z;@GS1n)IRL6F&4~@aMnzXL$PRDI}_x*iLJ}@>GQN8gPECUITtS2{@0c=NfTM!1bQt zWkL_ZJZ%4Kp>1vxH;>#;ECZSIc$S@gEt+9Xo4!tLT5>bzEZeGNTCkTjAG2xD-*F`7 zZ@;J(y8+wLA%6@Ma0TE%;UE9?pYf$%`{g*?aDvYB()wl9E1qDACHP)qF<~{8rgaA- zFN!6bUrqa!hx44;4LE-hM?$EudAlUbcBMGaI_q;|8=s5$VEG&(0ShRep*B7LI9K^x z&gHr4$4(X;1S6bBN_uJOk7L1xCz;4%sPx-`8#%F!nXX5Yv zD+AcA*I}2mobc{n5uqGVX%$u9EZ+PjM=kWDk{PWS-;PwSYBbJ*FX?u!`7#Z{C(8C%y^o#u3LOc@ExgIv+E(qn~XP zYyKP*u<|lGmH``k%FxnF#~m2YJoO~5aMSygE@3HTXH%YzFrN1{;EU%APKcSP_k-1@ z>Ud90&bWy8N?rfJD3o)?7iM)Hzw15kd5>Z6+H0?k^=yW^8MNWyoHfdttp|H3OLNxx zj-yl7cdiYV3&Gl}__nQB13o}hay^;NCslhUeNvYFZl2JColD~9IMlj zV`x7V;=mIv}$%q}_QtE5qS)YYo_F2<>1gs+st5`nHj*PwN^LPWI zZa3>Q=I7v8D~;mhJFv<6cnd$jjGR?D?0B2akMw;XV?m?Jgj8I+BmwV4JezZ)nPJ%d zWBI-CfgIDVM4RG0`+b2_1EY6q|`(mh}g~;GKkpB(`K4BbM#mbo}z5g!&;hW zG=~@T|NY|(d(am>ub$OPQGO%tfbsX(#U(@(-2ksh@oE$>Gd3JfvZou$iGfaK|u3Z_4gO@Sf#@9#HPxOkKqW(N^p_NUJyT zVpw8P$g?(hjawwP-8HUr0sE+LB6-w%&eeB-LZrde13FQViY!R`8t{tnL9U&<_MDro z6RGdnE-P=3!Xz#K&auVHow8tO+cRuy!Xao!i?O4R$9F{yn2mU}WtVkN_FZZ0CoU!) z+c52SMDsF-te^qQ19QmMf*TqhGTCL9UG^W39EZKf!m?WVj$S3-nt*o^)nu0q z3h65zj!`@c9M+u%>au7CkJs$GnYevDS(8@WeLu1NvD)6?5#QPl+2I=SiG(d=j_ z#}LEG@?9RlY4?KOE-bv0XR>5QaxRplXx`Y63_+-*_TpyYQLVZj_xkq3yq%qx>1)!a z4HGU$a&2(&=vnk=S@bpG7^;#-FX-=n_St8@YhNGS*NAu7<+??Z-uHdq_jy|~tM>Xn z_rd-w@Bw>zzacnxlI z>tl!&KGp=h%P#JO^?bc-H?HUB%nMplz75F>c3FRE=u&Sjk~w*X_OkN2p34(8$yCF) zYi^!4EjVsZapRns5 z^-BIw=_94Xh$xL%7OC4|ZJiUaLZCvzTV4}U=pA_XyKkTBfA-m%;7I5YNgZw1QXgO0 zMGzaGpHdO_%I{{{CYox%`!=NeD;h`seLZ~Hg>$tQ+I5LfG4mgllkd=eWru(6!8=;V z03D~Y5u(y$tg(!USpU!7S->{3Bw_fg9@~Mp%$qDT95XXBGlS@u`9u%Ibm)D|%*@Qp z%Mf1P^kK{N>EWMWlOnYqu+j6qsO8)7UIS-H;Q5qo_=aQmtT4{!^341 zK&csKu8db44nOdTTPH`c{MD4U(%J~P>82sMq(=4<_RJHEYLAf+K8q zC^m~C-$V+=hA9{mUZx4xERwESX&C{}^R#(W&;}It?HlIIGcTvRyNBu1*VEU(mweu% zW9}^G&Y4MjTPr3f2!{!*MFdI*OOz`Cb7oD?B)qDYO+P*~tY-KfFB*u>wWjAe+S`q)p=;W$!pjK7 zH|`UTR<&ebZZ#nmz3+dj`kM9c)Jn$HoUv@p0TzoBm{p%V0?Qdr? zuyY@^Prx(6=FM9;`<(N6{P8Erf)Uu!-OnYLT+J=F-^Yuaw&QD#eWgM6mP)+1c`FY- z_BfSt8P6j#LqkK{bkl8|6F!f1r=81=u6_=dD&hZ^QatrMuDR}3_Ut>*P|8^$JjWr{ zuir@N&=4EL$JWz3!2bQE=(2we4uaxvj5$2xy_BDV0BO_X1duvypfTc7(2oBFtu-I1 z>1~b$IWESEQ_%68V-o#zu|pO%q*h75>+bvbNAV2q zf8YtuI{RWSx$IgVc<^zG>&^~;KT0LAj5QpNzy?`{-X!gT)BGEp6PDxX7kAYNaNU{2 zVH6w<@~_2OJ3y1-j_gl`Rs%&wln(y!SotVCs~1e)6O5vU=qr+6o>|KJg^IJNg+J8sU+L zAE$p{Aam8SF(!Qc@8=Vr`Z!_~KNu#k0T{#bRV%~i^aUnNnt;*(BFycW!^%~wn7?Q~ zi;tsH3Iy+`Y;;6uknXjTH?{n3aS0ieX>&&wTJCnda$;_V~;$+>t6ec%uNg;P{`+4yl^3& zC#Wc>jrNvTEL}otAy30vsqlu^zlPU`3t;uig#d`ct6sTm%(hoJ9ICp$!8rkSC(OAB z*l{#^q2s@G6zd61Rzug`uDUY%N? zHFXwg_{D-Zzxj39Ut1xHnuEY{-g%c$ES^d6pJyU!Lt$IXw5gN%R2a!lpFS;f#j+}( z%7Oj+$r(Z+p2yl%%Q>Mv&(2+aSWCl*C}5E~a|D$!g~JioOx#?@XFnc56VF$VT8~mt z7Xdqt6`JCDr76*{ywrzraB%Q%lP6DJ*NlOa!2)0-ar7`KiXbS3LV>ru_9U;N@{SiO2R z6WUwp>h9&4XV)V_!;eu%Nq`&177m9EEMjC^=u2>Az34S|`HMaAQv_IP0KwrnGM^Vo z`5hy5e#`B*-#+Ud?|4Tsm&<)HPIEUKHbsD}wHQE*LE|Swe62xMK?N~n##X1Yc-3>p z?MVi~7{MxuD16knrTQ3%&Wou&LIqEtdKF^g$9`mHb{fV84u`77TWcewQt6vhrcAkJ zlui(`m~yyb436U|z_BY#x(KKIz2W%{FJHKH;i+L%`HJ!E#H6YupT9iaG4xovH2KLj*hVbLgIL|lIeL;c=iw+HMvwj}$38yQr+a_!1z z@4WNQPX2Nr# z+M!CNa%ERn*H=zC<&?93`qQ75QbacPFsN@GoN{?e7Eh1F9t!)xxc%3py7p@(SKW5iwK=ffE(!`%=cmacPZn)hCv*@PK95p zT9Dv1sXzbOVOXVoetx#EudkJk^;9S?^C?h1v`1(NARBy`@Gt0@J{O*R6VV#*V&8ar zdK$mYZEF7qlXsiEaXoBv0QXOz<*b!nv;sMDBB1T)FggQnJnUsG$%M7+{M*uw?@t)c zuPFWJ{>#hD-`De@w!VMI0dkuGGRsqddYkF>{dH{rX4+2y7y@iWk8d~ohZk5LKMZsR z{5W(5?9(wL_>#!*4$VQ>K{WgoDFtWBDog394v-_dl76bgex^JhNX#Eb{2t4i1LBwi zqPAb{sO5~~ZQ*+3`ju~Qus6~{%R#?2h{Uqkzk}O*&bE|&(aZw`lTaq`4hl$OPoZJV z{{H>&9nsq9YtEi++2L_00JGzAXmkL!i7^odP4BE2MB}fEaJKB3@g|uu>2BYdvj?i= z^eRIJ3%O1pD@WTWa(!kYrpd$57r?8(!7c?5{Xj4BFYp)i9gykm#(H?^C&cUP>pYz1 zmqSNF;&e3A@$_?iT(5Niz7idPwbKpgW5Zu$@G_>?`^du>nSoyZ@j3eis62nDu=!9i zfc8pgooSkU{pmW{#|-il*8zM5HfG&xz_SSf{oC8y`aylu^7r@m^{Z^SJ`6M(csm1b zTnqDzSAcIu`~Kj61F&QG_N3vj{3~xZ_>S_-rwB4bkf7%_f{f~RF`txA2u*>HL090p zuYXx@(=rUa3)Vw6eC#nFdngMg*^dmsjSj$^1yeTb!Fa$MvV&y8+LXwJ^*@C3@x6?U zAy4$_HNupB=b`$aU+;!BMwc7bTjF2!53C7GJ5a}jf2AJPMamVh#;yHRnV=6O-Z2nc zL(r7~JZ1p4K#sv1)dIgM?GvG#N!}>d!Ekj)i_+W9f zZ!y<{?WT0~y4KfU@8fcR_ykYQ`t^r3*d8b1`e`UWU_wsFY_zJuIX)RU<;4~88PUNvh&-fq|QWtXa9l? z1)#IgW!|EOb>C5$0XG^0o)9%yTYP>r2VmacOEf$nKM3{NS-#y|XI=-c``+u9qp+(anRwh&VGF@#;V7ASnYdo_|gW~=^Kp#}sGXMQ&K%+1j6l|pr$`0uyvNx?? z>T-SgoZHn_Za)F=i>^?2gw-aIZhLZYK=!S|48UuYE#igu5SU$)7>-xHyVkf=uXpz!9*Zy&35F_1}&G* zkl}Qtzg(s^Fy`fHVA09%qb(y|Y$KEjr0t?J$aPxuvFXE_{1&^Sf1z&h5zwe!dVhub z#c9yL+BU5-xfMyv2yr{X#_}?z!4d)I0T})j9h<54U$4QRk|^ZAiCr3i8;v2Iy0U-j zz*i=ts*S8W^Dteb+ILLLLAJild3u56dF~Z}8;wyUw;(v=gBQ_z`BiPwgH!Hr-)i|R ztH9T_xZt6JXEYf3J-)pUxN-A6!wAWyahuXQfL#rp;yf5ksmy#DQfc`sH4Hwp_#&(} z`uzMf_oeas0BYL@ZtW8NCP2qTaLM~uWveW$_mV)b2U_?89@S%dk{-Y=@H@!8cLv;O z?7pC7{^Xep+_CH=e_|Ss*V*7f!_L^v3wH_{G-JmYv$LTJnjdk-RV_aaXLht}wADp>7@89CXLNfn9 zNqgtZxcyd_dDNrPfUJQBf&h?3gB*}2e1$=-pbn8K{>f$>BVRAqPdW&1cntu)Iv*=N z)3A@qP76z{;mVSSbpUQO1hADvuklMhLMwD2TXacG3G;{C75O?x99;Ng{OdBF-&@z- zEwZc9vM(GEOjRar?*hLXevK&q1*pNYRZf0PC))sz0WH`E{Chkb9r6(EeanCHI{mKA x|7s5oNB{r;00jMi-Ht#V0{{R30000003dOv)7Mdach&#^002ovPDHLkV1mF}7WM!D literal 0 HcmV?d00001 diff --git a/app/javascript/images/mailer-new/welcome/step2-off.png b/app/javascript/images/mailer-new/welcome/follow_step-off.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/step2-off.png rename to app/javascript/images/mailer-new/welcome/follow_step-off.png diff --git a/app/javascript/images/mailer-new/welcome/follow_step-on.png b/app/javascript/images/mailer-new/welcome/follow_step-on.png new file mode 100644 index 0000000000000000000000000000000000000000..3ac011539bb9dea99d69c66af361273770113129 GIT binary patch literal 1227 zcmV;+1T_1JP)FT(QR z2Xe4>|4X~q?fR46mntNRxXr^(AgvWxV7PFP_wR1lkP?w1X(dM8t#3bD=Zd#r!BI+B z>ub)^=H(sdVXt>e;;9JS`sY{E=`5W$nG`^b@RX1(d+>7qw|~9y^?dvVMjpva2A!ar z?QYi?Uq2Fsa~=*`l9!HPiXW{x?WdP_2GHv%TsMk9Oc*3D8+5c4x{6;%0&(ardbTYB zx{8N#B=E(h?>ayf!rmN20Vl%Ak6-wFxC%re1b2+X?|uZT@Cu;V{dlCW;*Lrg5#L0Yms?Pp|Yg z1+JBxB~y>U^tvsLYU;VNG-3!hNk~yB3u{6GH6ekT%w<2YPUfy3ST_ym2bTB~8uX8~ zR0nE8b)Y7cg*738nvg(EYMlco_503Z-!O$+hU!fsllp!7`<@Cl4B;~UzS;Sml}BLl zI!~8+>%>}y@GRGPSx^?%gam3r0yQClnsDyB72Sd|{}>_&xTnrZAWGqbko8}q1r|t-9=^0MR;%oL?JGDS8V(q z3EbP=lW)YzF%Y@np{u>!-KcsQ719sxF4>k6RMKRCj;@BT;@2nIkk_tX6Oa6jb(bCm znh47K#`yVp9DT@%Q#l;UzCCzJk$4((f^Np;A&HG}io}y7MP5u|GXW#<=DpQtlvv&; zjGfR$k~}2yQVd4pee*(x4gFtQ p&dak0Q5ZH=&WU4hQ1Ih0-T@>J_*{MRBw_#n002ovPDHLkV1klpLdyUE literal 0 HcmV?d00001 diff --git a/app/javascript/images/mailer-new/welcome/step3-off.png b/app/javascript/images/mailer-new/welcome/post_step-off.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/step3-off.png rename to app/javascript/images/mailer-new/welcome/post_step-off.png diff --git a/app/javascript/images/mailer-new/welcome/post_step-on.png b/app/javascript/images/mailer-new/welcome/post_step-on.png new file mode 100644 index 0000000000000000000000000000000000000000..aa318e66c8573400568c4437d96d5b8baf048582 GIT binary patch literal 1552 zcmV+r2JiWaP)HD3M#0E2m;kDdjfH&Paq5nfE6UoT;J`pMWPEyqU^3gkU z9C;qjIfx=RH(Q%py0%vPeP^dfVowAvfA@u1D^6WBnG~RDQAZ*3R^`?1m*3Yr&-2a$ ziaagPA96x&R?B6h^L$GbwRu!+wY>fahWu!@R(N@BtpYncNatD+NF9cjHyCoXtXwsZ zJ%Lnp&wFnh26EM`%AUY~u6$esO(?9TiWhJ~HGcfkyVV)cghKF|ad`Ff6TYm5XP^m< zBe`-11#YXcEog?KDF4fGCZ|o%48`lZG`Y#%=+tFM43L7m=V*o{Zm1pPpoxSQ7!fTn zB3fWX445DsGhbr1{0ul-04Xgnj9-OoKY;|97=aRu+hEJP$XE$zqKT{Q%tdg(+-Kmf z3y}Me025J#9W=g1U}YeAy(}W|$0+hwAptTkkmMV#MG*HOW=7TqN-kCa`AX}AiwA-^ zTVbx@S8Y`l-A9B|ai|1czLe~@OolEs* zgG%h%=BauqnF(hls^9c_8||0FErIdpf{6XHbVBuzvrn#LmB0 z|Eqgc1`;4qfnMY_<)LcK1$(I4p+=+54g}f*qc2ErOY}%=kfb~!F@av2*Q&Nmr4w>p zxZ$c$PRfoe3ekyUxb_#=>a4e>H1k4RM~LK6f1o=c-VA`{bD zX_ZH$USOK#5vf`eK^JaF-rjB37~7^+9+9p^CAILQq^_Ox4$R%cfZ%pS%hO-42 zF?xSsL`EVI{dY~pba6=T+5t#TAamQBcwF3+AQmBJ=$eSQ)_zTv=w?bk66-|N3fvP1 z`9Wi6Kna0wJ6t>pyFStnFRG=x+1?Y#_LJU?>PMozFca=q-opARiz*Ut2UtfBh8nU^ zhTVEC4y|o%qa@KbkfM-r_m*m>297p{N3A(?c558bMlpmN?M@heW(QvH9-P`KoRQhhz6o<<7e|Xny7dG@-zPaYF9AH0CnA zI08*5uGDW>^xG4-y|FD{i|J#~1cED9+Z!8R_R>nEU+hg;ITSjj82~xDsa!RWyFSIX zzO^p?aOUT1eJfC3NZyCWr++u2kLVi8QB`)V$}1g-y^s@f(xmJC@T9V@Rh5 zJ~%AM_b%jI%gE7<8z<%7gCvY5RZ8NxUJ3bi822lkB%yLDuN&!xu^DspM_nyQR4s7 zaQvMgx0y3$XLQPzD8)i2q!SF>2%X~*M&at&C)^T*@(J`Lr;b=i< zweti8bIia5pOe@Uf4qG!0uox{6U~#oq=#qZbe-a}^}r9-^S}tj_CwIhO->MDhCm)& z#F?2};)d7ccHxF1*o3gTC0-RZ_J*KGQw$7AsRpvF0G(U)hT1d?UDqD~RaR?IZa`J5 zsx?#7O{EUDpU5+&;nW=2{cS#ev&0!=i3#Cyxs;YQiKgdJF$@FBDpb`fkEmv=n4!EH zXU97R8)rdE5=LkY3Pv=c3ucMD+N(CAWKSDs+fnhM!5k$}k>sMSU7+XvKQxN=(HR@z z>w5o5ocXH+!x7HtA`STRrpHC9#O$RQF`D|6UhF10oKZ%z8BKtyNeZ~{p@77N=VSx% zJkyOchT;Ibwk2{BiIC8A8n$kCWZh6ZJwN&vDpKX#_T1o8)jU+Cjc8HauKQ;~*CDVqme`zjnQIaRC+PUcLOX z*FTQA=u@t4N4Tf+mvPIrJAVFo^84qPb~*m=@$%+tpIi!M;l;bsugTr7--_qsIs^Mn H_vy<&)hi%y literal 0 HcmV?d00001 diff --git a/app/javascript/images/mailer-new/welcome/purple-extra-soft-wave.png b/app/javascript/images/mailer-new/welcome/purple-extra-soft-wave.png new file mode 100644 index 0000000000000000000000000000000000000000..ba8f6dd3d989dc0dd74fe25cc20233375ecc87c8 GIT binary patch literal 2531 zcmaJ@dpuO@8eT;xKf0)t>uT(_h*@J?#*7h@L8H)di5=0HS=E%8HD;z}+)E0v4QE%B zP{-NPCUuG=mnb16QXSbC_YycqJiMVve5m*2Q!3S9!Ta2viJ_cklZ81KU zt~gh&1AK_JBa8=ohPin$!j3SAOpM(&kSrph0&G}72Sw~)4xc2l#eC5vq48oG!hl~O zf+Mz=KTY|%?gkwY9t;w(W~K}r&I}}=k%blBnn)xN2qqvNhc}0CRuJCO6mL$lB#_K3 zz^@kut;k~@AbC)ozScumwwOZ#0ha_pLZJ{VG{+*mgOC}KNQ7{B2#+^K5vKf5j({#Q z-dd$P`3qdU3hK3R>#M*8kq z8rgq12L;t?NeqdV60iOUo9@3`nHazDdupdlQOCUovSZ~rl2gv7lK)7~@>9@NB-%s0 z;kMH@;;7tDR{y z$s)#Z0*x!DBXQ|Ha}jGPmHvf$#^R-9z0^y~`BUZQp_(PdCEdp?%C{oMZiltH?i`rZ zunxA^x6IT3VwZSbb*M?kh{>IY@cWmEn-In@D4C1H<<4Zfv|TCx)$dK&esyg*vDtiH z@t($DhP%N@qm%A$#HFXJIqS#FNU91tyUH}B#r8yg(Gyv$h+HLK)uyi&J)T&>`w9E3 ztYqK1>b%t-ACsM5dUFGsDy|uhRrI@B&$$>rT>kom8s@Wc{jf78Et$7b6ptiMG;Ond zSEKFIb~Q=s#12{Kwx?_FRcO_K;|xlG+HV(zOoH3TYIL9Fk}csB1RRqbOI_(!p)_?{ z&3hm!O}~9<@6D{ymR9duhqJrZRo4r(*At&M#py^V4N?>Tb!oDpxA2BfbS=Awv7u?O z&!nzYV|zyE1peTf*IMtoM;pY6T;Y7eNw=*90na@|suNhnnSTA?m;PRl*l#7cq#>go z{|JS7wJD2SQL1xm8eEiCFtv( zTWf$!^{(U_4K1P+pR=BOu_oEp=_(ohM#c|@LvNfKce#?NXFC9kG|w3s4uv~aEE!~^ zM?cNaJ^C)TJ5s6CT0doY*n2Of4-!)i8qO&;ZudI(jP0GalTo6`1W4= zy%aFgz*+9z;Ju_}zM%n#(FX23;wty2mFP+*Kcx3*bQk=);M86hu{EFjy8Rx|lV-$(OPWxLl0WcS&je-3UA6k}$mb zqt4LI_LiS(63LjTch3Rfwe8ahkeg!|t!`Pbk8g4&_{=N}Vmjlk(eLZ($TH)d20Mjf zqxurZ+1Bxe=Bs7W#0TYx+Kqmj)Pd%^7KfuY_RdZ4og3@)q&9J3$&&#|d99f8axDV@ z2(m1psFvlz*Fwo>>-4ZZuj0?Soy^nPx&aJB{j)7qKB)|acL zjqTL1h&AVD@B>fUuFvt0v?pKY1sk%?mTkFT`zdN&b}6kd8~_BZ?|oF0=b$P;^VO7Z U#)Uf}i@#koM>lHW_Wd#c0U#_+bpQYW literal 0 HcmV?d00001 diff --git a/app/javascript/images/mailer-new/welcome/step4-off.png b/app/javascript/images/mailer-new/welcome/share_step-off.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/step4-off.png rename to app/javascript/images/mailer-new/welcome/share_step-off.png diff --git a/app/javascript/images/mailer-new/welcome/share_step-on.png b/app/javascript/images/mailer-new/welcome/share_step-on.png new file mode 100644 index 0000000000000000000000000000000000000000..98782d931739c220410da17bb5a5ddba3ab8e2d1 GIT binary patch literal 1639 zcmV-t2AKJYP)xd-Z*i~ zDHRgwiS$6F3Xv#C1qzMx&-Tu~&KrBzPO^!2{ckq${4VuOcP-`TH#2YEY#fAyl*?uD z)5jadv5G8g=R9w(TJ?%v9^n+Q=hvuMDENNe_wyxHz4LT(Pyf6@l6yM}xLLmGRi-}~ z->Lq0=ClY)f*+{e^UvR{ES1atan~Iw#6;ZmMk!GFaTsBQtZlD6o2$3IqH7> z;H?XSL;*$|BALH%zB)F2?RNE#rKLj>4@KbY_h06!rLl84R1zE!b&{%3*?qP0)erUd ze$n3G$aC`IVJGb7X1VOO_eY|5&f{V01+6A_km-)gfx zLj*T;d&0D}WCF3M0Olm9HL!?vfkfiLK6wHk>eBCmtXDVp4Pn#~hhk2Pyx;7))VNpO z1&df6!aV1-4_QR~#tUj?kL4YJBTZ6$fv<@=^}XgjEMirl4zMtqv^@AuQmy0Sz}M*Y zAuEAo`dviJxd7d;4jzWtIiZy{U2%>pU56dTM7J~q_Jc-Lu z2j`5IuqIFs-zdO`?J~YVQ&%PMS~!eIDs{FKk2=C=Q1DdN&wdc)l<)*{le-T zhytU$PY=m26y`hTbmkhwd(nF!EPzF<3N(pxD++li>q3EdKQ6E1A+C2F-|{uBUR+L+ zd=C=*=*O=o!6J=ff;do2piKnv1Vl5v3GgaGpi5lXHc#Rjf^x+K7N8LBHj4_4gjkCr zpj$dRZ#CLnRcJpv#APk-o^5$dCh|ZQ;bHx*DHISKv!ZHoTyTJz^~ej!R7Kj%X9$mo zxJ7QK*U z={PgQs=(vUfe)egZ2Ef0nnWuCo4b!rXTXQyhsj1gjY)J491E`7-uK2abb(3Ffs@egpLmR@qo&zVP zDeqpZ2M1dAI#pY_gYtNuMWlhIKBq=toIHM-3kJ-o5NJytbK(Wsl*bHFVEfYp{dtnW zwmfEdX-t%}#it%=Y3yo}$m0)-+FtjUp>E~+S`09inTD9-BCp>c+(9yVsFZ{>Vg^~o zIk5tnER?t0nMjW~fjuIGU&~mL{N&*23W=!GgaSub_#l-ySMqD%=nBfox~Rw{oVQxkx+=J7G8N@|f7Ck6k40Cob|rVv7kJiNE}Q_HVbaG!~58+C`i^ zrsMPP9F5O&7fZP3pMepLl9juID=_!kJwA18Qkqp03FlMgChp1-*9w0!p< l3*(~7gxs$0ru=glZvd^Ls7@-yC .email-desktop-column { + direction: ltr; + + [dir='rtl'] & { + direction: rtl; + } + } +} + +.email-desktop-column { + display: inline-block; + width: 100%; + max-width: none; + text-align: start; + vertical-align: top; + font-size: 16px; +} + // Header .email-header-td { padding: 16px 32px; @@ -312,6 +348,66 @@ table + p { } } +.email-header-card-table { + width: 100%; + border-collapse: separate; + overflow: hidden; + border-radius: 12px; + background-color: #fff; + border: 2px solid #fff; + box-shadow: 0 4px 16px 0 rgba(23, 6, 59, 8%); +} + +.email-header-card { + position: relative; + max-height: 100px; +} + +.email-header-card-banner-td { + border-radius: 12px 12px 0 0; + height: 80px; + background-color: #f3f2f5 !important; + background-position: center !important; + background-size: cover !important; +} + +.email-header-card-body-td { + padding: 12px; + + .email-btn-table { + width: 100%; + max-width: 212px; + } +} + +.email-header-card-instance { + margin-bottom: 4px; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-all; + color: #17063b; + font-size: 14px; + line-height: 20px; + font-weight: 600; + + &:only-of-type { + margin-bottom: 12px; + } +} + +.email-header-card-description { + margin-bottom: 12px; + color: #746a89; + font-size: 12px; + line-height: 16px; + max-height: 32px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; +} + // To make the design work with images off // we create an empty div that overlaps with // the rest of the content with a dark background. @@ -336,6 +432,16 @@ table + p { mso-padding-alt: 32px; } +.email-body-columns-td { + border-top: 1px solid #dfdee3; + padding: 32px 24px 8px; +} + +.email-body-huge-padding-td { + padding: 110px 32px 32px; + mso-padding-alt: 32px; +} + .email-body-padding-td { & > p { font-size: 14px; @@ -353,6 +459,30 @@ table + p { } } +// Texts +.email-h2 { + margin-bottom: 4px; + color: #17063b; + font-size: 18px; + font-weight: 600; + line-height: 28px; +} + +.email-h-sub { + margin-bottom: 16px; + color: #746a89; + font-size: 14px; + line-height: 16px; +} + +.email-p { + margin-bottom: 16px; + color: #746a89; + font-size: 14px; + font-weight: 400; + line-height: 20px; +} + // Footer .email-footer-td { padding: 28px 32px 32px; @@ -539,8 +669,13 @@ table + p { background-color: #fff; } +.email-checklist-checked { + border-color: #c4e6d7; + background-color: #eaf6f1; +} + .email-checklist-td { - padding: 16px; + padding: 16px 16px 6px; } .email-checklist-icons-td { @@ -576,10 +711,15 @@ table + p { font-size: 14px; font-weight: 600; line-height: 16.8px; + + .email-checklist-checked & { + color: #746a89; + text-decoration: line-through; + } } p { - margin: 0 0 2px; + margin: 0 0 12px; color: #746a89; font-size: 14px; line-height: 16.8px; @@ -597,6 +737,194 @@ table + p { padding-left: 10px; padding-right: 10px; } + + div + div { + margin-inline-start: auto; + margin-bottom: 12px; + } +} + +// Welcome email +.email-welcome-apps-btns { + font-size: 12px; + line-height: 44px; +} + +.email-column-td { + padding: 0 8px; + vertical-align: top; +} + +.email-link-with-arrow { + color: #6364ff; + font-size: 14px; + font-weight: 600; + line-height: 16.8px; + + &:hover { + color: #563acc !important; + } + + span { + font-size: 12px; + font-weight: 400; + } +} + +.email-column-action-td { + padding: 24px 0; + color: #6364ff; + font-size: 14px; + font-weight: 600; + line-height: 16.8px; + text-align: center; +} + +// Follow and hashtags +.email-mini-wrapper-td { + padding: 4px 0; + + table { + table-layout: fixed; + } +} + +.email-mini-td { + border-radius: 12px; + border: 1px solid #e8e6eb; + background-color: #fff; + padding: 15px 16px; +} + +.email-mini-follow-img-td { + width: 40px; + vertical-align: top; + + img { + border-radius: 8px; + } +} + +.email-mini-follow-text-td { + padding-left: 8px; + padding-right: 16px; + vertical-align: top; + + h3 { + color: #17063b; + font-size: 14px; + font-weight: 600; + line-height: 20px; + } + + p { + color: #746a89; + font-size: 12px; + font-weight: 400; + line-height: 16px; + } +} + +.email-mini-follow-btn-td { + width: 68px; + vertical-align: top; + + .email-btn-table { + width: 100%; + } + + .email-btn-td { + mso-padding-alt: 10px; + } + + .email-btn-a { + padding-left: 10px; + padding-right: 10px; + } +} + +.email-mini-hashtag-td { + height: 40px; + + td { + vertical-align: middle; + } + + h3 { + color: #17063b; + font-size: 14px; + font-weight: 600; + line-height: 20px; + } + + p { + color: #746a89; + font-size: 12px; + font-weight: 400; + line-height: 16px; + word-break: break-all; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } +} + +.email-mini-hashtag-img-td { + width: 40px; + height: 20px; + white-space: nowrap; + text-indent: -2px; + font-size: 0; + + & + td { + padding-left: 8px; + } +} + +.email-mini-hashtag-img-span { + display: inline-block; + max-width: 12px; + font-size: 12px; + + img { + width: 16px; + height: 16px; + border-radius: 50%; + max-width: none; + border: 2px solid #fff; + vertical-align: middle; + } +} + +// Extra content on light purple background +.email-extra-wave { + height: 42px; + background-image: url('../images/mailer-new/welcome/purple-extra-soft-wave.png'); + background-position: bottom center; + background-repeat: no-repeat; +} + +.email-extra-td { + padding: 32px 32px 24px; + background-color: #f0f0ff; + background-image: url('../images/mailer-new/welcome/purple-extra-soft-spacer.png'); // Using an image to maintain the color even in forced dark modes + + .email-column-td { + padding-top: 8px; + padding-bottom: 8px; + } +} + +// Feature card +.email-feature-wrapper-td { + padding: 8px 0; +} + +.email-feature-td { + padding: 24px; + background-color: #fff; + border: 1px solid #e8e6eb; + border-radius: 12px; } // Responsive @@ -617,4 +945,21 @@ table + p { .email-desktop-flex { display: flex; } + + .email-header-left { + padding-right: 32px; + } + + .email-header-right { + width: 240px; + margin-inline-start: auto; + } + + .email-desktop-column { + max-width: 346px !important; + } + + .email-desktop-text-right { + text-align: right; + } } diff --git a/app/mailers/user_mailer.rb b/app/mailers/user_mailer.rb index 3b1a085cb8..96fcd51efa 100644 --- a/app/mailers/user_mailer.rb +++ b/app/mailers/user_mailer.rb @@ -135,6 +135,12 @@ class UserMailer < Devise::Mailer return unless @resource.active_for_authentication? + @suggestions = AccountSuggestions.new(@resource.account).get(5) + @tags = Trends.tags.query.allowed.limit(5) + @has_account_fields = @resource.account.display_name.present? || @resource.account.note.present? || @resource.account.avatar.present? + @has_active_relationships = @resource.account.active_relationships.exists? + @has_statuses = @resource.account.statuses.exists? + I18n.with_locale(locale) do mail subject: default_i18n_subject end diff --git a/app/models/user.rb b/app/models/user.rb index f706c91eff..14c2bb6e0c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -490,7 +490,7 @@ class User < ApplicationRecord BootstrapTimelineWorker.perform_async(account_id) ActivityTracker.increment('activity:accounts:local') ActivityTracker.record('activity:logins', id) - UserMailer.welcome(self).deliver_later + UserMailer.welcome(self).deliver_later(wait: 1.hour) TriggerWebhookWorker.perform_async('account.approved', 'Account', account_id) end diff --git a/app/views/application/mailer/_button.html.haml b/app/views/application/mailer/_button.html.haml index 61430732eb..0bf80b505a 100644 --- a/app/views/application/mailer/_button.html.haml +++ b/app/views/application/mailer/_button.html.haml @@ -1,4 +1,7 @@ %table.email-btn-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-btn-td - = link_to "#{text} ➜", url, class: 'email-btn-a email-btn-hover' + - if defined?(has_arrow) && !has_arrow + = link_to text, url, class: 'email-btn-a email-btn-hover' + - else + = link_to "#{text} ➜", url, class: 'email-btn-a email-btn-hover' diff --git a/app/views/application/mailer/_checklist.html.haml b/app/views/application/mailer/_checklist.html.haml index 83072bd36b..31cd5bf35d 100644 --- a/app/views/application/mailer/_checklist.html.haml +++ b/app/views/application/mailer/_checklist.html.haml @@ -1,7 +1,7 @@ %table.email-w-full.email-checklist-wrapper-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr %td.email-checklist-wrapper-td - %table.email-w-full.email-checklist-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %table.email-w-full.email-checklist-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation', class: ('email-checklist-checked' if defined?(checked) && checked) } %tr %td.email-checklist-td %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } @@ -15,15 +15,25 @@ - else = image_tag frontend_asset_url('images/mailer-new/welcome/checkbox-off.png'), alt: '', width: 20, height: 20 %td.email-checklist-icons-step-td - - if defined?(step_image_url) - = image_tag step_image_url, alt: '', width: 40, height: 40 + - if defined?(key) + = image_tag frontend_asset_url("images/mailer-new/welcome/#{key}-#{checked ? 'on' : 'off'}.png"), alt: '', width: 40, height: 40 %td.email-checklist-text-td .email-desktop-flex + /[if mso] +
%div - if defined?(title) %h3= title - if defined?(text) %p= text + /[if mso] + %div - - if defined?(button_text) && defined?(button_url) && defined?(checked) && !checked - = render 'application/mailer/button', text: button_text, url: button_url + - if defined?(show_apps_buttons) && show_apps_buttons + .email-welcome-apps-btns + = link_to image_tag(frontend_asset_url('images/mailer-new/welcome/btn-app-store.png'), alt: t('user_mailer.welcome.apps_ios_action'), width: 120, height: 40), 'https://apps.apple.com/app/mastodon-for-iphone-and-ipad/id1571998974' + = link_to image_tag(frontend_asset_url('images/mailer-new/welcome/btn-google-play.png'), alt: t('user_mailer.welcome.apps_android_action'), width: 120, height: 40), 'https://play.google.com/store/apps/details?id=org.joinmastodon.android' + - elsif defined?(button_text) && defined?(button_url) && defined?(checked) && !checked + = render 'application/mailer/button', text: button_text, url: button_url, has_arrow: false + /[if mso] +
diff --git a/app/views/application/mailer/_feature.html.haml b/app/views/application/mailer/_feature.html.haml new file mode 100644 index 0000000000..d051338a9c --- /dev/null +++ b/app/views/application/mailer/_feature.html.haml @@ -0,0 +1,32 @@ +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-feature-wrapper-td + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-feature-td + .email-desktop-flex{ class: ('email-dir-rtl' if defined?(text_first_on_desktop) && !text_first_on_desktop) } + /[if mso] +
+ .email-desktop-column + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-column-td + - if defined?(feature_title) + %h2.email-h2= feature_title + - if defined?(feature_text) + %p.email-p= feature_text + - if defined?(feature_btn_url) + = link_to '', href: feature_btn_url, class: 'email-link-with-arrow' do + #{t('user_mailer.welcome.feature_action')}  + %span= '❯' + /[if mso] + + .email-desktop-column + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-column-td + - if defined?(key) + %p{ class: ('email-desktop-text-right' if defined?(text_first_on_desktop) && text_first_on_desktop) } + = image_tag frontend_asset_url("images/mailer-new/welcome/#{key}.png"), alt: '', width: 240, height: 230 + /[if mso] +
diff --git a/app/views/application/mailer/_follow.html.haml b/app/views/application/mailer/_follow.html.haml new file mode 100644 index 0000000000..382151a234 --- /dev/null +++ b/app/views/application/mailer/_follow.html.haml @@ -0,0 +1,15 @@ +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-mini-wrapper-td + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-mini-td + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-mini-follow-img-td + = image_tag full_asset_url(follow.account.avatar.url), alt: '', width: 40, height: 40 + %td.email-mini-follow-text-td + %h3= follow.account.display_name.presence || follow.account.username + %p @#{follow.account.pretty_acct} + %td.email-mini-follow-btn-td + = render 'application/mailer/button', text: t('user_mailer.welcome.follow_action'), url: web_url("@#{follow.account.acct}"), has_arrow: false diff --git a/app/views/application/mailer/_hashtag.html.haml b/app/views/application/mailer/_hashtag.html.haml new file mode 100644 index 0000000000..524fd7e274 --- /dev/null +++ b/app/views/application/mailer/_hashtag.html.haml @@ -0,0 +1,20 @@ +- accounts = hashtag.statuses.with_public_visibility.joins(:account).merge(Account.without_suspended.without_silenced).includes(:account).limit(3).map(&:account) + +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-mini-wrapper-td + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-mini-td + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-mini-hashtag-td{ height: 40 } + %h3 ##{hashtag.display_name} + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-mini-hashtag-img-td + - accounts.each do |account| + %span.email-mini-hashtag-img-span + = image_tag full_asset_url(account.avatar.url), alt: '', width: 16, height: 16 + %td + %p= t('user_mailer.welcome.hashtags_recent_count', people: number_with_delimiter(hashtag.history.aggregate(2.days.ago.to_date..Time.zone.today).accounts), days: 2) diff --git a/app/views/user_mailer/welcome.html.haml b/app/views/user_mailer/welcome.html.haml index b77d40fb05..e7f9c47e3b 100644 --- a/app/views/user_mailer/welcome.html.haml +++ b/app/views/user_mailer/welcome.html.haml @@ -1,25 +1,76 @@ +- instance_presenter = InstancePresenter.new + = content_for :heading do - = render 'application/mailer/heading', heading_title: t('user_mailer.welcome.title', name: @resource.account.username), heading_subtitle: t('user_mailer.welcome.explanation') + .email-desktop-flex + .email-header-left + = render 'application/mailer/heading', heading_title: t('user_mailer.welcome.title', name: @resource.account.username), heading_subtitle: t('user_mailer.welcome.explanation') + .email-header-right + .email-header-card + %table.email-header-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-header-card-banner-td{ height: 140, background: full_asset_url(instance_presenter.thumbnail&.file&.url(:'@1x') || frontend_asset_path('images/preview.png')) } + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-header-card-body-td + %p.email-header-card-instance= @instance + - if instance_presenter.description.present? + %p.email-header-card-description= instance_presenter.description + = render 'application/mailer/button', text: t('user_mailer.welcome.sign_in_action'), url: new_user_session_url, has_arrow: false + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } %tr - %td.email-body-padding-td - %table.email-inner-card-table{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } - %tr - %td.email-inner-card-td-without-padding - %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } - %tr - %td.email-prose.email-padding-24 - %p - %b= t 'user_mailer.welcome.full_handle' - = render 'application/mailer/frame', text: "#{@resource.account.username}@#{@instance}" - %p= t 'user_mailer.welcome.full_handle_hint', instance: @instance - %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } - %tr - %td.email-border-top.email-prose.email-padding-24 - %p= t 'user_mailer.welcome.edit_profile_step' - = render 'application/mailer/button', text: t('user_mailer.welcome.edit_profile_action'), url: settings_profile_url - %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } - %tr - %td.email-border-top.email-prose.email-padding-24 - %p= t 'user_mailer.welcome.edit_profile_step' - = render 'application/mailer/button', text: t('user_mailer.welcome.final_action'), url: web_url + %td.email-body-huge-padding-td + %h2.email-h2= t('user_mailer.welcome.checklist_title') + %p.email-h-sub= t('user_mailer.welcome.checklist_subtitle') + = render 'application/mailer/checklist', key: 'edit_profile_step', title: t('user_mailer.welcome.edit_profile_title'), text: t('user_mailer.welcome.edit_profile_step'), checked: @has_account_fields, button_text: t('user_mailer.welcome.edit_profile_action'), button_url: web_url('start/profile') + = render 'application/mailer/checklist', key: 'follow_step', title: t('user_mailer.welcome.follow_title'), text: t('user_mailer.welcome.follow_step'), checked: @has_active_relationships, button_text: t('user_mailer.welcome.follow_action'), button_url: web_url('start/follows') + = render 'application/mailer/checklist', key: 'post_step', title: t('user_mailer.welcome.post_title'), text: t('user_mailer.welcome.post_step'), checked: @has_statuses, button_text: t('user_mailer.welcome.post_action'), button_url: web_url + = render 'application/mailer/checklist', key: 'share_step', title: t('user_mailer.welcome.share_title'), text: t('user_mailer.welcome.share_step'), checked: false, button_text: t('user_mailer.welcome.share_action'), button_url: web_url('start/share') + = render 'application/mailer/checklist', key: 'apps_step', title: t('user_mailer.welcome.apps_title'), text: t('user_mailer.welcome.apps_step'), checked: false, show_apps_buttons: true +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-body-columns-td + .email-desktop-flex + /[if mso] +
+ .email-desktop-column + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-column-td + %h2.email-h2= t('user_mailer.welcome.follows_title') + %p.email-h-sub= t('user_mailer.welcome.follows_subtitle') + = render partial: 'application/mailer/follow', collection: @suggestions + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-column-action-td + = link_to '', href: web_url('explore/suggestions'), class: 'email-link-with-arrow' do + = t('user_mailer.welcome.follows_view_more') + %span= '❯' + /[if mso] + + .email-desktop-column + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-column-td + %h2.email-h2= t('user_mailer.welcome.hashtags_title') + %p.email-h-sub= t('user_mailer.welcome.hashtags_subtitle') + = render partial: 'application/mailer/hashtag', collection: @tags + %table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-column-action-td + = link_to '', href: web_url('explore/tags'), class: 'email-link-with-arrow' do + = t('user_mailer.welcome.hashtags_view_more') + %span= '❯' + /[if mso] +
+.email-extra-wave +%table.email-w-full{ cellspacing: 0, cellpadding: 0, border: 0, role: 'presentation' } + %tr + %td.email-extra-td + = render 'application/mailer/feature', key: 'feature_control', feature_title: t('user_mailer.welcome.feature_control_title'), feature_text: t('user_mailer.welcome.feature_control'), text_first_on_desktop: true + = render 'application/mailer/feature', key: 'feature_audience', feature_title: t('user_mailer.welcome.feature_audience_title'), feature_text: t('user_mailer.welcome.feature_audience'), text_first_on_desktop: false + = render 'application/mailer/feature', key: 'feature_moderation', feature_title: t('user_mailer.welcome.feature_moderation_title'), feature_text: t('user_mailer.welcome.feature_moderation'), text_first_on_desktop: true + = render 'application/mailer/feature', key: 'feature_creativity', feature_title: t('user_mailer.welcome.feature_creativity_title'), feature_text: t('user_mailer.welcome.feature_creativity'), text_first_on_desktop: false diff --git a/app/views/user_mailer/welcome.text.erb b/app/views/user_mailer/welcome.text.erb index d78cdb938a..150944605f 100644 --- a/app/views/user_mailer/welcome.text.erb +++ b/app/views/user_mailer/welcome.text.erb @@ -1,16 +1,78 @@ <%= t 'user_mailer.welcome.title', name: @resource.account.username %> <%= t 'user_mailer.welcome.explanation' %> -=== - -<%= t 'user_mailer.welcome.full_handle' %> (<%= "@#{@resource.account.local_username_and_domain}" %>) -<%= t 'user_mailer.welcome.full_handle_hint', instance: @instance %> - --- -<%= t 'user_mailer.welcome.edit_profile_step' %> +<%= t('user_mailer.welcome.sign_in_action') %> +=== +<%= new_user_session_url %> -=> <%= settings_profile_url %> +--- -<%= t 'user_mailer.welcome.final_step' %> +<%= t('user_mailer.welcome.checklist_title') %> +=== +<%= t('user_mailer.welcome.checklist_subtitle') %> -=> <%= web_url %> +1. <%= t('user_mailer.welcome.edit_profile_title') %> + <%= t('user_mailer.welcome.edit_profile_step') %> + * <%= web_url('start/profile') %> + +2. <%= t('user_mailer.welcome.follow_title') %> + <%= t('user_mailer.welcome.follow_step') %> + * <%= web_url('start/follows') %> + +3. <%= t('user_mailer.welcome.post_title') %> + <%= t('user_mailer.welcome.post_step') %> + * <%= web_url %> + +4. <%= t('user_mailer.welcome.share_title') %> + <%= t('user_mailer.welcome.share_step') %> + * <%= web_url('start/share') %> + +5. <%= t('user_mailer.welcome.apps_title') %> + <%= t('user_mailer.welcome.apps_step') %> + * iOS: https://apps.apple.com/app/mastodon-for-iphone-and-ipad/id1571998974 + * Android: https://play.google.com/store/apps/details?id=org.joinmastodon.android + +--- + +<%= t('user_mailer.welcome.follows_title') %> +=== +<%= t('user_mailer.welcome.follows_subtitle') %> + +<%- @suggestions.each do |suggestion| %> +* <%= suggestion.account.display_name.presence || suggestion.account.username %> · @<%= suggestion.account.pretty_acct %> + <%= web_url("@#{suggestion.account.acct}") %> +<%- end %> + +<%= web_url('explore/suggestions') %> + +--- + +<%= t('user_mailer.welcome.hashtags_title') %> +=== +<%= t('user_mailer.welcome.hashtags_subtitle') %> + +<%- @tags.each do |tag| %> +* #<%= tag.display_name %> · <%= t('user_mailer.welcome.hashtags_recent_count', people: number_with_delimiter(tag.history.aggregate(2.days.ago.to_date..Time.zone.today).accounts), days: 2) %> + <%= tag_url(tag) %> +<%- end %> + +<%= web_url('explore/tags') %> + +--- + +<%= t('user_mailer.welcome.feature_control_title') %> +=== +<%= word_wrap t('user_mailer.welcome.feature_control') %> + +<%= t('user_mailer.welcome.feature_audience_title') %> +=== +<%= word_wrap t('user_mailer.welcome.feature_audience') %> + +<%= t('user_mailer.welcome.feature_moderation_title') %> +=== +<%= word_wrap t('user_mailer.welcome.feature_moderation') %> + +<%= t('user_mailer.welcome.feature_creativity_title') %> +=== +<%= word_wrap t('user_mailer.welcome.feature_creativity') %> diff --git a/config/locales/an.yml b/config/locales/an.yml index 17077041da..edfdb44b35 100644 --- a/config/locales/an.yml +++ b/config/locales/an.yml @@ -1600,10 +1600,6 @@ an: edit_profile_action: Configurar lo perfil edit_profile_step: Puetz personalizar lo tuyo perfil puyando una foto de perfil, cambiando lo tuyo nombre d'usuario y muito mas. Puetz optar per revisar a los nuevos seguidores antes que puedan seguir-te. explanation: Aquí i hai qualques consellos pa empecipiar - final_action: Empecipiar a publicar - final_step: 'Empecipia a publicar! Mesmo sin seguidores, las tuyas publicacions publicas pueden estar vistas per atros, per eixemplo en a linia de tiempo local u en etiquetas. Tal vegada quieras presentar-te con a etiqueta de #presentacions.' - full_handle: Lo suyo sobrenombre completo - full_handle_hint: Esto ye lo que le dirías a los tuyos amigos pa que ells puedan ninviar-te mensaches u seguir-te dende unatra instancia. subject: Bienveniu a Mastodon title: Te damos la bienvenida a bordo, %{name}! users: diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 0927fba0af..2b2052172e 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -1969,10 +1969,6 @@ ar: edit_profile_action: تهيئة الملف التعريفي edit_profile_step: يمكنك تخصيص ملفك الشخصي عن طريق رفع صورة ملفك الشخصي, تغيير اسم العرض الخاص بك والمزيد. يمكنك اختيار مراجعة المتابعين الجدد قبل السماح لهم بمتابعتك. explanation: ها هي بعض النصائح قبل بداية الاستخدام - final_action: اشرَع في النشر - final_step: 'ابدأ في النشر! حتى بدون متابعين، منشوراتك العامة قد يشاهدها آخرون، على سبيل المثال في التوقيت المحلي أو في الوسوم. قد ترغب في تقديم نفسك على وسم #introductions.' - full_handle: عنوانك الكامل - full_handle_hint: هذا هو ما يجب تقديمه لأصدقائك قصد أن يكون بإمكانهم متابَعتك أو مُراسَلتك حتى و إن كانت حساباتهم على خوادم أخرى. subject: أهلًا بك على ماستدون title: أهلاً بك، %{name}! users: diff --git a/config/locales/ast.yml b/config/locales/ast.yml index 7e5a4c8876..da7e99c2fa 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -903,7 +903,6 @@ ast: edit_profile_action: Configurar el perfil edit_profile_step: Pues personalizar el perfil pente la xuba d'una semeya, el cambéu del nome visible ya muncho más. Tamién, si lo prefieres, pues revisar los perfiles nuevos enantes de que puedan siguite. explanation: Equí tienes dalgunos conseyos pa que comiences - final_action: Comenzar a espublizar subject: Afáyate en Mastodon title: "¡Afáyate, %{name}!" users: diff --git a/config/locales/be.yml b/config/locales/be.yml index 13cbcd8ffc..34e0722ba9 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -1910,10 +1910,6 @@ be: edit_profile_action: Наладзіць профіль edit_profile_step: Вы можаце наладзіць свой профіль, запампаваўшы выяву профілю, змяніўшы адлюстраванае імя і іншае. Вы можаце праглядаць новых падпісчыкаў, перш чым ім будзе дазволена падпісацца на вас. explanation: Вось некаторыя парады каб пачаць - final_action: Пачаць пісаць - final_step: 'Пачынайце пісаць! Нават, калі ў вас няма падпісчыкаў, іншыя людзі змогуць пабачыць вашыя допісы, напрыклад, у лакальнай стужцы, або праз хэштэгі. Калі хочаце, вы можаце прадставіцца праз хэштэг #introductions.' - full_handle: Ваш поўны маркер - full_handle_hint: Гэта тое, што вы дасце сваім сябрам, каб яны маглі адпраўляць паведамленні або падпісацца на вас з іншага сервера. subject: Вітаем у Mastodon title: Рады вітаць вас, %{name}! users: diff --git a/config/locales/bg.yml b/config/locales/bg.yml index b1229ac906..15c671d539 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -1841,10 +1841,6 @@ bg: edit_profile_action: Настройване на профила edit_profile_step: Може да настроите профила си, качвайки снимката на профила, променяйки показваното си име и други неща. Може да се включите за преглед на нови последователи преди да бъдат позволени да ви последват. explanation: Ето няколко стъпки за начало - final_action: Начало на публикуване - final_step: 'Публикувайте! Дори без да имате последователи, вашите публични публикации ще бъдат видени от други, например в местната хронология или под хаштагове. Не забравяйте да се представите с хаштаг #introductions.' - full_handle: Пълното ви име - full_handle_hint: Ето какво бихте казали на приятелите си, за да могат да ви изпращат съобщения или да ви последват от друг сървър. subject: Добре дошли в Mastodon title: Добре дошли на борда, %{name}! users: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index 4b5ec815ca..d80fb598e3 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -1846,10 +1846,6 @@ ca: edit_profile_action: Configura el perfil edit_profile_step: Pots personalitzar el teu perfil pujant-hi un avatar, canviant el teu nom de visualització i molt més. Si ho prefereixes, pots revisar els seguidors nous abans que et puguin seguir. explanation: Aquests són alguns consells per a començar - final_action: Comença a publicar - final_step: 'Comença a publicar! Fins i tot sense seguidors, els altres poden veure els teus missatges públics, per exemple, a la línia de temps local i a les etiquetes. És possible que vulguis presentar-te amb l''etiqueta #introductions.' - full_handle: El teu nom d'usuari sencer - full_handle_hint: Això és el que has de dir als teus amics perquè puguin enviar-te missatges o seguir-te des d'un altre servidor. subject: Et donem la benvinguda a Mastodon title: Benvingut a bord, %{name}! users: diff --git a/config/locales/ckb.yml b/config/locales/ckb.yml index 72a3c08d4d..fec8f73323 100644 --- a/config/locales/ckb.yml +++ b/config/locales/ckb.yml @@ -1035,9 +1035,6 @@ ckb: welcome: edit_profile_action: پرۆفایلی جێگیرکردن explanation: ئەمە چەند ئامۆژگارییەکن بۆ دەست پێکردنت - final_action: دەست بکە بە بڵاوکردنەوە - full_handle: ناوی بەکارهێنەری تەواوی ئێوە - full_handle_hint: ئەمە ئەو شتەیە کە بە هاوڕێکانت دەلێی بۆ ئەوەی پەیام یان لە ڕاژەیەکی دیکەی ترەوە بەدوات بکەون. subject: بەخێربیت بۆ ماستۆدۆن title: بەخێربێیت، بەکارهێنەر %{name}! users: diff --git a/config/locales/co.yml b/config/locales/co.yml index f5b6b46d92..c3c185c2f5 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -1050,9 +1050,6 @@ co: welcome: edit_profile_action: Cunfigurazione di u prufile explanation: Eccu alcune idee per principià - final_action: Principià à pustà - full_handle: U vostru identificatore cumplettu - full_handle_hint: Quessu ghjè cio chì direte à i vostri amichi per circavi, abbunassi à u vostru contu da altrò, o mandà missaghji. subject: Benvenutu·a nant’à Mastodon title: Benvenutu·a, %{name}! users: diff --git a/config/locales/cs.yml b/config/locales/cs.yml index e43f671590..69640a261f 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -1910,10 +1910,6 @@ cs: edit_profile_action: Nastavit profil edit_profile_step: Váš profil si můžete přizpůsobit nahráním profilového obrázku, změnou zobrazovaného jména a dalším. Můžete se přihlásit k přezkoumání nových následovatelů, než vás budou moci následovat. explanation: Zde je pár tipů do začátku - final_action: Začít psát - final_step: 'Začněte psát příspěvky! I bez sledujících mohou vaše veřejné příspěvky vidět ostatní, například na místní časové ose nebo v hashtagu. Možná se budete chtít představit na hashtagu #představení.' - full_handle: Vaše celá adresa profilu - full_handle_hint: Tohle je, co byste řekli svým přátelům, aby vám mohli posílat zprávy nebo vás sledovat z jiného serveru. subject: Vítejte na Mastodonu title: Vítejte na palubě, %{name}! users: diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 1fbcbb2255..19343146f3 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -1974,10 +1974,6 @@ cy: edit_profile_action: Sefydlu proffil edit_profile_step: Gallwch addasu'ch proffil trwy lwytho llun proffil, newid eich enw dangos a mwy. Gallwch ddewis i adolygu dilynwyr newydd cyn iddyn nhw gael caniatâd i'ch dilyn. explanation: Dyma ambell nodyn i'ch helpu i ddechrau - final_action: Dechrau postio - final_step: 'Dechreuwch bostio! Hyd yn oed heb ddilynwyr, efallai y bydd eraill yn gweld eich postiadau cyhoeddus, er enghraifft ar y ffrwd leol neu mewn hashnodau. Efallai y byddwch am gyflwyno eich hun ar yr hashnod #cyflwyniadau neu/a #introductions.' - full_handle: Eich enw llawn - full_handle_hint: Dyma beth fyddech chi'n ei ddweud wrth eich ffrindiau fel y gallant anfon neges neu eich dilyn o weinydd arall. subject: Croeso i Mastodon title: Croeso, %{name}! users: diff --git a/config/locales/da.yml b/config/locales/da.yml index 5ceaad9705..62e28cef16 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -1846,10 +1846,6 @@ da: edit_profile_action: Opsæt profil edit_profile_step: Man kan tilpasse sin profil ved at uploade profilfoto, overskrift, ændre visningsnavn mv. Ønskes nye følgere vurderet, før de må følge dig, kan kontoen låses. explanation: Her er nogle råd for at få dig i gang - final_action: Begynd at poste - final_step: 'Begynd at poste! Selv uden følgere vil offentlige indlæg kunne ses af andre f.eks. på den lokale tidslinje og i hashtags. Man kan introducere sig selv via hastagget #introductions.' - full_handle: Dit fulde brugernavn - full_handle_hint: Dette er, hvad du oplyser til dine venner, så de kan sende dig beskeder eller følge dig fra andre servere. subject: Velkommen til Mastodon title: Velkommen ombord, %{name}! users: diff --git a/config/locales/de.yml b/config/locales/de.yml index ae1af7b308..123942672e 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1846,10 +1846,6 @@ de: edit_profile_action: Profil einrichten edit_profile_step: Du kannst dein Profil anpassen, indem du ein Profilbild hochlädst, deinen Anzeigenamen änderst und vieles mehr. Du kannst dich dafür entscheiden, neue Follower zu überprüfen, bevor sie dir folgen dürfen. explanation: Hier sind ein paar Tipps, um loszulegen - final_action: Mit erstem Beitrag starten - final_step: 'Fang jetzt an zu posten! Selbst ohne Follower werden deine öffentlichen Beiträge von anderen gesehen, zum Beispiel in der lokalen Timeline oder über die Hashtags. Möglicherweise möchtest du dich allen mit dem Hashtag #neuhier vorstellen.' - full_handle: Dein vollständiger Profilname - full_handle_hint: Deinen vollständigen Profilnamen kannst du deinen Freund*innen mitteilen, damit sie dich anschreiben oder dir von einem anderen Server folgen können. subject: Willkommen bei Mastodon! title: Willkommen an Bord, %{name}! users: diff --git a/config/locales/el.yml b/config/locales/el.yml index 16c042f185..c641d4dca9 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -1707,10 +1707,6 @@ el: edit_profile_action: Στήσιμο προφίλ edit_profile_step: Μπορείς να προσαρμόσεις το προφίλ σου ανεβάζοντας μια εικόνα προφίλ, αλλάζοντας το εμφνιζόμενο όνομα και άλλα. Μπορείς να επιλέξεις να αξιολογείς νέους ακόλουθους πριν τους επιτραπεί να σε ακολουθήσουν. explanation: Μερικές συμβουλές για να ξεκινήσεις - final_action: Ξεκίνα να αναρτάς - final_step: 'Ξεκίνα να δημοσιεύεις! Ακόμα και χωρίς ακόλουθους τις δημόσιες δημοσιεύσεις σου μπορεί να τις δουν άλλοι, για παράδειγμα στην τοπική ροή ή στις ετικέτες. Ίσως να θέλεις να μας γνωρίσεις τον εαυτό σου με την ετικέτα #introductions.' - full_handle: Το πλήρες όνομά σου - full_handle_hint: Αυτό θα εδώ θα πεις στους φίλους σου για να σου μιλήσουν ή να σε ακολουθήσουν από άλλο διακομιστή. subject: Καλώς ήρθες στο Mastodon title: Καλώς όρισες, %{name}! users: diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index d4840c84e9..6b2554fe15 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1841,10 +1841,6 @@ en-GB: edit_profile_action: Setup profile edit_profile_step: You can customise your profile by uploading a profile picture, changing your display name and more. You can opt-in to review new followers before they’re allowed to follow you. explanation: Here are some tips to get you started - final_action: Start posting - final_step: 'Start posting! Even without followers, your public posts may be seen by others, for example on the local timeline or in hashtags. You may want to introduce yourself on the #introductions hashtag.' - full_handle: Your full handle - full_handle_hint: This is what you would tell your friends so they can message or follow you from another server. subject: Welcome to Mastodon title: Welcome aboard, %{name}! users: diff --git a/config/locales/en.yml b/config/locales/en.yml index efd603740a..cff244a4b9 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1844,13 +1844,42 @@ en: silence: Account limited suspend: Account suspended welcome: - edit_profile_action: Setup profile - edit_profile_step: You can customize your profile by uploading a profile picture, changing your display name and more. You can opt-in to review new followers before they’re allowed to follow you. + apps_android_action: Get it on Google Play + apps_ios_action: Download on the App Store + apps_step: Download our official apps. + apps_title: Mastodon apps + checklist_subtitle: 'Let''s get you started on this new social frontier:' + checklist_title: Welcome Checklist + edit_profile_action: Personalize + edit_profile_step: Boost your interactions by having a comprehensive profile. + edit_profile_title: Personalize your profile explanation: Here are some tips to get you started - final_action: Start posting - final_step: 'Start posting! Even without followers, your public posts may be seen by others, for example on the local timeline or in hashtags. You may want to introduce yourself on the #introductions hashtag.' - full_handle: Your full handle - full_handle_hint: This is what you would tell your friends so they can message or follow you from another server. + feature_action: Learn more + feature_audience: Mastodon provides you with a unique possibility of managing your audience without middlemen. Mastodon deployed on your own infrastructure allows you to follow and be followed from any other Mastodon server online and is under no one's control but yours. + feature_audience_title: Build your audience in confidence + feature_control: You know best what you want to see on your home feed. No algorithms or ads to waste your time. Follow anyone across any Mastodon server from a single account and receive their posts in chronological order, and make your corner of the internet a little more like you. + feature_control_title: Stay in control of your own timeline + feature_creativity: Mastodon supports audio, video and picture posts, accessibility descriptions, polls, content warnings, animated avatars, custom emojis, thumbnail crop control, and more, to help you express yourself online. Whether you're publishing your art, your music, or your podcast, Mastodon is there for you. + feature_creativity_title: Unparalleled creativity + feature_moderation: Mastodon puts decision making back in your hands. Each server creates their own rules and regulations, which are enforced locally and not top-down like corporate social media, making it the most flexible in responding to the needs of different groups of people. Join a server with the rules you agree with, or host your own. + feature_moderation_title: Moderating the way it should be + follow_action: Follow + follow_step: Following interesting people is what Mastodon is all about. + follow_title: Personalize your home feed + follows_subtitle: Follow well-known accounts + follows_title: Who to follow + follows_view_more: View more people to follow + hashtags_recent_count: "%{people} people in the past %{days} days" + hashtags_subtitle: Explore what’s trending since past 2 days + hashtags_title: Trending hashtags + hashtags_view_more: View more trending hashtags + post_action: Compose + post_step: Say hello to the world with text, photos, videos, or polls. + post_title: Make your first post + share_action: Share + share_step: Let your friends know how to find you on Mastodon. + share_title: Share your Mastodon profile + sign_in_action: Sign in subject: Welcome to Mastodon title: Welcome aboard, %{name}! users: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index beb6aa6d9f..bc694578b7 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -1763,10 +1763,6 @@ eo: edit_profile_action: Agordi profilon edit_profile_step: Vi povas personecigi vian profilon per alŝuti profilbildon, ŝangi vian montronomo kaj pli. explanation: Jen kelkaj konsiloj por helpi vin komenci - final_action: Ekmesaĝi - final_step: 'Ekmesaĝu! Eĉ sen sekvantoj, viaj publikaj mesaĝoj povas esti vidataj de aliaj, ekzemple en la loka templinio aŭ per kradvortoj. Eble vi ŝatus prezenti vin per la kradvorto #introductions / #konigo.' - full_handle: Via kompleta uzantnomo - full_handle_hint: Jen kion vi dirus al viaj amikoj, por ke ili mesaĝu aŭ sekvu vin de alia servilo. subject: Bonvenon en Mastodon title: Bonvenon, %{name}! users: diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 1db8e6ecf8..37fcc11d78 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1846,10 +1846,6 @@ es-AR: edit_profile_action: Configurar perfil edit_profile_step: Podés personalizar tu perfil subiendo un avatar (imagen de perfil), cambiando tu nombre a mostrar y más. Podés optar por revisar a los nuevos seguidores antes de que puedan seguirte. explanation: Aquí hay algunos consejos para empezar - final_action: Empezá a enviar mensajes - final_step: "¡Empezá a enviar mensajes! Incluso sin seguidores, tus mensajes públicos pueden ser vistos por otros, por ejemplo en la linea temporal local o al usar etiquetas. Capaz que quieras presentarte al mundo con la etiqueta «#presentación»." - full_handle: Tu nombre de usuario completo - full_handle_hint: Esto es lo que le dirás a tus contactos para que ellos puedan enviarte mensajes o seguirte desde otro servidor. subject: Bienvenido a Mastodon title: "¡Bienvenido a bordo, %{name}!" users: diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index db5c05322b..26dbc2dfb8 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1846,10 +1846,6 @@ es-MX: edit_profile_action: Configurar el perfil edit_profile_step: Puedes personalizar tu perfil subiendo una foto de perfil, cambiando tu nombre de usuario y mucho más. Puedes optar por revisar a los nuevos seguidores antes de que puedan seguirte. explanation: Aquí hay algunos consejos para empezar - final_action: Empezar a publicar - final_step: "¡Empieza a publicar! Incluso sin seguidores, tus publicaciones públicas pueden ser vistas por otros, por ejemplo en la línea de tiempo local o en etiquetas. Tal vez quieras presentarte con la etiqueta de #introducciones." - full_handle: Su sobrenombre completo - full_handle_hint: Esto es lo que le dirías a tus amigos para que ellos puedan enviarte mensajes o seguirte desde otra instancia. subject: Bienvenido a Mastodon title: Te damos la bienvenida a bordo, %{name}! users: diff --git a/config/locales/es.yml b/config/locales/es.yml index e5ccee5ee3..7956580138 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1846,10 +1846,6 @@ es: edit_profile_action: Configurar el perfil edit_profile_step: Puedes personalizar tu perfil subiendo una foto de perfil, cambiando tu nombre de usuario y mucho más. Puedes optar por revisar a los nuevos seguidores antes de que puedan seguirte. explanation: Aquí hay algunos consejos para empezar - final_action: Empezar a publicar - final_step: "¡Empieza a publicar! Incluso sin seguidores, tus publicaciones públicas pueden ser vistas por otros, por ejemplo en la línea de tiempo local o en etiquetas. Tal vez quieras presentarte con la etiqueta de #presentación." - full_handle: Su sobrenombre completo - full_handle_hint: Esto es lo que le dirías a tus amigos para que ellos puedan enviarte mensajes o seguirte desde otra instancia. subject: Bienvenido a Mastodon title: Te damos la bienvenida a bordo, %{name}! users: diff --git a/config/locales/et.yml b/config/locales/et.yml index c21ea0b971..ed25488ce4 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1846,10 +1846,6 @@ et: Kui mõni asi arusaamatuks jääb, siis võib vaadata juhendvideot: https://youtu.be/J4ItbTOAw7Q explanation: Siin on mõned nõuanded, mis aitavad alustada - final_action: Alusta postitamist - final_step: 'Nüüd tee oma esimene postitus. Hea tava on uues kohas ennast tutvustada ning kindlasti kasuta selles postituses ka silti #tutvustus. Isegi kui sul ei ole veel jälgijaid, siis su postitusi näevad kohalikul ajajoonel ka kõik teised serveri kasutajad.' - full_handle: Kasutajanimi Mastodon võrgustikus - full_handle_hint: Kui jagad kasutajanime väljaspool serverit, siis kasuta kindlasti pikka nime. Erinevates serverites võib olla sama kasutajanimega liikmeid. subject: Tere tulemast Mastodoni title: Tere tulemast, %{name}! users: diff --git a/config/locales/eu.yml b/config/locales/eu.yml index 6c625d08bd..fb3013e008 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -1847,10 +1847,6 @@ eu: edit_profile_action: Ezarri profila edit_profile_step: Pertsonalizatu profila abatar bat igoz, zure pantaila-izena aldatuz eta gehiago. Jarraitzaile berriak onartu aurretik berrikusi nahi badituzu, kontuari giltzarrapoa jarri diezaiokezu. explanation: Hona hasteko aholku batzuk - final_action: Hasi bidalketak argitaratzen - final_step: 'Hasi argitaratzen! Jarraitzailerik ez baduzu ere zure bidalketa publikoak besteek ikusi ditzakete, esaterako denbora-lerro lokalean eta traoletan. Zure burua aurkeztu nahi baduzu #aurkezpenak traola erabili zenezake.' - full_handle: Helbide osoa - full_handle_hint: Hau da lagunei esango zeniekeena beste zerbitzari batetik zu jarraitzeko edo zuri mezuak bidaltzeko. subject: Ongi etorri Mastodon-era title: Ongi etorri, %{name}! users: diff --git a/config/locales/fa.yml b/config/locales/fa.yml index f6ff379745..4339e06c34 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -1579,10 +1579,6 @@ fa: edit_profile_action: تنظیم نمایه edit_profile_step: می‌توانید نمایه‌تان را با بارگذاری تصویر نمایه، تغییر نام نمایشی و بیش از این‌‌ها سفارشی کنید. می‌توانید تعیین کنید که پی‌گیران جدید را پیش‌از این که بتوانند دنبالتان کنند بازبینی کنید. explanation: نکته‌هایی که برای آغاز کار به شما کمک می‌کنند - final_action: چیزی منتشر کنید - final_step: 'چیزی بنویسید! حتا بدون پی‌گیر ممکن است فرسته‌های عمومیتان دیده شود. برای مثال روی خط زمانی محلی یا در برچسب‌ها. شاید بخواهید با برچسب #معرفی خودتان را معرّفی کنید.' - full_handle: نام کاربری کامل شما - full_handle_hint: این چیزی است که باید به دوستانتان بگویید تا بتوانند از کارسازی دیگر به شما پیام داده یا پی‌گیرتان شوند. subject: به ماستودون خوش آمدید title: خوش آمدید، کاربر %{name}! users: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index ad6d6e9c07..dc303991bc 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1846,10 +1846,6 @@ fi: edit_profile_action: Määritä profiili edit_profile_step: Voit mukauttaa profiiliasi muun muassa profiilikuvalla ja uudella näyttönimellä. Voit myös valita, haluatko tarkastaa ja hyväksyä uudet seuraajat itse. explanation: Näillä vinkeillä pääset alkuun - final_action: Ala julkaista - final_step: 'Ala julkaista! Vaikkei sinulla olisi seuraajia, voivat muut nähdä julkisia julkaisujasi esimerkiksi paikallisella aikajanalla tai aihetunnisteissa. Kannattaa myös esitellä itsensä aihetunnisteella #esittely.' - full_handle: Koko käyttäjätunnuksesi - full_handle_hint: Kerro tämä kavereillesi, niin he voivat lähettää sinulle viestejä tai seurata sinua toiselta palvelimelta. subject: Tervetuloa Mastodoniin title: Tervetuloa mukaan, %{name}! users: diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 555b82a79d..6a8dd9b2ee 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -1846,10 +1846,6 @@ fo: edit_profile_action: Set upp vanga edit_profile_step: Tú kanst tillaga vanga tín við at leggja eina vangamynd inn, broyta vísta navnið hjá tær og meira. Tú kanst velja at eftirkanna nýggjar fylgjarar, áðrenn teir sleppa at fylgja tær. explanation: Her eru nøkur ráð so tú kann koma gott ígongd - final_action: Byrja at posta - final_step: 'Byrja at posta! Sjálvt uttan fylgjarar, so kunnu tínir almennu postar vera sæddir av øðrum, til dømis á lokalu tíðarlinjuni ella í frámerkjum. Kanska vilt tú greiða frá um teg sjálva/n við frámerkinum #introductions.' - full_handle: Fulla brúkaranavn títt - full_handle_hint: Hetta er tað, sum tú fortelur vinum tínum, soleiðis at tey kunnu senda tær boð ella fylgja tær frá einum øðrum ambætara. subject: Vælkomin til Mastodon title: Vælkomin umborð, %{name}! users: diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 3676d0b7b5..97cb08c918 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -1841,10 +1841,6 @@ fr-CA: edit_profile_action: Configuration du profil edit_profile_step: Vous pouvez personnaliser votre profil en téléchargeant une photo de profil, en changant votre nom d'utilisateur, etc. Vous pouvez opter pour le passage en revue de chaque nouvelle demande d'abonnement à chaque fois qu'un utilisateur essaie de s'abonner à votre compte. explanation: Voici quelques conseils pour vous aider à démarrer - final_action: Commencez à publier - final_step: 'Commencez à publier ! Même si vous n''avez pas encore d''abonnés, vos publications sont publiques et sont accessibles par les autres, par exemple grâce à la zone horaire locale ou par les hashtags. Vous pouvez vous présenter sur le hashtag #introductions.' - full_handle: Votre identifiant complet - full_handle_hint: C’est ce que vous diriez à vos ami·e·s pour leur permettre de vous envoyer un message ou vous suivre à partir d’un autre serveur. subject: Bienvenue sur Mastodon title: Bienvenue à bord, %{name} ! users: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index a3aaf7a26e..b085937c76 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1841,10 +1841,6 @@ fr: edit_profile_action: Configuration du profil edit_profile_step: Vous pouvez personnaliser votre profil en téléchargeant une photo de profil, en changant votre nom d'utilisateur, etc. Vous pouvez opter pour le passage en revue de chaque nouvelle demande d'abonnement à chaque fois qu'un utilisateur essaie de s'abonner à votre compte. explanation: Voici quelques conseils pour vous aider à démarrer - final_action: Commencez à publier - final_step: 'Commencez à publier ! Même si vous n''avez pas encore d''abonnés, vos publications sont publiques et sont accessibles par les autres, par exemple grâce à la zone horaire locale ou par les hashtags. Vous pouvez vous présenter sur le hashtag #introductions.' - full_handle: Votre identifiant complet - full_handle_hint: C’est ce que vous diriez à vos ami·e·s pour leur permettre de vous envoyer un message ou vous suivre à partir d’un autre serveur. subject: Bienvenue sur Mastodon title: Bienvenue à bord, %{name} ! users: diff --git a/config/locales/fy.yml b/config/locales/fy.yml index 2cbb69010d..caa88dcfe4 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -1841,10 +1841,6 @@ fy: edit_profile_action: Profyl ynstelle edit_profile_step: Jo kinne jo profyl oanpasse troch in profylfoto op te laden, jo werjeftenamme oan te passen en mear. Jo kinne it hânmjittich goedkarren fan folgers ynstelle. explanation: Hjir binne inkelde tips om jo op wei te helpen - final_action: Begjin mei berjochten te pleatsen - final_step: 'Begjin berjochten te pleatsen! Sels sûnder folgers kinne jo iepenbiere berjochten troch oaren besjoen wurde, bygelyks op de lokale tiidline en ûnder hashtags. Jo kinne josels foarstelle mei it gebrûk fan de hashtag #introductions.' - full_handle: Jo folsleine Mastodon-adres - full_handle_hint: Dit jouwe jo oan jo freonen, sadat se jo berjochten stjoere kinne of (fan in oare Mastodon-server ôf) folgje kinne. subject: Wolkom op Mastodon title: Wolkom oan board %{name}! users: diff --git a/config/locales/gd.yml b/config/locales/gd.yml index d3dab8273d..e2a43564c0 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1880,10 +1880,6 @@ gd: edit_profile_action: Suidhich a’ phròifil agad edit_profile_step: "’S urrainn dhut a’ phròifil agad a ghnàthachadh is tu a’ luchdadh suas dealbh pròifil, ag atharrachadh d’ ainm-taisbeanaidh is a bharrachd. ’S urrainn dhut lèirmheas a dhèanamh air daoine mus fhaod iad ’gad leantainn ma thogras tu." explanation: Seo gliocas no dhà gus tòiseachadh - final_action: Tòisich air postadh - final_step: 'Tòisich air postadh! Fiù ’s mur eil duine sam bith ’gad leantainn, chì cuid mhath na postaichean poblach agad, can air an loidhne-ama ionadail no le tagaichean hais. Saoil an innis thu beagan mu d’ dhèidhinn air an taga hais #fàilte?' - full_handle: D’ ainm-cleachdaiche slàn - full_handle_hint: Seo na bheir thu dha na caraidean agad ach an urrainn dhaibh teachdaireachd a chur thugad no ’gad leantainn o fhrithealaiche eile. subject: Fàilte gu Mastodon title: Fàilte air bòrd, %{name}! users: diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 705f0ef4e9..8520b90ead 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1846,10 +1846,6 @@ gl: edit_profile_action: Configurar perfil edit_profile_step: Podes personalizar o teu perfil subindo unha imaxe de perfil, cambiar o nome público e moito máis. Podes elexir revisar as solicitudes de seguimento recibidas antes de permitirlles que te sigan. explanation: Aquí tes algunhas endereitas para ir aprendendo - final_action: Comeza a publicar - final_step: 'Publica! Incluso sen seguidoras, as túas mensaxes públicas serán vistas por outras persoas, por exemplo na cronoloxía local e nos cancelos. Poderías presentarte ao #fediverso utilizando o cancelo #introductions.' - full_handle: O teu alcume completo - full_handle_hint: Compárteo coas túas amizades para que poidan seguirte ou enviarche mensaxes desde outros servidores. subject: Benvida a Mastodon title: Benvida, %{name}! users: diff --git a/config/locales/he.yml b/config/locales/he.yml index b5a98dd24d..55ab576142 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -1910,10 +1910,6 @@ he: edit_profile_action: הגדרת פרופיל edit_profile_step: תוכל.י להתאים אישית את הפרופיל באמצעות העלאת יצגן (אוואטר), כותרת, שינוי כינוי ועוד. אם תרצה.י לסקור את עוקביך/ייך החדשים לפני שתרשה.י להם לעקוב אחריך/ייך. explanation: הנה כמה טיפים לעזור לך להתחיל - final_action: התחל/ילי לחצרץ - final_step: 'התחל/ילי לחצצר! אפילו ללא עוקבים ייתכן שהחצרוצים הפומביים שלך יראו ע"י אחרים, למשל בציר הזמן המקומי או בתגיות הקבצה (האשתגים). כדאי להציג את עצמך תחת התגית #introductions או #היכרות' - full_handle: שם המשתמש המלא שלך - full_handle_hint: זה מה שתאמר.י לחברייך כדי שיוכלו לשלוח לך הודעה או לעקוב אחרייך ממופע אחר. subject: ברוכים הבאים למסטודון title: ברוך/ה הבא/ה, %{name} ! users: diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 456636d4c5..733d883da0 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1846,10 +1846,6 @@ hu: edit_profile_action: Készítsd el profilod edit_profile_step: Testreszabhatod a profilod egy profilkép feltöltésével, a megjelenített neved megváltoztatásával és így tovább. Bekapcsolhatod az új követőid jóváhagyását, mielőtt követhetnek. explanation: Néhány tipp a kezdeti lépésekhez - final_action: Kezdj bejegyzéseket írni - final_step: 'Kezdj tülkölni! A nyilvános bejegyzéseid még követők híján is megjelennek másoknak, például a helyi idővonalon vagy a hashtageknél. Kezdd azzal, hogy bemutatkozol a #bemutatkozas vagy az #introductions hashtag használatával.' - full_handle: Teljes felhasználóneved - full_handle_hint: Ez az, amit megadhatsz másoknak, hogy üzenhessenek neked vagy követhessenek téged más szerverekről. subject: Üdvözöl a Mastodon title: Üdv a fedélzeten, %{name}! users: diff --git a/config/locales/hy.yml b/config/locales/hy.yml index f3a6392ff0..b0d8f00864 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -875,7 +875,6 @@ hy: suspend: Հաշիւը արգելափակուած է welcome: edit_profile_action: Կարգաւորել հաշիւը - final_action: Սկսել գրել subject: Բարի գալուստ Մաստոդոն title: Բարի գալուստ նաւամատոյց, %{name} users: diff --git a/config/locales/ia.yml b/config/locales/ia.yml index a85af012f3..52cf861b48 100644 --- a/config/locales/ia.yml +++ b/config/locales/ia.yml @@ -256,7 +256,6 @@ ia: disable: Disactivar 2FA user_mailer: welcome: - final_step: 'Comencia a publicar! Mesmo sin sequitores, tu messages public poterea esser reguardate per alteres, per exemplo in le chronologia local o in hashtags. Tu poterea voler introducer te con le hashtag #introductiones.' subject: Benvenite in Mastodon webauthn_credentials: delete: Deler diff --git a/config/locales/id.yml b/config/locales/id.yml index ec8cf9e031..e7f42e115b 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -1560,10 +1560,6 @@ id: edit_profile_action: Siapkan profil edit_profile_step: Anda dapat mengubah profil Anda dengan mengunggah sebuah foto profil, mengubah nama tampilan Anda dan lain-lain. Anda dapat memilih untuk meninjau pengikut baru sebelum mereka diperbolehkan untuk mengikuti Anda. explanation: Beberapa tips sebelum Anda memulai - final_action: Mulai mengirim - final_step: 'Mulai mengirim! Bahkan tanpa pengikut, kiriman publik Anda dapat dilihat oleh orang lain, misalkan di linimasa lokal atau dalam tagar. Anda dapat memperkenalkan diri Anda dalam tagar #introductions.' - full_handle: Penanganan penuh Anda - full_handle_hint: Ini yang dapat Anda sampaikan kepada teman agar mereka dapat mengirim pesan atau mengikuti Anda dari server lain. subject: Selamat datang di Mastodon title: Selamat datang, %{name}! users: diff --git a/config/locales/ie.yml b/config/locales/ie.yml index 4b84d53bd5..eec8569bb2 100644 --- a/config/locales/ie.yml +++ b/config/locales/ie.yml @@ -1846,10 +1846,6 @@ ie: edit_profile_action: Configuration de profil edit_profile_step: Tu posse personalisar tui profil por cargar un profil-image, changear tui monstrat nómine e plu. Tu posse optar tractar nov sequitores ante que ili es permisset sequer te. explanation: Vi quelc suggestiones por que tu mey comensar - final_action: Comensar postar - final_step: 'Comensa a postar! Mem sin sequitores, tui public postas posse esser videt de altres, per exemple in li local témpor-linea o in hashtags. Tu fórsan vole introducter te per li hashtag #introductions.' - full_handle: Tui plen usator-nómine - full_handle_hint: Ti-ci es ti quel tu vell dir a tui amics por que ili mey inviar missages a te o sequer te de un altri servitor. subject: Benevenit a Mastodon title: Benevenit, %{name}! users: diff --git a/config/locales/io.yml b/config/locales/io.yml index 341477852f..189f616a4e 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -1799,10 +1799,6 @@ io: edit_profile_action: Facez profilo edit_profile_step: Vu povas kustumizar vua profilo per adchargar profilimajo, chanjesar vua montronomo e plue. Vu povas selektas kontrolar nova sequanti ante oli permisesas sequar vu. explanation: Subo esas guidilo por helpar vu komencar - final_action: Komencez postigar - final_step: 'Jus postigez! Mem sen sequanti, vua publika posti povas videsar da altra personi, exemplo es en lokala tempolineo e en hashtagi. Vu povas anke introduktar su en #introductions hashtagi.' - full_handle: Vua kompleta profilnomo - full_handle_hint: Co esas quon vu dicos a amiki por ke oli povas mesajigar o sequar vu de altra servilo. subject: Bonveno a Mastodon title: Bonveno, %{name}! users: diff --git a/config/locales/is.yml b/config/locales/is.yml index 56d71bd9ad..da6eee9e20 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -1850,10 +1850,6 @@ is: edit_profile_action: Setja upp notandasnið edit_profile_step: Þú getur sérsniðið notandasniðið þitt með því að setja inn auðkennismynd þína, breyta birtingarnafninu þínu og ýmislegt fleira. Þú getur valið að yfirfara nýja fylgjendur áður en þú leyfir þeim að fylgjast með þér. explanation: Hér eru nokkrar ábendingar til að koma þér í gang - final_action: Byrjaðu að skrifa - final_step: 'Byrjaðu að tjá þig! Jafnvel án fylgjenda geta aðrir séð opinberar færslur frá þér, til dæmis á staðværu tímalínunni eða í myllumerkjum. Þú gætir jafnvel viljað kynna þig á myllumerkinu #introductions.' - full_handle: Fullt auðkenni þitt - full_handle_hint: Þetta er það sem þú myndir gefa upp við vini þína svo þeir geti sent þér skilaboð eða fylgst með þér af öðrum netþjóni. subject: Velkomin í Mastodon title: Velkomin/n um borð, %{name}! users: diff --git a/config/locales/it.yml b/config/locales/it.yml index a0f1ab7697..3adb4f6c65 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1848,10 +1848,6 @@ it: edit_profile_action: Configura profilo edit_profile_step: Puoi personalizzare il tuo profilo caricando un'immagine del profilo, cambiare il tuo nome e altro ancora. Puoi scegliere di esaminare i nuovi seguaci prima che loro siano autorizzati a seguirti. explanation: Ecco alcuni suggerimenti per iniziare - final_action: Inizia a pubblicare - final_step: 'Inizia a pubblicare! Anche senza seguaci, i tuoi post pubblici possono essere visti da altri, ad esempio sulla timeline locale o negli hashtag. Potresti presentarti con l''hashtag #presentazione.' - full_handle: Il tuo nome utente completo - full_handle_hint: Questo è ciò che diresti ai tuoi amici in modo che possano seguirti o contattarti da un altro server. subject: Benvenuto/a su Mastodon title: Benvenuto a bordo, %{name}! users: diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 1bbda050bb..460f02d0a5 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1816,10 +1816,6 @@ ja: プロフィール画像をアップロードしたり、表示名を変更したりして、プロフィールをカスタマイズできます。 新しいフォロワーからフォローリクエストを承認する前に、オプトインで確認できます。 explanation: 始めるにあたってのアドバイスです - final_action: 始めましょう - final_step: 'さあ、始めましょう! たとえフォロワーがまだいなくても、あなたの公開した投稿はローカルタイムラインやハッシュタグなどを通じて誰かの目にとまるはずです。自己紹介をしたいときには #introductions ハッシュタグが便利かもしれません。' - full_handle: あなたの正式なユーザーID - full_handle_hint: 別のサーバーの友達とフォローやメッセージをやり取りする際には、これを伝えることになります。 subject: Mastodonへようこそ title: ようこそ、%{name}さん! users: diff --git a/config/locales/ka.yml b/config/locales/ka.yml index 926922154f..1b3d48810e 100644 --- a/config/locales/ka.yml +++ b/config/locales/ka.yml @@ -472,9 +472,6 @@ ka: welcome: edit_profile_action: პროფილის მოწყობა explanation: აქ რამდენიმე რჩევაა დასაწყისისთვის - final_action: დაიწყე პოსტვა - full_handle: თქვენი სრული სახელური - full_handle_hint: ეს არის ის რასაც ეტყვით თქვენს მეგობრებს, რათა მოგწერონ ან გამოგყვნენ სხვა ინსტანციიდან. subject: კეთილი იყოს თქვენი მობრძანება მასტოდონში title: კეთილი იყოს თქვენი მობრძანება, %{name}! users: diff --git a/config/locales/kab.yml b/config/locales/kab.yml index a24d8994fd..d424810926 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -794,8 +794,6 @@ kab: silence: Amiḍan yesɛa talast suspend: Amiḍan yettwaḥbas welcome: - final_action: Bdu asuffeɣ - full_handle: Tansa umiḍan-ik takemmalit subject: Ansuf ɣer Maṣṭudun title: Ansuf yessek·em, %{name}! users: diff --git a/config/locales/kk.yml b/config/locales/kk.yml index 27c76b4378..2cd894befb 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -721,9 +721,6 @@ kk: welcome: edit_profile_action: Профиль өңдеу explanation: Мына кеңестерді шолып өтіңіз - final_action: Жазба жазу - full_handle: Желі тұтқасы - full_handle_hint: This is what you would tell your friends so they can message or follow you frоm another server. subject: Mastodon Желісіне қош келдіңіз title: Ортаға қош келдің, %{name}! users: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 851c3c74b8..45a95139f0 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1816,10 +1816,6 @@ ko: edit_profile_action: 프로필 설정 edit_profile_step: 프로필 사진을 업로드하거나 사람들에게 표시할 이름을 바꾸는 것 등으로 자신의 프로필을 커스텀 할 수 있습니다. 새로운 팔로워를 검토 후에 허용하도록 할 수도 있습니다. explanation: 시작하기 전에 몇가지 팁들을 준비했습니다 - final_action: 포스팅 시작하기 - final_step: '게시물을 올리세요! 팔로워가 없더라도, 공개 게시물들은 다른 사람에게 보여질 수 있습니다, 예를 들자면 로컬이나 연합 타임라인 등이 있습니다. 사람들에게 자신을 소개하고 싶다면 #툿친소 해시태그를 이용해보세요.' - full_handle: 당신의 풀 핸들은 다음과 같습니다 - full_handle_hint: 이것을 당신의 친구들에게 알려주면 다른 서버에서 팔로우 하거나 메시지를 보낼 수 있습니다. subject: 마스토돈에 오신 것을 환영합니다 title: 환영합니다 %{name} 님! users: diff --git a/config/locales/ku.yml b/config/locales/ku.yml index e78e7ecfbb..d744aaa903 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -1594,10 +1594,6 @@ ku: edit_profile_action: Profîlê saz bike edit_profile_step: Tu dikarî bi barkirina wêneyek profîlê, guhertina navê xwe ya xuyangê û bêtir profîla xwe kesane bikî. Berî ku mafê bidî ku te şopînerên nû te bişopînin, tu dikarî binirxînî. explanation: Li vir çend serişte hene ku tu dest pê bike - final_action: Dest bi weşandinê bike - final_step: 'Dest bi weşandinê bike! Bêyî şopîneran jî dibe ku şandiyên te yên gelemperî ji hêla kesên din ve werin dîtin, mînakî li ser demjimêra herêmî û di hashtagan de. Dibe ku tu bixwazî xwe li ser hashtagê #nasname bidî nasandin.' - full_handle: Hemî destikê te - full_handle_hint: Ji hevalên xwe re, ji bona ji rajekarekê din peyam bişîne an jî ji bona ku te bikaribe bişopîne tişta ku tu bibêjî ev e. subject: Tu bi xêr hatî Mastodon title: Bi xêr hatî, %{name}! users: diff --git a/config/locales/lad.yml b/config/locales/lad.yml index d75d0d44c9..13e29f927e 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -1846,10 +1846,6 @@ lad: edit_profile_action: Konfigurasyon de profil edit_profile_step: Puedes personalizar tu profil kargando una foto de profil, trokando tu nombre de utilizador i muncho mas. Puedes optar por revizar a los muevos suivantes antes de ke puedan segirte. explanation: Aki ay algunos konsejos para ampesar - final_action: Ampesa a publikar - final_step: 'Ampesa a publikar! Inkluzo sin suivantes, tus publikasyones publikas pueden ser vistas por otros, por enshemplo en la linya de tiempo lokal o en etiketas. Tal vez keras aprezentarte kon la etiketa de #introduksiones.' - full_handle: Tu sovrenombre kompleto - full_handle_hint: Esto es lo ke le dirias a tus haverim para ke eyos puedan embiarte mesajes o segirte dizde otra instansya. subject: Bienvenido a Mastodon title: Bienvenido, %{name}! users: diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 6ca6f3b62f..7ffce1a516 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -608,10 +608,6 @@ lt: welcome: edit_profile_action: Nustatyti profilį explanation: Štai keletas patarimų, kaip pradėti - final_action: Pradėti kelti įrašus - final_step: 'Pradėk skelbti! Net jei ir neturi sekėjų, tavo viešus įrašus gali matyti kiti, pavyzdžiui, vietinėje laiko skalėje arba saitažodžiuose. Galbūt norėsi prisistatyti saitažodyje #introductions.' - full_handle: Tavo pilnas slapyvardis - full_handle_hint: Štai ką pasakytum savo draugams, kad jie galėtų parašyti arba sekti tave iš kito serverio. subject: Sveiki atvykę į Mastodon title: Sveiki atvykę, %{name}! users: diff --git a/config/locales/lv.yml b/config/locales/lv.yml index fcf478cf93..89bdf5f05f 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1855,10 +1855,6 @@ lv: edit_profile_action: Iestatīt profilu edit_profile_step: Tu vari pielāgot savu profilu, augšupielādējot profila attēlu, mainot parādāmo vārdu un citas lietas. Vari izvēlēties pārskatīt jaunus sekotājus, pirms atļauj viņiem tev sekot. explanation: Šeit ir daži padomi, kā sākt darbu - final_action: Sāc publicēt - final_step: 'Sāc publicēt! Pat bez sekotājiem tavas publiskās ziņas var redzēt citi, piemēram, vietējā ziņu lentā vai atsaucēs. Iespējams, tu vēlēsies iepazīstināt ar sevi, izmantojot tēmturi #introductions.' - full_handle: Tavs pilnais lietotājvārds - full_handle_hint: Šis ir tas, ko tu pasaki saviem draugiem, lai viņi varētu tev ziņot vai sekot tev no cita servera. subject: Laipni lūgts Mastodon title: Laipni lūgts uz borta, %{name}! users: diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 6625a13b3b..81f1851b1e 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -1772,10 +1772,6 @@ ms: edit_profile_action: Sediakan profil edit_profile_step: Anda boleh menyesuaikan profil anda dengan memuat naik gambar profil, menukar nama paparan anda dan banyak lagi. Anda boleh ikut serta untuk menyemak pengikut baharu sebelum mereka dibenarkan mengikuti anda. explanation: Berikut ialah beberapa petua untuk anda bermula - final_action: Mula menyiarkan - final_step: 'Mula menyiarkan! Walaupun tanpa pengikut, pos awam anda mungkin dilihat oleh orang lain, contohnya pada garis masa tempatan atau dalam hashtag. Anda mungkin ingin memperkenalkan diri anda pada hashtag #introductions.' - full_handle: Pemegang penuh anda - full_handle_hint: Inilah yang anda akan beritahu rakan anda supaya mereka boleh menghantar mesej atau mengikuti anda dari server lain. subject: Selamat datang kepada Mastodon title: Selamat datang, %{name}! users: diff --git a/config/locales/my.yml b/config/locales/my.yml index 094f581eb9..18f5c6a2d0 100644 --- a/config/locales/my.yml +++ b/config/locales/my.yml @@ -1771,10 +1771,6 @@ my: edit_profile_action: ပရိုဖိုင်ထည့်သွင်းရန် edit_profile_step: ပရိုဖိုင်ဓာတ်ပုံတစ်ပုံ တင်ခြင်း၊ ဖော်ပြမည့်အမည် ပြောင်းလဲခြင်းနှင့် အခြားအရာများပြုလုပ်ခြင်းတို့ဖြင့် သင့်ပရိုဖိုင်ကို စိတ်ကြိုက်ပြင်ဆင်နိုင်ပါသည်။ စောင့်ကြည့်သူအသစ်များ သင့်ကိုစောင့်ကြည့်ခွင့်မပြုမီ ပြန်လည်သုံးသပ်ရန်အတွက် ဆုံးဖြတ်နိုင်ပါသည်။ explanation: ဤသည်မှာ သင် စတင်အသုံးပြုနိုင်ရန်အတွက် အကြံပြုချက်အချို့ဖြစ်ပါသည် - final_action: ပို့စ် တင်ရန် - final_step: 'ပို့စ်စပြီး တင်နိုင်ပါပြီ။ စောင့်ကြည့်သူများမရှိသေးသော်လည်း သင့်အများမြင်ပို့စ်များကို ဒေသတွင်းစာမျက်နှာ သို့မဟုတ် ဟက်ရှ်တက်စာမျက်နှာတို့တွင် အခြားသူများက မြင်နိုင်ပါသည်။ #introductions ဟက်ရှ်တက်ဖြင့် သင့်ကိုယ်သင် မိတ်ဆက်နိုင်ပါသည်။' - full_handle: ကိုယ်တိုင်ထိန်းချုပ်နိုင်သည် - full_handle_hint: ဤသည်မှာ သင့်သူငယ်ချင်းများကို အခြားဆာဗာတစ်ခုမှ မက်ဆေ့ချ်ပို့နိုင်ကြောင်း သို့မဟုတ် စောင့်ကြည့်နိုင်ကြောင်း အသိပေးပါမည်။ subject: Mastodon မှ လှိုက်လှဲစွာကြိုဆိုပါသည်။ title: "%{name} က ကြိုဆိုပါတယ်။" users: diff --git a/config/locales/nl.yml b/config/locales/nl.yml index 4392c2366e..c935e9f4aa 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1846,10 +1846,6 @@ nl: edit_profile_action: Profiel instellen edit_profile_step: Je kunt jouw profiel aanpassen door een profielfoto te uploaden, jouw weergavenaam aan te passen en meer. Je kunt het handmatig goedkeuren van volgers instellen. explanation: Hier zijn enkele tips om je op weg te helpen - final_action: Begin berichten te plaatsen - final_step: 'Begin berichten te plaatsen! Zelfs zonder volgers kunnen jouw openbare berichten door anderen bekeken worden, bijvoorbeeld op de lokale tijdlijn en onder hashtags. Je kunt jezelf voorstellen met het gebruik van de hashtag #introductions.' - full_handle: Jouw volledige Mastodon-adres - full_handle_hint: Dit geef je aan jouw vrienden, zodat ze jou berichten kunnen sturen of (vanaf een andere Mastodonserver) kunnen volgen. subject: Welkom op Mastodon title: Welkom aan boord %{name}! users: diff --git a/config/locales/nn.yml b/config/locales/nn.yml index 1524b6f7c1..aecd148e28 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1846,10 +1846,6 @@ nn: edit_profile_action: Lag til profil edit_profile_step: Du kan tilpasse profilen din ved å laste opp et profilbilde, endre visningsnavnet ditt og mer. Du kan velge at nye følgere må godkjennes av deg før de får lov til å følge deg. explanation: Her er nokre tips for å koma i gang - final_action: Kom i gang med å leggja ut - final_step: 'Skriv innlegg! Selv uten følgere kan dine offentlige innlegg bli sett av andre, for eksempel på den lokale tidslinjen og i emneknagger. Du kan introdusere deg selv ved å bruke emneknaggen #introduksjon.' - full_handle: Det fulle brukarnamnet ditt - full_handle_hint: Dette er det du fortel venene dine for at dei skal kunna senda deg meldingar eller fylgja deg frå ein annan tenar. subject: Velkomen til Mastodon title: Velkomen om bord, %{name}! users: diff --git a/config/locales/no.yml b/config/locales/no.yml index d26b20379e..481e28e863 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -1841,10 +1841,6 @@ edit_profile_action: Sett opp profil edit_profile_step: Du kan tilpasse profilen din ved å laste opp et profilbilde, endre visningsnavnet ditt og mer. Du kan velge at nye følgere må godkjennes av deg før de får lov til å følge deg. explanation: Her er noen tips for å komme i gang - final_action: Start postingen - final_step: 'Skriv innlegg! Selv uten følgere kan dine offentlige innlegg bli sett av andre, for eksempel på den lokale tidslinjen og i emneknagger. Du kan introdusere deg selv ved å bruke emneknaggen #introduksjon.' - full_handle: Ditt fullstendige brukernavn - full_handle_hint: Dette er hva du forteller venner slik at de kan sende melding eller følge deg fra en annen instanse. subject: Velkommen til Mastodon title: Velkommen ombord, %{name}! users: diff --git a/config/locales/oc.yml b/config/locales/oc.yml index 2887fc98b3..b8330992c9 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -968,9 +968,6 @@ oc: welcome: edit_profile_action: Configuracion del perfil explanation: Vaquí qualques astúcias per vos preparar - final_action: Començar de publicar - full_handle: Vòstre escais-nom complèt - full_handle_hint: Es aquò que vos cal donar a vòstres amics per que pòscan vos escriure o sègre a partir d’un autre servidor. subject: Benvengut a Mastodon title: Vos desirem la benvenguda a bòrd %{name} ! users: diff --git a/config/locales/pl.yml b/config/locales/pl.yml index f0e6a1f60b..f7c5d60f65 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1910,10 +1910,6 @@ pl: edit_profile_action: Skonfiguruj profil edit_profile_step: Możesz dostosować profil wysyłając awatar, zmieniając wyświetlaną nazwę i o wiele więcej. Jeżeli chcesz, możesz również włączyć przeglądanie i ręczne akceptowanie nowych próśb o możliwość obserwacji Twojego profilu. explanation: Kilka wskazówek, które pomogą Ci rozpocząć - final_action: Zacznij pisać - final_step: 'Zacznij tworzyć! Nawet jeżeli nikt Cię nie obserwuje, Twoje publiczne wiadomości będą widziane przez innych, na przykład na lokalnej osi czasu i w hashtagach. Możesz też utworzyć wpis wprowadzający używając hashtagu #introductions.' - full_handle: Twój pełny adres - full_handle_hint: Ten adres możesz podać znajomym, aby mogli skontaktować się z Tobą lub zacząć obserwować z innego serwera. subject: Witaj w Mastodonie title: Witaj na pokładzie, %{name}! users: diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index ea91fd7dfe..86972f9ef1 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1841,10 +1841,6 @@ pt-BR: edit_profile_action: Configurar perfil edit_profile_step: Você pode personalizar seu perfil enviando uma foto de perfil, mudando seu nome de exibição e mais. Você pode optar por revisar novos seguidores antes que eles possam te seguir. explanation: Aqui estão algumas dicas para você começar - final_action: Comece a publicar - final_step: 'Comece a postar! Mesmo sem seguidores, suas postagens públicas podem ser vistas pelos outros, por exemplo, na linha do tempo local ou nas hashtags. Você pode querer fazer uma introdução usando a hashtag #introduções.' - full_handle: Seu nome de usuário completo - full_handle_hint: Isso é o que você compartilha com seus amigos para que eles possam te mandar mensagens ou te seguir a partir de outro servidor. subject: Boas-vindas ao Mastodon title: Boas vindas, %{name}! users: diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 3007fd2df1..0786ba2ed4 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -1846,10 +1846,6 @@ pt-PT: edit_profile_action: Configurar o perfil edit_profile_step: Pode personalizar o seu perfil carregando uma imagem de perfil, alterando o nome a exibir, entre outras opções. Pode optar por rever os novos seguidores antes de estes o poderem seguir. explanation: Aqui estão algumas dicas para começar - final_action: Começar a publicar - final_step: 'Comece a publicar! Mesmo sem seguidores, as suas mensagens públicas podem ser vistas por outros, como por exemplo na cronologia local e em etiquetas. Pense em apresentar-se usando a etiqueta #apresentações.' - full_handle: O seu nome completo - full_handle_hint: Isto é o que tem de facultar aos seus amigos para que eles lhe possam enviar mensagens ou segui-lo a partir de outra instância. subject: Bem-vindo ao Mastodon title: Bem-vindo a bordo, %{name}! users: diff --git a/config/locales/ro.yml b/config/locales/ro.yml index 1bdc4e8ca5..8e4f9e7913 100644 --- a/config/locales/ro.yml +++ b/config/locales/ro.yml @@ -709,9 +709,6 @@ ro: welcome: edit_profile_action: Configurare profil explanation: Iată câteva sfaturi pentru a începe - final_action: Începe să postezi - full_handle: Numele tău complet - full_handle_hint: Asta este ceea ce vei putea spune prietenilor pentru a te putea contacta sau pentru a te urmării de pe un alt server. subject: Bine ai venit title: Bine ai venit la bord, %{name}! users: diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 04e49e0427..3f15b064f0 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1905,10 +1905,6 @@ ru: edit_profile_action: Настроить профиль edit_profile_step: Вы можете настроить свой профиль добавляя аватарку, изменяя отображаемое имя и так далее. Вы можете вручную подтверждать подписчиков, перед тем как им будет разрешено подписаться на вас. explanation: Вот несколько советов для новичков - final_action: Начать постить - final_step: 'Начинайте постить! Даже без подписчиков, ваши публичные посты могут быть увиденными другими, например в локальной ленте или в хештегах. Вы можете представиться с хэштегом #introductions.' - full_handle: Ваше обращение - full_handle_hint: То, что Вы хотите сообщить своим друзьям, чтобы они могли написать Вам или подписаться с другого узла. subject: Добро пожаловать в Mastodon title: Добро пожаловать на борт, %{name}! users: diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 273ef9d2d9..533764606b 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -1094,9 +1094,6 @@ sc: welcome: edit_profile_action: Cunfigura su profilu explanation: Inoghe ddoe at una paja de impòsitos pro cumintzare - final_action: Cumintza a publicare - full_handle: Su nòmine utente intreu tuo - full_handle_hint: Custu est su chi dias nàrrere a is amistades tuas pro chi ti potzant imbiare messàgios o sighire dae un'àteru serbidore. subject: Ti donamus su benebènnidu a Mastodon title: Ti donamus su benebènnidu, %{name}! users: diff --git a/config/locales/sco.yml b/config/locales/sco.yml index a1071197f1..dc273d2d83 100644 --- a/config/locales/sco.yml +++ b/config/locales/sco.yml @@ -1584,10 +1584,6 @@ sco: edit_profile_action: Setup profile edit_profile_step: Ye kin customize yer profile bi uploadin a profile picture, chyngin yer display nemm an mair. Ye kin opt-in fir tae luik ower new follaers afore they’re allooed tae follae ye. explanation: Here some tips fir tae get ye stertit - final_action: Stert postin - final_step: 'Stert postin! Even athout follaers, yer public posts kin stull be seen bi ithers, fir example on the local timeline or in hashtags. Ye mibbie want tae introduce yersel on the #introductions hashtag.' - full_handle: Yer ful haunnle - full_handle_hint: This is whit ye wad tell yer pals sae thit they kin message or follae ye fae anither server. subject: Welcome tae Mastodon, 'mon in title: Welcome aboord, %{name}! users: diff --git a/config/locales/si.yml b/config/locales/si.yml index 660fd3ba31..ac292d6cf8 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -1436,9 +1436,6 @@ si: welcome: edit_profile_action: පැතිකඩ පිහිටුවන්න explanation: ඔබ ආරම්භ කිරීමට උපදෙස් කිහිපයක් මෙන්න - final_action: ලිපි පළ කරන්න - full_handle: ඔබේ සම්පූර්ණ හසුරුව - full_handle_hint: මෙය ඔබ ඔබේ මිතුරන්ට පවසනු ඇත, එවිට ඔවුන්ට වෙනත් සේවාදායකයකින් ඔබට පණිවිඩ යැවීමට හෝ අනුගමනය කිරීමට හැකිය. subject: මාස්ටඩන් වෙත පිළිගනිමු title: නැවට සාදරයෙන් පිළිගනිමු, %{name}! users: diff --git a/config/locales/sk.yml b/config/locales/sk.yml index 66022b10ae..d97cfac0ea 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -1290,9 +1290,6 @@ sk: welcome: edit_profile_action: Nastav profil explanation: Tu nájdeš nejaké tipy do začiatku - final_action: Začni prispievať - full_handle: Adresa tvojho profilu v celom formáte - full_handle_hint: Toto je čo musíš dať vedieť svojím priateľom aby ti mohli posielať správy, alebo ťa následovať z iného serveru. subject: Vitaj na Mastodone title: Vitaj na palube, %{name}! users: diff --git a/config/locales/sl.yml b/config/locales/sl.yml index 915970f805..c9b2343b69 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1910,10 +1910,6 @@ sl: edit_profile_action: Nastavitve profila edit_profile_step: Profil lahko prilagodite tako, da naložite sliko profila, spremenite pojavno ime in drugo. Lahko izberete, da želite pregledati nove sledilce, preden jim dovolite sledenje. explanation: Tu je nekaj nasvetov za začetek - final_action: Začnite objavljati - final_step: 'Začnite objavljati! Tudi brez sledilcev bodo vaše javne objave videli drugi, npr. na krajevni časovnici ali v ključnikih. Morda se želite predstaviti s ključnikom #introductions.' - full_handle: Vaša polna ročica - full_handle_hint: To bi povedali svojim prijateljem, da vam lahko pošljejo sporočila ali vam sledijo iz drugega strežnika. subject: Dobrodošli na Mastodon title: Dobrodošli, %{name}! users: diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 3ad76e2429..4293271bb2 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1842,10 +1842,6 @@ sq: edit_profile_action: Ujdisje profili edit_profile_step: Profilin tuaj mund ta përshtatni duke ngarkuar një figurë, duke ndryshuar emrin tuaj në ekran, etj. Mund të zgjidhni të shqyrtoni ndjekës të rinj, para se të jenë lejuar t’ju ndjekin. explanation: Ja disa ndihmëza, sa për t’ia filluar - final_action: Filloni të postoni - final_step: 'Filloni të postoni! Edhe pa ndjekës, postimet tuaja publike mund të shihen nga të tjerët, për shembull, në rrjedhën kohore vendore, ose në hashtag-ë. Mund të doni të prezantoni veten përmes hashtag-ut #introductions.' - full_handle: Identifikuesi juaj i plotë - full_handle_hint: Kjo është ajo çka do të duhej t’u tregonit shokëve tuaj, që të mund t’ju dërgojnë mesazhe ose t’ju ndjekin nga një shërbyes tjetër. subject: Mirë se vini te Mastodon-i title: Mirë se vini, %{name}! users: diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index b55b6e0d19..a1f6df067f 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1873,10 +1873,6 @@ sr-Latn: edit_profile_action: Podesi nalog edit_profile_step: Možete prilagoditi svoj profil tako što ćete postaviti profilnu sliku, promeniti ime za prikaz i tako dalje. Možete dati saglasnost da pregledate nove pratioce pre nego što im dozvolite da Vas zaprate. explanation: Evo nekoliko saveta za početak - final_action: Počnite objavljivati - final_step: 'Počnite da objavljujete! Čak i bez pratilaca, Vaše javne objave su vidljive drugim ljudima, na primer na lokalnoj vremenskoj liniji ili u heš oznakama. Možda želite da se predstavite sa heš oznakom #introductions ili #predstavljanja.' - full_handle: Vaš pun nadimak - full_handle_hint: Ovo biste rekli svojim prijateljima kako bi vam oni poslali poruku, ili zapratili sa druge instance. subject: Dobro došli na Mastodon title: Dobro došli, %{name}! users: diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 9e67e9692d..494b41a754 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -1873,10 +1873,6 @@ sr: edit_profile_action: Подеси налог edit_profile_step: Можете прилагодити свој профил тако што ћете поставити профилну слику, променити име за приказ и тако даље. Можете дати сагласност да прегледате нове пратиоце пре него што им дозволите да Вас запрате. explanation: Ево неколико савета за почетак - final_action: Почните објављивати - final_step: 'Почните да објављујете! Чак и без пратилаца, Ваше јавне објаве су видљиве другим људима, на пример на локалној временској линији или у хеш ознакама. Можда желите да се представите са хеш ознаком #introductions или #представљања.' - full_handle: Ваш пун надимак - full_handle_hint: Ово бисте рекли својим пријатељима како би вам они послали поруку, или запратили са друге инстанце. subject: Добро дошли на Mastodon title: Добро дошли, %{name}! users: diff --git a/config/locales/sv.yml b/config/locales/sv.yml index deac7cc638..d0f3994b4e 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1837,10 +1837,6 @@ sv: edit_profile_action: Profilinställning edit_profile_step: Du kan anpassa din profil genom att ladda upp en profilbild, ändra ditt visningsnamn med mera. Du kan välja att granska nya följare innan de får följa dig. explanation: Här är några tips för att komma igång - final_action: Börja göra inlägg - final_step: 'Börja skriv inlägg! Även utan följare kan dina offentliga inlägg ses av andra, exempelvis på den lokala tidslinjen eller i hashtaggar. Du kanske vill introducera dig själv under hashtaggen #introduktion eller #introductions.' - full_handle: Ditt fullständiga användarnamn/mastodonadress - full_handle_hint: Det här är vad du skulle berätta för dina vänner så att de kan meddela eller följa dig från en annan instans. subject: Välkommen till Mastodon title: Välkommen ombord, %{name}! users: diff --git a/config/locales/th.yml b/config/locales/th.yml index e117c29b4a..5253dd6b78 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1814,10 +1814,6 @@ th: edit_profile_action: ตั้งค่าโปรไฟล์ edit_profile_step: คุณสามารถปรับแต่งโปรไฟล์ของคุณได้โดยอัปโหลดรูปภาพโปรไฟล์ เปลี่ยนชื่อที่แสดงของคุณ และอื่น ๆ คุณสามารถเลือกรับการตรวจทานผู้ติดตามใหม่ก่อนที่จะอนุญาตให้เขาติดตามคุณ explanation: นี่คือเคล็ดลับบางส่วนที่จะช่วยให้คุณเริ่มต้นใช้งาน - final_action: เริ่มโพสต์ - final_step: 'เริ่มโพสต์! แม้ว่าไม่มีผู้ติดตาม โพสต์สาธารณะของคุณอาจเห็นโดยผู้อื่น ตัวอย่างเช่น ในเส้นเวลาในเซิร์ฟเวอร์หรือในแฮชแท็ก คุณอาจต้องการแนะนำตัวเองในแฮชแท็ก #introductions' - full_handle: นามเต็มของคุณ - full_handle_hint: นี่คือสิ่งที่คุณจะบอกเพื่อน ๆ ของคุณเพื่อให้เขาสามารถส่งข้อความหรือติดตามคุณจากเซิร์ฟเวอร์อื่น subject: ยินดีต้อนรับสู่ Mastodon title: ยินดีต้อนรับ %{name}! users: diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 4ba9d42758..7dbec9abbd 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1846,10 +1846,6 @@ tr: edit_profile_action: Profil kurulumu edit_profile_step: Bir profil resmi yükleyerek, ekran adınızı değiştirerek ve daha fazlasını yaparak profilinizi kişiselleştirebilirsiniz. Sizi takip etmelerine izin verilmeden önce yeni takipçileri incelemeyi tercih edebilirsiniz. explanation: İşte sana başlangıç için birkaç ipucu - final_action: Gönderi yazmaya başlayın - final_step: 'Gönderi yazmaya başlayın! Takipçiler olmadan bile, herkese açık gönderileriniz başkaları tarafından görülebilir, örneğin yerel zaman tünelinde veya etiketlerde. Kendinizi #introductions etiketinde tanıtmak isteyebilirsiniz.' - full_handle: Tanıtıcınız - full_handle_hint: Arkadaşlarınıza, size başka bir sunucudan mesaj atabilmeleri veya sizi takip edebilmeleri için söyleyeceğiniz şey budur. subject: Mastodon'a hoş geldiniz title: Gemiye hoşgeldin, %{name}! users: diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 4d4097d658..7273a0ff2b 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -1910,10 +1910,6 @@ uk: edit_profile_action: Налаштувати профіль edit_profile_step: Ви можете налаштувати свій профіль, завантаживши зображення профілю, змінивши відображуване ім'я та інше. Ви можете включити для перегляду нових підписників до того, як вони матимуть змогу підписатися на вас. explanation: Ось кілька порад для початку - final_action: Почати писати - final_step: 'Почніть дописувати! Навіть не підписавшись на вас, інші зможуть побачити ваші дописи, наприклад, у локальній стрічці та у хештеґах. Якщо ви хочете представитися, можете скористатися хештеґом #introductions.' - full_handle: Ваше звернення - full_handle_hint: Те, що ви хочете сказати друзям, щоб вони могли написати вам або підписатися з інших сайтів. subject: Ласкаво просимо до Mastodon title: Ласкаво просимо, %{name}! users: diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 99434c3544..e362c97a41 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1812,10 +1812,6 @@ vi: edit_profile_action: Cài đặt trang hồ sơ edit_profile_step: Bạn có thể chỉnh sửa trang hồ sơ của mình bằng cách tải lên ảnh đại diện, ảnh bìa, đổi biệt danh và hơn thế nữa. Bạn cũng có thể tự phê duyệt những người theo dõi mới. explanation: Dưới đây là một số mẹo để giúp bạn bắt đầu - final_action: Soạn tút mới - final_step: 'Viết tút mới! Ngay cả khi chưa có người theo dõi, người khác vẫn có thể xem tút công khai của bạn trên bảng tin máy chủ và qua hashtag. Hãy giới thiệu bản thân với hashtag #introductions.' - full_handle: Tên đầy đủ của bạn - full_handle_hint: Đây cũng là địa chỉ được dùng để giao tiếp với tất cả mọi người. subject: Chào mừng đến với Mastodon title: Xin chào %{name}! users: diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index cf56a2d227..46a0e40152 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1814,10 +1814,6 @@ zh-CN: edit_profile_action: 设置个人资料 edit_profile_step: 您可以通过上传个人资料图片、更改您的昵称等来自定义您的个人资料。 您可以选择在新关注者关注您之前对其进行审核。 explanation: 下面是几个小贴士,希望它们能帮到你 - final_action: 开始嘟嘟 - final_step: '开始发布嘟文! 即使没有关注者,您的公开嘟文也可能会被其他人看到,例如在本地时间轴或话题标签中。 您可能想在 #introductions 话题标签上介绍自己。' - full_handle: 你的完整用户地址 - full_handle_hint: 你需要把这个告诉你的朋友们,这样他们就能从另一台服务器向你发送信息或者关注你。 subject: 欢迎来到 Mastodon title: "%{name},欢迎你的加入!" users: diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index b010a75c04..e666e4965d 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -1809,10 +1809,6 @@ zh-HK: edit_profile_action: 設定個人資料 edit_profile_step: 你可以透過上傳頭像、更改顯示名稱等來自訂個人檔案。你可以選擇讓新使用者追蹤你之前先審查他們。 explanation: 下面是幾個小貼士,希望它們能幫到你 - final_action: 開始發文 - final_step: '開始發文吧!即使你沒有追蹤者,其他人仍然能在本站時間軸或標籤等地方,看到你的公開帖文。試着用 #introductions 標籤來介紹自己吧。' - full_handle: 你的完整 Mastodon 地址 - full_handle_hint: 這訊息將顯示給你朋友們,讓他們能從另一個服務站發信息給你,或者關注你的。 subject: 歡迎來到 Mastodon (萬象) title: 歡迎 %{name} 加入! users: diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index bc8454884c..3cd3583830 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1816,10 +1816,6 @@ zh-TW: edit_profile_action: 設定個人檔案 edit_profile_step: 您可以設定您的個人檔案,包括上傳大頭貼、變更顯示名稱等等。您也可以選擇於新的跟隨者跟隨前,先對他們進行審核。 explanation: 以下是幾個小技巧,希望它們能幫到您 - final_action: 開始嘟嘟 - final_step: '開始嘟嘟吧!即使您現在沒有跟隨者,其他人仍然能於本站時間軸、主題標籤等地方,看到您的公開嘟文。試著用 #introductions 這個主題標籤介紹一下自己吧。' - full_handle: 您的完整帳號名稱 - full_handle_hint: 您需要將這告訴您的朋友們,這樣他們就能從另一個伺服器向您發送訊息或跟隨您。 subject: 歡迎來到 Mastodon title: "%{name} 誠摯歡迎您的加入!" users: From 1d721b21e1ac89fa1e9c8a845294939d33e55ae9 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 1 Mar 2024 15:51:01 +0100 Subject: [PATCH 02/96] Add attribution to Tabler.io icons used in the new mailer designs (#29470) --- .../images/mailer-new/heading/LICENSE | 21 ++++++++++++++++++ .../images/mailer-new/heading/README.md | 1 + .../btn-app-store.png | Bin .../btn-google-play.png | Bin .../images/mailer-new/welcome-icons/LICENSE | 21 ++++++++++++++++++ .../images/mailer-new/welcome-icons/README.md | 1 + .../apps_step-off.png | Bin .../apps_step-on.png | Bin .../edit_profile_step-off.png | Bin .../edit_profile_step-on.png | Bin .../follow_step-off.png | Bin .../follow_step-on.png | Bin .../post_step-off.png | Bin .../post_step-on.png | Bin .../share_step-off.png | Bin .../share_step-on.png | Bin .../application/mailer/_checklist.html.haml | 6 ++--- 17 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 app/javascript/images/mailer-new/heading/LICENSE create mode 100644 app/javascript/images/mailer-new/heading/README.md rename app/javascript/images/mailer-new/{welcome => store-icons}/btn-app-store.png (100%) rename app/javascript/images/mailer-new/{welcome => store-icons}/btn-google-play.png (100%) create mode 100644 app/javascript/images/mailer-new/welcome-icons/LICENSE create mode 100644 app/javascript/images/mailer-new/welcome-icons/README.md rename app/javascript/images/mailer-new/{welcome => welcome-icons}/apps_step-off.png (100%) rename app/javascript/images/mailer-new/{welcome => welcome-icons}/apps_step-on.png (100%) rename app/javascript/images/mailer-new/{welcome => welcome-icons}/edit_profile_step-off.png (100%) rename app/javascript/images/mailer-new/{welcome => welcome-icons}/edit_profile_step-on.png (100%) rename app/javascript/images/mailer-new/{welcome => welcome-icons}/follow_step-off.png (100%) rename app/javascript/images/mailer-new/{welcome => welcome-icons}/follow_step-on.png (100%) rename app/javascript/images/mailer-new/{welcome => welcome-icons}/post_step-off.png (100%) rename app/javascript/images/mailer-new/{welcome => welcome-icons}/post_step-on.png (100%) rename app/javascript/images/mailer-new/{welcome => welcome-icons}/share_step-off.png (100%) rename app/javascript/images/mailer-new/{welcome => welcome-icons}/share_step-on.png (100%) diff --git a/app/javascript/images/mailer-new/heading/LICENSE b/app/javascript/images/mailer-new/heading/LICENSE new file mode 100644 index 0000000000..974db1ac4b --- /dev/null +++ b/app/javascript/images/mailer-new/heading/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020-2024 Paweł Kuna + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/app/javascript/images/mailer-new/heading/README.md b/app/javascript/images/mailer-new/heading/README.md new file mode 100644 index 0000000000..ecd4b949e7 --- /dev/null +++ b/app/javascript/images/mailer-new/heading/README.md @@ -0,0 +1 @@ +Images in this folder are based on [Tabler.io icons](https://tabler.io/icons). diff --git a/app/javascript/images/mailer-new/welcome/btn-app-store.png b/app/javascript/images/mailer-new/store-icons/btn-app-store.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/btn-app-store.png rename to app/javascript/images/mailer-new/store-icons/btn-app-store.png diff --git a/app/javascript/images/mailer-new/welcome/btn-google-play.png b/app/javascript/images/mailer-new/store-icons/btn-google-play.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/btn-google-play.png rename to app/javascript/images/mailer-new/store-icons/btn-google-play.png diff --git a/app/javascript/images/mailer-new/welcome-icons/LICENSE b/app/javascript/images/mailer-new/welcome-icons/LICENSE new file mode 100644 index 0000000000..974db1ac4b --- /dev/null +++ b/app/javascript/images/mailer-new/welcome-icons/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020-2024 Paweł Kuna + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/app/javascript/images/mailer-new/welcome-icons/README.md b/app/javascript/images/mailer-new/welcome-icons/README.md new file mode 100644 index 0000000000..ecd4b949e7 --- /dev/null +++ b/app/javascript/images/mailer-new/welcome-icons/README.md @@ -0,0 +1 @@ +Images in this folder are based on [Tabler.io icons](https://tabler.io/icons). diff --git a/app/javascript/images/mailer-new/welcome/apps_step-off.png b/app/javascript/images/mailer-new/welcome-icons/apps_step-off.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/apps_step-off.png rename to app/javascript/images/mailer-new/welcome-icons/apps_step-off.png diff --git a/app/javascript/images/mailer-new/welcome/apps_step-on.png b/app/javascript/images/mailer-new/welcome-icons/apps_step-on.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/apps_step-on.png rename to app/javascript/images/mailer-new/welcome-icons/apps_step-on.png diff --git a/app/javascript/images/mailer-new/welcome/edit_profile_step-off.png b/app/javascript/images/mailer-new/welcome-icons/edit_profile_step-off.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/edit_profile_step-off.png rename to app/javascript/images/mailer-new/welcome-icons/edit_profile_step-off.png diff --git a/app/javascript/images/mailer-new/welcome/edit_profile_step-on.png b/app/javascript/images/mailer-new/welcome-icons/edit_profile_step-on.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/edit_profile_step-on.png rename to app/javascript/images/mailer-new/welcome-icons/edit_profile_step-on.png diff --git a/app/javascript/images/mailer-new/welcome/follow_step-off.png b/app/javascript/images/mailer-new/welcome-icons/follow_step-off.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/follow_step-off.png rename to app/javascript/images/mailer-new/welcome-icons/follow_step-off.png diff --git a/app/javascript/images/mailer-new/welcome/follow_step-on.png b/app/javascript/images/mailer-new/welcome-icons/follow_step-on.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/follow_step-on.png rename to app/javascript/images/mailer-new/welcome-icons/follow_step-on.png diff --git a/app/javascript/images/mailer-new/welcome/post_step-off.png b/app/javascript/images/mailer-new/welcome-icons/post_step-off.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/post_step-off.png rename to app/javascript/images/mailer-new/welcome-icons/post_step-off.png diff --git a/app/javascript/images/mailer-new/welcome/post_step-on.png b/app/javascript/images/mailer-new/welcome-icons/post_step-on.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/post_step-on.png rename to app/javascript/images/mailer-new/welcome-icons/post_step-on.png diff --git a/app/javascript/images/mailer-new/welcome/share_step-off.png b/app/javascript/images/mailer-new/welcome-icons/share_step-off.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/share_step-off.png rename to app/javascript/images/mailer-new/welcome-icons/share_step-off.png diff --git a/app/javascript/images/mailer-new/welcome/share_step-on.png b/app/javascript/images/mailer-new/welcome-icons/share_step-on.png similarity index 100% rename from app/javascript/images/mailer-new/welcome/share_step-on.png rename to app/javascript/images/mailer-new/welcome-icons/share_step-on.png diff --git a/app/views/application/mailer/_checklist.html.haml b/app/views/application/mailer/_checklist.html.haml index 31cd5bf35d..324fd7e6f8 100644 --- a/app/views/application/mailer/_checklist.html.haml +++ b/app/views/application/mailer/_checklist.html.haml @@ -16,7 +16,7 @@ = image_tag frontend_asset_url('images/mailer-new/welcome/checkbox-off.png'), alt: '', width: 20, height: 20 %td.email-checklist-icons-step-td - if defined?(key) - = image_tag frontend_asset_url("images/mailer-new/welcome/#{key}-#{checked ? 'on' : 'off'}.png"), alt: '', width: 40, height: 40 + = image_tag frontend_asset_url("images/mailer-new/welcome-icons/#{key}-#{checked ? 'on' : 'off'}.png"), alt: '', width: 40, height: 40 %td.email-checklist-text-td .email-desktop-flex /[if mso] @@ -31,8 +31,8 @@ %div - if defined?(show_apps_buttons) && show_apps_buttons .email-welcome-apps-btns - = link_to image_tag(frontend_asset_url('images/mailer-new/welcome/btn-app-store.png'), alt: t('user_mailer.welcome.apps_ios_action'), width: 120, height: 40), 'https://apps.apple.com/app/mastodon-for-iphone-and-ipad/id1571998974' - = link_to image_tag(frontend_asset_url('images/mailer-new/welcome/btn-google-play.png'), alt: t('user_mailer.welcome.apps_android_action'), width: 120, height: 40), 'https://play.google.com/store/apps/details?id=org.joinmastodon.android' + = link_to image_tag(frontend_asset_url('images/mailer-new/store-icons/btn-app-store.png'), alt: t('user_mailer.welcome.apps_ios_action'), width: 120, height: 40), 'https://apps.apple.com/app/mastodon-for-iphone-and-ipad/id1571998974' + = link_to image_tag(frontend_asset_url('images/mailer-new/store-icons/btn-google-play.png'), alt: t('user_mailer.welcome.apps_android_action'), width: 120, height: 40), 'https://play.google.com/store/apps/details?id=org.joinmastodon.android' - elsif defined?(button_text) && defined?(button_url) && defined?(checked) && !checked = render 'application/mailer/button', text: button_text, url: button_url, has_arrow: false /[if mso] From a25014de8fae061f191c95608aabe3d6d02ac45d Mon Sep 17 00:00:00 2001 From: Daniel M Brasil Date: Fri, 1 Mar 2024 13:17:40 -0300 Subject: [PATCH 03/96] Improve `IpBlock` model test coverage (#29460) --- spec/models/ip_block_spec.rb | 53 +++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/spec/models/ip_block_spec.rb b/spec/models/ip_block_spec.rb index ed58826672..290b99b288 100644 --- a/spec/models/ip_block_spec.rb +++ b/spec/models/ip_block_spec.rb @@ -3,7 +3,32 @@ require 'rails_helper' describe IpBlock do - describe 'to_log_human_identifier' do + describe 'validations' do + it 'validates ip presence', :aggregate_failures do + ip_block = described_class.new(ip: nil, severity: :no_access) + + expect(ip_block).to_not be_valid + expect(ip_block).to model_have_error_on_field(:ip) + end + + it 'validates severity presence', :aggregate_failures do + ip_block = described_class.new(ip: '127.0.0.1', severity: nil) + + expect(ip_block).to_not be_valid + expect(ip_block).to model_have_error_on_field(:severity) + end + + it 'validates ip uniqueness', :aggregate_failures do + described_class.create!(ip: '127.0.0.1', severity: :no_access) + + ip_block = described_class.new(ip: '127.0.0.1', severity: :no_access) + + expect(ip_block).to_not be_valid + expect(ip_block).to model_have_error_on_field(:ip) + end + end + + describe '#to_log_human_identifier' do let(:ip_block) { described_class.new(ip: '192.168.0.1') } it 'combines the IP and prefix into a string' do @@ -12,4 +37,30 @@ describe IpBlock do expect(result).to eq('192.168.0.1/32') end end + + describe '.blocked?' do + context 'when the IP is blocked' do + it 'returns true' do + described_class.create!(ip: '127.0.0.1', severity: :no_access) + + expect(described_class.blocked?('127.0.0.1')).to be true + end + end + + context 'when the IP is not blocked' do + it 'returns false' do + expect(described_class.blocked?('127.0.0.1')).to be false + end + end + end + + describe 'after_commit' do + it 'resets the cache' do + allow(Rails.cache).to receive(:delete) + + described_class.create!(ip: '127.0.0.1', severity: :no_access) + + expect(Rails.cache).to have_received(:delete).with(described_class::CACHE_KEY) + end + end end From 18945f62e07617ac44b7a25a61799b0959fe67f7 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Fri, 1 Mar 2024 11:24:45 -0500 Subject: [PATCH 04/96] Convert more API specs from controller->request style (#29004) --- .../api/v1/accounts/statuses_spec.rb} | 48 ++++++++++--------- .../api/v1/admin/trends/statuses_spec.rb} | 21 ++++---- .../api/v1/admin/trends/tags_spec.rb} | 21 ++++---- .../api/v1/announcements/reactions_spec.rb} | 24 +++++----- .../api/v1/announcements_spec.rb} | 27 +++++------ .../api/v1/conversations_spec.rb} | 39 +++++++-------- .../api/v1/filters_spec.rb} | 34 ++++++------- .../api/v1/polls/votes_spec.rb} | 18 +++---- .../api/v1/push/subscriptions_spec.rb} | 41 ++++++++-------- .../api/v1/streaming_spec.rb} | 42 ++++++++++------ 10 files changed, 159 insertions(+), 156 deletions(-) rename spec/{controllers/api/v1/accounts/statuses_controller_spec.rb => requests/api/v1/accounts/statuses_spec.rb} (71%) rename spec/{controllers/api/v1/admin/trends/statuses_controller_spec.rb => requests/api/v1/admin/trends/statuses_spec.rb} (63%) rename spec/{controllers/api/v1/admin/trends/tags_controller_spec.rb => requests/api/v1/admin/trends/tags_spec.rb} (64%) rename spec/{controllers/api/v1/announcements/reactions_controller_spec.rb => requests/api/v1/announcements/reactions_spec.rb} (64%) rename spec/{controllers/api/v1/announcements_controller_spec.rb => requests/api/v1/announcements_spec.rb} (59%) rename spec/{controllers/api/v1/conversations_controller_spec.rb => requests/api/v1/conversations_spec.rb} (50%) rename spec/{controllers/api/v1/filters_controller_spec.rb => requests/api/v1/filters_spec.rb} (75%) rename spec/{controllers/api/v1/polls/votes_controller_spec.rb => requests/api/v1/polls/votes_spec.rb} (61%) rename spec/{controllers/api/v1/push/subscriptions_controller_spec.rb => requests/api/v1/push/subscriptions_spec.rb} (67%) rename spec/{controllers/api/v1/streaming_controller_spec.rb => requests/api/v1/streaming_spec.rb} (51%) diff --git a/spec/controllers/api/v1/accounts/statuses_controller_spec.rb b/spec/requests/api/v1/accounts/statuses_spec.rb similarity index 71% rename from spec/controllers/api/v1/accounts/statuses_controller_spec.rb rename to spec/requests/api/v1/accounts/statuses_spec.rb index 102e3b8e91..371867b215 100644 --- a/spec/controllers/api/v1/accounts/statuses_controller_spec.rb +++ b/spec/requests/api/v1/accounts/statuses_spec.rb @@ -2,20 +2,16 @@ require 'rails_helper' -describe Api::V1::Accounts::StatusesController do - render_views +describe 'API V1 Accounts Statuses' do + let(:user) { Fabricate(:user) } + let(:scopes) { 'read:statuses' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - let(:user) { Fabricate(:user) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read:statuses') } - - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #index' do + describe 'GET /api/v1/accounts/:account_id/statuses' do it 'returns expected headers', :aggregate_failures do Fabricate(:status, account: user.account) - get :index, params: { account_id: user.account.id, limit: 1 } + get "/api/v1/accounts/#{user.account.id}/statuses", params: { limit: 1 }, headers: headers expect(response).to have_http_status(200) expect(links_from_header.size) @@ -24,7 +20,7 @@ describe Api::V1::Accounts::StatusesController do context 'with only media' do it 'returns http success' do - get :index, params: { account_id: user.account.id, only_media: true } + get "/api/v1/accounts/#{user.account.id}/statuses", params: { only_media: true }, headers: headers expect(response).to have_http_status(200) end @@ -36,7 +32,7 @@ describe Api::V1::Accounts::StatusesController do before do Fabricate(:status, account: user.account, thread: Fabricate(:status)) # Reply to another user - get :index, params: { account_id: user.account.id, exclude_replies: true } + get "/api/v1/accounts/#{user.account.id}/statuses", params: { exclude_replies: true }, headers: headers end it 'returns posts along with self replies', :aggregate_failures do @@ -57,7 +53,7 @@ describe Api::V1::Accounts::StatusesController do end it 'returns http success and includes a header link' do - get :index, params: { account_id: user.account.id, pinned: true } + get "/api/v1/accounts/#{user.account.id}/statuses", params: { pinned: true }, headers: headers expect(response).to have_http_status(200) expect(links_from_header.size) @@ -79,7 +75,7 @@ describe Api::V1::Accounts::StatusesController do end it 'returns http success and header pagination links to prev and next' do - get :index, params: { account_id: user.account.id, pinned: true } + get "/api/v1/accounts/#{user.account.id}/statuses", params: { pinned: true }, headers: headers expect(response).to have_http_status(200) expect(links_from_header.size) @@ -109,15 +105,19 @@ describe Api::V1::Accounts::StatusesController do end it 'returns http success' do - get :index, params: { account_id: account.id, pinned: true } + get "/api/v1/accounts/#{account.id}/statuses", params: { pinned: true }, headers: headers + expect(response).to have_http_status(200) end context 'when user does not follow account' do it 'lists the public status only' do - get :index, params: { account_id: account.id, pinned: true } - json = body_as_json - expect(json.map { |item| item[:id].to_i }).to eq [status.id] + get "/api/v1/accounts/#{account.id}/statuses", params: { pinned: true }, headers: headers + + expect(body_as_json) + .to contain_exactly( + a_hash_including(id: status.id.to_s) + ) end end @@ -127,9 +127,13 @@ describe Api::V1::Accounts::StatusesController do end it 'lists both the public and the private statuses' do - get :index, params: { account_id: account.id, pinned: true } - json = body_as_json - expect(json.map { |item| item[:id].to_i }).to contain_exactly(status.id, private_status.id) + get "/api/v1/accounts/#{account.id}/statuses", params: { pinned: true }, headers: headers + + expect(body_as_json) + .to contain_exactly( + a_hash_including(id: status.id.to_s), + a_hash_including(id: private_status.id.to_s) + ) end end end diff --git a/spec/controllers/api/v1/admin/trends/statuses_controller_spec.rb b/spec/requests/api/v1/admin/trends/statuses_spec.rb similarity index 63% rename from spec/controllers/api/v1/admin/trends/statuses_controller_spec.rb rename to spec/requests/api/v1/admin/trends/statuses_spec.rb index 4d80055ac0..04aa0465f2 100644 --- a/spec/controllers/api/v1/admin/trends/statuses_controller_spec.rb +++ b/spec/requests/api/v1/admin/trends/statuses_spec.rb @@ -2,31 +2,26 @@ require 'rails_helper' -describe Api::V1::Admin::Trends::StatusesController do - render_views - +describe 'API V1 Admin Trends Statuses' do let(:role) { UserRole.find_by(name: 'Admin') } let(:user) { Fabricate(:user, role: role) } let(:scopes) { 'admin:read admin:write' } let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } let(:account) { Fabricate(:account) } let(:status) { Fabricate(:status) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #index' do + describe 'GET /api/v1/admin/trends/statuses' do it 'returns http success' do - get :index, params: { account_id: account.id, limit: 2 } + get '/api/v1/admin/trends/statuses', params: { account_id: account.id, limit: 2 }, headers: headers expect(response).to have_http_status(200) end end - describe 'POST #approve' do + describe 'POST /api/v1/admin/trends/statuses/:id/approve' do before do - post :approve, params: { id: status.id } + post "/api/v1/admin/trends/statuses/#{status.id}/approve", headers: headers end it_behaves_like 'forbidden for wrong scope', 'write:statuses' @@ -37,9 +32,9 @@ describe Api::V1::Admin::Trends::StatusesController do end end - describe 'POST #reject' do + describe 'POST /api/v1/admin/trends/statuses/:id/unapprove' do before do - post :reject, params: { id: status.id } + post "/api/v1/admin/trends/statuses/#{status.id}/reject", headers: headers end it_behaves_like 'forbidden for wrong scope', 'write:statuses' diff --git a/spec/controllers/api/v1/admin/trends/tags_controller_spec.rb b/spec/requests/api/v1/admin/trends/tags_spec.rb similarity index 64% rename from spec/controllers/api/v1/admin/trends/tags_controller_spec.rb rename to spec/requests/api/v1/admin/trends/tags_spec.rb index 0b8eb8c3b8..b1437dad8d 100644 --- a/spec/controllers/api/v1/admin/trends/tags_controller_spec.rb +++ b/spec/requests/api/v1/admin/trends/tags_spec.rb @@ -2,31 +2,26 @@ require 'rails_helper' -describe Api::V1::Admin::Trends::TagsController do - render_views - +describe 'API V1 Admin Trends Tags' do let(:role) { UserRole.find_by(name: 'Admin') } let(:user) { Fabricate(:user, role: role) } let(:scopes) { 'admin:read admin:write' } let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } let(:account) { Fabricate(:account) } let(:tag) { Fabricate(:tag) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #index' do + describe 'GET /api/v1/admin/trends/tags' do it 'returns http success' do - get :index, params: { account_id: account.id, limit: 2 } + get '/api/v1/admin/trends/tags', params: { account_id: account.id, limit: 2 }, headers: headers expect(response).to have_http_status(200) end end - describe 'POST #approve' do + describe 'POST /api/v1/admin/trends/tags/:id/approve' do before do - post :approve, params: { id: tag.id } + post "/api/v1/admin/trends/tags/#{tag.id}/approve", headers: headers end it_behaves_like 'forbidden for wrong scope', 'write:statuses' @@ -37,9 +32,9 @@ describe Api::V1::Admin::Trends::TagsController do end end - describe 'POST #reject' do + describe 'POST /api/v1/admin/trends/tags/:id/reject' do before do - post :reject, params: { id: tag.id } + post "/api/v1/admin/trends/tags/#{tag.id}/reject", headers: headers end it_behaves_like 'forbidden for wrong scope', 'write:statuses' diff --git a/spec/controllers/api/v1/announcements/reactions_controller_spec.rb b/spec/requests/api/v1/announcements/reactions_spec.rb similarity index 64% rename from spec/controllers/api/v1/announcements/reactions_controller_spec.rb rename to spec/requests/api/v1/announcements/reactions_spec.rb index c1debc33fe..ffacb2b0af 100644 --- a/spec/controllers/api/v1/announcements/reactions_controller_spec.rb +++ b/spec/requests/api/v1/announcements/reactions_spec.rb @@ -2,27 +2,26 @@ require 'rails_helper' -RSpec.describe Api::V1::Announcements::ReactionsController do - render_views - +RSpec.describe 'API V1 Announcements Reactions' do let(:user) { Fabricate(:user) } let(:scopes) { 'write:favourites' } let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } let!(:announcement) { Fabricate(:announcement) } - describe 'PUT #update' do + describe 'PUT /api/v1/announcements/:announcement_id/reactions/:id' do context 'without token' do it 'returns http unauthorized' do - put :update, params: { announcement_id: announcement.id, id: '😂' } + put "/api/v1/announcements/#{announcement.id}/reactions/#{escaped_emoji}" + expect(response).to have_http_status 401 end end context 'with token' do before do - allow(controller).to receive(:doorkeeper_token) { token } - put :update, params: { announcement_id: announcement.id, id: '😂' } + put "/api/v1/announcements/#{announcement.id}/reactions/#{escaped_emoji}", headers: headers end it 'creates reaction', :aggregate_failures do @@ -32,22 +31,21 @@ RSpec.describe Api::V1::Announcements::ReactionsController do end end - describe 'DELETE #destroy' do + describe 'DELETE /api/v1/announcements/:announcement_id/reactions/:id' do before do announcement.announcement_reactions.create!(account: user.account, name: '😂') end context 'without token' do it 'returns http unauthorized' do - delete :destroy, params: { announcement_id: announcement.id, id: '😂' } + delete "/api/v1/announcements/#{announcement.id}/reactions/#{escaped_emoji}" expect(response).to have_http_status 401 end end context 'with token' do before do - allow(controller).to receive(:doorkeeper_token) { token } - delete :destroy, params: { announcement_id: announcement.id, id: '😂' } + delete "/api/v1/announcements/#{announcement.id}/reactions/#{escaped_emoji}", headers: headers end it 'creates reaction', :aggregate_failures do @@ -56,4 +54,8 @@ RSpec.describe Api::V1::Announcements::ReactionsController do end end end + + def escaped_emoji + CGI.escape('😂') + end end diff --git a/spec/controllers/api/v1/announcements_controller_spec.rb b/spec/requests/api/v1/announcements_spec.rb similarity index 59% rename from spec/controllers/api/v1/announcements_controller_spec.rb rename to spec/requests/api/v1/announcements_spec.rb index 95ce8fd9fc..1624b76012 100644 --- a/spec/controllers/api/v1/announcements_controller_spec.rb +++ b/spec/requests/api/v1/announcements_spec.rb @@ -2,27 +2,26 @@ require 'rails_helper' -RSpec.describe Api::V1::AnnouncementsController do - render_views - - let(:user) { Fabricate(:user) } - let(:scopes) { 'read' } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } +RSpec.describe 'API V1 Announcements' do + let(:user) { Fabricate(:user) } + let(:scopes) { 'read' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } let!(:announcement) { Fabricate(:announcement) } - describe 'GET #index' do + describe 'GET /api/v1/announcements' do context 'without token' do it 'returns http unprocessable entity' do - get :index + get '/api/v1/announcements' + expect(response).to have_http_status 422 end end context 'with token' do before do - allow(controller).to receive(:doorkeeper_token) { token } - get :index + get '/api/v1/announcements', headers: headers end it 'returns http success' do @@ -31,10 +30,11 @@ RSpec.describe Api::V1::AnnouncementsController do end end - describe 'POST #dismiss' do + describe 'POST /api/v1/announcements/:id/dismiss' do context 'without token' do it 'returns http unauthorized' do - post :dismiss, params: { id: announcement.id } + post "/api/v1/announcements/#{announcement.id}/dismiss" + expect(response).to have_http_status 401 end end @@ -43,8 +43,7 @@ RSpec.describe Api::V1::AnnouncementsController do let(:scopes) { 'write:accounts' } before do - allow(controller).to receive(:doorkeeper_token) { token } - post :dismiss, params: { id: announcement.id } + post "/api/v1/announcements/#{announcement.id}/dismiss", headers: headers end it 'dismisses announcement', :aggregate_failures do diff --git a/spec/controllers/api/v1/conversations_controller_spec.rb b/spec/requests/api/v1/conversations_spec.rb similarity index 50% rename from spec/controllers/api/v1/conversations_controller_spec.rb rename to spec/requests/api/v1/conversations_spec.rb index 2734e4a07b..e2327d9a93 100644 --- a/spec/controllers/api/v1/conversations_controller_spec.rb +++ b/spec/requests/api/v1/conversations_spec.rb @@ -2,53 +2,48 @@ require 'rails_helper' -RSpec.describe Api::V1::ConversationsController do - render_views - +RSpec.describe 'API V1 Conversations' do let!(:user) { Fabricate(:user, account_attributes: { username: 'alice' }) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'read:statuses' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + let(:other) { Fabricate(:user) } - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #index', :sidekiq_inline do - let(:scopes) { 'read:statuses' } - + describe 'GET /api/v1/conversations', :sidekiq_inline do before do PostStatusService.new.call(other.account, text: 'Hey @alice', visibility: 'direct') PostStatusService.new.call(user.account, text: 'Hey, nobody here', visibility: 'direct') end it 'returns pagination headers', :aggregate_failures do - get :index, params: { limit: 1 } + get '/api/v1/conversations', params: { limit: 1 }, headers: headers expect(response).to have_http_status(200) expect(response.headers['Link'].links.size).to eq(2) end it 'returns conversations', :aggregate_failures do - get :index - json = body_as_json - expect(json.size).to eq 2 - expect(json[0][:accounts].size).to eq 1 + get '/api/v1/conversations', headers: headers + + expect(body_as_json.size).to eq 2 + expect(body_as_json[0][:accounts].size).to eq 1 end context 'with since_id' do context 'when requesting old posts' do it 'returns conversations' do - get :index, params: { since_id: Mastodon::Snowflake.id_at(1.hour.ago, with_random: false) } - json = body_as_json - expect(json.size).to eq 2 + get '/api/v1/conversations', params: { since_id: Mastodon::Snowflake.id_at(1.hour.ago, with_random: false) }, headers: headers + + expect(body_as_json.size).to eq 2 end end context 'when requesting posts in the future' do it 'returns no conversation' do - get :index, params: { since_id: Mastodon::Snowflake.id_at(1.hour.from_now, with_random: false) } - json = body_as_json - expect(json.size).to eq 0 + get '/api/v1/conversations', params: { since_id: Mastodon::Snowflake.id_at(1.hour.from_now, with_random: false) }, headers: headers + + expect(body_as_json.size).to eq 0 end end end diff --git a/spec/controllers/api/v1/filters_controller_spec.rb b/spec/requests/api/v1/filters_spec.rb similarity index 75% rename from spec/controllers/api/v1/filters_controller_spec.rb rename to spec/requests/api/v1/filters_spec.rb index b0f64ccf41..deb6e74217 100644 --- a/spec/controllers/api/v1/filters_controller_spec.rb +++ b/spec/requests/api/v1/filters_spec.rb @@ -2,23 +2,18 @@ require 'rails_helper' -RSpec.describe Api::V1::FiltersController do - render_views +RSpec.describe 'API V1 Filters' do + let(:user) { Fabricate(:user) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - let(:user) { Fabricate(:user) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } - - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #index' do + describe 'GET /api/v1/filters' do let(:scopes) { 'read:filters' } let!(:filter) { Fabricate(:custom_filter, account: user.account) } let!(:custom_filter_keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) } it 'returns http success' do - get :index + get '/api/v1/filters', headers: headers expect(response).to have_http_status(200) expect(body_as_json) .to contain_exactly( @@ -27,13 +22,13 @@ RSpec.describe Api::V1::FiltersController do end end - describe 'POST #create' do + describe 'POST /api/v1/filters' do let(:scopes) { 'write:filters' } let(:irreversible) { true } let(:whole_word) { false } before do - post :create, params: { phrase: 'magic', context: %w(home), irreversible: irreversible, whole_word: whole_word } + post '/api/v1/filters', params: { phrase: 'magic', context: %w(home), irreversible: irreversible, whole_word: whole_word }, headers: headers end it 'creates a filter', :aggregate_failures do @@ -64,24 +59,25 @@ RSpec.describe Api::V1::FiltersController do end end - describe 'GET #show' do + describe 'GET /api/v1/filters/:id' do let(:scopes) { 'read:filters' } let(:filter) { Fabricate(:custom_filter, account: user.account) } let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) } it 'returns http success' do - get :show, params: { id: keyword.id } + get "/api/v1/filters/#{keyword.id}", headers: headers + expect(response).to have_http_status(200) end end - describe 'PUT #update' do + describe 'PUT /api/v1/filters/:id' do let(:scopes) { 'write:filters' } let(:filter) { Fabricate(:custom_filter, account: user.account) } let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) } before do - put :update, params: { id: keyword.id, phrase: 'updated' } + put "/api/v1/filters/#{keyword.id}", headers: headers, params: { phrase: 'updated' } end it 'updates the filter', :aggregate_failures do @@ -90,13 +86,13 @@ RSpec.describe Api::V1::FiltersController do end end - describe 'DELETE #destroy' do + describe 'DELETE /api/v1/filters/:id' do let(:scopes) { 'write:filters' } let(:filter) { Fabricate(:custom_filter, account: user.account) } let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) } before do - delete :destroy, params: { id: keyword.id } + delete "/api/v1/filters/#{keyword.id}", headers: headers end it 'removes the filter', :aggregate_failures do diff --git a/spec/controllers/api/v1/polls/votes_controller_spec.rb b/spec/requests/api/v1/polls/votes_spec.rb similarity index 61% rename from spec/controllers/api/v1/polls/votes_controller_spec.rb rename to spec/requests/api/v1/polls/votes_spec.rb index 5de225a487..e2b22708be 100644 --- a/spec/controllers/api/v1/polls/votes_controller_spec.rb +++ b/spec/requests/api/v1/polls/votes_spec.rb @@ -2,30 +2,32 @@ require 'rails_helper' -RSpec.describe Api::V1::Polls::VotesController do - render_views - +RSpec.describe 'API V1 Polls Votes' do let(:user) { Fabricate(:user) } let(:scopes) { 'write:statuses' } let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - before { allow(controller).to receive(:doorkeeper_token) { token } } - - describe 'POST #create' do + describe 'POST /api/v1/polls/:poll_id/votes' do let(:poll) { Fabricate(:poll) } before do - post :create, params: { poll_id: poll.id, choices: %w(1) } + post "/api/v1/polls/#{poll.id}/votes", params: { choices: %w(1) }, headers: headers end it 'creates a vote', :aggregate_failures do expect(response).to have_http_status(200) - vote = poll.votes.where(account: user.account).first expect(vote).to_not be_nil expect(vote.choice).to eq 1 expect(poll.reload.cached_tallies).to eq [0, 1] end + + private + + def vote + poll.votes.where(account: user.account).first + end end end diff --git a/spec/controllers/api/v1/push/subscriptions_controller_spec.rb b/spec/requests/api/v1/push/subscriptions_spec.rb similarity index 67% rename from spec/controllers/api/v1/push/subscriptions_controller_spec.rb rename to spec/requests/api/v1/push/subscriptions_spec.rb index 1681914680..d699fd1e08 100644 --- a/spec/controllers/api/v1/push/subscriptions_controller_spec.rb +++ b/spec/requests/api/v1/push/subscriptions_spec.rb @@ -2,9 +2,7 @@ require 'rails_helper' -describe Api::V1::Push::SubscriptionsController do - render_views - +describe 'API V1 Push Subscriptions' do let(:user) { Fabricate(:user) } let(:create_payload) do { @@ -34,15 +32,13 @@ describe Api::V1::Push::SubscriptionsController do }, }.with_indifferent_access end - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'push') } + let(:scopes) { 'push' } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'POST #create' do + describe 'POST /api/v1/push/subscription' do before do - post :create, params: create_payload + post '/api/v1/push/subscription', params: create_payload, headers: headers end it 'saves push subscriptions' do @@ -56,19 +52,23 @@ describe Api::V1::Push::SubscriptionsController do end it 'replaces old subscription on repeat calls' do - post :create, params: create_payload + post '/api/v1/push/subscription', params: create_payload, headers: headers + expect(Web::PushSubscription.where(endpoint: create_payload[:subscription][:endpoint]).count).to eq 1 end it 'returns the expected JSON' do - expect(body_as_json.with_indifferent_access).to include({ endpoint: create_payload[:subscription][:endpoint], alerts: {}, policy: 'all' }) + expect(body_as_json.with_indifferent_access) + .to include( + { endpoint: create_payload[:subscription][:endpoint], alerts: {}, policy: 'all' } + ) end end - describe 'PUT #update' do + describe 'PUT /api/v1/push/subscription' do before do - post :create, params: create_payload - put :update, params: alerts_payload + post '/api/v1/push/subscription', params: create_payload, headers: headers + put '/api/v1/push/subscription', params: alerts_payload, headers: headers end it 'changes alert settings' do @@ -82,14 +82,17 @@ describe Api::V1::Push::SubscriptionsController do end it 'returns the expected JSON' do - expect(body_as_json.with_indifferent_access).to include({ endpoint: create_payload[:subscription][:endpoint], alerts: alerts_payload[:data][:alerts], policy: alerts_payload[:data][:policy] }) + expect(body_as_json.with_indifferent_access) + .to include( + { endpoint: create_payload[:subscription][:endpoint], alerts: alerts_payload[:data][:alerts], policy: alerts_payload[:data][:policy] } + ) end end - describe 'DELETE #destroy' do + describe 'DELETE /api/v1/push/subscription' do before do - post :create, params: create_payload - delete :destroy + post '/api/v1/push/subscription', params: create_payload, headers: headers + delete '/api/v1/push/subscription', headers: headers end it 'removes the subscription' do diff --git a/spec/controllers/api/v1/streaming_controller_spec.rb b/spec/requests/api/v1/streaming_spec.rb similarity index 51% rename from spec/controllers/api/v1/streaming_controller_spec.rb rename to spec/requests/api/v1/streaming_spec.rb index 099f68a74e..6b550dfa60 100644 --- a/spec/controllers/api/v1/streaming_controller_spec.rb +++ b/spec/requests/api/v1/streaming_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -describe Api::V1::StreamingController do +describe 'API V1 Streaming' do around do |example| before = Rails.configuration.x.streaming_api_base_url Rails.configuration.x.streaming_api_base_url = "wss://#{Rails.configuration.x.web_domain}" @@ -10,14 +10,13 @@ describe Api::V1::StreamingController do Rails.configuration.x.streaming_api_base_url = before end - before do - request.headers.merge! Host: Rails.configuration.x.web_domain - end + let(:headers) { { 'Host' => Rails.configuration.x.web_domain } } context 'with streaming api on same host' do - describe 'GET #index' do + describe 'GET /api/v1/streaming' do it 'raises ActiveRecord::RecordNotFound' do - get :index + get '/api/v1/streaming', headers: headers + expect(response).to have_http_status(404) end end @@ -28,20 +27,33 @@ describe Api::V1::StreamingController do Rails.configuration.x.streaming_api_base_url = "wss://streaming-#{Rails.configuration.x.web_domain}" end - describe 'GET #index' do + describe 'GET /api/v1/streaming' do it 'redirects to streaming host' do - get :index, params: { access_token: 'deadbeef', stream: 'public' } - expect(response).to have_http_status(301) - request_uri = URI.parse(request.url) - redirect_to_uri = URI.parse(response.location) - [:scheme, :path, :query, :fragment].each do |part| - expect(redirect_to_uri.send(part)).to eq(request_uri.send(part)), "redirect target #{part}" - end - expect(redirect_to_uri.host).to eq(streaming_host), 'redirect target host' + get '/api/v1/streaming', headers: headers, params: { access_token: 'deadbeef', stream: 'public' } + + expect(response) + .to have_http_status(301) + + expect(redirect_to_uri) + .to have_attributes( + fragment: request_uri.fragment, + host: eq(streaming_host), + path: request_uri.path, + query: request_uri.query, + scheme: request_uri.scheme + ) end private + def request_uri + URI.parse(request.url) + end + + def redirect_to_uri + URI.parse(response.location) + end + def streaming_host URI.parse(Rails.configuration.x.streaming_api_base_url).host end From b4af3639e831c974cba3c4bb6d7253883e79c1ce Mon Sep 17 00:00:00 2001 From: Krzysztof Piwowar Date: Fri, 1 Mar 2024 18:35:35 +0100 Subject: [PATCH 05/96] Add Kashubian to languages dropdown (#26024) --- app/helpers/languages_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index 87f0f288d3..798f027167 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -191,6 +191,7 @@ module LanguagesHelper chr: ['Cherokee', 'ᏣᎳᎩ ᎦᏬᏂᎯᏍᏗ'].freeze, ckb: ['Sorani (Kurdish)', 'سۆرانی'].freeze, cnr: ['Montenegrin', 'crnogorski'].freeze, + csb: ['Kashubian', 'Kaszëbsczi'].freeze, jbo: ['Lojban', 'la .lojban.'].freeze, kab: ['Kabyle', 'Taqbaylit'].freeze, ldn: ['Láadan', 'Láadan'].freeze, From 8d22599318a3eec7b69df632eab463a85899cf10 Mon Sep 17 00:00:00 2001 From: Helge Date: Fri, 1 Mar 2024 18:36:00 +0100 Subject: [PATCH 06/96] Add Pennsylvania Dutch to languages dropdown (#26634) --- app/helpers/languages_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index 798f027167..5fc2d96d74 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -196,6 +196,7 @@ module LanguagesHelper kab: ['Kabyle', 'Taqbaylit'].freeze, ldn: ['Láadan', 'Láadan'].freeze, lfn: ['Lingua Franca Nova', 'lingua franca nova'].freeze, + pdc: ['Pennsylvania Dutch', 'Pennsilfaani-Deitsch'].freeze, sco: ['Scots', 'Scots'].freeze, sma: ['Southern Sami', 'Åarjelsaemien Gïele'].freeze, smj: ['Lule Sami', 'Julevsámegiella'].freeze, From 5ab944af95ddf496cde18a6bdae6a1bd87e7a713 Mon Sep 17 00:00:00 2001 From: gunchleoc Date: Fri, 1 Mar 2024 17:40:48 +0000 Subject: [PATCH 07/96] Rename Panjabi to Punjabi (#27117) --- app/helpers/languages_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index 5fc2d96d74..bea122cad6 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -127,7 +127,7 @@ module LanguagesHelper om: ['Oromo', 'Afaan Oromoo'].freeze, or: ['Oriya', 'ଓଡ଼ିଆ'].freeze, os: ['Ossetian', 'ирон æвзаг'].freeze, - pa: ['Panjabi', 'ਪੰਜਾਬੀ'].freeze, + pa: ['Punjabi', 'ਪੰਜਾਬੀ'].freeze, pi: ['Pāli', 'पाऴि'].freeze, pl: ['Polish', 'Polski'].freeze, ps: ['Pashto', 'پښتو'].freeze, From 1d5de8b26acb448f58e2ce310c1fe35e0750267b Mon Sep 17 00:00:00 2001 From: gunchleoc Date: Fri, 1 Mar 2024 17:41:49 +0000 Subject: [PATCH 08/96] Add Vai to posting languages (#27136) --- app/helpers/languages_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index bea122cad6..65ade9fd2a 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -202,6 +202,7 @@ module LanguagesHelper smj: ['Lule Sami', 'Julevsámegiella'].freeze, szl: ['Silesian', 'ślůnsko godka'].freeze, tok: ['Toki Pona', 'toki pona'].freeze, + vai: ['Vai', 'ꕙꔤ'].freeze, xal: ['Kalmyk', 'Хальмг келн'].freeze, zba: ['Balaibalan', 'باليبلن'].freeze, zgh: ['Standard Moroccan Tamazight', 'ⵜⴰⵎⴰⵣⵉⵖⵜ'].freeze, From b6b94c971fa7747aeb7d7588319429d6a5d856c9 Mon Sep 17 00:00:00 2001 From: Dave MacLeod <56599343+Dhghomon@users.noreply.github.com> Date: Sat, 2 Mar 2024 02:51:22 +0900 Subject: [PATCH 09/96] Add Interlingue to available_locales (#28630) --- config/initializers/i18n.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/config/initializers/i18n.rb b/config/initializers/i18n.rb index 1c1cea1b94..8643060fa6 100644 --- a/config/initializers/i18n.rb +++ b/config/initializers/i18n.rb @@ -42,6 +42,7 @@ Rails.application.configure do :hu, :hy, :id, + :ie, :ig, :io, :is, From 64b8ba36bb1ac97b7c6dc0b259682a9a4f02524f Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Sat, 2 Mar 2024 13:31:43 -0500 Subject: [PATCH 10/96] Add `bin/dev` script to launch foreman (#28242) --- README.md | 18 +++++++----------- Vagrantfile | 2 +- bin/dev | 20 ++++++++++++++++++++ 3 files changed, 28 insertions(+), 12 deletions(-) create mode 100755 bin/dev diff --git a/README.md b/README.md index 6cf722b355..7f9b115c4f 100644 --- a/README.md +++ b/README.md @@ -83,23 +83,19 @@ A **Vagrant** configuration is included for development purposes. To use it, com - Install Vagrant and Virtualbox - Install the `vagrant-hostsupdater` plugin: `vagrant plugin install vagrant-hostsupdater` - Run `vagrant up` -- Run `vagrant ssh -c "cd /vagrant && foreman start"` +- Run `vagrant ssh -c "cd /vagrant && bin/dev"` - Open `http://mastodon.local` in your browser ### MacOS To set up **MacOS** for native development, complete the following steps: -- Install the latest stable Ruby version (use a Ruby version manager for easy installation and management of Ruby versions) -- Run `brew install postgresql@14` -- Run `brew install redis` -- Run `brew install imagemagick` -- Run `brew install libidn` -- Install Foreman or a similar tool (such as [overmind](https://github.com/DarthSim/overmind)) to handle multiple process launching. -- Navigate to Mastodon's root directory and run `brew install nvm` then `nvm use` to use the version from .nvmrc +- Use a Ruby version manager to install the specified version from `.ruby-version` +- Run `brew install postgresql@14 redis imagemagick libidn` to install required dependencies +- Navigate to Mastodon's root directory and run `brew install nvm` then `nvm use` to use the version from `.nvmrc` - Run `corepack enable && corepack prepare` - Run `bundle exec rails db:setup` (optionally prepend `RAILS_ENV=development` to target the dev environment) -- Finally, run `overmind start -f Procfile.dev` +- Finally, run `bin/dev` which will launch the local services via `overmind` (if installed) or `foreman` ### Docker @@ -108,7 +104,7 @@ For development with **Docker**, complete the following steps: - Install Docker Desktop - Run `docker compose -f .devcontainer/docker-compose.yml up -d` - Run `docker compose -f .devcontainer/docker-compose.yml exec app .devcontainer/post-create.sh` -- Finally, run `docker compose -f .devcontainer/docker-compose.yml exec app foreman start -f Procfile.dev` +- Finally, run `docker compose -f .devcontainer/docker-compose.yml exec app bin/dev` If you are using an IDE with [support for the Development Container specification](https://containers.dev/supporting), it will run the above `docker compose` commands automatically. For **Visual Studio Code** this requires the [Dev Container extension](https://containers.dev/supporting#dev-containers). @@ -119,7 +115,7 @@ To get you coding in just a few minutes, GitHub Codespaces provides a web-based - Click this button to create a new codespace:
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=52281283&devcontainer_path=.devcontainer%2Fcodespaces%2Fdevcontainer.json) - Wait for the environment to build. This will take a few minutes. -- When the editor is ready, run `foreman start -f Procfile.dev` in the terminal. +- When the editor is ready, run `bin/dev` in the terminal. - After a few seconds, a popup will appear with a button labeled _Open in Browser_. This will open Mastodon. - On the _Ports_ tab, right click on the “stream” row and select _Port visibility_ → _Public_. diff --git a/Vagrantfile b/Vagrantfile index 6f0f511095..12bd1ba67a 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -188,7 +188,7 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.post_up_message = < /dev/null +then + overmind start -f Procfile.dev "$@" + exit $? +fi + +if gem list --no-installed --exact --silent foreman; then + echo "Installing foreman..." + gem install foreman +fi + +foreman start -f Procfile.dev "$@" From 68600893d2ae41c001cf8449e3dd4ffa75f7f8c9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 2 Mar 2024 19:33:33 +0100 Subject: [PATCH 11/96] Update babel monorepo to v7.24.0 (#29434) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 118 +++++++++++++++++++++++++++--------------------------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/yarn.lock b/yarn.lock index b336fef88c..a600844022 100644 --- a/yarn.lock +++ b/yarn.lock @@ -52,7 +52,7 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.23.3, @babel/compat-data@npm:^7.23.5": +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.23.5": version: 7.23.5 resolution: "@babel/compat-data@npm:7.23.5" checksum: 10c0/081278ed46131a890ad566a59c61600a5f9557bd8ee5e535890c8548192532ea92590742fd74bd9db83d74c669ef8a04a7e1c85cdea27f960233e3b83c3a957c @@ -60,25 +60,25 @@ __metadata: linkType: hard "@babel/core@npm:^7.10.4, @babel/core@npm:^7.11.1, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.1": - version: 7.23.9 - resolution: "@babel/core@npm:7.23.9" + version: 7.24.0 + resolution: "@babel/core@npm:7.24.0" dependencies: "@ampproject/remapping": "npm:^2.2.0" "@babel/code-frame": "npm:^7.23.5" "@babel/generator": "npm:^7.23.6" "@babel/helper-compilation-targets": "npm:^7.23.6" "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helpers": "npm:^7.23.9" - "@babel/parser": "npm:^7.23.9" - "@babel/template": "npm:^7.23.9" - "@babel/traverse": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" + "@babel/helpers": "npm:^7.24.0" + "@babel/parser": "npm:^7.24.0" + "@babel/template": "npm:^7.24.0" + "@babel/traverse": "npm:^7.24.0" + "@babel/types": "npm:^7.24.0" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 10c0/03883300bf1252ab4c9ba5b52f161232dd52873dbe5cde9289bb2bb26e935c42682493acbac9194a59a3b6cbd17f4c4c84030db8d6d482588afe64531532ff9b + checksum: 10c0/bb37cbf0bdfd676b246af0a3d9a7932d10573f2d45114fdda02a71889e35530ce13d8930177e78b065d6734b8d45a4fbf7c77f223b1d44b4a28cfe5fefee93ed languageName: node linkType: hard @@ -250,10 +250,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.22.5 - resolution: "@babel/helper-plugin-utils@npm:7.22.5" - checksum: 10c0/d2c4bfe2fa91058bcdee4f4e57a3f4933aed7af843acfd169cd6179fab8d13c1d636474ecabb2af107dc77462c7e893199aa26632bac1c6d7e025a17cbb9d20d +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.0, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.24.0 + resolution: "@babel/helper-plugin-utils@npm:7.24.0" + checksum: 10c0/90f41bd1b4dfe7226b1d33a4bb745844c5c63e400f9e4e8bf9103a7ceddd7d425d65333b564d9daba3cebd105985764d51b4bd4c95822b97c2e3ac1201a8a5da languageName: node linkType: hard @@ -342,14 +342,14 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/helpers@npm:7.23.9" +"@babel/helpers@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/helpers@npm:7.24.0" dependencies: - "@babel/template": "npm:^7.23.9" - "@babel/traverse": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" - checksum: 10c0/f69fd0aca96a6fb8bd6dd044cd8a5c0f1851072d4ce23355345b9493c4032e76d1217f86b70df795e127553cf7f3fcd1587ede9d1b03b95e8b62681ca2165b87 + "@babel/template": "npm:^7.24.0" + "@babel/traverse": "npm:^7.24.0" + "@babel/types": "npm:^7.24.0" + checksum: 10c0/dd27c9f11c1c5244ef312fae37636f2fcc69c541c46508017b846c4cf680af059f1922ce84e3f778f123a70d027ded75c96070ee8e906f3bc52dc26dc43df608 languageName: node linkType: hard @@ -364,12 +364,12 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/parser@npm:7.23.9" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/parser@npm:7.24.0" bin: parser: ./bin/babel-parser.js - checksum: 10c0/7df97386431366d4810538db4b9ec538f4377096f720c0591c7587a16f6810e62747e9fbbfa1ff99257fd4330035e4fb1b5b77c7bd3b97ce0d2e3780a6618975 + checksum: 10c0/77593d0b9de9906823c4d653bb6cda1c7593837598516330f655f70cba6224a37def7dbe5b4dad0038482d407d8d209eb8be5f48ca9a13357d769f829c5adb8e languageName: node linkType: hard @@ -1004,18 +1004,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.23.4" +"@babel/plugin-transform-object-rest-spread@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.0" dependencies: - "@babel/compat-data": "npm:^7.23.3" - "@babel/helper-compilation-targets": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/compat-data": "npm:^7.23.5" + "@babel/helper-compilation-targets": "npm:^7.23.6" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" "@babel/plugin-transform-parameters": "npm:^7.23.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/b56017992ffe7fcd1dd9a9da67c39995a141820316266bcf7d77dc912980d228ccbd3f36191d234f5cc389b09157b5d2a955e33e8fb368319534affd1c72b262 + checksum: 10c0/02fe8b99ee6329e68b97b1b1b5410e50c6c20470e73dcd1d287c6ddb5623c654dce82327b2a3f6710ee3b512fe4950e43ab81d0bbc33d771f0cad3bc3cef87c6 languageName: node linkType: hard @@ -1200,18 +1200,18 @@ __metadata: linkType: hard "@babel/plugin-transform-runtime@npm:^7.22.4": - version: 7.23.9 - resolution: "@babel/plugin-transform-runtime@npm:7.23.9" + version: 7.24.0 + resolution: "@babel/plugin-transform-runtime@npm:7.24.0" dependencies: "@babel/helper-module-imports": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" babel-plugin-polyfill-corejs2: "npm:^0.4.8" babel-plugin-polyfill-corejs3: "npm:^0.9.0" babel-plugin-polyfill-regenerator: "npm:^0.5.5" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/3b959c2b88ea0009c288fa190d9f69b0d26cb336b8a7cab54a5e54b844f33cce1996725c15305a40049c8f23ca30082ee27e1f6853ff35fad723543e3d2dba47 + checksum: 10c0/a632e0c6f4b1be21955646ba4f6e4af323daaa6ab68ce39f92f5186d444402e920b33cabd40759c36f72d8c36f256a35ea03060e407ca69bcf373fdcb450aa42 languageName: node linkType: hard @@ -1333,12 +1333,12 @@ __metadata: linkType: hard "@babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.22.4": - version: 7.23.9 - resolution: "@babel/preset-env@npm:7.23.9" + version: 7.24.0 + resolution: "@babel/preset-env@npm:7.24.0" dependencies: "@babel/compat-data": "npm:^7.23.5" "@babel/helper-compilation-targets": "npm:^7.23.6" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/helper-validator-option": "npm:^7.23.5" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.23.3" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.23.3" @@ -1391,7 +1391,7 @@ __metadata: "@babel/plugin-transform-new-target": "npm:^7.23.3" "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.23.4" "@babel/plugin-transform-numeric-separator": "npm:^7.23.4" - "@babel/plugin-transform-object-rest-spread": "npm:^7.23.4" + "@babel/plugin-transform-object-rest-spread": "npm:^7.24.0" "@babel/plugin-transform-object-super": "npm:^7.23.3" "@babel/plugin-transform-optional-catch-binding": "npm:^7.23.4" "@babel/plugin-transform-optional-chaining": "npm:^7.23.4" @@ -1418,7 +1418,7 @@ __metadata: semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/2837a42089180e51bfd6864b6d197e01fc0abec1920422e71c0513c2fc8fb5f3bfe694ed778cc4e45856c546964945bc53bf8105e4b26f3580ce3685fa50cc0f + checksum: 10c0/cb5098bb860aede8418f204d7a693108d7c318edbb227f9842ac6aa71f2154ea1737846994af9bcd0c0b716cd73904f69f09bef635a9679465ec3558144beb4f languageName: node linkType: hard @@ -1483,28 +1483,28 @@ __metadata: linkType: hard "@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.8, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.22.3, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.23.9 - resolution: "@babel/runtime@npm:7.23.9" + version: 7.24.0 + resolution: "@babel/runtime@npm:7.24.0" dependencies: regenerator-runtime: "npm:^0.14.0" - checksum: 10c0/e71205fdd7082b2656512cc98e647d9ea7e222e4fe5c36e9e5adc026446fcc3ba7b3cdff8b0b694a0b78bb85db83e7b1e3d4c56ef90726682b74f13249cf952d + checksum: 10c0/3495eed727bf4a4f84c35bb51ab53317ae38f4bbc3b1d0a8303751f9dfa0ce6f5fb2afced72b76c3dd0d8bb2ccb84787559a4dee9886291a36b26f02f0f759b4 languageName: node linkType: hard -"@babel/template@npm:^7.22.15, @babel/template@npm:^7.23.9, @babel/template@npm:^7.3.3": - version: 7.23.9 - resolution: "@babel/template@npm:7.23.9" +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.24.0, @babel/template@npm:^7.3.3": + version: 7.24.0 + resolution: "@babel/template@npm:7.24.0" dependencies: "@babel/code-frame": "npm:^7.23.5" - "@babel/parser": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" - checksum: 10c0/0e8b60119433787742bc08ae762bbd8d6755611c4cabbcb7627b292ec901a55af65d93d1c88572326069efb64136ef151ec91ffb74b2df7689bbab237030833a + "@babel/parser": "npm:^7.24.0" + "@babel/types": "npm:^7.24.0" + checksum: 10c0/9d3dd8d22fe1c36bc3bdef6118af1f4b030aaf6d7d2619f5da203efa818a2185d717523486c111de8d99a8649ddf4bbf6b2a7a64962d8411cf6a8fa89f010e54 languageName: node linkType: hard -"@babel/traverse@npm:7, @babel/traverse@npm:^7.23.9": - version: 7.23.9 - resolution: "@babel/traverse@npm:7.23.9" +"@babel/traverse@npm:7, @babel/traverse@npm:^7.24.0": + version: 7.24.0 + resolution: "@babel/traverse@npm:7.24.0" dependencies: "@babel/code-frame": "npm:^7.23.5" "@babel/generator": "npm:^7.23.6" @@ -1512,22 +1512,22 @@ __metadata: "@babel/helper-function-name": "npm:^7.23.0" "@babel/helper-hoist-variables": "npm:^7.22.5" "@babel/helper-split-export-declaration": "npm:^7.22.6" - "@babel/parser": "npm:^7.23.9" - "@babel/types": "npm:^7.23.9" + "@babel/parser": "npm:^7.24.0" + "@babel/types": "npm:^7.24.0" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10c0/d1615d1d02f04d47111a7ea4446a1a6275668ca39082f31d51f08380de9502e19862be434eaa34b022ce9a17dbb8f9e2b73a746c654d9575f3a680a7ffdf5630 + checksum: 10c0/55ffd2b0ce0fbd0a09051edc4def4fb1e96f35e0b100c0dc2a7429df569971ae312c290e980e423471f350961705698a257c7eea8c8304918024cc26f02468ba languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.23.9, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.23.9 - resolution: "@babel/types@npm:7.23.9" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.11, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.24.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.24.0 + resolution: "@babel/types@npm:7.24.0" dependencies: "@babel/helper-string-parser": "npm:^7.23.4" "@babel/helper-validator-identifier": "npm:^7.22.20" to-fast-properties: "npm:^2.0.0" - checksum: 10c0/edc7bb180ce7e4d2aea10c6972fb10474341ac39ba8fdc4a27ffb328368dfdfbf40fca18e441bbe7c483774500d5c05e222cec276c242e952853dcaf4eb884f7 + checksum: 10c0/777a0bb5dbe038ca4c905fdafb1cdb6bdd10fe9d63ce13eca0bd91909363cbad554a53dc1f902004b78c1dcbc742056f877f2c99eeedff647333b1fadf51235d languageName: node linkType: hard From 1b418a35503ccaa82730a0ca36c6e83d9ed1833a Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Mon, 4 Mar 2024 04:57:12 +0000 Subject: [PATCH 12/96] New Crowdin translations --- app/javascript/flavours/glitch/locales/es-AR.json | 1 + app/javascript/flavours/glitch/locales/zh-CN.json | 1 + app/javascript/flavours/glitch/locales/zh-TW.json | 1 + config/locales-glitch/no.yml | 2 +- config/locales-glitch/simple_form.no.yml | 2 +- 5 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/javascript/flavours/glitch/locales/es-AR.json b/app/javascript/flavours/glitch/locales/es-AR.json index 197ad87138..3bba7f27cf 100644 --- a/app/javascript/flavours/glitch/locales/es-AR.json +++ b/app/javascript/flavours/glitch/locales/es-AR.json @@ -14,6 +14,7 @@ "column_subheading.lists": "Listas", "column_subheading.navigation": "Navegación", "community.column_settings.allow_local_only": "Mostrar sólo toots locales", + "compose.attach.doodle": "Dibujá algo", "compose.change_federation": "Cambiar configuración de la federación", "compose.content-type.change": "Cambiar opciones avanzadas de formato", "compose.content-type.html": "HTML", diff --git a/app/javascript/flavours/glitch/locales/zh-CN.json b/app/javascript/flavours/glitch/locales/zh-CN.json index 91bd738c19..49ef64a5e1 100644 --- a/app/javascript/flavours/glitch/locales/zh-CN.json +++ b/app/javascript/flavours/glitch/locales/zh-CN.json @@ -14,6 +14,7 @@ "column_subheading.lists": "列表", "column_subheading.navigation": "导航", "community.column_settings.allow_local_only": "只显示仅本站可见的嘟文", + "compose.attach.doodle": "涂鸦", "compose.change_federation": "更改联动设置", "compose.content-type.change": "更改高级格式选项", "compose.content-type.html": "HTML", diff --git a/app/javascript/flavours/glitch/locales/zh-TW.json b/app/javascript/flavours/glitch/locales/zh-TW.json index 59ad0f44ab..715bee8aef 100644 --- a/app/javascript/flavours/glitch/locales/zh-TW.json +++ b/app/javascript/flavours/glitch/locales/zh-TW.json @@ -14,6 +14,7 @@ "column_subheading.lists": "列表", "column_subheading.navigation": "導覽", "community.column_settings.allow_local_only": "顯示僅限本地的貼文", + "compose.attach.doodle": "塗鴉", "compose.change_federation": "變更聯邦設定", "compose.content-type.change": "變更進階格式設定", "compose.content-type.html": "HTML", diff --git a/config/locales-glitch/no.yml b/config/locales-glitch/no.yml index d36c60a4ac..d2a4697e5d 100644 --- a/config/locales-glitch/no.yml +++ b/config/locales-glitch/no.yml @@ -1 +1 @@ -'no': +no: diff --git a/config/locales-glitch/simple_form.no.yml b/config/locales-glitch/simple_form.no.yml index d36c60a4ac..d2a4697e5d 100644 --- a/config/locales-glitch/simple_form.no.yml +++ b/config/locales-glitch/simple_form.no.yml @@ -1 +1 @@ -'no': +no: From ee8d0b94473df357677cd1f82581251ce0423c01 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 4 Mar 2024 07:35:20 +0100 Subject: [PATCH 13/96] Fix follow suggestions potentially including silenced or blocked accounts (#29306) --- .../friends_of_friends_source.rb | 34 ++------ .../similar_profiles_source.rb | 3 +- app/models/account_suggestions/source.rb | 2 + .../friends_of_friends_source_spec.rb | 82 +++++++++++++++++++ .../models/account_suggestions/source_spec.rb | 20 +++-- 5 files changed, 107 insertions(+), 34 deletions(-) create mode 100644 spec/models/account_suggestions/friends_of_friends_source_spec.rb diff --git a/app/models/account_suggestions/friends_of_friends_source.rb b/app/models/account_suggestions/friends_of_friends_source.rb index 93fb10f3b0..0c95d21a3e 100644 --- a/app/models/account_suggestions/friends_of_friends_source.rb +++ b/app/models/account_suggestions/friends_of_friends_source.rb @@ -2,31 +2,15 @@ class AccountSuggestions::FriendsOfFriendsSource < AccountSuggestions::Source def get(account, limit: DEFAULT_LIMIT) - Account.find_by_sql([<<~SQL.squish, { id: account.id, limit: limit }]).map { |row| [row.id, key] } - WITH first_degree AS ( - SELECT target_account_id - FROM follows - JOIN accounts AS target_accounts ON follows.target_account_id = target_accounts.id - WHERE account_id = :id - AND NOT target_accounts.hide_collections - ) - SELECT accounts.id, COUNT(*) AS frequency - FROM accounts - JOIN follows ON follows.target_account_id = accounts.id - JOIN account_stats ON account_stats.account_id = accounts.id - LEFT OUTER JOIN follow_recommendation_mutes ON follow_recommendation_mutes.target_account_id = accounts.id AND follow_recommendation_mutes.account_id = :id - WHERE follows.account_id IN (SELECT * FROM first_degree) - AND NOT EXISTS (SELECT 1 FROM follows f WHERE f.target_account_id = follows.target_account_id AND f.account_id = :id) - AND follows.target_account_id <> :id - AND accounts.discoverable - AND accounts.suspended_at IS NULL - AND accounts.silenced_at IS NULL - AND accounts.moved_to_account_id IS NULL - AND follow_recommendation_mutes.target_account_id IS NULL - GROUP BY accounts.id, account_stats.id - ORDER BY frequency DESC, account_stats.followers_count ASC - LIMIT :limit - SQL + first_degree = account.following.where.not(hide_collections: true).select(:id).reorder(nil) + base_account_scope(account) + .joins(:account_stat) + .where(id: Follow.where(account_id: first_degree).select(:target_account_id)) + .group('accounts.id, account_stats.id') + .reorder('frequency DESC, followers_count DESC') + .limit(limit) + .pluck(Arel.sql('accounts.id, COUNT(*) AS frequency')) + .map { |id, _frequency| [id, key] } end private diff --git a/app/models/account_suggestions/similar_profiles_source.rb b/app/models/account_suggestions/similar_profiles_source.rb index 3ece20aa51..7ecdd607e5 100644 --- a/app/models/account_suggestions/similar_profiles_source.rb +++ b/app/models/account_suggestions/similar_profiles_source.rb @@ -51,7 +51,8 @@ class AccountSuggestions::SimilarProfilesSource < AccountSuggestions::Source recently_followed_account_ids = account.active_relationships.recent.limit(5).pluck(:target_account_id) if Chewy.enabled? && !recently_followed_account_ids.empty? - QueryBuilder.new(recently_followed_account_ids, account).build.limit(limit).hits.pluck('_id').map(&:to_i).zip([key].cycle) + ids_from_es = QueryBuilder.new(recently_followed_account_ids, account).build.limit(limit).hits.pluck('_id').map(&:to_i) + base_account_scope(account).where(id: ids_from_es).pluck(:id).zip([key].cycle) else [] end diff --git a/app/models/account_suggestions/source.rb b/app/models/account_suggestions/source.rb index b2c3c7a3a2..7afc4c80ed 100644 --- a/app/models/account_suggestions/source.rb +++ b/app/models/account_suggestions/source.rb @@ -12,6 +12,8 @@ class AccountSuggestions::Source def base_account_scope(account) Account .searchable + .where(discoverable: true) + .without_silenced .where.not(follows_sql, id: account.id) .where.not(follow_requests_sql, id: account.id) .not_excluded_by_account(account) diff --git a/spec/models/account_suggestions/friends_of_friends_source_spec.rb b/spec/models/account_suggestions/friends_of_friends_source_spec.rb new file mode 100644 index 0000000000..56a974add5 --- /dev/null +++ b/spec/models/account_suggestions/friends_of_friends_source_spec.rb @@ -0,0 +1,82 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe AccountSuggestions::FriendsOfFriendsSource do + describe '#get' do + subject { described_class.new } + + let!(:bob) { Fabricate(:account, discoverable: true, hide_collections: false) } + let!(:alice) { Fabricate(:account, discoverable: true, hide_collections: true) } + let!(:eve) { Fabricate(:account, discoverable: true, hide_collections: false) } + let!(:mallory) { Fabricate(:account, discoverable: false, hide_collections: false) } + let!(:eugen) { Fabricate(:account, discoverable: true, hide_collections: false) } + let!(:john) { Fabricate(:account, discoverable: true, hide_collections: false) } + let!(:jerk) { Fabricate(:account, discoverable: true, hide_collections: false) } + let!(:neil) { Fabricate(:account, discoverable: true, hide_collections: false) } + let!(:larry) { Fabricate(:account, discoverable: true, hide_collections: false) } + + context 'with follows and blocks' do + before do + bob.block!(jerk) + FollowRecommendationMute.create!(account: bob, target_account: neil) + + # bob follows eugen, alice and larry + [eugen, alice, larry].each { |account| bob.follow!(account) } + + # alice follows eve and mallory + [john, mallory].each { |account| alice.follow!(account) } + + # eugen follows eve, john, jerk, larry and neil + [eve, mallory, jerk, larry, neil].each { |account| eugen.follow!(account) } + end + + it 'returns eligible accounts', :aggregate_failures do + results = subject.get(bob) + + # eve is returned through eugen + expect(results).to include([eve.id, :friends_of_friends]) + + # john is not reachable because alice hides who she follows + expect(results).to_not include([john.id, :friends_of_friends]) + + # mallory is not discoverable + expect(results).to_not include([mallory.id, :friends_of_friends]) + + # larry is not included because he's followed already + expect(results).to_not include([larry.id, :friends_of_friends]) + + # jerk is blocked + expect(results).to_not include([jerk.id, :friends_of_friends]) + + # the suggestion for neil has already been rejected + expect(results).to_not include([neil.id, :friends_of_friends]) + end + end + + context 'with deterministic order' do + before do + # bob follows eve and mallory + [eve, mallory].each { |account| bob.follow!(account) } + + # eve follows eugen, john, and jerk + [jerk, eugen, john].each { |account| eve.follow!(account) } + + # mallory follows eugen, john, and neil + [neil, eugen, john].each { |account| mallory.follow!(account) } + + john.follow!(eugen) + john.follow!(neil) + end + + it 'returns eligible accounts in the expected order' do + expect(subject.get(bob)).to eq [ + [eugen.id, :friends_of_friends], # followed by 2 friends, 3 followers total + [john.id, :friends_of_friends], # followed by 2 friends, 2 followers total + [neil.id, :friends_of_friends], # followed by 1 friend, 2 followers total + [jerk.id, :friends_of_friends], # followed by 1 friend, 1 follower total + ] + end + end + end +end diff --git a/spec/models/account_suggestions/source_spec.rb b/spec/models/account_suggestions/source_spec.rb index d8227e01bc..1666094082 100644 --- a/spec/models/account_suggestions/source_spec.rb +++ b/spec/models/account_suggestions/source_spec.rb @@ -11,14 +11,16 @@ RSpec.describe AccountSuggestions::Source do end context 'with follows and follow requests' do - let!(:account_domain_blocked_account) { Fabricate(:account, domain: 'blocked.host') } - let!(:account) { Fabricate(:account) } - let!(:blocked_account) { Fabricate(:account) } - let!(:eligible_account) { Fabricate(:account) } - let!(:follow_recommendation_muted_account) { Fabricate(:account) } - let!(:follow_requested_account) { Fabricate(:account) } - let!(:following_account) { Fabricate(:account) } - let!(:moved_account) { Fabricate(:account, moved_to_account: Fabricate(:account)) } + let!(:account_domain_blocked_account) { Fabricate(:account, domain: 'blocked.host', discoverable: true) } + let!(:account) { Fabricate(:account, discoverable: true) } + let!(:blocked_account) { Fabricate(:account, discoverable: true) } + let!(:eligible_account) { Fabricate(:account, discoverable: true) } + let!(:follow_recommendation_muted_account) { Fabricate(:account, discoverable: true) } + let!(:follow_requested_account) { Fabricate(:account, discoverable: true) } + let!(:following_account) { Fabricate(:account, discoverable: true) } + let!(:moved_account) { Fabricate(:account, moved_to_account: Fabricate(:account), discoverable: true) } + let!(:silenced_account) { Fabricate(:account, silenced: true, discoverable: true) } + let!(:undiscoverable_account) { Fabricate(:account, discoverable: false) } before do Fabricate :account_domain_block, account: account, domain: account_domain_blocked_account.domain @@ -40,6 +42,8 @@ RSpec.describe AccountSuggestions::Source do .and not_include(follow_requested_account) .and not_include(following_account) .and not_include(moved_account) + .and not_include(silenced_account) + .and not_include(undiscoverable_account) end end end From a7d9c5e374dccec71af833709ad4008e87e99728 Mon Sep 17 00:00:00 2001 From: Claire Date: Mon, 4 Mar 2024 11:27:37 +0100 Subject: [PATCH 14/96] Fix bogus translations --- config/locales-glitch/no.yml | 2 +- config/locales-glitch/simple_form.no.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/locales-glitch/no.yml b/config/locales-glitch/no.yml index d2a4697e5d..d36c60a4ac 100644 --- a/config/locales-glitch/no.yml +++ b/config/locales-glitch/no.yml @@ -1 +1 @@ -no: +'no': diff --git a/config/locales-glitch/simple_form.no.yml b/config/locales-glitch/simple_form.no.yml index d2a4697e5d..d36c60a4ac 100644 --- a/config/locales-glitch/simple_form.no.yml +++ b/config/locales-glitch/simple_form.no.yml @@ -1 +1 @@ -no: +'no': From 0f7f2571396b3327559c31716af538fb9b34eff6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 10:39:12 +0100 Subject: [PATCH 15/96] Update Yarn to v4.1.1 (#29508) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- streaming/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4f17b427ee..9f20a981ae 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@mastodon/mastodon", "license": "AGPL-3.0-or-later", - "packageManager": "yarn@4.1.0", + "packageManager": "yarn@4.1.1", "engines": { "node": ">=18" }, diff --git a/streaming/package.json b/streaming/package.json index efb692578c..6e183a181c 100644 --- a/streaming/package.json +++ b/streaming/package.json @@ -1,7 +1,7 @@ { "name": "@mastodon/streaming", "license": "AGPL-3.0-or-later", - "packageManager": "yarn@4.1.0", + "packageManager": "yarn@4.1.1", "engines": { "node": ">=18" }, From cb0f3ecc28f508af25013834905bb9a11ac87314 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 10:41:31 +0100 Subject: [PATCH 16/96] Update eslint (non-major) (#29505) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 731 +++++++++++++++++++++++++++++------------------------- 1 file changed, 396 insertions(+), 335 deletions(-) diff --git a/yarn.lock b/yarn.lock index a600844022..c5ec6e5f8c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1743,10 +1743,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.56.0": - version: 8.56.0 - resolution: "@eslint/js@npm:8.56.0" - checksum: 10c0/60b3a1cf240e2479cec9742424224465dc50e46d781da1b7f5ef240501b2d1202c225bd456207faac4b34a64f4765833345bc4ddffd00395e1db40fa8c426f5a +"@eslint/js@npm:8.57.0": + version: 8.57.0 + resolution: "@eslint/js@npm:8.57.0" + checksum: 10c0/9a518bb8625ba3350613903a6d8c622352ab0c6557a59fe6ff6178bf882bf57123f9d92aa826ee8ac3ee74b9c6203fe630e9ee00efb03d753962dcf65ee4bd94 languageName: node linkType: hard @@ -1935,14 +1935,14 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.13": - version: 0.11.13 - resolution: "@humanwhocodes/config-array@npm:0.11.13" +"@humanwhocodes/config-array@npm:^0.11.14": + version: 0.11.14 + resolution: "@humanwhocodes/config-array@npm:0.11.14" dependencies: - "@humanwhocodes/object-schema": "npm:^2.0.1" - debug: "npm:^4.1.1" + "@humanwhocodes/object-schema": "npm:^2.0.2" + debug: "npm:^4.3.1" minimatch: "npm:^3.0.5" - checksum: 10c0/d76ca802d853366094d0e98ff0d0994117fc8eff96649cd357b15e469e428228f597cd2e929d54ab089051684949955f16ee905bb19f7b2f0446fb377157be7a + checksum: 10c0/66f725b4ee5fdd8322c737cb5013e19fac72d4d69c8bf4b7feb192fcb83442b035b92186f8e9497c220e58b2d51a080f28a73f7899bc1ab288c3be172c467541 languageName: node linkType: hard @@ -1953,10 +1953,10 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.1": - version: 2.0.1 - resolution: "@humanwhocodes/object-schema@npm:2.0.1" - checksum: 10c0/9dba24e59fdb4041829d92b693aacb778add3b6f612aaa9c0774f3b650c11a378cc64f042a59da85c11dae33df456580a3c36837b953541aed6ff94294f97fac +"@humanwhocodes/object-schema@npm:^2.0.2": + version: 2.0.2 + resolution: "@humanwhocodes/object-schema@npm:2.0.2" + checksum: 10c0/6fd83dc320231d71c4541d0244051df61f301817e9f9da9fd4cb7e44ec8aacbde5958c1665b0c419401ab935114fdf532a6ad5d4e7294b1af2f347dd91a6983f languageName: node linkType: hard @@ -3643,14 +3643,14 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^7.0.0": - version: 7.0.2 - resolution: "@typescript-eslint/eslint-plugin@npm:7.0.2" + version: 7.1.1 + resolution: "@typescript-eslint/eslint-plugin@npm:7.1.1" dependencies: "@eslint-community/regexpp": "npm:^4.5.1" - "@typescript-eslint/scope-manager": "npm:7.0.2" - "@typescript-eslint/type-utils": "npm:7.0.2" - "@typescript-eslint/utils": "npm:7.0.2" - "@typescript-eslint/visitor-keys": "npm:7.0.2" + "@typescript-eslint/scope-manager": "npm:7.1.1" + "@typescript-eslint/type-utils": "npm:7.1.1" + "@typescript-eslint/utils": "npm:7.1.1" + "@typescript-eslint/visitor-keys": "npm:7.1.1" debug: "npm:^4.3.4" graphemer: "npm:^1.4.0" ignore: "npm:^5.2.4" @@ -3663,25 +3663,25 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/76727ad48f01c1bb4ef37690e7ed12754930ce3a4bbe5dcd52f24d42f4625fc0b151db8189947f3956b4a09a562eb2da683ff65b57a13a15426eee3b680f80a5 + checksum: 10c0/041799604176bbee01f6ff029c5e2fcf1196db2737ba219a20b095f095dc0064ea425d15dd6dc22eaef294daa838209601ec7bc19317258dfa89a13afb8126ba languageName: node linkType: hard "@typescript-eslint/parser@npm:^7.0.0": - version: 7.0.2 - resolution: "@typescript-eslint/parser@npm:7.0.2" + version: 7.1.1 + resolution: "@typescript-eslint/parser@npm:7.1.1" dependencies: - "@typescript-eslint/scope-manager": "npm:7.0.2" - "@typescript-eslint/types": "npm:7.0.2" - "@typescript-eslint/typescript-estree": "npm:7.0.2" - "@typescript-eslint/visitor-keys": "npm:7.0.2" + "@typescript-eslint/scope-manager": "npm:7.1.1" + "@typescript-eslint/types": "npm:7.1.1" + "@typescript-eslint/typescript-estree": "npm:7.1.1" + "@typescript-eslint/visitor-keys": "npm:7.1.1" debug: "npm:^4.3.4" peerDependencies: eslint: ^8.56.0 peerDependenciesMeta: typescript: optional: true - checksum: 10c0/acffdbea0bba24398ba8bd1ccf5b59438bc093e41d7a325019383094f39d676b5cf2f5963bfa5e332e54728e5b9e14be3984752ee91da6f0e1a3e0b613422d0e + checksum: 10c0/84eb44f3767aaa1d7b26176348c89bd6732bc711f7f24186b1354eba95bf9e9c65b5675838772b831391210e525ff1f3bd4b51a3130ec35413aa362920effc57 languageName: node linkType: hard @@ -3695,22 +3695,22 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/scope-manager@npm:7.0.2" +"@typescript-eslint/scope-manager@npm:7.1.1": + version: 7.1.1 + resolution: "@typescript-eslint/scope-manager@npm:7.1.1" dependencies: - "@typescript-eslint/types": "npm:7.0.2" - "@typescript-eslint/visitor-keys": "npm:7.0.2" - checksum: 10c0/60241a0dbed7605133b6242d7fc172e8ee649e1033b8a179cebe3e21c60e0c08c12679fd37644cfef57c95a5d75a3927afc9d6365a5f9684c1d043285db23c66 + "@typescript-eslint/types": "npm:7.1.1" + "@typescript-eslint/visitor-keys": "npm:7.1.1" + checksum: 10c0/a955c8529f24945d448b95982d06b5f15a74fc5df97307f5821d55e9861d6c26d61cbd118c1ca41634164ed1d4f6c74fcb8388761341c49e6902a6fb72036afc languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/type-utils@npm:7.0.2" +"@typescript-eslint/type-utils@npm:7.1.1": + version: 7.1.1 + resolution: "@typescript-eslint/type-utils@npm:7.1.1" dependencies: - "@typescript-eslint/typescript-estree": "npm:7.0.2" - "@typescript-eslint/utils": "npm:7.0.2" + "@typescript-eslint/typescript-estree": "npm:7.1.1" + "@typescript-eslint/utils": "npm:7.1.1" debug: "npm:^4.3.4" ts-api-utils: "npm:^1.0.1" peerDependencies: @@ -3718,7 +3718,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/fa7957aa65cb0d7366c7c9be94e45cc2f1ebe9981cbf393054b505c6d555a01b2a2fe7cd1254d668f30183a275032f909186ce0b9f213f64b776bd7872144a6e + checksum: 10c0/6f19dc383718cce42ed7262d134f5f0221bcbf225fea28975cd714c90e57d861608d5187c7ad731f6281813f94b00f22282a99a8a852167366064abc6e256341 languageName: node linkType: hard @@ -3729,10 +3729,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/types@npm:7.0.2" - checksum: 10c0/5f95266cc2cd0e6cf1239dcd36b53c7d98b01ba12c61947316f0d879df87b912b4d23f0796324e2ab0fb8780503a338da41a4695fa91d90392b6c6aca5239fa7 +"@typescript-eslint/types@npm:7.1.1": + version: 7.1.1 + resolution: "@typescript-eslint/types@npm:7.1.1" + checksum: 10c0/2bef95ec0c60e67fada336db3e82fac2be16c21a9e54fc45c7aeda3291abcceefa12aa970025db88bc2b3e113b1e70abd7f89c2a651c16b816dff1a0c46e7907 languageName: node linkType: hard @@ -3755,12 +3755,12 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/typescript-estree@npm:7.0.2" +"@typescript-eslint/typescript-estree@npm:7.1.1": + version: 7.1.1 + resolution: "@typescript-eslint/typescript-estree@npm:7.1.1" dependencies: - "@typescript-eslint/types": "npm:7.0.2" - "@typescript-eslint/visitor-keys": "npm:7.0.2" + "@typescript-eslint/types": "npm:7.1.1" + "@typescript-eslint/visitor-keys": "npm:7.1.1" debug: "npm:^4.3.4" globby: "npm:^11.1.0" is-glob: "npm:^4.0.3" @@ -3770,24 +3770,24 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 10c0/2f6795b05fced9f2e0887f6735aa1a0b20516952792e4be13cd94c5e56db8ad013ba27aeb56f89fedff8b7af587f854482f00aac75b418611c74e42169c29aeb + checksum: 10c0/2cec9d21cfe46e523a6d29aff554e5450edf1ee30ce9cf644ee8f1f5e1cfd44b94afb3632db97a949c86c4a392ae80f264d56d8747b2b0fdbe5c54139433366a languageName: node linkType: hard -"@typescript-eslint/utils@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/utils@npm:7.0.2" +"@typescript-eslint/utils@npm:7.1.1": + version: 7.1.1 + resolution: "@typescript-eslint/utils@npm:7.1.1" dependencies: "@eslint-community/eslint-utils": "npm:^4.4.0" "@types/json-schema": "npm:^7.0.12" "@types/semver": "npm:^7.5.0" - "@typescript-eslint/scope-manager": "npm:7.0.2" - "@typescript-eslint/types": "npm:7.0.2" - "@typescript-eslint/typescript-estree": "npm:7.0.2" + "@typescript-eslint/scope-manager": "npm:7.1.1" + "@typescript-eslint/types": "npm:7.1.1" + "@typescript-eslint/typescript-estree": "npm:7.1.1" semver: "npm:^7.5.4" peerDependencies: eslint: ^8.56.0 - checksum: 10c0/b4ae9a36393c92b332e99d70219d1ee056271261f7433924db804e5f06d97ca60408b9c7a655afce8a851982e7153243a625d6cc76fea764f767f96c8f3e16da + checksum: 10c0/3e70834c5b49e4643ec8da63fa2acaab54283a566af2cedcd4c2f4210833a59bf71c459dde69e738115633c7de9f1339130552ff246e8e1bb4db26910685408b languageName: node linkType: hard @@ -3818,13 +3818,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:7.0.2": - version: 7.0.2 - resolution: "@typescript-eslint/visitor-keys@npm:7.0.2" +"@typescript-eslint/visitor-keys@npm:7.1.1": + version: 7.1.1 + resolution: "@typescript-eslint/visitor-keys@npm:7.1.1" dependencies: - "@typescript-eslint/types": "npm:7.0.2" + "@typescript-eslint/types": "npm:7.1.1" eslint-visitor-keys: "npm:^3.4.1" - checksum: 10c0/4146d1ad6ce9374e6b5a75677fc709816bdc5fe324b1a857405f21dad23bb28c79cfd0555bc2a01c4af1d9e9ee81ff5e29ec41cc9d05b0b1101cc4264e7f21d1 + checksum: 10c0/1ab19ec966ff0b86317eddcbfcda645856ec01c3b76a451298031f35e4da0a363e4888ce5ae9e2526e874799a502c49922d83d57d21cb6fef7f3912f51e4a271 languageName: node linkType: hard @@ -4353,13 +4353,13 @@ __metadata: languageName: node linkType: hard -"array-buffer-byte-length@npm:^1.0.0": - version: 1.0.0 - resolution: "array-buffer-byte-length@npm:1.0.0" +"array-buffer-byte-length@npm:^1.0.0, array-buffer-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "array-buffer-byte-length@npm:1.0.1" dependencies: - call-bind: "npm:^1.0.2" - is-array-buffer: "npm:^3.0.1" - checksum: 10c0/12f84f6418b57a954caa41654e5e63e019142a4bbb2c6829ba86d1ba65d31ccfaf1461d1743556fd32b091fac34ff44d9dfbdb001402361c45c373b2c86f5c20 + call-bind: "npm:^1.0.5" + is-array-buffer: "npm:^3.0.4" + checksum: 10c0/f5cdf54527cd18a3d2852ddf73df79efec03829e7373a8322ef5df2b4ef546fb365c19c71d6b42d641cb6bfe0f1a2f19bc0ece5b533295f86d7c3d522f228917 languageName: node linkType: hard @@ -4420,6 +4420,19 @@ __metadata: languageName: node linkType: hard +"array.prototype.findlast@npm:^1.2.4": + version: 1.2.4 + resolution: "array.prototype.findlast@npm:1.2.4" + dependencies: + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.3.0" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/4b5145a68ebaa00ef3d61de07c6694cad73d60763079f1e7662b948e5a167b5121b0c1e6feae8df1e42ead07c21699e25242b95cd5c48e094fd530b192aa4150 + languageName: node + linkType: hard + "array.prototype.findlastindex@npm:^1.2.3": version: 1.2.3 resolution: "array.prototype.findlastindex@npm:1.2.3" @@ -4445,7 +4458,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.flatmap@npm:^1.3.1, array.prototype.flatmap@npm:^1.3.2": +"array.prototype.flatmap@npm:^1.3.2": version: 1.3.2 resolution: "array.prototype.flatmap@npm:1.3.2" dependencies: @@ -4470,31 +4483,44 @@ __metadata: languageName: node linkType: hard -"array.prototype.tosorted@npm:^1.1.1": - version: 1.1.1 - resolution: "array.prototype.tosorted@npm:1.1.1" +"array.prototype.toreversed@npm:^1.1.2": + version: 1.1.2 + resolution: "array.prototype.toreversed@npm:1.1.2" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - es-shim-unscopables: "npm:^1.0.0" - get-intrinsic: "npm:^1.1.3" - checksum: 10c0/fd5f57aca3c7ddcd1bb83965457b625f3a67d8f334f5cbdb8ac8ef33d5b0d38281524114db2936f8c08048115d5158af216c94e6ae1eb966241b9b6f4ab8a7e8 - languageName: node - linkType: hard - -"arraybuffer.prototype.slice@npm:^1.0.2": - version: 1.0.2 - resolution: "arraybuffer.prototype.slice@npm:1.0.2" - dependencies: - array-buffer-byte-length: "npm:^1.0.0" call-bind: "npm:^1.0.2" define-properties: "npm:^1.2.0" es-abstract: "npm:^1.22.1" - get-intrinsic: "npm:^1.2.1" - is-array-buffer: "npm:^3.0.2" + es-shim-unscopables: "npm:^1.0.0" + checksum: 10c0/2b7627ea85eae1e80ecce665a500cc0f3355ac83ee4a1a727562c7c2a1d5f1c0b4dd7b65c468ec6867207e452ba01256910a2c0b41486bfdd11acf875a7a3435 + languageName: node + linkType: hard + +"array.prototype.tosorted@npm:^1.1.3": + version: 1.1.3 + resolution: "array.prototype.tosorted@npm:1.1.3" + dependencies: + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.1.0" + es-shim-unscopables: "npm:^1.0.2" + checksum: 10c0/a27e1ca51168ecacf6042901f5ef021e43c8fa04b6c6b6f2a30bac3645cd2b519cecbe0bc45db1b85b843f64dc3207f0268f700b4b9fbdec076d12d432cf0865 + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.3": + version: 1.0.3 + resolution: "arraybuffer.prototype.slice@npm:1.0.3" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.2.1" + get-intrinsic: "npm:^1.2.3" + is-array-buffer: "npm:^3.0.4" is-shared-array-buffer: "npm:^1.0.2" - checksum: 10c0/96b6e40e439678ffb7fa266398510074d33c3980fbb475490b69980cca60adec3b0777047ef377068a29862157f83edef42efc64ce48ce38977d04d68de5b7fb + checksum: 10c0/d32754045bcb2294ade881d45140a5e52bda2321b9e98fa514797b7f0d252c4c5ab0d1edb34112652c62fa6a9398def568da63a4d7544672229afea283358c36 languageName: node linkType: hard @@ -4644,10 +4670,12 @@ __metadata: languageName: node linkType: hard -"available-typed-arrays@npm:^1.0.5": - version: 1.0.5 - resolution: "available-typed-arrays@npm:1.0.5" - checksum: 10c0/c4df567ca72d2754a6cbad20088f5f98b1065b3360178169fa9b44ea101af62c0f423fc3854fa820fd6895b6b9171b8386e71558203103ff8fc2ad503fdcc660 +"available-typed-arrays@npm:^1.0.6, available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/d07226ef4f87daa01bd0fe80f8f310982e345f372926da2e5296aecc25c41cab440916bbaa4c5e1034b453af3392f67df5961124e4b586df1e99793a1374bdb2 languageName: node linkType: hard @@ -5335,14 +5363,16 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.4, call-bind@npm:^1.0.5": - version: 1.0.5 - resolution: "call-bind@npm:1.0.5" +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.1" - set-function-length: "npm:^1.1.1" - checksum: 10c0/a6172c168fd6dacf744fcde745099218056bd755c50415b592655dcd6562157ed29f130f56c3f6db2250f67e4bd62e5c218cdc56d7bfd76e0bda50770fce2d10 + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.1" + checksum: 10c0/a3ded2e423b8e2a265983dba81c27e125b48eefb2655e7dfab6be597088da3d47c47976c24bc51b8fd9af1061f8f87b4ab78a314f3c77784b2ae2ba535ad8b8d languageName: node linkType: hard @@ -6493,14 +6523,14 @@ __metadata: languageName: node linkType: hard -"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.1": - version: 1.1.1 - resolution: "define-data-property@npm:1.1.1" +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.2": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" dependencies: - get-intrinsic: "npm:^1.2.1" + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.0" - checksum: 10c0/77ef6e0bceb515e05b5913ab635a84d537cee84f8a7c37c77fdcb31fc5b80f6dbe81b33375e4b67d96aa04e6a0d8d4ea099e431d83f089af8d93adfb584bcb94 + checksum: 10c0/dea0606d1483eb9db8d930d4eac62ca0fa16738b0b3e07046cddfacf7d8c868bbe13fa0cb263eb91c7d0d527960dc3f2f2471a69ed7816210307f6744fe62e37 languageName: node linkType: hard @@ -7051,50 +7081,52 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.17.2, es-abstract@npm:^1.20.4, es-abstract@npm:^1.21.2, es-abstract@npm:^1.22.1": - version: 1.22.3 - resolution: "es-abstract@npm:1.22.3" +"es-abstract@npm:^1.17.2, es-abstract@npm:^1.20.4, es-abstract@npm:^1.21.2, es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.22.4": + version: 1.22.5 + resolution: "es-abstract@npm:1.22.5" dependencies: - array-buffer-byte-length: "npm:^1.0.0" - arraybuffer.prototype.slice: "npm:^1.0.2" - available-typed-arrays: "npm:^1.0.5" - call-bind: "npm:^1.0.5" - es-set-tostringtag: "npm:^2.0.1" + array-buffer-byte-length: "npm:^1.0.1" + arraybuffer.prototype.slice: "npm:^1.0.3" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + es-set-tostringtag: "npm:^2.0.3" es-to-primitive: "npm:^1.2.1" function.prototype.name: "npm:^1.1.6" - get-intrinsic: "npm:^1.2.2" - get-symbol-description: "npm:^1.0.0" + get-intrinsic: "npm:^1.2.4" + get-symbol-description: "npm:^1.0.2" globalthis: "npm:^1.0.3" gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.0" - has-proto: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.0.3" has-symbols: "npm:^1.0.3" - hasown: "npm:^2.0.0" - internal-slot: "npm:^1.0.5" - is-array-buffer: "npm:^3.0.2" + hasown: "npm:^2.0.1" + internal-slot: "npm:^1.0.7" + is-array-buffer: "npm:^3.0.4" is-callable: "npm:^1.2.7" - is-negative-zero: "npm:^2.0.2" + is-negative-zero: "npm:^2.0.3" is-regex: "npm:^1.1.4" - is-shared-array-buffer: "npm:^1.0.2" + is-shared-array-buffer: "npm:^1.0.3" is-string: "npm:^1.0.7" - is-typed-array: "npm:^1.1.12" + is-typed-array: "npm:^1.1.13" is-weakref: "npm:^1.0.2" object-inspect: "npm:^1.13.1" object-keys: "npm:^1.1.1" - object.assign: "npm:^4.1.4" - regexp.prototype.flags: "npm:^1.5.1" - safe-array-concat: "npm:^1.0.1" - safe-regex-test: "npm:^1.0.0" + object.assign: "npm:^4.1.5" + regexp.prototype.flags: "npm:^1.5.2" + safe-array-concat: "npm:^1.1.0" + safe-regex-test: "npm:^1.0.3" string.prototype.trim: "npm:^1.2.8" string.prototype.trimend: "npm:^1.0.7" string.prototype.trimstart: "npm:^1.0.7" - typed-array-buffer: "npm:^1.0.0" - typed-array-byte-length: "npm:^1.0.0" - typed-array-byte-offset: "npm:^1.0.0" - typed-array-length: "npm:^1.0.4" + typed-array-buffer: "npm:^1.0.2" + typed-array-byte-length: "npm:^1.0.1" + typed-array-byte-offset: "npm:^1.0.2" + typed-array-length: "npm:^1.0.5" unbox-primitive: "npm:^1.0.2" - which-typed-array: "npm:^1.1.13" - checksum: 10c0/da31ec43b1c8eb47ba8a17693cac143682a1078b6c3cd883ce0e2062f135f532e93d873694ef439670e1f6ca03195118f43567ba6f33fb0d6c7daae750090236 + which-typed-array: "npm:^1.1.14" + checksum: 10c0/4bca5a60f0dff6c0a5690d8e51374cfcb8760d5dbbb1069174b4d41461cf4e0c3e0c1993bccbc5aa0799ff078199f1bcde2122b8709e0d17c2beffafff01010a languageName: node linkType: hard @@ -7105,6 +7137,22 @@ __metadata: languageName: node linkType: hard +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: "npm:^1.2.4" + checksum: 10c0/6bf3191feb7ea2ebda48b577f69bdfac7a2b3c9bcf97307f55fd6ef1bbca0b49f0c219a935aca506c993d8c5d8bddd937766cb760cd5e5a1071351f2df9f9aa4 + languageName: node + linkType: hard + +"es-errors@npm:^1.1.0, es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + "es-get-iterator@npm:^1.1.3": version: 1.1.3 resolution: "es-get-iterator@npm:1.1.3" @@ -7122,45 +7170,46 @@ __metadata: languageName: node linkType: hard -"es-iterator-helpers@npm:^1.0.12, es-iterator-helpers@npm:^1.0.15": - version: 1.0.15 - resolution: "es-iterator-helpers@npm:1.0.15" +"es-iterator-helpers@npm:^1.0.15, es-iterator-helpers@npm:^1.0.17": + version: 1.0.17 + resolution: "es-iterator-helpers@npm:1.0.17" dependencies: asynciterator.prototype: "npm:^1.0.0" - call-bind: "npm:^1.0.2" + call-bind: "npm:^1.0.7" define-properties: "npm:^1.2.1" - es-abstract: "npm:^1.22.1" - es-set-tostringtag: "npm:^2.0.1" - function-bind: "npm:^1.1.1" - get-intrinsic: "npm:^1.2.1" + es-abstract: "npm:^1.22.4" + es-errors: "npm:^1.3.0" + es-set-tostringtag: "npm:^2.0.2" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" globalthis: "npm:^1.0.3" - has-property-descriptors: "npm:^1.0.0" + has-property-descriptors: "npm:^1.0.2" has-proto: "npm:^1.0.1" has-symbols: "npm:^1.0.3" - internal-slot: "npm:^1.0.5" + internal-slot: "npm:^1.0.7" iterator.prototype: "npm:^1.1.2" - safe-array-concat: "npm:^1.0.1" - checksum: 10c0/b4c83f94bfe624260d5238092de3173989f76f1416b1d02c388aea3b2024174e5f5f0e864057311ac99790b57e836ca3545b6e77256b26066dac944519f5e6d6 + safe-array-concat: "npm:^1.1.0" + checksum: 10c0/d0f281257e7165f068fd4fc3beb63d07ae4f18fbef02a2bbe4a39272b764164c1ce3311ae7c5429ac30003aef290fcdf569050e4a9ba3560e044440f68e9a47c languageName: node linkType: hard -"es-set-tostringtag@npm:^2.0.1": - version: 2.0.1 - resolution: "es-set-tostringtag@npm:2.0.1" +"es-set-tostringtag@npm:^2.0.2, es-set-tostringtag@npm:^2.0.3": + version: 2.0.3 + resolution: "es-set-tostringtag@npm:2.0.3" dependencies: - get-intrinsic: "npm:^1.1.3" - has: "npm:^1.0.3" - has-tostringtag: "npm:^1.0.0" - checksum: 10c0/9af096365e3861bb29755cc5f76f15f66a7eab0e83befca396129090c1d9737e54090278b8e5357e97b5f0a5b0459fca07c40c6740884c2659cbf90ef8e508cc + get-intrinsic: "npm:^1.2.4" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.1" + checksum: 10c0/f22aff1585eb33569c326323f0b0d175844a1f11618b86e193b386f8be0ea9474cfbe46df39c45d959f7aa8f6c06985dc51dd6bce5401645ec5a74c4ceaa836a languageName: node linkType: hard -"es-shim-unscopables@npm:^1.0.0": - version: 1.0.0 - resolution: "es-shim-unscopables@npm:1.0.0" +"es-shim-unscopables@npm:^1.0.0, es-shim-unscopables@npm:^1.0.2": + version: 1.0.2 + resolution: "es-shim-unscopables@npm:1.0.2" dependencies: - has: "npm:^1.0.3" - checksum: 10c0/d54a66239fbd19535b3e50333913260394f14d2d7adb136a95396a13ca584bab400cf9cb2ffd9232f3fe2f0362540bd3a708240c493e46e13fe0b90cfcfedc3d + hasown: "npm:^2.0.0" + checksum: 10c0/f495af7b4b7601a4c0cfb893581c352636e5c08654d129590386a33a0432cf13a7bdc7b6493801cadd990d838e2839b9013d1de3b880440cb537825e834fe783 languageName: node linkType: hard @@ -7325,8 +7374,8 @@ __metadata: linkType: hard "eslint-plugin-jsdoc@npm:^48.0.0": - version: 48.1.0 - resolution: "eslint-plugin-jsdoc@npm:48.1.0" + version: 48.2.0 + resolution: "eslint-plugin-jsdoc@npm:48.2.0" dependencies: "@es-joy/jsdoccomment": "npm:~0.42.0" are-docs-informative: "npm:^0.0.2" @@ -7339,7 +7388,7 @@ __metadata: spdx-expression-parse: "npm:^4.0.0" peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - checksum: 10c0/e0fb3fb4479b6ee539b8c1b626de625ff5d24408f695fcbf648e214854fea9ea3e29b77f56b177bf38655e30a6c9a6eaaff93ef990f69c454c74e180747e39e5 + checksum: 10c0/778f979ca40594269d531767ab29fb2a6c448425f8f732708ac5d3b9c61bbeb8504f1490a1057c7740f3e8f8a75d57ff50c766bc40fb1474f195e6f1aed30814 languageName: node linkType: hard @@ -7388,28 +7437,30 @@ __metadata: linkType: hard "eslint-plugin-react@npm:^7.33.2": - version: 7.33.2 - resolution: "eslint-plugin-react@npm:7.33.2" + version: 7.34.0 + resolution: "eslint-plugin-react@npm:7.34.0" dependencies: - array-includes: "npm:^3.1.6" - array.prototype.flatmap: "npm:^1.3.1" - array.prototype.tosorted: "npm:^1.1.1" + array-includes: "npm:^3.1.7" + array.prototype.findlast: "npm:^1.2.4" + array.prototype.flatmap: "npm:^1.3.2" + array.prototype.toreversed: "npm:^1.1.2" + array.prototype.tosorted: "npm:^1.1.3" doctrine: "npm:^2.1.0" - es-iterator-helpers: "npm:^1.0.12" + es-iterator-helpers: "npm:^1.0.17" estraverse: "npm:^5.3.0" jsx-ast-utils: "npm:^2.4.1 || ^3.0.0" minimatch: "npm:^3.1.2" - object.entries: "npm:^1.1.6" - object.fromentries: "npm:^2.0.6" - object.hasown: "npm:^1.1.2" - object.values: "npm:^1.1.6" + object.entries: "npm:^1.1.7" + object.fromentries: "npm:^2.0.7" + object.hasown: "npm:^1.1.3" + object.values: "npm:^1.1.7" prop-types: "npm:^15.8.1" - resolve: "npm:^2.0.0-next.4" + resolve: "npm:^2.0.0-next.5" semver: "npm:^6.3.1" - string.prototype.matchall: "npm:^4.0.8" + string.prototype.matchall: "npm:^4.0.10" peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 10c0/f9b247861024bafc396c4bd3c9ac946604b3b23077251c98f23602aa22027a0c33a69157fd49564e4ff7f17b3678e5dc366a46c7ec42a09454d7cbce786d5001 + checksum: 10c0/9bf0b959373ace66e799adbbfb493a7ceae54751e8f90fcce1da1a2a67b277ee23ba845571eaa4d4f05d96dba4e4977bf938b350f18bad26201fa616ee6aa4b8 languageName: node linkType: hard @@ -7441,14 +7492,14 @@ __metadata: linkType: hard "eslint@npm:^8.41.0": - version: 8.56.0 - resolution: "eslint@npm:8.56.0" + version: 8.57.0 + resolution: "eslint@npm:8.57.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.6.1" "@eslint/eslintrc": "npm:^2.1.4" - "@eslint/js": "npm:8.56.0" - "@humanwhocodes/config-array": "npm:^0.11.13" + "@eslint/js": "npm:8.57.0" + "@humanwhocodes/config-array": "npm:^0.11.14" "@humanwhocodes/module-importer": "npm:^1.0.1" "@nodelib/fs.walk": "npm:^1.2.8" "@ungap/structured-clone": "npm:^1.2.0" @@ -7484,7 +7535,7 @@ __metadata: text-table: "npm:^0.2.0" bin: eslint: bin/eslint.js - checksum: 10c0/2be598f7da1339d045ad933ffd3d4742bee610515cd2b0d9a2b8b729395a01d4e913552fff555b559fccaefd89d7b37632825789d1b06470608737ae69ab43fb + checksum: 10c0/00bb96fd2471039a312435a6776fe1fd557c056755eaa2b96093ef3a8508c92c8775d5f754768be6b1dddd09fdd3379ddb231eeb9b6c579ee17ea7d68000a529 languageName: node linkType: hard @@ -8218,7 +8269,7 @@ __metadata: languageName: node linkType: hard -"function-bind@npm:^1.1.1, function-bind@npm:^1.1.2": +"function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 @@ -8272,15 +8323,16 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2": - version: 1.2.2 - resolution: "get-intrinsic@npm:1.2.2" +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" dependencies: + es-errors: "npm:^1.3.0" function-bind: "npm:^1.1.2" has-proto: "npm:^1.0.1" has-symbols: "npm:^1.0.3" hasown: "npm:^2.0.0" - checksum: 10c0/4e7fb8adc6172bae7c4fe579569b4d5238b3667c07931cd46b4eee74bbe6ff6b91329bec311a638d8e60f5b51f44fe5445693c6be89ae88d4b5c49f7ff12db0b + checksum: 10c0/0a9b82c16696ed6da5e39b1267104475c47e3a9bdbe8b509dfe1710946e38a87be70d759f4bb3cda042d76a41ef47fe769660f3b7c0d1f68750299344ffb15b7 languageName: node linkType: hard @@ -8321,13 +8373,14 @@ __metadata: languageName: node linkType: hard -"get-symbol-description@npm:^1.0.0": - version: 1.0.0 - resolution: "get-symbol-description@npm:1.0.0" +"get-symbol-description@npm:^1.0.2": + version: 1.0.2 + resolution: "get-symbol-description@npm:1.0.2" dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.1.1" - checksum: 10c0/23bc3b44c221cdf7669a88230c62f4b9e30393b61eb21ba4400cb3e346801bd8f95fe4330ee78dbae37aecd874646d53e3e76a17a654d0c84c77f6690526d6bb + call-bind: "npm:^1.0.5" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.4" + checksum: 10c0/867be6d63f5e0eb026cb3b0ef695ec9ecf9310febb041072d2e142f260bd91ced9eeb426b3af98791d1064e324e653424afa6fd1af17dee373bea48ae03162bc languageName: node linkType: hard @@ -8567,19 +8620,19 @@ __metadata: languageName: node linkType: hard -"has-property-descriptors@npm:^1.0.0": - version: 1.0.0 - resolution: "has-property-descriptors@npm:1.0.0" +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.1, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" dependencies: - get-intrinsic: "npm:^1.1.1" - checksum: 10c0/d4ca882b6960d6257bd28baa3ddfa21f068d260411004a093b30ca357c740e11e985771c85216a6d1eef4161e862657f48c4758ec8ab515223b3895200ad164b + es-define-property: "npm:^1.0.0" + checksum: 10c0/253c1f59e80bb476cf0dde8ff5284505d90c3bdb762983c3514d36414290475fe3fd6f574929d84de2a8eec00d35cf07cb6776205ff32efd7c50719125f00236 languageName: node linkType: hard -"has-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "has-proto@npm:1.0.1" - checksum: 10c0/c8a8fe411f810b23a564bd5546a8f3f0fff6f1b692740eb7a2fdc9df716ef870040806891e2f23ff4653f1083e3895bf12088703dd1a0eac3d9202d3a4768cd0 +"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": + version: 1.0.3 + resolution: "has-proto@npm:1.0.3" + checksum: 10c0/35a6989f81e9f8022c2f4027f8b48a552de714938765d019dbea6bb547bd49ce5010a3c7c32ec6ddac6e48fc546166a3583b128f5a7add8b058a6d8b4afec205 languageName: node linkType: hard @@ -8590,12 +8643,12 @@ __metadata: languageName: node linkType: hard -"has-tostringtag@npm:^1.0.0": - version: 1.0.0 - resolution: "has-tostringtag@npm:1.0.0" +"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.1, has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" dependencies: - has-symbols: "npm:^1.0.2" - checksum: 10c0/1cdba76b7d13f65198a92b8ca1560ba40edfa09e85d182bf436d928f3588a9ebd260451d569f0ed1b849c4bf54f49c862aa0d0a77f9552b1855bb6deb526c011 + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c languageName: node linkType: hard @@ -8638,13 +8691,6 @@ __metadata: languageName: node linkType: hard -"has@npm:^1.0.3": - version: 1.0.4 - resolution: "has@npm:1.0.4" - checksum: 10c0/82c1220573dc1f0a014a5d6189ae52a1f820f99dfdc00323c3a725b5002dcb7f04e44f460fea7af068474b2dd7c88cbe1846925c84017be9e31e1708936d305b - languageName: node - linkType: hard - "hash-base@npm:^3.0.0": version: 3.1.0 resolution: "hash-base@npm:3.1.0" @@ -8666,12 +8712,12 @@ __metadata: languageName: node linkType: hard -"hasown@npm:^2.0.0": - version: 2.0.0 - resolution: "hasown@npm:2.0.0" +"hasown@npm:^2.0.0, hasown@npm:^2.0.1": + version: 2.0.1 + resolution: "hasown@npm:2.0.1" dependencies: function-bind: "npm:^1.1.2" - checksum: 10c0/5d415b114f410661208c95e7ab4879f1cc2765b8daceff4dc8718317d1cb7b9ffa7c5d1eafd9a4389c9aab7445d6ea88e05f3096cb1e529618b55304956b87fc + checksum: 10c0/9e27e70e8e4204f4124c8f99950d1ba2b1f5174864fd39ff26da190f9ea6488c1b3927dcc64981c26d1f637a971783c9489d62c829d393ea509e6f1ba20370bb languageName: node linkType: hard @@ -9116,14 +9162,14 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.5": - version: 1.0.5 - resolution: "internal-slot@npm:1.0.5" +"internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.5, internal-slot@npm:^1.0.7": + version: 1.0.7 + resolution: "internal-slot@npm:1.0.7" dependencies: - get-intrinsic: "npm:^1.2.0" - has: "npm:^1.0.3" + es-errors: "npm:^1.3.0" + hasown: "npm:^2.0.0" side-channel: "npm:^1.0.4" - checksum: 10c0/66d8a66b4b5310c042e8ad00ce895dc55cb25165a3a7da0d7862ca18d69d3b1ba86511b4bf3baf4273d744d3f6e9154574af45189ef11135a444945309e39e4a + checksum: 10c0/f8b294a4e6ea3855fc59551bbf35f2b832cf01fd5e6e2a97f5c201a071cc09b49048f856e484b67a6c721da5e55736c5b6ddafaf19e2dbeb4a3ff1821680de6c languageName: node linkType: hard @@ -9242,14 +9288,13 @@ __metadata: languageName: node linkType: hard -"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": - version: 3.0.2 - resolution: "is-array-buffer@npm:3.0.2" +"is-array-buffer@npm:^3.0.2, is-array-buffer@npm:^3.0.4": + version: 3.0.4 + resolution: "is-array-buffer@npm:3.0.4" dependencies: call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.2.0" - is-typed-array: "npm:^1.1.10" - checksum: 10c0/40ed13a5f5746ac3ae2f2e463687d9b5a3f5fd0086f970fb4898f0253c2a5ec2e3caea2d664dd8f54761b1c1948609702416921a22faebe160c7640a9217c80e + get-intrinsic: "npm:^1.2.1" + checksum: 10c0/42a49d006cc6130bc5424eae113e948c146f31f9d24460fc0958f855d9d810e6fd2e4519bf19aab75179af9c298ea6092459d8cafdec523cd19e529b26eab860 languageName: node linkType: hard @@ -9322,7 +9367,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1, is-core-module@npm:^2.9.0": +"is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": version: 2.13.1 resolution: "is-core-module@npm:2.13.1" dependencies: @@ -9504,10 +9549,10 @@ __metadata: languageName: node linkType: hard -"is-negative-zero@npm:^2.0.2": - version: 2.0.2 - resolution: "is-negative-zero@npm:2.0.2" - checksum: 10c0/eda024c158f70f2017f3415e471b818d314da5ef5be68f801b16314d4a4b6304a74cbed778acf9e2f955bb9c1c5f2935c1be0c7c99e1ad12286f45366217b6a3 +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: 10c0/bcdcf6b8b9714063ffcfa9929c575ac69bfdabb8f4574ff557dfc086df2836cf07e3906f5bbc4f2a5c12f8f3ba56af640c843cdfc74da8caed86c7c7d66fd08e languageName: node linkType: hard @@ -9622,12 +9667,12 @@ __metadata: languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "is-shared-array-buffer@npm:1.0.2" +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "is-shared-array-buffer@npm:1.0.3" dependencies: - call-bind: "npm:^1.0.2" - checksum: 10c0/cfeee6f171f1b13e6cbc6f3b6cc44e192b93df39f3fcb31aa66ffb1d2df3b91e05664311659f9701baba62f5e98c83b0673c628e7adc30f55071c4874fcdccec + call-bind: "npm:^1.0.7" + checksum: 10c0/adc11ab0acbc934a7b9e5e9d6c588d4ec6682f6fea8cda5180721704fa32927582ede5b123349e32517fdadd07958973d24716c80e7ab198970c47acc09e59c7 languageName: node linkType: hard @@ -9670,12 +9715,12 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.12, is-typed-array@npm:^1.1.9": - version: 1.1.12 - resolution: "is-typed-array@npm:1.1.12" +"is-typed-array@npm:^1.1.13": + version: 1.1.13 + resolution: "is-typed-array@npm:1.1.13" dependencies: - which-typed-array: "npm:^1.1.11" - checksum: 10c0/9863e9cc7223c6fc1c462a2c3898a7beff6b41b1ee0fabb03b7d278ae7de670b5bcbc8627db56bb66ed60902fa37d53fe5cce0fd2f7d73ac64fe5da6f409b6ae + which-typed-array: "npm:^1.1.14" + checksum: 10c0/fa5cb97d4a80e52c2cc8ed3778e39f175a1a2ae4ddf3adae3187d69586a1fd57cfa0b095db31f66aa90331e9e3da79184cea9c6abdcd1abc722dc3c3edd51cca languageName: node linkType: hard @@ -11830,19 +11875,19 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.4": - version: 4.1.4 - resolution: "object.assign@npm:4.1.4" +"object.assign@npm:^4.1.4, object.assign@npm:^4.1.5": + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" has-symbols: "npm:^1.0.3" object-keys: "npm:^1.1.1" - checksum: 10c0/2f286118c023e557757620e647b02e7c88d3d417e0c568fca0820de8ec9cca68928304854d5b03e99763eddad6e78a6716e2930f7e6372e4b9b843f3fd3056f3 + checksum: 10c0/60108e1fa2706f22554a4648299b0955236c62b3685c52abf4988d14fffb0e7731e00aa8c6448397e3eb63d087dcc124a9f21e1980f36d0b2667f3c18bacd469 languageName: node linkType: hard -"object.entries@npm:^1.1.6, object.entries@npm:^1.1.7": +"object.entries@npm:^1.1.7": version: 1.1.7 resolution: "object.entries@npm:1.1.7" dependencies: @@ -11853,7 +11898,7 @@ __metadata: languageName: node linkType: hard -"object.fromentries@npm:^2.0.6, object.fromentries@npm:^2.0.7": +"object.fromentries@npm:^2.0.7": version: 2.0.7 resolution: "object.fromentries@npm:2.0.7" dependencies: @@ -11889,13 +11934,13 @@ __metadata: languageName: node linkType: hard -"object.hasown@npm:^1.1.2": - version: 1.1.2 - resolution: "object.hasown@npm:1.1.2" +"object.hasown@npm:^1.1.3": + version: 1.1.3 + resolution: "object.hasown@npm:1.1.3" dependencies: - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - checksum: 10c0/419fc1c74a2aea7ebb4d49b79d5b1599a010b26c18eae35bd061ccdd013ccb749c499d8dd6ee21a91e6d7264ccc592573d0f13562970f76e25fc844d8c1b02ce + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + checksum: 10c0/8a41ba4fb1208a85c2275e9b5098071beacc24345b9a71ab98ef0a1c61b34dc74c6b460ff1e1884c33843d8f2553df64a10eec2b74b3ed009e3b2710c826bd2c languageName: node linkType: hard @@ -12605,6 +12650,13 @@ __metadata: languageName: node linkType: hard +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: 10c0/d9aa22d31f4f7680e20269db76791b41c3a32c01a373e25f8a4813b4d45f7456bfc2b6d68f752dc4aab0e0bb0721cb3d76fb678c9101cb7a16316664bc2c73fd + languageName: node + linkType: hard + "postcss-calc@npm:^9.0.1": version: 9.0.1 resolution: "postcss-calc@npm:9.0.1" @@ -14011,14 +14063,15 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.4.3, regexp.prototype.flags@npm:^1.5.0, regexp.prototype.flags@npm:^1.5.1": - version: 1.5.1 - resolution: "regexp.prototype.flags@npm:1.5.1" +"regexp.prototype.flags@npm:^1.2.0, regexp.prototype.flags@npm:^1.5.0, regexp.prototype.flags@npm:^1.5.2": + version: 1.5.2 + resolution: "regexp.prototype.flags@npm:1.5.2" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - set-function-name: "npm:^2.0.0" - checksum: 10c0/1de7d214c0a726c7c874a7023e47b0e27b9f7fdb64175bfe1861189de1704aaeca05c3d26c35aa375432289b99946f3cf86651a92a8f7601b90d8c226a23bcd8 + call-bind: "npm:^1.0.6" + define-properties: "npm:^1.2.1" + es-errors: "npm:^1.3.0" + set-function-name: "npm:^2.0.1" + checksum: 10c0/0f3fc4f580d9c349f8b560b012725eb9c002f36daa0041b3fbf6f4238cb05932191a4d7d5db3b5e2caa336d5150ad0402ed2be81f711f9308fe7e1a9bf9bd552 languageName: node linkType: hard @@ -14207,16 +14260,16 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^2.0.0-next.4": - version: 2.0.0-next.4 - resolution: "resolve@npm:2.0.0-next.4" +"resolve@npm:^2.0.0-next.5": + version: 2.0.0-next.5 + resolution: "resolve@npm:2.0.0-next.5" dependencies: - is-core-module: "npm:^2.9.0" + is-core-module: "npm:^2.13.0" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 10c0/1de92669e7c46cfe125294c66d5405e13288bb87b97e9bdab71693ceebbcc0255c789bde30e2834265257d330d8ff57414d7d88e3097d8f69951f3ce978bf045 + checksum: 10c0/a6c33555e3482ea2ec4c6e3d3bf0d78128abf69dca99ae468e64f1e30acaa318fd267fb66c8836b04d558d3e2d6ed875fe388067e7d8e0de647d3c21af21c43a languageName: node linkType: hard @@ -14233,16 +14286,16 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^2.0.0-next.4#optional!builtin": - version: 2.0.0-next.4 - resolution: "resolve@patch:resolve@npm%3A2.0.0-next.4#optional!builtin::version=2.0.0-next.4&hash=c3c19d" +"resolve@patch:resolve@npm%3A^2.0.0-next.5#optional!builtin": + version: 2.0.0-next.5 + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#optional!builtin::version=2.0.0-next.5&hash=c3c19d" dependencies: - is-core-module: "npm:^2.9.0" + is-core-module: "npm:^2.13.0" path-parse: "npm:^1.0.7" supports-preserve-symlinks-flag: "npm:^1.0.0" bin: resolve: bin/resolve - checksum: 10c0/ed2bb51d616b9cd30fe85cf49f7a2240094d9fa01a221d361918462be81f683d1855b7f192391d2ab5325245b42464ca59690db5bd5dad0a326fc0de5974dd10 + checksum: 10c0/78ad6edb8309a2bfb720c2c1898f7907a37f858866ce11a5974643af1203a6a6e05b2fa9c53d8064a673a447b83d42569260c306d43628bff5bb101969708355 languageName: node linkType: hard @@ -14371,15 +14424,15 @@ __metadata: languageName: node linkType: hard -"safe-array-concat@npm:^1.0.0, safe-array-concat@npm:^1.0.1": - version: 1.0.1 - resolution: "safe-array-concat@npm:1.0.1" +"safe-array-concat@npm:^1.0.0, safe-array-concat@npm:^1.1.0": + version: 1.1.0 + resolution: "safe-array-concat@npm:1.1.0" dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.2.1" + call-bind: "npm:^1.0.5" + get-intrinsic: "npm:^1.2.2" has-symbols: "npm:^1.0.3" isarray: "npm:^2.0.5" - checksum: 10c0/4b15ce5fce5ce4d7e744a63592cded88d2f27806ed229eadb2e42629cbcd40e770f7478608e75f455e7fe341acd8c0a01bdcd7146b10645ea7411c5e3c1d1dd8 + checksum: 10c0/833d3d950fc7507a60075f9bfaf41ec6dac7c50c7a9d62b1e6b071ecc162185881f92e594ff95c1a18301c881352dd6fd236d56999d5819559db7b92da9c28af languageName: node linkType: hard @@ -14397,14 +14450,14 @@ __metadata: languageName: node linkType: hard -"safe-regex-test@npm:^1.0.0": - version: 1.0.0 - resolution: "safe-regex-test@npm:1.0.0" +"safe-regex-test@npm:^1.0.3": + version: 1.0.3 + resolution: "safe-regex-test@npm:1.0.3" dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.1.3" + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" is-regex: "npm:^1.1.4" - checksum: 10c0/14a81a7e683f97b2d6e9c8be61fddcf8ed7a02f4e64a825515f96bb1738eb007145359313741d2704d28b55b703a0f6300c749dde7c1dbc13952a2b85048ede2 + checksum: 10c0/900bf7c98dc58f08d8523b7012b468e4eb757afa624f198902c0643d7008ba777b0bdc35810ba0b758671ce887617295fb742b3f3968991b178ceca54cb07603 languageName: node linkType: hard @@ -14662,15 +14715,17 @@ __metadata: languageName: node linkType: hard -"set-function-length@npm:^1.1.1": - version: 1.1.1 - resolution: "set-function-length@npm:1.1.1" +"set-function-length@npm:^1.2.1": + version: 1.2.1 + resolution: "set-function-length@npm:1.2.1" dependencies: - define-data-property: "npm:^1.1.1" - get-intrinsic: "npm:^1.2.1" + define-data-property: "npm:^1.1.2" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.3" gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.0" - checksum: 10c0/a29e255c116c29e3323b851c4f46c58c91be9bb8b065f191e2ea1807cb2c839df56e3175732a498e0c6d54626ba6b6fef896bf699feb7ab70c42dc47eb247c95 + has-property-descriptors: "npm:^1.0.1" + checksum: 10c0/1927e296599f2c04d210c1911f1600430a5e49e04a6d8bb03dca5487b95a574da9968813a2ced9a774bd3e188d4a6208352c8f64b8d4674cdb021dca21e190ca languageName: node linkType: hard @@ -15323,19 +15378,20 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.6, string.prototype.matchall@npm:^4.0.8": - version: 4.0.8 - resolution: "string.prototype.matchall@npm:4.0.8" +"string.prototype.matchall@npm:^4.0.10, string.prototype.matchall@npm:^4.0.6": + version: 4.0.10 + resolution: "string.prototype.matchall@npm:4.0.10" dependencies: call-bind: "npm:^1.0.2" - define-properties: "npm:^1.1.4" - es-abstract: "npm:^1.20.4" - get-intrinsic: "npm:^1.1.3" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + get-intrinsic: "npm:^1.2.1" has-symbols: "npm:^1.0.3" - internal-slot: "npm:^1.0.3" - regexp.prototype.flags: "npm:^1.4.3" + internal-slot: "npm:^1.0.5" + regexp.prototype.flags: "npm:^1.5.0" + set-function-name: "npm:^2.0.0" side-channel: "npm:^1.0.4" - checksum: 10c0/644523d05c1ee93bab7474e999a5734ee5f6ad2d7ad24ed6ea8706c270dc92b352bde0f2a5420bfbeed54e28cb6a770c3800e1988a5267a70fd5e677c7750abc + checksum: 10c0/cd7495fb0de16d43efeee3887b98701941f3817bd5f09351ad1825b023d307720c86394d56d56380563d97767ab25bf5448db239fcecbb85c28e2180f23e324a languageName: node linkType: hard @@ -16183,50 +16239,55 @@ __metadata: languageName: node linkType: hard -"typed-array-buffer@npm:^1.0.0": - version: 1.0.0 - resolution: "typed-array-buffer@npm:1.0.0" +"typed-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-buffer@npm:1.0.2" dependencies: - call-bind: "npm:^1.0.2" - get-intrinsic: "npm:^1.2.1" - is-typed-array: "npm:^1.1.10" - checksum: 10c0/ebad66cdf00c96b1395dffc7873169cf09801fca5954507a484f41f253feb1388d815db297b0b3bb8ce7421eac6f7ff45e2ec68450a3d68408aa4ae02fcf3a6c + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/9e043eb38e1b4df4ddf9dde1aa64919ae8bb909571c1cc4490ba777d55d23a0c74c7d73afcdd29ec98616d91bb3ae0f705fad4421ea147e1daf9528200b562da languageName: node linkType: hard -"typed-array-byte-length@npm:^1.0.0": - version: 1.0.0 - resolution: "typed-array-byte-length@npm:1.0.0" +"typed-array-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "typed-array-byte-length@npm:1.0.1" dependencies: - call-bind: "npm:^1.0.2" + call-bind: "npm:^1.0.7" for-each: "npm:^0.3.3" - has-proto: "npm:^1.0.1" - is-typed-array: "npm:^1.1.10" - checksum: 10c0/6696435d53ce0e704ff6760c57ccc35138aec5f87859e03eb2a3246336d546feae367952dbc918116f3f0dffbe669734e3cbd8960283c2fa79aac925db50d888 + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/fcebeffb2436c9f355e91bd19e2368273b88c11d1acc0948a2a306792f1ab672bce4cfe524ab9f51a0505c9d7cd1c98eff4235c4f6bfef6a198f6cfc4ff3d4f3 languageName: node linkType: hard -"typed-array-byte-offset@npm:^1.0.0": - version: 1.0.0 - resolution: "typed-array-byte-offset@npm:1.0.0" +"typed-array-byte-offset@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-byte-offset@npm:1.0.2" dependencies: - available-typed-arrays: "npm:^1.0.5" - call-bind: "npm:^1.0.2" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" for-each: "npm:^0.3.3" - has-proto: "npm:^1.0.1" - is-typed-array: "npm:^1.1.10" - checksum: 10c0/4036ce007ae9752931bed3dd61e0d6de2a3e5f6a5a85a05f3adb35388d2c0728f9b1a1e638d75579f168e49c289bfb5417f00e96d4ab081f38b647fc854ff7a5 + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/d2628bc739732072e39269389a758025f75339de2ed40c4f91357023c5512d237f255b633e3106c461ced41907c1bf9a533c7e8578066b0163690ca8bc61b22f languageName: node linkType: hard -"typed-array-length@npm:^1.0.4": - version: 1.0.4 - resolution: "typed-array-length@npm:1.0.4" +"typed-array-length@npm:^1.0.5": + version: 1.0.5 + resolution: "typed-array-length@npm:1.0.5" dependencies: - call-bind: "npm:^1.0.2" + call-bind: "npm:^1.0.7" for-each: "npm:^0.3.3" - is-typed-array: "npm:^1.1.9" - checksum: 10c0/c5163c0103d07fefc8a2ad0fc151f9ca9a1f6422098c00f695d55f9896e4d63614cd62cf8d8a031c6cee5f418e8980a533796597174da4edff075b3d275a7e23 + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/5cc0f79196e70a92f8f40846cfa62b3de6be51e83f73655e137116cf65e3c29a288502b18cc8faf33c943c2470a4569009e1d6da338441649a2db2f135761ad5 languageName: node linkType: hard @@ -17087,16 +17148,16 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.9": - version: 1.1.13 - resolution: "which-typed-array@npm:1.1.13" +"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.9": + version: 1.1.14 + resolution: "which-typed-array@npm:1.1.14" dependencies: - available-typed-arrays: "npm:^1.0.5" - call-bind: "npm:^1.0.4" + available-typed-arrays: "npm:^1.0.6" + call-bind: "npm:^1.0.5" for-each: "npm:^0.3.3" gopd: "npm:^1.0.1" - has-tostringtag: "npm:^1.0.0" - checksum: 10c0/9f5f1c42918df3d5b91c4315ed0051d5d874370998bf095c9ae0df374f0881f85094e3c384b8fb08ab7b4d4f54ba81c0aff75da6226e7c0589b83dfbec1cd4c9 + has-tostringtag: "npm:^1.0.1" + checksum: 10c0/0960f1e77807058819451b98c51d4cd72031593e8de990b24bd3fc22e176f5eee22921d68d852297c786aec117689f0423ed20aa4fde7ce2704d680677891f56 languageName: node linkType: hard From 4c138ee4eb62505b3a8af53501b5a02872532003 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 10:42:26 +0100 Subject: [PATCH 17/96] Update DefinitelyTyped types (non-major) (#29502) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- yarn.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index c5ec6e5f8c..75a725c4ee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3266,13 +3266,13 @@ __metadata: linkType: hard "@types/pg@npm:^8.6.6": - version: 8.11.1 - resolution: "@types/pg@npm:8.11.1" + version: 8.11.2 + resolution: "@types/pg@npm:8.11.2" dependencies: "@types/node": "npm:*" pg-protocol: "npm:*" pg-types: "npm:^4.0.1" - checksum: 10c0/7563075e037c8f7579cfb55e60e0891b742537ac50dc1d802051185513f850725fb05a635418ff26602c7cb6f176f6677a0099d586d51b72c651bb741b05b6e7 + checksum: 10c0/6d873af7f71785d5d4db49311c5c73628918b2b1ece83f17073c4470b2fce6bd24a37de23a42ea0221df4e1c7dc43ea035bb9d0b6274f86ec692b21503a9a55c languageName: node linkType: hard @@ -3456,13 +3456,13 @@ __metadata: linkType: hard "@types/react@npm:*, @types/react@npm:16 || 17 || 18, @types/react@npm:>=16.9.11, @types/react@npm:^18.2.7": - version: 18.2.58 - resolution: "@types/react@npm:18.2.58" + version: 18.2.63 + resolution: "@types/react@npm:18.2.63" dependencies: "@types/prop-types": "npm:*" "@types/scheduler": "npm:*" csstype: "npm:^3.0.2" - checksum: 10c0/80145b707b780d682092b51d520f58a0171c4067ff36cf488d3346d92b715b27fd334acd0fabb8eb21a4eb6c4061f1535e8bfa6642a7f4025e63ebec868fb6d1 + checksum: 10c0/53d86727b966a3ba097553b5ef75a1f2bea78bd8c54ebcf6d00bd338000112b208ab30536c8c0a9f5fc61055cc3fbabbc7a23910c55092341602845de4c13714 languageName: node linkType: hard From 7265d47342c82721e5f2a8570b69de3b4171a803 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 09:42:49 +0000 Subject: [PATCH 18/96] Update peter-evans/create-pull-request action to v6.0.1 (#29503) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/crowdin-download.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/crowdin-download.yml b/.github/workflows/crowdin-download.yml index a676ff12fc..45580bd06f 100644 --- a/.github/workflows/crowdin-download.yml +++ b/.github/workflows/crowdin-download.yml @@ -52,7 +52,7 @@ jobs: # Create or update the pull request - name: Create Pull Request - uses: peter-evans/create-pull-request@v6.0.0 + uses: peter-evans/create-pull-request@v6.0.1 with: commit-message: 'New Crowdin translations' title: 'New Crowdin Translations (automated)' From f89512fbedb547f66a72eefdff047768fb505eb6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 5 Mar 2024 15:09:52 +0100 Subject: [PATCH 19/96] Update dependency rack-cors to v2.0.2 [SECURITY] (#29507) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 076cf915d0..6ee799eab2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -535,7 +535,7 @@ GEM rack (2.2.8.1) rack-attack (6.7.0) rack (>= 1.0, < 4) - rack-cors (2.0.1) + rack-cors (2.0.2) rack (>= 2.0.0) rack-oauth2 (1.21.3) activesupport From b8bd94ca8edb5a675ef70aac9c941ed340efc127 Mon Sep 17 00:00:00 2001 From: Mashiro Date: Wed, 6 Mar 2024 20:53:54 +0800 Subject: [PATCH 20/96] Fix unhandled nullable attachments limitation counter (#29183) --- .../containers/upload_button_container.js | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/app/javascript/mastodon/features/compose/containers/upload_button_container.js b/app/javascript/mastodon/features/compose/containers/upload_button_container.js index 7c4757b6c3..066e185346 100644 --- a/app/javascript/mastodon/features/compose/containers/upload_button_container.js +++ b/app/javascript/mastodon/features/compose/containers/upload_button_container.js @@ -3,14 +3,24 @@ import { connect } from 'react-redux'; import { uploadCompose } from '../../../actions/compose'; import UploadButton from '../components/upload_button'; -const mapStateToProps = state => ({ - disabled: state.getIn(['compose', 'poll']) !== null || state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size + state.getIn(['compose', 'pending_media_attachments']) > 3 || state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type')))), - resetFileKey: state.getIn(['compose', 'resetFileKey']), -}); +const mapStateToProps = state => { + const isPoll = state.getIn(['compose', 'poll']) !== null; + const isUploading = state.getIn(['compose', 'is_uploading']); + const readyAttachmentsSize = state.getIn(['compose', 'media_attachments']).size ?? 0; + const pendingAttachmentsSize = state.getIn(['compose', 'pending_media_attachments']).size ?? 0; + const attachmentsSize = readyAttachmentsSize + pendingAttachmentsSize; + const isOverLimit = attachmentsSize > 3; + const hasVideoOrAudio = state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type'))); + + return { + disabled: isPoll || isUploading || isOverLimit || hasVideoOrAudio, + resetFileKey: state.getIn(['compose', 'resetFileKey']), + }; +}; const mapDispatchToProps = dispatch => ({ - onSelectFile (files) { + onSelectFile(files) { dispatch(uploadCompose(files)); }, From a11151d58f022194b30da7ff547a52af573a2664 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 6 Mar 2024 22:12:57 +0100 Subject: [PATCH 21/96] Update our README and include upstream's (#2663) --- README.md | 152 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 146 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f878752fe3..b28b13db85 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,154 @@ # Mastodon Glitch Edition -> Now with automated deploys! +[![Ruby Testing](https://github.com/glitch-soc/mastodon/actions/workflows/test-ruby.yml/badge.svg)](https://github.com/glitch-soc/mastodon/actions/workflows/test-ruby.yml) +[![Crowdin](https://badges.crowdin.net/glitch-soc/localized.svg)][glitch-crowdin] -[![Build Status](https://img.shields.io/circleci/project/github/glitch-soc/mastodon.svg)][circleci] -[![Code Climate](https://img.shields.io/codeclimate/maintainability/glitch-soc/mastodon.svg)][code_climate] - -[circleci]: https://circleci.com/gh/glitch-soc/mastodon -[code_climate]: https://codeclimate.com/github/glitch-soc/mastodon +[glitch-crowdin]: https://crowdin.com/project/glitch-soc So here's the deal: we all work on this code, and anyone who uses that does so absolutely at their own risk. can you dig it? - You can view documentation for this project at [glitch-soc.github.io/docs/](https://glitch-soc.github.io/docs/). - And contributing guidelines are available [here](CONTRIBUTING.md) and [here](https://glitch-soc.github.io/docs/contributing/). + +Mastodon Glitch Edition is a fork of [Mastodon](https://github.com/mastodon/mastodon). Upstream's README file is reproduced below. + +--- + +

+ + + Mastodon +

+ +[![GitHub release](https://img.shields.io/github/release/mastodon/mastodon.svg)][releases] +[![Ruby Testing](https://github.com/mastodon/mastodon/actions/workflows/test-ruby.yml/badge.svg)](https://github.com/mastodon/mastodon/actions/workflows/test-ruby.yml) +[![Crowdin](https://d322cqt584bo4o.cloudfront.net/mastodon/localized.svg)][crowdin] + +[releases]: https://github.com/mastodon/mastodon/releases +[crowdin]: https://crowdin.com/project/mastodon + +Mastodon is a **free, open-source social network server** based on ActivityPub where users can follow friends and discover new ones. On Mastodon, users can publish anything they want: links, pictures, text, and video. All Mastodon servers are interoperable as a federated network (users on one server can seamlessly communicate with users from another one, including non-Mastodon software that implements ActivityPub!) + +Click below to **learn more** in a video: + +[![Screenshot](https://blog.joinmastodon.org/2018/06/why-activitypub-is-the-future/ezgif-2-60f1b00403.gif)][youtube_demo] + +[youtube_demo]: https://www.youtube.com/watch?v=IPSbNdBmWKE + +## Navigation + +- [Project homepage 🐘](https://joinmastodon.org) +- [Support the development via Patreon][patreon] +- [View sponsors](https://joinmastodon.org/sponsors) +- [Blog](https://blog.joinmastodon.org) +- [Documentation](https://docs.joinmastodon.org) +- [Roadmap](https://joinmastodon.org/roadmap) +- [Official Docker image](https://github.com/mastodon/mastodon/pkgs/container/mastodon) +- [Browse Mastodon servers](https://joinmastodon.org/communities) +- [Browse Mastodon apps](https://joinmastodon.org/apps) + +[patreon]: https://www.patreon.com/mastodon + +## Features + + + +### No vendor lock-in: Fully interoperable with any conforming platform + +It doesn't have to be Mastodon; whatever implements ActivityPub is part of the social network! [Learn more](https://blog.joinmastodon.org/2018/06/why-activitypub-is-the-future/) + +### Real-time, chronological timeline updates + +Updates of people you're following appear in real-time in the UI via WebSockets. There's a firehose view as well! + +### Media attachments like images and short videos + +Upload and view images and WebM/MP4 videos attached to the updates. Videos with no audio track are treated like GIFs; normal videos loop continuously! + +### Safety and moderation tools + +Mastodon includes private posts, locked accounts, phrase filtering, muting, blocking, and all sorts of other features, along with a reporting and moderation system. [Learn more](https://blog.joinmastodon.org/2018/07/cage-the-mastodon/) + +### OAuth2 and a straightforward REST API + +Mastodon acts as an OAuth2 provider, so 3rd party apps can use the REST and Streaming APIs. This results in a rich app ecosystem with a lot of choices! + +## Deployment + +### Tech stack + +- **Ruby on Rails** powers the REST API and other web pages +- **React.js** and Redux are used for the dynamic parts of the interface +- **Node.js** powers the streaming API + +### Requirements + +- **PostgreSQL** 12+ +- **Redis** 4+ +- **Ruby** 3.0+ +- **Node.js** 16+ + +The repository includes deployment configurations for **Docker and docker-compose** as well as specific platforms like **Heroku**, **Scalingo**, and **Nanobox**. For Helm charts, reference the [mastodon/chart repository](https://github.com/mastodon/chart). The [**standalone** installation guide](https://docs.joinmastodon.org/admin/install/) is available in the documentation. + +## Development + +### Vagrant + +A **Vagrant** configuration is included for development purposes. To use it, complete the following steps: + +- Install Vagrant and Virtualbox +- Install the `vagrant-hostsupdater` plugin: `vagrant plugin install vagrant-hostsupdater` +- Run `vagrant up` +- Run `vagrant ssh -c "cd /vagrant && bin/dev"` +- Open `http://mastodon.local` in your browser + +### MacOS + +To set up **MacOS** for native development, complete the following steps: + +- Use a Ruby version manager to install the specified version from `.ruby-version` +- Run `brew install postgresql@14 redis imagemagick libidn` to install required dependencies +- Navigate to Mastodon's root directory and run `brew install nvm` then `nvm use` to use the version from `.nvmrc` +- Run `corepack enable && corepack prepare` +- Run `bundle exec rails db:setup` (optionally prepend `RAILS_ENV=development` to target the dev environment) +- Finally, run `bin/dev` which will launch the local services via `overmind` (if installed) or `foreman` + +### Docker + +For development with **Docker**, complete the following steps: + +- Install Docker Desktop +- Run `docker compose -f .devcontainer/docker-compose.yml up -d` +- Run `docker compose -f .devcontainer/docker-compose.yml exec app .devcontainer/post-create.sh` +- Finally, run `docker compose -f .devcontainer/docker-compose.yml exec app bin/dev` + +If you are using an IDE with [support for the Development Container specification](https://containers.dev/supporting), it will run the above `docker compose` commands automatically. For **Visual Studio Code** this requires the [Dev Container extension](https://containers.dev/supporting#dev-containers). + +### GitHub Codespaces + +To get you coding in just a few minutes, GitHub Codespaces provides a web-based version of Visual Studio Code and a cloud-hosted development environment fully configured with the software needed for this project.. + +- Click this button to create a new codespace:
+ [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=52281283&devcontainer_path=.devcontainer%2Fcodespaces%2Fdevcontainer.json) +- Wait for the environment to build. This will take a few minutes. +- When the editor is ready, run `bin/dev` in the terminal. +- After a few seconds, a popup will appear with a button labeled _Open in Browser_. This will open Mastodon. +- On the _Ports_ tab, right click on the “stream” row and select _Port visibility_ → _Public_. + +## Contributing + +Mastodon is **free, open-source software** licensed under **AGPLv3**. + +You can open issues for bugs you've found or features you think are missing. You can also submit pull requests to this repository or submit translations using Crowdin. To get started, take a look at [CONTRIBUTING.md](CONTRIBUTING.md). If your contributions are accepted into Mastodon, you can request to be paid through [our OpenCollective](https://opencollective.com/mastodon). + +**IRC channel**: #mastodon on irc.libera.chat + +## License + +Copyright (C) 2016-2024 Eugen Rochko & other Mastodon contributors (see [AUTHORS.md](AUTHORS.md)) + +This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License along with this program. If not, see . From 8c9341a67bd6a84d07d6e1907fa85a75d682e29b Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 6 Mar 2024 22:13:23 +0100 Subject: [PATCH 22/96] Further reduce pointless CSS differences with upstream (#2665) --- .../flavours/glitch/styles/components.scss | 51 ++++--------------- .../glitch/styles/mastodon-light/diff.scss | 6 --- 2 files changed, 11 insertions(+), 46 deletions(-) diff --git a/app/javascript/flavours/glitch/styles/components.scss b/app/javascript/flavours/glitch/styles/components.scss index a42bfdc712..8e5c57dab3 100644 --- a/app/javascript/flavours/glitch/styles/components.scss +++ b/app/javascript/flavours/glitch/styles/components.scss @@ -1334,19 +1334,19 @@ body > [data-popper-placement] { } .status__content__spoiler-link { - display: inline-flex; + display: inline-flex; // glitch: media icon in spoiler button border-radius: 2px; background: transparent; border: 0; color: $inverted-text-color; font-weight: 700; font-size: 11px; - padding: 0 5px; + padding: 0 6px; text-transform: uppercase; - line-height: inherit; + line-height: 20px; cursor: pointer; vertical-align: top; - align-items: center; + align-items: center; // glitch: content indicator &:hover { background: lighten($ui-base-color, 33%); @@ -1867,6 +1867,11 @@ body > [data-popper-placement] { .audio-player { margin-top: 8px; } + + .status__prepend { + padding: 0; + margin-bottom: 16px; + } } .scrollable > div:first-child .detailed-status { @@ -2069,8 +2074,6 @@ body > [data-popper-placement] { position: relative; & > div { - @include avatar-radius; - float: left; position: relative; box-sizing: border-box; @@ -2222,7 +2225,7 @@ a.account__display-name { &:hover, &:focus { - background: lighten($ui-base-color, 29%); + background: lighten($ui-base-lighter-color, 7%); text-decoration: none; } } @@ -4704,35 +4707,6 @@ a.status-card { z-index: 100; } -.media-spoiler { - background: $base-overlay-background; - color: $darker-text-color; - border: 0; - padding: 0; - width: 100%; - height: 100%; - border-radius: 4px; - appearance: none; - - &:hover, - &:active, - &:focus { - padding: 0; - color: lighten($darker-text-color, 8%); - } -} - -.media-spoiler__warning { - display: block; - font-size: 14px; -} - -.media-spoiler__trigger { - display: block; - font-size: 11px; - font-weight: 700; -} - .spoiler-button { top: 0; inset-inline-start: 0; @@ -4742,12 +4716,11 @@ a.status-card { z-index: 100; &--minified { - display: flex; // glitch: media icon in spoiler button + display: block; inset-inline-start: 4px; top: 4px; width: auto; height: auto; - align-items: center; // glitch: media icon in spoiler button } &--click-thru { @@ -6650,8 +6623,6 @@ a.status-card { } } - & > .react-toggle, - & > .icon, button:first-child { margin-inline-end: 10px; } diff --git a/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss b/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss index 6bf4a1e488..02a1e7207d 100644 --- a/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss +++ b/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss @@ -210,12 +210,6 @@ html { } } -// Change the background colors of media and video spoilers -.media-spoiler, -.video-player__spoiler { - background: $ui-base-color; -} - .account-gallery__item a { background-color: $ui-base-color; } From 995e15c24ab24bf153463299ded92db89116fa13 Mon Sep 17 00:00:00 2001 From: gunchleoc Date: Thu, 7 Mar 2024 11:03:41 +0000 Subject: [PATCH 23/96] Add Jawi Malay to posting languages (#29098) --- app/helpers/languages_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index 65ade9fd2a..539020ece9 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -109,6 +109,7 @@ module LanguagesHelper mn: ['Mongolian', 'Монгол хэл'].freeze, mr: ['Marathi', 'मराठी'].freeze, ms: ['Malay', 'Bahasa Melayu'].freeze, + 'ms-Arab': ['Jawi Malay', 'بهاس ملايو'].freeze, mt: ['Maltese', 'Malti'].freeze, my: ['Burmese', 'ဗမာစာ'].freeze, na: ['Nauru', 'Ekakairũ Naoero'].freeze, From c01f4cebed27a1c11085e8aebe7719b3cee7ae7f Mon Sep 17 00:00:00 2001 From: gunchleoc Date: Thu, 7 Mar 2024 11:04:31 +0000 Subject: [PATCH 24/96] Add Mohawk to posting languages (#27115) --- app/helpers/languages_helper.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/helpers/languages_helper.rb b/app/helpers/languages_helper.rb index 539020ece9..79d8cf794c 100644 --- a/app/helpers/languages_helper.rb +++ b/app/helpers/languages_helper.rb @@ -197,6 +197,7 @@ module LanguagesHelper kab: ['Kabyle', 'Taqbaylit'].freeze, ldn: ['Láadan', 'Láadan'].freeze, lfn: ['Lingua Franca Nova', 'lingua franca nova'].freeze, + moh: ['Mohawk', 'Kanienʼkéha'].freeze, pdc: ['Pennsylvania Dutch', 'Pennsilfaani-Deitsch'].freeze, sco: ['Scots', 'Scots'].freeze, sma: ['Southern Sami', 'Åarjelsaemien Gïele'].freeze, From 653ce43abe0a928d944a15c433d2c8324f9b5e2a Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Thu, 7 Mar 2024 12:11:14 +0100 Subject: [PATCH 25/96] Update `json-jwt` gem to fix CVE-2023-51774 (#29520) --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 6ee799eab2..59b24e1035 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -357,7 +357,7 @@ GEM jmespath (1.6.2) json (2.7.1) json-canonicalization (1.0.0) - json-jwt (1.15.3) + json-jwt (1.15.3.1) activesupport (>= 4.2) aes_key_wrap bindata From 3f239facff413120bad5ee877bf5ccc2211402bc Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 7 Mar 2024 12:59:00 +0100 Subject: [PATCH 26/96] Update flavor screenshots (#2664) --- .../flavours/glitch/images/glitch-preview.jpg | Bin 197277 -> 0 bytes .../flavours/glitch/images/glitch-preview.png | Bin 0 -> 125180 bytes app/javascript/flavours/glitch/theme.yml | 2 +- app/javascript/flavours/vanilla/theme.yml | 2 +- app/javascript/images/screenshot.jpg | Bin 239221 -> 0 bytes app/javascript/images/screenshot.png | Bin 0 -> 158816 bytes 6 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 app/javascript/flavours/glitch/images/glitch-preview.jpg create mode 100644 app/javascript/flavours/glitch/images/glitch-preview.png delete mode 100644 app/javascript/images/screenshot.jpg create mode 100644 app/javascript/images/screenshot.png diff --git a/app/javascript/flavours/glitch/images/glitch-preview.jpg b/app/javascript/flavours/glitch/images/glitch-preview.jpg deleted file mode 100644 index fc5c4204359659e32ec8d758855891e297f5093c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 197277 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

9Id-}pI`0iNuML!V!Vb6`;+lNJUw^-<$CS-yTZ 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 KIoqB2DEv269CTIy diff --git a/app/javascript/flavours/glitch/images/glitch-preview.png b/app/javascript/flavours/glitch/images/glitch-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..af70d24fc078a6c1a1495ddfd663edb9457bdac6 GIT binary patch literal 125180 zcmb@tWn5HU_%1v%ba$74(v1=#AyU#MjSLM+O9&_oN_R*o-AIQ>!_eK`-Q5lEhUat1(W_q76)6{WGz$Kuf}5J`Q}2s$J*4&b z$CG8ZVfV+e4Fuw-wBESD$86GlqqNw+U%Vmm{~amA(Eho=8yB7Hzaw!l!{bfB2NV3i zBUGfghX*};O$Gh0=MqBydjsLZ{mnMY{_So0`TgYf{{7Y)R7)zR*ZW@&@MNPnkoHCI z&%!)!D-QkY6h!uf;&6=?zKpc*G`Rn~*{$;|aU^IO>K#(>UmVT{d5WDrlL#XZ<{9mg zJ1L_1GU1LZ8jreZM6_COcE4_WZ?wtaof(fiRE~5}*Wf8(Nh=YSB5%p*bbsR_>cNFK zM09zu{F-gnyV#LHy!tPw;XZ8cIkEW3BFWs~U|KnC^o_G$PPwffqc8>_Gr| z9p1PxHsTKwdJy6}6Y+sK14{37G_f3RRO>N>`&E-h8@FXz6;}V?(&SveVR8 z-4yqyHj4x2ucd|Oxz9)J=T7DNDzMw{X{;RY0$F$<6D!$#n~uQ>JB&TIQiQC$A90$0 zH*Qzx=hex%y!Tk_jjxd0l!ES5cKV+A?b#Z2-|rGaf#s-9zU}*YjVvILtp=-!zs-G) zV5CNByH;7n!j1f~!A@{7S$r$JQjLSh^Gw!W__HI;DR=7|)+@(4f3$#ZzCWU0QCx;> z#$%bb+8gfg4nlTN;{8|5`8T1^Dz5jIpSG5;y21vGNRpW}B6PFM})Cs64+zEUY)PGw{ z37{y(ontxM|A1~+I#%WW9>PKy<0kmAN5c93^M!X8eNa}PjpQaZ^n=T`bKMAHVt7J; zyoP6ui1kKC6LXmwufxe{wu&HLD##^l=r-$}=+yCZZWq0Jhu#9+ieypG_b#_>xwd1! zbgPO%e60hE>4!3cKgHdri*OeVC#Cggr9tzsw31~GrR2kjk(p$O6)uGBmwamd5R=B> zN}hv|s(dzAO@Ms^Ie}k`Y0x1&@#0lY2q@^X4O0WQI-68J66v&wtpH}QZWMaz+NUYB z%Fd3=TBk1qJ3hiFkF}w4cTI7mKm0xXtbkxa$Yn28mc6O&T08&R@Y83<=8B8?{5$G$ zldrdee-iv1Z8nuR8)>aoVM6+_Ypg%atPLmA`wjiKD`mlk>E`|VC&&FbU921wIHlGq z0o(bIN~h^Ux!Am^yMWhVzUS9Okc9BsJL~TuRiZp6IKKvkkt(}WRbZKX^3ft~i7(ba z$u$VzHq9J{z*R{sWYRYv>=%}tF_mGXHNyO->2fX>=v;$T>YgN)w! zUj@mod%Mm%Hsso&U~v6-=RT-mufv{sz1pqG(lqlDtYLT_cHN)I`4I=q;H&nbw4GDz z36oo#zceUb8wmqb0#;+OIYz?up3tP~H?mJFtyJtGst#ghvxN`nO&>Gd*S28`V)d$n z$ko@I9XI|v`*%NV&ZL*Si+?sfSAt)e8WJ#Xk1Qk$?ktR0hM@;hXJlFL+b(5s!0}Y% z%zHgnmy+IqZFEUCv_te$%*pgfEG(Hy(It}$$M<>!2J9FbBN@KMRDWuYsgb}auBX)6 z=Tx~pOC6Ggv0Kmb+seb^Om)Z=v4)ZnVLFDoZ#N4 zYy_DS^(P6}xRrC5tJnX?t}5S-DG*v*f!_MEBPi@%mTo$*>8Rza!tn@xzLI)R)@n4`HvbtM9u{ z1yQCHX^|b&H4b8h3ekISe<|N77~SEM%s~|`^m?j?TCgxTSE@Eqa#Drae(32jIY!Ev zDls9s%ib3AKjV?`9O z?C_ntwSxV2ed6fS^=BUCm#cBCisy9`Gmca!hrJWc;>t@l_m_qi|Mk0PpJPylndM>YvKA$i+Je8CkWLRvrln)Ac2!->c!T}T4<6B4JB7BB68QO;)fbBD7yOm~;-!BiIC z>>m4t=#C;){vHyZ7($93xfT_jD0O0lNZl5!j2gA1#01E)Kn~2SK=E-xW8?FZA|2K( zIS_SWx&EYm(~O)(xQy-ie51LfmH1UxQG@&CQM3W{#~Fc_g06Fls?eviZ+}whUG6LI z`$g~NWyv_+1<~&2sN!^Y2`hiOINctf^H`i1t!Q|bJ0)QIL8>pV_U-xJtn_TGPlZ#f z-qHK2Tk?^oTKa{K+d(9p28Hj-6y?4}7`LS>r{rg5tXs|g#n>E`ONcJ0iGk!~{%F+n zyglWw9c~Zd?CR!hY4^`4bqHt71z#MzrR2dpMgMUHD1N#K?6ZuM_3jJA9=62zt1sb& zi;K0i5$0uDI2 z+~mp6;VmI7{ShN(p1?BsTUR?B9V-(Z6J^ zt|^Fr-mm}8Z!^=>9C4Me0uz#l`I+riILROm%>GGr&+7ebWJ*DQcE)cXCU?WZ*+AZz zrQjJn6OMe?To%R@|7CuScY=kmi4F0y*4U!u@I7galYbP{$#W$v=l3CeE2Iwj6dM1l zCGQgnx{VL0B2%+!5rb0^~pE=6s-5K>$8gd+}z)Vza_;u;5xD{ z+lZAH3lT$Q`y)_gPb!PGl$}en7uIdBD4p)tQ2?hezIz$Osc9*SCnAhX?AM)FY!=g( zrh{1(?JVqZWHM-O@FhQ??QHHg+1_B1zCEDr*^spktj1>31_zwfaPY~s3Re_RZt37y zThb<}(;RB(EQ&XcMakZoAZ92%$o3YmI6rBikQ7{Pl$ZiY+3`n^F zIT|BL?>PpV6;)lPP(h8yn?E7*g$-p#+xr5@m1@;u-R+=rp3*q3L*nOJlLoWMTk%4F zXIh2Li%pBuyOrO<3>$tnWAnX0i?Mi{^nCO0AP7bA+o)TQ)l5_w#<6+9k6+L5;0$!D zbl{5XN9Zm3&7 zj@LM2Fp6V_W?zDRZ^d(8yzc>=!tKrR_mX7>_iLYY?5l3h20m7}TnvZj%|*%8b3Tqe zFY>&#WRCX?O?`Xd_=>%o-Sc^sOJAG|M2XS^2TVKuZAeHOZFyE2W*}z~D{Gz)sGT7r z&(mV2&b??C!X``B=Kw^iUi9M1$n41G$k7&xYHSZk(1t4dLnk90ASGr0Z>A8Jt+t-o_Z7N$1rq6*Ws zG%fq}F-8Ky9l>Lzpv5#(xlF;*s%*j?rvZ49rl(rHeao3Vv2h#BSZ1D8b;}I~7K2Z< ztUcqXp1`a3t$jfIqINQ-)#HgZXMxc&P9zIUZ=}1sIBC5o<#b)@ZL8ggCV_NxPgAJ6 zg-2#rMSo8mf;nb8adfg-w#qubp<1oW2uH!8QcI4L?tvT}t+HO;{5kjZ7{~`HC0_>A z-am~~7f{oybq2>&fAy7q*4X*r$DO@wB;O7SVEoxYwYKPf;*>g6z^Rz@GW~9kgISmn zQL6_vYDZ%{-IR9Cyeag9moQXv?K?X~b&dPALL{O9o5Nx7&;G0U z=OdWCY~L2@{$jrcg87%5pzyh7cS@v6Q~ziOAD3tAgs+=3OvA5!P8bnHs21s$c!bRe zu5wHnc0c)@zn!NK^C@(>;gRW`%DNgySrT+Ppts)Sk#W0ZNzKFH+DiFcBT#iImky&A zzIr2qtVIG&;@uw>z58s%9v>8aTn#3t5VUxRl=yNLTGd z8iC^Ah#L;5Yn5wM?#Bt~nfssS+#=v`CkYIej`-vmL3EkjKhKT)@JKFq=op0Hgh~|2qfU1#y6VqbqFxX$^N@Vlic;=P#`l@Cal}lA@ zL~Hv#$M+u*RZ73qei_4b|DM^Fu@0jv5l0cp4a+)powPRLuaeX%57Q-7a>Zp-?o95Z zmo);GhSy98J>30XPd-#r4Z?X|4kVlU`IgTeFE)-zx;!pdH80r)s!_R0t6h)zK4j8M zle93HEQ})2#EePP&O-UvfHK^5-Mob7AngT;I?F%;LpA}DRxV^qwOaBcK6ZZ(IRf{X z3aqz4Z*TVg(nuRARNOabp-HoKE78BD5G^WODN$q}$gqnH8l+Y$Ckb{Z%2ASuB!}0Y zW@1W*XqysSguMGCP14XFMnfa)OegpP11$yd^wb524kjg|>GBTv`F&IfY!kQ39{x+3 ztQzK+6p5P3h@(IHgMGdsOY7GgIei%#z)MG09?C3ASb3%>2Od%FLXMjPM)TTwx4ia7 z9MsYuO!nP{ghJ~O%f<{dn4q-M!K{o>=p(4t=fw% z4mb@fqmL8=5ER{xRyKbRXD$wQerb1HW+^QR5dKnW$Zhu#MMIClVo-Nz*oxCEI zPhZb=$Zqr|iq3MY;@s9(e)C@Bye=mtS>7aQ>S}3K?nhB(w}vd|N7sO1RZw{>4^Z}%t#dTNw+rW)5_oj)XrGwN&t>H1 zl0SXJe7ARvC9d7d7^X#|)iW_Ovi@BPtWo8W4jwb$xJRA}E>j;LSt`u@A((ztG+!BD z1*GQ5fXhRwB*F$(VGheCJKM#}CNbG%@6V_a74*W|PEVtZ|62?4io*07R%I3Bi5#Yr0HBz5Kc>#kBUocU_2CVI0|kEU zY<~+M1G`dTVmf-P*fN0rJgHYJ%wf4h4q~8gDnN zvXzo&t3K^tpT;BWRv-KXutrNxtUgM9P5D!{vFp|>!`z~mcKY^{;r-O7n#*!O08mp` z!Akt)2+0#TisB>M3ue&ooD=#u!1@0Rj7fv{zcJH#2{c2ZpSVo`)cJsW0x)ZFpggJ} z0PF&Q^urlIV2}7MfQUXo)c?ne2a{tv@aLf#==ocL1~w8WQ*S_~i+p*Y`K82>-_rxh24D4UgzH z0A|043+Kz-clW$U&3x+~@sHph(cthtV4-ECjSSbNQ8&{7@cChOn?tQXA8^0sqE%Ew z3cN=oxQX}yMb;;!XkWNEVTQ9l$wW|GCyGOVxi*#-#TckNtmt@zSnuF=Ayhv9#9ds5 z#OEI**(e2qIl4pI`6E3DEc@qt^_2TBKBIU_^IqMqrA&oqwgVrccs0kr5cL~E=_4FG z5v1x{cLwRF!367p{xs5H2FUVjY;NW#;5k?EFB?6UhtN@U-2w6c@0)?7BJGxs^|M_V zcA3E;EAGOPwMlv<^6Fg-)z{(y~tUg81tew+{>mvMrHzH$R9UD))f2MV?` zci9o57vAKOpuhPy1-vjs!iA)sC!aJ4FkCE$`JWDt3Q>bUQ6zV?K%~!^ZbIMw+}Mks zunpITN+?=&Wemh|GZ5PV)A$#MZ-F6dmCl=aVd+d#XXl{U7OxDik|W>?xVwnBQ| z*B|`m60p_h+Q6`qAqStA(|Arne#xnI}urw&;b5gwW1|%oj0^ z0h^0oM$C&nC+w0JFiX(Dp$dsN_6DCy$S8%onmM(-71(ADXWY)qfF*ip1Dreo-%VfN z3)>ZULn&x5gha(6YQ)aD|CYL7k#tV|rm9pMF!eF)jG9glsx(AB zkeD@g6X1Ank9W9yMXuYx3deFspf5|TGs^Th4Q%~$rTg!yxdnpmPj5YO{+>}ow?^`w z8F&$htBav+*>0Jb?cT8CJ$a}j#QPcR%+Qi|hG#`7RB!Z(0DKiY8v5mbFLM1kru4s{UYR)Ojo$6;s2H2jJ8 z?o(r^&gCy^!@kJfEBA3$I@RhW{`kQ7fjj9;GB+t{KJvctoPaY-Yv zB(!>NX1F1k_wCIjWgPTRzEX*S_Z)ZhnnoDCza#t)%`XPI9B9qN^u3-{l`L4l0!iWSZZeRVe3&g(9d5MlhTVh-b8J=^7l37s1YHaMq zKINklP7ALGte*L`*31Ole`oHN4bOI;oP&;PhOU{Qtu;$t+(rZ2Yrn^L0T=co=IqXh zm#zSh3Yf@+74W@C?3IAwEcb0Ts1?TNBXCsR8a%U(?fo) z)#^QMd}n@n{DZUXxm_{F7W&b%Urg{X*?>Pt1%14SjE@ZIr-R;@mhiKYG1nDd+nVs{uy!WUE= z;8XLe0&J#O@;eHF&Y^g`+0)5R_l1`*|8kfX*!XwEkLQfdnfwD7QW( zS>wa{NQNjKc7j90(R5}LQS#d-T&b$mw>9h(tux#KPBG9WBIbRKUHsZ@g45$X8tYID z;%dw6YLf(JjtD@i3ntg_K1A#DmtnfdQEHy1(d5v{W`;k=ZIc;tQ(_YZEoY_WPG9^< zjzt+U;e)vA_(8zAY%L6N*9H7|)fQxDg^Vix<)k8Wf&-Wux|UCBYP?GXn79yAU5SDK zBw#TI6-8nNl`Q5*xu$4$?JTSc9Y6eb zowP_P_va=K-Be`xa9hNik<856CdvsmOZb~JwbN$zlg2j@tE|tp2QgYU78C^k^ zw%h8As4`ItUr*iLXE-ZYneOOx85g98E@LN$R}uKVdD$R~P(mcM0dbTwijt6n|LuWL)4j1 zVV>}<#tjj(!~r!}A(5?qF8T*id}PfTg@qqN^HLi+n2*n%kp6Q7DH>th$EATT;sx;E z5Qr78U9p^=PHLS)J`YmdzeatbmhJ$N@ zcmdmP0cd1y*fc~UxUBFK`UH&y9McUj&ug6UmQZO|lDc5w!p%tVp@Y2IRVgrWnDC9C z1kO*351WQ*h>>Km8Wzt7uxo;mnZ~3771)2o2t=~xg{T#4MZ<^s<_CpY7)(q3JdfIq z8Z$cZ7(&R9B}2vJ%OEoX7><8KjKgaje2_};BlTd{Cl#TxKkyF=fZy9V9;ncRHaJugea@Pvd3%5>4yi;Y$<064skZ{owCh1UhM z0l7&B$~=qT9r4RbN&jAWhgDob9J-vOb~H96K5;CDeTWQ`-MPY+wUuDUj6(fQk+>Tb z1dq34=3Na4LFTjaNC%*Ri-)d5Cpr#bV)Oq~a{5ZJ%r^N!cMa3BGXJ;T1hHN)FATfu z7itt)pdg!moqFtz;(azLB92C~WAmaGGB5-fMuU73*0W#d`y3L6s}hY2z?AMmu2fzG!b7z(N#u z>b^w*T~frpIh8L1|Aen?#m&iMpg^UzT4ic|`qaGE_1J7>!yeV3Qpn}5X)=PKkv+#SAi|qxE-hAPei0^EAc$*8< z48Dm^*doFOxnCJ(l&ishOfZ_DE@`I$_IHptg1Y!^OMI~LmIspJXHjgAt7>4 zI+Dv(^#UqctO75v5+b_XbP$RJcDcg| z!kG>2#qg81QGQ>DJdg!!Xu`7l6V9(rw?B>-CJT9%G$U3rUt6Q+_~aQl3cX?ai zX1@3fq3Of(KJVZ+Q}0HE9Qc^2IMaXIDG@JtF#Kh?7cOR2_y&*}yf+?~Y5hw%!CBr? zbyMI29pF4aP3<^MwasH@Trbe;0pa^!V8^+1 zrKEtim*7C{1$PHS$g^Q)Bo^WqrDO3Rj6nrTK9#SUXBS8lnQ2-&{@qNdA^j2UC;Uza z=(0TJ4pA><{GJ8Ncd-Q1yabOiviFC8Ua>P+>p3{%@ifwY4Q9{O=<@Cfz_q-=4xyo? zE12PO8k$AxtY-9ByEU2CR2`ges=@mZI^&;A++*_DN|yEGKXSEVT-ko?+QW&xl=2EyN9EU5q11W$s5JlM{uH#$%*7Rwo*Z4rK1 zrujE2Q>;MJWvoeZTYYRW!qx!jB+LnK*@hWz#<$lw>2ncA+uQ8};=}vR zqmckS(qPP&2_F8Odyiy^gisjsXsjmLN1m#^$v9I1bt^pK_boEZFFM1&T>O@?n#!t6 z#cv})Zzis=i(|@p!*D`-Bl!#iny7sM>on^y#W~Bd%y-~Y75|z^%EVOokXR_|T{`7r z6p!Fy$+HnPp+yikSsJbnPfy71Y)#MW)XSjfEgjBv8A~|6TyMz{M}@#Hd>y^ zM!Cn19g<(l&yf!2e5J5;6oL^-9vPpq@m*N^1FThYNof`{Sp~2e1{ZC{E@Wqo>_BSQ{I02$iW%;(S?+|TKEDH9B{;sy zjmxflYUw;5sz<7a-EHO`W`)@R)>H!60mRe$PMtZHgi( zm;^EtZ_bax7+mTf27eiSX)z&U^OvDUXp_Gb|FT6Z)h>^W?flISo5v+W8vE~|x6x#c zUsH{Qi(XtYWjdG-Fix?{CtkLUAJAniN|CfIqt8l-7c@}q#8w6Xr@A$6xjgcVc;TW4 ztx0jQ`i(;b@qQV27*{#-0o5IJltKl7C}f0hGjDHQItT}K5%76yh>U!d-cUM zb)L)h3va_hc40{+TBK4>-s>rFe0{~qMDd!0bi|C{5rDv z3l0%6!&XsOk>>6xcM+ANWFmkb4_qW5`H;LnN?#zuz|OzGgNME-yLSP%$k^oiSR=IgMB1^X*X ztSt36>;M)@m)t2RX>?K~fzop?58lIv%*=T{>6?EogY&aEJsQH+Td}f4fRth1!0rGo zX;FkaW+i?sj!sX`Gq74Zc*||M+)}GN0BxPikq6XL&OI5{5!_-Jb#+!j{58_BibG^j zfQ!x0d*g&POGASMDwJ7&<;!g5B}IA$#I#aL_J=H#E>e1V>PMN_^=A~;SGeZ3xgna8 zFiAg?i?TX*ru_H6kaU7S_|`2erY64C4&;U#?Gz4*>5|&2%NB-wN~tO!;gJ7ehYT$I zQkSIXn%DP4JFAs&y_N4RpL07W)mB(pexD?^MM=o6?9fCM#x1ijz2z|>0t0RNP*J~; zTU}Hx8;Q{0nG~!KhRFnH*GGxV;dJ~V>Yn+0K01xlaTy&>E@bASL9&4@=6G(6CjgX2 zfRa0UgFa?RVq;eM^fp-;7T8IK!My8Bqdyl=erYCOLN8gl~i?$ z;uoYOSeA_S3~m>od|8&5Y^WX#XLn4@ggqyLa!+OewVb`fQ27RQI zt`O35C*jW;c%8;}Qmw5|LkSa;Ek{zXqM8fH&c7@k@~IIGk9J3qMauf9%%GYYzk@q{=X%4zC*isndT-Gyui}iZ8&s zscV32RK8)qM-Ff_e!T2-0bX5%2FM7I=f9Yk z3JRQiz>FU;rfnLEc4!fd@DA+}N`8DQkaIhlgZZdeaFa!l2E6{`)+)muez+%wzWj%` z`}k<2xNr_mxVVjzH})f6_mOA|3@F1K)eg#XPrU0_Ajd>q`m;RNOD{|lN?y2bO#kW5 z5_r$UxE@AGJ1Y%y+JY!t?=C?o<8?MDBHw}^p!xrGNkJ5J(BmH<;SucyejM7>g;_QL zk-?@uz|h{<*jN6W=h>Dykkd?E`?Z7yC?ryn$A2`uK10wj{!&!G*720b@{8k<#C)+~ z8v`~1N{!6zL~0}5&#D4ji=McRA8#86=@r<8C00PZ>kAty0yUl&2e1RSNAdkDDxgB2 z$x3atl(hB3?QRZf$y{_%N$5KaamV($H76AB_q)1>sJQbB5cF{OChq@d?HA`=pU3vR@tx#tv@s;uN zP$1=Odbl9~WAAJkTbUZJvnEm0l34cSzbe_JNm^YX_Cg$hrh^05(awDpmm_N-Y7}?2 zkE`>)WGZYzmZ5=Btj8R$K1tlh|Kgcbkw?q`-)&M}>!D?DJAZUrPnR4%RL9%LcpP}^);O|pJk|n+>sVF_2m>ENHd%#?yIR@$to1s$x z01|;Y6?_Z;FF$o$X%}|L=!Y(R%v2w=08049Ft{Agh!u%2F6CEaM(CF^b5NKJ#eGzU5}-x0oJ?$0DU;^*lu;a#G-Xe zZTOj95@5`TZpT{vc6-AEE8>H2OnhLhR0*=wT8^`qGitC*&-ilH68Rwa`$0~f<=+%b zLF&!2K($_d${y1&w2H)e6oQPrH~wcv_Rsle{f4DR{L z4)<)gMy5Nyy`T`+QP}q&zU@s={&jaW*D$RFv!?w1x;>15ft<0i)B#m_7ed7+zcs{G z{qow!>_Y&Fbrl^!Ka6l?(ghZR3ylzS-8q;T=>%As0SeroCq{L?3MGh`Ad3INu3h3k*yr`Vy>Mi#yh41U3US$Ot;b->s;gOA z$!7Aew88qVTd(iDhdWafhN!N`>68<~8gdr`=s=dCZb|l()lZCD^piyoshp6fYrE~~g-Dym zdoZ)g8-|t)c}&!Ppp78e((FeIKbU^srP6r8q{)%0PKqar{r9GiM}|2Hf!@K}TkXLN z!V90l!$uG<%JL4RboLhqXTN zSmD5Pls@cDlW08exq|dJ-XUGoO_nIAu$v2hzVrv+V8|LjKMRpG z5F^Z|Me!F8j=0u4{p;?c23M4ppgQT$#BVQ~WTe-K#Rc%r&}5Yzq3>%UbCm~WtDDX3 zy-DYSElz!m$^6d%Q1`Xn0>Ez4&#MW5<(0nHm4w-=QogWhlD9b99xnoV*X7Q$F(pXD z_r7tq1;@K>Iw*X-)psAq-Gu~yoG#nPExlTs#_ISmR{P9o z+`Fkt0I!e7NPclo7{#Fe3t3d0B--QrHu3aR&}acrn98aF;)X%1Z%LLx&j_soffuV) z4J??mMj@EHH^=>=hN(uwy^L3f%Z&2{)8Fijx?~cbRY0pVx^TOZl0AIv^i-Wyrz~9M zP7ev5v2Q^N=-@tTqLvn+XJM^tjm_K|XHJ$I>viY#@-U40zslT6So`pZ;M!?>i;?O84p7=`@7=c>-HuSocOnZuQ9602Me}Zh1`qaqUd(mxl)!_HT4sPynAh+Lhx+blRSwl! z7g50dAaD z6e!;RM_8+VjmLKB>U@{6&Qth0r#hvuvn=&@%>B8VFnE{k*ozkpC&1zqy}w0M2$AbU zL#6meIi(4U{+`gFcQ{K?o=kI2{UHKG&yUDcdNf*A?RgLWS1v-R|MW>W#UTmtqPxzw zv-~=q;h;_l7YqN)I981Jl{D!CtbAW zEM~xvT8qO#&7$|2n7s;$H0*ekKc~>aiZW!hZff0S-+I&_k0{T-$x6mD;^(_GPM;-! z?F`I}H9)zm zY}ebX^5T!|klLkfCt%A#va*0?zWxY0n3z81f$-JYWJ;!ed2xHusb&wALn2)`&@8%Z znKKkzZdXbQ@q-~Sdp-K@e>2x1dkEXBznRRdb?HC?ed;mNxf%E~;p;biKye{eNPb~S zKZwVX29~knUBm+x3$x|=+5lp;r0I>cWzFZ#d)m`Ul+{1#h5mjO3 zXaJ+(^!xeU-Qe~8PAk~~n&pdsH{ucemrduVl~&(u0E-^Zhkk&fZXkY=)5xUuK(lzv zs{z+fng(h(KM!MK_ujz!!3^wpd+?MGTJnZ);rxCu9^g`lP|AR^Ifz5>-%Ho4y4Zib?P7bNB=(k-;U0IrNBQwq%p3MO@7m$wAgzw!8%Rn z=0zk1ivJ(C`!AM`cYyzFgo_~b-Z)Tc_%T1hu&epu@j76R$}kih9+!l=g`miz zUtQHgyNEpP%yx7dJN{nBwm}OxwQY4YC5TU83h2e?hns5Z{&K9UJd(|YCutXd=uR&# zp0}#>QWpwn3@=V$tKk3Cf-dJ=Rg}4)g~=ujTm@OW_7zmVcy09|70BI1ZVOh;0XhU` zSpRU```GpT!=t7p2b7;RUHwDd9ZkGXp7EKgy59@_nXsKrL}7VSI%(e!xpAemyZ-C` zAu(65jHM0!Z+?!YpnmPj{98aQiV_WUS1lcSb-B9~kpcRB?@Mwb; z8G5?Q>>IS{DT5;>B*9~J@B&%|CCgt790daw@M-2B0QqBcTY|l#%G%uVTrN`dvLoYg z*FJ5aQtwjRN?%-Pp+D8<=-2iZL{CFM`MYMm|4APRxz`mVyIW`1N)-tWX4LRPZ0Co1 zko5BfqYDh=M-~Zkzm&|GE&|p3p=4s?cSv$Q=y`p?u4xc0188517yw!^In2h)QmHX( zqGUTe9;X{bP}9MI{@aF?#6HAonJ}#$140?aLncryy-5e(m-gT|pKHk6{mf~3E1IY( znZ41lk{|}5D(Yh88U<)N*-lwtTi z`a726jP=8fwIfvVo1_~<@rILD36{l80Rj1Dz8dRNta|H8aav>Fu-> zU>`u^W!(055Eqd&_H`?rumWuLDpxVHFX9N;MUhd4SQ#7PYSFU+^S9cC+~Dlndv*%a z+FrkNnFSV2jE8EsViy|-^uo?}>(xRycQ<_-y*S^W76)`J(jS#mZp43Fi##uaZz7~r zHu56B{q6;@-6248U1p5B2U=Bm4)F1)l&!E?|F3h^;8sUzF&bMtu8)LCrss8hQ>rsQ;L$Q&$ zDyA0OIAk|}Aeg1Ko=XN5 zLt`LNSUsh+1rrykp(cux%!|!?iV6&tE}1cMQAtJD%W&0W-t- zIjQbUzb?=m-_rn_f#ZpwCHSffBMj{zW6ivAvB;hA@djLAl7Mr6tf)wpF^aiHll#VP zgw_9ELMLP1nCfD)2xzH>=!ehQx+LqC6qvMXAhA|N=g)q++o;m1JZ$70rCTLl^%9`` znREWl>@?KTgv0`GZ?>O>E)^7-TY%x1zMU&j%%Pt$`mpRXbC54~ZJvbv7dVe1y=mN|3&TfVS>a=ki$(ifY}8-hala`vm?AnRtv} zh(B!VmGG&83D5}?u0y&Q8l8SOzMsHSG_Ci=etPj}SDJ;8l0%wQ{JQxLgY|Esc6r@N ze4_a?4I531gDfMTLlzuM0dzwXhw55vGCJMApeTTv1*;%bm3kI3&VxogqG?qxM4{2+ zce{IUO_7JHYmwBZ;a?bd%U6>}fb>}g-k|vP$P?K4+~7}2IPJj((2_V7%QA zkI`<%ubJ;J3_xCdeQudX4c0CXxDX*U5mD>9<(0KW5VBf{Oc*}&5Nj}rAl9%<+{ovO z4)fY)1AX(>P5Spje4;GboJzHkZf6?;Nrb#bak#m6MD#^WAVmJ94b_5|Gr;E0DfY#b zG_vk~VoF2u$>29zz{z+I!bIj*P%*%N(%9Kz1HU&o5cL7k!|x?qQZ8(ooh$c#e0`B8#+f4e z2k2>Ln5a0ODJSRpLFC=mNEb?3E1aL_78M(;?mH~j4cVeGJM+NdsU^w61f2Sy+Kl9lncN_1#-_i?vCVSPml0eg9&ydEgyIXWe5b5JCvHIgc*ES z+;BTT*#WORp-Pkww4F>HX~(Vx+g;SV>; zFalh$!EVl`xlR&F$^{56Zp1}_yNEN*sq9VrJu>Q_!$|qwTiwSb0IBj6lD||KTR118 z|K6qYq$@S@7ohb?Mb%y%UDa1|nndojb*tqSN}3~7!kX?oU#vSbw`B~{|L8pxyEEJBysrN$@TkaZ2cnu$dwG8^E-Qy49A1fTiwt?4HX@&K4TSk~2&RPH+t>9{&6w!^w93<+N8{ zRR7NTyefKHjxg%PiuHB$*WILJcO{J&gQ{mUqyZFJXO@V7wpSr+bHHt@_i^`-y-oJ%I=VT{JV7`eSsr zbTGgOMz_Sj(~x7e|Fzo?UQk`yz6n%)ybcFuY#Myae0Cdk~MC=}=fq=h|yX}GydAGG=EXMlTuO6Ge1gsK52ccy^z>$gQu1K0wp9!Z%Nn&ZxnB~e} zNUU1bI;G73HkoWeLSTd(NryCF7XE>tXyIwc8AcjOYVUOC$~7#VVn%v0n-o+ z2?3lAcF5gITq!jCGVL>qW3C?A#~22?Y37H#HEEntTmZsylk7_&wkpCsziTG;v#r{=2d z&+r@6K}t~)uv54)i32C*NBG+*^r^OW&e~kwsTbRK-i#%Cc)e|K^$r`Q_P{JJaDgC})3Te|tq$E!$e_wb^m^A6W~TA!a}W*0 zRnuX&`u&qrXc_7Z9OFr2pD5CHc&sRn6r!MrE``H0T6uA#2W*&`E9DgdphYqX10bDm zNKqX)A%!iDd+QB!=z8HI((Z_kxtY5?eQx6PxGQ7zrTBnT0WtUK(QU~@PE`H~k6M!4 zdr9s$u#`u&ZhAl+04R2(mk$Z!*cyxY==dHHwga!iyxm#m$=_X2SO=QQTKC%6yDEZuRTKj=RtYK`3&B{;(Mb zub1+_Eyh%A5F~n+7sPS1s8_E-Oy-G+xGj?!EQOvP{>;&g>@IJ12|7cS_#`v%ogCq} ztTuJ3ZBOQj0{jMn6o*&s>3((R(`(8h5hH8EqMsG^d^e{H%{WcVEJ!186N8jQQIyY_ za8rPeXX0CpX+vRy?oQ&}i4Fz{+XTUeEib~dFhX8f;$?RsuW6P^&j5uJm9b3P(P%%_ zJSho>eM4|g(R~NG<7SX)eIM1CaZ|fD zqpGe=w<;k3mEu3Vs;Gg$e2lACfQx$iIe+HRYTURJMa_U}NPBH;`%U2dW)*+$2X=(= zVmfvf;o5|)P4-u6Zvl$2gpNnv-#9dfmsKU5W0*!-VXZpFe>q{gacO91;!gD` zxzYKNMMGVMNSlC@ef*x^?bk<&qOw8;__>2nn&gllCO{%V9{EZZIvQ%a0nQ{WE%>D; zx2x!jZ4M{SS4X)_5wd+LoYqg;4f1X5`mz0<58R=SzXH2FoB?9rIs@J5PfLk{B}ype zrput3qwP)pa}o=;kS!ooTV6%&5(tuXEjZtJ_H!5{*i2!>;C)9+eF@I?z&L4@Bch^P zNAdE*0bd(^5Hn3xH!Gi_vtut_PZsG#d%&xuXf%-9sonDAY=nz)vbcnalP14}Nx|rm zL3lZI#$m6-7b+>I_k&itX`W1zlQ!F-`_d3--P|pVP^drLEE9TvQn`3OXS=Uu^AbxJ zw~I(QG8^c}D%NgO?sX+N2{&kVn#G+0Gc^sPrT*N}uhp%-`duhnXqatJTOl$O)x$HSVSyN&JqO7@7Do$!X4v5Bt?zM*j2JIv( zGpgG#G8)1XE;2&H#_Bb@%-SN}Po>hA>JmpJujgzQmLyjkK+uURo_1SQ$Z9PNyAm`y1UKviio4? z@Rz4DkQ)I71U3v&?7d`*m*^|FLUVqSw>Z1Hu(n>h&%XUp{+|C{nWQ;#q~3J%&S*ud z!&fBxwDlJ}Dv9C%{P)`9Xqff@htiyNXM%zx!@av}DPfCT9a*zA%&?gLq&94Q__|-0 z+-ICn0H$T)E(FXaW^OiL<@IJ_s7<13-G-}0<=ARv0w15JQ0^*kOc`R;k|ha~$mmSd z7{Xb{h7N*cfxSzXn{rI{Nn@pSFy@>3k;d-m2OsUS!WX<-Z zqOajiI6YQF>>RrkqCsq!WTLI7_?}e;!r}>73$2fe;|#UhaGMBMTg@DrnH5{T%>;c} zyMCI9N9K#8$G=pVYo|%p2Q@Pr>3FsrTwzxb$K-_zl19d;^5yuXU~SIBa#BQ$(r?FP z5N(ts8J!jjsr&9~CySD6ojXj-(GcD0%FhP1y>s3+T~w)rF#b|O^+b5#YEHMzu-$yH z-qoj7ir?~C85_tXzX63MWm2M=)Wc<$dP&`NV zwC}8YxrO~fXQ~*JrN#RQT4i-a3CkzhLpaltwIqz+?{hDZaEx+ZsvaSTa*>$kB0IP| zan9?ow`bNaf>SGg@_3;%1vQ>w)){F9feMvs-94^+-ZhS(N>;16@hCqtrjv2yBLr$? zw~2J1Y}Vd$Ix56Ijsx9Sdm7un0w#FndnK51RSRg9pN`G9YD@dwK!X`NP7;51c=ALJ zM?037xBY3Z0Er&2NrOQta4X9MT3Val3*9}OWzQOf@+Pll1E(Umd1M^you9026G&n* z#Oxm3XMu*p$k`3KAm||g@ou$Z78D?k)h|2bLbjxdMz@up^rk=8@Qu1CW~$p@ybn$o z32!4=-!j+N>75n^96)*yJ1U>kx6hJuXa!WMK3l3n!uBW!v9JRROVJ)q*tl?>6Lje$ z9W@lx>h81`=V0K&xaZWCK1$Z1A`1bZE>9A5QGsLtll}8gfkMfE@ zYAo@jVb7h<5qPSFH1>7k)sfJueyV1gcUYi6TDVW*ESca8PK*0GjTK;?y~+A1P*oF16@wBykW}Ho`ps=FWEQC6mxM!9<~`$+T31tphw)i-qV z{V|G@*=gb9WNvU_e&R9lYS8`}my-q6@h+p@fFN4{_en1q!4r9Uf}Hm_cegf+?KM`O zwnM({a9)*mXVH#gWT!(8z;#CU1%&W^%Zgr=6qb$xQ>$_u7!*bA+H1}A^(vDAP*Hk{ znMA!qo5*&x+IP7&p!>N^{-9HJzNe3sk>*Nz!~db@*3AnP;wV^ns2`cemtEdohHKuN zlt{lP9;w`qHW$EXt`(-U7gjz&vH81@X#BDn zoyt9<9JX_LqEh1;g?kKMgbmr;`e1HF%YP7crWwzlMEgdYLG(pX#bX1}#t-997}cw` zww)%$VTmX_a30oK(7TBXbQgW;0~boI;;qI^Vx$x10_}=x8}N-t=6yyq>%4EiF&Qcz&u&LijjMv_<8bonW3mC>H9GXu zyf0(g0e-qR3jK-QLFsjR>S_*+jZl<1KQiF?5ZE@G$JSrZtj)4I@d0#wt_z%rsw6uab_x()# z%(erF2sZEJOTRj)SW8+f{H};^_hLby6YW6w)J>b%BKew5851ti;VE={w(2JG>^3>0 zPSlj5pm&*06Dnn#cLq60V^G$+K23^fI6vwR9OOLDkN3rL^1!iAPk593w-JwKs`lh> zQr#%v%N?&svSVSLFSq4Hnq%DXg-80HYglwq8yhnDsk9(FY%vN+;l0O!Zgr`e8=BMI zo~n1ja}s%uf|nAL`?DigPOmxsYKRd6cA2niKKH8*!vG2%!&8%b{~z_z8}y(>$j=wF!e+V={3TkV0 z@3)#c_Cl^?__^Sw*65SL7MJf)hoq<4YB^e=nr{eoD~QfM4L!MHvfvx~g-jTz#EvVW z5(a98bsRub&!APs$7tw&mHH8|q;I`z!r)b`w=IELjNL@FF~^e0z?D{pmjL2E7qph` zO~B5C^gix zxnpnAqv{)NsY^;H?w$SS`q^g&c_rJ&XtL`nsLY)o$cJ;rU(w6#E09B>NVO|6&>>th z{Xv2CyCkewc1WDxsQs<&9{ING!P1IJdfCwXG_ag1e6-J4WJJ8lJweSvN}19gStx5L za3#!I@_t5KvGtfy>I<%bZXpz>P;x*=X+YBKo;vWaPor-_%JYAeUa#g>vHI@hN#}31 z!;ADz1BUPY<6|?;Zl#BhN6zGf1rtH+*HKq3Gd?sydb#lyMoYssX9s5HSH+TsN9X7? zcdVf|2TlUWmo`JgpZmN>MBw+vpvl!2t3+BMPawow8uLsA1y<~AnP4e8GlVuNE!Vfr zUD`54AH}IGxwPV?j}~c7TsYR^Q!94PCS*-UPDnKEa8;rnDj%9$i1F@GI^n3r2@>VF z3_1s!qeZb94c!}ARNsn~PCo3GXx#XU9=QVtjd)A9-+@qx86i-}%Q(JvIjBQ~aP^J} z86TjnHd}#16i_&MG*pUG(RncR3InUzUgG-9Qz!pQrfP$0{n^x^-f>k+CQ~94XQ$EA zA@-($IPC_wS>>U~*2#=EY`vi@Sm*wB<4bc`mDukfJXv=e^*NZCA>&A;v6E3oNakQY zPA?f%PI#9OWfykqPW3h^9kJbpT{yNb=LuFfPel3)9|g%QGYp%v@OW%h%mrJlcLuC% zwAyLD&mbRm=k9I;EiD^RUS~$wT75mPMX*sk8%2V?-9A!|Amuwi3Q}yN1oj2YNC&B} zKLZM~pvBR8ubZ}@it5~~H))BL9pKp>^9fokNl>$cbB=7FB&y%pfgA=`%BqgU={D3H zO;A-F4~}yaicwj-uG%wFcG+QgCQlmts}q*9B?t(D9y~1symK5q)|f68LR^m5(H!AD z&)3l=SfYa)f@+NNjd9n70weg`&(~x8d-bdy1R9I^zZ!spqy21v0e&wtM~?68}JJ6y6w^Vtv{v zDb+2xch8c;Y!Ouh zY0cRlpZAr(L~g&@c|S~Z-DWzEi|gW24v3{c`dE$M?@k`A*l4J2rFjGb(aH!MzR^28 z;8Oj@>vqY`SOx@9Ae)m=(^jTcE*j3 zVH1;qxE!P33M@1bLh7`ZVj}zccW09;nuJrHs#dB$J!(#D;5O&u9H&-GazG1hISC-E z*|8+&D;|obaXO{b?(!81XN5adTW8vwif>ij8xPO@HNtg8Dh!10)geeWMHpL99oBs6 z_0m#e?++-S3$DRuYb;l!^u21t?}vnv^NgU{-f~rr<0XKb7-l z+IQ$;#-62_bA8i zE6KgoS5sv^$mJCU#7`n&EXo-mJ#z#nYqZwIGb)EWyY@{Hx~2Iov)l6S4}lcynX!b& zdlNOfe{5l>N5L=f3uZCmSv`hTbSK`nG&VMpHowQUO&3`C!#!JG)U z!C0_CxL6o@y$*}Jhu7+`0NoD>K3AojO;d}|VJ2z07bo2y?_ZYi5q`W`V#!x~2#Sp` zDD0MeCvm=52W6s-%(ti>){N(E^TpSsP|z0lrYM)#dh=hzh0yiHIQZ@d3cSQiq3X=1 z%Ots9-kE)qf5{Rdm!A32TAbSHwOeOb4$jRT@O8IP`rdJNb!&T~wGrnz6sNOsd$b<4 zn^kmmiwT)~47HXiu%3ri4&9PwF3o%cqD@7KhuSz>$6 z;t%6nm8J8eVnwg*->v>knyndFlYU**r>z@3y&zqo3Xg|(_uXg8t1pQinGEVd>Jy;o z?f)pkfbS)$%oP=2@_#tvEksr5Li4e+wuSJg9$Dc=zRh{p9~}k^GTpQ9gr=J|SMxChJ`1AE3V;`H_gJM;8cbZ6X6g6L!cP zyZaXy`iMU({!ofB)BxI$sRY6n$`yZk@9ui6h4OPGx4QlOY_pij(@TW?%Iv%AtQD_z zXRqR$1lU&?4Qv~H|L76!wO@v^K;3}@Eiz2uzo}hfu1au6^rXp1eIx`_8f>3I$_SGl zi{PFIygQ?VWbU2u@3gV8)O-G^wLhrI4EUi{wyH|<&6$cVx|yuI+!_orXl3Ak))uyA zWj8XkWx~adRFgAPh{UsW3eq4~7M(m-^zO#TUdT5RQL+pFMmH=?1ud#qnUMdR-s;p?#)I0GDt=7tJpSJa^rZ*z$paEZm-Ux%({ zvb{qLW=J*Jpy6v$4gWdg5tA8R2(RSjLHlJ#%OSNjq?;M`a%Bx_pn8K20^zoS#rlYdvX6fl&uXpLTHr^CVDYoXA(w zfcS}Vmm7AfgM)^m!VKzUybcCff{+g<%caBc$j4LN0%@A@%=zJGv4Z~Ibfb8tlG?@eK^X#$^*?*k9Kpe{ zgJKX-OJO!%XW~kJ9uDs0Ks_WeZ1eXFSF_X&BvMD+C_I+LCp!6+e=$U#07eGEYxd7~ zx!*m_!XzZnDud+lzNLkG=*Yn1k3C5FON^Zx>4)soV@l>Hoa9X^7cUkvA2T~OZgwsW z5FZ|16kz<*kad4;6JWv6r&ns`swFB9B`VLTDUCLMDJR#tiiupR!cG$DF%l1>|DiT) za(ZuB_TOWhxC!mK5hbqNQ@U_Ewc6<)$1nw}#zS6Eom*0C%8XgmN2TJMP6!k`pve7a z#E}&gkm&jzc6^x6>NAm%CGu`$HiET>yiM5^^@Ylthj9t~_t5)~?(2s$=E7yyDR2w+ zeC1vSXdsf?lOW%!i0c=xP}6|-=kD&V=c__cy5L&IWc`i9nyh~@_&tS`*EO4=*B2gb zyrs&t$AQ(QG=E|Q8ISSJvU#Eo;Zv81wj|e9tNGU9p<1K%GpJq=6LT5LnhU-(zb>k0 z-dJg!&z_n3Jd_)~sSOUA9}9pq*HM1P^#S~U`~9R&>Z#TtZ(FK1rMLy2Ttu>8?kXnZF6Pr_2Ft} zA?~-eI1Z^Ie!9F{Tn@9RJ3I*Rxu<^~$dE=zN`z@PTuTdn26=s9jIAfs_B)&hc;S#@ z^Gd+hgPXV6Nk7NT&f0P~^Ew2#0SZs4noNNq)Pl?*&|Rzg6D$!K=#PC^FC%FbA1ft_OsA=Ew1t^=c0;`~ z7C+7yD~E#%?N2MOKHfyc_6kR)$GAGS$;hLV!e?n^`&#+|27&!?f8%BiKe`q)Pr=Q> zd-cs|ibGv*pQ+)xkvrF!tlM9%Zk$v z^bW-S*~t&_jim=Bj9)-RN=3p@$Hm@MCZ!ghT3^*wpEnH8GxY5EqwApd=g1Owz34<9 z6c^8^FXcM1)RGG(l0SYRms{H`0Tz>syKFs({C;5fahuv7N-BizF)Q*2muF5NSn06# z0BL2km*PDoI9LJ315Z>wrQ*6pp#(<(6S^NSkZdfM4S-RVX4@!+(4Sj{+E2QaWTAEI z^%?OUN{S3qu_}^{ZI)R>u|~s4`8Q<6apLdtHLW@CI7i$H71Q$}Ur z$OguLf6|$Yp%O-`QMA3?=AUvE5^{Z`{k7r$q#}vEf?$*%;Ux^Zo-l17f02q$seV~w9my#F6;lN>WfZbdGFtUTtmxOH-=cMSSmxl=qz^{# za@<(TUqScN6bsBHU!qoAOg-I7f8#+IlNh=m{`9W-YA$bncj9cIWV+6JUSOiVUo{I# zb)-6t(tG&_JAvLyF+>be*WzL|p+l^(sVQrz3ImHc{pKiRp5%?Y!$nU`4&Asy zZs$^X~W=!A{M+W;8FItJ5n5L|$Irl)1a&;=;~JO8OT(C%3+VeA|49 zx>`+UeF3|>c_lk#gH8V#?c=a_YVAIOb7=H+lS9e1g_ozr(W0i;RcuIHb;Sftk^H5t zA1jz3R&Nlmm!iORB=i}o*cPK$sO_53$>p+Zrs>07pW~k8Z0+*q=oV_}*XUNy;|<&b zzX-lr*R3()K}34Qm#?BMt~i>qjcgVG4Os6Y7J^ypabtiN?WoggwzJOkitonpL1>#ePYM37>_ zp=Ezl7nTmxBr@Ykw6p97@%0$dc1y8LG3l z={hq!tf(;fj1pb>LwOG6W+p)dU|1lgjo7#EKit4jGuT&)n5!S;MasJ zdh>@JI30w1ag9QJ0lB-eURKZTKPqmXs5EN#-Mjed(tmf;mUnOEV5sOlN)o4}G#RZs zruvV(2Ix%8}8|FhF zDTvq@Y2+9o1PyUP*!BT%vLyOJ1=c!Kb+8Cd^98*=`ZUe1&#+{?@2=*D*VJ8QSu5O) zH??jvo?)dI*ykmw_0=3-@7-B*fj!Cc3Qlbog5!u>v^l+{folS8L(k5IwW(Z@xRaeY z#~qIy@RH6C1cdU$rJ}o{`EE!f-1*7q*4}K>-T46)c`2aisw>rBuXDW+V1x`FOa}dA z%#S~TV&a$9H}#muB;j#BpIqHREP%6Hm{Ve68H9E2()vzAjeCtHL5-s*L;vol?Y#+O zS20wt7`rOF!|&KvRI4Lh#xz4nn?-CA09izWrcLHf)jQR;7#~OAH=$;ysye=8Z2rpP z`uFJ$x4~uUFV*wHSc~cLrrQQbO-t1BoEB0F4zG)vSc{XX@Y&f}1HGzbsJrqzGM41& z%ODw8t(MofNz%g5Y33Wcqqk2xN-5nZ(XR;5%*;U@P;mv|L? zV&q#Q7+!iTZ=m;;auTTdybz?c&9y(gShaQ=(8E>l&#zu*HBFBAQpssF`N_uQ$`*%b zm~W}piPOCDmlV9x^^FaevlcnlBU)YE783Q}Mf|;RoQ$vUK>HtP+4@1J@Ee!*^v-$x zEX!-K=?5&f9`^VDjEm9LTlrDObdi#|K{sxb0UEg8nIIi3&}z%Hzns6y7Hv&ocz+5p zIw>?EH2$rE`BaknOjmu-z($Hvm2 z%qA}Hp8S?LoAbDmVMqO8s(+wgR|r&-3mk#CU*(bH3Vfr}P1m=W7J%q9CL1I84L>!FH>JE``;}Lw za+si5_jDcm8YT{1YlIEwyeLFaBd?@PMfwkjQQ0KY9E8p#Q-W z|0J>dm`QC`_kz(#2|9?6K4NEF_)u=1wX@|>v}(9?XKsuezsK|;z-ky3$Siif@CSHi zg%u(~(}#%H&z;l!?L{o7!y24ibLGVQq_iRS{3E3DlHuzvf4bbha_khFs@&7Kcqfv3W}B+58rR1M$wopsMoy0nW}i#sC>s0_ ze3>;oOb+A5$%i(f+{TQKZeGaTBpypsW%(Azz8By+AMB0y>r>HdOT`rD}lO7eX zOwqt7iMtx%N}av3h~Ci2e%Nk1hHNK^HGF86lJI4U(_Hg8X+7_&w=o3v7Ez*~%ML7_ zzC~4f#hX`LYE1LV+;ofFu_{67Rpy4grm+t#bi6N?+yKqW|1+h<-~kAe=O)+`FX#Da z>Duhl{Hqcl^GuIGn{iD46v)?GZpQ&uCb=r5i_E6zQV0x7F}T?Lgnh+Y(hS;2J(~v6 zm3}qtm^Xq;xrCbHVm>FvcuE;I6J$mTFX}#5Z!5$Cn@WA-HAFm|_!qGC)rABN7DUax z<{EFYTo~~N$R=_V`L|YyVY~wDvLY{QS6*H;;P!(}im+VY2nX_&*=`2CPf1zHpnG|c zo^xy6Px`Z?zIsbZRwZ@5g0z8(F0`oe%vvA?3vZot7zszRez1l>IfKPa#;+3wsZro4 z_F{69GV*TV@9um!QxoMdDB$G_QxPaa6m8)zl~&|LL!)%~8ZQd;bSeb>@(5Fe0!oOR z(F4wse^y`|fUV@ea$+X*g-Xx&rAdL<$k$G})(@rrSZqT-rV7HWuyj-qCR5%>OWBlH7G(Zg`8fvPKlavse04c=7$@*vPJOk|nNG2@Pj~nSk zcLaxE+LtoCOed+Lk$TpkibM&of_?g!gOiNe8A5V99T}t+Tc%(qIw=uyleN`w&Y(pA@US$qeagg`tl#+*$BH2RFxJ1(QS*8@w8NOk$jF=7JZ?e-AB5 z#v0T(8{;8ba7WX`@nNX=07Gw2S*(L>3RIpk&GVZ6WRr-OVXA>p$eO3ePsDKZE2n~V zpPxa!sOHJli4!G-7G=q2@>3jaHVUb*qjwNcCx%s)^sahAUqs3d{YfHbU{4uKuUcn* zaN&N2{$)U)P(cV>Rzz@~6eP8D1em07@dwbEO=pj0)F8h6jI}#8JxGXqC+JQ0bOnY- zWX0!&%I2xk({7&cGZ>98-fe>9VcJ#C9&EigFk$WF1F!u@C6JM_FS-m=s-7hU7iJ7* zyrp3ZU`t7i2)plnj4cvPJVUb4(3uAm55Nn5jb1XKA|jyzg{eEnR^f#un2p&>%4bZe zalzL9Qq0I&);`qVG0a5NuXQ?eY!_0f$P)T2!$YKD%t1)QiN-)LtY@VXbJV1T!oxGT zeQ4}a4o>`Ns6_K6LV3C5vl!R7zGCgI>G-S1oj+@AkPyPfCfd8SQ94SkwI3UPr?zl0 zf^|+d!zf+|dIoDj)PezClF3SGONyhri+Ky6CJ5;dXnr37@udZB?W^$_iI8BaZk&z) zM`R$dHrENxtaXu45y0`Q%Fh%)5mZ5yveJsBiy57Khg!Jyh@n7*A=rYgL!ks!l$8Oa z?7a?*NSIWA615wO0^lq2M2LTf%2MXmSH3NtrZ36J*>;!hQE;-N)6g#jn^KJ5TNfij zK!KNshP91?y-LjzflW5#uDh!SYMi6?&VK8(YSE3?WvJ!Dyr-g+$;Dd>A|5mnu9?}{ zo1ZVsrt9{qs~MP&3wS*)kN3;Oh|=ypiLQ=_-a6h~hDWpbXFMH7*RA@4N>G>Iy1Kdo z24a~M8$4I|zycVGdw=KtC3}%*A_!!T&`w84ERpHWO&dagm>JmYA51UJU}bljh?~T2 zM?}xzM(ZjaNqxGA=E^2(wm491V`K9A@9BhxIdsN#}lKbPf9RL;e5b5Yz%#Ub*xjh zREtR)seRtPoCK%|E2UIl5lVYgDtIjGZA}I^Q1@9W$pn zCqo@ebO8#F3>LjOWs)p@J~1R1$4&o zl4jF(rJ50`7ZMT|>T7LS*z>#$^(R0%_yd%rY z%3*17!|{3RUnQ;W@Hx3wPI1qA`IoG{{C|hl4sM!%Pw}6@{&z|L?$3WX)ceW2cKnMW z@A>C;DWltepSqRzb_xF1a_fPQI>P+FjRXFi94v9~;mV%fnU*sPZzdxFQ8SeL5&R8M zMl%Tevp&;hzab;|_h0)vf*uF#4_4+cf!r*o78n3skfJY-K zbu$@`-FQcN(bDK#z{<$%`w(r45MN5y0NxAcyX@yrAp^T9DED^c;sM`okoF6P*M2km z=bVV65xlCl{3HO*AV`<%@$@*#zF@@XfJ@{DoqW#w%yro?+}?gV;>EquKa?=2!-EO5 zgBFE!Q(6qer-$~*?0E&qMDY{c-I}z3ZY#zmcv{G5=~wYKyHRe0`TBzaJk8dNmHnvQ zT`OltCjoXR|L;bCFrg5gQxCEGM8q55?Q6b&MQYjVv?B^KWbo!pNY7J@VERM8J%z5y z!g$5J0VhY^H!hnNvidUfo9s+lJ}obP|C~IcPzQ{{$nS_Y*)P}jYfSN~b&|o_EtIuZ z)3$57y!#h;)3y{8Bqj%|jc4*j;9|Z8cehx&RfXODxEj@G7+_dfS$(G6;$*nCQpCBN z?v)y=Dre|ppepaYIk)H4=yo>Omr_@2F}=8pCF1j7lLP1c5gAM!_CoNa!2^d4cCHaU zLixzBo7U*Co5biaGGl>jKt$UND~~)hYN)K(W$xHY`!TrY$wpr)127@sU15IbBXs3? zu5MJ}bli5gum~st^nhFKR=biyCw&bS0+#j|%H_&PsD{&BZkyAYc?8a)pUnyt^4Mvb z`R8U={XiEXXa_UIR=MRJPB$QF75v9T}c1g`xxewlx3y|Mf^Iu@!!q*@Bw=rcD zI?6~{-P&(W6T4CA`ZHMHy;HSyS?1pJ^n=lyQZ*|E4&Zg}C$m{%+EVdtNxBMWJD)s& zqex$W+1T4JJxMo!3BEqPN_Pf^a$EwGe(LLV$z>h_uf2!N!dXutu8dTm;GSF~@$6EL4E<$br#2L{5-tfNVtE&g2xCDRXInjP2&1DgV0`aqp#hW%n}t`)QqYn1BVp@5 z)U5Gd`E-qDoan+`Uesq-(QHsfZ&*$o2a7^Gog%m${tm|Xx$ZX6y>a?27uD7Cl@t>- zMpy^oHU06<6Vj8KzF#kl`RqkxfS0>B)M==YIkw(5PRhQ$1$7=??|^JE{OQi87C<`3 zNFJd{M89JxO6>&OmCJek!z@e~OVljz*UO~N%u>_zabgr0x1PD)nvfXOmv#Kt$O;Gm zEK>#Bv1knywnl8qMqN=sVKpC@7)mnI;;Jr7(X7^rkJjjBx=^VEO+wi`)? z>OG^nm~pl7h9*JZ$#}dr9PP#fF>M!glAtO&-jI(FN>^8jhClN?dq6D98W$%jc$5)D z9%3vja13GbvUX`;jpG5#Pt`+ z6Z&xnD6uSn!sAYeuYBzugXYcQt6xlQXAI>Pj!B}rA_lWC&8Is+t>pZoELcsJo{UZX zgAe*1!?e>(gMD4o)y6F;8n|c_$R2!)9;%uF0^TyKobOrFzkU(fT!qi+McX8Zu?yJFRvk&$Tl(_-*2wa6j&v} ziEh3&>=d2>HM`YXoI^}DBpVBb(nK!gytp9Q9|YA<9fEgUP6|4N=yDc>eo#yrwW5wQ z{HAz?A^6W3cp(ZtLqWUWM%w2+?~cYwxQSq7?uU54p8!55AqT)uBJnqjh5lOaJR#f! zKX@t(cW87JZinZ3`mHJPyNi)Y@ABV(c@~FhHlF^3^?X2l>)mXNoApgsL{9r+d=ODJ z6qA=FvBgXWhsG3D38c6~bwxQE*~Y>Bm1Mx8R8yqL8+bKCpODK>!zTSwkMiu1aSm4j zmv*nUy=Qx<4kJBhoftFpZH)=Pk4f%%h+Y(S^_l(1e6!C9N)mYShCI`|DxgoJ+6$F#!HrZ2C?!I<_htV=J4nxho_%6reipJ@8 zZq_6JoeFX-*idk=L1+x3`zim%eu9bfAn*pBl*f5u(gp7FvhRaic1>!_wPD70px{^F z*;6mE*05XMz5w?$KlXUZojm3&@cU51CLD7;+vO!%0yUTDp^(d+`$1`Wmk?dgyPRc# zi`B`|k@#jg(WtEv8DuMb;5=hHul3KiT%r02Gk)QJFr54!iH4Raz(}#X<|G_{1U`83q|0@anmmPb^;s4DJ|AU?W{KG>D`+vFP{}{jh@%!B6VPJoA zTHr(}`lai&N zXP6Hsg>{wlJithVS|#vX`~+8^csE-YaL~;_wP)Zx_qg}4{RjC*+R{Ld=y?|$ZxBBtd7%O%8*D!}~< zC#Kx!P-y^46N{L7mhf;So-{$WNu<_Rtar+kRgsC&L4K0(bqMQ>OAHnsQKFhW53iv- z9PxWVE-L2TXVH8kSmnPg5u|Mv1+d{%&jG3yR70wnh0jZAw2i*vxVxI0j-&Ra9-X9j zv=U`;LSH@|Yc%SY2pUL{S7a6{xa%qDzqe>WpK8F}oiJX*e5D0byz_;OjDob4p}ne4 zD|=Zs$%-USYZ)gpmon|X$pP%xzblwU1|jk6Hj6J3@`fX6l^_iL82VTgSG*%2YUnGk zWQ{59w(5pouH&M1jA766p+PrjK33g-N? zYZ@;~<}{2?49ete0wjO1e@BLPI{1YAN#!)q?L4QMYgUU5dozrSY>0{8WR>T6l zo!lL^63Q3qVQKnN4U(vb9P40lDO=0U8v4r#m@7-|_I;8x`QY~SGm8|r%ex=r?$MJRw z*^)KMkdKd(63Blp>7NpBfEU(c_0xsln;9v@>8h0`Zx=XrN%HTPOF3uxx1^i7JCbB` zaptPYc$3e)-~nr~=n|h6gh#Tz8UyttK*%5=Ke5X&cuu@+y^$qE zhb0o;Km>y|+es@Siwi@Pnu%WbN*>GjL$%^Bx!4-|DP6f$$n z*^L>|5&Z|gXS+=lBS$_pxL`S3s{A|bsMg%yydA^ofwvFv=u2KJW@rgEYc2KF^sD6p zC@(8%41`;9W-7(>B0Dv$h7reNLsZbbS>ffJCjKShcjgTepa&m6MUS%9-=b?Q10c@f zTT$OVR`|9G(!VlUjt_@Hs3Ei=;`t$xrBSX`;U<%fS5)8@;@=>zn<#3KNlV9`0_JD1 z_!}!&abT0?4phcne(t=(`-?mtq)Hi3Xwu$p&zJh`lbOc_jyXM#B_ya6EJK6s3 zOY2-qR|qyACB6Fw>GzevMgp{n!CWQ!!WZ!sLEYRj9qOu`8$tU^9KC0!Xv4ISE>IKL zmHA`o3-0#&Ydnx2%^BesnUbC52)P$gE+5;R`yz1dqS@wcjv1Fr7pO=F@Vmh=qBqf7 zc(nMkI@GVX0jbJK%wxT2nggZX(HvcmZ`^@u)PxF6lzfItJ^qFi4;-bV_@YR-npLV z@FOgS%dc<4z;YYd`6@p#F4UTSoiPO7e)}04P(*oftX`W@k&`(nd}5P)TB>hQT2qY> z{}?*$)xapX&atyS2Ji>}mv2&sJ&*g!`&eSMDIeo$p597_ryz^J_leWKEUW***D(sL zqQ%cZK5!|)MB*DOk2oB|_gEq;G(^_owE{d1Dv}p!D3cg?upR94Q>(?G@8sFfAAe=d z_?A(z^0u43N3t+JV9X1nxB-`>r*$&h>|i8^X1LGc8!~jQBa#4O;de5s&{8{aPTqV? zijq*y_fBM`$L&cr+(j}JYyP0uh`tK=D!uV?2e82kT+7v0mOm}gE$lC?Pr=roF^fyE z=XB4}sY!;W$w@&{pAj50dMY(9Vd1hrxGe@US<=2IEp`|AL=&*C^{n^!2CTfPQ_iT9V zOiC1^<~8Jo#kkR54gM-_tye~BfatHAeWb*5h?R~2vuyauqni*lADnxZ>GYg8=XKSTm-8Tvu%y>vl~reBO$^?E#B zOwRp-c@Ln;B7eMKSO{kUkhhO97sB^EgrP}N7_v??01$(b23ggx$t0PSuz|9(I~)v% z0uup$08^v{FDzlQ?MjbwN7D2^S^fL9b&rKSUoazMd46tZyI!p>Mcvy8q8(k|n7ozF zj*n4ttN<%D)w1ShZ$2(CZfT_RhxrZvo%d>!A?x6N#P?XO{C54~?6iN@4S-dL2R_aQ zgZ__j?JJxb=S$*%zx?VwQf2uX$d3%4+wm7t{(}Pl`-xLnPKKgw@ck|auI~A%2R!=l z!LA&r`JDmJ(bbz%I>`La%yZq0{W8PnI48tH*a3idyFMz5p`?8NgrQg7-fdjZmGFV4 z{7WcGdY|ZCNqYU2i{UEKPPNWv94`*_y!&$_{lhJ0BL1P%@R+m#Il}vZ@BU>NVe#}V zc4t5EPZj5z^4cCstBx-G89Iv>EgpkJaXIMJSte(i$MA z0vd)@yz!70z#2u~bjZ~Lg~y!hn#Z;VP-5Nef;ZnOULDP~Tmkt7)e<>Gyw-61taBw? zO0^jD^R?Mv#A_3fxvwUI1$bfWC`h<+KQRnsv=*Rs_GfdCG2Q$}P$s4P?^qR}ReI~KZr}|P{8O1M z6o*uy2K|*AUBosgs1WzBz0ZqO%cO291ikNWn}%n`#4J3oH&lpFqv>A(sY%7g3Z5@W zf1TVVeU#2id9S=CyyP(#EOqx3p29rY;02->kaJ%CAFkdyD$4bHAD$Vyq*Fqq8$}uf zK|~3W?k?%>8bm}vLApb_L6EKyrMr>t?rz>2&pE&K`M%4wT>Jqu&vV~9uYK*kQ5im- zRZ5l6&9t(-v2HwRy-;|18_X&FKag=I$sD*q#!M3UkHWGMD}GluF&j(WP~C6`&Gtln zB_@V@pX4Ov6g2}vbtT{mse*o6XL-F{>Qa7%^a$xt>PSBI`o?>05n}Tg3~46cHQy+q z@(fT(a~?lWtn}4j&tTKfZg#pvKCTZTR8mBdAxy-tU~Pm zR4!h8N$gy&tBG#EA9>cynk>?cr#xG)(#A=PKzA$9b7UEjhPOPKlWCFI^7J{rSbI-7 zJNFx;m1`sh^sQcP5&Xj`@%6WeZ^gxJxYQz7&WC)YCFr%3|Dy^-bEJ>h)EffWfkXkW z6uJqiN>{B1>4WUjA9{CRbJsL>K`rKRu~pM#lZ*ra;2=NY+Uvw=iXP1j2pa{7&(->9 zadC0!nsWu=4+l(kR=axFYeti}|2w%2ou&2|H-#}kPXJWLDhTZ_gaE#*)amJel>%qlqTA~(l#cmwiig&Y2 z0H4VlF!uh>%S39yg@sGND+Ht;wD$4Y#fCB1>Q$!$gnjz-X-{{7x6iTXxmKr;YX?oh z@Wc%TW;cfl_DeXw^%XKovDRU6y5YcpSm?ZXM3xny!Ta!2K!&o{eJ{(JfY-Es-3M?7 z)v*fwCWk|SKlU&Gtz-VIGb;WiB z7Wa7hE~IdzM_9=ZxV(E;OXVfD)3r_j1~`2>bp?o?08<(qoKdKP1Tb{XdS4u|1WQzB zH!cpZm*>ua`k&a1b3uj|vu^0$LdoCU{%Z%@zxArQfws=4h+q7lW=ZZ$EqsakwA1C0NZLFs zLB8h=l@8x`p1icb`fUM5)&DiOS|!h=tEG($VAgXX>e8n#9UdTq0gR`WA3tRc$XQ{; zp6?$947Mdh4o^tz?7}}W{dXeYCb(c3j-LwEX~O60Y$c3kTfR#e%YcH@#X)|!1&G1( zqQ}k%3}$8)wmD#cGz69@A2vf`siSddwHveG*8w~F}&EtI(ccSg8Sy=>WIWmr2 zQ##e%%17xmUiVKTJ7855#uqj((*&00euH-I;+%czc$MW1Dt@1sFZyp^t0=j=F`2jK zi3O#;zvqQq?cOHEFg7PWK%!9nYdj<)vr z#RAqM)sF|vwQt$cx$W%sPe||us-=7Q+(7G19wR~zYSH*j@HVCMFHX-*8z~OY3R(2^ z$4U6(9yV&4PFwsz(pZL<RM z_>aFAAwh9}pQ`p4Hdl5TI1^-wM7k^R>HuFHhHqCb7@Xn$iJiRh2YS)dN0C10%UABZ z2$Ta^lW0iO8l~&e$B25_n(;yL56TC3*S>!;+76b8@d0#qmxP*9my$qxV~v{kU{Uz( z-2hF1PKDLb_E($yaJh%yf$jWFgmvu@ounfYXCR1=54l?AHm;*PYJCO&lWMhRiaV@( zQoFu^*8*j{+w&>KPkwr<%J>4{mV6iaUjL*MX$*Mr3`}Y81I!~7s5x;m}D+zFOlDEx?chY(z&n!rAbC-#4&ohq`{bCF^ zAi8YB{v)k|qPK&;!DRN>c$+A*(tVJO^dGUDnb}Z>_t^LVkP1LVu`3wAT%^y&R6^~feB+ak;$qhp=y|3$9TR&Mu>72|h&O73rM4fYfn+ZM{R8g&{uvH$Z;ZX_ z>ITzxvC_YSdyT$F>BN5(oJCv;lCWP3odD)Nh_&S{Hl#N#gt!*V2vtnW(@CnOQ{vTS7i&O6y~0WF*skx z^8#|U#nHdeY%#FLXTdfp&8yOF_AE!kK~fDt^55EF*m%o-nbvP zl4zzHx+=DD(05+;P4Ld&r!AT5ACJ0v#DG{(Qr&($&>w5%>8e0}@mNvk;bIvoSnh*_ z&v!&8xx9*UE4_$CE-qe6g^*o()x1>Sz(Az(mKB(ga8iT0l}IwYaIvmokCbS2ckjRo zW4ya?^#h=iU1bKkAcOC=X8+;z;`I%bYPyNgZmGQWd%tlxp?e|59(rF3)!IW*R3Vmi z!_0K$m(2sBWwXWWh879}pWNo&HLixd+*$y^vO8>cCL;80HJ6~B9sV>-#I&|1NZ;|f zk_!OSpY-_Oy(=4Rs&bF~))n_`!8co3_m>Ud`nZTPI50ee3d^|zm7e!Fr`W2;rta4f zEyl9TR^taC^cUIpot9`pqQhDWA79$$c#PpU{RHz4mYl zDu~Zf+_~iw)b0DHSi$HGDBl!u{(P;GGa;EKq;J@r>hsI3$IsiMo)i|(Zragv>!1Mt zPh@BJ1%79w?_v+obfS>D{xz!1BWdEGyCx-9@bxo}r%ijM`UaaXG508yQ%gUp61@DR z7R}dybLFio+EEUGkv&wgZVo#z4Kjn zZcfe{`T>yCBf*@mdfI(TWg4GgoDdyl)uHvdq(@Gn!ds;8R(Ev2(KRF+cM{PR-Ev(A zOgJ6fBYO=GH%M{4<~yRC^Bn=R7#0@904fzr=8RjqbC`8kt+_ibaO7WKu_E5gZfwXt z{4B1qbpJZW!o+BD_zL}mtpypGi?u``0HMRqo&P<$iiLpEAZk;2A?U4x|wV|4u2D^1VV-goJ<#1&(6Uz@vmW4Mq7 z*o|DiEU*%w1+uFWHt*%~lbU!lJ)9Pi?PTj+_{gjr#Bfg$&ahtLBsX$c`3}$ExJKi! z05drBd7DjP!DUW<_Rt^RswzJOUvc%3hU8)c%KGfeGR?uh-JpBp3!W{dp{g z&l?ypxSN3u;pLmw|5_tyDfcfR@mET!A-|-uzEzg$w=2yStMFP=MkHw0F6&0EsLc!D zITrwc#?IVimp8%C&Ws$kSW&6aKZ=A6<>U}H6zMvTw#eRpl`78Sf@S}FSSwC&W3=CW zw)c^I2Aky~00pdb=xb~!Hy^mE6g*IAH z5ge)DMVjW=upVxRMxdFqYnPq1XRbV)E`7{&^@_Xaw`XOZ!k2~oI`w$Gx%7pMw?8xw z>lM>t6*&IQ)bAuRQUV?hsbsW?iK61-6wRLWPoBmis^Hh7crVgMwJe_NjJ5ZKFmYv+ z$xO}A$j-VMZQ#+S3wmj0NFSP@@CKeiUN6S0)O3?C5@b|Wj~KQKR(T?O0wiL|ZPA~w zhDE(qP<%AUx z^Jri_9J&oZp5hBllt4lV9yng0a~CSC>Fd+V$xmkgI{lysSBzg6H0GYU_#nLS>ZL&J zQWV!9kK4Qn+Az}Runcv$>Z+}Y(dN9a=EYR73l=v8E08tKmiYXH-qLnndtU&iu;gjC zh@$_mB(&hYtzZa$V3&SMa1axF%k#!7Zu<#gUG|E!QJljrtD66|k-+|z$6;Wm1<_ny z>nKN&LimeRsnR7F`;^^Q$@uX~MP#7&-)cW+8RlWVqlYl^{>f1i`4 zhO&H2+SS(Ab9j-PpaW-P?fZEFlr@v{Oh{ez)t6%-CSBJm*FQKv$|;2B>x1^(-VVb@49pIu6g#s z4-XWyEZ@b(Wl6YU^D|o67S{gs)I(y90&&T)u1*Cub^qR5k5LgjNp$WcbI=W{9Ok7-Ue>3^OoU;G7%RA#Z+T+3YY*F5R_(ds8M-^9)N-+8V!&muzQfSRl2d| z?;SId^TP_azO##xkd?jnlRKt=ys~}uPXEGUux!x~-%f7s1>(<_o*gjz>mTUZeeDdD zX=md4S90AcSOAfkdzZZuO2f?)drNYKsvax~-)}Ryc{So6;`L0e_Y|+mmsFK6W&NXx z$2roCx&8PP12Phu(N5(%lw2@L@ln7;nPoT6inemvMz2 zTB@idA0FF{HmNrF5aYFAjG_x1_U*9kU9dy`WqtEkv2147y zx?I2@^cr1NovhZ7Cb^#j$+XZus?`EaAr{0h5E09f{SzO7p)lX<)km(ej)@b|Kfa#( ziD3`GkMoua$9kj%W`yOFAMBA;f_G^3U6TBd@qHl=-@T^>S4e)!pOz6;3eg@vfBhQj zJJNpC9xevRFc0{?m}%I0?`9z@fmz5g-{eb^U{&MNG{b;zy_xxXoKSjQXj~N4f zErT;|pxq2m6#>ic2H>H9R&|Y8dU=(5$E9iXSp@_vucliTfrqNUZ(W!Awr95@%D`Nu zx6AoeEoK_dLZEB7D2hf1bQXr&6?^Rh(xltY6mhtzDhD7bNtwP*5n@wC{mrlp$PMF* zZ3;Jy<9Tm2hNq`FKG<_<)lvk`u|F?+KMb>8(6xTiW`66v#y`At5N#!^UK}lhg{dIb zvkRz`hbtUOA$1Bw5ACLF>3A2_C*6XhLSl-}FLz%@!7o&Xf848ssH^bK*+)S5t2kd& zr&Z_I*kCLeFOVMTX=v3@o~@_(y?OE%`TtJ<#GxlRuj?-l9%{Imh8W<)LhQ~r>ZHSJ zW7z$8nlg7LsV-BV`XnUl7fId?r|e6qv(Gz}anThvIX?R|#D80}yna7G7jNBa%=V*E zIaYr7a@FiDQDP64`W!PrrF>Axm@1rGCejaH{8nKl0dStR=WY3v1PaknM`|%8Kq0$bAx|83g&|2=4Ig*G&MBf`U=&wH@DyiJOGZ^E(z^n(hDL;H5t; z7_AT4`ji)F9{0uTy~JpXLpY3($!r+`2w0^V+p|Fo`9fxvM}$t97%oe8u|AM zDME)Q7xE9S7w0|&w=ib@-QRd;&}u(Adhrf!s{(~HnZmH&HU4_C74#5>{Dc!)w2HUJ zW8ODehboIsiWAl$uJ<-2ih$L9>x_j8_Sx;_V;#jzxBcL1zuTX!r(%)K;R;BI^H<8Yn-HOUa5S#+N=NG^zpcvfqm0ZCs>KMT=7j2< z_GUNC-d2|y*MQ}Ez4{v0E5Z-!cQ0wGe6ExC*{#M){Oq5w#w6;8?iG5t-Vu9%=8+=5 zZ}qD_-!xw348s)ok?4lr1TkTsGv?pkZMj{&n|1Tg_ONyU|M-wivG%8WpAaty$JG0m z26SF$7Hj<$@Op1SIHwDC=mLVB$GpB@-6{|aBWkYa4UHZw&2M@@q2SCM2n=6|P6O(v z5oW}m!gq3tEJ{XQ#i8I|7zRy1KU#{5CSBWcH#Vrgg+XSoR!0FrHC#s0bL-vL$r@zc zCI>>47}W}aCXs1%dAQ;#pge7k`r%Qfif%c4-6H4w1N(Pd=Aj^+Q$|*!;~K)mzPsY+_@bt@ z@jHW@oHt=e6}JgIRwUw(yKPMGKa)ZMb9mU3b@Df zRhNDuMAVUaHu#0Dqo!@4sS=8yKBiN%vHgsFG;8~^9NhTq^wGSE@!?4e+XDppN9s9V ztFaJdV7>MWY-Y9ocw}ZSlf;gu8Bv9(Kit~D7ysvcc9t`^8p*L>pDp)<#Zkc&c#f$r z=998=@wS|I^N^ZNLVta(35{{}1ygPS!KPOFshHQMpSVv8*g*A};>-8`zYru64AV33 zu#+d53+#ir?i%Jpa~~+`d}@R6hQouA zEVj`b=RI}n6{1nZRbgn3!LUOWjLQ?2LEWwZC`AIK(V{-TLkt^Ni{Nm=gA~k&$PVb8#p@pwS$*86kxa}^-M5ueXdnT!a-llzXz zJ_Rw~^;I+HWH(9%3xaA??J9&zDHL<(#Ovw(KLesipo(O4uk?xVDexFZi1LaIG4>ees1x7Q=qW2$hSS6zv$}^R6&jb$u zyUC$aK5gqft6BcDHG!BW7{E%A6?49Thv=5>ESD5TZUo5xSOO0FC|>R6=fJz;`!isD z9zN`2iJi4{2yu)`h-zAfk@CMgF2Q|5Q~0e?c#O>Ag{;`kH3$7}1`fmw>%~TIWMPRP zbrOzJFD6UKoJF6b0oLYY)a@#pc^>ZPXngM>A*QL9yxQ{}ZWkhi?s$FByNVzvk7!i8 ztGfCg$Jhv8=%P%_@SXw2VsCO2`XM{3mB2;YcQ6x%q(B@CILA-F2g}1AJUcalejuaoXgJ7c4scSLni|aN0PHl{57^gHM&ttaUSyEDkgT{P9pLWoU-`;51 zgR0mJNcbNT(jAm|WDT3Y?!}x$|GFfje~^k~ZDRD@a1o8)?#Ai-V5IWIG@$y1{;$vz z89aufkcmAq?bNKCxbVdtzLBN#JVBB@5q3u7`vK98Pk{J(pp)lb-<$Twp+#KCtx>&| znTA;}&)xRc(SX&VgcKNw#3u!pf(X5v@BJ&FsvI!wujaA=6G zR_~J7Ap8at3KddB{G*DsZ@)b;5)`6E8W~wY&Wvd2=5q*fRDmF$ zv620_gScN-pVQ}K>^0@E*7*e(2m8F^IikE0>G$uCxYqiE2B#G&{f1IaztIF~5_yl^ z?%Uu)WbpBxwE%SVmRC?0P;%Y3B>%BV)QV8G!;yKZAXJ5B+-VQntBvs{HEAle5^0*B zjDF|=gmWG-)QnD)$S-&b8K9vuYPp3P{(DzxpDkKrKoj0Sv%&zIrsn#@_4~aZe;f{k zaN>=z^pM|P7Z0{yl}!Wd#Ef2}1JewS^G7gcD?$IZu-;`lP4;6~uIJ+7b?;30RsDyz zO%KgJ0!MH+-0H7xw8lVWEm>hqoH~k*dgs32R~mJGr>gji>wCN)VX2D}-xiP5gbz{b zY2&+^NDc;m=^zD*`uxy;fk9J+Fr0VB!PDLZKZwDO=-d+bd!|eaU9MAJ)!2rP!G;W){swGJjH`@BfM!5g_0oIlkLZ<^EX& z?JhpPdq4n#HGNg;(7hFLTF=Q?b)^xi*qrOw^%K3`+{gMT;#z#z$J5#HbtWT+>-wmz zrXfgS_wxAYr&u4|^{eRRhtLRGoU#XWWxG$E38ZNK6QmT(peIkX`$hb?>Pb)7kiig` zCA*(^PViMt52>8t-p4NFu27Qn0<)&;9SSMvP1=>d1RQ_v)chm+?2iJ&Wu^~ocO1-b zUUTgjrQz$yga)*=mM4?Doc~a)K_2kAoZ7&!N$l3acC%4TY|`WT-g+-x>aI}P;ws@+ zJ&m0brkk0IYyDkcm$M?Sd&Sd*Cex&7{5H48n>1lmqArTnj|k|xa{6Q;%y=!GR2qIz zUp{KRv65M4mZ4M6wd3(wgL=ERR6@x#e8fs;+^;JRG6{GzX`%l*6#x7K8O%nc%NDQh z#S6H3Z&Eb*(QVZ88&VDRGe7A6TcCD$KZ_~mRlsD*=7UT(YxDvM<-+C z4BIbwiVRE9-ReiIY{8GERj%uo=n6dF<$7(_G^%WtFTIFlXPn|`7zVp>UrG6sn{LaO z_-R#bA^m>v>^eBCkn(y-+W9o(SFvXHYY$$w7~66Gj3qUWM2ih(OoszZI~~v{Ctt@# zTHIHpIiL>j(wdRTj4!GhxAs^(Bu;bR{AVeR4T z4iDh;^zzbDwA$@Pc~Tg_1%j~Ot16sQv=j>7zvGNIcs}X^Yo`L`TiT`<1f?pFF*iVh zq#9}UvlZxG{<@t4^%iw_U{vtyiPX@POF4^r>8A0+px-Og(qe!1g^Ao|=ZC<8^MjRD zv69P!eqn9jaE;Rz+UK@YC!1l?y}k{%WCVWSSF;G-JP4MWPxsQ44`6~r7LSkCmD#jU zeG?l*<{F|Mg610Ro>Oa6AFzqf^{f$s{bM(j0H$g!x27X3u%QgV`Hnui_qbjZv7L8Y zrQ=!QZ*mbeTG#C&qw6eFgie>1?smSpHaroxTBm2EQC^=U=j2MIc_f(L3Jb^x`5pP= zK^6BSX8p+xF8nyFb+hHU%L}y2v}9=8(xic$81SMtY$vWPJc*>KL)xqJu#h* z$}MVh=};U>G}f4{&vt;%=zsw$VX_p@Y2 zSo`q$3b)5^v=`>aq!Wa&+0)-`$EkqPHh{Js^YzP}&8Q7Yp&aPbJ)8au2%au5d7KJV>tW~a!3f<)|X`9VgOO{e5n|SMd2_im-8>od%FXMa-9KX*zGtF0E@E>EATh3m8FO>}MHi_;rXm19M1!L#1-gRd$&9{ufd-_|mCkrQBYFG2t@ znQj2X+9Vk1dj-=w$mR*nHzm{y3JmCdPK(0)M&u7wA09a*zWH_Wp>93C?l%<_x%AV^ zx266G3?*|9?)e+fQ{A)vcuBFikJ=Wu4Snixb8s`;=UsdFu~gsVw4~ENtl4o^ZJl#w z*0%;tBUtlv`5TV5U$|F^3i^zqz&(fbKJhh-2Z(=&YU@K=jEpA*Dw1hZOxz&<1L{Sw z-d@hWE>22rE_RHeSnKE{&_8v_$iB!y4O(Q^u*1IdITg$bWEKJmZUexNOONmSYlj^ zv%C-qik`D0h>#FATpXdg5A5NimT{xvti&>&$`cnBdDms7-w0XI0dI2PgQC%h)u~%` zgf#F#cGT}OUHGD=gHA`I3Uhu%H8qF0qP9DXdRh?7D12Od4|KwNb~-yDeer%V|6_Ka z0}*lhnhY9qArkamtUPn8n)yx9eUiil`|yo=cGT&!i>hCEVzY?c!b)CkwZ^Kt zYKMv^kuus>M8@S&SBzI!`nB_QQSZzw@(6797p34~sZI5Va~*xI)QW^-eQqq#XV)cu zx~DDAI{bOlr;e9t=`Z&tXH|3?H>AGp>7pr6(|}pZ9%9%_yr#gEPKgN)czRbiE3D@(3_Oj}Kj{5l>^jv-;;8_{ZimhZ@J=O98iAe6_1!JCk{o6gS z@0~~N%1j<;?Cp74tl5~jA&`m4EykTns|#vf;S`kwibtpwTpyhmZZh!1hGUf`@h@P#pPwu`EFsA#zlEuO)c-< zqrBZRwIU|CJTK1JQ}$bmhz*iN^WWZWGgz=9S;NG<^07lOd!ut|T!^`?g-TO|JXN zJq4xK49XhcQ{p+6Rx=>6AG!sh>cs3*SuPeo)F6l z%n}k(Dhm?QDqr024cfdG!iXT{Re0t}o%=!J_{$yu+PligGR-f37}( zIQ~}5YnPm;ZQx|HiRQIv&W4Jp>gv#Km$Kc+?XdQ$PoX$!_)rA+w^JsoBTn$@f%sBp zlFc8?%0h#V7!FyrO7IYUjuGsiocj2%e=(B81fuv3t7?miPK%b8 z3v-kDxVg0iyLqa~Vdz~h<63*l>7KLk(F8~JE}0Y3j+t8Mo*OeGUn~XQuM5>9`5<2Y zTYXl4CbMi76t$h~9+AlOc!r_S_Q$T{ZM#v+k5e1`33{4YU4|-S$fkHz9HS@`=V0%jER;1S}Ps8x}K)2MDlwbQG{fqa# zNW@kCX*(;a&yU!f>QapKBP{#v&OQq}Pv7K%s<`g2KfZPgR(T7)vYW1(T>D5;xifk) zQ}9$&rk0GYPqs7Z@Mq;>ZOk*HXT$Ux-la+smiWsmT$8L_Ny;@#gfeW|>W*|tx&fos zVp0qik>~kOW+V`8MT)lFOi^5%S2sF$T^Rn)j&{c_hX=l3)7d3$}m54>oo%Ja$KQpTF7P^sRD zO(E-`#Vy4gBS{Z?PH3YQMeEWr|9reotOtcsyFyP+<2w6JtgWo1_sS)QICY#BQQ}^9 z73emu<5}GQWZDy~@Jil>(sT5uOp0O)uG2D;ezIPf`|^sNx}R^-P5<7a?lG3Vc(wQX zhmzUbEoL?aJ(-8sGoy4SH6}%cx93zN4)@4J*B?%rI02L1$&H4 z^gao%0M99ztQGNG!puqDc>fDnxvTrjOphR%SI`xD@7#>+Rd$V3-KkT&Qu}GWlOTQd zo6E`2pjNY^t9Z8)^Dvm_L7NON_bZFbz`EUTl@_-H^ieIQ40cy3<96riU0->JVY!?rRWsx)cReoi=9zvQ`FMIk zHxEJ_peqg!QiSt7ytVRb5u>|iJjH51O_YoOpa8{bCEsTW)G4ukQ_n&%w%A%-M~i@f z-`0o6hlQV-nQa@(v_|#CdBmYc=`EsYjL&vqaobP`-j6A*O~HF>T#TEjnZWX-g8RoC z^F@?#vV{n&ndytb{0Om&dz4hKp;)qVg(2w{*S&k;PY!29Ua~ zxEdEq24l51|Z*bTA~ry02`{iZwM#w@LiJjQeN-w)34DlN00@zM?})y#Wwd8j@%@m_|C}Y`a}tgfvc$*p@0}S8h%2<7i@qQPJ=SV{ zaP+3@Rkhh=UXox}jEw+Ucw7}W@o>+)*U?M>z4`nk)I`Alzzg2GK4oJ37n!T~E(2LH8dI@9cx7hK!!(7!({l;2^K_PE=~rQWp7EmrK$Y`yJj zd`n_z;jEACI+L`z-EBB!+;cZVrq&)S*Cf6A^Y*s7K8`=$&d0H0wu1dvBjIdU1Tw=! zyf1so=FElqe{Vt6?qgGG%+X%<2c;o1HiEgYkO$xe(D&w$t4r7Fv*-3pJL07S z@VzUJ2Os+gy+&WWRyk7Mv-pNc15tiUg2GH(FUFrr@|QYVqe4cJ2K&3F8bYb2@lGT@ z)opuMgD9I$U9tC5?7*1Nsm&fV8#ijbw+&sxv77ax4lZNiY)e1r5%*70ZjTZ}?w|4& zPkVfzIi0i{n`x~Oer?6zhCMC9}#j4;=3PXPfpLb7K_4KKJww5_UErgY=T64+4zds>sf!j zFJK#u)hutKTSC*>l+rJ$)gbHX7}u0W+KBG-bE`%Ha?0q(293!feg-B7N#`^rQ&&X+ zRtWgHaVA=|xrZK~-02+dm?l$cK27y9;mB|GtE4`5WG!w;wWa{q6P8C}(NB0Kn@iNdv)xG_10}+x8?#O$=<0Q(a@9I6uGyn*$(@@K zhLf$Lp5)Va1V=KiLQkNhl*2_QG&sKHtslwD36(H&Zplbi(0q27OgAINh9E4vw9lKzhkpRrD3y9_mkqK{QVQY9l;q1 z)!c`wIWKbaW(JycwQz&c=hIf*B zF2#Or=HnWVx-GTnY~|t0Ch@ntXfr=b))9FHDuw44R8Lpp?J!0E9x7rQ2Z${U8;bgC z?!@@wsz)AvY4+ai#A|gvI`lHL;`jH~N~&4?hiD`dcDs}#fyl(&{*j>X&0ozSf2 z6D%jpMSYt7-*YO0fCJS4X7~X%HD>Nru&LD6u*g~@>R23I-S2w())EyvPP~GDZ>fW^5zq zy_GAWN91t2x=wjHe>>*P+x`CHbzEY}tVP3gmihnhs_qWX2TCHeH`0ryuKK-ys#^m{ zqHa^Ug+86rT+d}9|F+eH=U#L4{nJ-&sz*^Y_G|wt$G>h3Tz8@rZs|tFEM+f<9$jbr zuD0VValCpDY5OIF{pJ=+U$;~Rg6_%VKMjigwf!}Eu z_`nPh=}ioJ_;vZO9DDWJjSp2D+AXfm>WK_^XMABZh`N>l9z_dz90O)OJZ)pR$f#%% zJI0xx+|>O1&7w295T0*PfJ2zbTP3A_`oD1yHsU$H0ZE7V@k)SXj&_sawC9iSi`HF5 zR{V8BJ5QBDy!nzLPS46UakSEHYTjt8(ig?N)!zPI$1bfdXXohJu!4W7N`8eul8+u{ zwDbw*TP-=2;$(DGrs~IcnQL^94|W)Nd6O?Nzah=L36QltcUNerI`DI~yTW}(@B;%# zH?SRKx3F%>)=7u3jO(2Yy>*|rnb$@H?2r$-aQTVTf>GSh3OI3CB(D>0oeA4|Gj$tj z9i`M78e|Q`YQFTDdL7&QEsOPz-VXij4NXH9QALy%-UUNO3;W@rt`X=A$ zt#HouSJD3a&x{FCUs(2h`W>-LzIsKmE@u-dM;)^2a6%v?;1N9{l09i5!c3ZR1(z97 zxO-}SEmraPhp)kZe~owd6KKk;cskkn!L&s+B$$LEAvF(WuB$5BOyQ8u zq3`B3qkR4AYVL006&OS*$AbpFN5C{E41s_0gvaOg=IK5zcel0esGk}RWB?R=}aqRhbhTYDahDp``JbR4Dvq8dPvVY1eRJHn{Gl5 z?}_Z7oLy$*fFbg;mj(eV#V(swgT(K0!Ep(k6U zkRhzSgLh>pg5ADeBe8=fP4u-A$HWpwU|XaP>uAQ$eAcM!?A&MQ++=mI?wc*8R~A|f z$Qoe~x0(8kn$4L8PEhHo^88gVRgfkLfr${ntW8Pr$z4@$^$3(1Gi?>oY3XF?jQN{o!&i=XPFjgKk=6v$x&}H%T+{95uGXY*BA3oQ%9)HT8?o8CfW=7% zO>cwy{^U?j-#u?9dI5=Eb)9FMP1=zgY?uJpIHGAFDh3_30a2d(UUnN9i>l&3J1I9>c@j zp+GGp;XQs5XTIU^y=O$<>Y`STvO8-pW8)#yBRQOJ>=>S?_}lf`pym~ zb8+A^=w0;f{&u=4gv3qEW3b1U`B|c5NTAv+ao!nu0-AH1#4U&*AfI>G`>mmwjRt1X zoo2**0HMzsom-vxQ`#PR{@PeARv+6!!_0q_Lbtmq9|l)_)Swl7904EwngSoXcsOrA2{wRe*0GE z>3D>`cRYGe=E}V`TqMR+uip81a`*L{g_R;>~$X_1IW*Tbpqi9*(^wF%7j9CP>SAR`S+G6 zfbG;>#hL2gt`FkZ&vnqBh`Edw9-uUj0yT(JMSo(k9dZNhLt0tGpSz!2#jL1SvDcHx zkN@4`dj$Kzczv^FXT8_1|L7yc07fU$ETsn!rOh$B*Qpi}jH^nFd0eV;GCcv0fgrrZ z+B;UecP$8Fg}ak!!dpx5VAEjQOG;qi3GpI1PJZNNtEH#w_*#CY5Y=<}(*KnwN_>U4 zhfH^#t`gH*dku*+C}P?sCDLGetzI6(Ep<&l<+|4PdQ@J!(oNKRYk~Nun#3S00-H55 zT-SU3pu)T_B?Pvp932Q2;GjgmVZ8GQVUI#n*H-*)Zt5;iws$HvA5?+If!AP_1}|F+ zt!>nF{duld!*Dpx-ruPy+C`ODV_~C2bG0>H!ge$J7@y70%Y!%9J}D+7Ev}OuUhevNUz~F`?o-v> z^LASz!p0Pb%QGYDPMtSzzkys83FRy&wbpKGtFe40g`t{Gk6xV-Hg?98( z`*vH8>A`xz!$Xf6@btnCx>D-vyM9nQy$mFWAO?dO0)qOk*!d?J4q z@!_3-TT4K*Q#Xr}mMsHa2XK+c#i2LW+I=fAMN=yQXn(yo0_5|T9G_HrTu`_Q^sCFN zEyFpXW^DA)Bb<5qr4g6~Ul`PoQYj#d8t_js1x3KN93<9Cq$%@+P$Y8R0(;z-+9Uub zO-c-6H+BZAf^`wQp2r)zq4%pg3rL@(f*f-RR+tkOdyFdyM`J^jSA*8B68%$a+wt-1 zJ;T$k*y$=;mlBOX{6pg%k<)#tPK37lwZpo4KZ_9TSMfY(clinA^LxnQ0_(5=!Q9lK z2S8FRv0yo?P9^6~E3s-^D|Oz19Cv}Ja>RlDT3P4j?{*9j*5g{a}N1{qF zm^faH=JrbLDp%T*<$CU!KL0N1WF0Q$+{Jr*7!FuckR(dC zu*}f$2WOGk)2%nf$h#lUpa{lZI=j5=B8%BYN~Frpo~QTxJdhacTr;iaTT|Adi09EDPe z26E}|+-#Natn+ZAlEFke>9eE07+;#wXLkQY15fh?Ua-nplB=(kMKPt_WFV!u{O}v3 zuUO}Kyrn9#e}7k?!+3<@EH-> zQFnUzcV!fZclKQj4~G~N6zT(CgASx_pCeBNj6Vv;287tKvvM57iT!QI5InfdyBL zi(pOv+MAL84iXzmtq$wXJna*!E79BZJekLaKC#3!Ch_1ze~qUfoK{HH*x3to)2)8e zPw{6L2o z1BU$o0jflFgjie2Fh)%Q?Q!=rt)A(Ry4Ou@Gv5@T=a z?6oS(;!*u9pCB)|^@L2#bq2biQXyv)91S=`cZ#$^9E-xk12$=$_oN303bq_Ns){1s zJF1D^=VsU7j|)jQ^U5P5&Sw3a!vcAcmWIo3^Wceq_o;&=Wfn37{ct$K`qF!Huu8&? z6Wrd#Z!Qrz^cdYqnIIh=4i}EX`Q*Ksrib(l&mQmZC^ta$h zHwJ&mOhlQFDna$&NWX@dw>g6`f?rmZkq&TLcoGZa>_RYj*Oq!YY>C3ZwwXux5-wDe z1DPm&B#KBl6trp;i|pxTPwB$2U-uqy);yNDT#oOcuW^1#{1@K&2Zg!&{XZDo>&za7 ziOgEzswM6DSfCJ*V;VtD5G^$*`*rFu^kgq&5l1b%Fy4B7V}bm&h1V*i%!sie3H!2* zDLX1pM@W|$5m}^@3#sAUY)>|sH!)ppK^~v@+2)$SHA^S&g4B{Hfg2VX`(}dcNxW%9 zF%wGx#-JTgm~nTgS|V5v_H;G)B8$CVu*7)=#GLCW$DNuu631Eco%H;@9NVAXt(Xrs zll_Hd?<5XboeP+V+f5np;}bRssUU*XsdjH^6O(X%u8`W_nvDgPp6^iqNdVcWzH=8ZmY10IlL9&4{AM|a#am`D$ATvT)kn3vP{E~(*)@TKh{aZ*MEy>g>K zj1}z*HNc&8G{&73$nGqj34gs~WQB&0!Tsq}SULG@XCd=5#pu1=d1p0eTUPRvJXc$Z zwz~)!?LN%rBYipddPIJUV9OM;`j9FXBg5)2`WQ|&cpqr5a*LSqywEe3|7;AvRgm4E zpa?Lt+ah-#UedJ%qD|i(f7={fUjzd#Z&b!(`{5!=^{UIv!G=fIANGEpkkzcE z(d?yRJUKYaGnibw4*CyEk~K?JVx-t-8|O1-y!~U^o7;H+OImR=#TaaUtb>g9=p!q3 z?d3xP$3O1KkUMDYkk~+~Gh`rwJibtN+hi#?b>96h^N1^jc`vPD9NqBsZj%mDJAfspWBR}DoRdgP7Hx?#gZ7c|?bxQjttm4bRLRNX+quW--;DJA zMJ@@;j|L|Q26q-H5$@CW^EJ@+E9T>^!DsN^9_*#9LApUn>F(OJNQZPc(%o>@Mt$DrJ-=_9 z?~HNIKaSzv?E79Z*NkgkbFQ~1H?N~63T%-*cV-Ygb#kD9`?e!MA0_S(v%1r>Eg*Jv z9wCjCj%NWqi6+i1kpW~4*P>}*7Az~##{gf*1GvV9rl&|sv5Qxj_q-_=xTDGFkP3^| zX&L_IgN=Ck3vNaN#%G5eG`)(qFtGI~a_QlNALu@Rtgs~zeW&Z2`#J`~(ej>9RHKwYA-XjPPUCu?iwIo4?sW2cE9>8q?|;-KPi>_FP3`+JWwh zE9JO=Xta{WEBtd?ui#McG)qsU9QsY zQ%h$r16;2!99`9)kp=$T{qawrZ$r~QdPzUHFYrjokV~>fIldGmx|z~nW>`@ zSjCw4k0Unk^FR^eiE)xYX~-UjB`js~8?H zhn_bt%cxu+WBu8xXkN?b`)n~eCe0K{tDsF<2fwA>AV%dJAszY3C+ACQ05kZ=7I;h> zqHoh-ZXY9)bE4Q2p{ki>riNyTiV|RTtVMPLdt^jJj|k|z-6bd(!?%%2B5lYM+xCj zf+OY&@hYT(H-1|J=L_q{UA;Sl8B0H9lLX6O#qEnAT#n!P6C&hz=H4)}iIkU6Uz6-= zN>(Ekp^^{0jaY$a2M>zg^=KZ)TKgE4*m!kd7B@KK`=v!IT2&Zudr~-8m-yZ+kXl z`^QKGW|P4Lk$V1Gx$CzfL3G#gDr;;*T#LC-j8XnNqQCzJQtbL1fLKJUaODKz2185$ zOoNyI&i_Dyze8p=TPJV9oA1Ja4V1hqSCI}AVQX)6h}A#`f8#E$2i6%GLK6wmkl!n{ z#hs1y#PB)b3;|~RzrVgpx-#MI5)9Xa75Q-FJt8`iDYGd{TzWR`aJmF^D#ZRdB0C0w z>0q$#XkVF`t&z+ukS(p>!-gNX_6c?l^<7<^m;Z!W;Gg56B8CN-n1s0RAk-CDspGhS z>idXK5dT3$zhogukP5Kg*Hb*E#Jv6he|@v8Xb*tumIncM3{L%MI{LHK#~Qe(UcHJA zSD=(+I=U696htQ>rZQ-0gO!%vT*#rns-nz8#b6y!dSB= z&<#;N*v;#7V{0WOY?HlDr?1R7ZfPE_+>%;9?Ccdbaz6tFh3MN;`IvwlNANsY4!UK} zm2K|icUMU-AGfhVlxQH7F|Wc>BgLtg=Dn^5SwR5PvZMc6$@{CY*X3bvA`Om*oD9A0 zmLOZ@P3TQ;Ab=66FTJ1ZKLz5aE8;HbtecYN1LNLmEQY@?R zIXpIj^Cw0UDPp%;K~J0Hi$j~Ltc90R$ValC`i^J%TL~o5M%(DG0R%!s@g$!3E`O8C zoffQuFef7VLb?}H`I0|=J$aXvmSCu?HYV`>rexJy4rDu=y3*j&Efp2g>-c)3?y30n_x8syRT>L>S`AYxAb3XsPJlwY?XbScd zoxq>Ux{sHnYsS)uh6Z$o`wk7fYF(9($~zrbq0Vb~+u^HUS}_k>rOdc<$4?;97`b~K zN)fXc!*DuGRt*oyiq_DFy!c@Vw>tC=$ka@*&Rjwt_2jr@@JO+Wy}WZLvAh4U+hadd zw#){h+Yo97C}jY=8$_EMui)9v07(}rk6OS7fxy%@{Zmvm*J&s6&BYKg1$T$0d=3jv%fRhigv_LyFZXQsPP2cS<;*HQCF+mxs9a=V4lBACt1ZI*9qu#2J8yG|7uyFzBzIJz9u)kB3odtSx}0 z5lknEw84J9vBG=r&|sc``aHI9Y&!N$?&>9!=#1NMI}KrP!5+vwKr*PKU5BcSbA|-( z9A=MpFxbFecG}c;tKqP&eF&23q*aUUIu~FEIf-Ri!uYN#8H_P+$h<|?tX+AjS8%Kq z5qm~Lp$cg6C5ql79{SQq#^gpq;La9X$3m2Z*?A2DxTn<}!9c+ra-!nphC4*srJP-wrLe!;<{{Mv?1B_3{~We=HPQe zYY?VBw)I_Vx~Ja{R`W7F2m{IXAjlgM=MO;>O$~O3v;~(z?w@ksy6gu|!f*X<@DQG! zNchU^g0>&Vh0on`-qZMz{qCn3 zc8@>D^x96gos%o%hQU6iBDc|W(ew$Uzb2L|{8o92k8gR=@85`+e^;|YZR$4_|oTdiE#UGdJ&l}NMZBYL{^zTUE1z4=Ej7Y3nSLq@T|MSEhFi}T$r|n(o z&*`evhCJWCe$P_v`=YOE>tgk?*1*;3u4=X$<@>&V5k`KCSv)3F!DK4b-A+C;rneUA zJ?$%5$qwveJ=&`832Z{a0aVJF3>0viZC`O>VF1C$W^(jb7a3n?PT!XbA>j)659C}x zN_CU#&%D6mu$G|$6hJ)c!1w3gj&jXQH|G#`R~{o^q=*dWqeWWUA8FCZ?SOo$)IhQu*!`^u*_l)HTVYeNP@&;k$ z=q&h~>tzOGf!%!zffM1+5PB7APkGF;A`bkYJ#}ZJfp;3os*+uc$)72;WGoUjqE`722ilj*l-xWh0CJiv!2L{(6P`7HGK4drpVnkeS>5j7FvDn%@WaqiTQP8B9NxhDSotbnF1#B(I4#TVq zv~Q3F!f{bXCTU+<6Jl6~7DeKsN`WLrWBfyOO9^EIiPYO*#iJkSA|x(JXncQnF?CGh(c+jXE;;>hyJuei==Qh-+Vup;7@?ip`yZ(@Ty_VPLf>2zKWURH zI$Y=9Kitspeu8{`ngb0fS>vGs?Tz%zMz(r7m+sKcQ`erMD<#Gohsb+}CN;>w*Kmgf z`?JBdHz(W{MsUvan36V}57&96$&Z&LoZ4g~8jnCK2gx=t0HEQz3dP2Nr@n8-H2?E8D%L$osH4vr7Dc&a`D$C3PY|q`_ zlYYkq?b@P(L_w5!eQcIkZ&YNj;jQN3PR~3CS%b{iPgc#e*J&zqjnoc7&J)MY%~NH% z;N)ZdrK7q^Ip@pJ#W{kf%hpFzUO&cKIQAG1Ngtn|9+;?0G5;CVL%4ArU(HG%3?UP; zp47#*+p~CwkYbxB_OYC`#vnMGg_6t)s#HMw-Jy?4v?Fy>f3HH^GxU;lfegc*mslQo z3DxIf%ekugm#(`50}0i2G|vo9-t^I%x*+m>MjV{%Co^AD>Mu{@t@5-?7$0SN2_bc&7^}5!CT%gYsQm7%Un0ZDgY9YHYOP(;(w7 zkg(ID_wEj8LoD#v|LjQBZ|f51hV;^U*o22X-lWo{X0^4jHHe(qR?D^&(H`)-UHzU7ik>PKxKV+LG25 zEssP{E{{t(wp+23O`o0mttFAw6ui@(_pK#~JLEFwx7iuz$YtW$;=gEvk_FFiGh;^6%fpKet|9HlZi=k1EERr zRo!F4i{!?vnab^~TgQvGnpF~O+cfI7&x#D~dqR{goDdVAA_jH|$Q_7x!O}vO&Ut_CTTX(J7#ewRP z+S$p$@bbsVnvct(7ym`(kmbP`k`SVpPeJ=@*OAD4$zY-VL*trEJY?&t?F?aBiGpo; zFD`?&n6pov&N8=XYiVj0pX{}|eDeO`nt4j_2CLH}GbFMbE$hWEG~Xl0{moCLJm#2; zFNc{{$U1}-3atd#V~PK=GY}{Hk1d%mK&!X_cf>|nZ1Oq!jOG`dsV>5q^eW?2s-*Md z&W<2^ym5y-W*1fJE49v)`%<3<9*%KAzxqkLTi66KBE4Mey+NY`7+qCENa>me2Ok1) zuE93MOi=9YQ7SgNn^HcJRtIZ=nliz*$JCc|;~&8;?qcT6W8YAUD3$l^Xz@GQ%~9P(K0kaHqCA>7>Z_wdAy7XHWh9{VaP?$>1*_!{cf{A*1jmoa1L8F_s37 z;9@EJXn%~dQlfgBn9be^SzTety^zo1K|d;O3=+CHr@>7@nrJGy?;=Ebk!FpU6K8=L z!Vg{k-kfMH$HvnQNXA?bfy9E^PoNIFge-n z2(I>iA5A(wLq4=00Dk~^$-)4@^Lv(3ywZ%$7nV6>ZmgQfo_0^gV~&&FNy$U-3i>6R zRx)=R^K)-DXKeuS*2btU29U}W0L_98o~S1iXnJRjfRe5S@mI%#(rE|#Um_U=_|diI z!p{D(mo=67i|Kih)E{#>ri=HZCbognHV0Xp?G%U*W%5{m4^+NVQZ*|bR*1s_#W-1Juj zi#{9C9wlBq`kbV6kMUyWDf1(>>ZyOTG9{dR^f1;`_roEmv9pCVa8r#B%+NKV^*xgS1bVe*`E`0v0 zvxuo}$l1ZMW4No43^rD3yKFQjnja1-8jnzg%co7&Vl3Cb#v;!*phJ|_p z8-6`gc+++7t0S_BX3A|WM=>mEgPrbC{ukVz!-G3x);qfUv{fBUe%fm$J&4J(9%6vs zEh7sZ-1T1IRdQ5O4}H~OM+zKdlBCzfOiX&HgEN{ofTy}l<@G6qpwdyaXw!tH9!2oP zSl8W)g8i*^QQ97rG+{liXnf7{NG&En-E}I?U9a&>VaHco`rIEj(XX{JoO&eN_a5dd z4V78+L5`?}QbpQoIVTk}U_K!Ek4TuTBAM5Ap@|6dO*QBG4RU<^xf2Nv&842(UR8qO zT?@V<*Q3g`BofWq3vnyh?Mc~qBA)!wcaA$tl;m4N<$8O4KeaC_fK^r%&)b%!Q&1Xw zz}4ZIwEAQP0BoHYmOW2iiwnmY3FXu)C}lq~6{Ht_5ucu2^K%9@x+a7wtmO09EC;Yw zl=!;>qtRQ4ys^f0|OrkzhKw_%6DH$xpn zUupvn8xlrKOK)-_->Z2C`9JbrdI&js)YIX+N_IZWw}$fa0J+>bIrcapX)ng-3Dyk= z57x2|4fRq+Xu8-pde=mz>jWKaPO>1Y=KN+HN{9S3l^P00oST}IvlTrr5sQ5e2L~0y zNAJ%yA>o0;(wd6|>IYdT-}G$EQ=J`OE2qZR1lUC7gwCeNz72Sl;vA~Mqrh4Eg$Dl4 zQ?ekMw^*`3VsMpeRV7kEu+q?A$pe9h_@yRHp|0v%riQM~y*$Z6%ogxGiY8b=S=sso z$Pul4I`d%w*_Y9|rYx+*=B|x+EnrvQP^Pv2%q&PtP}PyTSN(Q%OKtieK3p3DS`TLReGuKP%UMe6_Rxary3<=Lgu!{6&*&GJjEep%=VEx`mASgM7-V#W+r6e9K1 zX8Rxz20G5Bi6p9bB%~S}zipyzh+QIXJm_LD8Of3kV@fz!;6OUumHu*9x#NL;QJxh* zdp{gcQ0a3eK<;yN()_Tp#Gum6aDKNgL(>UNYkOXMKS;5h3{b``M)FH#Q~51NJq0{Y z!Hx&?CaWl(6dc!($~AgdAcwS+;bmUk)aCm=r*IzBZL9K=zc#IJixj$jxSu79BAZXu zo_iQe`*raqctG*~$Y`p;ChH?VDD;B%+;|_4={d!7@#EyS8 zasyZ|umIxaf9*sxFR&|o?qqr1P_;M;GeRJM*G6n@9cdH8Z}Za!A?wAZzCAPk;C(Fb zm)0|~XR+AvRZ=an`O~wyi6`m3$cXx%KzE47n1dpLx>zY^Zs_g1Wr-EOVEBJmU^5Oc zc62MjPnB;oZ0L3y@wlzCn?H%#+xl8$_qfBP8pq_!i|>_X_+6wqJ|)IcaR?Q>*30Ag2wx%JxFdaHa6{9_1kxii&9}AE zznpSH@Ryd>>|R;et;U?+Lj)W|ASZk64goBM5cU;Wd&AjMg#fFoEAaiYu&eds@@a<=hpU}(!!ho4-X6av z`O_|!-%o;qs)N0YwK8SteizOB1N#0i6;_+-shrtQ0gbB6l>S+WW>U`ks4tk*$~WEK z=jE0CdiG6c#fh^E?^dq4XGiE~#ifu*21v*b4$K>c&7n%kRw_8nh#+Kc@ zkojh|U|W7DQTfznv364&X%57M>zT{VuRmbfI9uwU{3&CXsPtEV+6y79{%^^Ffb78k zUQ>nO4f)H zZvb}!^llLAwzFih6-a%4yt?L?oP{l_b5sHZ8eIx|C&fH|n)NJd{5|&#a;mlZNN2d9c=s+`KI{4A1o!NAu{P2|L z+?d(;(aoqBFrt4RQl~cRKx@c@OSuFu3vzA#PGSNwRF7%{YM*MpKw|J^5k|4EK&j{o zht`}=;`qG3b!TRo#r5oMlOd%p4OoW1dl2V@vn{~~0yi2qb_>}^t=wr>2ej5Ga;T}$ z!(Jhe9qsjzvxW8^uqdWm73zv?NsHP>MvI!UMrAMDtuYzEdThyR)ZO8Z5Uv(`J43y= zN4K|}y`3D)y1vt%RLv=*cY_Zy zEt)*-Fr>DjGUCpF`d)ih-^G;ks??FPHsn@Zy?YG;M+AF;U{=(ny!S>nN27()Y{nhj zlG8y;MnSRHVgK2xd57+kJo8U*7viVx$aIxcKWh1HHbl__sL^->**i1gF5C||66yyP zGQpBg=f@f8OC6g+eN}gjZ~Hz8%Xi%~OJcx6jlNU0HVb%?iM9YXwgC-hwcNpV+Tn{J zpzdEv*3VW~=5A+oYs{g-pP^P&*&&MMbKlP%d__sMt$8o2ZVO2<(E4TMZO*(oh8LMCD& zVn38bB??i1HZW%EmGe{hd9q=e4j0l?)dpkkbzK)oZ~(OX&F8iv-ty?7yAeZsrI*L^ zJvhQk&c|>barib~%w}RrS(w5VH^Uc9ZJ|>(|C;=T_@-1#Z8W?A(#$JHS zc!|##1NPOeBv@sw^p_NkZ?O=+7MWm~N5@BZyq{RFkDYaa;;dgwxu59_#99r{ch^+~ zp)zs#D#G+X)LXGw+so3+0p4DM$!fBR%l8n3)0Ap!h}RqCH9S|=5vs;skL{)D;F(MX7U z?xE-iqIk3bC8iAl5U(x#h^>JEH?$O|73tmzszwt*`;O_ zd)}PB13h2tz7P+(fUAz~j>^s24E%Pt0Pidh61=TbL-_N z+bCInN`~zD_T(4pNpv^gfdOc&3OxkF0gy^SxKb2oEMIR=1K;f&vrFeI)L|=1{<6KV zWr&^10DRjvFz)Q(aktZx)kbRaM{Y+=wDPX5XNOENsjf&gcUd%^RT~ft-=l6kG zTDb(KN0}+T~#b$YDQy9sD2Ry~VZ zYN6?Rsc{y?J^BsCz#1?+oqp3JkLDCj0OvCY8|nz4tUZrPLhAU*s2KW+Ed&&fUN3~{ zdI05oG(dNIxmkrGpHe*J3<)fB$hb+K%eRi8*I?sjWaWNnS|<#H$!<#)eAhJ^=95wC-wsQ3yLY9}ctYYLAox%5?y(h7@YA}9AF&#}O7pXrAi6!X>agf# z1q1b0Gk=oCh$0o302Zr~P^s1nC9Hynf<5PWvUWU$WU%y61^*Ki>Ef6qaWVJytJS&U zI&-P*D{Oc^o;B`FdnEHig%|*hi%7-LN&M)63jR*T{-K;Aqi?UUsHeJN8>i0|N*4RX zl<=-w1Sp3ICvU6OHAtRTr~9or%30sK+t%G%0}Yp~-Znw`-B{$BqJVV6{yEt)ROT}C zpxk?P$#aQIt;<`M?W%Za+5@~6cnDOrjnuLK`Vp9frJjyQtrBQbV~BMhCkYlqku4-( zo^JeEOCHA`ha5aD9KgN7n5B-VL7*-v~vY%c;t8sXu&zoUao z{&?kx`L||69;Orw00(BG{>Jtx>JL92SNWVf1?Vd4)Cm*^IgbpmBuepB`YE*cMw@cq z?a;iFO9NNdjD0B?x7+!OTkRu;CCr}Ki4*64DA&mKzy0rW4d6<&N*0LC_$E(NEyTRK z70+%IML(B!qL6}Y%c6udkZ|qeUOS=UO74>4?YfiC`#=s{^rhw#dtzRuu+Gol9&roa zY-hp;oxdMX!SsK`wnyfHd_j1b9rgo8gZ_^80yk$JshA&W13plJ(H}mTpVx|lCII*L zrLC5XdoHQ7X~xN}V81fYi+G0p?Z*xnX#mwxr&)CjEsA|`0o-WxZB}M4yH>3_Ep7-T z%)XxEr~ekS+>dW>Hnz#+3|rDqQw@H0%dU+4b~dj=WsnD9H9^A0{J6$_A>Z~X&XJ}e zAhO$P&mUB+=)9T7OM3l-Dl9&XNq%mQ;H##4f+NafPMSE(51x7;ftYovL7P`U+^;?& z*dg-8XsbTsaVWz;A)x95nQ7l;t@db&M#$e!;%{SGcix zR@s-S>8`6MN)?Gfufk5Ve1~a%5hHhse4z#<38^=kQN~7Cy6sHkIG5)tfA<1TrRK}@zm*J7#{Xz;uT0b{Qj+q!t{8Zi#rwWdW$p(StHyEj z|6DPEaE1`d{rW{X3hr&>_63L{hTl%obqMn}j=2U5uKPJ4e(-&Tl>!f?<{z z{a;M5%^Q%bDJWvp*Ua=kLUVnr5j3rTPwJo4?eACooh`zf|1+?EWbPkA*}vIC|NXPS z4R;{XpsKCCaTFd36gFZOB7bLb9Yd2j1%F>Cnew=eb^i!STCULQ;FctX7_h(-A3}JC zKyD9Y%0Nby>>Grj37_iU!wqg1*ZVgWoaA)rFo(6q^YzHgeKvlSsc8Y`B*IGdo?AwIcR+tFZHr<$od`7mE`FmbVfIX*| zYadRvd&Jxbh7$n3B+d{vMOAlfSXkTlfb%9r3Vf`En9_H{_l*N0P~od{6kI+fTO2MMma*oEe_c~t6u zmNBXy6vA@&B-LrSm7s|>rgxGacZV1R=)Gtl)ABL$E{*YAa%x>_ zgI*b+c4uwrJ*F@GsOsGcfyF!)qLpIr7+{&oX@!t$ZU<9hU3%a+#?P)3ysXsQJ4+%> zQw<{(srfaK($3*0M4)Xfci_h_fA%q~^&9eiqk7z#hc6U`g1b4`g^;UIuTO>F9-eyC z#V=3q-a8aO?6!%8SoRBS4ryqjjN&XR9YK}m*Y~alS?o1e#6+T?bet9Anx9Sb%=JEX zyWK$$0E;m}P)lzzq8fq{9UmF-&Wdoru)$4~^0pPQZfB*sv(FcE*K5tvPeMiGf+2>_ zFNa4Lue`pXr1p^%U_=I#CvxL53tR+^yWdq@#(jK@Ut^r#=cJMRT6ciM3a;t!T}}5TdxM7U|6|?SNm2;!f!yM) zq}$5wi$}Fbvsz?EcTl5woLxUrKeM7i2MPY$N(^d*%(QS1#Y&1IIXMtC$kTWhHDZ&~njTO6pS*ANb(p~{ee?o$P9hy0@MyAKlI_plU*DB&p;H$!uCHO(ikglSiW{bgIO;$VjzFkVv@f|SPI zzK{&#y^yD0M?K@{Jaa;6ALf2wN2UxlQ8m@LIN2eHtM7^_?ra?Lx*6Hu!E;EL?UT#D zk?XdFB_&^K+Y!%YaguKF((PUH=420Y<6=%{XMft@7ptL(#W-yJF0B<(BJsFz%cD=X z$=Dt0yfbJ=xwMXUEY~>@kGhJgU~Eh#xOsz zp5~*_1fs*~U2d|fZiZKp&lXRD-r9!RNKwwf#m2TqFg*Z+bfV^c8%vMt#eA?ZxDlW^ zok?5B^&EeE5ufO)C8$=;#l+kcXoBUno3%Kxe ztNr8PLG*~}68-9e3vh>d_}KYcew1N17l`DKH3_&rZcVN^f*Uwmq*VbBqD%)5C^_Gg zjk-MF%l8XTtSNUyUPSQ^)2ersMO(~9kU=9NUq)&b8VhoXF7lgCWaVhyG(?!R2k>X) zH#$ikON9zI?uit$8sU=$8EFC9Lusj-QP?NUbSRD0WgoW3%dVe;EHe)7@$Uk)-&(mp zj!3%_Y+-xo5R_qYPDB99i(@{!!k5Zt{uVu}J-G0jpAW|swRK^yXO#YYH?loT^(#l! z^Uzmc4^8|Qm>w(As}8LQBe^i$w`ITRuGfCw6!h)g9R~w53FRe_iq(wTKkC83#_YN) zVJ`Vp)k3&*A>|@Gdg<=MCVr*u8GV0ubZX7|oX>)vp1-n{;|_(C(+$gEZcgrmes+EO zH0dQ*38SKcg?lQ}JkGTSXY@GrZ>N~1$4^~ce^$SFC#B`iv{6A>SG~yZd7C>(h$}LA2H50pwCiUk}mE2=`e-ty)ZOl=pbNZJg z785fek$F^)=b+dhRLOsXNAVv;z3iN>)13xgM(nS#yWM|bcjp}RT)~7h8TA4hMLK5c zKN|r6;}2av)|`+`q{^&y&3B^N0@Xg+zi;3(>BqVYS{C2c-k$lm|a#=vs=mW8^;3;#QTlC=qaf<~dv zWDq&&Yvc)M3i>e9Faq0yyGpL_n)s%eyiycLn6=!wo_$GKtStHH94Ex(X%oerNw2;{ zB1M%>SgbQ($TD~bcKaBoj5OaV%E?4BYnN)-u^SUA0M&J$e6G-wD0p=mN9o-CwW-Yk zshj@W9orEAc8>$xaR>UE$BwrHC+PFQQs2DrF7?)w(~~J_e|vTAjaMb6TphuI(zL7k z1i_?NJC|O5=E)LeCbRuGU}J5L)rOneQY%b{6J7kiQBf~3+aE1t@6^TdJ*FjV*_gSwN{ z2DTy*w5TVpcURaL;NDaV^})=?e(9%*G#kY0gaimG;CT9z!-FZ&P9?oVBX-VSf#Gm4Qfg0CjB->=g;+<7WnK1d1YSbl_eL-fd7Ogv*L zk|o1Cj!xu?XhuZkE$66x*KY2XnIQY<50xJEr|#mgo0c*e(hXs za9&9X&^9apzYuGzbXddIa^Eu?-Y)$vJ?vWIGi_>I=Pa|>M3t<}{)n$-fW`OSme%kg z>DgNZc3$REsIf+bI0@s0YY^=;*Gs7}0$iFsoRIU2qiF)J*VDVI)i_#JR-b-qRvKS` z)5L8ynkUiWmwSyk&mfVgji6?g8BvhWZ>SbWsjR?rqE{2;{vXS3 z{<%5vHnAyHVMsxO0q0s0jag{A*~_>DPT77cvzNv5rn+87tp+QX@}aUHR88ABgxu=t zdfr(~I?e4&sn*}8p4;QOuO-nV{U*~{b8J-hOYz&rxqzS~)i2BaN6wNFCk_{Gbz{_| zI}<6EjC{o_$-UdhYxMBwH#+^}=@%EiosAU>IbWTUG;wEkeYIo=t<@sLYVQyou;)wE zjL>!&m}p(~qgKdeHr*|hx(`~|-2D(Z`GSd@?Ql!ByRHJFn-v%lHDoh&avV33$E*cd zg~MMlY$_{IH5kGrdKlquF25>~(XiiVw~d?|%gEx8@j2gvo}bnib_yPWMwcTWCUQFqSKMk(Hb1h|2k9SfP6}t$JH4^)ni*oLJ0~8u+^R#in>c{Y z-5~DgM!5|`fnscznw2_L9y-0dOL9z{fR`S-6vkfepas*V8ID)C>@%@p8>TV<%=Uz{ z-A@Fu&w?bt1<2Yv=3C#ac~#vDMQj=@9PT_utG4V55Ws0nkAVh{dG!aY9^G7!Bu z(!W$TWsUmSfl}ApJkRazS!43W8IBgfb1mv|#{CPV0%8uKC+kwCeVgrqI0E~}4yeb? z{;TzZ2j_FLtcv}6g`%1+DQ&??xWgrH@}%{{6W{aQ@MyY}>bbBfF8{)*^KW`G_UF#O4Z{G1G#) zEyrpmF=NyDyz7(ty7rwJ=EE)DI5*v*E#?o1C^YvA(Wasgut_93wmpaQg=$*B-i8b{& z=aEin<01T!5&TzJY=hLOGOP3SbXTGIAlh+%+!I>!FK=F*Ee!OqY(6o$JHy1=GU7Yd zV3u)Tx|q?>z<>o@_w&3J-CEb=s4=-yV5*U*JISR^_iIhHh0Rm<>C+=O;md`O-Ukj# zqG~s?J6An2IWXlD_zq48`Gt;G!hFnxFV;I+8uZr1O_wFcaV6aG(81zi5gI{VCYQus z70B{cyM85ZE$cNjfCyPAZD-TLMbmaa#Y_}eU5Y)ofMXKUP>3|TQ@~Z>=?euueTgZ_ z$!vGU{95mRHE~6*bUF`?YN0+vV$NP8cA0VL6k#h|CvhTD8u&iKkwBj{)`k4?g7c<| zUeR;DZ%*4j{FnRkotiw$yFKGo$B&Sv;yaoqti~zxV~5*n?kElI2-kS3o40)@@7yt* zhu<1)HTvAy^!g{A7&8@o#CU|FJtjdr^`%(T@(}jq*`xHK=p7y3nirCtu4h}044f1| zx+f3YhWj&H0K~6$i?Fff8_srG4|2}5ElXJ=Ik}T!`k=sNGsg|DH(xRKGm_j&Ev`H+ zziy@-=u z1^0wtF~qTrx?X&;i%p%37PtaA$jhVlWi0+S+Yh_mRdgfObw5<|AO$|ay{ui-wt}sAMLt-#)Nbo?bu}!>_44N&-d8;I-zpt!<@FEEqror1srvo# z_45#e`*YUNe{cHVSGeLyy`YOcJzZ42!y8w=8Y=E2$UFJ$9aW22y?0qJIYqOoa0FTX@ngbnNZX)W%V&W-!CH zpT!)@YhV=L^5%ueA+ch?1o~Cd6pr5vhvGQg*DQi zS8kK~rA=PvX)LQIcKzj>savFy+F{?5)Ya-t^e?hfHk6pLk1DJ8o$Lo4PVbx?XDC1^ zdv>*?dKsi%RM3kOlKc-ZegGwznlF-sK~|XiL)fri1{t8v%xaGjhcD<>rsVB(=xX>gQJMgR`AJmRm4W zvknQ<4NedCp5}bthOT%$$^ZV}JN9}!uYPlc7So-;5)+LiWd1ONr&f^Kdpj7n4tsgf za?{Sz{C@m>p7gzlUPvIEBQs_mVonLqMXC6NK5yyEv5|J`@dT#_t0;xr8>0i?+zU!M zW@6PSB>7-I@@au9`1g+`ZRzK)BSIi4s(Sw|6nUP=XQ(-r2iw$mH4_;0yjou1&a!jD zwFspYmIfXzAKdvQF#_&g7W8TF=^BiBC#+3-EZ03|=T$+XW3rpB&*`n`N>5=&Rs}5R>nZM%kV8lTq2ILZgUttFLWPBn9aEcZhQnGo zKG}r*U8LgA>tsf?K^tPnB_rfn z{@Ame?Ts7JmNWX6Gwzln`c_@oOoH@o50w}TC6&f(v86pT*|cZd(LBb{ZOJ1IjU!$@ z>j^>NfNvyhLA2@>-u;vNl+Ji^1WT_7;TS~I|r55 z2NNqY1tpc76f+L>WMum?Xn2*vk~7=O+S@nVB_|gK1;dnZ)`hm)61M#ltmQA!lj7~S zMiYVss`vT~?S#DbFNG9#k1!gi?eG#49tc#&ZFk&O}w&4y} zbHwYn%!3$On~crw3nE ziN2YghN-^U4+wnn1^urM`wY=;)hjFCIF_tmsv70LfrpL}l-inB<`-}t^xjl}f?R;g z&82>~&E`NT&&eN$EWdI4b1q}II~AWVk7y~o698A-Zq zJm;K^RZ>R@Uiqp^BJH7L;>hxQoBZWIL7}!IrJzkLp{nWm!EnNf4IDcr;l~6AJ5$Ze z*y+loayY_br2>(D!mk5_2R(&f_z2_5jVz0g%t|}A#~oKNzWES1JZtHKGC|B3`teg~ zZh{xbVf6|jktf1J{bNy@%^t!HD$`Izk5O9{p-tz|lyfL0-P7#u`{ZJIPIv1rJK|q^ zes3Omf=j*{`m3IXHYefU9-+di?j)#7P&jTTRFRh%IzMDSWZ4MvHEYBq>Xs!Bu zSKOvQA*ly*``2^(KP_G`o1T#pOG#cxCn2Ma;=xEqcZ^Y2&O`VQ6w40;{x z|4oiIVCp)7FRTnqU?9nW3C0c5{51eU7IQQ}03k#YkRW-~)NJA6`rGA`G}{z`#IxHs z(0XtouGb?SLBWBXZJ+9$PwN4D4-*jh=@7}Na|zA?FyOqq_NNG*gX_4BWWvo7x zGI?Tke^()XEUuT^dzbSf;K%(nB{z82iSU)p_I^^g7i>8QeHVtj2l>)BwE1Q3v0?rx zH1QsB;uF29b5@bjm91=9{Vj=@H|3c(#ur@77u+~*P*$1g4hd&CuyW9_4DvU~DF_Mb z1-KxT!(WKPoa*4{&UpPkxPQ0EehVsq69UYUPw# z*e80>wdhbqpdbqUGqeqr){g>004D%{B!eWegCM8fFR*fY6Sym$3h3`1;yFt_kR7F_o8zbT*?fiCSqsM|;|8#r4aACpBLo$q7UL`FzjoGYKLP zDpvb(mbdPXDBu6`gL4=0B*j4v>BJ+dA0U z*TD{D263?cX^$Y}Zcz+jR1PQ3$CC4Q>wU`iPW%;dR#g}iu|^X)XGJ(%rOl6>z9yut z>HuQPkvAaVnQ&e6>Jq!#XD>78Z{dUI zMTQH}!*I(7LdR=&J7IJ=!*q3k^FD#ut@DW#CYmrbJ4rtkLxjGoz1bIqQ~%4qfzqO* z^Pj!|L~CZZ?kZW!^Z20lH=**H_o@s3OWO^qx*oaPfu6`HFdyZ1(6Q(KAsUh|^YbN&uCSX*sm$kST@cXHSP z7Os5;$h>TPbmy-Z@cJe+%P^Pnn(=c!k0A5&*mHCQz#;fNdN_1_lhG+OL!$t~Ff`YJ zuVot^=pS~jA3E>^SW^%C*2C(S5Y~bd7I6_}CKncWkoBcq z9PzGZ4g~^n52Zv<1FqopraRtG^z~Gi>4ko+bT|)f-|+kME)n!Nb{*CVG_W?gg&-RHrM(+K9izIU~Lx}>o`XagRbBe;t^V%mmE>;#=V zCr{?y=55#RW{zrL*N@+|;BR?YTt$q7f#>lMvi>{_YFZwf(@AO9Ojia2BdJf6MU*o% zDS@>@q1;jn?JqIPmkdi(kVL%4;Hy*rGH%!}kZa-hIlbfW>+v<3C-62LZ|~Rpw5aRt zM#R~24Z+J~ZA0wa2ZD?bxc3fAx>!G(SjXL?ugVQ&AC+5?y|U-!-oAh3sn86*fBIVW zwRx2ud>7CUncafk#m#uG=zhyDJESmP-g9jWrt6P11sJeAYjgcV42XdiI*ZOfF$_`< z%+nupGHy-_F#?`7f2yRXXA5EH_4y#c9{%08Wyrvck7$J>0VK=yY0HWDi(0zU%E`hU zp|$t7pTc@gLgliPYo0J`)lv*Kn{gC>PJ?zCTvD-f%zh}`% z2Yt8wT01j7Cb*}QS@R*|Pd0!*m|GWttCM$i+Is~nC-xX2zPN=R?FM!ECd5H@-xx&a zySMS+U<__@FPw_xbR861dx`sQ^aQ>u)5E0r^|*8!|0v?;P2qClvKH^HcD+p~;LG{v z85G;Yg)$@yK!A8v8}w}yaR1Zc)&4H2R`_|Lr*-pq|8m6ILb- zqzrO24>S{5a9<8kN4&;sb)A8Y(QSFw5dzpWk!irE>_eT$mm2EE84E;>$kGqsFilIB zoIPed#5Shw9V@)U$fV}lr8?PN*38nGK&=H(s~-{66Du!h8dk0{U}dFLq9-k8oN2yS zx(xf7e$)cU^lu_Y*c+eEe;kL4QRuAG7~4!8j(j^wFU%LXGz40WOAHs2d^wX}5R7M5 z+0t52-?;4-HKFjcekG)8`V9Ae`{(5WZ&Xk)AF2iKma`Ygs>fT|`xHqTp2`O+pvrem>K?b09lQmgKU)pSez6<7CD4Lh&wZ3_#p z_}^~%#uBACb2Kj8p22dK#n+J9lQ17xzx5hICnnvuRRx-tK_|s?w&V70mh z_jm>l^nVaO%OUR-@yPd-3)CMF4IZ{ALtpW;-+^TJVh`;8d?sPr5CmS$)6YvLxfDeTpax%S>Z zLHzSEh*nlr17_`cgerNv774SX7^*WPhU9n)u;bMa{^IfW#0#F1C34?j@e#p-JH`%j zX%TkXH}%*z$rdG9yTGAKIae&xc|Alq`i@c&qQ^J~g(+(c(q(zWaffeuiDCG94X4W~ zR$7yvd-Zc7a|}=-4zICoa3yGP9-ByL+uK~S52Jr*C+6Bi! z!4LvKM1p96osgq5ZaCe=Hb!Lvn>UW9}R!CYsvzY{G2dZ+v$NDu;9n{N)cZ`MvP68^*~ z+c3$3B?WBRAK`mw`OdO=Ac>*^^j}ceCod_32%amFau`RxUzk2nca~tJ(4JjD-M4QQ zf_3>R7bM&dEM`c5`@pO9H}#h2t-x&SqZ;ur)7S!YJTK#r{-|9)X`^C3my+{Dtu$W5 zx;E6+>Nj1zw)$w_1=;MVv$xveYGFsu$%8gmOk8UitYyk=H(`$76*IWCCVIg4w-7wRV*&l!G15HvU>ITNr<(3-g)LUoX-?xlR!IYWLJk zvbo*EZ81eI9UY{3lqX$5RCguMbR=Vv(oBJ9`57qbI9z0!g7*IQJa-EEyo)wwk@i+b+W2Xt%uLJ=3x1ji(x?KJ+9>1}(!<_(M?<94i zF>TL6HtUj7!z+2?yV`Bo-X8R;4t%1vQ6}eB&>iCdcU(X)%E+vcKa4sNAI-;~r5p5b z;)NxycBB3$&zhx^!FzsZ(mrY5pS010H6QV>&%Kr5nYz(FUOGd8Jz%8Zn_Q27!XTc1 zpaNViU&NGVe?2_@9d*kq4>2>3G6|iVX$7PBxiGRxcH*5BF7(QM~QewQjYq7mS{sy~t;_1PpOBH2qX#g9xPTyN2c!CL&Ee??V8+xre&{d_ zL6Yk*P4VO)VFxD&GihM|KAR!5K6+^7I9K)cD&D~OT+T%T`x42k7pTiFv6fz@L3bsj zd3CFoEBKL;m1gDY)Lp|TuAjk;gI(sv=`&8`(~#8wG*fGYZ&ww=++eo9qAZ5fLmURm*3_sBCT<0mRw-Yf0`w4 z0OW-IQ4eGYOb|K%F*PkPtrCQwA@s=$2-5WRE&_O}Zx-JGOVKw=NFIP+Pdx{8PdO$8 z{56^U3#{%w4t8E1S3@`NZH?k#gPBX+&kfn9C z6_3}jt*{YqKFH_9OhNLue_nL30VxX15;RcVBA=g=^o{gqgOlrQIak|SjsJE75d+0> z1P`u%PEdJQ_>Qv|z|4B`kA8-15T7jKbd?_m?K+AU#CqIwT>4smR3{Ony?fb!wlHks3T z9#R+jcYmy~UU&{4BugH{7f=oFr8!549q+dD^We#NqCMGJm3}VVZ1taWw^>tGaptxX_BFP11UY=~%Jfo;Q(9{rxc zeRx4I;o!l5#1SxBnFH(V=)sO&%P?Xcb%R$@RAP`4Cb`Tq$u5%+rde#bVwsNkF(t;( zSP-wdI$fbypNuEDTBpK3S4d!`iqPVgeoA0-$xXaQwrpU%YjECYQ2Cl&yr#w%%&^}t zb{&W{3EDCoP_)eAExsBZD`e_2lfuPcx%1Sti!Hf!Ah~sX>cws@r-g^tbb%ehmC?{N z%wQkw|1Mh7qHj#gsqU=}IH$JGKb`7@Zu z4@vFz)6n)Sf&bl4)?w6OBvGj54g_CdWJuZxMnpR?G!&>#zgU2!QwlI2$VYFrP0Jn_ zY47Kgrt%&IPgu3@f0!A%o1DOvehBwOnX?*5J<~mD?WZA8IR8LAAPFhEG|H!mA@* zEk3fJ+Bc-LDNOxWk#)hFG+zi|hSjcfWkNhwb1{P6NY)L~rL!Ttb0^Rs+LYI#il3<& zT@eTKfrr1DeWfNtiLi$L2O;oP)jC3~4fCxIG=vJClA`f+M-oa7A#vAN_Ekrtu8Yc_ z6|#2R(sklI=*D!^yl;FLljRWebM^Lfg)i#h?$t`yXBewJKAM;asi>h!>CjtVovX1^ z$WYM32<;HElVWUg(a=5L*c8Qyq)5}!;(2+7)Td{{C!m!mk@-yHgzbORReRY1O*UPn z`E7{=->T64w2Ib4nlPHZRrsFvWh7uI<DkEfol(}ROv8ZvYa7b1rKX`TWM&UqnRlc)NZJvC76Cyvo`vR9?pqD4 z8}fnn(CS9NU@P=js`jM2mdAuz4N;lt<{U(QFM3y^)l?zVr|&aNIInxJ7&Dm?Wo}2* z#GJ)+n~VN4eLhrOWOV-fcjI@JxTEMvo?AF;=DpF|ar_L)lIXfNSQnKoD*9eSXH=>w zoFy>W(ynbzJBJd*^l4!tG^}t;GSD7ZNKS}<2B94q=t!<3f*g8lVG@G^P#NT$jg#rW zxAo_;l;aMc@Q1C~({i^m@nzZjHHcKpa$HBLk_{5^9rM}GFwoJeX5LjAE7yl3sjm&w zC>zFCtCp0mg;s?8^PdhicCl6d1%f)rPqO_1bVkcyj8$Sd%;NRdk=Qym**iMkb7%eu4;L#1r{>~Wk*uekn5N?&Jb|s?cKNN(Kk%m{ zL@xF)4uH?!_-w8&024MDpocv>YOCv|%c}-e!+8yTczkJ&D;O0^(v=5x%t5!8+WiaB zFbftlWE;f|&+QQ}yR|>v8<6^jMrj{dl3_aWQuz4t7irL=)KELzkS^88W!k1XW1GrL zW*5Tcs9>{=Qu}55z~?1L6cY|>a3@xV1SNtWSftLePp~foIoSmR)1eixCpNfH1^0H< zAj~qe!uEY#CZ*u*Cm8EiXs_38qPdB-?cowPh^on8o2eGF@F08KAHaT~R{?nd z?HMNjXM4J}cMg)RV#4#>X*B<(X)o921fC3tS(xeX)}jebT@qUTmY7CJQ>k#CN(D{rGCS)vb4avHKjEe$gjwC7wlNo1I99mW$ktwY zYEvZjfKglAyH@%XcD9&!RFIP5hs=LUq3Fc`3(MvIyt)M7n(<#hSNnm2OoI6yZvUOG=r2=1sCd13IQIa!_=hT-0>XW|&F)hY^cj<5OH+aqxv2W@mF)tf##- zWT&cyh}O6b=5Y%gt9B?&^}zmd)KyKz58G~G22~4gj7XFlg~l#xAFv z*yx{v3OGk-;Vm7oI#*zjoct6n~%m-E^{SVmfmvr;crXKhlyIsvSr@ zKH=Ml&HgrqVLFG^cn;Elhd_a|O%Z1YKRA>e=R<3tBL%gh9LeVE!m4zOcwT#n>Zb{J z%N7u+mW{>$>810HHf~IDb(-b+O;??Djd~e%GW>0Nc+$zhBPng;DO}haL^Oc)k_=uw zNna&d()4alR+eBbO!NU9k3~sBCDRI(X`bW8U0Q9F)X0vsQLM8!9wtnq1(m!N2H=@N zVBF!|jK23q4Ff9y1GT$<38G`|o+!!evj+q*DD=P53mO;!UP9k@Wh@8n{lxOqC9EMW6h1{>+4OaYb(0~X-khQGA%<3fN3y9SsgK|Ci`P3;)cfarjzdAtFXDNIbIZZg+Qd*@{MsF$+PY?Mu`+oK(x z2#|!uVGc-qzy|C|Z33A9(3W1Ch< z%a>!Jy5~Zoi(wdLqYL&i`h~rDnsis=bBdCM##1sj7%VF=Abnz&(#b>S1>!t#rRUs=*rG#YVGOD&@q=%4p-AKmQsx7&ZS$H zQmB?v#8%U)ekkE-s-kIXqUqAY*wXGjsx(ng;PFi0^U!8;Ph@cq$r7^563WUF=ExFu z%M$)6L6TJtf0TKRHmF4WLA#;-3cHVK@(rF&opD!Nc%csO6)NNzvI^+(Gs>{J?vYmc z@44vk`9?mN9H(K)`?TK!^um3;VZ9&Go-W8`3}rOsE}Md`gBU*|E77VVs!hVVvzk?r zWC^7+xwG&##qs?+jyI@^Tk3T;7pjhytkYvhgu2$N=@!>T=%j<1V?S((KD*t(x|o0i zlZYZ9o?qdaj%(n5WOamg-{g3CVdViu1zhK;=mR{%^mi4acB*O4vBo<1P1r|2bgYD? zInzpwwT#KCA7Z}h-wdO)b#~%#oxWF6kx?yo$@xgx8J2gob%ASZ^;rXj-+w_R?9O3U zkZxr(V|hgqtZ6ML^dPLBHoP5FBNI?BBPWCz%{Vzm#{qwHOd#Ya8vc@if!S&~cw7hx z%5R_YkD2O4QM|v`6r;j6cs!S+EQTuRqkvn?`|*GU0&KT7hYW2v6pJbhSWC9*ITbSZPC#*G(P`xc+&fR ztgesnui_@HO_#+49gfB!KOO|7e?>oZ-2L*(*y_?qX*EtK(BN}weVf)9fu1zftvoc? z2@_5Qql`YZpF@$y!C<4t#VPKo!BpKvSAFLC!}WG;MNYIx%D5w@M7o*<&LK&7(r&2^ zkFDzUv+%eIY!hZtPkzuD6pIAmgJ;hkWvu&l+Z zcO%z%s-w=Iw-0=;sWWyY2BbevoA-!LGsEBfZ;q!iX)ZM z8PlTFQPn6>aUvlu8_a85#??R-R~1E$>1=A0Ta`$OSv*dAut975yO7=0)LJT}e(IK; z?Qdq+1baJ9A^ZJA+0?{6mSmus%9g(Fj=nCt!ZwQn1AbW|G7i3IC6tva`1B>Xl5(eo z?OWeihTA+gF_M?gy8qKkeM2)GGJbsVXCP^7h!huR`?SbwgdMI-6w>fkFT@~jl` zgjjFiDc#!zQ&CGr1B_3Sh9`nQ92iVL8$_*O-8+TdI$PX*M(D@(cYai98X?lSNnU!T z>JO{!^qd0QKSaxYx)q}2PL;2%Zisf6cg*rk*9#fWz{cH4R4M79GV#CbO#-aR>uhx~RIhXfWD3qDA1)>L+m8KO zF=tynX5%=NZq8Oa7@NIV0d=d4VZdxC#tf|%&TL|7R83!@)geb0TZJo%4rOi+I=zUp zu(EWCW8yC5HPz|9t$YGPEP{72Nk829#o(v4xQfN*XGcd_-A zpq(!?^88q;Tv4Y_l5sjycbTIg(5pQvgTqOq&FpY`Knk4~MEtX2=!^w?PrAYor#RzWc3Q zNjj4qjpn#pt6qoPaxrQeH?&2npjypB8)L&Qv_-yrnYIaB>M|lyvE8dmx2X1dF~Jlr zz8N1oKFQ{f629A>UNeW&nmOYxr3l%0m>@kR3O{gY^>zH;&D4aR))vp5!7O4E3=f-W z)wE`Fb!2^M9{eW*Iw!=)`?%t5@R=*hPrn4ZsXJN*{*J~hj`gSuRJ*}y3Rfhp@ny1h zGm-Lnnr7p4sLCbo1U3D#xxXgdxjyvywsdyw8=H)A4HWlgo$0Nr=oY|2{J#@CzY{-D zu=P$A-9XA9B3zzieIPMH`UawSe5H%6wgIDpt+?x(WPT*}eQBEYdULlZi)upC1kQ5` z++Fbi0QxI8$y$+89BM% zR8?~bbnN5}JIuAmq)Ha0p~Xx6ih#WY(ZBI}Ccbp`!p?X1uoMa7J>MZT3H<&L5lopA zL-2f=figt!RNH>;U8n8&YXvi2JKx_UyF@rV(BEjMo2NI>FO4naiQ2{T{kmj$|5**G zYGV2Y)xN`+Jl2`u)bE(q1ZY7w8r`E8TT8g7?{uCe^kf+?%)4e zJZrE^{JLzBM{trAq`IVRT9#AHEC@{e=upe5u!pJ^jFRk~4V{?sT1Tths6sVEw`hmz zCbEWdvJPRK!7?Ux4=gd`oh)tC;BtFAQ58E;lel@0B3TxKB)XW1@`%aW-ziZzys%V# zF=(*eB0*eCy3~dScvZjVIw+^~Bnz~rl%;8x618G~3z1tcNNqHswU6MS{IIISO4`#Z z#wt=QPoY`%z3uP+J{*CA@C^V}2r~##m?`q7p{3m2<+#Js>_uVa^^2a~r*Y~d8n&)E znjs;a@j2$*9Eam8-qC^!wEtZn=G&xX=OqD=!xQblA%bsk$W2R}c{ia0!)~9cJEA`* zyHWYTJxj2T57Iwc9%3cEq42p!xReOh`Dc>iYqbj-LBOC(i^u%zFW4l2Y-u+ckeGIH z2Oa}%J(;rkIlAN^65wsI81hyGIVqY$MOZ3k%(Se|p&6P3(-&}J(x#4$IKlJuQg*1r zY|({uqRecH2&x!4PI{%W;^j9@QLBTc2vwWCdi z*T>9<;8VD?D+XJ3qh*R^?=pU0l3ME)_REtfMCGs=Qi>IE>u9ZOlLf|e)7bLI#HXTX zY0b7+E##|R{sCH8Gz>Y|fCs%_h{#1_oxS5F4T+Dki^+pF+J4b5*0njF!iXLRd5#SrxTA!S{MMx2(6tTT$U^&{j7NuZVWAytZ`{;{YyXo-Sm5g9c@A zF|`u8CyIOyE$e#3#$90?+R@bgZc)n$$4atpl8V(@7s$WBOOOnYGIgpc%t@Np7shev zrvx}~B477y`Vi3Hqll8s(Xjv*$(;i%@R;LB(bW2V%17da0ra*ZrW%#hU)HxAFMIJ%^siT{z0E-c%Z z2%}iV`AnIc8tIH!q?%$6G=)elusElDY?1nnMh5cCx0}c_iF`#s{uLU?KZe$9+ zLUcFy76r|p)Al!(-9C?(iwB%En|%t$tmEY51F^J^KG-E)il8xFe{^x0Wie2|ExeoQ_GJowUU_J%JlrRp=Pt8$Az>MeiWq@_5y5cz_g zZ0)nm6iNtFti>wXKZ^f68fnsrhjG=>YRv;qsoY%jjt_`qG6nwwvy4RkPvEJ=f@Brt z&(!FF00>}KNS`rL6|MIhlNNs1ZzU!rOimUr*ICAHZDD~{D@xR2%|nuL%ZijnopGUg zeNWBB9xt4lHBg{@SvUWk=IsWNZuke&hsu5?;%o~KN`Hj<(mXkig?8lBwPQ<+P?~wh z5+7|m+?3CYi>jlW+ca;-qSuNqRq-+Nbd^s09WaL~%P?$dlm@F?LS-Auz=g!c)_RiKAKeDOjqL;8)4HM@5UY1?- zc!D_+XBU}0xHAPuspsz?UprWGgv->IPE+7=y0mLgm+4;bO9?f+xm7cLHLQ~jhqt*+ zGxU&Lwgqi0{VU9O)A{ABvksoD8?Uxfp-zjO7VE(@*ng3W(M`^KuY3{>=-WVH0(>*B|4KW?O>t;4SYKl>T#J$$k z%e(>j4Gp~P8QAgT(D|2nHb36ryeUBG!pph~f6feJ{+*@^aPSFZ!5yTFA7l>WZ+!Ar z?69Y3m3dDmZu^M-#d%LJZuzuX!o3^U6dzqW_0^H(@k!Sxteisa@bX&WO64-w^!-nk z5ANZ7x$@QVN*CL`4!8VkkPbX1E9emroY6h8Y+XwZGwLeJk+8WRif#aHodeLVINhmu zxoLl1uCJ@Z_iv41UpY+gZ>WRnpm&VH?UV*s0bJtdEoaK`Zx64rTy^Z@43bNOsd4k# zZ_$~r(fDG~_;1lBA6(PqnuUsT%NA~f7H*T&*3;>X5tJwqS9-0kbQb@g$ZLjNTO&+H zy8!$#YtKGy&a7iW#ctgZ;9|A&6%ylSrK^m{R27*tK3U|H!R!4sV!rrHz@0Y`ub1oZto&pDlRQojC!D}G@~!|xZ{dJD2m#rE2X9l|^V&S+n-$EB z6o-72X@k9ytU#ybZwc<91myb7k+lU+4a{e@h2WqVq4oq};2Yxix{Y@vcOjmcTH+4Kauv#i zQD>3Qm_?Tl?-L+}QHLvMjG`XlEwW-{J(r7kP+@+5{i`!Y7jes}>Pa9 zes-GmAS?#y66GT5yx*K~;Oj(u6uCsL_w&PlciZgXvO+AYx&;HR;as0Vr}%$RS|y!_b3N) zIEPJ0eM5>8bhNI?2}n8tGXMxLQ6LD~8{3I5iykWYZf3>~p2mgcNZo?CKC?hN$HE!Z zMUl{C(mj}nSea^9$T+#jSb8h$+`b1{JP%1}eJ8zt`w}^oh+#GkWoDTf>0)+9Wj1c6 zc6R)p7z5__qmnIJGjW=J`jh5}@wNW`#PhDO!N$z^Mp5(t$I7!yDiiou1n)y_}pGxvE4CMJ3(`~K1T9n<(t4UdK8aZn=76#lngzb ztLB^*+TP#LVkthMUt((|XZ;A?x1g`PUytHveQ&qni9etJxC?xKbQ9}ayzIG4yL%<| zd`l2`y8Zsbo@&QWa}lwUdN@U3C!}hhTgF!_m7>3$tG;bHm0Xd2RPjFX=%WXXE*+}- zIhi7&^eg_0CCQ_RYVJR=_YYwIuSZl{AwV8q(IBEahrAEnCRO9P=HYg?ZQftnlBC&( zrrJtVXnJB`BciZ^+D?|fmMTs?MMWt|O{uZ`w^?I8m9oN5%%wv(D~lj4XYvy;AzL9! z*+7FpE%cLAgC$Iu4LAs0$RNKG!CCrkHR`tDLE=i9^%cF2?jj%Wa1U?s&BvL~%bZ|y zoDOam1iNdZEj_NLoXyVerh~Y|txK@gOHG3;4m&!KO_(7)_gdLiPd0kwJP;82VA{)_ zoYrh6lpgN)aC^D_SY-J|u*77Tp z?)O3n7lNT(4^yjP`Xt7&VIA%58fLpq0jzTgS-f)UB+aa;w9`66`^AiooBem~&WL`U zM-(w6?}!Pa!$#=JD5y-X;OfHu)YN`8Ab>JzV0~g>y{cML?5wcCuJN7l@CO1GJ7Pl? zR5Th?+p`dN4@dehi|EFB(v8kG&o_l2U+|j6w$b#74eqnCsI*FV|Jyb9-Oq#0oNGBE zzk|0y`wxfb%kA);_v0IFo~N$6)hdo`9Ze4oxc=?Q{>iL{rB(lzl$Vy)T`lWPrElTK zvctYjCH!W(?n2cu%WG;1(WJ&~leoZ9`e7tqMTFh!x$6el^$RPg@=j0pg9N}H+<&3@ zZ;$=gfw@lwL=r1EQp_E9MrKR3Uvm37NH$gk(hl|a&%R0gJu!z$RZ4>?n}k?O3Ce~M zl4~L{uO|5>Bq)oizyVvP4Y5QI$}TQg3|oc(+AJt&3RgxS!$Lo8mZGG2v|d$F6(nY5 zh@G-5ZEEQhQzly;rd3wZu(Td(WmUl4t1xX`E*knL)5x`3WSd%@gL*l3H2{hg&NWzS zd#wy>sT}^#5`ByqJ8Nb9QH3EoH`h>dGXzv#{vFvPjQYtQ9bKhyXbd}_4(OD{J&s2rQVwp-ig0#*vlx2UbB{^A1-ZL#& zkwwaobm-oq{xcXOHWdQyq9=&_|AaF3g|8B^5pOFQJKT&*KzkUOQrYfv|lXm@AJ1Y=j-$J z+`l*H9V+D}h=*n}G2k0Yjt*aKTTw%bEMb4UyK+X5=JL-~D*_}j zLNqY!DN;^eBAgm&Ewd+hb0bEuGZymz3_;O~o>0uO+CL9k=Gt=Dt`vyelht^o4&siS z#BsJ1vD}+}@k}uHAID)ii_>`)xegaG43jr3C}udQY_QOt6WE>;+MWYB6iO5Gg)m4j z@$)yaXdW@H>LP-5YH_RI68sIKKeAWYI!r$#;#B2AQi6+9Vu4&&W%zaTBCWktUAVho zgnJ*=b)AjAS>p0}rLVke5AVl(g7WpHz{}1j@E_m9XTP%jCC}f!r76BQ;*Kxi~$f)x}cte^@pM6Zx?tuY*t%yfz-Rv*%z#MD-j?El>e{n#_W z8s}XNsyC^BmF2m}<&!hGw)D=GttWSUHSO;MyH9sat@`c#rTHn~e6!t4HBwKtM7`xS zMXS3(zji5|MIAp>t#;v$sTQAhCF984Y4lqxP3?4u&g`(oV&mpLGaR7>@t`^qw@8Xo z5LwMxvV*yYkuG$XZj(&kB z`?(^EOk6J5tH*jKmHm30&El9YW8NmB>xNzHWOj>!y!veHbl^gb#gris=$-W=IyN)A zhLJv=yv{IJig;>_mhb90VoWF40^5SA>C4a0L=V`7cr}Ii$`Wp_qJo}D&*jI50b|0z zP+RUXhPe`k|6Wm|gGEd6wmbb%WMe;5+(b7>U&gr?GfkwQQJ z%n+&9u5vlg*PzTp3Sv;%Pu{0n1%=q^Wj(3itpy@SDPWO{$<&6b6C%{ThsQkVI|lba zvIES00~kp`eu9L(mRc9?BJkLxPTyK8&!;&BsMmq1wN;0JAV5Ms$bj(f*Z`BUJFziA z5$rG&rw|1)Zbadb%u>y)Z}EaFq!BgbiOj`6D}r@1;m?1zjKxtB452lw7lNd^qikwR z;dbpb_0v_jducAYVrmmiW7V2QAFLV0FvuB3E7SC<|1SE_Yv4yQy9wzaVJ=5OwE{hQ zEd-^&lPt8BV9UMrP}Hg&zp&i^9kGDckcPA9eL`hskU~KTqE=!`0@-a9l^Ef{I*WJ- zbGtnHU@-5ogSy&ihGv<~cHg=<)ZHD(YJO>@xo2p%9qTowZZoFtwjJxVrtZjRbem)R zc^@&{e#MuEJh^+uj4D)zdfc|^Qf=-MX08%dif}N_%6mkU3zuChVIE%08KI2z3PQn0W8jo-w<)XddsLGxOXR5U8K-m!Yq~IR5Xe{2eTi+{m?%^wD7#9qjFtxqB+MZkSkH zSP)J;(qJLVI!eqjjz~-bo6h{~-+O-)Xl2=G>S=7}t!TndcNYBAyEAToM?36Yn+;@l?qr)I`$gl+Z?mIiZ19I|FccE* z&os8Tw^lZXu~W5b(dsD{EG>W@KaPCy!ML&~9D_a*nBYKLn(zrxW=EfL>l~diDvE$D z^H=wa-c^nl>E(ud7|8nsD9-nw0xg07!cD;Q5b zX0N_f&~3SaunAEpRxtfa!b@_aqGJhW<1qV670ssCeo3+7SlvhncAG8T?FgQ=H4p8Z z#atW@kQ~<1w1_Vp4==6vDh|5(4&wT+=DIC|gPswf%$pmPvw&Vv<>O_$ZEP}$eZfYI znFx&U06pB{Zk>!3c#t~!47x!GsT^^OTO*{Fl2KRKelRW`&WRNIw`X?uO+CVVkimQL+$z%J zNLi+tkG!h#`!XQFKS0NRoyTs&rSTs{U~lOQ0s%O>s7* z+)0#cu2Il8DhQ(iaUcT)`jogwCQL=9NE-S2D>H@dwGbi`Bp~%U+FKv=2n}(S>Y)(C zCa6CkFjOj_pF1jWIHXJ+4%rbW+C>xv+xaepsC!$c|5h~@oOd8)5`+w<%Fe(J4ytGfU1zBkED z&N)enRo^%9r{3IqZ(%rC|f8w*oH0a)j{gmov1mNXLke6}#C(m)6Y5CQ_Fkt=3&4UOU z@fQdn8QvX6jJ5;M^)181GJU1zuuQixZ%MfesXpT8_++O0|3V%vKyMET2LKNtaeB>9+$xG?!JB)>2Mhf!6UolyhX$GR9~dbkm~^@8me zcJK&84d?k8ztx9DPNt%JitPzG@eAzfmhsq7eHr+&Z0IfR)*Z)F>_POt$| zCzrHjVBh#Rcg1@s5%Z%Tk@@CVr61VlR@~1qtgrhNs*aSLZkInV7h740-VF*LIsVi= zAG{W{Jl<^&tdGucZw#(}7CsS z**sbyV+(>M5eN&V{#!2knSV-^5yD#R3%SK*od4NAm4nl~hcH#(kwO_vRzR&)Kgdlz zrkON_THGF~)FoCPzlBrQBEK(FMg~qzHY2EnCa&1wQz*q+pJT62^_-Dl3mM%#w(vf( z&+5UAFmRr80rNdHJPqD!wLfgoPXC8lq%7VWYN!=SlLMTDhZx5e1vYry{Xcxh(W_+R z-Cn~&I<2PDgs6)-2Fka4zp1|!cjMk%99PHN6*N!)pRQ(L`_-!M=j_?sG%_wy>(CnR9MVucLIxF7UalQI?*F9s#L1x-!R=kCr^QB$ z&2Kbta_r8B2(8KKtRnwNY@KdFf!wkg2_ zNt4#hsu!h=Hpa|T0NJ4^=J>YF75aEC3o&0ivOW03h2ZApgKOtX{HZ?-Vn%plOlIy* zNC{kX{NHR#M`ZW9GB}|gplgR|y0*3M{&_$5GcL7_&wGMhT64Wo;G63Ec))asf`Qov z9{3x!*(U+u_@nYvF3L3LQ2gP&g+T}q78C@K1*tQ* zqm-M(X5&|_&W<)}RJ1{fXjI(58p5C?j5Hdf%n7n`ElUwibhQ%3Vu^*ml6cS(e>gUu z#O#?ykzO@oNYUuS9I79>wQzpG#%fQBHL!vqGy}7hS!`Rq ztyEoN-aY~Hy0Y&t+Y2MY)a*_r8>f7a=-f})?j$f9C1jbh5--@~^X%Ej6hqO}*+HKW zjhGWJQf_d~?Fv_$T7LN`n2(AbhZ*R~CjxE~`B86oar8~jWZ(Vih_i{+W&6X;g;aIC zn9o^7C7O|rqfvDh|6r_Q$=$1AZyZH;hlx%i}#G)L9kXcx62EajHnz(x>8y=rOlpkf* z`GDWeRg4`nK$n4>EZu)Sg-LDET4>kPJP<1$&-D>+t~WVvL#$~Bx3m_m=)qpXD71Z| z>k#7U+`Y1$gG19YsKzXoQ|Dj?#ufMausknOfQ?D11cnb67V^v4y+-Zw-+w&byHN|9 zFX_I_)JX(4z&uO&SJOLQJB&4XocO=^m&>Xyx$J~C! zYK)HcvnGgvq+U>njR@eap*>s?HuUp((Lki2zI)c=+G2wlmk1?VA#!+=wY3K_QJI`N zC9jW}H9REZ=iU)=RFO?8H?+$ z&fWiXds8@P!JoVLoYcT~w9yro3`7=RG%(C+``at)e^HuM_NC^fp%?QS3iez6k*V@_ zgi1>Za12-ssZ6L74JVW~il?Kplk@lyLLm&#q9B4iH#u2r&2cUyQmwCQS|v14{m=VP zW5IJyl|7Cp>je-FpU-0SDks{0sXI=9_G2uD1^X`$^xWU5>x&4O=vOvpLm?6_ zLMx^hoqzY;+;px3s3xIhyBA`Sm4^N{7 z1x!E&*5#f;syht~K4-9@F*Q;_Z%t@``aTO6g3xg0Yq2);&-VMM@s}eQjDJ7x-FlF3BngHpxzyQvjZ<=?nh4L!VFTYC|mqR{u)*$I$@;oDuyA_)=FDA{(paC?{X(K`2S+tqDIs% z7#cuJNU81PvASWR|AiYoiv?+bVG0VDbb!xhi6PFd@MB0< zYFAizrwYxLxD$EPhGqL{)B=3B$(m@f^gAfEHfkv9a&sA#Nh0OrNnXlS=!)(0G-K_; z`Yj9Z?GE>IR^TBCL&uoYM=JNbuI2-;OQaI+Kh14DU&xHD_P+P*t!9F}?FT>1dYhk{ z6C{6ib0`&0UhdGJ8N<92`TEhosk6<|p#gw%k6&YY`QaZ9bON&H7%Bbn2xn{(-G{0dL{5v|nKscKGPk(o%dG`p{5lctFnzzrZ(f}? zBm#d^J63a(h$QAKzoIbd{?}S>LYgUgquHbOhhI%{IO0DxQqtknC`6J1wDNr)wpzc) zYnDq8HA9^6m7fegC;hEt7io%?LBZ1N)R1_keIRH;Z^8gs ztRQj-t2w@`hYZn(_W1ro6;oQnKk_>r@+%xFA+iplykTjjq@!Le_Y3r!K2V713kDE9 zoPcK>MsT6YVWVuf?N8rjqBk%$BzOJA<1I#&1#HAm!@MBxu;5hqHnul7h_D$yBoq^) z7DC@N+uq^#Cp^wlxlBp$S%g2mI&mJmqwsnv)OZfH%)t~groYKy7tya81_T8i3KKR4 z{t)j-kim%TLFB^(A|IKf;8LKu3d&eJD zm#eV?N6|#D1YCLRsXdt3-$$n07->EVPvLhdU^`GqM8KDbPUp;wyXRB*_=iMepYwCA z=yvM&Xp7zU*GuBJmV(Dmgq3v$?2kD>54YBV$fxHgX3AImHgz@Cr_<0lmSiA1>VW2L|R2kKBTsyc#99HM+uj5K^!0(Pq+&Ev2dgfWO=nlm`NWT0kc z9gNi^+)%+Uco8&aMd4CRw0f}rLYoJphPVk+Z!nN)hD<^@0^d-rsLEr0&R~N^Q_PBj z%2hr4%`VILBrR6;&l%tT?HmkfF29UdsdP`!XwC>AgSr1;oRHj*3Wxc{s}lVyxqjwN z)M77`z(BA^xIJ?v8afEoxZ1h`M-w`;BnEDW){L@D>*Sqn`Cz*eC zD}eYZyS>X89}&A%f+0n$5*&OMvALI1vSNfsi{aa)n>(67IN9rH3S~vG z#&bMjbASo?#kROn(1}pFH?e5&cD7e`ak(r3!FI5KE5_ddvl073<3OR`9OmJ`KRtONN-5xd*z)60 zo2XcAf4hy}a{R?sX$Py{T;PDs5;S!0rLF=z)AQc z=h+|DU{sm>!}b}(czSJZ4Y(u3?`hi}i}v1Ui(~jn=k;cHAlGjd4;80zK@(68b5`vb z@Gg5Ipvkx*!ac{~(5k;Y5|Kvpdea;asjWDBrN_j(TX^W-Z^Ae@Zac*k4dmv_==(gi?zDJ%D!L(SRzWZiHi1Wf;kn2 zO6kmB7t>Cy1Yr?W8j-dmt?@L+MG`_&fG4f`n|yLonUcoiW&vyTzZ!u?_nA?(>NS^~ z*`o;=eL?}}+MTsriD|WCrOd!b2?o5on&4iCg9MW6jITfWSH_{;1V-Dn(y zxI;ke>?MmSkdI%1AVE%W;<=UhV}A>h)!*ji@<3EKbE}lu+;HFm#20RmP06Km>Dur z6vzd$NeV;He>DFAvj83^Dds^v7EWyhkft?53EC|}CJ89XEOpPX-dVCW@_KY+CtEiM zkt~@GASu*pv0Qg^SdaDpzO#{1)%-f#*iYtCfpsAm>RK*GKN-NXRM4pX_AJb&XsB{M z?*oHWxSEZOPAmQ)dB<~<7R+@Oz7xc6`4OP<480)}Kb%GcNG`+w}w0WBWgL>eMKEw;yl<^SHVg~dezhRU0phrr6| zQtLtZ=lmEeK$jq~$6WWeKR)35F(9{fX0*-pYwGc^7DD!`@zhO!{&&~xu)$3F+UxfT z?<3Mz_%ISbxB+F^GD0tr-D?lI|EqqtkL$>kzQFgkJF!Ir81@S~fZy}1$}&+In z6Z2I(8!i*s%;rmN*Xx(9`0Z&mTxq+7LtUl=rQzDI6%3It1QE~Z-4jzFFzTD$eRU%r ztg4;T_8QlG`7ud{s-0P^l}XVMufmjY#f1J0E4g22NtoZ7%A8#*c@HfE3Zjq$>!6+| zeLSYbwW|VODJ|YIOj8+nou#b#Y}fUSvgErX#vs;E>PH2nlw|od@3GZ z*1;`}V1S!gPfgYnyRR#a!pGYYgy=jlzz)Hq8*&p;9DRs$)2t<>!zmcVV#5frYF396 z@pV!;%%sluvkZvx$LgQ)Y$kSyoj2QF9;fcNCjQfbg)fLib>43#Nkzq*Q$HzyncFw} z8`KPN(g1`$|5oY87*8M(l)>*}9Y&M=ccS1I;41O;o^LXa+Op;JMz24? zN?zQht*wpKs^!{wG5GoZ-1i5hGHIBjjapV&Q3aN~$K!PT9k_|`CWl3@11Zw0Td-UrSQG5U2H^FIn}{gyyC_!TXdzB9M~);Kd_r`| zY+9=(iZxzcx82={|LP~XtBb#-l0j7>3&%kLATnh~kc*#b6#i7|3Q}>FWDQ#=QhH)o z6W+4#`cp)m92NQVXSIv&QRn(LgVpey+7$r>10gl8Ma!BU_xfg6tios#@~Vp%t$uo* z8pUwonhKlvEw3{+>Lmb8nobCe@fM%_MnAb8IzHh+1?3(+r0@p`wlHiKbbc1PI9fll z5@QT<6Zs%?{Q|Esz;qZCeyPct;c|6k*y+E&+qnI*g@-fsw(G8p*DHLs?v_&7UlyvD z@#k+J0#sLgPrvhb$df^RFDmkHO1dus`8yN^>X%``PiJ9n3AV`1#40)Y6R0gxhjVk! zP(ahz|H|Zy!^mKkl?BK++T-erLkPR#3Q&jQi9-a0lmm#FbRjaZaF6lWU1ZC+<_J!g z3X%T!XXZnvIR1UR&u@6UV|RgN)xfEJ_Yt^V<-fcCEU`8+HePb0hFJ43o16YUA!{BC zWONtz5bJK^!QW05SC=G|Q_EpBWaUSuIu-m!!Inp8w$i&*kb23>7qrX!uT4jY=splZ zuwg4!p8)<}J=eINJ+Y-69Cv|zai!NFcHq4}x6~B@V&jmI0gqmv$NDx9QSBZOx%(Iz zs=CfMif&2Fga#CVg`|h)G+@N?eZ#;$JnUM_#sX;NEF^;Lbhy(jcXf#6_X*0#>fky@ zLVIo?30(TU+~m)2B!L(lfdvth(?3qG-UF<0W*!sA0de2$=YTYwmaBoYGh7Gvqrd(g zml8LoxVPOp*&1FS;Mn~B^-va2L{Obj4)ZgkZ0p_M5F1QCnIQ`Z7H9xFOm0(=oPBov zf_|YmlO16(v-%5khs2l?V8=mv^e*6r1HWEz z=C;X*uE&AjV?O#C>=Y2YjO|o|3v0KSyoBwNS!}8oVAl)A7{?bM80cZ z&y&RLwi5qKP=?RrbCDe~2Z(x0*a!WwX$-9KY4+Ql0dpeQ3eO6`Oy--I>>hqT<+sy^ z3Bb)M%Q1e6Qy@S_2Go?S_%MKkV6zhk@O694H#{Zq*>HT9EO10`!lLij@>vSpYrpVb zdCm_^z5J9EAOq@?9*1)P*8Z=yL}=4l*IrK>Vt_Jn0HRJcv)tqpI%M!mZ=Z2V&eL0T zdO(>_F9vuJ|JW(s`E=x- zA*HO35nV=@i5FKv)ykFO3Q#FY0!=EF|3eo`>z6_gLiub!Aj~gL5}m61v$A_JcIbEu ziu>EozoM9<9ncM1{h;>ih?iTN*1dT+(R2CfB2m4rJ8>|!Yu)n|kMI|f?E^?>erF1wS!+L=&}v9j#m#DI!pvZAn|`NsvmzBV=^Ox|iC$X$KT|h{qDn z-pRI&N%`MhToh3}1kK8^p1UJFPTSva4$@0Ca@w&azMbCt--tm__`L6v``=sYzm@pc znmo^E7h>J)KkkS<&Vbfx!Yd3T3qj6${s>J(4S2Y&6C0*e21JC#v zkHg;g@$&f|vyH__T8SmJ78m3u(Tf>?UmRuLek+=^j^D*Tw1PIn-~lEMfYg`*4tT&3 zx^?&ucTjbaEuF~Uuru`&6*0{%r3=qMYi1<;(m3m~KXl^z-HPW#q-tA5TRZh}?0e9K zlmmT%25g6FDN@r;i1kyN>J0;;K44HOh0>&TrtrHW2TmvKej7%Ei;2nsrCz#|U%Ezl zDB%p8pm8}>SpP!~)p<*aw_H!6ia53twa6*w2PG=|T&?3eqbeIN znHa7xvOM%r71jeR>W_&M(zV(Drj}@3%QVH!Ma|7p?Cf$j>gUgLx^&+k+)wPewwzA% zp)P@7(pZ7&adY(syZwTCR$H$A4e_;#ZJ(`(WfT8*M*a;saFXsaJVeX6prXU)a8){A zN7H%dpxBVQ$<3?@tmz?@UWAIBXhbS=a;;=OsF+9|cv9wgv}}H*;Vj4{jJJ{ytU~>k za+_9}4G#>PNEk`iJ0dPCz8%005m2*DDVZ8P#pQSP4pz+bl!`wp@c39$K)2o?=l0F7 z1nM>6J_2MmUb}YCPvFA>0+ZleO2TC&TOR_0tX9!2&b;1~UfXCqO^*ZYV-n?%cC`@SPQKX!D$+X$NVWp+i;WnFH}?1z7Q`itd10juzG* z2RDlh-WUwT{}mT3xh8_jY)!sxdf{R}@f8uyk|a;7LKz+-E53|s0UBskj&AWF2WAi! z*i^(F8ihcr_B_+nyv8_Z`Y3!&e^u2+FVgAFBNnA=YfUigEp}#Nw=fs5LY%IKf>Q|q zRQ1gl-nt;vL`sojgb%`%3NGhH7un_MtAc$pt2TV~8xWijYgD3zji=D*8n0&S1e|;z z3kSv7{4}l+TeE0{XK7RcUp25J+-i@O>v-yn$qwRi(^@TeR_u6+L>a7d&OEW_pULG? zR#&s2<%rtp++eqh#Zg{IJ*j#ZytyD=EKHW&$Dusxvu8c>UJjuhhd()x2X zx8wu_6FUAL0y6Q#U9P0ZPGx{>W={Ld2(WAi1Z2{}Ph8;fsyRI!gbD~A&&{Xe5%_{* z^#PS7QD8d$ybSjtUpMc!)d)NUK&JGA>As~pOd@mansF77W&QR7_LH6O9$wb8su3dB z7x*F;K`%XB`@gP}YOHdFPIp7S00%AU>NdKrDIg6@jK7Ce2aK*DqemR<9L8*fhSXa z`@nnaUmwn^DH@OSe=q%t)F%0?y6{a1Rq1zbFc-yDi0@Zd0$zVBiR69M%7i-M&e*fJ zIDTF*Sm)@c&!S%rJU9;!Mrpkh)hl|XZQ^2vI$i4G0H)Sx0l=lVKL$bJw{pFW-n;iE zZC5p8mxjjHez(s_*egSMucJ3P0onmvLz~3*g3hdo6{CavG z&bMJ%%0*+d#3@Ml+#r>vQfybZFX@0)QLp`JG^#;G*k(^^W+&B$JuJi`=?JlIyAOuJ z4KS1LdZ3OG@`42r@h0i2=&(C?S2|8yDVYl;djHP|rgcZVy<6@Qzu(s$s*KH!ZT*ZsrjKMzs0$R(tjXT@ zS9=l_vMn6sQwfn#8~fl4Z_phvW95g#LROyXhG4#nhKdf9>j$d}jgTW<_D9wH0#Vj` z33a?mX?#6OQBPY<=HK?+s-iX{8ASVsIlU`iiZH}%?!h(Nm83dL=U*UL$udT0U4^Wb zOFNaUYm2iU9`H4T%RnNcl8}$29OW|udk7SRN-cqA;h;Bp5S2#wL>kuUBtjEkm@ypr z;m6>p7Zd7n^ooKADAW%rLdgcKgrn#xM{!#1AHKHjIeZ>74s|t8&(s6;JSs=dh8RsC ztv4y%{H@BmI;!3WOB8&^8R_mB9a#`@Jn2XP&V;pb8LnPpz)#vztb}A`B>xi z`CW#ei3@T=?{) zkdfCNuWjwc_cb|tV5bI0r~xE=zbpHlrca1bFa!k}aH_tajd>FN6L@BT1c2a!>iBH^ z*vqU!|1<(z;2}Tm^bPnz#fVbx0n7=xvy?S_I;8-9O4H(iNqk}*ZEdKl25w$%FWd1~ zxYV?SDWIUEcafU$U?lfBL~O{2>fC<2`+l3Dg=zEYg3sf4N|%x11f~X0 zuLDtnVw7vBurd&sWgru8Z7L+xg$_{AwK*hxG7S&1gyQ_qF+h`F$R<^gVj|D4v1pTz z7ORG^gE@>WQu~L@&oZ#MKOwjjiWkw8o{vSe7Q^6b)CC^&LZ@csomZf+2aJB)AVlX0|V4x9M=ZXc(el<@Qvn{H1d?4nWtH_x-h?^1t)f*Y9v6=yW-I;9_K% z=Qju8x!-4~(dlyg{t5jKIa0lFF>R`P;$fxv)HN@r_bRo247yFFhf;GNCt`Y|} zC}LfA5U%K9F7QO6PIa7TSL&*~;g{(gQyFoPRfWc9dKL|=@X_Y@p z^m6qycabsQfCq2F{}9KTq21wl1AczqEkxi3iuyMyCef+6QN&yY+78aPAFq(mIzd2!+c1wB9Q zhlsw9s=iC~xDS1&uEc6j3laKOo07-5Ti>NMhC9vnH_Kd=e`SstC{nKb>)B5Q&4yIo zUZY_aH~U zQ1GEo_A(%h%HvHh3&ouc_y63QK|!yzo#%bwjQ6gJx7NHxH(buPe%PzMvGrt z(qDq>xmqIgN$k^$wiP1^Qc2N@LTFXiay^-6g`b5?NBBF-7XX&3%KTV}=297P7IO$1 zxd<_uviY=O2~@O_B2U>750cZ5IuE4R-oC7@BQpp*e1t;|B1|3T1ATV%PfNvie6n$RQ+4^-b6CT z!!b1U^ARfcsMK1b+L>r|$D}`eO&UbBoQy*WPiEQesnW`8OCh9@bzqI|j#@0XHmt6tGVPDnQPiJ84cV zKT=)?Tm$Y8MaM_wHY_t<#1_tMD%E$lvHw_iR)ns^#PeZ}fmxoiSkBR>Fi^f`#SU=W zf6FXk6+rAQp_(6|!K{yblb1O01OBTO~HF`3A-WcZY4*Tv~uRfsjY z{N|usXyj_~3Daxe4mOz-ES@OEnk0E48IvvkV1Rc2$cQeB?zFJF@+U~6A z0WN@JCcvbA7i(+|p*#y}m$W5$aI)iq5CDv!j<~CaH zF*^D=9N{@U8nZTBA9o@Xlf|N;!CC^sh^gT*KAM9d#YdGuDc4xW1cK!ANH(Ihk`;Toa{%7jA z^Kj<@xb4TDOMo&WBZh&F=Xg~SA4|gXwCoxS3zwz1(+Uue(v(^srif3G${Apt>QdE3 zK|07L^dOgF(}9i1W=Ng3o;K1$*@^&>=62SHR(gu7qbCo`DfL&lJaG=0AmQVHBpJfib zU5K4A;|*TkAdstukU1}?v>J#@YQzKBVlW@|=%+0Di)EqtMbvCEL0{C_v`1VYu*0hE zS475vUM;0W(FzAT;o7(FV`YELhok%mwaqe9;t#gVV zE%et%i$UWw`kP!myKilBsoy?5FF+lqKE3RzO-xiSADvXyl4GHRU6L9xMJsa_&AXPLb2CFdLN%hr+g4NbgQ*s;2oS!7r1c@>6XEzMM zrV6uz;`rbhO4^@C%kj@a)$FM6fl9KodQ5WGrwhSs|ihs_3H_P+DG)s}G1;{Cd64 zM3=FMQG+98^*EGAF-9=BI?Kd+$q_!uHO!4@oPi5f6pJ=abi$BwB*k_>3Ygi3w;VO@ zOi-yXpU2|#OA9w3a|p!l?a$A}A6#?72viTVFuc&UlmryaOEPBrQEnE~ukE?%h9e2> zdo(Jm$9p_)S?6yF9dG?S&rY@aFU5CjDVeD)=(=kz2g6X_SGJ?W4*D<@Vur;@pg{v70Z65zK+^{jXNVAC2|30bXAygUFa{g21} zQD~B2^8JAb)LOrb1Yn~>rk>T|wFg=paj%Y-+{Gk(S5t_g?T%%;Ey2|*n0o77*bpBFIu$M&7=5eX2{Zwr49Ma-5|kGK)= zIPQI@&R3|%+VB7V*KG&nT3|sP_y7tSTvLl9(PR(BX9mCE@h3;+kSF88V~H>~d^PG4 z^~*@9bP^|(_m|KC`#F>~;!Fe)wP15Q=lb#No!wR%8KS6iKNg=%s&Lwx>2THqqtXSf z`p?2s+5em)DOfe5pO}xwtD%6B2_^R{RUM1ofIAJ!{}n4yb&79y>b!DrwH>n!=ysK; zSxy0xt5+Kv-k%HR?)K({J(*4Cc1OEsa__af61u;kY1cG87~K1ZtX(#s13JQmF%F-- z#DfCB)yL7)P*jKqN+@ib=Vx7AID4AuD2ChDl0JWn*r+Xp;pCPnGQS!_}TuG@F z>w)Ig3#hy2*z^mieZy-Hox;0LiMwZxeW)O+aZd=;zwZut4_{OMlbZOK0xCwl1!MRy`yb=j2OkkY8dD&IRkmW&mQ0}IfJA$F z`y=eyeEsj;#4RL+uNnazU3D)w2m8%gf%BN{YPwF}o5I$;CKqPUQ~x8{&(ho z1E`*LgElEE!3lAH6FgdDAJdknyC^2Q8Y5WfV(8=zep~R7)-77e)(j_6l8e++qNf(N z!VjebC>u!rD_F;a5F8K7o9$IZS13eIlCJbaAZOG?*Aj`tO;|XQl;dvVc!^iP^+MCQ z4+GRi08lGjNMQrGa(2z!EQt3sTHwp+ZmVd@nep4LDBEPn1c=^5^z}5mzU>w}u&lS} z%9c#k&z-2ZdDNc$p#;KTmI@YMGzYj*d9PhTqhs*IoC=nHAv*komSp65Nx*}-YDhuD z8Bdn-U55N`36d^0Synl!SvPcYhg1#JnZ>@*t&tl6m)&i~L9)kQ2lk;+kXd)}bv&?B z85mkFSM=|IGLZE3#_#(_Lt|1h=&$=nl9`u9`%s>f5A&I}g8T$bmw%-IWv7+|IoRrlho`+@0wE5>mj26~KcV=sc8V{)m9s^hy1r!(Do(QbvtQ z(@4IRh2#m$xxj$)t>l61p>*n7{68u4bm1(>Xp_S~f|){b)yo}=an&sxk|EWt&cKL0 zMe_3go%GqilZHmf`O3iG>7nGP7t(r@QGP2fE+H@oO?goIC4tsd2A!`(p;&`eu^&3F z7ZYFD5t@C)+h0`yXM;Uapv2?uZ+w+OGz9&cr(f89bT-xYxT zbgbe|{0ERnkNrIk6q#}=`Gj$GUEH$9Era(i#Ky7ahv)L0LB)Pa+3lIvp5~gA97+l7 zZUrh>*<;_?xclUHbS{|t1aho?Y^Rj^(9d`9F1G|-mpW=3K`7_t=jDC<8X=~;&!E|( zMe%BdZVLzm0nDq@YajGM26CkGB@Ud8?mj=6aCuH9I3H8IaTz=L%ht>&y+nKgk-+rF zVF06$uIef1B9t&2wF>e64*?M!_#Dh8D6DfCyEBky!cO=Tb$uO8_ZO$f?z0Lx^~%w% z#Y{JK`?t2cf!u4;OMxyX|H+joz3Mef%$UvI=yBu<%9BUv(xYS1GfossVOLrT(hxK% zjEdqchtr5rRS}iFukm=W;!!~klNqNXG&swq-hx^(TAxK`K$f)M&6%u0Ma0EFz1vJv zo*WX2?TSL${n(TaZY-P-hwK3jJKwIh8tF6_%qqAtfl3DsY3*nApEcZ1+hWpr<+?7-aVg7fc-}?FRvnYdr-N zzv=dADHW5do~57)>9ZuAMN_Lr=qzq(UM`Z|_~rIBZM#(P+?RJh1m<7Fe7%_ZY9@Do z*va)JSJYNkuoKm8-C3(11y<0#U)yZyzu)G6TRQW&A?9x2NgYp-i85yc0q{aeL(z80 zWXdSfP?UUO)jVQh>Zl}G6{V5?7FkTHEFJku$Kp=?Moox{Is}ZST2A;(7>l-3KzFF- z2>@U{ok%vo3FsDMt9yx9Jpzj3_`VObF<$UnosTOFzbAnGdEf+u47p$+!0@U9$K9(? zVfUDD0{4HZ1ta>xI&|-Tbyro2r-mcvl5k8@n(^Vj-R0k=r(LB$Bmxg_jaM%XC=V@1 zzG3-2&FK_62X)TSiR?cW7-QoYQcfc#$v>c#(gd4G#g>o*Fv-xW41!GN1;wFY&2}P8 z7VnZ6$-1C4KF6N{0;zv~N~=dNQA$QPyo#~v%(IO@E1GKkDUe8V8pMA1*`Uz_Th4cB zN6BML*;85DTFKC3Kv~?b^zGKbk!`5H{`9@B2hD%KPky zc^$q9L((+MA%>1Z0~?825gfX!WT+9KNQV&$;TiUuUI}VFbh=S@b4o2{C6tt%MDn-8 zpii;bv?ds^&LIZ$bmC?QD*<^t2v?o)L%!9+-0!5+HoDCGZD8Ay{+Cvrz%%%Xi2Y~R zg2j#it<>F^i0t-(47pTyFTr-4J)C+~2-VED4!|${vilzz^UofI0OG@c_qC_7Gn&*UN#eG|<0zm>}YF3Gm_`XbVWytxO*nN>t2ypOh%D;H( zia4v-IIH;XP;DwM;69ghJ=z_wDtvCiFQ4E=?;z`0PqI&KIt!*d$vhy4f=&7bs#>N9 zoa_j=f>;);H%d;W9@M1{gn6L<@K3rN(9ev2lR$t+7#8F; zfxk0Exby^9eH3YX)Cl}k9m7-~cW47Qpib{AEx!_~2o8}}wpEV&RsEY$>u^9tKqgHg z5Skb}HmORE5Y?#PUZ_x!s1TH>pX3NBq2E@>CbjM=UQ$#@cFu}|0)*?_O=-4_~F#7Tc<%l2>^YlL_`NEFXC-l zko&8jr)5)0Xi+I@1BR^a9^p6An$~3g12aZYr!{ZS=e9i3oL+yu zyNA`;`|0R9=F_R@;~=yWh$3RYl+If9JQT5jj^|Pw&zgVbNM*T}OvI zsSr#eZKGQ7L@BTuP(~=ty_k(%$Usv~Q@NO`em-GkHEvB!Q&H*PrQUYvrfMc7w^Tnq zc`;sf0j1r*V8g|Jdv9F*;kqsOXhY{|WK$j_KZxbZIhM_)( zA@?lL!3AWr!Xbe&>myk{3Q2aChTw%Iu#+TDTWt>Hq%EPHTbeXWZJ1M91s;$&wR1sG zEG;YMs4D{dpnU?c7rcc>ctPCZm#)GJqv=F*YoWNJ(^YjImG$>>)=d}E*Hcy3D`e<+ zt}AFibC6r4SX9-PS2s6RpMTI6TkTop;2`pKm+>1(=NU=Uep`Qre?UMyumt5A7c@7` z>l*hD8+WHZ<5%VKvQjxO|1xvC8dWiGgsG9V$22-J+VayY^&1EidHclT>3#UxngFU3 zSXxZ|pG3BhpkhHgc^txl@|X<3OXX!xC(Hxf7UVz9@t-lB(eXf9<_~bb=f&Tr zYOgZI)taecBfy z^J%9-h(6C{5)&x&7*Kqh*|66XNG94vQ*iXuxa@TYvr4^i-jfP zu7BXz8_|BuZ^m2JjB2PCHSz@2#UVcFzQq#s-QWS^RSTG`>HxQM+s@!n!hEVcYgVan zj~9-YD3F=~>%HRb0V>r}xxD+oOa5n6TMc}@kww85+2oV@2K&gIONOC;eY%^#QkngZ zow1=-%(^Lv54aG=i|;YyBa`L*s3`>4$i~--Ti$EH!D&i?tP<$knSwpoQ>i`#i0M7G z+6xsQ8EjyW(m|=qqbhe$>i=u)tApZhmUb71V8LC2ySuwXg1c*Q3+@EB;O_43?ry=| z-QD4Ca?X3cbMN=>-P(fMf|}oKPfz#LJiUMFrGWcw>zu6^eqihKq4o1m zZAzh;;QJ%0g-9L@9JC_GXQz}9a4TnEeq@!+e$&xZRWYV0bxqP%tS@h&IuX1}SeZ)} zol_qKys3b}t;cBJ$;*+t%CsF){N8#T({EF*{nhn-)URMb$|_!gJ0R8SQ9@I4u()kr zaqSo7#1I2UEk2!zRT?eVxM$(PuCIS!RKV>E8=wlwIoa~Sl;F^LX+nB&hPJ&=d(XL3R&YZA|{iAxaoCw zc8MLXW4R=G(nxT*09iOEyFuKN3hA$m3Ym?>!m0}`k+@}fx_G*C&+>2kvP6#SAckVum> z3W}LGZKD2$=Bo<+4-$iU_{03fIM!8Q7anWHB?hi@SIl#J_0Kito=?2M+mb11?#cvf zmCN?kRMeGjuzPPR-f{4UjZDl3>*PxZ@2M9IxkbE0_V~+A^=CxhD-v6Eb75y~gUi<~ zGCyos$I+7a!xvkKa#y3-@S%IexW>+z%rHeZ8Ye)!+z(DM;u)fg(y52A@ z3uU$D-X+LYazA%T=!yAAY0>M!_VG(l zDfPo@#q+DjT|(ROSnizC-T^MvhwEtdNK}o*%ne)MIji#m+|g1xt6tI!YDRi`VSc$q z5M>4Gtz14zhIkVpn0B{E~{(J z;FR&XA#PLbzFiq5zyw#XBBFh2S%5|(L5ZC}6o_A$v-A+DZe zS}sYye2zm*9;eiA-$Q_&Ezx+pi+>DWccNFcT=pmO_+`m_+fORrmS*F?%539`R$rAz zSdpgHxJvTdb<47`nH|_{deK-zbnClY&*hD@zcyluPI=&Dbsv1cG=|p@9F6X1F|+M} zd|23w#@4FnR>syU?ncAr(eSr0EB@YZcFE$_b5{pogJpT-U^S`e#t{APeU$uYdJyr0 z&u?T+Voq}7cw2i;G(H|Jp4FH&@cJ04nKeF>x5(`SyT4t1u%y<$q??twm5UjupD*i! zOBl$XOq@7_31gSTg}Elu)~4snbITo0ifL+#t%r+ZJli{F98TuhYFM?Sm>OghT6^N_e&CG!pDbMxAQPPW2!x@t-d zBtA74F%W`+^QR!jl7aod;8fZh=JVg&S3cI)-B;Etyfs&rwFPCX<}}a}eJm^j!iQp> zCS^cHQALbryl&biZj8y2(`4)=bUJM&mZQAd9nfKrmh84yvDMH|$h=PA&L zhwe!+LPVr>I8>vK#u?1yFTyHVhN7mD^`GV~!cp!M^{3@0)uX0TDdt3!1}w_uZzpad z_h!)s9{tv^PTI;n5_vM|t&V~lq{E`BTz}5**qWv7we#OfPwiW`2=t7Pdr;`*OT@XK z!rJr!VQlDi|b$G*Ke#24(!|GjNfP7Yi`{DfzQCM8S z=|!1!`V@k$2LK58fB*m>kbuvdY&QVLyi3!xy~Dyh zz1nS4?7UPRG-;}J39%=mSMO~h zo8l(U$%YvM!&^Qrs04BjS2Z(PHp3YXR{^llsd{_z)#~8F5)DJ_E&XwKMyr3=)5t|$ z?WzUhQpXv#YJST8AnVmh)DJQq5oXE{g2SO!j*O!cmyD;tBvy`0q=J%)hfCQ~u#7}? z*DT;s&9OvKUB_4Y#y;Hr>xSowHF3&Q822S&N(E*41ai#^tY#zju5XY%m{+5BU3j)l zT5(<0LKIXKL1PNoAhj-9QDFya%{yHY!A994j_02m2uK|Ytq*G<<3D(owt~r zs~1MX`rjP#EdY;^abg^}nsnDZkXAjpzHojjkC(CInA*?`lwSmSE z{%K#$V2#w1m@1g>(Tr@4t#2(2nUn&o`Lr9H+~!!VAbQ~CUJssvZzWCKKWkuF0ggk} zT_9C8jBJ?#UYnqYfNYt7s!7zHAkAolv`^iY1WKdhvjutz2BPw%uLHv%UPy+t&m@$A zo^hXcz=KpR4?HYUkB0F+=UX#}=95;Wfk16q?cuVu}gVaF$%-kF2RI}a2N}$+ZCl$nz7McORDS8y7 zduEijumU>luxKKK#}mKR650K<>{w)pMn)rqij>4SD5W4)Hgj`UGOb6Y9v^5x({sTu z80%#_&|hj+n=lDI#ib#KS|L*1r)HoLQRh+2*2tpJ%v$XHcGXSP9}y7RBKpbRx2HLeKH`?qh zePS^#^i}L^78$o-pp15$SO#>$$Ub(bH*^ zmq^T_?SoG@v*IsQ<_`(%=ae5W7D1WRTqBqd)ewekhLJcA!i2PV!EoU zsZ1{$Y4|MIYp=c?xPiNXPlKkV;gC^8qT0Y?6cPPIRU%Y?$S>+)Qp!F;)jt~Yn%hba z=%_xTsR$ltHuYI*i#@pzYy=QY%V%%c`WWW&I{ErnC7rS5SIf3#^hb zmsCpR&={jBHALHQ&O=;(g?ZE!oM4cgl2w$B?cPnDM2PloBGItj@cmTDMBuibS?6NH$fqH zk}_Ea!NJDqhxK7Hs~({#4w)3OAyPf*?W*(^A=?X8PuCjGp+buz)v5XIt;OIWrAM?7I9qQ8!ZHNd6^YEysc{WBsfroVzzLU=6MU} znG5I13n#uRoh0gDq)Vb2BVU+c(LrO=Nu?a;kAFnR>ew@JtzgzKVJ2E=)h=-;O!4rn za7aA|S?%8GqrBT34qZUXm0_{$&4X+Ho=XVNSpUXQyp@iDjS$6#U(KEXg@t&*tdd4T zT@rzYF&qkO6oB8a^!z~HUfq(?W}AH#Z&=_ORivMJ1ZTUp9;)d+T6sztwWvC==<4Eg z!w6}}YuFb&{lCPAu6JL8OW>ScnfmLD^1cwc6BJ!@EEJh}C%`geD3kswLNb>L*n7}S zuE72CV81`_!psJ7k_GZ6w4hzmH(4}(SZPWWG2bE$jFF(Tex+LqjbrV)be5s@%r*9Y5;S<&AkkhGP)R~V( zoip*OB(u?FiJ9BAF->*GV>&H7O)0n`W@2y}1XfBUURk7gkOJu}R(*9fpcg;b zM&ej-h!AHWSR<$42iwi(FH7d7;`3crLj>ZFGB;D0r6W7IK3e5+py%@VVr%cVIh@? zC>!NuUbl=&kC>4I$mG%?iWexRUooxm$*nWkwKmk9f3Vq&x4yGit}J-s*g#-QIujom zkch|b@(^>5Nia#o=;vWtlN4eO&xtXOOT4d1s9+A?h#{+=yT-H$#9&;A*su_J5m$b! z-;R9g)S629-UfRXwF7xaHpq54Rtfy1+!&K?fFL&0xYq?)*nm|Jtf}(6)LW z2+UGL;n`%Q28uICFjFZhNegKpVxTm^(V;yxeHO6+Ubw#QzZUz285R^bk!bYo*&s

kOrNx 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�?^)h@WZ(ucklfURi{NpVt>q zj#!f5Y!M?$O6s2kAHl}KUj*pHE@6r&Le>KM-qxtXp4Who5u;+Luspj@5)?U*NuRm} zeRI?C0*X9VGt?<_sQ2-0X7y};h*aDq2o2%0sob6lMg#~%v+6Dk zUCGkA`m?11Ishb0ay{|3P#Y`X$CBnTpJ2wUI00B;m=S)Ap7w^=`4~-^zlypz^qehX z_sUDi1D{z+OIj;hUNwH-VXMFC9MozR00%*Y%KoTC{71Y8fL^%&9 zKR;X?NX<3+wv>bu9smr+I|!Rv)VZQ|9S=P9`}rBs>tWNgffxm<$&DthYu$zBK4ZvOgSBJ>yX4YYNdT-GGxf4Iep0u(0=>+kjd zeMJS$9AHC_m;QUg|L-B-u2mmN8-Q|X!yd5>z}NoA;U`_F)Ps@tBY;B7W&w~70G$3V zT8;$yk}LR*BtASzZ?&c)Xn>1P2CcN|FDTp0M|kK94m!G8Y|(s$X7_1*vBUcYKz?uk z$FfJ|L3+Z6!GTB9BxYKn=yrM6K>#m1;upB?uF`o1Y~FtuSvs)%8NxS4Tr!Fzj|+VK z+d}}BIR92^5Wmxl`ri{_z)SzV?f-im_P^VL$Bq40!(=>OLLZK=9!N7pKfdx$pY_9+ z$w1A{Z7)g)zPinMl;?lMQjG90x$(eX=YHU@J5v5Z#D$o42u0&1jU_4}8z7$DoLgQx zU?czTQxqo#_t)LF_&wiDG&`be(%FkGo1g!uj57_If~_FEvvP_%wTKkynFh@#gK_`0 zkDb6`rGg_YQgZ4XDr%{3L*6eFCH0=gm!!4?Uv5TqD?J~zbo%tRK-?({j34Ur zaHz?cRuRR+O9P!Nqr5HT=UhO?M<;B#;Khw5W8#!v+RtG(AwY|zIN1N-I5L^>fcQuq zk<MVC8^dc=xU3~=@RQDU!!3dv|RquHBMG;Veh z8HedbR1^yG%rzomtmL~NS#+ptKFB!Xe1BZ&>uWD`Z#Q@Gpxo8fUWXSr>d(oO(d8!T zATZ&r4-%@$xW@Y3{>a!}TS$t)as-#h%+aT_Lu4pPQS|MuWxbw??RtFAyZE4)LFpv|=Lfo)y~i^l}oi358J^({&Ltdhl^q5!(&QobpxSL6orU z+MaO<&F{lGj3WyCYO>RwpxcW;K|0glhY$*l;%SS&J_&~Y1=tP_9TwagUq~S3&C)wY zW)>x{@CYOlz(4FcksI%N)r7CXpW4I;**;j!s)wArL6{O@;X4U2eD;V0f0De~ncCua zU4;<9>}0RnkQ?izYC=TLBYLf4&JE--VZqhP&g8G4L=P&?nywH;S)+pI_hUkzY~U~H zFiD;_WLvMKP@2%e$SB_}lfgmozna1_f;;w!` zR52ME_Cy~IFEjiJM1sNdR!F+f2s%3iWK@Hb3qcI1&KorBMF9=+S>z!&w@01b-x-{~ zYqbVK5d_cFAJs+nPj!1rJV=oL%{ea3{LdeT^e}I9S#f@%a|(i!qdvofrR8={pimh$ zw1N;5ykiJ_I2Z8jtU?sG>{_X5Axl>RmziV1%C%qWXyJrqtr7h7_0Df@_N*b)#6k;n zkf@LGsO`4_vI^TSm@w*TE_({VJP`!Yk7#3XpJYBWO=Ju&0>V+b8)$%#yJJnBXkCzj1G|bL^bmmW%uJ;-=pXykEdr>ljIp&|-<;Fdc zYFQD};33kU9}D)gF>GF(q9Bl{Xx~a^0_+8S`;$6Zlb`TRrb4p9!4h%K&AO1 zG40i?nN%u3ez9VKH-ZUr-s!dfL;gbkVJ@IU5apP9^DAfv z;iA%pYDu#9+%!a%j(~Ax5KWzp73DjBcG7Zxcl2}3oC?HU(kRmIo5)1s8dIgHCJt5h z`QNBFXyTy}CH%@_%`aAF8lQ0gvnwSCLZWQdg>75}9tTzxw|U-AI|J1yucqtpo!dht z?*;KQFi?DYl{;QOg(5v}%;`2inEeicwtT8U4GXzZ^M+{11Gt6Zxi$apvmb`-4VK6T znf_BaCUq3e=|#N_CJh@Awj28+`IU{Y=kwV@{9Ig32p&mD})}dZ=SMHMT$B^q3hDH)d4>q`bIvCL!>=R4`t{d)WU$vL-Sv0RLA{e zV{G0B3)&v7LiJq>dt%479V>oIaG6lC?XUb|Dg5YqH&{9o&p~9qDe;)Vkm*mKVr$A?xisPnPPpz!IQ4U0KIAu$>PaH(^L zz0KHH82#BTFN_l#1s!89y|VR{GKrVGGK*ADksC|ixz{<6Y&LnCWm0lACB6UddXA!SzpR1jKLy89W8;(YHf**;T%m-T0Ey1hXk@W8zQh7Srs1Z&Vdwu z`s!T2EH*d)wdlClSHrV2+bmdK$vam_l|ep|VECOoLD{gH(R(bEKz4xoc-34JvkUR~ z$|<0`%AU{S9ir;c&z$<{*t2*#MO?{1wm;pGM%IQ_G@OWQ&6ugmnqwU5*S&+RmELkG zd9ngl^T`Z)RLGEhJ7rFoCEh6w^u+SHl;2TK^$y_5AcN{X&-+65LFnjoMLx((+E9T% z+Z3}{_~Tm8K$%E`8Gld<2y|(S_h*;vIcP!vlqLp?U}V9*9vy;<^K%aJ0Uo6;9a&Vj z&mYIZpjfGc9eAnunu}z`$>M{lP;0D68#8>*c!)~e5$l$?GWhl=ps%9s`WbwWyT@(& zGEtk^>ZcLnOa0_B3J^Ws(VpO+_c%a%DFyM1hDpQ>mvrs|OD@19l7?B}fG1yPUyO}3 z>+uXHviWK9D=b+*l(&o9)+j*pSE4ak_9o!EoN zXVk9_i1NPt_=rd6yoPQ7WAiY9hHp-^1VJx}M}u^0i@zC$jMA<01jgO8T=kF{;UtMF zqV~kas0>6?r(o|85}rr(viZD{8*9A$Jaxjrod$ZDwUp_fIZ#wj|**ogSUDj86w}C^KcFm6{D#nSvai-bbkGwQCr`rH~psM^Jj{PQVcLZ z+2vAe^<&fTlIC@L@<0OWdgO!Ij{z!nbU;6pK46xM!D4|oGs4Tqlytqt_JrKNJGA*| zkHtL6|5+1eAS&}lw!s+#7F}3s1IIf{L`f z#TFKWzSDF2^Z0@Ds#z_fNIl8)DnkSClNIYl3FN3v01|JniOoq2?w)OMx!4!`9Ri;F z?X~1(q^%(A3V4L$%jQv|t37e_v__5$iYyj5HjA?uChYpX&>0Su%Q7zWW6(%KkR9u8 zG>f8XM}O*Kp*tq(Nr{=5Do9%l_>Oa49e(*vM|0;fPN9xQz|}B-B4B5`4h#-9)PMp$ zbLu1rm%sp>qf@bekeK?Te-@{EuAp3e(5D&jT&d9-QI;aF@pwmv1X4o#YIN(j3~d&k z9c|WnJ@x!f#E-LGONK>;aQT~>;8j=S7XZe0!~LV>UZ7{j%y|wVKYk79@^&Nr$n4bc zG#der^Zk*T8x|}G1J?f8io{kzCPfy=)a=^X9?cS&Y$dZvq*z2 zvCa%{ehSx8xN91`ppX9;9SkWU1WAhVASTpSd)RjAJ_lT{9~azbX*~EvYVfyW4<7qg zja<#(ehv(re%;?mN7jP-`5Kk!LFmftc&0X^i>2zycTdxjLu&wAejBT7v7T4^oaLmQ z@m%>E=6k~iLo;nuwCrnANECmyR)@?%(rYD{1E%CoVhVcCSuAPAbExk53+&-z4E2=e zfIn}$2*xa*1j3k7eYL-a{`P4(2sn$0Nc5oMxxV?eD*Hz20Pl0Jpd5ZW|$b8 zhDQ$;u=c8Pzkk$_iVfa*w0ee=I&?lMJ_?RIc%CHTjg4nM8Zb$FK1d97oghapzlx_Z zG)x=!nSo?LoeeI1J6CwDU13Y+Jb)E*_v4cc;aG0vOIypq5LRABn5Q0AyXT31I_unc z{~Xy@b`m}!kf7$e<#b2(MR6N~ELRu7FDWvw!c%+y4@=f)uC_AGo1xe>;iocxhW5ml zR;3pZr{N>yE`;@Q{ZR#O$H@6QNCuZ37%7%Qx=@Kw6k2S&_>*Jx`9~vC5OLkG1?EC# z-Jv#R5o<-{YC!GhKE}(~>Bz?`6}0xzP^2U9=KL_(l8O^P1goq^T(n)0Q~GSv-^234 z(8X?Sj-lMDqnWR{u7qh@3tSd>&(TUSL54Pp2uh3iRq#5HkRS(TtccxdI|U`82nTOC z$U2AJ&(3}iqoSAI`fFD@-#rX*q=?)jB#KJEb;nqOFBPW1_yW$L-Cn_elIQ(8Z>Lo_3C4m6R zg(AzkIq_0;vQ`|wvko-WLSbNdpAmaMykQX8V3*)N`UZ-)R$l3N*TN znwr=2yF#<(*UrVCdQCr$nK-)kmA?@2xs+(UwK^b=Bjq#l#^443P`(3LwN~!cCfXS> zVE(=WMGO1WRI|v<^LTq?YT(G1&{=J$X35hq{!~GHNQqJMJB9QBJt(6H%)p{gD4@8! zrlYX!Lyi9H-NR^nr9a)RFGnCf3$VPjyEgV+@ca&w1$N zznJmVRW~EdvYw6eDe_?QcfuBP(>2xXLHj@vMj(YUS(Jr5(=~6l93t#5>(t5$W*4RJ z%GpCf>D(?f%-q^p_}4-M>xWt z_XE1C^^@Z`HO|;u*$7s8tv*kN=C@;euQV{8?&fk36Zb8^l z9FTrTE7yQz(4|rSN|bw*SP-)&ysneTB*4P&yWUFO?g1I47`Ya?SU^g!TnzsS-|dLe zR#%eNPq@TsM(G3L5%Lv>aitbtTyVJNsnCaFPHFWk{MnHVka@B{KBA*15UK)T zW(x>;k$ ze`UuQ<^e;94Pjva{TPBD(d*-f0G~F@^*H%v2td()zU{v!;i`cdJO;#nsN_EG>mlr-JIRA)xt9g8GB+BZ| zde8`!tHf;U;g>jRBQ1zJSrENXJww#YF{s0F4;UlKCw%ej_VUPOM`&L- zCHNSqL&bfMpO_EcOP*mIUMkhFvAVSSom~&lXCN<@C#@vQE-Z90Y^VUeK?<@DG3mvP zzu)wbJlvkF-JvEDbDAnm(*a9))P%dz_3ig}7?;WTV;`HP8(a}!cuPQ&dm0xj1?Gu? z*OIWB<8!*{_5cc@ZXe|`y=`(EbXGDmYx5I$Gn_wCoHz1Hk^L0t&3^e|0A-u54m{|u z&C+!c{Fb9%u|U6ecz<_;o#|z*p1!tAOir41d)t#EmBUId;dMN=wzJS4DCECzaVqhz zP)2L)ogG&aMXfp-srB;EwhocUJZunL+ulKlJ{S|U%mwB@T>iO=nTx-{S(OU7jO~Iy zRWfVXpJH2sIrX(K1_!f}hcJM88B?gl15}k!P=oHS<6~{Y`j_E(i7iQG>-Vx03Q|=~ zYzIs8{uftfa{tbcQX&EqshF+~6$n^n;Z8W@qI%ER{Tge%hbL7`+x+f;TZlX2Tct{$ zbeiIHN*GRm`_2!wdjMJZnILlV6axch0%=_O=?}YYk=yIp18#dGrr?mxKN4`dtnUi{ zeghzDG~~u{J%kBybYhRwt5_)-@c{Znozcl|+AU!_#}(!#1YC-b@rpdw21~2NG3h0I zBwsfWzUk34Q{rXFt^H@S0JAOF!T76HW}ibt1TYU%XeRED`c5V*7t!3x^`U)MKXp8s zapFE;y6PCSKGW_~eP4%w`&@OVv1D7M)#qqqcpml7yT1Mqf9`)xwfFkN?ZM=Q-bM1qcg6rW}#+lhQpCoyAfQC|EX!U_Y=*&{-CJ|U9_!+u3; zuhSw>5e*cvPV$or@)~XKEFfM9ANIsb0sN!LoN9@Mk9e-E9lNP5aAV;Xd60Ztjsu0@ zgE6!J*)|ccxKHCq7gt2PLIykh;mFJ^0B9UZJ@_|t+ayW;i$<9IU_VXGQ*xkAKWk zl7`vgZ8v9$>e=AUf5xW&Iso87G#Hbc>c3Rsu{9U9fC)=7;>bh%+r#_2i9qvkiyXWw z7Udc1)tg%>u-^&*Y^qj4<8+rzw4fJ%75witHZKyj+0s z%UIT+`1N=mSkbPuoK?GeCBAsQnyYlb{25@l^0z>HWzVEjHotE<2_D6hb{B|;-je3m z1R&Cin>k?maSQ;dtSQr1zpWi0`zu5=*}08aHzDSatN3dG$mz{8ieCtph_N};GYC@o z4a4wXYAtSB6qKkiD*U2Ve(H1h=E~RH7H9<}M-z^7NzZ0wy76FBj*UzcH8Bk0Xo^uz zY_E$IXO3BiBOq47^Aenszw!LR6RdarRuN=9oE+*dW5G*h+zH@!`~!S$gE`cnaM~$3 zdav+q>t}{i+BV&@BFJG@~xNr#V2zpS*%io*{}}BR@qaZQc}x-!gYcgyU$tGNu3V#kRow zhm0G^+(*FcjK>S_ZWa)8JO|2GkC6N7NEUuEW6Gv{dYo_gH`@TZxsMeP8zw9O%hhK^Zd6l*-rCq8px%+PvO~+_uBX-NID3q? z>LV@BM>JByMrjK=0;cE*ldXvXWYXkql2AT!Qq~oT+elZe|I(Z}U;wAe!=TD}uGhJZ7#LK89_7Z+=HnUv^aRz6r;P2zzVsX(vlaiX@pFxYAeiui^B!igcLAQv*Vdd5ca zMOsCS2LF;7&SR*he97^9lFiltP(|V7ypJ_82p7DyM7@|sY25st1mNBM4{|`cOPH_y zgAWE85+3<6^qXT`{FXumXvP4NNvbD;^xJ3}THTaZQW_&rrF*!6>gzA`$&_X#|AZ-N zGk*Je_M@FK0R!_)-z(&tCeGE25VZ<(I8KeO1{9?!I6jepx^MX!x9=Q>yoj`Whj?v? zoKr0~{58<4DV(sRP+0z9ZGJTEYFQH4m{alwXf~Ohb7Lpw;5|v@yql2zyEIHn-c8&L z4@F#A!phTEXQ`ozy8z;nnNf!7S1is{owLEMUREi7AcEL^TwJ)j)`oiOL3`*8Tql<{ zv3lO?q*cTm!5I_2E5UlFTf&;I>7Ol#`7{bEH}brn3W6BCJe?{opyY8$%jEr7qYxMV zsezQw(dr=5N1M&NXIIbsa~R?U4c^9vUbkoJAwCKXidBqhK-Xee{+~7O z)}PKT9n_JG9tm(G;XUz@Eiw*;R!Plg)uc;g6kpRx{0MF*hD91V z+4zLt$aTscEWMu@{ha^;I!nsmhTYGjh_$u6ckI?zs1jf2x&0x!>W=^NI8w1C&0GB? zRZnMesu}kwx7RJdQ^GO%Z0?=%-ec9Pn284CoT`Mz$T#OAsGOHFl-c0}rwcV}O+559G_;Q^HL|+>RKcMY8*X)uzl?^vq!w7b+Si@B$A|mvsoaHL$WZ;Kk zDUcHn{#;qb7u<-HII}5S+OT@H;JO7bm-=Z?-8FIbE=RfLqF#02+WM%sv;JO~f6C?T zu8;L;^{87%%BG*j-dffb7yb)`%rVY8D%^j5j`LV?{4EGR;V(IHKpbTKCRSxv*{6@S zrTCb(ssYGh5u#O%$Q8A0=^vemI^fAWh9&nFfB9r)vC5S`T;`&xIZ=GP2+BEo49d z!MO41p9**;<@8MRfvcNq+tvFU?+a%$*k_Z*>|*PuvC%GHvzAEeu^0k5Pl2lMgr>V0}R5k^kjHN`EoJt^+-z7mNc<{cZH`UhgZRyNN| zAPUd7Dl7}HHdvpw!R9cDywC4EJn!yLN{?go_Vto7^=p@x!eze<4puA@ImdMizg958 zK_Gi()P(531*Z``SOh8>V5*V7YP0ejW}0UtYrmcMyFV zqAPejC%}#Sv4uGurbqhdj?V~M_$h67U$bIgU}syhd-^=8GAV@q^P_IOgoeM5c`;LC zH7-WfYn0}FTiw0iS-p4lA-9p~r+)doeznD9)0{+)!+DzG>N*kKaUUXy`iBK^kFS)` zCkeqRh`e(3{l@%UrM9kszdQ2YJ~d2j2sj+kG->}QT^W;PkbSWljJV*Gp9v1wP+qRg z41Bn}en3Hk)M$c;*=VoSoq+Jlp{|hET6&%u)2Y|gM$p0zCXJl0t!rZ52mi)V z*KcvbgE>bot+R5ImwuxdcKfAYHASRnx+`Ab9+=x&Y+0@gc8YTk3GQ&X1)c`@ETWAO^<)gKVQLL30_XlM-+4 z-3`~uciJdH;Kv-wE=OZY>i!uLDd^E??vM_-FmLg2{s2Y-Y&r>N6CAj5dq#!)Vbvs8 z9&$6P(xiOjqyyETWFRytk>9B*!#rik%3qlXWvl~q6`%kf;lxY60}naIeiYyVpNGGd z63F?A-r#~uZ$ZI#wpTFh&OQ?|(S;6C0XIG{Ofnz6!BDrD)a`b~8Q908(-9Z&pD6L<7c9LWLw~-9& z@8#Et)XY$#AIrdkoj4GV=Z!v~VcPm;auy^9;*aG6GrW8R%x=dm?DI8XyQ(r7z)(stxk-@zf+wK*MKahb zjH#b?7zgfeE}3f?GjZPia^-95v;Mv6y)PT(66bem+71_~{YKC#hk<(Ssc`+UHIrN^ zub_&?H|1WPyypn<1} zKw3ZNgX!v9_Z$EExp|d^M8S+<8OC5ebyKai#=w}<7n_ZBu0>z3{fxIgnZXf=vL0`U zER2uuCbVnxH!7!my@t2n_80}3wluu<4=Sk*BdC^%=-2ZI>W!WPXm8&yuG->S@YCEt zEI@nmJHYIoAupscHhx|TEqKW^HzLS7n>QWzuvD?cdH-yuW90#AG>QXoxlfzh!A$wh z#-I!4nJ)hVbw?{*#}jo-kZIG++%+PJ-Wn0dwAU;0i<^Opd3lxk>{ktyavu459wB=6 zu1Z%TAD=RUOW1 zabL{G4j<0Ock*Dn?Tid;ST;~OHml$J-F>xlsUgn{k9Xg_WMOu88(?5+cnRdB0HaNI zD@h@WB^{#V5cX~R+FU-~GciCj$+xk?5MRVD?&i0#A6o9YFuqfNe}AKmZ+bW%1K=WH z;OZAW3w)acUN?9WW8Qod+zhao)IGSB!+SzAr8knXoFmmBIK#1TUS9W@&R9Q^q0)(C z$t)Lgx-F1krq1*|*06r8kKSb}>#QR%t9g*FD!RW&9V7u~BXAZ8JgV>iW>_@g4BUzF zoy8Z91!tkB2+Pp^Ct3KFCTh^ki(YhK=0aRs@IfXJzz_KY`i|c-!#&NQ7c}gRdYTMQ zoW`y0Gi5HbGEjvAwHcT%i9ib2xC222C!qW~XkdJndx{FVQ0$m%Pr}V=c2uR*i$n>h ztok(B5xZa|wI$YzC~X;!GO8;Xz4|M~ossr|(w0v_GUtd@>e4%$pYc8au7AQhFr%u} zv=hY&{#_hQID4o^nqD`DII9K)2B);4N*jbrHum6KRb1po&tyzsNJr=ye9U8H(wW7& zOBC>afD0Maz2MZD!&jjhF!Ix7eA~-L@B8N)roQvUd()0sM7KtZ{ZgZgolmzP!K%XO z#E*LZBJN`=k}{(K>>SMk3(E=R%g^i_f5>P==fI*f`6gj}|5D?qA|9!P3?-3R0D+)M zpe0b4Qbwr~SBPEDCn8&Z;oz$&agxn$dd4=87`>sK*MXCW$L^fVB*_n>CMkQ@G@u#Lf<)*3yFlLJmzW2)pqmqU zh5i1qgjuB|ednDjRWkKtD7Si;D=^q{@&=bN{v(T2>=e-lUOV7Nu(3kK37Jiu{hfxp z+tYpaBmH(hnXy7tKMi4SQ2hcA9iWq=*in2=h5bUc%_R%=+O~yrM82oaBp2TnP^=2m zWPjXMDc|E$faPf1dI&O$8#2~{C;O2a=};(x zRN44bxcO+;YFD~^my4aD2q${TQq;F+1PA*7{lcY|%nTOpBpqhg-j z%4&MiW;*5!m*)QXc&+r8jS5)i-EU+A>Y&@p2BIbkA*cCx?+XBt)$dO^>@6{^rHPnN zoPEvo!AzZWNl?s`JK2@tfNLSFymGq%nO5p9a9dZ5uJ09@9-4ac;NY{PYp#gDZ!wo(a}9Vm)E!B+=7u@geqlLce-g!joUXt|M#ZR^v>4iW8CR4Ck#7REn6jMemjnAQ?3G%mFe4RrMlWnV~idk)_oP!K=> z%qx5t{m#Z&Z}B-fX5G{i5RXB&(&K zJ`)d8aA0Xs8AP0#4NuZd_o@sMbk$MZS{Y(e*kHf^4#%>_G$eAL?JEv$17iujXpPmt zatv5*4oGiWFCAltk5TB8KsHNThvw#nyS{%@5T!IYzX;nbQZtM>jM@#C>A@GQ^NJ-G zU--rW{02g)1>JRzSFumyn>z^H=~>u5qNQ4cOgeM5KQCrbJVm*Le}8)wOCz)=CoJgp zWH=>Tz(mU`YE5X7Q$d)OQ-IShuC?%bLt9>L8w^NaM0;aWP{Cipq9*syhGlI}>|&`6 z4Jn*y5PO1&n_8a}=l4@Mw>=9`KYZ;{NQ^z~itJD{#}qr*HuCm9kWjtaWd+~5y|6X! zXxRUtw-7$@)>3}5p1KVUHEq^q9${%kf{BxctD;}Zf6qs$uzxwmeZ~gc34o0M3R?ks zlOat1Whkrabzi5a0*Q-g#pV?ypVp{4MV{>!&yz&l7%~Qdv6u-eA0!%Zro7dzFA(ZWe6hIcwQK8E{P3a_$-i8E<;R58eRh!rv+u>c z#QErT7Jr6G6Cv$7XUnoSmwK~aK2^DyxknE6H>=I#2FwiB?a```0Ak!@hnLICf&w)g?k({7jtD^83e{4TpWHu*eSI6BLpV@nxuUx`ai?>A7GE60|YZ_2^-T%=& z`S=UwmqaF66FA9pH6FXjIjz=eVqJwtD6V)2nW8)R>-j<%59uH}f1y_eV>} zaR%M|T^blD1*6_4_RPb4C##8e)_BwimM}@Ua)faaAtz(@Uh5C<^dW0_k}LMf~av z(J=YitmFG-rQX7w{p$9oPdGwO>q}kVjc-@Svo9Ad!n_qOT{`?=>2UxXM zf}074*Z6Rt?uL(@cAAVp-v39|TR=s*cJIS8BS;LPbcjKBcPb$bN;gQibhiS6gfvKr zba!`mcXxL;d=Kb3=l%V^wOlOJdE&nB9oOF1-g_Fq4C{}Qev>DL2ZZnQB1Ufk9?S$E zq0mnmC}FME?sM|rBNE2TE91#gun=~awon4XBH>rrJ}~Um39O#BZre=**E(mcwt6{ z!pNIIV5$o+L1HszcyE;Z;@2T6!Vd`>Umqp^%Ay5ZNz8>N^mOlPu@}5fHEKp#Q0#n{ z^S$_p+Wf1J>vWL>+-l^Xna$zA8Wo1CKr=)g#MW z9SQ0txUd?n?e3}@@Q*3X+Q-(cjfhnwe&KMM5IR${WP9BorBM%^m6wUF8%+97XLDhd z7{(9R!U~(oTGQ94r#_JHuWsXVi`aZDvq#8_e_EM88i(m$8MG`*)}AWirRr9D^#kWT z`<(|+4M(M4ex;xM;oV>#xAi71`_`|)VeHS;0TO+oYd@t3?gIgHn-qVFXu-#nPNM22 zqh_$P@jl;JX^ndjFQCWZwm{VxoN(Nn02EOYk&-_>*YEAiB|y!Iqo-zZeltg4)vU)} z4^`gY*I>$CBH%LwFhuX6)Y^Mtfq6Y=@F6dju6BeNC{20 zPH_C5^EqCzh2jv+5QFcordJEZ=Bqqgg7V$~HLGd?V5t{zK}f;|5+V9pbylS^0pRxv zaHy}s)+(wjj}?+3HRo^LgjNG1;VsmLa8h2xL>^n-ZB^Y(NMdTK9Tyw8=iFMxmO$BX zL&E!M$00c`x4J0nKrEQO$IESVHPxlQoN|B?ddW`6@ifYPh!YE2c*h% z(ZKX3P!`)P5Rdz1b?C5h6f6M8wyIx2*Yak__-1oMHW@9EB<7L&ym9CAbL`a8)LJ^c!dK&ZFgf z`jT<+2^_gQR+pda`9kzPd0op^#^>D2_4Ufb!L9H&?qACpoNJr-XWe4rT4j&0&LMY-;?tP`~kYx;qRwR(TIFiu?5$!5IoZ zgByS&DiGLz98F?YzwNHHN?xF1hn(9w zX;3&B_qD2SkZb|gLs&b%IXC@cDvrZM9)C5zF%V&p0F3o=dL;a4ZV(xvz=>}Qn7Sa* z2N-(apclR~UVw(Cw%USE9JYgMKWJBMPyU7uiRf^xdjJl$nJFn5zkKJ;ZE_0mE(&LL zcrZ8yl`f@AKvcCt!_%*0asg1<95(3_M=|9c1Rvk!-wJD zMO|edG&$H|A6Uf#jpbJ%p)6dA98~fz9^3~|;vn-t3j=|V15I{SwcY2=BlUHKJxZ0z zYQyCuXuEixrYx~x$So^ngSOm|OpQ5DYTYj{v74c*p^O%~Q9>T23SPd~lo40LD&;?` zotFE`$~3`JE&dNl#r(i7C_n$hlEW0g z1+oq1pTUtHhd_$vgXQ(R_>;NMNw-@SpmWx;RIrSPDlio3;Hx#uQDRt0Y;s;y;{GzX3cIXPk7R=>H3;nALcZ;BpzfE%_;Rf-&R)um57S) zKVp{#b0HGxe3e)UNFLWoO_ZvhQI(dc zxZ2=MOkU>%^|ORWX;}NIX0)>w(~kqG@Q7 zbFcbPx~;Ss|yruK89GgJ`#cBgH=jSF=A#d8axXiHG5<8u;oyLpK@{d&XmhbvAoL9noN?tMSq zp;nqs2hdX3rrM=L!9kX7vXeqE0}E-=}<5*QDEKVU8-HA}I483c3OdUECMt zGfW%o0%HciX9a<2Yu)Un}=V?BW~0-$V~;n#S}P$^I&y@lYhCczEyskkN+ zXAH=BT?MpQ2GXbj41V)+aV^AGd$^^GhFw1{R+{jyNQlD&$;&6zZ#A>)+)s8&<6#;7 zXsD+hHkv5CS0hDu5>1}Gy5^5s*`t_pxmbFsOhnK4PT{EX7gr4EzQU3Uw&FYJ8t69! z=vuEQM6ci2I={y;VqO`@PE?nZ2?}X_TM0U6D9YdEUBLO;o8X#jVr~5$DL^6}Q0K>T z3xqdj?9dX!^jalL;jJEOIlJb@(&v!tF^~DDuKY`n;?+3PnZI-R_rfgUQ;o^GLtnD0&`K=iJjsM_amg?b~o_epfxD6 z1c2K-pZlTb?A!wP{-Xl?-%upINIJKYWLHb6@F}X_uCHOz%~&kOp0;C~vcKttAg6T9 za0_7@8ug|C)X!?=M-RWdehAMepwih8CQ|wv<}-$;hZEVKuneogNdSdfeaielFJCnT ztFoDW9ue38sPf!Qk|_*Um{#tD?cQ~6`q+Mbf$nx@#BTxz>CUWKA(<6_b%XNt@w9eN zgD!K0kv!1Npc_Slp!;*=dTnz`Ot`TElmf_;Vu0yK$qS)m;sFlMNvpYdU`(8J!_lnFtFJ!&n zAAV3%s}g9;ZCWl)YCIwdVVWuS5XR zDG(-<($w3m?h#II%uA`>@{`ssps%(zwmlud4Z{?aI~h0NWTf=nv}bH+nOcf zAfzPFZ=jyNcC<_ckavIT24N@UTqSp=NJ7kK>s^*LCQqy7?O!FZyAwdDZ4`N-CDC_? zp4L&>`SXt7S`^JkGN@ez|6KTJsYxHohQyaBMX8xD1V#1c4vXZgzgunZDE^2|FPI0g z%H^f@=x7zGrXvavz5LJ7OO=DVVJ}Q4dy@^igX62q&RbSXZISC8ypi&!6|D|NGbD!OML^}sx9+vb_u`(0_ zq25uH_#|%wM4OvOUe@DoRTj4@r?*4~R4q;Q&$LkDUV4jYLFi`p;CLT4j8n#An_20Q zlC%`@a#-TW^?){eZrPVOfnxR7z7s~-mHHl|Q_CXJvs0_M`fGghNb-Q%A zG;7hqMthBm)*bx#C=9L2x-2HqZ4t+ZV&uP4%}LfU^s}MeKYyRcadl(Tzc?y8)kp0z zK=~VoeWjD|U8;I}*Fw3&tlP=Z7EddcU3_;h)l==W9D>VK83-|NdXFSCQSnc}j35>e zXA=S=`nF%JW{VBy5!MAc*>$3P?2Lp+oInL+$_7;-ar zDf2}z+^qMet$kiYHOu~3S_O8RqUIWd>Dy1SbEg$U(`UZxiUbIJ6$dUI1Uf^FiV67i zG*r%V29=o(e?~AV#_03**fot@;-aqyyyS!GO8orN@(sgRcdaJ^rE!sRw-ZC_w zB=V(&9T4nqLFFK*tYjj+v(i;blF{%1C$(hb#vxN7bcoAvCA?xJt^x!0Fq1Q|4^RR3txU6qFaW357wFtIADtg3)BURF{whMo!*+`gm0PT5GI{n-EIAK{&6-BdWR<_1&-ci)`IS_!BzpRY5 zuPMW3MyX8Wj?)2ls28C1vv9-KkR)R{xm~9Y3WqUY|Hykb)u@xk?+OIgWC0fN7fq@HuRoxAu=5krZTKfw>LU%Q%?}4P8QvOi2-m*#~Oq+0J8-+&l@-BP?9ZkSKH-az-D;5@97Ua^!98+v`7$)k zx*Tpn=6fJWDQ(URO%o)MjP%j!^b<>Xp}wE@6y;q?C>8;&xWfG+rNJfhdRlzp>V9Eh zU&gMpX_vCn=vXF0!=&tb>PY72+*?Xbd>Ku@mXI*t?j1##ADE1$xeN`tM~3BMMguAB zHFE-9I&Cp3mEH3MGo7Pk42+iA+uUDhT(+tYijA~4fe{(%`^fLO&x|=|8YF}~kR{`v z=@>3$gbsBy!5*?cR50lf!ATwgt^VT^jbjw##H3V&mR^bj^k3>&|Iuz$mEKaz1H;<) zTCHjWWPO_Rd2vvcpVwlnXcZ2-b!e$CHTfBh?hMQ#--S||AMkna_B_% zYrFJCii;iMNK$$olrJ_Y?>TTBudB9RzjTfz1|n0>XDZH71q~f1fDZ@S^??FIF$mJ& zuECnA=^`3V1WNT8;tPLCV8}#@&9Uf1VbFt@n;A0Bvsf6#w|~j!Tqw_s6IZLIZg;yk z7pB-UB%FOdVtn8qzmAevr=Vbqjj%Foh;Sm|5e9T4Q#7a>ARUme+975lf{ob&e6+(xxb6kuhtLPt5BX-6;3TWtYZ3&!ez#@W zd)gg~B1uONQ1)v<6P*wX9%i9j`=l(DPC|B8urTprM|&G2OjXX#-+ArT(tHJ-?~T{9 z&dn*hHUB}V!;)aB{y4k*wMO5kcR)o^hQx#G-!z3#e+K*9CUCp++|QIQWsh_G4$uVaW`=2hbbAC?rQ|-2Q4@hpZ3K&*t#iXiP{B#%x8n6DR+7 z5n>NeIxs?3A;HYov<@JP+H)yk#EVh?)($s0c_I!>ig)P+7iND=ycYOQS>2yj+s6eYRucH(q zBL|bB^h~I#{=7%jr*n_=>yNL`G_DOqGj(r88wJa#h*|kb2zTA>OTIg}RL6zI`wt%03uKxe>|l6$kX9Z-!LLTH`uol8 zS~ynMf@MuQGuMMl=>(_S@A<-O)l-*W*50%@v_Z7&>^%22)O+zfV>u(E#!>0ER29a< z6jOWhHpo?`B=`Bb=tc9%i)2NlJ=6MD#XkDT4#DDiWSb+=KaW?#jZ$dtHDAU089s}H zrAizCuJZ?G7^d30T+`$lKlgzv?l`>WuRmO?-ntwpj8aL7PVu5L5k{we|Iu+dB)L9C zH&VJ&v=*|onbNH|Fa9aY+!9yhR5r+J#at$lKtLt5Bp7=*2SoKJLzMLENz21FGD|& zWK)^~$pQu9AaFt@mXlHQxDGyOZj0n9;M>cyj$>E)He%oiC z?wDi8oU-{tZ^yXzT4+GGOI@O8nj#pjm5RJU_Pde?7zPIfe{k~K68BSDbxwKlz(n@k z7S%ytd*U)K)MIiA!fh;?VwXqZpf}#|^GffF4g$UEo6JgUN5y+Q0P;pE!On1j@;Je6 z!20lZ?bpkl+wAo@EzlqmX-@Y7!688j+>Tq#!F=K(G+1_}c1X7u%Z;+>Quq7E`TNcX z426#RtMcwer^oeooR`B%MB96g(L$sK;W9scUpg-Nx?a2A-?Fz7r$y9Uo?X|!x?c|F zySupvGc%fuzz`*+$iuGO2KxEt8e^?~MQ>H1Ag1dnez+JNpTAs4&b3(xA>xx=!$1k{ z)JRjiTfX}uch_HkLCTb`(jlf(+XA6RLCvYS-kG!}!IYe~-{G{~!kGQ_`{@0f?1hdK zWPCQ+SwC!znHBsvn99eKs$;)*T5=3L<8t#gz$8cKP6N@Kz$!gcEPNUUQe-__Q>2o| zg6Yd&o6C;9!khN}N~&pz0;qAG9eA!Y|C}lTX8X5qxI$^csVCW+hW^}nhou%xs<9cx z`I+P1Gj(9<=Mjp;uZx9dnFWoG|sC?ea zxy*%LN%?D5uHB`apxJ`cUa;1mYUr4}!VGv3eREU2e{Or0BXgEF=e|IOSnSf4HO>y{ zNn1_>;j*j>T}ZVE>_$tGOU?}qk7~(nX?S2$OM__Z zDsn+RQednU#SN(Ipa7&vrd?VTpgO8wb%?-r43H<-gaqNKIiiYVg+)u}W$Y*mEtb!@ zC9Vw2+Eua#=k|fFR zLwG8+1BPK$fIg+0!(UBYKX;whDv?X5c+x}7>}>K=dcRHVSZ=Y@fuiJ?3r|w^N@C(Z zzF)jcs?I>nR917~_dt4)Z_Rd+bxXu`eAoSkhdAKjo@zxx57?JINAaEMC>tm_ zxUX-hF!)N2Ud7$DuKpNj=)g>Lxe}T>1+-%c)2H>zXZOp~^7KS!W%jR_p@LBe7G^q8 z7IKDiqdmgP@wV@LUkQNSr@6YGsB;rq=rzXq@~+E7 zy%k`p=6Kxz@-Pwen08huwaZm%L*3im(o~;jCC6H*DtqVuVpf}a5587xhR!Jt#>U~D z5zQVosJIMTvf!Y@QE>50jQj5OC$xoII5$el&lumNDYU5&ve#=4N6QVz0a9h}s+|b0 z_ZXPjxg|`Jf(1-k^Lv%KKR&;cWAuSEEkcgk27*Un%v~Js4;YE?v48>;)YkE&gVxkoY``$fU zNJJrUT*^F+l0{<33APk4nO}uJP&)nj6*PYuEPQu!ET|+A=@i(|gHTZH%wCt?zyj}j z^ac=v>{Qqbud%ay+Wh_Ayp5i01;7SU%%pX?Q4CBp<~~)M98m40116O)pJ0vJV2|4X zRx*T17HRi4On3m=_u$reSS>8Xf`YvLEn8H0hW6n5q`d~f%6~D92`#Mr*4}9mr~GT) z>H2owov+S#_g2^ZY?z^x9ZcTW5vG%v%$`h5Key!Af=Glbmhauz^=Hbam+w!M zrqo%F@9lrhOfVWxY8K9rG3}i1#1u&7Vp}Z(j4CNjgU+Z4;Hd@M)`v1PMci*~kBZGS zu_9UDngfUX)&mTHD+ZQmTYdcu<{QLVz>Z;_)<(EM=|5JKd`HH?%Ej+Fjn{Xkz$Hl& z0E|M96_|8_vtgw?du)zRO4#rW?ddQC1oiXYM}6w5+Di7k#0P z*R3jtw(u4)oJrJtC%NUpS0aM3UPRM4rR=EpjtzR>LLM)Dz^Q$R1zp_zl*b(9cDY)! zvDtXe;wH{VQ8t*gyI9$DW-`Q;mU_z;bcUZuX#&6xHkE!G+S~TT#APt=(3uy&S#64# z9v}f=QHn|)s+@3SL(r?=p*>ZiY}EK!8SA7Kl&jbhU3nYN^6@2NF+?G1t>^A(EnauYXt;Xi94s_{3w9SSj2iH1h@fJMhcy zk971Q%we3w?3AegzYC)|EZ!NJxr+D88Ch7bADtyc$Vg- z^#UzEIQW&v10n@Z?BU^Rtq_-(3_55}q*#^-K6&0ImI8lQ{vKs6zWIfGkQARKc+H6p z+uk7ansVGTW`Br#Xq2N`&>Gut(bdZr$=;K8=bKbkf#pF%J1QVck9+@c`#f8)f-+_1 zr%5fd?YG~p935ThIOspBOb^dg)|8dj7rKh*y-D>0b{AMZ=mDJqzXewo3wgAn%#79k zt~Jm*U-;S8##^L0c3GM2ep-|e(OspOHBI;Dv(L1mzK-0q>A5!PJ4mREH>ilKa!ez^ z2ktAoMU~bP@}%cz8*LNUQRM8-Iz`R1_|_w;&p@WDBDvVFCFot4ewc+TBAi&%L1{Lo(q%de)Oo3;wZ2~amO4={Vv&8T4Y@- z2h_^+q#1;J3^>d;;K&$Ojr{Xa^v~eE9o5mPQo?!_<&u)>s>=FWg9x!#MkRmF36it+ z87cL(BV^~jqXx~q3IFi<$s2eJQyD1-)1L>yK3i9I zH+g?FT-+GE#>Jm+y1w3mCTZu5r3I`LQ2zF`x>7P;Zzc_ca*u>0uH{hc?x?Z?^%Ge< zyqF%CilQrORQUa=U-pXD*HU2|cq>Z)|2Ksk$eK$jRoUKD` zQkH9S+eIY3u&FHSPfRi=u) zdge-Uf@ujNBD;TJYca?j9+C9^v-fy|6#)emwu**31nE#4S8-GT%m7;dx`CEMXjBOE z6yuwJcTSf2+7ecW54d~9Eya#ekuS~5m1<9_momf|CS5NoR4H^o#^sYTfoO8J@Q)du zjJ#B?>H>ddDrId`tGv?MSPQJ8x~(d^t~k>lx}g;1(L-DMU5&G3J|GCslo@v7|KW+?|?ehR7tWJm4z45dy`MI*w9la?UGqzi>tP!%X*5 zg=171Sj78-WVu&g;6!@NV?OF(PKejgRH2GT`{qFoM9+&0`bRI>4&}wypTUZJ5yhq` z$Z>|{(6tamGfMj9#S$onRaU0>1IhVH=tFdk;?hd%l1`Y_ma4N{)m!Kf4vO7{+Vls|{pdxayGVhtj%53K zvsA?wZfg(b!~js)640MY)gFsBj05q}8rKpwG zD$%+|HgnyAP_Ha+V!t~aJM%Az`#3}!0M^&VmK$ZIIQ$L)KLvD>ZtKC7Jj*-weP4+L_i9NeUVC~xEy zHV^Ti;YlOX1Z^%3O9*;U;AYYxq+4m_M(~VdSLLO~!pMufE!BFGm=^#ti1Keg&w{5{ z=Q*8QSlGf`s88Rs1-_cc?EZS_^9oV>!4dS{X1lD|p#RQQNb?%?MGs8|4vWux8w?tI;?`!b6VT_AR4`sdaBdV<)?rWagi*9%soB%rh! zdV{{W*`qx;tMdkvcMtI6LDOVO8!%aNkW>< z%mrX5Z9-R``XpaSa+b+^$uql^jsAi$3U@y`D-pq^2w?mwAHtFi_F7?kqSvFtcsR6o z9$`%W9b>41SY<9vxCR zV%Qxc>dh87`|J_xq)Qg9#yr=;cSFlbIpIfixD>V;{_zbcD<$q5CBmsEf3{Gl5j*c< zK#On?I)w#)U{l|Med!OiP}3em!dT;z=0*lYPA&Ee5vXFSQX3+{Dqgmh1OH6h>U)&` zxHyiu$Lh;Q7RjzW&r*5YUE(<4d~(nk$7w1*pUQ;fbgA85oO+Jg9mo<+b5>-BH!5sN z9d>z^rhKau5;qm>eyuL&(P@;4v?Q8Nk!GpM5haOna zLM#|ao~bo!tgT|dm>#SiVxxch>h%M5T42Bid3=5fh_7|zw}}&AmndRdFHZh~84$>Y z3G^?%`|q=Wv>fU@1vNZ8bRG%#8-SXgfDWR+19t+|;R5FC5t#kG;NN@vd%?r)0i6N8 zv<8DN^dDXvcoo3x{ddE^xc=Xle*orx02UC;?Zr0E4U$!-#D-`Lyo^`dT-cF5d|7wM z&n>XDf{mrx(i9^U@28Bs$6H8^PF7w}QSvjuD`;c}>wZAujdj0AOUh1LKvUnv37$du z2Q1MTT`UR;w#7p~#*(N@L}3y=7E*oIjPQY8uBWdam+{|=MFHOev^Z%M49}Jr-4ehV zswB<@3p9VvEBPBJO;U8I%UY?BOZ0O;KTK6_RS!CPiw_rk(iF6jBIbXBEJaj#iXgU# zF-7NT1s_Opa_~J^D(|;LrZ@;)%Re0_5VAv#svXpe1|a|c)(Y&uL@EgCL~$OFA}Jj8 zmb9S^<>gY#N}i~4vsv*Nn!VTp?vITXtoL9tA^7j8@ZE&*X>YCUWaYFuzL%7Qgem&A zV-`y=B65l(V9pJ0L0(|Q#QsoD1hU&WAy2?hAMF+h#JvUq9rV(-LUtDM4fN7q&mym0 zlTEWb(1XjOEW7D_a&$*pEu2j7 zePn+=Nk>4X#B3swmh&E3z|E51%SX*b&&|bBjtN0}glpix0{Ka$4TO&Cz1yP#3^?~~ z!GN!g67~U8b$WVB5H59-lhWh|3W@2~h5M8qGI|kN8|A+SmY%SAxeNZJtPQraL|y0P z>wco=uZ1{33WM{n1VTX#Y|V0r1@4AE63+>3&&rEr3mixrtolX#$)bOSR+FwX52t;$ zz%$6Yu~CMMq2(z@Ge=uh8$#(}Yo3HMedlx)7=i(#e5aA>HCvsInJ}?MJW*3xCKe&1&FH~HwJ@)B&hLu#}pDmhw<8=xrVO`xfzmalMCVz z3L@f7oId%ASu+a(`M8HOE_iyEK$Qi+c5S5<8ps6K0mnJ$EF-uEmE^8trEZiwR11OD0Ns*@Dydp_RR z&Ucg?%*W$;byAvBS5Lrowo#v0P^S1Tzo%i~r+_btv~b^~qh9s-4v+iY4Ti#}{ki?) z?^!Jdg<($I$2(U*0zY~W%0e)TTW?$}=22M})jEsEd1%GMdU+Rz$7!aqkwxkDYW>-J zmByll4mGH1#9YcJVv#KZO|t0YXz#%v(@KZfe7ZT=%<={jUB+_z5CSaOXpI5h!=?#1@E0ZmBz@}#4*0&u z2>0K^13kJr;C7Gq1T4khkNlhT0OaGZ3w_=2;3EIM{GUevYkoxBf1KvSi?KcV<5k8} zK=(Yh`2cfcc0C{E<~g`@Q+w0IH(Ry4Gg<83A2B|d%*R$rE>Ei?J>RA2&c*7C=(yH1 zNwe?v+8z}HoAD1gmUW2y&uqD1sluJ7Cn~!it#ne!OLDJCb+QTAiIyV*PLO*R&o077 z58FPo-2mHK*yvm0#GB=~kdU9#TZ{PlGFJN@Dim~Ii6m+(F7EKpW~cx^!xw? za|;J8gq^GVa$;H9Z@)DpnNPZ1*=~1^idVe4=)OwFvnVRL-KC`(Ep{dC}Jz8~sZo;k`AXS6TrQ5?4^doL~XEA*Wc8ZLg zgr!_>C$74k4#~Z$u=*{wogkU~1iM4PU5|5Xnt}nAZII<)RU4g$7z>%zx7YUwF{eRC zuU#(wf{;H#e%Si}>;Bn=hXm7u{OLaZD})aU^gkl{uXO&|gNOgMK!#epRoePaSO5M4 z=qJoyBlRf6TIPrr`WmM}pU(@FuPENe(v$p~*n1FbYoHDNYV3yB3Cul}BGQ5OZ+Z@R ziU$W_L(cTE60}UZhU*0Xb6vG_|2bty_BhYmm|p@ckLvOdFs^8VQ16{_kC}MQCIR5` zALV-ZjD994+ur%*HcQCf0I=RiDEe0?i{(7->srQFp%#X6Yu)&4uYed3;8M&S_m=@` z5{s{3X%EQLvz46f-tNI6?o8dPe^M3zRx>_b&ttnaa?ZE&c^3!m2q{QnzQB@+gX6I2 zd#uZsFfE(EBK&994CFjSHARJ6XB_+aV8LgIA{Tqtu5c(Xw>C5;hj=TFr+Mmcu2dZ) zSkble@=yC_ch#xFYqQT^U2H~ax^Z0$FS6M4P7LuL47N{8CGw&Jq$35-zXT|`@7`T$ zcr!qpHEcW_1#l=25BC7|XMlojU!yOqX7BUZ@2Oe6rx1UI5puVlNOpHTzYYrylIqZ@ zR^jq7v|jyrJ*ltjLTg4VoA=A&en353)L4OIT8P&5?#6Mg?ZN0g?BnCPA0Qzd+&$sL zj9~MBU~0TT^`~do0BMc(>S$|wf9J+7_;rH@_>h{nJ|&2C)57wjV(zNT1wdy2d~JdZ zBk(PsMvAhkd?_gZ=ccB(Pj2e_>*tR4gqLcA`7WCPnt+tNAsiF-kx^^B^4a@3@=zx7 zAg_o1<)krP}=3!@eK{VA?Zy?r5$Zc%|Pk+Wg6kZ*2eXS$qfO z*Bv(kse(3A%mVehBnp6eO?N;#5QMqNbLTz+wx>zE=&O3tV1eczQF(MHuN#U*JzT$p zo!vTkI*Yop=efkMzZSkTUG9D*<+L-g|D}6; zsUPdlDHedx0ZJvm?ym2Z`;BN#?P~Ma5p7^JBmyFREXGep4j{ICs9BgSql1d$|08($ z_5JZ&>x%@GY8gMiwM;7awZC*1a}fxBaqIY03NQADU%lF+oN#+TDhePpfGcu29CuG} za9V?9r)7Y;SN_@Rzn&0?9~VpS8yX|a%p**I+01JLNzKLSKggsLT(0BKF%lYq6|6_> z&J~{njOnn=P_uAQo|-G$ohhJ;k9U9T0sN)~Jsi8oMvmF;n*fltjkFvh|_U&c@z3gl(}^_OYt9-^+NfjQXJBe4P- z*83_|P^>MK`hFhT5tEcU=(>|@>DMd7Z_D{kC8rX-IdOm_KZ@T23o}g8pj+?sUg2b= zR%!g}T)s@kLCy`-HXs_CW{8!QzU)oMuCi88<5uct-BOD}aK7}FlTRek;h1$%-PLKPv*3Fsv* z;Xva%-=qGc;(utL1&UjJ`f|ImF(wk*5tfn^dji*E$8x%w&B$rrdp*e@~4zBLvI92ad?bM zS6e;7P9ioo3T|e8NX*w#5Pl5T0O@zdd#zx#ugbQ`@}CR61JzjCri505fUW=c_`nH2 zKR+d6x^Ar^l^_*W{#@fYcgi;7GK*t*upBz=&Gd;rJMVZY&B0tt4r>##yBti2+*|igg4!$6!Wya~k9W1Au^(_SVypNX1 zK8bomDLo`o9y?GT|BkLYC-V+dTsCZlUy~GnbcGi&A8K?F+$gJKYU}{9^C-so#zXva)bYSIV(0u}JgV8JO*_E#Ynv#EGP{V&krTyXEZSY1WbH zenP|)YGtxioFzz8Yo+dLjizO$F8jtnDm^#urNhP`V1RgZxRQ?PTUDp2kT^ct0Busg zns-z7?%pxXP#d8c*byN6&DgzChbAno0L@}i6o&5cy>@8`p%fXwy@Zhw$om=OqF0IfW$++vWTGjg z0Hah$I&V+TjnT2bL5#B454Jkm3cFk|Q!mlTaC-QU8Gn3-m2SX z8enG$g@+HqygHP+Dxz2J%`^;_phOJp?#IW%vLcFSWscdrrZ^dz!s-g-6$!f#`F53BO-!60D6aIz zHi^68g_ zk+g$0c+yC_5A6xM>L>04@1z=^lzdi=cfcqmAt75=+u3uUmQ@SaBzaD8eAO_VYA0`4 z!4wYXuPgHQXLH8^@jc&1`Q<%wS639jpHlDF-Y4pQfkU|y+$ZSrbc6%OZpe9Ep#pE(y_!Xc1-iy(4W20e0bt-?kGo)N4 z+o&Svf|@K(o5IgpwvKx02ImU^V^Fl3GsAe)mV~)2LS(Wvji(wRFCL2@8{zsS+ZaD` zl&!3s>e?)I?}o)Pp+$zr3r>cex40(!dDn- zPRIFjgwVX)d91_=O47Xf@%o;Qp0P#>Vp>Z*hj2z_ZDp~mCx@aYm@kb63!iW}-j^0w zKGuK!#Yz&%ASRPhm7LF?b`KVsgKfy2+l;|=dsq1T14FE(p@!SBI6qbJqm`5=y3AwP z5;+Pc!b(qj%~H%iX0}pX+6J3n)Kuj0aWiPD_Di^aqnnPiZ`Yn5NLi}l-Cy{+rDrmE zp?iv@ejK5ZLU+1MPs1{K@%Ga~Vp_=9DUvHVxOwNvh&!q169SJg z`?^(7B&kyn6Eh}Gj!v4|a)u%cD!8efTb0y*#TeI}U8%13C#GM84sPO2O^MEm!b1JC zuYAXViNO@v8C0~{6uB8R)XJgpnsWm)G4Yy_@rrYN6;)+!%AYnvvwrFWMOQ5~UR@(S z{6pO+s~$bAQPd|^cx^FH))nl2wE2>)U{h~?>^G}`mc$csrhd(e)11YO`uOG?k&Qsu z1DJ?dhe@R{8xxn1pZl5M*^B9k-zgW7dORs7%9W{r;%AJNo|++aP6D<;GFObzUDXd? zNJcEnXmlv8&T~|^L!)jHR!H8ApqBXFn`AVc@ip;SgP^u0?s8%v%?{?vP2Kvmn+i=P zs+im_p9M>X=n97T3K+SwhS`339URdhA!S-yAb$CiMS4WY64uaz!15WZZ33|88+?t) zi!LgB;LBf?R|ue3B*dhs$hjB$VbZlXM?O&+ZkL(qiR$*_d_`7Ay9DZ3#`uQY_y8^l z+8!~D2?Q%#yidbsJDoX|6Y8c!7thRV%;3oTdYM>Bk#o{Zu;NB?`s5Ta5pC;*lLd0G z_e(>`8U15Bf+`pqrgVbAWs7ONLo6jm=DSXNmr>j`0-Em2xlK#P{%>{*%M_mxS0M(! z20E(o;n-B+?59%fg$)vM3p6d6@{|1HbHDgXJSUD*oPnL{ks%FnD_1ln;DoR+J_TN0z&VgckXDQoJN3sXesB{v@R~$VwC6&&xb}WYU*XL_Y1N zn{rF6%OtSp#RP1jwMBYupFhYs6K+&xX~T%@^arQ&uy0E*mF|#^2b~0en`GDOTYVF= z^~T&2liv4&R1S+#Lur{2;jERS^*-sX55(+a#PjfjdlW+51980-8D9lJE(I}j9Cegh zd0w6;hlQ&vk(qxIOu*FC)wH?hYYAK$^Z$>lcZ{yHjk-p6Y&TY8+fI`PjT_sx&9<>^ zr%7Ymwrw@Got(SR`=0ZS@BGQg$R7EzFRW{=x#pY;%+#_)eKLXQZM@7R+&RJpk$nuD z!THxd3`Ba|g4CWbLVaYj4lT_SZtYTzo}%_$FO6S$U`f1w^>8HjBzxkY$_^vzZF5%x z6%w<3xmf{_x|oB;rsizyy~=!Gta~{}bxfN5EXOw)`hq;7{t}&>Czf8hmFI;7Di!U; zDb+T9bfFt&u66d(LIo=$Ckc23Pb?;K3`SV1m-dY2?q3kiN5$iW5#t2zKj){w$2N-7 zoWB6|OTw6S0XZ$WwJn3$m9rm`47s!4vWzJ`T}!Pqjr&Ow+>LcDtyBH}LDW9eVjx0K zg@4t^C*q5-IGv3)^EG!nT7C^ivrfxdsZyEBNRycV0eSx+xrGw`5({9exF`5nSi@f% zUHbwuGjxy;W!0CarutSF<*Rl+1fLQbqqCniyLYmNd7-g(DoL zGt^-nF-*-EfYXQc{i*k^*g)|&FQ;@sVAg_BKb7lQ(rkFXf<#k&OAXZwIcBwu{kzle zIIra&`0*K5=7}LolE>_c3qt1qz-3D&9Z3}p=YcF;T;}Nd3&`|Q-rs+j$1D?s~Pq}dvisHK~uJqj=-vlrt15o#Ctz! zdz+6&K}-blCsvZWyK&Q?e$PTkC@c$nhw-19Ed%?=oXA9~_qGe@4?J)xkyWwohj{86 z)xzoQDaTg57dzli$S2z+9&zUr2U`B)WyZ=ru7vv=Z~xa*R1b2x5p!s1($78rc-y>- zSha244W)X2nUQ8PGclPpwYR4Z3{6YZB#A64!tPgKl^QdYk{Y4j-wr0mGK6J3NHriq z!JeAcEa1|UUL2a6h`V^BJ14NRIFVA12y52FJ<2>8aSK?`C^ND)q~WM`W^SdRk{-xBH2|jG*SESVntM;)C(;vV(xh$?r z8k_9Jj36T;SIg$r)n)M5+t_4E6(lF4thT+~L%FTHpj3|Yh~SO5nr@ZqH%SgkhSR)> z2t?}SG}E}28)GRg$2ulThi3IXIxS$IV`abV_nQM z&IsD!uy}rWYY)ip=Q-3D#6E?o^ePF4)|sQzuZyjS_tqMhj#mk^N3dwF`r{ATjBZdl zG*OE0OR_PmWkZH{Vza)xG86ApdSJc3b+3b;AT<6gr{`#MbNAinc^?PGgZ+ORvW*Z+ePz%F3G?mlLD&#L;!x8y0@qi+rco|a8jjuKaGQKE-IVT zxCxn|sCb>^>SYuZuQj3m!m-uv78*|0*>*P2D8$24GPmSuTZw^d#6f8si837{r(6@^ zTl3^U9*!70rP=6S&MwB*i`c$%IrN;trJ0%QnbzDfWxC<0bxuArf4!6b}dg0f#J>{cT5#% zO?fqGVv1u*@Ed`nV+Oi!;uhVj>>S8g*qK1N5Byx@`dY;_0X=dZwOzNX0a8l)(sdY^1U)v zI<*Mps=#sUbie5O%Kr$I#Ww(B<9u7lBTM#pqKhJrocefDG|b zhx1t1v)f3bKzTQB{8mnFX<}G6541~)bK0F#DaImBBu#>9Y zLiFLTPmsT-`>!q|scNr@6Y0YZ*V>GReBXLmzZLlWQ1baX+YTN_Epsn@FBYuS#l-%z z<5eU5Mh2FdDalk-k&KOxj?YX<8iumB7e_1JlGh6|cwn#PNsM8Rb7q>07)$dz+r?|( zvny-mD}|1=p-pw{HBuE8Wzx*rNYqk9*vvp~%ej|ITF4P<&BEA>Dv+OF{`zs45O+9d z$eTR1nkqlWppJ=^-TFMeShBL9zQm0%`V~QT*4Z`g;76J**QR7DDNxhrk0+}F%8q6L zrr8zYq;o<_q7ebUF@X;F*^{3ucXQwjVR8$kBH|*L?y=ZEu1O%_-WSy}DEC`GT5U#6qYFJeQ$|7jx@kRaU3Ejg|SQB`*T05Q#UeD3;WWJu!TiV`kedUY#L?&jiv z!d0)Ylau*4F@{cb$2iq{mB%DKgTV*0Y9P$`;* z*cLVzEJ*dqDO%q8U$30MbD{{A*ghvk;muPmclFFk?PH|XsV~mW$T2$Ht6G2+-Y%dw zK98I7?lT5*k5FqpXn+>`JLvc93m)-85|eYe!f(CL2~-T#5K z0ilF6))u~9R*{*x@5^id%5z~sJ=X^N$nQo7mm-81fo5Gm1O)gX&IjucrU#gldd8B5JZr$TAF=Jrz8|la zChFc<62dZ$wn)u?nv8A?1(Yhgnli#nSjF_e+hp%aUhE+-bOm9F@83Ji%hD4P0(F4H z@UMO$-GXBBfmDj|f+-e@-_sVqx8a`1yYil@%j)YQ+kWg2>wZ|snGA*n>sFj}BpV`% zo9+B1N{G?PR9!-iSKY@?vbNnVFw(D(fSLl{@Eypdp)uW*<@C3314Zs}Ibf-^Tfwbu zF3_@@95n{t_vqfCjlL{WaT+}JRa$MK9kCBwAj3JMmq-6L4hSZD<6y2R`BXyGA7C{uiV}@xBIF$-$}xBa%O>xt2QZ-tCC)QB~xXkr%#2xE8IoaILtq4KAOT* ztq7Y7O3VzdNMA^o_j#YZ)MI|+*H}qYL|9u1GC*p9V1hEAT^HI9I1nTqwvJNoGqq(3r7_<>5k#X8v8VnDknxhMU972l+9UM(zL#QtCBK9EHTyn3}%2Ktua0y5ffPG1<5$IOelkNp14!z*Vu&vtd1FK$8 z0DZ@v0p4EbRo~*N)P13uyd=4e7;l+(VdJqt1vqZwPvHtmjV`WIg1}8@=7UOc!Nfwi zq#$wCPt;*+K(1n5XV)O@L}sSyO5$`>LXZGd0N20E>&MqQB1cvV8GnFtMC!OOtP2KA zj|D&>HPj`R_M*#>D~4bnaQfn31h%Wnsk*|$Pzh-jV?)78ht)Z=-w!e0(s4Ap?7jQw ziwa&0nO0*Vrb0eOK>_JBzK<;{t(C728D`LdE|G1JipHW_-JYfPt+~uPW@vR)5HoSr zb_+Y(TogLsy&-2|o$tU=I328B(g5Onq5-lR%y0fj*Z_HLZG%UW7RA9H&JdXf%V?VK zL3JceITn1=x%CKM&b2;9)!D8VKv+)@1x7KK1oyEN|v*0q2L#qy4prw{; zhAv+6E>+ixXYmGrM=nIf^S(R18TuwfOhtX!yS?eleynd? z_#+`3)^m;#zIMPSvG3C)?p;Vce(DN7&T6C#uYf56vyz+CJ~fKtO{j}2!VR31!&OLK zwFB$zu$Jy9MGc}=a&uUeDt)mbdqI7rL8 z6mOt$DMsf2-75P85QcFlNi43c%^TG3JCk{a3f+vpmY0F1r#^+QZi=O4fu3oOuZ6G_ z8EZZKZ#&dkhSZVyR@4+RBQ&zyPi$}MUe8Wm6ulCGim!swvYLpLz8~wXy*alQCfO@%_{d7G(+RX*UxWdZ%Jf)`2 zZmU}&bNy9zz(s$7Dr077XwZ9yU@u_px+hm-fpa3Lqrav2gE_>S>zaYJ-Z584Fo33D zP%#;_-vz|>m6aCLhB#q-BCX&YgGc6moHQwCq~)f~Qk)X-_LIZ(P%ZyqWq``;TH~K4 zzPBqc_%YO({kl_n7GOa0DPB)8Iqo~96T;|7KA==^B)h0jGia7vvdS4PvZ1-E1nSO71xGL{B!dwUUO>Uf*S zNN*5mdyfy+ef%p_>3u(TvfA;qZN7Qk>WpMlc82-4%Tv5zRBfZ#XK(^=dpI7g>>%lQ zygsSy*m&;_&K_C^SF3y*ygyrG413)Puk3s`mH6VIVl7e_6SrY;!L{nff3p_8fF4*~ z+|JK!aXFg(Kp-%)Fkfk8%s25%tA~HS0aP*qQ75Q@I360IT13po4MTv#(WQAQj z%!KV6$YMk`Y@;19Mgb5g!nFL44(6vh3aZN9oA2s?T7hYp29% zY%K7w*Ij1;8t&BQc^^@?^@pvGQkzqFM0tF5-v`#cYs}IMLQNNWw~sWH6QZVr4vFN- zj>cNEyRi9(JLHXJzNYhSzqiK1YUyJO`#+V zeJ>~r8$-+YbK>Z>c9%sXV56oGh(Da(sG{2*hlAWYpWmlgOg>hi!pGGi=-c^P9^Ku8 zTf73BX891@1F89c(l?pVh`X}1iP`{GR~hT=Onp^uW`Ui7<>A%EeFEeLZ&^BaZw{R8 zFN_ePRtD~ukG=lO83t>021%?=bY=)vsmXX**;F$p1 zp%+Fo6w{4clvAi-0Bxd{NbO#b^>Af=NrYE#4oY*I(B$Bg!s6T;Kq_kiJT6{@Ci$-~ zs5U(hAOL;BT3*`yc_KyPIK$abB!>2{1{x5!*T*goYK%ICm!ZWLhn6QeB^4(*2_F6R z1+KMvnhWKYp ztjbO)8;xTEIf^3MKYfb}cHy!(Y2UzH<0Og-H>reaj!NLuV`tks&LK}$7dn`z>yZD4 z!NVV@lY?!6e}t#W>U=xCzh2=o%h33bmk=L>TqHwXntDdSw%~ zT%h85#ZWzwkKuGAOCRI~kfo*Bk{cMCFW~S!a#925Ui0GhEtWY^H=jt+;rl+_Tkwj5MeYvO z*ZMMmPSjETX%{~M=#-_i+{!6L$m^4yIbMad4Ge;W-v1)VI5+yYm-E3-l+C)qY#XN~4XrXyv;Fbu~AK%0x-6 z6p@Ktvs7ICB}UJX+$9pSzqX051ZS-27dTjuyP}fuP_7ZtrXxJm)_*odmGOa(a?Vk7gGzm18f+q?j#yhn2ry2}QCg-*ea=ChRFA&iB3F)LgO~a`m)c}#ywqh$f}hL4Xg6Ey^Uqn3;V#my&Pdg6 z@ChTLL9QEP(S|zH$+RLQbq$!2HhFx%blxG<8lVn@4 zpi-7Eu6F&(bRW9ZEzGegwg?`Fu|LZJtr#6}nGMN%E#+6zVSEbLIC=Bw%ee@cRX&tw zC{@W!kzwC&mm*}V1DT3VOCt+5W$g~3bjfqx>^|T!aM}Y47e_=8-rw&qA)BhN@TIi^ zy9%`Y2P=U$9(Zt49KrS%3_0+04OFx?wWU|xNurZr8=55-mD`9;t$${3hidVt0)jvE zt;&bf568vmbfG8L)hM4&zGuCJlbv^a2zEYC_Y3V8-q*k5OS40v8rx!6gyI*J4J=83 zrVU=YG*g;lt!RxbkOhbU(+W`6x3RVmz)$-cg;tw9O#fmE8j)SG*6v`bb51+!lCgyr z2a?TauChDXyP~+dqQr7P&5$H)49#s!b9CwM%hoe*YxN9AHs9_mq8oV@x${Xd(Rl?* zL0r$lRgnrhs3;z<$4;*os+L(~V(WiLV0KatR7*&gXV)5+RG&5XW*j!H+yh+sH9b?` zO!rlyv*Xa2VTd}J{xNy!oHGOg6%5MDz0iH1lP}3I9tL(I7ZK01w3O+Swn|xJqxa+M zv#f$F?B!R&AfOAl3%FN)=Gc7?-?yN7-{r7r1#SRorczV2hnL<*wn<`oU^pCbEdiOPynlHr?+S0zGqji|%vV&w z0JM#O-itL;g@RHEP`u0?hh|Z+*h8EgdyRM$)FyZt9sSQw=?ORM@}1~jDDT(3xq6*K zwr?cuyd4sh><~Aq5~gT+#wgH&{>rL^y$0)i~;zJ zh^mXOikZ2!t+i*WpSq^6OLD0jq=tjGI7KEMH7y-$F*P+S8@u475I+YyBUf$R{5n&R zo~$P=et-m4p<@g;v{?T=z;aC0sGg7JfMve;9qag=@9b;J*Bz@`gxfE^Yn4rB$*=db z<-I;xG@loAqy`2cqM5p2{CLO2O}OgsHXpW(00Qs9gdJdTFi=7jCH?<8oW;|<(xq<{ zWSAu?6@Ri=7eIMH-hi9`1(KgL7!nJtXfW<1mp+y)rgeY9L`KZQA4G%I>?db$5 zq%>>GF6&(6&89w9c_IeesjcL6sO%UT^E{pIpFI=36;^VS_-*9uyL7wpE0`2$r2tx z5aC;9oXP;*toxg|Dn^&Rj_ia5_0+Vy&ZO;(1Thf%U5#)2l<#Oc>#X#>pWpbYCHT}c z9f+Zi(%E$RI5U;fQ?;~HwUig@hK1TAmhXlc*;;D8mLDc+)MO9nDeC(&>t}TfL2MQY z!$viZ?|PEzK(!};Un+xw@&&Egz@gWSoLX4HXWhrpX@oD#>V-{Ovvy=9q^@TGfV}%% zAaE%dJXEBxqo)95J7@!@;M%{h%u;cuhe9BMvb-wv9^fd@wUK?3DpK}mstb;Pz)RJ* zx$)xBI|MKP;(xFb|3HtnRnfs=y;g}T%3C4`u>hoxl;rxm0fQEhlwcd}2VM>`K29iv zBCP!D4Lk@?fSQnL+<+QvIjw4WuBNuyWAG6fP-qmLK6@xr85b#x1pl)125X3QM?%bW zxRW&Ta=OkQ8+m`=2B$yVk)$&FaDY^&cJkeJN~jel`FHIdj_An9;xR*M+~oAI&1w06 z7n}^k51`ZuR#cZZ46t;`1by>Q*X%F>l$Ge}>%}AM?SsD-9831q!DZsK)joKv4wHs{ zd`k%L-SH3}c)j3xiaOh(-r#nyL}BlK}nk`CtD{II_0)@$%{(;s{gI(xpFnjrRF zslS+N6nd?DYyH`W5*%&vH)$jHw|t4mpvX@?EVLjD6B2_Q8~tj@#RTvhrX=6$tkf0= zt5bi5C^a;FPQ#?KZyk``FTt^L)96%U zF{RjxV<-4&G8c}M%xabPf$|0URyls^C4kdJyjF~#df4xBeiAFVeuXwOVS=ZsU_bh! z>bd^SIYrL;_MCp79tIoj{&-)DPx_ch9i%o5PKy4i=W)=b&cV9v=K=mz%0D=s!XlG- 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 Hu0mjfAUw)c literal 0 HcmV?d00001 From 1fc6edfa84188abd64fcd82dfcd941947b82a717 Mon Sep 17 00:00:00 2001 From: Mashiro Date: Wed, 6 Mar 2024 20:53:54 +0800 Subject: [PATCH 27/96] [Glitch] Fix unhandled nullable attachments limitation counter Port b8bd94ca8edb5a675ef70aac9c941ed340efc127 to glitch-soc Signed-off-by: Claire --- .../containers/upload_button_container.js | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/app/javascript/flavours/glitch/features/compose/containers/upload_button_container.js b/app/javascript/flavours/glitch/features/compose/containers/upload_button_container.js index 2082510f12..2e835464b8 100644 --- a/app/javascript/flavours/glitch/features/compose/containers/upload_button_container.js +++ b/app/javascript/flavours/glitch/features/compose/containers/upload_button_container.js @@ -4,14 +4,24 @@ import { uploadCompose } from '../../../actions/compose'; import { openModal } from '../../../actions/modal'; import UploadButton from '../components/upload_button'; -const mapStateToProps = state => ({ - disabled: state.getIn(['compose', 'poll']) !== null || state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size + state.getIn(['compose', 'pending_media_attachments']) > 3 || state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type')))), - resetFileKey: state.getIn(['compose', 'resetFileKey']), -}); +const mapStateToProps = state => { + const isPoll = state.getIn(['compose', 'poll']) !== null; + const isUploading = state.getIn(['compose', 'is_uploading']); + const readyAttachmentsSize = state.getIn(['compose', 'media_attachments']).size ?? 0; + const pendingAttachmentsSize = state.getIn(['compose', 'pending_media_attachments']).size ?? 0; + const attachmentsSize = readyAttachmentsSize + pendingAttachmentsSize; + const isOverLimit = attachmentsSize > 3; + const hasVideoOrAudio = state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio'].includes(m.get('type'))); + + return { + disabled: isPoll || isUploading || isOverLimit || hasVideoOrAudio, + resetFileKey: state.getIn(['compose', 'resetFileKey']), + }; +}; const mapDispatchToProps = dispatch => ({ - onSelectFile (files) { + onSelectFile(files) { dispatch(uploadCompose(files)); }, From 50b17f7e10fe2576f0526768a9269f3013932d8a Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Thu, 7 Mar 2024 15:53:37 +0100 Subject: [PATCH 28/96] Add notification policies and notification requests (#29366) --- .../v1/notifications/policies_controller.rb | 37 +++ .../v1/notifications/requests_controller.rb | 75 +++++ .../api/v1/notifications_controller.rb | 7 +- app/models/concerns/account/associations.rb | 7 +- app/models/notification.rb | 11 +- app/models/notification_permission.rb | 16 ++ app/models/notification_policy.rb | 36 +++ app/models/notification_request.rb | 53 ++++ .../rest/notification_policy_serializer.rb | 16 ++ .../rest/notification_request_serializer.rb | 16 ++ .../accept_notification_request_service.rb | 8 + app/services/notify_service.rb | 267 +++++++++++------- .../preferences/notifications/show.html.haml | 8 - app/workers/unfilter_notifications_worker.rb | 37 +++ config/locales/an.yml | 1 - config/locales/ar.yml | 1 - config/locales/ast.yml | 1 - config/locales/be.yml | 1 - config/locales/bg.yml | 1 - config/locales/ca.yml | 1 - config/locales/ckb.yml | 1 - config/locales/co.yml | 1 - config/locales/cs.yml | 1 - config/locales/cy.yml | 1 - config/locales/da.yml | 1 - config/locales/de.yml | 1 - config/locales/el.yml | 1 - config/locales/en-GB.yml | 1 - config/locales/en.yml | 1 - config/locales/eo.yml | 1 - config/locales/es-AR.yml | 1 - config/locales/es-MX.yml | 1 - config/locales/es.yml | 1 - config/locales/et.yml | 1 - config/locales/eu.yml | 1 - config/locales/fa.yml | 1 - config/locales/fi.yml | 1 - config/locales/fo.yml | 1 - config/locales/fr-CA.yml | 1 - config/locales/fr.yml | 1 - config/locales/fy.yml | 1 - config/locales/gd.yml | 1 - config/locales/gl.yml | 1 - config/locales/he.yml | 1 - config/locales/hu.yml | 1 - config/locales/hy.yml | 1 - config/locales/id.yml | 1 - config/locales/ie.yml | 1 - config/locales/io.yml | 1 - config/locales/is.yml | 1 - config/locales/it.yml | 1 - config/locales/ja.yml | 1 - config/locales/kab.yml | 2 - config/locales/kk.yml | 1 - config/locales/ko.yml | 1 - config/locales/ku.yml | 1 - config/locales/lad.yml | 1 - config/locales/lv.yml | 1 - config/locales/ms.yml | 1 - config/locales/my.yml | 1 - config/locales/nl.yml | 1 - config/locales/nn.yml | 1 - config/locales/no.yml | 1 - config/locales/oc.yml | 1 - config/locales/pl.yml | 1 - config/locales/pt-BR.yml | 1 - config/locales/pt-PT.yml | 1 - config/locales/ru.yml | 1 - config/locales/sc.yml | 1 - config/locales/sco.yml | 1 - config/locales/si.yml | 1 - config/locales/sk.yml | 1 - config/locales/sl.yml | 1 - config/locales/sq.yml | 1 - config/locales/sr-Latn.yml | 1 - config/locales/sr.yml | 1 - config/locales/sv.yml | 1 - config/locales/ta.yml | 1 - config/locales/th.yml | 1 - config/locales/tr.yml | 1 - config/locales/uk.yml | 1 - config/locales/vi.yml | 1 - config/locales/zh-CN.yml | 1 - config/locales/zh-HK.yml | 1 - config/locales/zh-TW.yml | 1 - config/routes/api.rb | 11 + ...221195424_add_filtered_to_notifications.rb | 7 + ...0221195828_create_notification_requests.rb | 18 ++ ...tification_request_ids_to_timestamp_ids.rb | 15 + ...2193403_create_notification_permissions.rb | 12 + ...0222203722_create_notification_policies.rb | 15 + ...620_add_filtered_index_on_notifications.rb | 9 + ..._migrate_interaction_settings_to_policy.rb | 46 +++ db/schema.rb | 44 ++- .../notifications_controller_spec.rb | 4 +- .../notification_permission_fabricator.rb | 6 + .../notification_policy_fabricator.rb | 9 + .../notification_request_fabricator.rb | 8 + spec/models/notification_policy_spec.rb | 25 ++ spec/models/notification_request_spec.rb | 44 +++ spec/requests/api/v1/conversations_spec.rb | 1 + .../api/v1/notifications/policies_spec.rb | 48 ++++ .../api/v1/notifications/requests_spec.rb | 107 +++++++ spec/services/notify_service_spec.rb | 248 ++++++++++++---- 104 files changed, 1096 insertions(+), 247 deletions(-) create mode 100644 app/controllers/api/v1/notifications/policies_controller.rb create mode 100644 app/controllers/api/v1/notifications/requests_controller.rb create mode 100644 app/models/notification_permission.rb create mode 100644 app/models/notification_policy.rb create mode 100644 app/models/notification_request.rb create mode 100644 app/serializers/rest/notification_policy_serializer.rb create mode 100644 app/serializers/rest/notification_request_serializer.rb create mode 100644 app/services/accept_notification_request_service.rb create mode 100644 app/workers/unfilter_notifications_worker.rb create mode 100644 db/migrate/20240221195424_add_filtered_to_notifications.rb create mode 100644 db/migrate/20240221195828_create_notification_requests.rb create mode 100644 db/migrate/20240221211359_notification_request_ids_to_timestamp_ids.rb create mode 100644 db/migrate/20240222193403_create_notification_permissions.rb create mode 100644 db/migrate/20240222203722_create_notification_policies.rb create mode 100644 db/migrate/20240227191620_add_filtered_index_on_notifications.rb create mode 100644 db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb create mode 100644 spec/fabricators/notification_permission_fabricator.rb create mode 100644 spec/fabricators/notification_policy_fabricator.rb create mode 100644 spec/fabricators/notification_request_fabricator.rb create mode 100644 spec/models/notification_policy_spec.rb create mode 100644 spec/models/notification_request_spec.rb create mode 100644 spec/requests/api/v1/notifications/policies_spec.rb create mode 100644 spec/requests/api/v1/notifications/requests_spec.rb diff --git a/app/controllers/api/v1/notifications/policies_controller.rb b/app/controllers/api/v1/notifications/policies_controller.rb new file mode 100644 index 0000000000..1ec336f9a5 --- /dev/null +++ b/app/controllers/api/v1/notifications/policies_controller.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +class Api::V1::Notifications::PoliciesController < Api::BaseController + before_action -> { doorkeeper_authorize! :read, :'read:notifications' }, only: :show + before_action -> { doorkeeper_authorize! :write, :'write:notifications' }, only: :update + + before_action :require_user! + before_action :set_policy + + def show + render json: @policy, serializer: REST::NotificationPolicySerializer + end + + def update + @policy.update!(resource_params) + render json: @policy, serializer: REST::NotificationPolicySerializer + end + + private + + def set_policy + @policy = NotificationPolicy.find_or_initialize_by(account: current_account) + + with_read_replica do + @policy.summarize! + end + end + + def resource_params + params.permit( + :filter_not_following, + :filter_not_followers, + :filter_new_accounts, + :filter_private_mentions + ) + end +end diff --git a/app/controllers/api/v1/notifications/requests_controller.rb b/app/controllers/api/v1/notifications/requests_controller.rb new file mode 100644 index 0000000000..dbb9871530 --- /dev/null +++ b/app/controllers/api/v1/notifications/requests_controller.rb @@ -0,0 +1,75 @@ +# frozen_string_literal: true + +class Api::V1::Notifications::RequestsController < Api::BaseController + before_action -> { doorkeeper_authorize! :read, :'read:notifications' }, only: :index + before_action -> { doorkeeper_authorize! :write, :'write:notifications' }, except: :index + + before_action :require_user! + before_action :set_request, except: :index + + after_action :insert_pagination_headers, only: :index + + def index + with_read_replica do + @requests = load_requests + @relationships = relationships + end + + render json: @requests, each_serializer: REST::NotificationRequestSerializer, relationships: @relationships + end + + def accept + AcceptNotificationRequestService.new.call(@request) + render_empty + end + + def dismiss + @request.update!(dismissed: true) + render_empty + end + + private + + def load_requests + requests = NotificationRequest.where(account: current_account).where(dismissed: truthy_param?(:dismissed)).includes(:last_status, from_account: [:account_stat, :user]).to_a_paginated_by_id( + limit_param(DEFAULT_ACCOUNTS_LIMIT), + params_slice(:max_id, :since_id, :min_id) + ) + + NotificationRequest.preload_cache_collection(requests) do |statuses| + cache_collection(statuses, Status) + end + end + + def relationships + StatusRelationshipsPresenter.new(@requests.map(&:last_status), current_user&.account_id) + end + + def set_request + @request = NotificationRequest.where(account: current_account).find(params[:id]) + end + + def insert_pagination_headers + set_pagination_headers(next_path, prev_path) + end + + def next_path + api_v1_notifications_requests_url pagination_params(max_id: pagination_max_id) unless @requests.empty? + end + + def prev_path + api_v1_notifications_requests_url pagination_params(min_id: pagination_since_id) unless @requests.empty? + end + + def pagination_max_id + @requests.last.id + end + + def pagination_since_id + @requests.first.id + end + + def pagination_params(core_params) + params.slice(:dismissed).permit(:dismissed).merge(core_params) + end +end diff --git a/app/controllers/api/v1/notifications_controller.rb b/app/controllers/api/v1/notifications_controller.rb index 406ab97538..52280ef607 100644 --- a/app/controllers/api/v1/notifications_controller.rb +++ b/app/controllers/api/v1/notifications_controller.rb @@ -49,7 +49,8 @@ class Api::V1::NotificationsController < Api::BaseController current_account.notifications.without_suspended.browserable( types: Array(browserable_params[:types]), exclude_types: Array(browserable_params[:exclude_types]), - from_account_id: browserable_params[:account_id] + from_account_id: browserable_params[:account_id], + include_filtered: truthy_param?(:include_filtered) ) end @@ -78,10 +79,10 @@ class Api::V1::NotificationsController < Api::BaseController end def browserable_params - params.permit(:account_id, types: [], exclude_types: []) + params.permit(:account_id, :include_filtered, types: [], exclude_types: []) end def pagination_params(core_params) - params.slice(:limit, :account_id, :types, :exclude_types).permit(:limit, :account_id, types: [], exclude_types: []).merge(core_params) + params.slice(:limit, :account_id, :types, :exclude_types, :include_filtered).permit(:limit, :account_id, :include_filtered, types: [], exclude_types: []).merge(core_params) end end diff --git a/app/models/concerns/account/associations.rb b/app/models/concerns/account/associations.rb index 2bb6fed5ad..b2e9d255fd 100644 --- a/app/models/concerns/account/associations.rb +++ b/app/models/concerns/account/associations.rb @@ -15,10 +15,15 @@ module Account::Associations has_many :favourites, inverse_of: :account, dependent: :destroy has_many :bookmarks, inverse_of: :account, dependent: :destroy has_many :mentions, inverse_of: :account, dependent: :destroy - has_many :notifications, inverse_of: :account, dependent: :destroy has_many :conversations, class_name: 'AccountConversation', dependent: :destroy, inverse_of: :account has_many :scheduled_statuses, inverse_of: :account, dependent: :destroy + # Notifications + has_many :notifications, inverse_of: :account, dependent: :destroy + has_one :notification_policy, inverse_of: :account, dependent: :destroy + has_many :notification_permissions, inverse_of: :account, dependent: :destroy + has_many :notification_requests, inverse_of: :account, dependent: :destroy + # Pinned statuses has_many :status_pins, inverse_of: :account, dependent: :destroy has_many :pinned_statuses, -> { reorder('status_pins.created_at DESC') }, through: :status_pins, class_name: 'Status', source: :status diff --git a/app/models/notification.rb b/app/models/notification.rb index 54212d675f..e322daea4a 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -12,6 +12,7 @@ # account_id :bigint(8) not null # from_account_id :bigint(8) not null # type :string +# filtered :boolean default(FALSE), not null # class Notification < ApplicationRecord @@ -89,7 +90,7 @@ class Notification < ApplicationRecord end class << self - def browserable(types: [], exclude_types: [], from_account_id: nil) + def browserable(types: [], exclude_types: [], from_account_id: nil, include_filtered: false) requested_types = if types.empty? TYPES else @@ -99,6 +100,7 @@ class Notification < ApplicationRecord requested_types -= exclude_types.map(&:to_sym) all.tap do |scope| + scope.merge!(where(filtered: false)) unless include_filtered || from_account_id.present? scope.merge!(where(from_account_id: from_account_id)) if from_account_id.present? scope.merge!(where(type: requested_types)) unless requested_types.size == TYPES.size end @@ -144,6 +146,8 @@ class Notification < ApplicationRecord after_initialize :set_from_account before_validation :set_from_account + after_destroy :remove_from_notification_request + private def set_from_account @@ -158,4 +162,9 @@ class Notification < ApplicationRecord self.from_account_id = activity&.id end end + + def remove_from_notification_request + notification_request = NotificationRequest.find_by(account_id: account_id, from_account_id: from_account_id) + notification_request&.reconsider_existence! + end end diff --git a/app/models/notification_permission.rb b/app/models/notification_permission.rb new file mode 100644 index 0000000000..e0001473f8 --- /dev/null +++ b/app/models/notification_permission.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: notification_permissions +# +# id :bigint(8) not null, primary key +# account_id :bigint(8) not null +# from_account_id :bigint(8) not null +# created_at :datetime not null +# updated_at :datetime not null +# +class NotificationPermission < ApplicationRecord + belongs_to :account + belongs_to :from_account, class_name: 'Account' +end diff --git a/app/models/notification_policy.rb b/app/models/notification_policy.rb new file mode 100644 index 0000000000..f10b0c2a81 --- /dev/null +++ b/app/models/notification_policy.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: notification_policies +# +# id :bigint(8) not null, primary key +# account_id :bigint(8) not null +# filter_not_following :boolean default(FALSE), not null +# filter_not_followers :boolean default(FALSE), not null +# filter_new_accounts :boolean default(FALSE), not null +# filter_private_mentions :boolean default(TRUE), not null +# created_at :datetime not null +# updated_at :datetime not null +# + +class NotificationPolicy < ApplicationRecord + belongs_to :account + + has_many :notification_requests, primary_key: :account_id, foreign_key: :account_id, dependent: nil, inverse_of: false + + attr_reader :pending_requests_count, :pending_notifications_count + + MAX_MEANINGFUL_COUNT = 100 + + def summarize! + @pending_requests_count = pending_notification_requests.first + @pending_notifications_count = pending_notification_requests.last + end + + private + + def pending_notification_requests + @pending_notification_requests ||= notification_requests.where(dismissed: false).limit(MAX_MEANINGFUL_COUNT).pick(Arel.sql('count(*), coalesce(sum(notifications_count), 0)::bigint')) + end +end diff --git a/app/models/notification_request.rb b/app/models/notification_request.rb new file mode 100644 index 0000000000..7ae7e46d1b --- /dev/null +++ b/app/models/notification_request.rb @@ -0,0 +1,53 @@ +# frozen_string_literal: true + +# == Schema Information +# +# Table name: notification_requests +# +# id :bigint(8) not null, primary key +# account_id :bigint(8) not null +# from_account_id :bigint(8) not null +# last_status_id :bigint(8) not null +# notifications_count :bigint(8) default(0), not null +# dismissed :boolean default(FALSE), not null +# created_at :datetime not null +# updated_at :datetime not null +# + +class NotificationRequest < ApplicationRecord + include Paginable + + MAX_MEANINGFUL_COUNT = 100 + + belongs_to :account + belongs_to :from_account, class_name: 'Account' + belongs_to :last_status, class_name: 'Status' + + before_save :prepare_notifications_count + + def self.preload_cache_collection(requests) + cached_statuses_by_id = yield(requests.filter_map(&:last_status)).index_by(&:id) # Call cache_collection in block + + requests.each do |request| + request.last_status = cached_statuses_by_id[request.last_status_id] unless request.last_status_id.nil? + end + end + + def reconsider_existence! + return if dismissed? + + prepare_notifications_count + + if notifications_count.positive? + save + else + destroy + end + end + + private + + def prepare_notifications_count + self.notifications_count = Notification.where(account: account, from_account: from_account).limit(MAX_MEANINGFUL_COUNT).count + end +end diff --git a/app/serializers/rest/notification_policy_serializer.rb b/app/serializers/rest/notification_policy_serializer.rb new file mode 100644 index 0000000000..4967c3e320 --- /dev/null +++ b/app/serializers/rest/notification_policy_serializer.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class REST::NotificationPolicySerializer < ActiveModel::Serializer + attributes :filter_not_following, + :filter_not_followers, + :filter_new_accounts, + :filter_private_mentions, + :summary + + def summary + { + pending_requests_count: object.pending_requests_count.to_s, + pending_notifications_count: object.pending_notifications_count.to_s, + } + end +end diff --git a/app/serializers/rest/notification_request_serializer.rb b/app/serializers/rest/notification_request_serializer.rb new file mode 100644 index 0000000000..581959d827 --- /dev/null +++ b/app/serializers/rest/notification_request_serializer.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class REST::NotificationRequestSerializer < ActiveModel::Serializer + attributes :id, :created_at, :updated_at, :notifications_count + + belongs_to :from_account, key: :account, serializer: REST::AccountSerializer + belongs_to :last_status, serializer: REST::StatusSerializer + + def id + object.id.to_s + end + + def notifications_count + object.notifications_count.to_s + end +end diff --git a/app/services/accept_notification_request_service.rb b/app/services/accept_notification_request_service.rb new file mode 100644 index 0000000000..e49eae6fd3 --- /dev/null +++ b/app/services/accept_notification_request_service.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +class AcceptNotificationRequestService < BaseService + def call(request) + NotificationPermission.create!(account: request.account, from_account: request.from_account) + UnfilterNotificationsWorker.perform_async(request.id) + end +end diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb index 13eb20986e..428fdb4d47 100644 --- a/app/services/notify_service.rb +++ b/app/services/notify_service.rb @@ -11,126 +11,195 @@ class NotifyService < BaseService status ).freeze + class DismissCondition + def initialize(notification) + @recipient = notification.account + @sender = notification.from_account + @notification = notification + end + + def dismiss? + blocked = @recipient.unavailable? + blocked ||= from_self? && @notification.type != :poll + + return blocked if message? && from_staff? + + blocked ||= domain_blocking? + blocked ||= @recipient.blocking?(@sender) + blocked ||= @recipient.muting_notifications?(@sender) + blocked ||= conversation_muted? + blocked ||= blocked_mention? if message? + blocked + end + + private + + def blocked_mention? + FeedManager.instance.filter?(:mentions, @notification.target_status, @recipient) + end + + def message? + @notification.type == :mention + end + + def from_staff? + @sender.local? && @sender.user.present? && @sender.user_role&.overrides?(@recipient.user_role) + end + + def from_self? + @recipient.id == @sender.id + end + + def domain_blocking? + @recipient.domain_blocking?(@sender.domain) && !following_sender? + end + + def conversation_muted? + @notification.target_status && @recipient.muting_conversation?(@notification.target_status.conversation) + end + + def following_sender? + @recipient.following?(@sender) + end + end + + class FilterCondition + NEW_ACCOUNT_THRESHOLD = 30.days.freeze + + NEW_FOLLOWER_THRESHOLD = 3.days.freeze + + def initialize(notification) + @notification = notification + @recipient = notification.account + @sender = notification.from_account + @policy = NotificationPolicy.find_or_initialize_by(account: @recipient) + end + + def filter? + return false if override_for_sender? + + from_limited? || + filtered_by_not_following_policy? || + filtered_by_not_followers_policy? || + filtered_by_new_accounts_policy? || + filtered_by_private_mentions_policy? + end + + private + + def filtered_by_not_following_policy? + @policy.filter_not_following? && not_following? + end + + def filtered_by_not_followers_policy? + @policy.filter_not_followers? && not_follower? + end + + def filtered_by_new_accounts_policy? + @policy.filter_new_accounts? && new_account? + end + + def filtered_by_private_mentions_policy? + @policy.filter_private_mentions? && not_following? && private_mention_not_in_response? + end + + def not_following? + !@recipient.following?(@sender) + end + + def not_follower? + follow = Follow.find_by(account: @sender, target_account: @recipient) + follow.nil? || follow.created_at > NEW_FOLLOWER_THRESHOLD.ago + end + + def new_account? + @sender.created_at > NEW_ACCOUNT_THRESHOLD.ago + end + + def override_for_sender? + NotificationPermission.exists?(account: @recipient, from_account: @sender) + end + + def from_limited? + @sender.silenced? && not_following? + end + + def private_mention_not_in_response? + @notification.type == :mention && @notification.target_status.direct_visibility? && !response_to_recipient? + end + + def response_to_recipient? + return false if @notification.target_status.in_reply_to_id.nil? + + statuses_that_mention_sender.positive? + end + + def statuses_that_mention_sender + Status.count_by_sql([<<-SQL.squish, id: @notification.target_status.in_reply_to_id, recipient_id: @recipient.id, sender_id: @sender.id, depth_limit: 100]) + WITH RECURSIVE ancestors(id, in_reply_to_id, mention_id, path, depth) AS ( + SELECT s.id, s.in_reply_to_id, m.id, ARRAY[s.id], 0 + FROM statuses s + LEFT JOIN mentions m ON m.silent = FALSE AND m.account_id = :sender_id AND m.status_id = s.id + WHERE s.id = :id + UNION ALL + SELECT s.id, s.in_reply_to_id, m.id, st.path || s.id, st.depth + 1 + FROM ancestors st + JOIN statuses s ON s.id = st.in_reply_to_id + LEFT JOIN mentions m ON m.silent = FALSE AND m.account_id = :sender_id AND m.status_id = s.id + WHERE st.mention_id IS NULL AND NOT s.id = ANY(path) AND st.depth < :depth_limit + ) + SELECT COUNT(*) + FROM ancestors st + JOIN statuses s ON s.id = st.id + WHERE st.mention_id IS NOT NULL AND s.visibility = 3 + SQL + end + end + def call(recipient, type, activity) + return if recipient.user.nil? + @recipient = recipient @activity = activity @notification = Notification.new(account: @recipient, type: type, activity: @activity) - return if recipient.user.nil? || blocked? + # For certain conditions we don't need to create a notification at all + return if dismiss? + @notification.filtered = filter? @notification.save! # It's possible the underlying activity has been deleted # between the save call and now return if @notification.activity.nil? - push_notification! - push_to_conversation! if direct_message? - send_email! if email_needed? + if @notification.filtered? + update_notification_request! + else + push_notification! + push_to_conversation! if direct_message? + send_email! if email_needed? + end rescue ActiveRecord::RecordInvalid nil end private - def blocked_mention? - FeedManager.instance.filter?(:mentions, @notification.mention.status, @recipient) + def dismiss? + DismissCondition.new(@notification).dismiss? end - def following_sender? - return @following_sender if defined?(@following_sender) - - @following_sender = @recipient.following?(@notification.from_account) || @recipient.requested?(@notification.from_account) + def filter? + FilterCondition.new(@notification).filter? end - def optional_non_follower? - @recipient.user.settings['interactions.must_be_follower'] && !@notification.from_account.following?(@recipient) - end + def update_notification_request! + return unless @notification.type == :mention - def optional_non_following? - @recipient.user.settings['interactions.must_be_following'] && !following_sender? - end - - def message? - @notification.type == :mention - end - - def direct_message? - message? && @notification.target_status.direct_visibility? - end - - # Returns true if the sender has been mentioned by the recipient up the thread - def response_to_recipient? - return false if @notification.target_status.in_reply_to_id.nil? - - # Using an SQL CTE to avoid unneeded back-and-forth with SQL server in case of long threads - !Status.count_by_sql([<<-SQL.squish, id: @notification.target_status.in_reply_to_id, recipient_id: @recipient.id, sender_id: @notification.from_account.id, depth_limit: 100]).zero? - WITH RECURSIVE ancestors(id, in_reply_to_id, mention_id, path, depth) AS ( - SELECT s.id, s.in_reply_to_id, m.id, ARRAY[s.id], 0 - FROM statuses s - LEFT JOIN mentions m ON m.silent = FALSE AND m.account_id = :sender_id AND m.status_id = s.id - WHERE s.id = :id - UNION ALL - SELECT s.id, s.in_reply_to_id, m.id, st.path || s.id, st.depth + 1 - FROM ancestors st - JOIN statuses s ON s.id = st.in_reply_to_id - LEFT JOIN mentions m ON m.silent = FALSE AND m.account_id = :sender_id AND m.status_id = s.id - WHERE st.mention_id IS NULL AND NOT s.id = ANY(path) AND st.depth < :depth_limit - ) - SELECT COUNT(*) - FROM ancestors st - JOIN statuses s ON s.id = st.id - WHERE st.mention_id IS NOT NULL AND s.visibility = 3 - SQL - end - - def from_staff? - @notification.from_account.local? && @notification.from_account.user.present? && @notification.from_account.user_role&.overrides?(@recipient.user_role) - end - - def optional_non_following_and_direct? - direct_message? && - @recipient.user.settings['interactions.must_be_following_dm'] && - !following_sender? && - !response_to_recipient? - end - - def hellbanned? - @notification.from_account.silenced? && !following_sender? - end - - def from_self? - @recipient.id == @notification.from_account.id - end - - def domain_blocking? - @recipient.domain_blocking?(@notification.from_account.domain) && !following_sender? - end - - def blocked? - blocked = @recipient.unavailable? - blocked ||= from_self? && @notification.type != :poll - - return blocked if message? && from_staff? - - blocked ||= domain_blocking? - blocked ||= @recipient.blocking?(@notification.from_account) - blocked ||= @recipient.muting_notifications?(@notification.from_account) - blocked ||= hellbanned? - blocked ||= optional_non_follower? - blocked ||= optional_non_following? - blocked ||= optional_non_following_and_direct? - blocked ||= conversation_muted? - blocked ||= blocked_mention? if @notification.type == :mention - blocked - end - - def conversation_muted? - if @notification.target_status - @recipient.muting_conversation?(@notification.target_status.conversation) - else - false - end + notification_request = NotificationRequest.find_or_initialize_by(account_id: @recipient.id, from_account_id: @notification.from_account_id) + notification_request.last_status_id = @notification.target_status.id + notification_request.save end def push_notification! @@ -150,6 +219,10 @@ class NotifyService < BaseService AccountConversation.add_status(@recipient, @notification.target_status) end + def direct_message? + @notification.type == :mention && @notification.target_status.direct_visibility? + end + def push_to_web_push_subscriptions! ::Web::PushNotificationWorker.push_bulk(web_push_subscriptions.select { |subscription| subscription.pushable?(@notification) }) { |subscription| [subscription.id, @notification.id] } end diff --git a/app/views/settings/preferences/notifications/show.html.haml b/app/views/settings/preferences/notifications/show.html.haml index d9d496c7fa..de318dda54 100644 --- a/app/views/settings/preferences/notifications/show.html.haml +++ b/app/views/settings/preferences/notifications/show.html.haml @@ -40,11 +40,3 @@ label_method: ->(setting) { I18n.t("simple_form.labels.notification_emails.software_updates.#{setting}") }, label: I18n.t('simple_form.labels.notification_emails.software_updates.label'), wrapper: :with_label - - %h4= t 'notifications.other_settings' - - .fields-group - = f.simple_fields_for :settings, current_user.settings do |ff| - = ff.input :'interactions.must_be_follower', wrapper: :with_label, label: I18n.t('simple_form.labels.interactions.must_be_follower') - = ff.input :'interactions.must_be_following', wrapper: :with_label, label: I18n.t('simple_form.labels.interactions.must_be_following') - = ff.input :'interactions.must_be_following_dm', wrapper: :with_label, label: I18n.t('simple_form.labels.interactions.must_be_following_dm') diff --git a/app/workers/unfilter_notifications_worker.rb b/app/workers/unfilter_notifications_worker.rb new file mode 100644 index 0000000000..223654aa16 --- /dev/null +++ b/app/workers/unfilter_notifications_worker.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +class UnfilterNotificationsWorker + include Sidekiq::Worker + + def perform(notification_request_id) + @notification_request = NotificationRequest.find(notification_request_id) + + push_to_conversations! + unfilter_notifications! + remove_request! + rescue ActiveRecord::RecordNotFound + true + end + + private + + def push_to_conversations! + notifications_with_private_mentions.find_each { |notification| AccountConversation.add_status(@notification_request.account, notification.target_status) } + end + + def unfilter_notifications! + filtered_notifications.in_batches.update_all(filtered: false) + end + + def remove_request! + @notification_request.destroy! + end + + def filtered_notifications + Notification.where(account: @notification_request.account, from_account: @notification_request.from_account, filtered: true) + end + + def notifications_with_private_mentions + filtered_notifications.joins(mention: :status).merge(Status.where(visibility: :direct)).includes(mention: :status) + end +end diff --git a/config/locales/an.yml b/config/locales/an.yml index edfdb44b35..7ad1986b24 100644 --- a/config/locales/an.yml +++ b/config/locales/an.yml @@ -1288,7 +1288,6 @@ an: notifications: email_events: Eventos pa notificacions per correu electronico email_events_hint: 'Tría los eventos pa los quals deseyas recibir notificacions:' - other_settings: Atros achustes de notificacions number: human: decimal_units: diff --git a/config/locales/ar.yml b/config/locales/ar.yml index 2b2052172e..8e9338d80a 100644 --- a/config/locales/ar.yml +++ b/config/locales/ar.yml @@ -1594,7 +1594,6 @@ ar: administration_emails: إشعارات البريد الإلكتروني الإدارية email_events: الأحداث للإشعارات عبر البريد الإلكتروني email_events_hint: 'اختر الأحداث التي تريد أن تصِلَك اشعارات عنها:' - other_settings: إعدادات أخرى للإشعارات number: human: decimal_units: diff --git a/config/locales/ast.yml b/config/locales/ast.yml index da7e99c2fa..ee9105b05f 100644 --- a/config/locales/ast.yml +++ b/config/locales/ast.yml @@ -695,7 +695,6 @@ ast: notifications: email_events: Unviu d'avisos per corréu electrónicu email_events_hint: 'Seleiciona los eventos de los que quies recibir avisos:' - other_settings: Configuración d'otros avisos number: human: decimal_units: diff --git a/config/locales/be.yml b/config/locales/be.yml index 34e0722ba9..bd75870a18 100644 --- a/config/locales/be.yml +++ b/config/locales/be.yml @@ -1547,7 +1547,6 @@ be: administration_emails: Апавяшчэнні эл. пошты для адміністратара email_events: Падзеі для апавяшчэнняў эл. пошты email_events_hint: 'Выберыце падзеі, аб якіх вы хочаце атрымліваць апавяшчэнні:' - other_settings: Іншыя налады апавяшчэнняў number: human: decimal_units: diff --git a/config/locales/bg.yml b/config/locales/bg.yml index 15c671d539..3d1b6d291f 100644 --- a/config/locales/bg.yml +++ b/config/locales/bg.yml @@ -1490,7 +1490,6 @@ bg: administration_emails: Администраторски известия по имейла email_events: Събития за известия по имейл email_events_hint: 'Изберете събития, за които искате да получавате известия:' - other_settings: Настройки за други известия number: human: decimal_units: diff --git a/config/locales/ca.yml b/config/locales/ca.yml index d80fb598e3..d4213a258e 100644 --- a/config/locales/ca.yml +++ b/config/locales/ca.yml @@ -1495,7 +1495,6 @@ ca: administration_emails: Notificacions per correu-e de l'Admin email_events: Esdeveniments per a notificacions de correu electrònic email_events_hint: 'Selecciona els esdeveniments per als quals vols rebre notificacions:' - other_settings: Altres opcions de notificació number: human: decimal_units: diff --git a/config/locales/ckb.yml b/config/locales/ckb.yml index fec8f73323..7f1c28defc 100644 --- a/config/locales/ckb.yml +++ b/config/locales/ckb.yml @@ -840,7 +840,6 @@ ckb: notifications: email_events: رووداوەکان بۆ ئاگاداری ئیمەیلی email_events_hint: 'ئەو ڕووداوانە دیاریبکە کە دەتەوێت ئاگانامەکان وەربگری بۆ:' - other_settings: ڕێکبەندەکانی ئاگانامەکانی تر otp_authentication: code_hint: کۆدێک داخڵ بکە کە دروست کراوە لەلایەن ئەپی ڕەسەنایەتیەوە بۆ دڵنیابوون description_html: ئەگەر تۆ هاتنەژوورەوەی دوو قۆناغی بە یارمەتی ئەپێکی پەسەندکردن چالاک بکەن، پێویستە بۆ چوونەژوورەوە ، بە تەلەفۆنەکەتان کە کۆدیکتان بۆ دروستدەکات دەستپێگەیشتنتان هەبێت. diff --git a/config/locales/co.yml b/config/locales/co.yml index c3c185c2f5..ecf8606455 100644 --- a/config/locales/co.yml +++ b/config/locales/co.yml @@ -809,7 +809,6 @@ co: notifications: email_events: Avvenimenti da nutificà cù l'e-mail email_events_hint: 'Selezziunate l''avvenimenti per quelli vulete riceve nutificazione:' - other_settings: Altri parametri di nutificazione number: human: decimal_units: diff --git a/config/locales/cs.yml b/config/locales/cs.yml index 69640a261f..fd24ac05c6 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -1547,7 +1547,6 @@ cs: administration_emails: E-mailová oznámení administrátora email_events: Události pro e-mailová oznámení email_events_hint: 'Vyberte události, pro které chcete dostávat oznámení:' - other_settings: Další nastavení oznámení number: human: decimal_units: diff --git a/config/locales/cy.yml b/config/locales/cy.yml index 19343146f3..241d599464 100644 --- a/config/locales/cy.yml +++ b/config/locales/cy.yml @@ -1599,7 +1599,6 @@ cy: administration_emails: Hysbysiadau e-bost gweinyddol email_events: Digwyddiadau ar gyfer hysbysiadau e-bost email_events_hint: 'Dewiswch ddigwyddiadau yr ydych am dderbyn hysbysiadau ar eu cyfer:' - other_settings: Gosodiadau hysbysiadau arall number: human: decimal_units: diff --git a/config/locales/da.yml b/config/locales/da.yml index 62e28cef16..6bc0d96797 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -1495,7 +1495,6 @@ da: administration_emails: Admin e-mailnotifikationer email_events: Begivenheder for e-mailnotifikationer email_events_hint: 'Vælg begivenheder, for hvilke notifikationer skal modtages:' - other_settings: Andre notifikationsindstillinger number: human: decimal_units: diff --git a/config/locales/de.yml b/config/locales/de.yml index 123942672e..0636122373 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -1495,7 +1495,6 @@ de: administration_emails: Admin-E-Mail-Benachrichtigungen email_events: Benachrichtigungen per E-Mail email_events_hint: 'Bitte die Ereignisse auswählen, für die du Benachrichtigungen per E-Mail erhalten möchtest:' - other_settings: Weitere Benachrichtigungseinstellungen number: human: decimal_units: diff --git a/config/locales/el.yml b/config/locales/el.yml index c641d4dca9..12d70df976 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -1383,7 +1383,6 @@ el: notifications: email_events: Συμβάντα για ειδοποιήσεις μέσω email email_events_hint: 'Επέλεξε συμβάντα για τα οποία θέλεις να λαμβάνεις ειδοποιήσεις μέσω email:' - other_settings: Άλλες ρυθμίσεις ειδοποιήσεων number: human: decimal_units: diff --git a/config/locales/en-GB.yml b/config/locales/en-GB.yml index 6b2554fe15..ac7e508276 100644 --- a/config/locales/en-GB.yml +++ b/config/locales/en-GB.yml @@ -1490,7 +1490,6 @@ en-GB: administration_emails: Admin e-mail notifications email_events: Events for e-mail notifications email_events_hint: 'Select events that you want to receive notifications for:' - other_settings: Other notifications settings number: human: decimal_units: diff --git a/config/locales/en.yml b/config/locales/en.yml index cff244a4b9..8199fa52c7 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1495,7 +1495,6 @@ en: administration_emails: Admin e-mail notifications email_events: Events for e-mail notifications email_events_hint: 'Select events that you want to receive notifications for:' - other_settings: Other notifications settings number: human: decimal_units: diff --git a/config/locales/eo.yml b/config/locales/eo.yml index bc694578b7..4e518cd194 100644 --- a/config/locales/eo.yml +++ b/config/locales/eo.yml @@ -1425,7 +1425,6 @@ eo: administration_emails: Admin retpoŝtaj sciigoj email_events: Eventoj por retpoŝtaj sciigoj email_events_hint: 'Elekti la eventojn pri kioj vi volas ricevi sciigojn:' - other_settings: Aliaj agordoj de sciigoj number: human: decimal_units: diff --git a/config/locales/es-AR.yml b/config/locales/es-AR.yml index 37fcc11d78..06bacc79d1 100644 --- a/config/locales/es-AR.yml +++ b/config/locales/es-AR.yml @@ -1495,7 +1495,6 @@ es-AR: administration_emails: Notificaciones de administración por correo electrónico email_events: Eventos para notificaciones por correo electrónico email_events_hint: 'Seleccioná los eventos para los que querés recibir notificaciones:' - other_settings: Configuración de otras notificaciones number: human: decimal_units: diff --git a/config/locales/es-MX.yml b/config/locales/es-MX.yml index 26dbc2dfb8..4d2e8ff257 100644 --- a/config/locales/es-MX.yml +++ b/config/locales/es-MX.yml @@ -1495,7 +1495,6 @@ es-MX: administration_emails: Notificaciones de administración por correo electrónico email_events: Eventos para notificaciones por correo electrónico email_events_hint: 'Selecciona los eventos para los que deseas recibir notificaciones:' - other_settings: Otros ajustes de notificaciones number: human: decimal_units: diff --git a/config/locales/es.yml b/config/locales/es.yml index 7956580138..5204b116e3 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -1495,7 +1495,6 @@ es: administration_emails: Notificaciones de administración por correo electrónico email_events: Eventos para notificaciones por correo electrónico email_events_hint: 'Selecciona los eventos para los que deseas recibir notificaciones:' - other_settings: Otros ajustes de notificaciones number: human: decimal_units: diff --git a/config/locales/et.yml b/config/locales/et.yml index ed25488ce4..6bdb54a50e 100644 --- a/config/locales/et.yml +++ b/config/locales/et.yml @@ -1490,7 +1490,6 @@ et: administration_emails: Admini e-postiteavitused email_events: E-posti teadete sündmused email_events_hint: 'Vali sündmused, mille kohta soovid teavitusi:' - other_settings: Muud teadete sätted number: human: decimal_units: diff --git a/config/locales/eu.yml b/config/locales/eu.yml index fb3013e008..f49456afb2 100644 --- a/config/locales/eu.yml +++ b/config/locales/eu.yml @@ -1496,7 +1496,6 @@ eu: administration_emails: Administratzailearen posta elektroniko bidezko jakinarazpenak email_events: E-mail jakinarazpenentzako gertaerak email_events_hint: 'Hautatu jaso nahi dituzun gertaeren jakinarazpenak:' - other_settings: Bezte jakinarazpen konfigurazioak number: human: decimal_units: diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 4339e06c34..7fab495af8 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -1271,7 +1271,6 @@ fa: notifications: email_events: رویدادها برای آگاهی‌های رایانامه‌ای email_events_hint: 'گزینش رویدادهایی که می‌خواهید برایشان آگاهی دریافت کنید:' - other_settings: سایر تنظیمات آگاهی‌ها number: human: decimal_units: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index dc303991bc..4cd255c2f4 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1495,7 +1495,6 @@ fi: administration_emails: Ylläpitäjän sähköposti-ilmoitukset email_events: Sähköposti-ilmoitusten tapahtumat email_events_hint: 'Valitse tapahtumat, joista haluat saada ilmoituksia:' - other_settings: Muut ilmoitusasetukset number: human: decimal_units: diff --git a/config/locales/fo.yml b/config/locales/fo.yml index 6a8dd9b2ee..c7dca591f6 100644 --- a/config/locales/fo.yml +++ b/config/locales/fo.yml @@ -1495,7 +1495,6 @@ fo: administration_emails: Fráboðanir um teldupost til umsitarar email_events: Hendingar fyri teldupostfráboðanir email_events_hint: 'Vel hendingar, sum tú vil hava fráboðanir um:' - other_settings: Aðrar fráboðanarstillingar number: human: decimal_units: diff --git a/config/locales/fr-CA.yml b/config/locales/fr-CA.yml index 97cb08c918..381a8f582a 100644 --- a/config/locales/fr-CA.yml +++ b/config/locales/fr-CA.yml @@ -1490,7 +1490,6 @@ fr-CA: administration_emails: Notifications par e-mail de l’admin email_events: Événements pour les notifications par courriel email_events_hint: 'Sélectionnez les événements pour lesquels vous souhaitez recevoir des notifications :' - other_settings: Autres paramètres de notifications number: human: decimal_units: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index b085937c76..0d706accf1 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -1490,7 +1490,6 @@ fr: administration_emails: Notifications par e-mail de l’admin email_events: Événements pour les notifications par courriel email_events_hint: 'Sélectionnez les événements pour lesquels vous souhaitez recevoir des notifications :' - other_settings: Autres paramètres de notifications number: human: decimal_units: diff --git a/config/locales/fy.yml b/config/locales/fy.yml index caa88dcfe4..2fb9f3e4d2 100644 --- a/config/locales/fy.yml +++ b/config/locales/fy.yml @@ -1490,7 +1490,6 @@ fy: administration_emails: E-mailmeldingen behearder email_events: E-mailmeldingen foar eveneminten email_events_hint: 'Selektearje eveneminten wêrfoar’t jo meldingen ûntfange wolle:' - other_settings: Oare meldingsynstellingen number: human: decimal_units: diff --git a/config/locales/gd.yml b/config/locales/gd.yml index e2a43564c0..ede38df0d9 100644 --- a/config/locales/gd.yml +++ b/config/locales/gd.yml @@ -1532,7 +1532,6 @@ gd: administration_emails: Brathan puist-d na rianachd email_events: Tachartasan nam brathan puist-d email_events_hint: 'Tagh na tachartasan dhan a bheil thu airson brathan fhaighinn:' - other_settings: Roghainnean eile nam brathan number: human: decimal_units: diff --git a/config/locales/gl.yml b/config/locales/gl.yml index 8520b90ead..c3d0f1d99a 100644 --- a/config/locales/gl.yml +++ b/config/locales/gl.yml @@ -1495,7 +1495,6 @@ gl: administration_emails: Notificacións de Admin por correo electrónico email_events: Eventos para os correos de notificación email_events_hint: 'Escolle os eventos sobre os que queres recibir notificacións:' - other_settings: Outros axustes das notificacións number: human: decimal_units: diff --git a/config/locales/he.yml b/config/locales/he.yml index 55ab576142..766a653773 100644 --- a/config/locales/he.yml +++ b/config/locales/he.yml @@ -1547,7 +1547,6 @@ he: administration_emails: התראות לדוא"ל חשבון מנהל email_events: ארועים להתראות דוא"ל email_events_hint: 'בחר/י ארועים עבורים תרצה/י לקבל התראות:' - other_settings: הגדרות התראות אחרות number: human: decimal_units: diff --git a/config/locales/hu.yml b/config/locales/hu.yml index 733d883da0..00566514c9 100644 --- a/config/locales/hu.yml +++ b/config/locales/hu.yml @@ -1495,7 +1495,6 @@ hu: administration_emails: Adminisztrátori e-mail-értesítések email_events: Események email értesítésekhez email_events_hint: 'Válaszd ki azokat az eseményeket, melyekről értesítést szeretnél:' - other_settings: Értesítések egyéb beállításai number: human: decimal_units: diff --git a/config/locales/hy.yml b/config/locales/hy.yml index b0d8f00864..d870f5073c 100644 --- a/config/locales/hy.yml +++ b/config/locales/hy.yml @@ -672,7 +672,6 @@ hy: subject: "%{name}-ը փոխել է գրառումը" notifications: email_events_hint: Ընտրիր իրադարձութիւնները, որոնց վերաբերեալ ցանկանում ես ստանալ ծանուցումներ․ - other_settings: Ծանուցումների այլ կարգաւորումներ number: human: decimal_units: diff --git a/config/locales/id.yml b/config/locales/id.yml index e7f42e115b..a32ee8407a 100644 --- a/config/locales/id.yml +++ b/config/locales/id.yml @@ -1257,7 +1257,6 @@ id: notifications: email_events: Event untuk notifikasi email email_events_hint: 'Pilih event yang ingin Anda terima notifikasinya:' - other_settings: Pengaturan notifikasi lain number: human: decimal_units: diff --git a/config/locales/ie.yml b/config/locales/ie.yml index eec8569bb2..55aba94d18 100644 --- a/config/locales/ie.yml +++ b/config/locales/ie.yml @@ -1495,7 +1495,6 @@ ie: administration_emails: Email-notificationes pri administration email_events: Evenimentes por email-notificationes email_events_hint: 'Selecte li evenimentes pri queles tu vole reciver notificationes:' - other_settings: Parametres pri altri notificationes number: human: decimal_units: diff --git a/config/locales/io.yml b/config/locales/io.yml index 189f616a4e..e85641b923 100644 --- a/config/locales/io.yml +++ b/config/locales/io.yml @@ -1472,7 +1472,6 @@ io: administration_emails: Jerala retpostonotifiki email_events: Eventi por retpostoavizi email_events_hint: 'Selektez eventi quon vu volas ganar avizi:' - other_settings: Altra avizopcioni number: human: decimal_units: diff --git a/config/locales/is.yml b/config/locales/is.yml index da6eee9e20..771ed2fbf1 100644 --- a/config/locales/is.yml +++ b/config/locales/is.yml @@ -1499,7 +1499,6 @@ is: administration_emails: Kerfisstjórnunartilkynningar í tölvupósti email_events: Atburðir fyrir tilkynningar í tölvupósti email_events_hint: 'Veldu þá atburði sem þú vilt fá tilkynningar í tölvupósti þegar þeir koma upp:' - other_settings: Aðrar stillingar varðandi tilkynningar number: human: decimal_units: diff --git a/config/locales/it.yml b/config/locales/it.yml index 3adb4f6c65..d85f0359d1 100644 --- a/config/locales/it.yml +++ b/config/locales/it.yml @@ -1497,7 +1497,6 @@ it: administration_emails: Notifiche email amministratore email_events: Eventi per notifiche via email email_events_hint: 'Seleziona gli eventi per i quali vuoi ricevere le notifiche:' - other_settings: Altre impostazioni delle notifiche number: human: decimal_units: diff --git a/config/locales/ja.yml b/config/locales/ja.yml index 460f02d0a5..15e66631f5 100644 --- a/config/locales/ja.yml +++ b/config/locales/ja.yml @@ -1469,7 +1469,6 @@ ja: administration_emails: 管理にかかわるメール通知 email_events: メールによる通知 email_events_hint: '受信する通知を選択:' - other_settings: その他の通知設定 number: human: decimal_units: diff --git a/config/locales/kab.yml b/config/locales/kab.yml index d424810926..d278c15c93 100644 --- a/config/locales/kab.yml +++ b/config/locales/kab.yml @@ -626,8 +626,6 @@ kab: subject: Yuder-ik·ikem-id %{name} reblog: subject: "%{name} yesselha addad-ik·im" - notifications: - other_settings: Iɣewwaṛen nniḍen n yilɣa number: human: decimal_units: diff --git a/config/locales/kk.yml b/config/locales/kk.yml index 2cd894befb..9528c0950f 100644 --- a/config/locales/kk.yml +++ b/config/locales/kk.yml @@ -539,7 +539,6 @@ kk: notifications: email_events: E-mail ескертпелеріне шаралар email_events_hint: 'Ескертпе болып келетін шараларды таңда:' - other_settings: Ескертпелердің басқа баптаулары number: human: decimal_units: diff --git a/config/locales/ko.yml b/config/locales/ko.yml index 45a95139f0..1e53006cbb 100644 --- a/config/locales/ko.yml +++ b/config/locales/ko.yml @@ -1471,7 +1471,6 @@ ko: administration_emails: 관리자 이메일 알림 email_events: 이메일 알림에 대한 이벤트 email_events_hint: '알림 받을 이벤트를 선택해주세요:' - other_settings: 기타 알림 설정 number: human: decimal_units: diff --git a/config/locales/ku.yml b/config/locales/ku.yml index d744aaa903..91ab75ceb0 100644 --- a/config/locales/ku.yml +++ b/config/locales/ku.yml @@ -1285,7 +1285,6 @@ ku: notifications: email_events: Bûyer bo agahdariyên e-nameyê email_events_hint: 'Bûyera ku tu dixwazî agahdariyan jê wergerî hilbijêre:' - other_settings: Sazkariya agahdariyên din number: human: decimal_units: diff --git a/config/locales/lad.yml b/config/locales/lad.yml index 13e29f927e..bed6b44d39 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -1495,7 +1495,6 @@ lad: administration_emails: Avizos de administrasyon por posta email_events: Evenimyentos para avizos por posta email_events_hint: 'Eskoje los evenimientos para los kualos keres risivir avizos:' - other_settings: Otras preferensyas de avizos number: human: decimal_units: diff --git a/config/locales/lv.yml b/config/locales/lv.yml index 89bdf5f05f..dc4c39083c 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -1513,7 +1513,6 @@ lv: administration_emails: Administrators e-pasta paziņojumi email_events: E-pasta paziņojumu notikumi email_events_hint: 'Atlasi notikumus, par kuriem vēlies saņemt paziņojumus:' - other_settings: Citu paziņojumu iestatījumi number: human: decimal_units: diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 81f1851b1e..e20dfd09e0 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -1442,7 +1442,6 @@ ms: administration_emails: Notifikasi e-mel pentadbir email_events: Acara untuk pemberitahuan e-mel email_events_hint: 'Pilih acara yang ingin anda terima pemberitahuan:' - other_settings: Tetapan notifikasi lain number: human: decimal_units: diff --git a/config/locales/my.yml b/config/locales/my.yml index 18f5c6a2d0..f2c115c17c 100644 --- a/config/locales/my.yml +++ b/config/locales/my.yml @@ -1445,7 +1445,6 @@ my: administration_emails: စီမံခန့်ခွဲသူ အီးမေးလ် အသိပေးချက်များ email_events: အီးမေးလ်သတိပေးချက်များအတွက်အကြောင်းအရာများ email_events_hint: အသိပေးချက်များရယူမည့် အစီအစဉ်များကို ရွေးပါ - - other_settings: အခြားအသိပေးချက်များ၏ သတ်မှတ်ချက်များ number: human: decimal_units: diff --git a/config/locales/nl.yml b/config/locales/nl.yml index c935e9f4aa..ac49efddf1 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -1495,7 +1495,6 @@ nl: administration_emails: E-mailmeldingen beheerder email_events: E-mailmeldingen voor gebeurtenissen email_events_hint: 'Selecteer gebeurtenissen waarvoor je meldingen wilt ontvangen:' - other_settings: Andere meldingsinstellingen number: human: decimal_units: diff --git a/config/locales/nn.yml b/config/locales/nn.yml index aecd148e28..52ed45a675 100644 --- a/config/locales/nn.yml +++ b/config/locales/nn.yml @@ -1495,7 +1495,6 @@ nn: administration_emails: Administrator sine epost-varsler email_events: E-postvarslinger for hendelser email_events_hint: 'Velg hendelser som du vil motta varslinger for:' - other_settings: Andre varslingsinnstillinger number: human: decimal_units: diff --git a/config/locales/no.yml b/config/locales/no.yml index 481e28e863..db56a065fa 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -1490,7 +1490,6 @@ administration_emails: Administrators e-postvarslinger email_events: E-postvarslinger for hendelser email_events_hint: 'Velg hendelser som du vil motta varslinger for:' - other_settings: Andre varslingsinnstillinger number: human: decimal_units: diff --git a/config/locales/oc.yml b/config/locales/oc.yml index b8330992c9..32b7da6272 100644 --- a/config/locales/oc.yml +++ b/config/locales/oc.yml @@ -724,7 +724,6 @@ oc: notifications: email_events: Eveniments per las notificacions per corrièl email_events_hint: 'Seleccionatz los eveniments que volètz recebre :' - other_settings: Autres paramètres de notificacion number: human: decimal_units: diff --git a/config/locales/pl.yml b/config/locales/pl.yml index f7c5d60f65..9253f2d020 100644 --- a/config/locales/pl.yml +++ b/config/locales/pl.yml @@ -1547,7 +1547,6 @@ pl: administration_emails: Administracyjne powiadomienia e-mail email_events: 'Powiadamiaj e-mailem o:' email_events_hint: 'Wybierz wydarzenia, o których chcesz otrzymywać powiadomienia:' - other_settings: Inne ustawienia powiadomień number: human: decimal_units: diff --git a/config/locales/pt-BR.yml b/config/locales/pt-BR.yml index 86972f9ef1..58e734d9eb 100644 --- a/config/locales/pt-BR.yml +++ b/config/locales/pt-BR.yml @@ -1491,7 +1491,6 @@ pt-BR: administration_emails: Notificações por e-mail sobre administração email_events: Eventos para notificações por e-mail email_events_hint: 'Selecione os eventos que deseja receber notificações:' - other_settings: Outras opções para notificações number: human: decimal_units: diff --git a/config/locales/pt-PT.yml b/config/locales/pt-PT.yml index 0786ba2ed4..ebc7f84f4f 100644 --- a/config/locales/pt-PT.yml +++ b/config/locales/pt-PT.yml @@ -1495,7 +1495,6 @@ pt-PT: administration_emails: Notificções administrativas por e-mail email_events: Eventos para notificações por e-mail email_events_hint: 'Selecione os casos para os quais deseja receber notificações:' - other_settings: Outras opções de notificações number: human: decimal_units: diff --git a/config/locales/ru.yml b/config/locales/ru.yml index 3f15b064f0..1c718c95b2 100644 --- a/config/locales/ru.yml +++ b/config/locales/ru.yml @@ -1542,7 +1542,6 @@ ru: administration_emails: Уведомления администратора по электронной почте email_events: События для e-mail уведомлений email_events_hint: 'Выберите события, для которых вы хотели бы получать уведомления:' - other_settings: Остальные настройки уведомлений number: human: decimal_units: diff --git a/config/locales/sc.yml b/config/locales/sc.yml index 533764606b..33ca7ab1d2 100644 --- a/config/locales/sc.yml +++ b/config/locales/sc.yml @@ -865,7 +865,6 @@ sc: notifications: email_events: Eventos pro notìficas cun posta eletrònica email_events_hint: 'Seletziona eventos pro is chi boles retzire notìficas:' - other_settings: Àteras configuratziones de notìficas number: human: decimal_units: diff --git a/config/locales/sco.yml b/config/locales/sco.yml index dc273d2d83..d5628c01bc 100644 --- a/config/locales/sco.yml +++ b/config/locales/sco.yml @@ -1275,7 +1275,6 @@ sco: notifications: email_events: Events fir email notes email_events_hint: 'Pick events thit ye''r wantin tae get notes fir:' - other_settings: Ither notes settins number: human: decimal_units: diff --git a/config/locales/si.yml b/config/locales/si.yml index ac292d6cf8..28488197c5 100644 --- a/config/locales/si.yml +++ b/config/locales/si.yml @@ -1144,7 +1144,6 @@ si: notifications: email_events: ඊමේල් දැනුම්දීම් සඳහා සිදුවීම් email_events_hint: 'ඔබට දැනුම්දීම් ලැබීමට අවශ්‍ය සිදුවීම් තෝරන්න:' - other_settings: වෙනත් දැනුම්දීම් සැකසුම් number: human: decimal_units: diff --git a/config/locales/sk.yml b/config/locales/sk.yml index d97cfac0ea..e93cec19f6 100644 --- a/config/locales/sk.yml +++ b/config/locales/sk.yml @@ -1085,7 +1085,6 @@ sk: notifications: email_events: Udalosti oznamované emailom email_events_hint: 'Vyber si udalosti, pre ktoré chceš dostávať oboznámenia:' - other_settings: Ostatné oboznamovacie nastavenia otp_authentication: enable: Povoľ pagination: diff --git a/config/locales/sl.yml b/config/locales/sl.yml index c9b2343b69..863b3d7249 100644 --- a/config/locales/sl.yml +++ b/config/locales/sl.yml @@ -1547,7 +1547,6 @@ sl: administration_emails: E-poštna obvestila skrbnika email_events: Dogodki za e-obvestila email_events_hint: 'Izberite dogodke, za katere želite prejmati obvestila:' - other_settings: Druge nastavitve obvestil number: human: decimal_units: diff --git a/config/locales/sq.yml b/config/locales/sq.yml index 4293271bb2..d3d5a262fd 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1491,7 +1491,6 @@ sq: administration_emails: Njoftime email për përgjegjësin email_events: Akte për njoftim me email email_events_hint: 'Përzgjidhni akte për të cilët doni të merrni njoftime:' - other_settings: Rregullimet të tjera njoftimesh number: human: decimal_units: diff --git a/config/locales/sr-Latn.yml b/config/locales/sr-Latn.yml index a1f6df067f..7c7fb390fe 100644 --- a/config/locales/sr-Latn.yml +++ b/config/locales/sr-Latn.yml @@ -1516,7 +1516,6 @@ sr-Latn: administration_emails: Obaveštenja e-poštom od administratora email_events: Događaji za obaveštenja e-poštom email_events_hint: 'Izaberite dešavanja za koja želite da primate obaveštenja:' - other_settings: Ostala podešavanja obaveštenja number: human: decimal_units: diff --git a/config/locales/sr.yml b/config/locales/sr.yml index 494b41a754..c5b42e6b9e 100644 --- a/config/locales/sr.yml +++ b/config/locales/sr.yml @@ -1516,7 +1516,6 @@ sr: administration_emails: Обавештења е-поштом од администратора email_events: Догађаји за обавештења е-поштом email_events_hint: 'Изаберите дешавања за која желите да примате обавештења:' - other_settings: Остала подешавања обавештења number: human: decimal_units: diff --git a/config/locales/sv.yml b/config/locales/sv.yml index d0f3994b4e..108c17fc9f 100644 --- a/config/locales/sv.yml +++ b/config/locales/sv.yml @@ -1489,7 +1489,6 @@ sv: administration_emails: Admin e-postaviseringar email_events: Händelser för e-postnotiser email_events_hint: 'Välj händelser som du vill ta emot aviseringar för:' - other_settings: Andra aviseringsinställningar number: human: decimal_units: diff --git a/config/locales/ta.yml b/config/locales/ta.yml index b035a602c2..3a22b572b1 100644 --- a/config/locales/ta.yml +++ b/config/locales/ta.yml @@ -212,7 +212,6 @@ ta: notifications: email_events: மின்னஞ்சல் அறிவிப்புகளுக்கான நிகழ்வுகள் email_events_hint: 'எந்த நிகழ்வுகளுக்கு அறிவிப்புகளைப் பெற வேண்டும் என்று தேர்வு செய்க:' - other_settings: அறிவிப்புகள் குறித்த பிற அமைப்புகள் polls: errors: invalid_choice: நீங்கள் தேர்வு செய்த விருப்பம் கிடைக்கவில்லை diff --git a/config/locales/th.yml b/config/locales/th.yml index 5253dd6b78..b212300220 100644 --- a/config/locales/th.yml +++ b/config/locales/th.yml @@ -1469,7 +1469,6 @@ th: administration_emails: การแจ้งเตือนอีเมลผู้ดูแล email_events: เหตุการณ์สำหรับการแจ้งเตือนอีเมล email_events_hint: 'เลือกเหตุการณ์ที่คุณต้องการรับการแจ้งเตือน:' - other_settings: การตั้งค่าการแจ้งเตือนอื่น ๆ number: human: decimal_units: diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 7dbec9abbd..3732e53ab9 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -1495,7 +1495,6 @@ tr: administration_emails: Yönetici e-posta bildirimleri email_events: E-posta bildirimi gönderilecek etkinlikler email_events_hint: 'Bildirim almak istediğiniz olayları seçin:' - other_settings: Diğer bildirim ayarları number: human: decimal_units: diff --git a/config/locales/uk.yml b/config/locales/uk.yml index 7273a0ff2b..231f0028fd 100644 --- a/config/locales/uk.yml +++ b/config/locales/uk.yml @@ -1547,7 +1547,6 @@ uk: administration_emails: Сповіщення е-пошти адміністратора email_events: Події, про які сповіщати електронною поштою email_events_hint: 'Оберіть події, про які ви хочете отримувати сповіщення:' - other_settings: Інші налаштування сповіщень number: human: decimal_units: diff --git a/config/locales/vi.yml b/config/locales/vi.yml index e362c97a41..2afb6aa4c1 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -1467,7 +1467,6 @@ vi: administration_emails: Email thông báo admin email_events: Email email_events_hint: 'Chọn những hoạt động sẽ gửi thông báo qua email:' - other_settings: Chặn thông báo từ number: human: decimal_units: diff --git a/config/locales/zh-CN.yml b/config/locales/zh-CN.yml index 46a0e40152..93c741915d 100644 --- a/config/locales/zh-CN.yml +++ b/config/locales/zh-CN.yml @@ -1469,7 +1469,6 @@ zh-CN: administration_emails: 管理员电子邮件通知 email_events: 电子邮件通知事件 email_events_hint: 选择你想要收到通知的事件: - other_settings: 其它通知设置 number: human: decimal_units: diff --git a/config/locales/zh-HK.yml b/config/locales/zh-HK.yml index e666e4965d..62649864c7 100644 --- a/config/locales/zh-HK.yml +++ b/config/locales/zh-HK.yml @@ -1464,7 +1464,6 @@ zh-HK: administration_emails: 管理員電郵通知 email_events: 電郵通知活動 email_events_hint: 選擇你想接收通知的活動: - other_settings: 其他通知設定 number: human: decimal_units: diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index 3cd3583830..f50f685bb4 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -1471,7 +1471,6 @@ zh-TW: administration_emails: 管理員電子郵件通知 email_events: 電子郵件通知設定 email_events_hint: 選取您想接收通知的事件: - other_settings: 其他通知設定 number: human: decimal_units: diff --git a/config/routes/api.rb b/config/routes/api.rb index 853a44e0e1..18a247e9fd 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -150,6 +150,17 @@ namespace :api, format: false do end end + namespace :notifications do + resources :requests, only: :index do + member do + post :accept + post :dismiss + end + end + + resource :policy, only: [:show, :update] + end + resources :notifications, only: [:index, :show] do collection do post :clear diff --git a/db/migrate/20240221195424_add_filtered_to_notifications.rb b/db/migrate/20240221195424_add_filtered_to_notifications.rb new file mode 100644 index 0000000000..99e98a58b8 --- /dev/null +++ b/db/migrate/20240221195424_add_filtered_to_notifications.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddFilteredToNotifications < ActiveRecord::Migration[7.1] + def change + add_column :notifications, :filtered, :boolean, default: false, null: false + end +end diff --git a/db/migrate/20240221195828_create_notification_requests.rb b/db/migrate/20240221195828_create_notification_requests.rb new file mode 100644 index 0000000000..98aa630408 --- /dev/null +++ b/db/migrate/20240221195828_create_notification_requests.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +class CreateNotificationRequests < ActiveRecord::Migration[7.1] + def change + create_table :notification_requests do |t| + t.references :account, null: false, foreign_key: { on_delete: :cascade }, index: false + t.references :from_account, null: false, foreign_key: { to_table: :accounts, on_delete: :cascade } + t.references :last_status, null: false, foreign_key: { to_table: :statuses, on_delete: :nullify } + t.bigint :notifications_count, null: false, default: 0 + t.boolean :dismissed, null: false, default: false + + t.timestamps + end + + add_index :notification_requests, [:account_id, :from_account_id], unique: true + add_index :notification_requests, [:account_id, :id], where: 'dismissed = false', order: { id: :desc } + end +end diff --git a/db/migrate/20240221211359_notification_request_ids_to_timestamp_ids.rb b/db/migrate/20240221211359_notification_request_ids_to_timestamp_ids.rb new file mode 100644 index 0000000000..8503f452fe --- /dev/null +++ b/db/migrate/20240221211359_notification_request_ids_to_timestamp_ids.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class NotificationRequestIdsToTimestampIds < ActiveRecord::Migration[7.1] + def up + safety_assured do + execute("ALTER TABLE notification_requests ALTER COLUMN id SET DEFAULT timestamp_id('notification_requests')") + end + end + + def down + execute('LOCK notification_requests') + execute("SELECT setval('notification_requests_id_seq', (SELECT MAX(id) FROM notification_requests))") + execute("ALTER TABLE notification_requests ALTER COLUMN id SET DEFAULT nextval('notification_requests_id_seq')") + end +end diff --git a/db/migrate/20240222193403_create_notification_permissions.rb b/db/migrate/20240222193403_create_notification_permissions.rb new file mode 100644 index 0000000000..6e2b6196c2 --- /dev/null +++ b/db/migrate/20240222193403_create_notification_permissions.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +class CreateNotificationPermissions < ActiveRecord::Migration[7.1] + def change + create_table :notification_permissions do |t| + t.references :account, null: false, foreign_key: true + t.references :from_account, null: false, foreign_key: { to_table: :accounts } + + t.timestamps + end + end +end diff --git a/db/migrate/20240222203722_create_notification_policies.rb b/db/migrate/20240222203722_create_notification_policies.rb new file mode 100644 index 0000000000..e9d35510a8 --- /dev/null +++ b/db/migrate/20240222203722_create_notification_policies.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +class CreateNotificationPolicies < ActiveRecord::Migration[7.1] + def change + create_table :notification_policies do |t| + t.references :account, null: false, foreign_key: true, index: { unique: true } + t.boolean :filter_not_following, null: false, default: false + t.boolean :filter_not_followers, null: false, default: false + t.boolean :filter_new_accounts, null: false, default: false + t.boolean :filter_private_mentions, null: false, default: true + + t.timestamps + end + end +end diff --git a/db/migrate/20240227191620_add_filtered_index_on_notifications.rb b/db/migrate/20240227191620_add_filtered_index_on_notifications.rb new file mode 100644 index 0000000000..ca34452472 --- /dev/null +++ b/db/migrate/20240227191620_add_filtered_index_on_notifications.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddFilteredIndexOnNotifications < ActiveRecord::Migration[7.1] + disable_ddl_transaction! + + def change + add_index :notifications, [:account_id, :id, :type], where: 'filtered = false', order: { id: :desc }, name: 'index_notifications_on_filtered', algorithm: :concurrently + end +end diff --git a/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb b/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb new file mode 100644 index 0000000000..a167baadcc --- /dev/null +++ b/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +class MigrateInteractionSettingsToPolicy < ActiveRecord::Migration[7.1] + disable_ddl_transaction! + + # Dummy classes, to make migration possible across version changes + class Account < ApplicationRecord + has_one :user, inverse_of: :account + has_one :notification_policy, inverse_of: :account + end + + class User < ApplicationRecord + belongs_to :account + end + + class NotificationPolicy < ApplicationRecord + belongs_to :account + end + + def up + User.includes(account: :notification_policy).find_each do |user| + deserialized_settings = Oj.load(user.attributes_before_type_cast['settings']) + policy = user.account.notification_policy || user.account.build_notification_policy + requires_new_policy = false + + if deserialized_settings['interactions.must_be_follower'] + policy.filter_not_followers = true + requires_new_policy = true + end + + if deserialized_settings['interactions.must_be_following'] + policy.filter_not_following = true + requires_new_policy = true + end + + if deserialized_settings['interactions.must_be_following_dm'] + policy.filter_private_mentions = true + requires_new_policy = true + end + + policy.save if requires_new_policy && policy.changed? + end + end + + def down; end +end diff --git a/db/schema.rb b/db/schema.rb index 50f4e7189d..97917d0456 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.1].define(version: 2024_01_11_033014) do +ActiveRecord::Schema[7.1].define(version: 2024_03_04_090449) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -666,6 +666,40 @@ ActiveRecord::Schema[7.1].define(version: 2024_01_11_033014) do t.index ["target_account_id"], name: "index_mutes_on_target_account_id" end + create_table "notification_permissions", force: :cascade do |t| + t.bigint "account_id", null: false + t.bigint "from_account_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["account_id"], name: "index_notification_permissions_on_account_id" + t.index ["from_account_id"], name: "index_notification_permissions_on_from_account_id" + end + + create_table "notification_policies", force: :cascade do |t| + t.bigint "account_id", null: false + t.boolean "filter_not_following", default: false, null: false + t.boolean "filter_not_followers", default: false, null: false + t.boolean "filter_new_accounts", default: false, null: false + t.boolean "filter_private_mentions", default: true, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["account_id"], name: "index_notification_policies_on_account_id", unique: true + end + + create_table "notification_requests", id: :bigint, default: -> { "timestamp_id('notification_requests'::text)" }, force: :cascade do |t| + t.bigint "account_id", null: false + t.bigint "from_account_id", null: false + t.bigint "last_status_id", null: false + t.bigint "notifications_count", default: 0, null: false + t.boolean "dismissed", default: false, null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["account_id", "from_account_id"], name: "index_notification_requests_on_account_id_and_from_account_id", unique: true + t.index ["account_id", "id"], name: "index_notification_requests_on_account_id_and_id", order: { id: :desc }, where: "(dismissed = false)" + t.index ["from_account_id"], name: "index_notification_requests_on_from_account_id" + t.index ["last_status_id"], name: "index_notification_requests_on_last_status_id" + end + create_table "notifications", force: :cascade do |t| t.bigint "activity_id", null: false t.string "activity_type", null: false @@ -674,7 +708,9 @@ ActiveRecord::Schema[7.1].define(version: 2024_01_11_033014) do t.bigint "account_id", null: false t.bigint "from_account_id", null: false t.string "type" + t.boolean "filtered", default: false, null: false t.index ["account_id", "id", "type"], name: "index_notifications_on_account_id_and_id_and_type", order: { id: :desc } + t.index ["account_id", "id", "type"], name: "index_notifications_on_filtered", order: { id: :desc }, where: "(filtered = false)" t.index ["activity_id", "activity_type"], name: "index_notifications_on_activity_id_and_activity_type" t.index ["from_account_id"], name: "index_notifications_on_from_account_id" end @@ -1255,6 +1291,12 @@ ActiveRecord::Schema[7.1].define(version: 2024_01_11_033014) do add_foreign_key "mentions", "statuses", on_delete: :cascade add_foreign_key "mutes", "accounts", column: "target_account_id", name: "fk_eecff219ea", on_delete: :cascade add_foreign_key "mutes", "accounts", name: "fk_b8d8daf315", on_delete: :cascade + add_foreign_key "notification_permissions", "accounts" + add_foreign_key "notification_permissions", "accounts", column: "from_account_id" + add_foreign_key "notification_policies", "accounts" + add_foreign_key "notification_requests", "accounts", column: "from_account_id", on_delete: :cascade + add_foreign_key "notification_requests", "accounts", on_delete: :cascade + add_foreign_key "notification_requests", "statuses", column: "last_status_id", on_delete: :nullify add_foreign_key "notifications", "accounts", column: "from_account_id", name: "fk_fbd6b0bf9e", on_delete: :cascade add_foreign_key "notifications", "accounts", name: "fk_c141c8ee55", on_delete: :cascade add_foreign_key "oauth_access_grants", "oauth_applications", column: "application_id", name: "fk_34d54b0a33", on_delete: :cascade diff --git a/spec/controllers/settings/preferences/notifications_controller_spec.rb b/spec/controllers/settings/preferences/notifications_controller_spec.rb index b61d7461ce..e0f0bc55a7 100644 --- a/spec/controllers/settings/preferences/notifications_controller_spec.rb +++ b/spec/controllers/settings/preferences/notifications_controller_spec.rb @@ -24,14 +24,13 @@ describe Settings::Preferences::NotificationsController do describe 'PUT #update' do it 'updates notifications settings' do - user.settings.update('notification_emails.follow': false, 'interactions.must_be_follower': true) + user.settings.update('notification_emails.follow': false) user.save put :update, params: { user: { settings_attributes: { 'notification_emails.follow': '1', - 'interactions.must_be_follower': '0', }, }, } @@ -39,7 +38,6 @@ describe Settings::Preferences::NotificationsController do expect(response).to redirect_to(settings_preferences_notifications_path) user.reload expect(user.settings['notification_emails.follow']).to be true - expect(user.settings['interactions.must_be_follower']).to be false end end end diff --git a/spec/fabricators/notification_permission_fabricator.rb b/spec/fabricators/notification_permission_fabricator.rb new file mode 100644 index 0000000000..d421ddd81f --- /dev/null +++ b/spec/fabricators/notification_permission_fabricator.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +Fabricator(:notification_permission) do + account + from_account { Fabricate.build(:account) } +end diff --git a/spec/fabricators/notification_policy_fabricator.rb b/spec/fabricators/notification_policy_fabricator.rb new file mode 100644 index 0000000000..f33438fec7 --- /dev/null +++ b/spec/fabricators/notification_policy_fabricator.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +Fabricator(:notification_policy) do + account + filter_not_following false + filter_not_followers false + filter_new_accounts false + filter_private_mentions true +end diff --git a/spec/fabricators/notification_request_fabricator.rb b/spec/fabricators/notification_request_fabricator.rb new file mode 100644 index 0000000000..05a13b8ef8 --- /dev/null +++ b/spec/fabricators/notification_request_fabricator.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +Fabricator(:notification_request) do + account + from_account { Fabricate.build(:account) } + last_status { Fabricate.build(:status) } + dismissed false +end diff --git a/spec/models/notification_policy_spec.rb b/spec/models/notification_policy_spec.rb new file mode 100644 index 0000000000..bbfa548cf4 --- /dev/null +++ b/spec/models/notification_policy_spec.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe NotificationPolicy do + describe '#summarize!' do + subject { Fabricate(:notification_policy) } + + let(:sender) { Fabricate(:account) } + + before do + Fabricate.times(2, :notification, account: subject.account, activity: Fabricate(:status, account: sender)) + Fabricate(:notification_request, account: subject.account, from_account: sender) + subject.summarize! + end + + it 'sets pending_requests_count' do + expect(subject.pending_requests_count).to eq 1 + end + + it 'sets pending_notifications_count' do + expect(subject.pending_notifications_count).to eq 2 + end + end +end diff --git a/spec/models/notification_request_spec.rb b/spec/models/notification_request_spec.rb new file mode 100644 index 0000000000..f4613aaede --- /dev/null +++ b/spec/models/notification_request_spec.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe NotificationRequest do + describe '#reconsider_existence!' do + subject { Fabricate(:notification_request, dismissed: dismissed) } + + let(:dismissed) { false } + + context 'when there are remaining notifications' do + before do + Fabricate(:notification, account: subject.account, activity: Fabricate(:status, account: subject.from_account)) + subject.reconsider_existence! + end + + it 'leaves request intact' do + expect(subject.destroyed?).to be false + end + + it 'updates notifications_count' do + expect(subject.notifications_count).to eq 1 + end + end + + context 'when there are no notifications' do + before do + subject.reconsider_existence! + end + + context 'when dismissed' do + let(:dismissed) { true } + + it 'leaves request intact' do + expect(subject.destroyed?).to be false + end + end + + it 'removes the request' do + expect(subject.destroyed?).to be true + end + end + end +end diff --git a/spec/requests/api/v1/conversations_spec.rb b/spec/requests/api/v1/conversations_spec.rb index e2327d9a93..caa0f5c52c 100644 --- a/spec/requests/api/v1/conversations_spec.rb +++ b/spec/requests/api/v1/conversations_spec.rb @@ -12,6 +12,7 @@ RSpec.describe 'API V1 Conversations' do describe 'GET /api/v1/conversations', :sidekiq_inline do before do + user.account.follow!(other.account) PostStatusService.new.call(other.account, text: 'Hey @alice', visibility: 'direct') PostStatusService.new.call(user.account, text: 'Hey, nobody here', visibility: 'direct') end diff --git a/spec/requests/api/v1/notifications/policies_spec.rb b/spec/requests/api/v1/notifications/policies_spec.rb new file mode 100644 index 0000000000..fe6bdbd973 --- /dev/null +++ b/spec/requests/api/v1/notifications/policies_spec.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Policies' do + let(:user) { Fabricate(:user, account_attributes: { username: 'alice' }) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'read:notifications write:notifications' } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + describe 'GET /api/v1/notifications/policy', :sidekiq_inline do + subject do + get '/api/v1/notifications/policy', headers: headers, params: params + end + + let(:params) { {} } + + before do + Fabricate(:notification_request, account: user.account) + end + + it_behaves_like 'forbidden for wrong scope', 'write write:notifications' + + context 'with no options' do + it 'returns http success', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + end + end + end + + describe 'PUT /api/v1/notifications/policy' do + subject do + put '/api/v1/notifications/policy', headers: headers, params: params + end + + let(:params) { {} } + + it_behaves_like 'forbidden for wrong scope', 'read read:notifications' + + it 'returns http success' do + subject + + expect(response).to have_http_status(200) + end + end +end diff --git a/spec/requests/api/v1/notifications/requests_spec.rb b/spec/requests/api/v1/notifications/requests_spec.rb new file mode 100644 index 0000000000..64675d562c --- /dev/null +++ b/spec/requests/api/v1/notifications/requests_spec.rb @@ -0,0 +1,107 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Requests' do + let(:user) { Fabricate(:user, account_attributes: { username: 'alice' }) } + let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } + let(:scopes) { 'read:notifications write:notifications' } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } + + describe 'GET /api/v1/notifications/requests', :sidekiq_inline do + subject do + get '/api/v1/notifications/requests', headers: headers, params: params + end + + let(:params) { {} } + + before do + Fabricate(:notification_request, account: user.account) + Fabricate(:notification_request, account: user.account, dismissed: true) + end + + it_behaves_like 'forbidden for wrong scope', 'write write:notifications' + + context 'with no options' do + it 'returns http success', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + end + end + + context 'with dismissed' do + let(:params) { { dismissed: '1' } } + + it 'returns http success', :aggregate_failures do + subject + + expect(response).to have_http_status(200) + end + end + end + + describe 'POST /api/v1/notifications/requests/:id/accept' do + subject do + post "/api/v1/notifications/requests/#{notification_request.id}/accept", headers: headers + end + + let(:notification_request) { Fabricate(:notification_request, account: user.account) } + + it_behaves_like 'forbidden for wrong scope', 'read read:notifications' + + it 'returns http success' do + subject + + expect(response).to have_http_status(200) + end + + it 'creates notification permission' do + subject + + expect(NotificationPermission.find_by(account: notification_request.account, from_account: notification_request.from_account)).to_not be_nil + end + + context 'when notification request belongs to someone else' do + let(:notification_request) { Fabricate(:notification_request) } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + end + + describe 'POST /api/v1/notifications/requests/:id/dismiss' do + subject do + post "/api/v1/notifications/requests/#{notification_request.id}/dismiss", headers: headers + end + + let(:notification_request) { Fabricate(:notification_request, account: user.account) } + + it_behaves_like 'forbidden for wrong scope', 'read read:notifications' + + it 'returns http success' do + subject + + expect(response).to have_http_status(200) + end + + it 'dismisses the notification request' do + subject + + expect(notification_request.reload.dismissed?).to be true + end + + context 'when notification request belongs to someone else' do + let(:notification_request) { Fabricate(:notification_request) } + + it 'returns http not found' do + subject + + expect(response).to have_http_status(404) + end + end + end +end diff --git a/spec/services/notify_service_spec.rb b/spec/services/notify_service_spec.rb index e818fadcbe..57ff326c73 100644 --- a/spec/services/notify_service_spec.rb +++ b/spec/services/notify_service_spec.rb @@ -41,7 +41,8 @@ RSpec.describe NotifyService, type: :service do it 'does not notify when sender is silenced and not followed' do sender.silence! - expect { subject }.to_not change(Notification, :count) + subject + expect(Notification.find_by(activity: activity).filtered?).to be true end it 'does not notify when recipient is suspended' do @@ -49,66 +50,6 @@ RSpec.describe NotifyService, type: :service do expect { subject }.to_not change(Notification, :count) end - context 'with direct messages' do - let(:activity) { Fabricate(:mention, account: recipient, status: Fabricate(:status, account: sender, visibility: :direct)) } - let(:type) { :mention } - - before do - user.settings.update('interactions.must_be_following_dm': enabled) - user.save - end - - context 'when recipient is supposed to be following sender' do - let(:enabled) { true } - - it 'does not notify' do - expect { subject }.to_not change(Notification, :count) - end - - context 'when the message chain is initiated by recipient, but is not direct message' do - let(:reply_to) { Fabricate(:status, account: recipient) } - let(:activity) { Fabricate(:mention, account: recipient, status: Fabricate(:status, account: sender, visibility: :direct, thread: reply_to)) } - - before { Fabricate(:mention, account: sender, status: reply_to) } - - it 'does not notify' do - expect { subject }.to_not change(Notification, :count) - end - end - - context 'when the message chain is initiated by recipient, but without a mention to the sender, even if the sender sends multiple messages in a row' do - let(:reply_to) { Fabricate(:status, account: recipient) } - let(:dummy_reply) { Fabricate(:status, account: sender, visibility: :direct, thread: reply_to) } - let(:activity) { Fabricate(:mention, account: recipient, status: Fabricate(:status, account: sender, visibility: :direct, thread: dummy_reply)) } - - before { Fabricate(:mention, account: sender, status: reply_to) } - - it 'does not notify' do - expect { subject }.to_not change(Notification, :count) - end - end - - context 'when the message chain is initiated by the recipient with a mention to the sender' do - let(:reply_to) { Fabricate(:status, account: recipient, visibility: :direct) } - let(:activity) { Fabricate(:mention, account: recipient, status: Fabricate(:status, account: sender, visibility: :direct, thread: reply_to)) } - - before { Fabricate(:mention, account: sender, status: reply_to) } - - it 'does notify' do - expect { subject }.to change(Notification, :count) - end - end - end - - context 'when recipient is NOT supposed to be following sender' do - let(:enabled) { false } - - it 'does notify' do - expect { subject }.to change(Notification, :count) - end - end - end - describe 'reblogs' do let(:status) { Fabricate(:status, account: Fabricate(:account)) } let(:activity) { Fabricate(:status, account: sender, reblog: status) } @@ -187,4 +128,189 @@ RSpec.describe NotifyService, type: :service do end end end + + describe NotifyService::FilterCondition do + subject { described_class.new(notification) } + + let(:activity) { Fabricate(:mention, status: Fabricate(:status)) } + let(:notification) { Fabricate(:notification, type: :mention, activity: activity, from_account: activity.status.account, account: activity.account) } + + describe '#filter?' do + context 'when sender is silenced' do + before do + notification.from_account.silence! + end + + it 'returns true' do + expect(subject.filter?).to be true + end + + context 'when recipient follows sender' do + before do + notification.account.follow!(notification.from_account) + end + + it 'returns false' do + expect(subject.filter?).to be false + end + end + end + + context 'when recipient is filtering not-followed senders' do + before do + Fabricate(:notification_policy, account: notification.account, filter_not_following: true) + end + + it 'returns true' do + expect(subject.filter?).to be true + end + + context 'when sender has permission' do + before do + Fabricate(:notification_permission, account: notification.account, from_account: notification.from_account) + end + + it 'returns false' do + expect(subject.filter?).to be false + end + end + + context 'when sender is followed by recipient' do + before do + notification.account.follow!(notification.from_account) + end + + it 'returns false' do + expect(subject.filter?).to be false + end + end + end + + context 'when recipient is filtering not-followers' do + before do + Fabricate(:notification_policy, account: notification.account, filter_not_followers: true) + end + + it 'returns true' do + expect(subject.filter?).to be true + end + + context 'when sender has permission' do + before do + Fabricate(:notification_permission, account: notification.account, from_account: notification.from_account) + end + + it 'returns false' do + expect(subject.filter?).to be false + end + end + + context 'when sender follows recipient' do + before do + notification.from_account.follow!(notification.account) + end + + it 'returns true' do + expect(subject.filter?).to be true + end + end + + context 'when sender follows recipient for longer than 3 days' do + before do + follow = notification.from_account.follow!(notification.account) + follow.update(created_at: 4.days.ago) + end + + it 'returns false' do + expect(subject.filter?).to be false + end + end + end + + context 'when recipient is filtering new accounts' do + before do + Fabricate(:notification_policy, account: notification.account, filter_new_accounts: true) + end + + it 'returns true' do + expect(subject.filter?).to be true + end + + context 'when sender has permission' do + before do + Fabricate(:notification_permission, account: notification.account, from_account: notification.from_account) + end + + it 'returns false' do + expect(subject.filter?).to be false + end + end + + context 'when sender is older than 30 days' do + before do + notification.from_account.update(created_at: 31.days.ago) + end + + it 'returns false' do + expect(subject.filter?).to be false + end + end + end + + context 'when recipient is not filtering anyone' do + before do + Fabricate(:notification_policy, account: notification.account) + end + + it 'returns false' do + expect(subject.filter?).to be false + end + end + + context 'when recipient is filtering unsolicited private mentions' do + before do + Fabricate(:notification_policy, account: notification.account, filter_private_mentions: true) + end + + context 'when notification is not a private mention' do + it 'returns false' do + expect(subject.filter?).to be false + end + end + + context 'when notification is a private mention' do + before do + notification.target_status.update(visibility: :direct) + end + + it 'returns true' do + expect(subject.filter?).to be true + end + + context 'when the message chain is initiated by recipient, but sender is not mentioned' do + before do + original_status = Fabricate(:status, account: notification.account, visibility: :direct) + notification.target_status.update(thread: original_status) + end + + it 'returns true' do + expect(subject.filter?).to be true + end + end + + context 'when the message chain is initiated by recipient, and sender is mentioned' do + before do + original_status = Fabricate(:status, account: notification.account, visibility: :direct) + notification.target_status.update(thread: original_status) + Fabricate(:mention, status: original_status, account: notification.from_account) + end + + it 'returns false' do + expect(subject.filter?).to be false + end + end + end + end + end + end end From 509528e2dc2f87d59bc385efee82a9a83bb1b63f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 18:33:54 +0100 Subject: [PATCH 29/96] Update dependency pg to v1.5.6 (#29477) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 59b24e1035..047465fae6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -505,7 +505,7 @@ GEM parslet (2.0.0) pastel (0.8.0) tty-color (~> 0.5) - pg (1.5.5) + pg (1.5.6) pghero (3.4.1) activerecord (>= 6) posix-spawn (0.3.15) From e8605a69d22e369e34914548338c15c053db9667 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 19:02:24 +0100 Subject: [PATCH 30/96] Update omniauth packages (#25306) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Renaud Chaput --- Gemfile.lock | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 047465fae6..73ddfb4cff 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -465,11 +465,11 @@ GEM statsd-ruby (~> 1.4, >= 1.4.0) oj (3.16.3) bigdecimal (>= 3.0) - omniauth (2.1.1) + omniauth (2.1.2) hashie (>= 3.4.6) rack (>= 2.2.3) rack-protection - omniauth-cas (3.0.0.beta.1) + omniauth-cas (3.0.0) addressable (~> 2.8) nokogiri (~> 1.12) omniauth (~> 2.1) @@ -543,8 +543,9 @@ GEM httpclient json-jwt (>= 1.11.0) rack (>= 2.1.0) - rack-protection (3.0.5) - rack + rack-protection (3.2.0) + base64 (>= 0.1.0) + rack (~> 2.2, >= 2.2.4) rack-proxy (0.7.6) rack rack-session (1.0.2) From d002458c7be85bc1b40299d80a7accc554fb2d3b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 7 Mar 2024 22:39:48 +0100 Subject: [PATCH 31/96] New Crowdin Translations (automated) (#2661) * New Crowdin translations * Fix bogus translations --------- Co-authored-by: GitHub Actions Co-authored-by: Claire --- app/javascript/flavours/glitch/locales/kab.json | 4 ++++ app/javascript/flavours/glitch/locales/ko.json | 3 +++ 2 files changed, 7 insertions(+) diff --git a/app/javascript/flavours/glitch/locales/kab.json b/app/javascript/flavours/glitch/locales/kab.json index d360fed722..d7e1357ce9 100644 --- a/app/javascript/flavours/glitch/locales/kab.json +++ b/app/javascript/flavours/glitch/locales/kab.json @@ -1,4 +1,8 @@ { + "compose.attach.doodle": "Ssuneɣ-d kra", + "navigation_bar.keyboard_shortcuts": "Inezgumen n unasiw", + "settings.auto_collapse_notifications": "Ilɣa", + "settings.close": "Mdel", "settings.content_warnings": "Content warnings", "settings.preferences": "Preferences" } diff --git a/app/javascript/flavours/glitch/locales/ko.json b/app/javascript/flavours/glitch/locales/ko.json index ab70ece316..b1da79d102 100644 --- a/app/javascript/flavours/glitch/locales/ko.json +++ b/app/javascript/flavours/glitch/locales/ko.json @@ -14,6 +14,7 @@ "column_subheading.lists": "리스트", "column_subheading.navigation": "탐색", "community.column_settings.allow_local_only": "로컬 전용 글 보기", + "compose.attach.doodle": "뭔가 그려보세요", "compose.change_federation": "연합 설정 변경", "compose.content-type.change": "고급 양식 옵션 변경", "compose.content-type.html": "HTML", @@ -22,6 +23,8 @@ "compose.content-type.markdown_meta": "게시물을 마크다운 형식으로 구성", "compose.content-type.plain": "일반 텍스트", "compose.content-type.plain_meta": "고급 양식 없이 작성", + "compose.disable_threaded_mode": "글타래 모드 비활성화", + "compose.enable_threaded_mode": "글타래 모드 활성화", "confirmation_modal.do_not_ask_again": "다음부터 확인창을 띄우지 않기", "confirmations.deprecated_settings.confirm": "마스토돈 설정 사용", "confirmations.deprecated_settings.message": "사용하던 몇몇 기기별 글리치 {app_settings}은 마스토돈 {preferences}으로 대체되었습니다:", From e85a2aa18dfb619e64f6f5acc6c401f72587fc72 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Fri, 8 Mar 2024 10:10:07 +0100 Subject: [PATCH 32/96] Fix interaction settings migration error when encountering no settings (#29529) --- .../20240304090449_migrate_interaction_settings_to_policy.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb b/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb index a167baadcc..0e9a42f8df 100644 --- a/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb +++ b/db/migrate/20240304090449_migrate_interaction_settings_to_policy.rb @@ -20,6 +20,9 @@ class MigrateInteractionSettingsToPolicy < ActiveRecord::Migration[7.1] def up User.includes(account: :notification_policy).find_each do |user| deserialized_settings = Oj.load(user.attributes_before_type_cast['settings']) + + next if deserialized_settings.nil? + policy = user.account.notification_policy || user.account.build_notification_policy requires_new_policy = false From e95f2c2b687e3494229b3a2d6429e93fe801d269 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 8 Mar 2024 11:35:18 +0100 Subject: [PATCH 33/96] Add a glitch-soc local setting to make the post publish toast optional (#2666) --- app/javascript/flavours/glitch/actions/compose.js | 14 ++++++++------ .../glitch/features/local_settings/page/index.jsx | 8 ++++++++ app/javascript/flavours/glitch/locales/en.json | 1 + .../flavours/glitch/reducers/local_settings.js | 1 + 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/app/javascript/flavours/glitch/actions/compose.js b/app/javascript/flavours/glitch/actions/compose.js index 06f0d79874..9e65df7b39 100644 --- a/app/javascript/flavours/glitch/actions/compose.js +++ b/app/javascript/flavours/glitch/actions/compose.js @@ -266,12 +266,14 @@ export function submitCompose(routerHistory, overridePrivacy = null) { insertIfOnline('direct'); } - dispatch(showAlert({ - message: statusId === null ? messages.published : messages.saved, - action: messages.open, - dismissAfter: 10000, - onClick: () => routerHistory.push(`/@${response.data.account.username}/${response.data.id}`), - })); + if (getState().getIn(['local_settings', 'show_published_toast'])) { + dispatch(showAlert({ + message: statusId === null ? messages.published : messages.saved, + action: messages.open, + dismissAfter: 10000, + onClick: () => routerHistory.push(`/@${response.data.account.username}/${response.data.id}`), + })); + } }).catch(function (error) { dispatch(submitComposeFail(error)); }); diff --git a/app/javascript/flavours/glitch/features/local_settings/page/index.jsx b/app/javascript/flavours/glitch/features/local_settings/page/index.jsx index 849a553e06..ea599afb6a 100644 --- a/app/javascript/flavours/glitch/features/local_settings/page/index.jsx +++ b/app/javascript/flavours/glitch/features/local_settings/page/index.jsx @@ -224,6 +224,14 @@ class LocalSettingsPage extends PureComponent { > + + + state.mergeDeep(localSettings); From d09ab957d492fa9101fd9aec77e270d807fb3131 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 8 Mar 2024 11:38:01 +0100 Subject: [PATCH 34/96] Remove duplicate `captcha_enabled` key in `app/models/form/admin_settings.rb` --- app/models/form/admin_settings.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/models/form/admin_settings.rb b/app/models/form/admin_settings.rb index 095733673e..41a5103f58 100644 --- a/app/models/form/admin_settings.rb +++ b/app/models/form/admin_settings.rb @@ -38,7 +38,6 @@ class Form::AdminSettings noindex outgoing_spoilers require_invite_text - captcha_enabled media_cache_retention_period content_cache_retention_period backups_retention_period From a79bd2cd1117512ecc77e97c1d946e7f26fbd439 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 8 Mar 2024 11:45:27 +0100 Subject: [PATCH 35/96] Make some CSS differences with upstream more explicit --- app/javascript/flavours/glitch/styles/components.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/styles/components.scss b/app/javascript/flavours/glitch/styles/components.scss index 8e5c57dab3..efae501756 100644 --- a/app/javascript/flavours/glitch/styles/components.scss +++ b/app/javascript/flavours/glitch/styles/components.scss @@ -1657,6 +1657,7 @@ body > [data-popper-placement] { font-size: 15px; padding-bottom: 10px; display: flex; + align-items: start; // glitch: changed because of our different layout justify-content: space-between; gap: 10px; cursor: pointer; @@ -1865,7 +1866,7 @@ body > [data-popper-placement] { .media-gallery, .video-player, .audio-player { - margin-top: 8px; + margin-top: 8px; // glitch: reduced margins } .status__prepend { From 6996b96fab15b050713e06a71ce9abcbc2716d4e Mon Sep 17 00:00:00 2001 From: neetshin Date: Mon, 15 Jan 2018 05:51:00 +0000 Subject: [PATCH 36/96] [Glitch] Make columns-area unscrollable when modal opened Port 2091ae92be5d04cd4dadb2200c507ce8d8d2623e to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/features/ui/components/columns_area.jsx | 5 +++-- .../glitch/features/ui/containers/columns_area_container.js | 1 + app/javascript/flavours/glitch/styles/components.scss | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/javascript/flavours/glitch/features/ui/components/columns_area.jsx b/app/javascript/flavours/glitch/features/ui/components/columns_area.jsx index f3e1bfe492..9166499c5a 100644 --- a/app/javascript/flavours/glitch/features/ui/components/columns_area.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/columns_area.jsx @@ -58,6 +58,7 @@ const TabsBarPortal = () => { export default class ColumnsArea extends ImmutablePureComponent { static propTypes = { columns: ImmutablePropTypes.list.isRequired, + isModalOpen: PropTypes.bool.isRequired, singleColumn: PropTypes.bool, children: PropTypes.node, openSettings: PropTypes.func, @@ -145,7 +146,7 @@ export default class ColumnsArea extends ImmutablePureComponent { }; render () { - const { columns, children, singleColumn, openSettings } = this.props; + const { columns, children, singleColumn, isModalOpen, openSettings } = this.props; const { renderComposePanel } = this.state; if (singleColumn) { @@ -172,7 +173,7 @@ export default class ColumnsArea extends ImmutablePureComponent { } return ( -

+
{columns.map(column => { const params = column.get('params', null) === null ? null : column.get('params').toJS(); const other = params && params.other ? params.other : {}; diff --git a/app/javascript/flavours/glitch/features/ui/containers/columns_area_container.js b/app/javascript/flavours/glitch/features/ui/containers/columns_area_container.js index a69abfb610..b11bcade5c 100644 --- a/app/javascript/flavours/glitch/features/ui/containers/columns_area_container.js +++ b/app/javascript/flavours/glitch/features/ui/containers/columns_area_container.js @@ -6,6 +6,7 @@ import ColumnsArea from '../components/columns_area'; const mapStateToProps = state => ({ columns: state.getIn(['settings', 'columns']), + isModalOpen: !!state.get('modal').modalType, }); const mapDispatchToProps = dispatch => ({ diff --git a/app/javascript/flavours/glitch/styles/components.scss b/app/javascript/flavours/glitch/styles/components.scss index efae501756..f08a6017f3 100644 --- a/app/javascript/flavours/glitch/styles/components.scss +++ b/app/javascript/flavours/glitch/styles/components.scss @@ -2626,6 +2626,10 @@ a.account__display-name { overflow-x: auto; position: relative; + &.unscrollable { + overflow-x: hidden; + } + &__panels { display: flex; justify-content: center; From 98cf4b7ba0fc6cfcd282d8ea9a39f06366225723 Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 8 Mar 2024 12:42:03 +0100 Subject: [PATCH 37/96] Reduce code differences with upstream --- .../flavours/glitch/actions/accounts.js | 7 - .../flavours/glitch/actions/statuses.js | 4 +- .../glitch/components/attachment_list.jsx | 1 - .../glitch/components/column_header.jsx | 1 - .../components/edited_timestamp/index.jsx | 1 - .../components/regeneration_indicator.jsx | 2 +- .../flavours/glitch/features/about/index.jsx | 1 - .../account_gallery/components/media_item.jsx | 1 - .../flavours/glitch/features/audio/index.jsx | 1 - .../features/community_timeline/index.jsx | 1 - .../glitch/features/directory/index.jsx | 1 - .../glitch/features/explore/index.jsx | 1 - .../glitch/features/explore/results.jsx | 1 - .../glitch/features/filters/select_filter.jsx | 2 +- .../glitch/features/firehose/index.jsx | 1 - .../glitch/features/home_timeline/index.jsx | 1 - .../features/keyboard_shortcuts/index.jsx | 1 - .../features/list_adder/components/list.jsx | 1 - .../list_editor/components/search.jsx | 1 - .../glitch/features/list_timeline/index.jsx | 2 - .../flavours/glitch/features/lists/index.jsx | 1 - .../components/clear_column_button.jsx | 1 - .../notifications/components/filter_bar.jsx | 1 - .../notifications_permission_banner.jsx | 1 - .../features/onboarding/components/step.jsx | 1 - .../glitch/features/onboarding/index.jsx | 1 - .../picture_in_picture/components/footer.jsx | 1 - .../picture_in_picture/components/header.jsx | 1 - .../glitch/features/pinned_statuses/index.jsx | 1 - .../glitch/features/public_timeline/index.jsx | 1 - .../glitch/features/reblogs/index.jsx | 1 - .../features/report/components/option.jsx | 1 - .../report/components/status_check_box.jsx | 1 + .../features/status/components/action_bar.jsx | 4 +- .../subscribed_languages_modal/index.jsx | 1 - .../features/ui/components/embed_modal.jsx | 1 - .../features/ui/components/filter_modal.jsx | 1 - .../components/notifications_counter_icon.js | 1 + .../features/ui/util/async-components.js | 248 +++++++++--------- .../glitch/images/elephant_ui_working.svg | 1 - .../flavours/glitch/initial_state.js | 17 +- .../flavours/glitch/reducers/settings.js | 3 - 42 files changed, 140 insertions(+), 182 deletions(-) delete mode 100644 app/javascript/flavours/glitch/images/elephant_ui_working.svg diff --git a/app/javascript/flavours/glitch/actions/accounts.js b/app/javascript/flavours/glitch/actions/accounts.js index af10af9fe9..bb26035e97 100644 --- a/app/javascript/flavours/glitch/actions/accounts.js +++ b/app/javascript/flavours/glitch/actions/accounts.js @@ -66,11 +66,9 @@ export const FOLLOW_REQUESTS_EXPAND_SUCCESS = 'FOLLOW_REQUESTS_EXPAND_SUCCESS'; export const FOLLOW_REQUESTS_EXPAND_FAIL = 'FOLLOW_REQUESTS_EXPAND_FAIL'; export const FOLLOW_REQUEST_AUTHORIZE_REQUEST = 'FOLLOW_REQUEST_AUTHORIZE_REQUEST'; -export const FOLLOW_REQUEST_AUTHORIZE_SUCCESS = 'FOLLOW_REQUEST_AUTHORIZE_SUCCESS'; export const FOLLOW_REQUEST_AUTHORIZE_FAIL = 'FOLLOW_REQUEST_AUTHORIZE_FAIL'; export const FOLLOW_REQUEST_REJECT_REQUEST = 'FOLLOW_REQUEST_REJECT_REQUEST'; -export const FOLLOW_REQUEST_REJECT_SUCCESS = 'FOLLOW_REQUEST_REJECT_SUCCESS'; export const FOLLOW_REQUEST_REJECT_FAIL = 'FOLLOW_REQUEST_REJECT_FAIL'; export const PINNED_ACCOUNTS_FETCH_REQUEST = 'PINNED_ACCOUNTS_FETCH_REQUEST'; @@ -93,11 +91,6 @@ export * from './accounts_typed'; export function fetchAccount(id) { return (dispatch, getState) => { dispatch(fetchRelationships([id])); - - if (getState().getIn(['accounts', id], null) !== null) { - return; - } - dispatch(fetchAccountRequest(id)); api(getState).get(`/api/v1/accounts/${id}`).then(response => { diff --git a/app/javascript/flavours/glitch/actions/statuses.js b/app/javascript/flavours/glitch/actions/statuses.js index 5bdd31c343..332057ee67 100644 --- a/app/javascript/flavours/glitch/actions/statuses.js +++ b/app/javascript/flavours/glitch/actions/statuses.js @@ -1,7 +1,7 @@ import api from '../api'; import { ensureComposeIsVisible, setComposeToStatus } from './compose'; -import { importFetchedStatus, importFetchedStatuses } from './importer'; +import { importFetchedStatus, importFetchedStatuses, importFetchedAccount } from './importer'; import { deleteFromTimelines } from './timelines'; export const STATUS_FETCH_REQUEST = 'STATUS_FETCH_REQUEST'; @@ -138,10 +138,10 @@ export function deleteStatus(id, routerHistory, withRedraft = false) { api(getState).delete(`/api/v1/statuses/${id}`).then(response => { dispatch(deleteStatusSuccess(id)); dispatch(deleteFromTimelines(id)); + dispatch(importFetchedAccount(response.data.account)); if (withRedraft) { dispatch(redraft(status, response.data.text, response.data.content_type)); - ensureComposeIsVisible(getState, routerHistory); } }).catch(error => { diff --git a/app/javascript/flavours/glitch/components/attachment_list.jsx b/app/javascript/flavours/glitch/components/attachment_list.jsx index 44b8bf78ee..60800f41ec 100644 --- a/app/javascript/flavours/glitch/components/attachment_list.jsx +++ b/app/javascript/flavours/glitch/components/attachment_list.jsx @@ -10,7 +10,6 @@ import ImmutablePureComponent from 'react-immutable-pure-component'; import LinkIcon from '@/material-icons/400-24px/link.svg?react'; import { Icon } from 'flavours/glitch/components/icon'; - const filename = url => url.split('/').pop().split('#')[0].split('?')[0]; export default class AttachmentList extends ImmutablePureComponent { diff --git a/app/javascript/flavours/glitch/components/column_header.jsx b/app/javascript/flavours/glitch/components/column_header.jsx index ec99698d0c..262166d2d1 100644 --- a/app/javascript/flavours/glitch/components/column_header.jsx +++ b/app/javascript/flavours/glitch/components/column_header.jsx @@ -16,7 +16,6 @@ import { Icon } from 'flavours/glitch/components/icon'; import { ButtonInTabsBar, useColumnsContext } from 'flavours/glitch/features/ui/util/columns_context'; import { WithRouterPropTypes } from 'flavours/glitch/utils/react_router'; - import { useAppHistory } from './router'; const messages = defineMessages({ diff --git a/app/javascript/flavours/glitch/components/edited_timestamp/index.jsx b/app/javascript/flavours/glitch/components/edited_timestamp/index.jsx index 2363f132f1..5a16f67530 100644 --- a/app/javascript/flavours/glitch/components/edited_timestamp/index.jsx +++ b/app/javascript/flavours/glitch/components/edited_timestamp/index.jsx @@ -5,7 +5,6 @@ import { FormattedMessage, injectIntl } from 'react-intl'; import { connect } from 'react-redux'; - import ArrowDropDownIcon from '@/material-icons/400-24px/arrow_drop_down.svg?react'; import { openModal } from 'flavours/glitch/actions/modal'; import { Icon } from 'flavours/glitch/components/icon'; diff --git a/app/javascript/flavours/glitch/components/regeneration_indicator.jsx b/app/javascript/flavours/glitch/components/regeneration_indicator.jsx index 78844f389d..d42a7d7c72 100644 --- a/app/javascript/flavours/glitch/components/regeneration_indicator.jsx +++ b/app/javascript/flavours/glitch/components/regeneration_indicator.jsx @@ -1,6 +1,6 @@ import { FormattedMessage } from 'react-intl'; -import illustration from 'flavours/glitch/images/elephant_ui_working.svg'; +import illustration from '@/images/elephant_ui_working.svg'; const RegenerationIndicator = () => (
diff --git a/app/javascript/flavours/glitch/features/about/index.jsx b/app/javascript/flavours/glitch/features/about/index.jsx index e5544c8a74..623f89ed3d 100644 --- a/app/javascript/flavours/glitch/features/about/index.jsx +++ b/app/javascript/flavours/glitch/features/about/index.jsx @@ -10,7 +10,6 @@ import { List as ImmutableList } from 'immutable'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; - import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react'; import ExpandMoreIcon from '@/material-icons/400-24px/expand_more.svg?react'; import { fetchServer, fetchExtendedDescription, fetchDomainBlocks } from 'flavours/glitch/actions/server'; diff --git a/app/javascript/flavours/glitch/features/account_gallery/components/media_item.jsx b/app/javascript/flavours/glitch/features/account_gallery/components/media_item.jsx index ebd156a4f9..c709e58db1 100644 --- a/app/javascript/flavours/glitch/features/account_gallery/components/media_item.jsx +++ b/app/javascript/flavours/glitch/features/account_gallery/components/media_item.jsx @@ -12,7 +12,6 @@ import { Blurhash } from 'flavours/glitch/components/blurhash'; import { Icon } from 'flavours/glitch/components/icon'; import { autoPlayGif, displayMedia, useBlurhash } from 'flavours/glitch/initial_state'; - export default class MediaItem extends ImmutablePureComponent { static propTypes = { diff --git a/app/javascript/flavours/glitch/features/audio/index.jsx b/app/javascript/flavours/glitch/features/audio/index.jsx index dc9d76222d..6b0c2f6fea 100644 --- a/app/javascript/flavours/glitch/features/audio/index.jsx +++ b/app/javascript/flavours/glitch/features/audio/index.jsx @@ -18,7 +18,6 @@ import VolumeUpIcon from '@/material-icons/400-24px/volume_up-fill.svg?react'; import { Icon } from 'flavours/glitch/components/icon'; import { formatTime, getPointerPosition, fileNameFromURL } from 'flavours/glitch/features/video'; - import { Blurhash } from '../../components/blurhash'; import { displayMedia, useBlurhash } from '../../initial_state'; diff --git a/app/javascript/flavours/glitch/features/community_timeline/index.jsx b/app/javascript/flavours/glitch/features/community_timeline/index.jsx index e2b982aaf8..7be2196511 100644 --- a/app/javascript/flavours/glitch/features/community_timeline/index.jsx +++ b/app/javascript/flavours/glitch/features/community_timeline/index.jsx @@ -7,7 +7,6 @@ import { Helmet } from 'react-helmet'; import { connect } from 'react-redux'; - import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import { DismissableBanner } from 'flavours/glitch/components/dismissable_banner'; import { domain } from 'flavours/glitch/initial_state'; diff --git a/app/javascript/flavours/glitch/features/directory/index.jsx b/app/javascript/flavours/glitch/features/directory/index.jsx index 0d8742b255..293b89272a 100644 --- a/app/javascript/flavours/glitch/features/directory/index.jsx +++ b/app/javascript/flavours/glitch/features/directory/index.jsx @@ -9,7 +9,6 @@ import { List as ImmutableList } from 'immutable'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; - import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import { addColumn, removeColumn, moveColumn, changeColumnParams } from 'flavours/glitch/actions/columns'; import { fetchDirectory, expandDirectory } from 'flavours/glitch/actions/directory'; diff --git a/app/javascript/flavours/glitch/features/explore/index.jsx b/app/javascript/flavours/glitch/features/explore/index.jsx index dca2e59c5c..cca9cada47 100644 --- a/app/javascript/flavours/glitch/features/explore/index.jsx +++ b/app/javascript/flavours/glitch/features/explore/index.jsx @@ -8,7 +8,6 @@ import { NavLink, Switch, Route } from 'react-router-dom'; import { connect } from 'react-redux'; - import ExploreIcon from '@/material-icons/400-24px/explore.svg?react'; import SearchIcon from '@/material-icons/400-24px/search.svg?react'; import Column from 'flavours/glitch/components/column'; diff --git a/app/javascript/flavours/glitch/features/explore/results.jsx b/app/javascript/flavours/glitch/features/explore/results.jsx index 53285988c3..e0162f713a 100644 --- a/app/javascript/flavours/glitch/features/explore/results.jsx +++ b/app/javascript/flavours/glitch/features/explore/results.jsx @@ -9,7 +9,6 @@ import { List as ImmutableList } from 'immutable'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { connect } from 'react-redux'; - import FindInPageIcon from '@/material-icons/400-24px/find_in_page.svg?react'; import PeopleIcon from '@/material-icons/400-24px/group.svg?react'; import TagIcon from '@/material-icons/400-24px/tag.svg?react'; diff --git a/app/javascript/flavours/glitch/features/filters/select_filter.jsx b/app/javascript/flavours/glitch/features/filters/select_filter.jsx index f409cc2d70..3a46b8bd48 100644 --- a/app/javascript/flavours/glitch/features/filters/select_filter.jsx +++ b/app/javascript/flavours/glitch/features/filters/select_filter.jsx @@ -180,7 +180,7 @@ class SelectFilter extends PureComponent {
- +
diff --git a/app/javascript/flavours/glitch/features/firehose/index.jsx b/app/javascript/flavours/glitch/features/firehose/index.jsx index 29219974a9..678bc3525a 100644 --- a/app/javascript/flavours/glitch/features/firehose/index.jsx +++ b/app/javascript/flavours/glitch/features/firehose/index.jsx @@ -6,7 +6,6 @@ import { useIntl, defineMessages, FormattedMessage } from 'react-intl'; import { Helmet } from 'react-helmet'; import { NavLink } from 'react-router-dom'; - import PublicIcon from '@/material-icons/400-24px/public.svg?react'; import { addColumn } from 'flavours/glitch/actions/columns'; import { changeSetting } from 'flavours/glitch/actions/settings'; diff --git a/app/javascript/flavours/glitch/features/home_timeline/index.jsx b/app/javascript/flavours/glitch/features/home_timeline/index.jsx index f383a6e48c..a2683f587f 100644 --- a/app/javascript/flavours/glitch/features/home_timeline/index.jsx +++ b/app/javascript/flavours/glitch/features/home_timeline/index.jsx @@ -8,7 +8,6 @@ import { Helmet } from 'react-helmet'; import { connect } from 'react-redux'; - import CampaignIcon from '@/material-icons/400-24px/campaign.svg?react'; import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; import { fetchAnnouncements, toggleShowAnnouncements } from 'flavours/glitch/actions/announcements'; diff --git a/app/javascript/flavours/glitch/features/keyboard_shortcuts/index.jsx b/app/javascript/flavours/glitch/features/keyboard_shortcuts/index.jsx index 98f65d9b50..858d760c24 100644 --- a/app/javascript/flavours/glitch/features/keyboard_shortcuts/index.jsx +++ b/app/javascript/flavours/glitch/features/keyboard_shortcuts/index.jsx @@ -7,7 +7,6 @@ import { Helmet } from 'react-helmet'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; - import InfoIcon from '@/material-icons/400-24px/info.svg?react'; import Column from 'flavours/glitch/components/column'; import ColumnHeader from 'flavours/glitch/components/column_header'; diff --git a/app/javascript/flavours/glitch/features/list_adder/components/list.jsx b/app/javascript/flavours/glitch/features/list_adder/components/list.jsx index adbb16fcd6..e91c8e35bd 100644 --- a/app/javascript/flavours/glitch/features/list_adder/components/list.jsx +++ b/app/javascript/flavours/glitch/features/list_adder/components/list.jsx @@ -11,7 +11,6 @@ import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import { Icon } from 'flavours/glitch/components/icon'; - import { removeFromListAdder, addToListAdder } from '../../../actions/lists'; import { IconButton } from '../../../components/icon_button'; diff --git a/app/javascript/flavours/glitch/features/list_editor/components/search.jsx b/app/javascript/flavours/glitch/features/list_editor/components/search.jsx index 6e9cd44835..23e4b427dc 100644 --- a/app/javascript/flavours/glitch/features/list_editor/components/search.jsx +++ b/app/javascript/flavours/glitch/features/list_editor/components/search.jsx @@ -11,7 +11,6 @@ import CancelIcon from '@/material-icons/400-24px/cancel.svg?react'; import SearchIcon from '@/material-icons/400-24px/search.svg?react'; import { Icon } from 'flavours/glitch/components/icon'; - import { fetchListSuggestions, clearListSuggestions, changeListSuggestions } from '../../../actions/lists'; const messages = defineMessages({ diff --git a/app/javascript/flavours/glitch/features/list_timeline/index.jsx b/app/javascript/flavours/glitch/features/list_timeline/index.jsx index ae9f75318f..abc664e0a1 100644 --- a/app/javascript/flavours/glitch/features/list_timeline/index.jsx +++ b/app/javascript/flavours/glitch/features/list_timeline/index.jsx @@ -222,8 +222,6 @@ class ListTimeline extends PureComponent {
)} - -
{ const content = ( <> diff --git a/app/javascript/flavours/glitch/features/onboarding/index.jsx b/app/javascript/flavours/glitch/features/onboarding/index.jsx index fb9df29aeb..187ee3b770 100644 --- a/app/javascript/flavours/glitch/features/onboarding/index.jsx +++ b/app/javascript/flavours/glitch/features/onboarding/index.jsx @@ -8,7 +8,6 @@ import { Link, Switch, Route, useHistory } from 'react-router-dom'; import { useDispatch } from 'react-redux'; - import illustration from '@/images/elephant_ui_conversation.svg'; import AccountCircleIcon from '@/material-icons/400-24px/account_circle.svg?react'; import ArrowRightAltIcon from '@/material-icons/400-24px/arrow_right_alt.svg?react'; diff --git a/app/javascript/flavours/glitch/features/picture_in_picture/components/footer.jsx b/app/javascript/flavours/glitch/features/picture_in_picture/components/footer.jsx index 83e53d9263..3bf4f3b857 100644 --- a/app/javascript/flavours/glitch/features/picture_in_picture/components/footer.jsx +++ b/app/javascript/flavours/glitch/features/picture_in_picture/components/footer.jsx @@ -9,7 +9,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; - import OpenInNewIcon from '@/material-icons/400-24px/open_in_new.svg?react'; import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; import ReplyIcon from '@/material-icons/400-24px/reply.svg?react'; diff --git a/app/javascript/flavours/glitch/features/picture_in_picture/components/header.jsx b/app/javascript/flavours/glitch/features/picture_in_picture/components/header.jsx index dd90cd3522..5996ab240d 100644 --- a/app/javascript/flavours/glitch/features/picture_in_picture/components/header.jsx +++ b/app/javascript/flavours/glitch/features/picture_in_picture/components/header.jsx @@ -8,7 +8,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; - import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { Avatar } from 'flavours/glitch/components/avatar'; import { DisplayName } from 'flavours/glitch/components/display_name'; diff --git a/app/javascript/flavours/glitch/features/pinned_statuses/index.jsx b/app/javascript/flavours/glitch/features/pinned_statuses/index.jsx index 94d5f6cb4c..7b4e36cdaf 100644 --- a/app/javascript/flavours/glitch/features/pinned_statuses/index.jsx +++ b/app/javascript/flavours/glitch/features/pinned_statuses/index.jsx @@ -11,7 +11,6 @@ import { connect } from 'react-redux'; import PushPinIcon from '@/material-icons/400-24px/push_pin.svg?react'; import { getStatusList } from 'flavours/glitch/selectors'; - import { fetchPinnedStatuses } from '../../actions/pin_statuses'; import StatusList from '../../components/status_list'; import Column from '../ui/components/column'; diff --git a/app/javascript/flavours/glitch/features/public_timeline/index.jsx b/app/javascript/flavours/glitch/features/public_timeline/index.jsx index 0062a9f719..8b9503928b 100644 --- a/app/javascript/flavours/glitch/features/public_timeline/index.jsx +++ b/app/javascript/flavours/glitch/features/public_timeline/index.jsx @@ -7,7 +7,6 @@ import { Helmet } from 'react-helmet'; import { connect } from 'react-redux'; - import PublicIcon from '@/material-icons/400-24px/public.svg?react'; import { DismissableBanner } from 'flavours/glitch/components/dismissable_banner'; import { domain } from 'flavours/glitch/initial_state'; diff --git a/app/javascript/flavours/glitch/features/reblogs/index.jsx b/app/javascript/flavours/glitch/features/reblogs/index.jsx index 52e9a35833..3c02293e58 100644 --- a/app/javascript/flavours/glitch/features/reblogs/index.jsx +++ b/app/javascript/flavours/glitch/features/reblogs/index.jsx @@ -14,7 +14,6 @@ import RefreshIcon from '@/material-icons/400-24px/refresh.svg?react'; import RepeatIcon from '@/material-icons/400-24px/repeat.svg?react'; import { Icon } from 'flavours/glitch/components/icon'; - import { fetchReblogs, expandReblogs } from '../../actions/interactions'; import ColumnHeader from '../../components/column_header'; import { LoadingIndicator } from '../../components/loading_indicator'; diff --git a/app/javascript/flavours/glitch/features/report/components/option.jsx b/app/javascript/flavours/glitch/features/report/components/option.jsx index 3b40de8cba..8edeed28ad 100644 --- a/app/javascript/flavours/glitch/features/report/components/option.jsx +++ b/app/javascript/flavours/glitch/features/report/components/option.jsx @@ -6,7 +6,6 @@ import classNames from 'classnames'; import CheckIcon from '@/material-icons/400-24px/done.svg?react'; import { Icon } from 'flavours/glitch/components/icon'; - export default class Option extends PureComponent { static propTypes = { diff --git a/app/javascript/flavours/glitch/features/report/components/status_check_box.jsx b/app/javascript/flavours/glitch/features/report/components/status_check_box.jsx index 0ae20b8f48..06ed6ac33c 100644 --- a/app/javascript/flavours/glitch/features/report/components/status_check_box.jsx +++ b/app/javascript/flavours/glitch/features/report/components/status_check_box.jsx @@ -19,6 +19,7 @@ class StatusCheckBox extends PureComponent { status: ImmutablePropTypes.map.isRequired, checked: PropTypes.bool, onToggle: PropTypes.func.isRequired, + intl: PropTypes.object.isRequired, }; handleStatusesToggle = (value, checked) => { diff --git a/app/javascript/flavours/glitch/features/status/components/action_bar.jsx b/app/javascript/flavours/glitch/features/status/components/action_bar.jsx index 1d8707ccbf..ab00091200 100644 --- a/app/javascript/flavours/glitch/features/status/components/action_bar.jsx +++ b/app/javascript/flavours/glitch/features/status/components/action_bar.jsx @@ -17,8 +17,8 @@ import ReplyAllIcon from '@/material-icons/400-24px/reply_all.svg?react'; import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; import StarBorderIcon from '@/material-icons/400-24px/star.svg?react'; import RepeatActiveIcon from '@/svg-icons/repeat_active.svg?react'; -import RepeatDisabledIcon from '@/svg-icons/repeat_disabled.svg'; -import RepeatPrivateIcon from '@/svg-icons/repeat_private.svg'; +import RepeatDisabledIcon from '@/svg-icons/repeat_disabled.svg?react'; +import RepeatPrivateIcon from '@/svg-icons/repeat_private.svg?react'; import RepeatPrivateActiveIcon from '@/svg-icons/repeat_private_active.svg?react'; import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_FEDERATION } from 'flavours/glitch/permissions'; import { accountAdminLink, statusAdminLink } from 'flavours/glitch/utils/backend_links'; diff --git a/app/javascript/flavours/glitch/features/subscribed_languages_modal/index.jsx b/app/javascript/flavours/glitch/features/subscribed_languages_modal/index.jsx index 1edfe700fe..c02a6ed037 100644 --- a/app/javascript/flavours/glitch/features/subscribed_languages_modal/index.jsx +++ b/app/javascript/flavours/glitch/features/subscribed_languages_modal/index.jsx @@ -8,7 +8,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; - import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { followAccount } from 'flavours/glitch/actions/accounts'; import { Button } from 'flavours/glitch/components/button'; diff --git a/app/javascript/flavours/glitch/features/ui/components/embed_modal.jsx b/app/javascript/flavours/glitch/features/ui/components/embed_modal.jsx index edd2fb8940..87316b7f23 100644 --- a/app/javascript/flavours/glitch/features/ui/components/embed_modal.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/embed_modal.jsx @@ -4,7 +4,6 @@ import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; - import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import api from 'flavours/glitch/api'; import { IconButton } from 'flavours/glitch/components/icon_button'; diff --git a/app/javascript/flavours/glitch/features/ui/components/filter_modal.jsx b/app/javascript/flavours/glitch/features/ui/components/filter_modal.jsx index 9ce5eec874..92f83d8d59 100644 --- a/app/javascript/flavours/glitch/features/ui/components/filter_modal.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/filter_modal.jsx @@ -5,7 +5,6 @@ import { defineMessages, FormattedMessage, injectIntl } from 'react-intl'; import ImmutablePureComponent from 'react-immutable-pure-component'; import { connect } from 'react-redux'; - import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { fetchFilters, createFilter, createFilterStatus } from 'flavours/glitch/actions/filters'; import { fetchStatus } from 'flavours/glitch/actions/statuses'; diff --git a/app/javascript/flavours/glitch/features/ui/components/notifications_counter_icon.js b/app/javascript/flavours/glitch/features/ui/components/notifications_counter_icon.js index 8e38acfe80..0816e9660f 100644 --- a/app/javascript/flavours/glitch/features/ui/components/notifications_counter_icon.js +++ b/app/javascript/flavours/glitch/features/ui/components/notifications_counter_icon.js @@ -3,6 +3,7 @@ import { connect } from 'react-redux'; import NotificationsIcon from '@/material-icons/400-24px/notifications-fill.svg?react'; import { IconWithBadge } from 'flavours/glitch/components/icon_with_badge'; + const mapStateToProps = state => ({ count: state.getIn(['local_settings', 'notifications', 'tab_badge']) ? state.getIn(['notifications', 'unread']) : 0, id: 'bell', diff --git a/app/javascript/flavours/glitch/features/ui/util/async-components.js b/app/javascript/flavours/glitch/features/ui/util/async-components.js index 762df7ecf4..c17bb206e3 100644 --- a/app/javascript/flavours/glitch/features/ui/util/async-components.js +++ b/app/javascript/flavours/glitch/features/ui/util/async-components.js @@ -1,25 +1,25 @@ export function EmojiPicker () { - return import(/* webpackChunkName: "flavours/glitch/async/emoji_picker" */'flavours/glitch/features/emoji/emoji_picker'); + return import(/* webpackChunkName: "flavours/glitch/async/emoji_picker" */'../../emoji/emoji_picker'); } export function Compose () { - return import(/* webpackChunkName: "flavours/glitch/async/compose" */'flavours/glitch/features/compose'); + return import(/* webpackChunkName: "flavours/glitch/async/compose" */'../../compose'); } export function Notifications () { - return import(/* webpackChunkName: "flavours/glitch/async/notifications" */'flavours/glitch/features/notifications'); + return import(/* webpackChunkName: "flavours/glitch/async/notifications" */'../../notifications'); } export function HomeTimeline () { - return import(/* webpackChunkName: "flavours/glitch/async/home_timeline" */'flavours/glitch/features/home_timeline'); + return import(/* webpackChunkName: "flavours/glitch/async/home_timeline" */'../../home_timeline'); } export function PublicTimeline () { - return import(/* webpackChunkName: "flavours/glitch/async/public_timeline" */'flavours/glitch/features/public_timeline'); + return import(/* webpackChunkName: "flavours/glitch/async/public_timeline" */'../../public_timeline'); } export function CommunityTimeline () { - return import(/* webpackChunkName: "flavours/glitch/async/community_timeline" */'flavours/glitch/features/community_timeline'); + return import(/* webpackChunkName: "flavours/glitch/async/community_timeline" */'../../community_timeline'); } export function Firehose () { @@ -27,177 +27,177 @@ export function Firehose () { } export function HashtagTimeline () { - return import(/* webpackChunkName: "flavours/glitch/async/hashtag_timeline" */'flavours/glitch/features/hashtag_timeline'); + return import(/* webpackChunkName: "flavours/glitch/async/hashtag_timeline" */'../../hashtag_timeline'); } export function ListTimeline () { - return import(/* webpackChunkName: "flavours/glitch/async/list_timeline" */'flavours/glitch/features/list_timeline'); + return import(/* webpackChunkName: "flavours/glitch/async/list_timeline" */'../../list_timeline'); } export function Lists () { - return import(/* webpackChunkName: "flavours/glitch/async/lists" */'flavours/glitch/features/lists'); -} - -export function ListEditor () { - return import(/* webpackChunkName: "flavours/glitch/async/list_editor" */'flavours/glitch/features/list_editor'); + return import(/* webpackChunkName: "flavours/glitch/async/lists" */'../../lists'); } export function PinnedAccountsEditor () { - return import(/* webpackChunkName: "flavours/glitch/async/pinned_accounts_editor" */'flavours/glitch/features/pinned_accounts_editor'); + return import(/* webpackChunkName: "flavours/glitch/async/pinned_accounts_editor" */'../../pinned_accounts_editor'); } export function DirectTimeline() { - return import(/* webpackChunkName: "flavours/glitch/async/direct_timeline" */'flavours/glitch/features/direct_timeline'); + return import(/* webpackChunkName: "flavours/glitch/async/direct_timeline" */'../../direct_timeline'); } export function Status () { - return import(/* webpackChunkName: "flavours/glitch/async/status" */'flavours/glitch/features/status'); + return import(/* webpackChunkName: "flavours/glitch/async/status" */'../../status'); } export function GettingStarted () { - return import(/* webpackChunkName: "flavours/glitch/async/getting_started" */'flavours/glitch/features/getting_started'); -} - -export function KeyboardShortcuts () { - return import(/* webpackChunkName: "flavours/glitch/async/keyboard_shortcuts" */'flavours/glitch/features/keyboard_shortcuts'); -} - -export function PinnedStatuses () { - return import(/* webpackChunkName: "flavours/glitch/async/pinned_statuses" */'flavours/glitch/features/pinned_statuses'); -} - -export function AccountTimeline () { - return import(/* webpackChunkName: "flavours/glitch/async/account_timeline" */'flavours/glitch/features/account_timeline'); -} - -export function AccountGallery () { - return import(/* webpackChunkName: "flavours/glitch/async/account_gallery" */'flavours/glitch/features/account_gallery'); -} - -export function Followers () { - return import(/* webpackChunkName: "flavours/glitch/async/followers" */'flavours/glitch/features/followers'); -} - -export function Following () { - return import(/* webpackChunkName: "flavours/glitch/async/following" */'flavours/glitch/features/following'); -} - -export function Reblogs () { - return import(/* webpackChunkName: "flavours/glitch/async/reblogs" */'flavours/glitch/features/reblogs'); -} - -export function Favourites () { - return import(/* webpackChunkName: "flavours/glitch/async/favourites" */'flavours/glitch/features/favourites'); -} - -export function FollowRequests () { - return import(/* webpackChunkName: "flavours/glitch/async/follow_requests" */'flavours/glitch/features/follow_requests'); -} - -export function FavouritedStatuses () { - return import(/* webpackChunkName: "flavours/glitch/async/favourited_statuses" */'flavours/glitch/features/favourited_statuses'); -} - -export function FollowedTags () { - return import(/* webpackChunkName: "flavours/glitch/async/followed_tags" */'flavours/glitch/features/followed_tags'); -} - -export function BookmarkedStatuses () { - return import(/* webpackChunkName: "flavours/glitch/async/bookmarked_statuses" */'flavours/glitch/features/bookmarked_statuses'); -} - -export function Blocks () { - return import(/* webpackChunkName: "flavours/glitch/async/blocks" */'flavours/glitch/features/blocks'); -} - -export function DomainBlocks () { - return import(/* webpackChunkName: "flavours/glitch/async/domain_blocks" */'flavours/glitch/features/domain_blocks'); -} - -export function Mutes () { - return import(/* webpackChunkName: "flavours/glitch/async/mutes" */'flavours/glitch/features/mutes'); -} - -export function MuteModal () { - return import(/* webpackChunkName: "flavours/glitch/async/mute_modal" */'flavours/glitch/features/ui/components/mute_modal'); -} - -export function BlockModal () { - return import(/* webpackChunkName: "flavours/glitch/async/block_modal" */'flavours/glitch/features/ui/components/block_modal'); -} - -export function ReportModal () { - return import(/* webpackChunkName: "flavours/glitch/async/report_modal" */'flavours/glitch/features/ui/components/report_modal'); -} - -export function SettingsModal () { - return import(/* webpackChunkName: "flavours/glitch/async/settings_modal" */'flavours/glitch/features/local_settings'); -} - -export function MediaGallery () { - return import(/* webpackChunkName: "flavours/glitch/async/media_gallery" */'flavours/glitch/components/media_gallery'); -} - -export function Video () { - return import(/* webpackChunkName: "flavours/glitch/async/video" */'flavours/glitch/features/video'); -} - -export function Audio () { - return import(/* webpackChunkName: "features/glitch/async/audio" */'flavours/glitch/features/audio'); -} - -export function EmbedModal () { - return import(/* webpackChunkName: "flavours/glitch/async/embed_modal" */'flavours/glitch/features/ui/components/embed_modal'); + return import(/* webpackChunkName: "flavours/glitch/async/getting_started" */'../../getting_started'); } export function GettingStartedMisc () { - return import(/* webpackChunkName: "flavours/glitch/async/getting_started_misc" */'flavours/glitch/features/getting_started_misc'); + return import(/* webpackChunkName: "flavours/glitch/async/getting_started_misc" */'../../getting_started_misc'); +} + +export function KeyboardShortcuts () { + return import(/* webpackChunkName: "flavours/glitch/async/keyboard_shortcuts" */'../../keyboard_shortcuts'); +} + +export function PinnedStatuses () { + return import(/* webpackChunkName: "flavours/glitch/async/pinned_statuses" */'../../pinned_statuses'); +} + +export function AccountTimeline () { + return import(/* webpackChunkName: "flavours/glitch/async/account_timeline" */'../../account_timeline'); +} + +export function AccountGallery () { + return import(/* webpackChunkName: "flavours/glitch/async/account_gallery" */'../../account_gallery'); +} + +export function Followers () { + return import(/* webpackChunkName: "flavours/glitch/async/followers" */'../../followers'); +} + +export function Following () { + return import(/* webpackChunkName: "flavours/glitch/async/following" */'../../following'); +} + +export function Reblogs () { + return import(/* webpackChunkName: "flavours/glitch/async/reblogs" */'../../reblogs'); +} + +export function Favourites () { + return import(/* webpackChunkName: "flavours/glitch/async/favourites" */'../../favourites'); +} + +export function FollowRequests () { + return import(/* webpackChunkName: "flavours/glitch/async/follow_requests" */'../../follow_requests'); +} + +export function FavouritedStatuses () { + return import(/* webpackChunkName: "flavours/glitch/async/favourited_statuses" */'../../favourited_statuses'); +} + +export function FollowedTags () { + return import(/* webpackChunkName: "flavours/glitch/async/followed_tags" */'../../followed_tags'); +} + +export function BookmarkedStatuses () { + return import(/* webpackChunkName: "flavours/glitch/async/bookmarked_statuses" */'../../bookmarked_statuses'); +} + +export function Blocks () { + return import(/* webpackChunkName: "flavours/glitch/async/blocks" */'../../blocks'); +} + +export function DomainBlocks () { + return import(/* webpackChunkName: "flavours/glitch/async/domain_blocks" */'../../domain_blocks'); +} + +export function Mutes () { + return import(/* webpackChunkName: "flavours/glitch/async/mutes" */'../../mutes'); +} + +export function MuteModal () { + return import(/* webpackChunkName: "flavours/glitch/async/mute_modal" */'../components/mute_modal'); +} + +export function BlockModal () { + return import(/* webpackChunkName: "flavours/glitch/async/block_modal" */'../components/block_modal'); +} + +export function ReportModal () { + return import(/* webpackChunkName: "flavours/glitch/async/report_modal" */'../components/report_modal'); +} + +export function SettingsModal () { + return import(/* webpackChunkName: "flavours/glitch/async/settings_modal" */'../../local_settings'); +} + +export function MediaGallery () { + return import(/* webpackChunkName: "flavours/glitch/async/media_gallery" */'../../../components/media_gallery'); +} + +export function Video () { + return import(/* webpackChunkName: "flavours/glitch/async/video" */'../../video'); +} + +export function EmbedModal () { + return import(/* webpackChunkName: "flavours/glitch/async/embed_modal" */'../components/embed_modal'); +} + +export function ListEditor () { + return import(/* webpackChunkName: "flavours/glitch/async/list_editor" */'../../list_editor'); } export function ListAdder () { - return import(/* webpackChunkName: "features/glitch/async/list_adder" */'flavours/glitch/features/list_adder'); + return import(/* webpackChunkName: "features/glitch/async/list_adder" */'../../list_adder'); } export function Tesseract () { return import(/*webpackChunkName: "tesseract" */'tesseract.js'); } +export function Audio () { + return import(/* webpackChunkName: "features/glitch/async/audio" */'../../audio'); +} + export function Directory () { - return import(/* webpackChunkName: "features/glitch/async/directory" */'flavours/glitch/features/directory'); + return import(/* webpackChunkName: "features/glitch/async/directory" */'../../directory'); } export function Onboarding () { - return import(/* webpackChunkName: "features/glitch/async/onboarding" */'flavours/glitch/features/onboarding'); + return import(/* webpackChunkName: "features/glitch/async/onboarding" */'../../onboarding'); } export function CompareHistoryModal () { - return import(/*webpackChunkName: "flavours/glitch/async/compare_history_modal" */'flavours/glitch/features/ui/components/compare_history_modal'); -} - -export function FilterModal () { - return import(/*webpackChunkName: "flavours/glitch/async/filter_modal" */'flavours/glitch/features/ui/components/filter_modal'); + return import(/*webpackChunkName: "flavours/glitch/async/compare_history_modal" */'../components/compare_history_modal'); } export function Explore () { - return import(/* webpackChunkName: "flavours/glitch/async/explore" */'flavours/glitch/features/explore'); + return import(/* webpackChunkName: "flavours/glitch/async/explore" */'../../explore'); +} + +export function FilterModal () { + return import(/*webpackChunkName: "flavours/glitch/async/filter_modal" */'../components/filter_modal'); } export function InteractionModal () { - return import(/*webpackChunkName: "flavours/glitch/async/modals/interaction_modal" */'flavours/glitch/features/interaction_modal'); + return import(/*webpackChunkName: "flavours/glitch/async/modals/interaction_modal" */'../../interaction_modal'); } export function SubscribedLanguagesModal () { - return import(/*webpackChunkName: "flavours/glitch/async/modals/subscribed_languages_modal" */'flavours/glitch/features/subscribed_languages_modal'); + return import(/*webpackChunkName: "flavours/glitch/async/modals/subscribed_languages_modal" */'../../subscribed_languages_modal'); } export function ClosedRegistrationsModal () { - return import(/*webpackChunkName: "flavours/glitch/async/modals/closed_registrations_modal" */'flavours/glitch/features/closed_registrations_modal'); + return import(/*webpackChunkName: "flavours/glitch/async/modals/closed_registrations_modal" */'../../closed_registrations_modal'); } export function About () { - return import(/*webpackChunkName: "features/glitch/async/about" */'flavours/glitch/features/about'); + return import(/*webpackChunkName: "features/glitch/async/about" */'../../about'); } export function PrivacyPolicy () { - return import(/*webpackChunkName: "features/glitch/async/privacy_policy" */'flavours/glitch/features/privacy_policy'); + return import(/*webpackChunkName: "features/glitch/async/privacy_policy" */'../../privacy_policy'); } diff --git a/app/javascript/flavours/glitch/images/elephant_ui_working.svg b/app/javascript/flavours/glitch/images/elephant_ui_working.svg deleted file mode 100644 index 8ba475db0a..0000000000 --- a/app/javascript/flavours/glitch/images/elephant_ui_working.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/app/javascript/flavours/glitch/initial_state.js b/app/javascript/flavours/glitch/initial_state.js index 15f2673fa2..93991b19cf 100644 --- a/app/javascript/flavours/glitch/initial_state.js +++ b/app/javascript/flavours/glitch/initial_state.js @@ -45,20 +45,11 @@ * @property {boolean=} use_pending_items * @property {string} version * @property {string} sso_redirect - * @property {boolean} translation_enabled * @property {string} status_page_url * @property {boolean} system_emoji_font * @property {string} default_content_type */ -/** @type {string} */ -const initialPath = document.querySelector("head meta[name=initialPath]")?.getAttribute("content") ?? ''; -/** @type {boolean} */ -export const hasMultiColumnPath = initialPath === '/' - || initialPath === '/getting-started' - || initialPath === '/home' - || initialPath.startsWith('/deck'); - /** * @typedef InitialState * @property {Record} accounts @@ -74,6 +65,14 @@ const element = document.getElementById('initial-state'); /** @type {InitialState | undefined} */ const initialState = element?.textContent && JSON.parse(element.textContent); +/** @type {string} */ +const initialPath = document.querySelector("head meta[name=initialPath]")?.getAttribute("content") ?? ''; +/** @type {boolean} */ +export const hasMultiColumnPath = initialPath === '/' + || initialPath === '/getting-started' + || initialPath === '/home' + || initialPath.startsWith('/deck'); + // Glitch-soc-specific “local settings” if (initialState) { try { diff --git a/app/javascript/flavours/glitch/reducers/settings.js b/app/javascript/flavours/glitch/reducers/settings.js index 59b2e5dd40..f5768aedc6 100644 --- a/app/javascript/flavours/glitch/reducers/settings.js +++ b/app/javascript/flavours/glitch/reducers/settings.js @@ -12,9 +12,6 @@ import { uuid } from '../uuid'; const initialState = ImmutableMap({ saved: true, - onboarded: false, - layout: 'auto', - skinTone: 1, trends: ImmutableMap({ From 2b4e9fbc718b04bc035c5d8e6caa05c0e8998acd Mon Sep 17 00:00:00 2001 From: Sunny Ripert Date: Mon, 7 Nov 2022 15:41:42 +0100 Subject: [PATCH 38/96] [Glitch] Add form element on focal point modal Port 8515bc79628c6e753a09a7da42eff9ce7ed4ade7 to glitch-soc Signed-off-by: Claire --- .../ui/components/focal_point_modal.jsx | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.jsx b/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.jsx index d584277dc3..bf31c137f1 100644 --- a/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/focal_point_modal.jsx @@ -181,14 +181,14 @@ class FocalPointModal extends ImmutablePureComponent { handleKeyDown = (e) => { if (e.keyCode === 13 && (e.ctrlKey || e.metaKey)) { - e.preventDefault(); - e.stopPropagation(); this.props.onChangeDescription(e.target.value); - this.handleSubmit(); + this.handleSubmit(e); } }; - handleSubmit = () => { + handleSubmit = (e) => { + e.preventDefault(); + e.stopPropagation(); this.props.onSave(this.props.description, this.props.focusX, this.props.focusY); }; @@ -318,7 +318,7 @@ class FocalPointModal extends ImmutablePureComponent {
-
+
{focals &&

} {thumbnailable && ( @@ -367,12 +367,23 @@ class FocalPointModal extends ImmutablePureComponent {
- +
-
+
; } else if (account.getIn(['relationship', 'requested'])) { actionBtn =
diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 5bd11c3500..6d79a843d8 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -7455,10 +7455,7 @@ noscript { .button { flex-shrink: 1; white-space: nowrap; - - @media screen and (max-width: $no-gap-breakpoint) { - min-width: 0; - } + min-width: 80px; } .icon-button { From c10bbf5fe3800f933c33fa19cf23b5ec4fb778ea Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 11 Mar 2024 16:02:21 +0100 Subject: [PATCH 54/96] Add notification policies and notification requests in web UI (#29433) --- .../v1/notifications/requests_controller.rb | 6 +- .../mastodon/actions/notifications.js | 293 ++++++++++++++++++ .../mastodon/components/column_header.jsx | 53 ++-- .../components/column_settings.jsx | 2 +- .../mastodon/features/firehose/index.jsx | 20 +- .../components/column_settings.jsx | 38 +-- .../components/column_settings.tsx | 65 ++-- .../mastodon/features/list_timeline/index.jsx | 55 ++-- .../components/checkbox_with_label.jsx | 31 ++ .../components/column_settings.jsx | 146 +++++---- .../filtered_notifications_banner.jsx | 49 +++ .../components/notification_request.jsx | 65 ++++ .../containers/column_settings_container.js | 9 +- .../containers/filter_bar_container.js | 2 +- .../mastodon/features/notifications/index.jsx | 10 +- .../features/notifications/request.jsx | 144 +++++++++ .../features/notifications/requests.jsx | 85 +++++ .../components/column_settings.jsx | 12 +- app/javascript/mastodon/features/ui/index.jsx | 6 +- .../features/ui/util/async-components.js | 8 + app/javascript/mastodon/locales/en.json | 20 +- app/javascript/mastodon/reducers/index.ts | 4 + .../mastodon/reducers/notification_policy.js | 12 + .../reducers/notification_requests.js | 96 ++++++ .../mastodon/reducers/notifications.js | 2 +- app/javascript/mastodon/utils/numbers.ts | 8 + .../material-icons/400-24px/archive-fill.svg | 1 + .../material-icons/400-24px/archive.svg | 1 + .../styles/mastodon/components.scss | 271 ++++++++++++---- app/javascript/styles/mastodon/forms.scss | 6 + app/models/notification_request.rb | 2 +- config/routes.rb | 2 +- config/routes/api.rb | 2 +- spec/models/notification_policy_spec.rb | 2 +- spec/models/notification_request_spec.rb | 2 +- 35 files changed, 1278 insertions(+), 252 deletions(-) create mode 100644 app/javascript/mastodon/features/notifications/components/checkbox_with_label.jsx create mode 100644 app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.jsx create mode 100644 app/javascript/mastodon/features/notifications/components/notification_request.jsx create mode 100644 app/javascript/mastodon/features/notifications/request.jsx create mode 100644 app/javascript/mastodon/features/notifications/requests.jsx create mode 100644 app/javascript/mastodon/reducers/notification_policy.js create mode 100644 app/javascript/mastodon/reducers/notification_requests.js create mode 100644 app/javascript/material-icons/400-24px/archive-fill.svg create mode 100644 app/javascript/material-icons/400-24px/archive.svg diff --git a/app/controllers/api/v1/notifications/requests_controller.rb b/app/controllers/api/v1/notifications/requests_controller.rb index dbb9871530..35f5d58a81 100644 --- a/app/controllers/api/v1/notifications/requests_controller.rb +++ b/app/controllers/api/v1/notifications/requests_controller.rb @@ -18,6 +18,10 @@ class Api::V1::Notifications::RequestsController < Api::BaseController render json: @requests, each_serializer: REST::NotificationRequestSerializer, relationships: @relationships end + def show + render json: @request, serializer: REST::NotificationRequestSerializer + end + def accept AcceptNotificationRequestService.new.call(@request) render_empty @@ -31,7 +35,7 @@ class Api::V1::Notifications::RequestsController < Api::BaseController private def load_requests - requests = NotificationRequest.where(account: current_account).where(dismissed: truthy_param?(:dismissed)).includes(:last_status, from_account: [:account_stat, :user]).to_a_paginated_by_id( + requests = NotificationRequest.where(account: current_account).where(dismissed: truthy_param?(:dismissed) || false).includes(:last_status, from_account: [:account_stat, :user]).to_a_paginated_by_id( limit_param(DEFAULT_ACCOUNTS_LIMIT), params_slice(:max_id, :since_id, :min_id) ) diff --git a/app/javascript/mastodon/actions/notifications.js b/app/javascript/mastodon/actions/notifications.js index eafbf42d1b..30b7601d5d 100644 --- a/app/javascript/mastodon/actions/notifications.js +++ b/app/javascript/mastodon/actions/notifications.js @@ -44,6 +44,38 @@ export const NOTIFICATIONS_MARK_AS_READ = 'NOTIFICATIONS_MARK_AS_READ'; export const NOTIFICATIONS_SET_BROWSER_SUPPORT = 'NOTIFICATIONS_SET_BROWSER_SUPPORT'; export const NOTIFICATIONS_SET_BROWSER_PERMISSION = 'NOTIFICATIONS_SET_BROWSER_PERMISSION'; +export const NOTIFICATION_POLICY_FETCH_REQUEST = 'NOTIFICATION_POLICY_FETCH_REQUEST'; +export const NOTIFICATION_POLICY_FETCH_SUCCESS = 'NOTIFICATION_POLICY_FETCH_SUCCESS'; +export const NOTIFICATION_POLICY_FETCH_FAIL = 'NOTIFICATION_POLICY_FETCH_FAIL'; + +export const NOTIFICATION_REQUESTS_FETCH_REQUEST = 'NOTIFICATION_REQUESTS_FETCH_REQUEST'; +export const NOTIFICATION_REQUESTS_FETCH_SUCCESS = 'NOTIFICATION_REQUESTS_FETCH_SUCCESS'; +export const NOTIFICATION_REQUESTS_FETCH_FAIL = 'NOTIFICATION_REQUESTS_FETCH_FAIL'; + +export const NOTIFICATION_REQUESTS_EXPAND_REQUEST = 'NOTIFICATION_REQUESTS_EXPAND_REQUEST'; +export const NOTIFICATION_REQUESTS_EXPAND_SUCCESS = 'NOTIFICATION_REQUESTS_EXPAND_SUCCESS'; +export const NOTIFICATION_REQUESTS_EXPAND_FAIL = 'NOTIFICATION_REQUESTS_EXPAND_FAIL'; + +export const NOTIFICATION_REQUEST_FETCH_REQUEST = 'NOTIFICATION_REQUEST_FETCH_REQUEST'; +export const NOTIFICATION_REQUEST_FETCH_SUCCESS = 'NOTIFICATION_REQUEST_FETCH_SUCCESS'; +export const NOTIFICATION_REQUEST_FETCH_FAIL = 'NOTIFICATION_REQUEST_FETCH_FAIL'; + +export const NOTIFICATION_REQUEST_ACCEPT_REQUEST = 'NOTIFICATION_REQUEST_ACCEPT_REQUEST'; +export const NOTIFICATION_REQUEST_ACCEPT_SUCCESS = 'NOTIFICATION_REQUEST_ACCEPT_SUCCESS'; +export const NOTIFICATION_REQUEST_ACCEPT_FAIL = 'NOTIFICATION_REQUEST_ACCEPT_FAIL'; + +export const NOTIFICATION_REQUEST_DISMISS_REQUEST = 'NOTIFICATION_REQUEST_DISMISS_REQUEST'; +export const NOTIFICATION_REQUEST_DISMISS_SUCCESS = 'NOTIFICATION_REQUEST_DISMISS_SUCCESS'; +export const NOTIFICATION_REQUEST_DISMISS_FAIL = 'NOTIFICATION_REQUEST_DISMISS_FAIL'; + +export const NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST = 'NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST'; +export const NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS = 'NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS'; +export const NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL = 'NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL'; + +export const NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST = 'NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST'; +export const NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS = 'NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS'; +export const NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL = 'NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL'; + defineMessages({ mention: { id: 'notification.mention', defaultMessage: '{name} mentioned you' }, group: { id: 'notifications.group', defaultMessage: '{count} notifications' }, @@ -313,3 +345,264 @@ export function setBrowserPermission (value) { value, }; } + +export const fetchNotificationPolicy = () => (dispatch, getState) => { + dispatch(fetchNotificationPolicyRequest()); + + api(getState).get('/api/v1/notifications/policy').then(({ data }) => { + dispatch(fetchNotificationPolicySuccess(data)); + }).catch(err => { + dispatch(fetchNotificationPolicyFail(err)); + }); +}; + +export const fetchNotificationPolicyRequest = () => ({ + type: NOTIFICATION_POLICY_FETCH_REQUEST, +}); + +export const fetchNotificationPolicySuccess = policy => ({ + type: NOTIFICATION_POLICY_FETCH_SUCCESS, + policy, +}); + +export const fetchNotificationPolicyFail = error => ({ + type: NOTIFICATION_POLICY_FETCH_FAIL, + error, +}); + +export const updateNotificationsPolicy = params => (dispatch, getState) => { + dispatch(fetchNotificationPolicyRequest()); + + api(getState).put('/api/v1/notifications/policy', params).then(({ data }) => { + dispatch(fetchNotificationPolicySuccess(data)); + }).catch(err => { + dispatch(fetchNotificationPolicyFail(err)); + }); +}; + +export const fetchNotificationRequests = () => (dispatch, getState) => { + const params = {}; + + if (getState().getIn(['notificationRequests', 'isLoading'])) { + return; + } + + if (getState().getIn(['notificationRequests', 'items'])?.size > 0) { + params.since_id = getState().getIn(['notificationRequests', 'items', 0, 'id']); + } + + dispatch(fetchNotificationRequestsRequest()); + + api(getState).get('/api/v1/notifications/requests', { params }).then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedAccounts(response.data.map(x => x.account))); + dispatch(fetchNotificationRequestsSuccess(response.data, next ? next.uri : null)); + }).catch(err => { + dispatch(fetchNotificationRequestsFail(err)); + }); +}; + +export const fetchNotificationRequestsRequest = () => ({ + type: NOTIFICATION_REQUESTS_FETCH_REQUEST, +}); + +export const fetchNotificationRequestsSuccess = (requests, next) => ({ + type: NOTIFICATION_REQUESTS_FETCH_SUCCESS, + requests, + next, +}); + +export const fetchNotificationRequestsFail = error => ({ + type: NOTIFICATION_REQUESTS_FETCH_FAIL, + error, +}); + +export const expandNotificationRequests = () => (dispatch, getState) => { + const url = getState().getIn(['notificationRequests', 'next']); + + if (!url || getState().getIn(['notificationRequests', 'isLoading'])) { + return; + } + + dispatch(expandNotificationRequestsRequest()); + + api(getState).get(url).then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedAccounts(response.data.map(x => x.account))); + dispatch(expandNotificationRequestsSuccess(response.data, next?.uri)); + }).catch(err => { + dispatch(expandNotificationRequestsFail(err)); + }); +}; + +export const expandNotificationRequestsRequest = () => ({ + type: NOTIFICATION_REQUESTS_EXPAND_REQUEST, +}); + +export const expandNotificationRequestsSuccess = (requests, next) => ({ + type: NOTIFICATION_REQUESTS_EXPAND_SUCCESS, + requests, + next, +}); + +export const expandNotificationRequestsFail = error => ({ + type: NOTIFICATION_REQUESTS_EXPAND_FAIL, + error, +}); + +export const fetchNotificationRequest = id => (dispatch, getState) => { + const current = getState().getIn(['notificationRequests', 'current']); + + if (current.getIn(['item', 'id']) === id || current.get('isLoading')) { + return; + } + + dispatch(fetchNotificationRequestRequest(id)); + + api(getState).get(`/api/v1/notifications/requests/${id}`).then(({ data }) => { + dispatch(fetchNotificationRequestSuccess(data)); + }).catch(err => { + dispatch(fetchNotificationRequestFail(id, err)); + }); +}; + +export const fetchNotificationRequestRequest = id => ({ + type: NOTIFICATION_REQUEST_FETCH_REQUEST, + id, +}); + +export const fetchNotificationRequestSuccess = request => ({ + type: NOTIFICATION_REQUEST_FETCH_SUCCESS, + request, +}); + +export const fetchNotificationRequestFail = (id, error) => ({ + type: NOTIFICATION_REQUEST_FETCH_FAIL, + id, + error, +}); + +export const acceptNotificationRequest = id => (dispatch, getState) => { + dispatch(acceptNotificationRequestRequest(id)); + + api(getState).post(`/api/v1/notifications/requests/${id}/accept`).then(() => { + dispatch(acceptNotificationRequestSuccess(id)); + }).catch(err => { + dispatch(acceptNotificationRequestFail(id, err)); + }); +}; + +export const acceptNotificationRequestRequest = id => ({ + type: NOTIFICATION_REQUEST_ACCEPT_REQUEST, + id, +}); + +export const acceptNotificationRequestSuccess = id => ({ + type: NOTIFICATION_REQUEST_ACCEPT_SUCCESS, + id, +}); + +export const acceptNotificationRequestFail = (id, error) => ({ + type: NOTIFICATION_REQUEST_ACCEPT_FAIL, + id, + error, +}); + +export const dismissNotificationRequest = id => (dispatch, getState) => { + dispatch(dismissNotificationRequestRequest(id)); + + api(getState).post(`/api/v1/notifications/requests/${id}/dismiss`).then(() =>{ + dispatch(dismissNotificationRequestSuccess(id)); + }).catch(err => { + dispatch(dismissNotificationRequestFail(id, err)); + }); +}; + +export const dismissNotificationRequestRequest = id => ({ + type: NOTIFICATION_REQUEST_DISMISS_REQUEST, + id, +}); + +export const dismissNotificationRequestSuccess = id => ({ + type: NOTIFICATION_REQUEST_DISMISS_SUCCESS, + id, +}); + +export const dismissNotificationRequestFail = (id, error) => ({ + type: NOTIFICATION_REQUEST_DISMISS_FAIL, + id, + error, +}); + +export const fetchNotificationsForRequest = accountId => (dispatch, getState) => { + const current = getState().getIn(['notificationRequests', 'current']); + const params = { account_id: accountId }; + + if (current.getIn(['item', 'account']) === accountId) { + if (current.getIn(['notifications', 'isLoading'])) { + return; + } + + if (current.getIn(['notifications', 'items'])?.size > 0) { + params.since_id = current.getIn(['notifications', 'items', 0, 'id']); + } + } + + dispatch(fetchNotificationsForRequestRequest()); + + api(getState).get('/api/v1/notifications', { params }).then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedStatuses(response.data.map(item => item.status).filter(status => !!status))); + dispatch(fetchNotificationsForRequestSuccess(response.data, next?.uri)); + }).catch(err => { + dispatch(fetchNotificationsForRequestFail(err)); + }); +}; + +export const fetchNotificationsForRequestRequest = () => ({ + type: NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST, +}); + +export const fetchNotificationsForRequestSuccess = (notifications, next) => ({ + type: NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS, + notifications, + next, +}); + +export const fetchNotificationsForRequestFail = (error) => ({ + type: NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL, + error, +}); + +export const expandNotificationsForRequest = () => (dispatch, getState) => { + const url = getState().getIn(['notificationRequests', 'current', 'notifications', 'next']); + + if (!url || getState().getIn(['notificationRequests', 'current', 'notifications', 'isLoading'])) { + return; + } + + dispatch(expandNotificationsForRequestRequest()); + + api(getState).get(url).then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedStatuses(response.data.map(item => item.status).filter(status => !!status))); + dispatch(expandNotificationsForRequestSuccess(response.data, next?.uri)); + }).catch(err => { + dispatch(expandNotificationsForRequestFail(err)); + }); +}; + +export const expandNotificationsForRequestRequest = () => ({ + type: NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST, +}); + +export const expandNotificationsForRequestSuccess = (notifications, next) => ({ + type: NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS, + notifications, + next, +}); + +export const expandNotificationsForRequestFail = (error) => ({ + type: NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL, + error, +}); diff --git a/app/javascript/mastodon/components/column_header.jsx b/app/javascript/mastodon/components/column_header.jsx index 901888e750..8b7dcebc67 100644 --- a/app/javascript/mastodon/components/column_header.jsx +++ b/app/javascript/mastodon/components/column_header.jsx @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import { PureComponent, useCallback } from 'react'; -import { FormattedMessage, injectIntl, defineMessages } from 'react-intl'; +import { FormattedMessage, injectIntl, defineMessages, useIntl } from 'react-intl'; import classNames from 'classnames'; import { withRouter } from 'react-router-dom'; @@ -11,7 +11,7 @@ import ArrowBackIcon from '@/material-icons/400-24px/arrow_back.svg?react'; import ChevronLeftIcon from '@/material-icons/400-24px/chevron_left.svg?react'; import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react'; import CloseIcon from '@/material-icons/400-24px/close.svg?react'; -import TuneIcon from '@/material-icons/400-24px/tune.svg?react'; +import SettingsIcon from '@/material-icons/400-24px/settings.svg?react'; import { Icon } from 'mastodon/components/icon'; import { ButtonInTabsBar, useColumnsContext } from 'mastodon/features/ui/util/columns_context'; import { WithRouterPropTypes } from 'mastodon/utils/react_router'; @@ -23,10 +23,12 @@ const messages = defineMessages({ hide: { id: 'column_header.hide_settings', defaultMessage: 'Hide settings' }, moveLeft: { id: 'column_header.moveLeft_settings', defaultMessage: 'Move column to the left' }, moveRight: { id: 'column_header.moveRight_settings', defaultMessage: 'Move column to the right' }, + back: { id: 'column_back_button.label', defaultMessage: 'Back' }, }); -const BackButton = ({ pinned, show }) => { +const BackButton = ({ pinned, show, onlyIcon }) => { const history = useAppHistory(); + const intl = useIntl(); const { multiColumn } = useColumnsContext(); const handleBackClick = useCallback(() => { @@ -39,18 +41,20 @@ const BackButton = ({ pinned, show }) => { const showButton = history && !pinned && ((multiColumn && history.location?.state?.fromMastodon) || show); - if(!showButton) return null; - - return (); + if (!showButton) return null; + return ( + + ); }; BackButton.propTypes = { pinned: PropTypes.bool, show: PropTypes.bool, + onlyIcon: PropTypes.bool, }; class ColumnHeader extends PureComponent { @@ -145,27 +149,31 @@ class ColumnHeader extends PureComponent { } if (multiColumn && pinned) { - pinButton = ; + pinButton = ; moveButtons = ( -
+
); } else if (multiColumn && this.props.onPin) { - pinButton = ; + pinButton = ; } - backButton = ; + backButton = ; const collapsedContent = [ extraContent, ]; if (multiColumn) { - collapsedContent.push(pinButton); - collapsedContent.push(moveButtons); + collapsedContent.push( +
+ {pinButton} + {moveButtons} +
+ ); } if (this.context.identity.signedIn && (children || (multiColumn && this.props.onPin))) { @@ -177,7 +185,7 @@ class ColumnHeader extends PureComponent { onClick={this.handleToggleClick} > - + {collapseIssues && } @@ -190,16 +198,19 @@ class ColumnHeader extends PureComponent {

{hasTitle && ( - + <> + {backButton} + + + )} {!hasTitle && backButton}
- {hasTitle && backButton} {extraButton} {collapseButton}
diff --git a/app/javascript/mastodon/features/community_timeline/components/column_settings.jsx b/app/javascript/mastodon/features/community_timeline/components/column_settings.jsx index 69959c1760..15381b589d 100644 --- a/app/javascript/mastodon/features/community_timeline/components/column_settings.jsx +++ b/app/javascript/mastodon/features/community_timeline/components/column_settings.jsx @@ -20,7 +20,7 @@ class ColumnSettings extends PureComponent { const { settings, onChange } = this.props; return ( -
+
} />
diff --git a/app/javascript/mastodon/features/firehose/index.jsx b/app/javascript/mastodon/features/firehose/index.jsx index 6355efbfe0..c65fe48eac 100644 --- a/app/javascript/mastodon/features/firehose/index.jsx +++ b/app/javascript/mastodon/features/firehose/index.jsx @@ -42,15 +42,17 @@ const ColumnSettings = () => { ); return ( -
-
- } - /> -
+
+
+
+ } + /> +
+
); }; diff --git a/app/javascript/mastodon/features/hashtag_timeline/components/column_settings.jsx b/app/javascript/mastodon/features/hashtag_timeline/components/column_settings.jsx index c60de4c518..3412e5d1bd 100644 --- a/app/javascript/mastodon/features/hashtag_timeline/components/column_settings.jsx +++ b/app/javascript/mastodon/features/hashtag_timeline/components/column_settings.jsx @@ -107,28 +107,28 @@ class ColumnSettings extends PureComponent { const { settings, onChange } = this.props; return ( -
-
-
- +
+
+
+ } /> - - - +
+ + + + + +
-
- {this.state.open && ( -
- {this.modeSelect('any')} - {this.modeSelect('all')} - {this.modeSelect('none')} -
- )} - -
- } /> -
+ {this.state.open && ( +
+ {this.modeSelect('any')} + {this.modeSelect('all')} + {this.modeSelect('none')} +
+ )} +
); } diff --git a/app/javascript/mastodon/features/home_timeline/components/column_settings.tsx b/app/javascript/mastodon/features/home_timeline/components/column_settings.tsx index ca09d46c7e..3f0525fe57 100644 --- a/app/javascript/mastodon/features/home_timeline/components/column_settings.tsx +++ b/app/javascript/mastodon/features/home_timeline/components/column_settings.tsx @@ -24,43 +24,36 @@ export const ColumnSettings: React.FC = () => { ); return ( -
- - - +
+
+
+ + } + /> -
- - } - /> -
- -
- - } - /> -
+ + } + /> +
+
); }; diff --git a/app/javascript/mastodon/features/list_timeline/index.jsx b/app/javascript/mastodon/features/list_timeline/index.jsx index 24bf122fac..f640e503c2 100644 --- a/app/javascript/mastodon/features/list_timeline/index.jsx +++ b/app/javascript/mastodon/features/list_timeline/index.jsx @@ -193,35 +193,38 @@ class ListTimeline extends PureComponent { pinned={pinned} multiColumn={multiColumn} > -
- +
+
+ - -
+ + -
- - -
- - { replies_policy !== undefined && ( -
- - - -
- { ['none', 'list', 'followed'].map(policy => ( - - ))} +
+
+ +
-
- )} + + + {replies_policy !== undefined && ( +
+

+ +
+ { ['none', 'list', 'followed'].map(policy => ( + + ))} +
+
+ )} +
{ + const handleChange = useCallback(({ target }) => { + onChange(target.checked); + }, [onChange]); + + return ( + + ); +}; + +CheckboxWithLabel.propTypes = { + checked: PropTypes.bool, + disabled: PropTypes.bool, + children: PropTypes.children, + onChange: PropTypes.func, +}; diff --git a/app/javascript/mastodon/features/notifications/components/column_settings.jsx b/app/javascript/mastodon/features/notifications/components/column_settings.jsx index 09154f257a..2a9425b82b 100644 --- a/app/javascript/mastodon/features/notifications/components/column_settings.jsx +++ b/app/javascript/mastodon/features/notifications/components/column_settings.jsx @@ -7,6 +7,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_REPORTS } from 'mastodon/permissions'; +import { CheckboxWithLabel } from './checkbox_with_label'; import ClearColumnButton from './clear_column_button'; import GrantPermissionButton from './grant_permission_button'; import SettingToggle from './setting_toggle'; @@ -26,18 +27,34 @@ export default class ColumnSettings extends PureComponent { alertsEnabled: PropTypes.bool, browserSupport: PropTypes.bool, browserPermission: PropTypes.string, + notificationPolicy: ImmutablePropTypes.map, + onChangePolicy: PropTypes.func.isRequired, }; onPushChange = (path, checked) => { this.props.onChange(['push', ...path], checked); }; + handleFilterNotFollowing = checked => { + this.props.onChangePolicy('filter_not_following', checked); + }; + + handleFilterNotFollowers = checked => { + this.props.onChangePolicy('filter_not_followers', checked); + }; + + handleFilterNewAccounts = checked => { + this.props.onChangePolicy('filter_new_accounts', checked); + }; + + handleFilterPrivateMentions = checked => { + this.props.onChangePolicy('filter_private_mentions', checked); + }; + render () { - const { settings, pushSettings, onChange, onClear, alertsEnabled, browserSupport, browserPermission, onRequestNotificationPermission } = this.props; + const { settings, pushSettings, onChange, onClear, alertsEnabled, browserSupport, browserPermission, onRequestNotificationPermission, notificationPolicy } = this.props; const unreadMarkersShowStr = ; - const filterBarShowStr = ; - const filterAdvancedStr = ; const alertStr = ; const showStr = ; const soundStr = ; @@ -46,48 +63,59 @@ export default class ColumnSettings extends PureComponent { const pushStr = showPushSettings && ; return ( -
+
{alertsEnabled && browserSupport && browserPermission === 'denied' && ( -
- -
+ )} {alertsEnabled && browserSupport && browserPermission === 'default' && ( -
- - - -
+ + + )} -
+
-
+ -
- +
+

+ +
+ + + + + + + + + + + + + + + + + + + +
+
+ +
+

- +

-
+ -
- - - - -
- - -
-
- -
- +
+

@@ -95,10 +123,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -106,10 +134,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -117,10 +145,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -128,10 +156,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -139,10 +167,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -150,10 +178,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -161,10 +189,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -172,11 +200,11 @@ export default class ColumnSettings extends PureComponent {
-
+ {((this.context.identity.permissions & PERMISSION_MANAGE_USERS) === PERMISSION_MANAGE_USERS) && ( -
- +
+

@@ -184,12 +212,12 @@ export default class ColumnSettings extends PureComponent {
-
+ )} {((this.context.identity.permissions & PERMISSION_MANAGE_REPORTS) === PERMISSION_MANAGE_REPORTS) && ( -
- +
+

@@ -197,7 +225,7 @@ export default class ColumnSettings extends PureComponent {
-
+ )}
); diff --git a/app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.jsx b/app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.jsx new file mode 100644 index 0000000000..dddb9d6412 --- /dev/null +++ b/app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.jsx @@ -0,0 +1,49 @@ +import { useEffect } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import { Link } from 'react-router-dom'; + +import { useDispatch, useSelector } from 'react-redux'; + + +import ArchiveIcon from '@/material-icons/400-24px/archive.svg?react'; +import { fetchNotificationPolicy } from 'mastodon/actions/notifications'; +import { Icon } from 'mastodon/components/icon'; +import { toCappedNumber } from 'mastodon/utils/numbers'; + +export const FilteredNotificationsBanner = () => { + const dispatch = useDispatch(); + const policy = useSelector(state => state.get('notificationPolicy')); + + useEffect(() => { + dispatch(fetchNotificationPolicy()); + + const interval = setInterval(() => { + dispatch(fetchNotificationPolicy()); + }, 120000); + + return () => { + clearInterval(interval); + }; + }, [dispatch]); + + if (policy === null || policy.getIn(['summary', 'pending_notifications_count']) * 1 === 0) { + return null; + } + + return ( + + + +
+ + +
+ +
+ {toCappedNumber(policy.getIn(['summary', 'pending_notifications_count']))} +
+ + ); +}; diff --git a/app/javascript/mastodon/features/notifications/components/notification_request.jsx b/app/javascript/mastodon/features/notifications/components/notification_request.jsx new file mode 100644 index 0000000000..e24124ca6a --- /dev/null +++ b/app/javascript/mastodon/features/notifications/components/notification_request.jsx @@ -0,0 +1,65 @@ +import PropTypes from 'prop-types'; +import { useCallback } from 'react'; + +import { defineMessages, useIntl } from 'react-intl'; + +import { Link } from 'react-router-dom'; + +import { useSelector, useDispatch } from 'react-redux'; + +import DoneIcon from '@/material-icons/400-24px/done.svg?react'; +import VolumeOffIcon from '@/material-icons/400-24px/volume_off.svg?react'; +import { acceptNotificationRequest, dismissNotificationRequest } from 'mastodon/actions/notifications'; +import { Avatar } from 'mastodon/components/avatar'; +import { IconButton } from 'mastodon/components/icon_button'; +import { makeGetAccount } from 'mastodon/selectors'; +import { toCappedNumber } from 'mastodon/utils/numbers'; + +const getAccount = makeGetAccount(); + +const messages = defineMessages({ + accept: { id: 'notification_requests.accept', defaultMessage: 'Accept' }, + dismiss: { id: 'notification_requests.dismiss', defaultMessage: 'Dismiss' }, +}); + +export const NotificationRequest = ({ id, accountId, notificationsCount }) => { + const dispatch = useDispatch(); + const account = useSelector(state => getAccount(state, accountId)); + const intl = useIntl(); + + const handleDismiss = useCallback(() => { + dispatch(dismissNotificationRequest(id)); + }, [dispatch, id]); + + const handleAccept = useCallback(() => { + dispatch(acceptNotificationRequest(id)); + }, [dispatch, id]); + + return ( +
+ + + +
+
+ + {toCappedNumber(notificationsCount)} +
+ + @{account?.get('acct')} +
+ + +
+ + +
+
+ ); +}; + +NotificationRequest.propTypes = { + id: PropTypes.string.isRequired, + accountId: PropTypes.string.isRequired, + notificationsCount: PropTypes.string.isRequired, +}; diff --git a/app/javascript/mastodon/features/notifications/containers/column_settings_container.js b/app/javascript/mastodon/features/notifications/containers/column_settings_container.js index 1e62ed9a5a..de266160f8 100644 --- a/app/javascript/mastodon/features/notifications/containers/column_settings_container.js +++ b/app/javascript/mastodon/features/notifications/containers/column_settings_container.js @@ -4,7 +4,7 @@ import { connect } from 'react-redux'; import { showAlert } from '../../../actions/alerts'; import { openModal } from '../../../actions/modal'; -import { setFilter, clearNotifications, requestBrowserPermission } from '../../../actions/notifications'; +import { setFilter, clearNotifications, requestBrowserPermission, updateNotificationsPolicy } from '../../../actions/notifications'; import { changeAlerts as changePushNotifications } from '../../../actions/push_notifications'; import { changeSetting } from '../../../actions/settings'; import ColumnSettings from '../components/column_settings'; @@ -21,6 +21,7 @@ const mapStateToProps = state => ({ alertsEnabled: state.getIn(['settings', 'notifications', 'alerts']).includes(true), browserSupport: state.getIn(['notifications', 'browserSupport']), browserPermission: state.getIn(['notifications', 'browserPermission']), + notificationPolicy: state.get('notificationPolicy'), }); const mapDispatchToProps = (dispatch, { intl }) => ({ @@ -73,6 +74,12 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ dispatch(requestBrowserPermission()); }, + onChangePolicy (param, checked) { + dispatch(updateNotificationsPolicy({ + [param]: checked, + })); + }, + }); export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(ColumnSettings)); diff --git a/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js b/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js index 4e0184cef3..e448cd26ad 100644 --- a/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js +++ b/app/javascript/mastodon/features/notifications/containers/filter_bar_container.js @@ -5,7 +5,7 @@ import FilterBar from '../components/filter_bar'; const makeMapStateToProps = state => ({ selectedFilter: state.getIn(['settings', 'notifications', 'quickFilter', 'active']), - advancedMode: state.getIn(['settings', 'notifications', 'quickFilter', 'advanced']), + advancedMode: false, }); const mapDispatchToProps = (dispatch) => ({ diff --git a/app/javascript/mastodon/features/notifications/index.jsx b/app/javascript/mastodon/features/notifications/index.jsx index 30c63ed32a..e062957ff8 100644 --- a/app/javascript/mastodon/features/notifications/index.jsx +++ b/app/javascript/mastodon/features/notifications/index.jsx @@ -33,6 +33,7 @@ import ColumnHeader from '../../components/column_header'; import { LoadGap } from '../../components/load_gap'; import ScrollableList from '../../components/scrollable_list'; +import { FilteredNotificationsBanner } from './components/filtered_notifications_banner'; import NotificationsPermissionBanner from './components/notifications_permission_banner'; import ColumnSettingsContainer from './containers/column_settings_container'; import FilterBarContainer from './containers/filter_bar_container'; @@ -65,7 +66,6 @@ const getNotifications = createSelector([ }); const mapStateToProps = state => ({ - showFilterBar: state.getIn(['settings', 'notifications', 'quickFilter', 'show']), notifications: getNotifications(state), isLoading: state.getIn(['notifications', 'isLoading'], 0) > 0, isUnread: state.getIn(['notifications', 'unread']) > 0 || state.getIn(['notifications', 'pendingItems']).size > 0, @@ -85,7 +85,6 @@ class Notifications extends PureComponent { static propTypes = { columnId: PropTypes.string, notifications: ImmutablePropTypes.list.isRequired, - showFilterBar: PropTypes.bool.isRequired, dispatch: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, isLoading: PropTypes.bool, @@ -188,14 +187,14 @@ class Notifications extends PureComponent { }; render () { - const { intl, notifications, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, showFilterBar, lastReadId, canMarkAsRead, needsNotificationPermission } = this.props; + const { intl, notifications, isLoading, isUnread, columnId, multiColumn, hasMore, numPending, lastReadId, canMarkAsRead, needsNotificationPermission } = this.props; const pinned = !!columnId; const emptyMessage = ; const { signedIn } = this.context.identity; let scrollableContent = null; - const filterBarContainer = (signedIn && showFilterBar) + const filterBarContainer = signedIn ? () : null; @@ -285,6 +284,9 @@ class Notifications extends PureComponent { {filterBarContainer} + + + {scrollContainer} diff --git a/app/javascript/mastodon/features/notifications/request.jsx b/app/javascript/mastodon/features/notifications/request.jsx new file mode 100644 index 0000000000..5977a6ce96 --- /dev/null +++ b/app/javascript/mastodon/features/notifications/request.jsx @@ -0,0 +1,144 @@ +import PropTypes from 'prop-types'; +import { useRef, useCallback, useEffect } from 'react'; + +import { defineMessages, useIntl } from 'react-intl'; + +import { Helmet } from 'react-helmet'; + +import { useSelector, useDispatch } from 'react-redux'; + +import ArchiveIcon from '@/material-icons/400-24px/archive.svg?react'; +import DoneIcon from '@/material-icons/400-24px/done.svg?react'; +import VolumeOffIcon from '@/material-icons/400-24px/volume_off.svg?react'; +import { fetchNotificationRequest, fetchNotificationsForRequest, expandNotificationsForRequest, acceptNotificationRequest, dismissNotificationRequest } from 'mastodon/actions/notifications'; +import Column from 'mastodon/components/column'; +import ColumnHeader from 'mastodon/components/column_header'; +import { IconButton } from 'mastodon/components/icon_button'; +import ScrollableList from 'mastodon/components/scrollable_list'; + +import NotificationContainer from './containers/notification_container'; + +const messages = defineMessages({ + title: { id: 'notification_requests.notifications_from', defaultMessage: 'Notifications from {name}' }, + accept: { id: 'notification_requests.accept', defaultMessage: 'Accept' }, + dismiss: { id: 'notification_requests.dismiss', defaultMessage: 'Dismiss' }, +}); + +const selectChild = (ref, index, alignTop) => { + const container = ref.current.node; + const element = container.querySelector(`article:nth-of-type(${index + 1}) .focusable`); + + if (element) { + if (alignTop && container.scrollTop > element.offsetTop) { + element.scrollIntoView(true); + } else if (!alignTop && container.scrollTop + container.clientHeight < element.offsetTop + element.offsetHeight) { + element.scrollIntoView(false); + } + + element.focus(); + } +}; + +export const NotificationRequest = ({ multiColumn, params: { id } }) => { + const columnRef = useRef(); + const intl = useIntl(); + const dispatch = useDispatch(); + const notificationRequest = useSelector(state => state.getIn(['notificationRequests', 'current', 'item', 'id']) === id ? state.getIn(['notificationRequests', 'current', 'item']) : null); + const accountId = notificationRequest?.get('account'); + const account = useSelector(state => state.getIn(['accounts', accountId])); + const notifications = useSelector(state => state.getIn(['notificationRequests', 'current', 'notifications', 'items'])); + const isLoading = useSelector(state => state.getIn(['notificationRequests', 'current', 'notifications', 'isLoading'])); + const hasMore = useSelector(state => !!state.getIn(['notificationRequests', 'current', 'notifications', 'next'])); + const removed = useSelector(state => state.getIn(['notificationRequests', 'current', 'removed'])); + + const handleHeaderClick = useCallback(() => { + columnRef.current?.scrollTop(); + }, [columnRef]); + + const handleLoadMore = useCallback(() => { + dispatch(expandNotificationsForRequest()); + }, [dispatch]); + + const handleDismiss = useCallback(() => { + dispatch(dismissNotificationRequest(id)); + }, [dispatch, id]); + + const handleAccept = useCallback(() => { + dispatch(acceptNotificationRequest(id)); + }, [dispatch, id]); + + const handleMoveUp = useCallback(id => { + const elementIndex = notifications.findIndex(item => item !== null && item.get('id') === id) - 1; + selectChild(columnRef, elementIndex, true); + }, [columnRef, notifications]); + + const handleMoveDown = useCallback(id => { + const elementIndex = notifications.findIndex(item => item !== null && item.get('id') === id) + 1; + selectChild(columnRef, elementIndex, false); + }, [columnRef, notifications]); + + useEffect(() => { + dispatch(fetchNotificationRequest(id)); + }, [dispatch, id]); + + useEffect(() => { + if (accountId) { + dispatch(fetchNotificationsForRequest(accountId)); + } + }, [dispatch, accountId]); + + const columnTitle = intl.formatMessage(messages.title, { name: account?.get('display_name') }); + + return ( + + + + + + )} + /> + + + {notifications.map(item => ( + item && + ))} + + + + {columnTitle} + + + + ); +}; + +NotificationRequest.propTypes = { + multiColumn: PropTypes.bool, + params: PropTypes.shape({ + id: PropTypes.string.isRequired, + }), +}; + +export default NotificationRequest; diff --git a/app/javascript/mastodon/features/notifications/requests.jsx b/app/javascript/mastodon/features/notifications/requests.jsx new file mode 100644 index 0000000000..46e3c428a6 --- /dev/null +++ b/app/javascript/mastodon/features/notifications/requests.jsx @@ -0,0 +1,85 @@ +import PropTypes from 'prop-types'; +import { useRef, useCallback, useEffect } from 'react'; + +import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; + +import { Helmet } from 'react-helmet'; + +import { useSelector, useDispatch } from 'react-redux'; + +import ArchiveIcon from '@/material-icons/400-24px/archive.svg?react'; +import { fetchNotificationRequests, expandNotificationRequests } from 'mastodon/actions/notifications'; +import Column from 'mastodon/components/column'; +import ColumnHeader from 'mastodon/components/column_header'; +import ScrollableList from 'mastodon/components/scrollable_list'; + +import { NotificationRequest } from './components/notification_request'; + +const messages = defineMessages({ + title: { id: 'notification_requests.title', defaultMessage: 'Filtered notifications' }, +}); + +export const NotificationRequests = ({ multiColumn }) => { + const columnRef = useRef(); + const intl = useIntl(); + const dispatch = useDispatch(); + const isLoading = useSelector(state => state.getIn(['notificationRequests', 'isLoading'])); + const notificationRequests = useSelector(state => state.getIn(['notificationRequests', 'items'])); + const hasMore = useSelector(state => !!state.getIn(['notificationRequests', 'next'])); + + const handleHeaderClick = useCallback(() => { + columnRef.current?.scrollTop(); + }, [columnRef]); + + const handleLoadMore = useCallback(() => { + dispatch(expandNotificationRequests()); + }, [dispatch]); + + useEffect(() => { + dispatch(fetchNotificationRequests()); + }, [dispatch]); + + return ( + + + + } + > + {notificationRequests.map(request => ( + + ))} + + + + {intl.formatMessage(messages.title)} + + + + ); +}; + +NotificationRequests.propTypes = { + multiColumn: PropTypes.bool, +}; + +export default NotificationRequests; diff --git a/app/javascript/mastodon/features/public_timeline/components/column_settings.jsx b/app/javascript/mastodon/features/public_timeline/components/column_settings.jsx index 1ceec1ba66..c865f1bb02 100644 --- a/app/javascript/mastodon/features/public_timeline/components/column_settings.jsx +++ b/app/javascript/mastodon/features/public_timeline/components/column_settings.jsx @@ -20,11 +20,13 @@ class ColumnSettings extends PureComponent { const { settings, onChange } = this.props; return ( -
-
- } /> - } /> -
+
+
+
+ } /> + } /> +
+
); } diff --git a/app/javascript/mastodon/features/ui/index.jsx b/app/javascript/mastodon/features/ui/index.jsx index da554f684f..34c5dd3025 100644 --- a/app/javascript/mastodon/features/ui/index.jsx +++ b/app/javascript/mastodon/features/ui/index.jsx @@ -48,6 +48,8 @@ import { DirectTimeline, HashtagTimeline, Notifications, + NotificationRequests, + NotificationRequest, FollowRequests, FavouritedStatuses, BookmarkedStatuses, @@ -203,7 +205,9 @@ class SwitchingColumnsArea extends PureComponent { - + + + diff --git a/app/javascript/mastodon/features/ui/util/async-components.js b/app/javascript/mastodon/features/ui/util/async-components.js index 7b968204be..de9b6b4010 100644 --- a/app/javascript/mastodon/features/ui/util/async-components.js +++ b/app/javascript/mastodon/features/ui/util/async-components.js @@ -189,3 +189,11 @@ export function About () { export function PrivacyPolicy () { return import(/*webpackChunkName: "features/privacy_policy" */'../../privacy_policy'); } + +export function NotificationRequests () { + return import(/*webpackChunkName: "features/notifications/requests" */'../../notifications/requests'); +} + +export function NotificationRequest () { + return import(/*webpackChunkName: "features/notifications/request" */'../../notifications/request'); +} diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index 342b4c6e25..aed3a3a600 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -241,6 +241,7 @@ "empty_column.list": "There is nothing in this list yet. When members of this list publish new posts, they will appear here.", "empty_column.lists": "You don't have any lists yet. When you create one, it will show up here.", "empty_column.mutes": "You haven't muted any users yet.", + "empty_column.notification_requests": "All clear! There is nothing here. When you receive new notifications, they will appear here according to your settings.", "empty_column.notifications": "You don't have any notifications yet. When other people interact with you, you will see it here.", "empty_column.public": "There is nothing here! Write something publicly, or manually follow users from other servers to fill it up", "error.unexpected_crash.explanation": "Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", "filter_modal.select_filter.title": "Filter this post", "filter_modal.title.status": "Filter a post", + "filtered_notifications_banner.pending_requests": "Notifications from {count, plural, =0 {no} one {one person} other {# people}} you may know", + "filtered_notifications_banner.title": "Filtered notifications", "firehose.all": "All", "firehose.local": "This server", "firehose.remote": "Other servers", @@ -314,7 +317,6 @@ "hashtag.follow": "Follow hashtag", "hashtag.unfollow": "Unfollow hashtag", "hashtags.and_other": "…and {count, plural, other {# more}}", - "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", @@ -440,15 +442,16 @@ "notification.reblog": "{name} boosted your post", "notification.status": "{name} just posted", "notification.update": "{name} edited a post", + "notification_requests.accept": "Accept", + "notification_requests.dismiss": "Dismiss", + "notification_requests.notifications_from": "Notifications from {name}", + "notification_requests.title": "Filtered notifications", "notifications.clear": "Clear notifications", "notifications.clear_confirmation": "Are you sure you want to permanently clear all your notifications?", "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favorites:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show_bar": "Show filter bar", "notifications.column_settings.follow": "New followers:", "notifications.column_settings.follow_request": "New follow requests:", "notifications.column_settings.mention": "Mentions:", @@ -474,6 +477,15 @@ "notifications.permission_denied": "Desktop notifications are unavailable due to previously denied browser permissions request", "notifications.permission_denied_alert": "Desktop notifications can't be enabled, as browser permission has been denied before", "notifications.permission_required": "Desktop notifications are unavailable because the required permission has not been granted.", + "notifications.policy.filter_new_accounts.hint": "Created within the past {days, plural, one {one day} other {# days}}", + "notifications.policy.filter_new_accounts_title": "New accounts", + "notifications.policy.filter_not_followers_hint": "Including people who have been following you fewer than {days, plural, one {one day} other {# days}}", + "notifications.policy.filter_not_followers_title": "People not following you", + "notifications.policy.filter_not_following_hint": "Until you manually approve them", + "notifications.policy.filter_not_following_title": "People you don't follow", + "notifications.policy.filter_private_mentions_hint": "Filtered unless it's in reply to your own mention or if you follow the sender", + "notifications.policy.filter_private_mentions_title": "Unsolicited private mentions", + "notifications.policy.title": "Filter out notifications from…", "notifications_permission_banner.enable": "Enable desktop notifications", "notifications_permission_banner.how_to_control": "To receive notifications when Mastodon isn't open, enable desktop notifications. You can control precisely which types of interactions generate desktop notifications through the {icon} button above once they're enabled.", "notifications_permission_banner.title": "Never miss a thing", diff --git a/app/javascript/mastodon/reducers/index.ts b/app/javascript/mastodon/reducers/index.ts index ecef633873..51a76d191e 100644 --- a/app/javascript/mastodon/reducers/index.ts +++ b/app/javascript/mastodon/reducers/index.ts @@ -27,6 +27,8 @@ import media_attachments from './media_attachments'; import meta from './meta'; import { modalReducer } from './modal'; import mutes from './mutes'; +import { notificationPolicyReducer } from './notification_policy'; +import { notificationRequestsReducer } from './notification_requests'; import notifications from './notifications'; import picture_in_picture from './picture_in_picture'; import polls from './polls'; @@ -84,6 +86,8 @@ const reducers = { history, tags, followed_tags, + notificationPolicy: notificationPolicyReducer, + notificationRequests: notificationRequestsReducer, }; // We want the root state to be an ImmutableRecord, which is an object with a defined list of keys, diff --git a/app/javascript/mastodon/reducers/notification_policy.js b/app/javascript/mastodon/reducers/notification_policy.js new file mode 100644 index 0000000000..8edb4d12a1 --- /dev/null +++ b/app/javascript/mastodon/reducers/notification_policy.js @@ -0,0 +1,12 @@ +import { fromJS } from 'immutable'; + +import { NOTIFICATION_POLICY_FETCH_SUCCESS } from 'mastodon/actions/notifications'; + +export const notificationPolicyReducer = (state = null, action) => { + switch(action.type) { + case NOTIFICATION_POLICY_FETCH_SUCCESS: + return fromJS(action.policy); + default: + return state; + } +}; diff --git a/app/javascript/mastodon/reducers/notification_requests.js b/app/javascript/mastodon/reducers/notification_requests.js new file mode 100644 index 0000000000..4247062a58 --- /dev/null +++ b/app/javascript/mastodon/reducers/notification_requests.js @@ -0,0 +1,96 @@ +import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable'; + +import { + NOTIFICATION_REQUESTS_EXPAND_REQUEST, + NOTIFICATION_REQUESTS_EXPAND_SUCCESS, + NOTIFICATION_REQUESTS_EXPAND_FAIL, + NOTIFICATION_REQUESTS_FETCH_REQUEST, + NOTIFICATION_REQUESTS_FETCH_SUCCESS, + NOTIFICATION_REQUESTS_FETCH_FAIL, + NOTIFICATION_REQUEST_FETCH_REQUEST, + NOTIFICATION_REQUEST_FETCH_SUCCESS, + NOTIFICATION_REQUEST_FETCH_FAIL, + NOTIFICATION_REQUEST_ACCEPT_REQUEST, + NOTIFICATION_REQUEST_DISMISS_REQUEST, + NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST, + NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS, + NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL, + NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST, + NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS, + NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL, +} from 'mastodon/actions/notifications'; + +import { notificationToMap } from './notifications'; + +const initialState = ImmutableMap({ + items: ImmutableList(), + isLoading: false, + next: null, + current: ImmutableMap({ + isLoading: false, + item: null, + removed: false, + notifications: ImmutableMap({ + items: ImmutableList(), + isLoading: false, + next: null, + }), + }), +}); + +const normalizeRequest = request => fromJS({ + ...request, + account: request.account.id, +}); + +const removeRequest = (state, id) => { + if (state.getIn(['current', 'item', 'id']) === id) { + state = state.setIn(['current', 'removed'], true); + } + + return state.update('items', list => list.filterNot(item => item.get('id') === id)); +}; + +export const notificationRequestsReducer = (state = initialState, action) => { + switch(action.type) { + case NOTIFICATION_REQUESTS_FETCH_SUCCESS: + return state.withMutations(map => { + map.update('items', list => ImmutableList(action.requests.map(normalizeRequest)).concat(list)); + map.set('isLoading', false); + map.update('next', next => next ?? action.next); + }); + case NOTIFICATION_REQUESTS_EXPAND_SUCCESS: + return state.withMutations(map => { + map.update('items', list => list.concat(ImmutableList(action.requests.map(normalizeRequest)))); + map.set('isLoading', false); + map.set('next', action.next); + }); + case NOTIFICATION_REQUESTS_EXPAND_REQUEST: + case NOTIFICATION_REQUESTS_FETCH_REQUEST: + return state.set('isLoading', true); + case NOTIFICATION_REQUESTS_EXPAND_FAIL: + case NOTIFICATION_REQUESTS_FETCH_FAIL: + return state.set('isLoading', false); + case NOTIFICATION_REQUEST_ACCEPT_REQUEST: + case NOTIFICATION_REQUEST_DISMISS_REQUEST: + return removeRequest(state, action.id); + case NOTIFICATION_REQUEST_FETCH_REQUEST: + return state.set('current', initialState.get('current').set('isLoading', true)); + case NOTIFICATION_REQUEST_FETCH_SUCCESS: + return state.update('current', map => map.set('isLoading', false).set('item', normalizeRequest(action.request))); + case NOTIFICATION_REQUEST_FETCH_FAIL: + return state.update('current', map => map.set('isLoading', false)); + case NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST: + case NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST: + return state.setIn(['current', 'notifications', 'isLoading'], true); + case NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS: + return state.updateIn(['current', 'notifications'], map => map.set('isLoading', false).update('items', list => ImmutableList(action.notifications.map(notificationToMap)).concat(list)).update('next', next => next ?? action.next)); + case NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS: + return state.updateIn(['current', 'notifications'], map => map.set('isLoading', false).update('items', list => list.concat(ImmutableList(action.notifications.map(notificationToMap)))).set('next', action.next)); + case NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL: + case NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL: + return state.setIn(['current', 'notifications', 'isLoading'], false); + default: + return state; + } +}; diff --git a/app/javascript/mastodon/reducers/notifications.js b/app/javascript/mastodon/reducers/notifications.js index 2ca301b19a..b1c80b3d4f 100644 --- a/app/javascript/mastodon/reducers/notifications.js +++ b/app/javascript/mastodon/reducers/notifications.js @@ -48,7 +48,7 @@ const initialState = ImmutableMap({ browserPermission: 'default', }); -const notificationToMap = notification => ImmutableMap({ +export const notificationToMap = notification => ImmutableMap({ id: notification.id, type: notification.type, account: notification.account.id, diff --git a/app/javascript/mastodon/utils/numbers.ts b/app/javascript/mastodon/utils/numbers.ts index 0a73061f69..ee2dabf566 100644 --- a/app/javascript/mastodon/utils/numbers.ts +++ b/app/javascript/mastodon/utils/numbers.ts @@ -69,3 +69,11 @@ export function pluralReady( export function roundTo10(num: number): number { return Math.round(num * 0.1) / 0.1; } + +export function toCappedNumber(num: string): string { + if (parseInt(num) > 99) { + return '99+'; + } else { + return num; + } +} diff --git a/app/javascript/material-icons/400-24px/archive-fill.svg b/app/javascript/material-icons/400-24px/archive-fill.svg new file mode 100644 index 0000000000..bb604288f5 --- /dev/null +++ b/app/javascript/material-icons/400-24px/archive-fill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/material-icons/400-24px/archive.svg b/app/javascript/material-icons/400-24px/archive.svg new file mode 100644 index 0000000000..6b72fca4ee --- /dev/null +++ b/app/javascript/material-icons/400-24px/archive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 6d79a843d8..faa775ec4b 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -3289,12 +3289,13 @@ $ui-header-height: 55px; border: 0; border-bottom: 1px solid lighten($ui-base-color, 8%); text-align: unset; - padding: 15px; + padding: 13px; margin: 0; z-index: 3; outline: 0; display: flex; align-items: center; + gap: 5px; &:hover { text-decoration: underline; @@ -3304,6 +3305,7 @@ $ui-header-height: 55px; .column-header__back-button { display: flex; align-items: center; + gap: 5px; background: $ui-base-color; border: 0; font-family: inherit; @@ -3311,23 +3313,19 @@ $ui-header-height: 55px; cursor: pointer; white-space: nowrap; font-size: 16px; - padding: 0 5px 0 0; + padding: 13px; z-index: 3; &:hover { text-decoration: underline; } - &:last-child { - padding: 0 15px 0 0; + &.compact { + padding-inline-end: 5px; + flex: 0 0 auto; } } -.column-back-button__icon { - display: inline-block; - margin-inline-end: 5px; -} - .react-toggle { display: inline-block; position: relative; @@ -4013,7 +4011,7 @@ a.status-card { z-index: 2; outline: 0; - & > button { + &__title { display: flex; align-items: center; gap: 5px; @@ -4035,8 +4033,18 @@ a.status-card { } } - & > .column-header__back-button { + .column-header__back-button + &__title { + padding-inline-start: 0; + } + + .column-header__back-button { + flex: 1; color: $highlight-text-color; + + &.compact { + flex: 0 0 auto; + color: $primary-text-color; + } } &.active { @@ -4050,6 +4058,18 @@ a.status-card { &:active { outline: 0; } + + &__advanced-buttons { + display: flex; + justify-content: space-between; + align-items: center; + padding: 16px; + padding-top: 0; + + &:first-child { + padding-top: 16px; + } + } } .column-header__buttons { @@ -4136,7 +4156,6 @@ a.status-card { .column-header__collapsible-inner { background: $ui-base-color; - padding: 15px; } .column-header__setting-btn { @@ -4158,20 +4177,8 @@ a.status-card { } .column-header__setting-arrows { - float: right; - - .column-header__setting-btn { - padding: 5px; - - &:first-child { - padding-inline-end: 7px; - } - - &:last-child { - padding-inline-start: 7px; - margin-inline-start: 5px; - } - } + display: flex; + align-items: center; } .text-btn { @@ -4408,24 +4415,56 @@ a.status-card { text-align: center; } -.column-settings__outer { - background: lighten($ui-base-color, 8%); - padding: 15px; -} +.column-settings { + display: flex; + flex-direction: column; -.column-settings__section { - color: $darker-text-color; - cursor: default; - display: block; - font-weight: 500; - margin-bottom: 10px; -} + &__section { + // FIXME: Legacy + color: $darker-text-color; + cursor: default; + display: block; + font-weight: 500; + } -.column-settings__row--with-margin { - margin-bottom: 15px; + .column-header__links { + margin: 0; + } + + section { + padding: 16px; + border-bottom: 1px solid lighten($ui-base-color, 8%); + + &:last-child { + border-bottom: 0; + } + } + + h3 { + font-size: 16px; + line-height: 24px; + letter-spacing: 0.5px; + font-weight: 500; + color: $primary-text-color; + margin-bottom: 16px; + } + + &__row { + display: flex; + flex-direction: column; + gap: 12px; + } + + .app-form__toggle { + &__toggle > div { + border: 0; + } + } } .column-settings__hashtags { + margin-top: 15px; + .column-settings__row { margin-bottom: 15px; } @@ -4549,16 +4588,13 @@ a.status-card { } .setting-toggle { - display: block; - line-height: 24px; + display: flex; + align-items: center; + gap: 8px; } .setting-toggle__label { color: $darker-text-color; - display: inline-block; - margin-bottom: 14px; - margin-inline-start: 8px; - vertical-align: middle; } .limited-account-hint { @@ -6949,29 +6985,33 @@ a.status-card { background: $ui-base-color; &__column { - padding: 10px 15px; - padding-bottom: 0; + display: flex; + flex-direction: column; + gap: 15px; + padding: 15px; } .radio-button { - display: block; + display: flex; } } .column-settings__row .radio-button { - display: block; + display: flex; } .radio-button { font-size: 14px; position: relative; - display: inline-block; - padding: 6px 0; + display: inline-flex; + align-items: center; line-height: 18px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: pointer; + gap: 10px; + color: $secondary-text-color; input[type='radio'], input[type='checkbox'] { @@ -6979,21 +7019,29 @@ a.status-card { } &__input { - display: inline-block; + display: block; position: relative; - border: 1px solid $ui-primary-color; + border: 2px solid $secondary-text-color; box-sizing: border-box; width: 18px; height: 18px; flex: 0 0 auto; - margin-inline-end: 10px; - top: -1px; border-radius: 50%; - vertical-align: middle; &.checked { - border-color: lighten($ui-highlight-color, 4%); - background: lighten($ui-highlight-color, 4%); + border-color: $secondary-text-color; + + &::before { + position: absolute; + left: 2px; + top: 2px; + content: ''; + display: block; + border-radius: 50%; + width: 10px; + height: 10px; + background: $secondary-text-color; + } } } } @@ -9588,3 +9636,110 @@ noscript { } } } + +.filtered-notifications-banner { + display: flex; + align-items: center; + background: $ui-base-color; + border-bottom: 1px solid lighten($ui-base-color, 8%); + padding: 15px; + gap: 15px; + color: $darker-text-color; + text-decoration: none; + + &:hover, + &:active, + &:focus { + color: $secondary-text-color; + + .filtered-notifications-banner__badge { + background: $secondary-text-color; + } + } + + .icon { + width: 24px; + height: 24px; + } + + &__text { + flex: 1 1 auto; + font-style: 14px; + line-height: 20px; + + strong { + font-size: 16px; + line-height: 24px; + display: block; + } + } + + &__badge { + background: $darker-text-color; + color: $ui-base-color; + border-radius: 100px; + padding: 2px 8px; + font-weight: 500; + font-size: 11px; + line-height: 16px; + } +} + +.notification-request { + display: flex; + align-items: center; + gap: 16px; + padding: 15px; + border-bottom: 1px solid lighten($ui-base-color, 8%); + + &__link { + display: flex; + align-items: center; + gap: 12px; + flex: 1 1 auto; + text-decoration: none; + color: inherit; + overflow: hidden; + + .account__avatar { + flex-shrink: 0; + } + } + + &__name { + flex: 1 1 auto; + color: $darker-text-color; + font-style: 14px; + line-height: 20px; + overflow: hidden; + text-overflow: ellipsis; + + &__display-name { + display: flex; + align-items: center; + gap: 6px; + font-size: 16px; + letter-spacing: 0.5px; + line-height: 24px; + color: $secondary-text-color; + } + + .filtered-notifications-banner__badge { + background-color: $highlight-text-color; + border-radius: 4px; + padding: 1px 6px; + } + } + + &__actions { + display: flex; + align-items: center; + gap: 8px; + + .icon-button { + border-radius: 4px; + border: 1px solid lighten($ui-base-color, 8%); + padding: 5px; + } + } +} diff --git a/app/javascript/styles/mastodon/forms.scss b/app/javascript/styles/mastodon/forms.scss index 3ac5c3df95..f6ec44fb53 100644 --- a/app/javascript/styles/mastodon/forms.scss +++ b/app/javascript/styles/mastodon/forms.scss @@ -1313,6 +1313,12 @@ code { font-weight: 600; } + .hint { + display: block; + font-size: 14px; + color: $darker-text-color; + } + .recommended { position: absolute; margin: 0 4px; diff --git a/app/models/notification_request.rb b/app/models/notification_request.rb index 7ae7e46d1b..6901b3985b 100644 --- a/app/models/notification_request.rb +++ b/app/models/notification_request.rb @@ -48,6 +48,6 @@ class NotificationRequest < ApplicationRecord private def prepare_notifications_count - self.notifications_count = Notification.where(account: account, from_account: from_account).limit(MAX_MEANINGFUL_COUNT).count + self.notifications_count = Notification.where(account: account, from_account: from_account, filtered: true).limit(MAX_MEANINGFUL_COUNT).count end end diff --git a/config/routes.rb b/config/routes.rb index 51c10a14f6..2ec7494969 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -27,7 +27,7 @@ Rails.application.routes.draw do /public/remote /conversations /lists/(*any) - /notifications + /notifications/(*any) /favourites /bookmarks /pinned diff --git a/config/routes/api.rb b/config/routes/api.rb index 18a247e9fd..07340a6340 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -151,7 +151,7 @@ namespace :api, format: false do end namespace :notifications do - resources :requests, only: :index do + resources :requests, only: [:index, :show] do member do post :accept post :dismiss diff --git a/spec/models/notification_policy_spec.rb b/spec/models/notification_policy_spec.rb index bbfa548cf4..cfd8e85eda 100644 --- a/spec/models/notification_policy_spec.rb +++ b/spec/models/notification_policy_spec.rb @@ -9,7 +9,7 @@ RSpec.describe NotificationPolicy do let(:sender) { Fabricate(:account) } before do - Fabricate.times(2, :notification, account: subject.account, activity: Fabricate(:status, account: sender)) + Fabricate.times(2, :notification, account: subject.account, activity: Fabricate(:status, account: sender), filtered: true) Fabricate(:notification_request, account: subject.account, from_account: sender) subject.summarize! end diff --git a/spec/models/notification_request_spec.rb b/spec/models/notification_request_spec.rb index f4613aaede..07bbc3e0a8 100644 --- a/spec/models/notification_request_spec.rb +++ b/spec/models/notification_request_spec.rb @@ -10,7 +10,7 @@ RSpec.describe NotificationRequest do context 'when there are remaining notifications' do before do - Fabricate(:notification, account: subject.account, activity: Fabricate(:status, account: subject.from_account)) + Fabricate(:notification, account: subject.account, activity: Fabricate(:status, account: subject.from_account), filtered: true) subject.reconsider_existence! end From a38e4241851b71a979200e0090b014d13aae2908 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 11 Mar 2024 11:14:55 -0400 Subject: [PATCH 55/96] Use unchanging github links in docs/comments (#29545) --- .eslintrc.js | 4 ++-- Dockerfile | 2 +- config/initializers/open_redirects.rb | 11 ++++------- lib/mastodon/migration_helpers.rb | 3 ++- spec/config/initializers/rack/attack_spec.rb | 2 +- spec/controllers/.rubocop.yml | 4 ++-- 6 files changed, 12 insertions(+), 14 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index bd818c3ce4..502b9cefed 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -123,7 +123,7 @@ module.exports = defineConfig({ 'react/react-in-jsx-scope': 'off', // not needed with new JSX transform 'react/self-closing-comp': 'error', - // recommended values found in https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/src/index.js + // recommended values found in https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/v6.8.0/src/index.js#L46 'jsx-a11y/accessible-emoji': 'warn', 'jsx-a11y/click-events-have-key-events': 'off', 'jsx-a11y/label-has-associated-control': 'off', @@ -176,7 +176,7 @@ module.exports = defineConfig({ }, ], - // See https://github.com/import-js/eslint-plugin-import/blob/main/config/recommended.js + // See https://github.com/import-js/eslint-plugin-import/blob/v2.29.1/config/recommended.js 'import/extensions': [ 'error', 'always', diff --git a/Dockerfile b/Dockerfile index 119c266b89..facd9b8aa0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,7 +29,7 @@ ARG MASTODON_VERSION_METADATA="" # See: https://docs.joinmastodon.org/admin/config/#rails_serve_static_files ARG RAILS_SERVE_STATIC_FILES="true" # Allow to use YJIT compiler -# See: https://github.com/ruby/ruby/blob/master/doc/yjit/yjit.md +# See: https://github.com/ruby/ruby/blob/v3_2_3/doc/yjit/yjit.md ARG RUBY_YJIT_ENABLE="1" # Timezone used by the Docker container and runtime, change with [--build-arg TZ=Europe/Berlin] ARG TZ="Etc/UTC" diff --git a/config/initializers/open_redirects.rb b/config/initializers/open_redirects.rb index c953a990c6..1c5a66e07d 100644 --- a/config/initializers/open_redirects.rb +++ b/config/initializers/open_redirects.rb @@ -1,10 +1,7 @@ # frozen_string_literal: true -# TODO -# Starting with Rails 7.0, the framework default here is to set this true. -# However, we have a location in devise that redirects where we don't have an -# easy ability to override the method or set a config option, and where the -# redirect does not supply this option itself. -# https://github.com/heartcombo/devise/blob/v4.9.2/app/controllers/devise/confirmations_controller.rb#L28 -# Once a solution is found, this line can be removed. +# TODO: Starting with Rails 7.0, the framework default is true for this setting. +# This location in devise redirects and we can't hook in or override: +# https://github.com/heartcombo/devise/blob/v4.9.3/app/controllers/devise/confirmations_controller.rb#L28 +# When solution is found, this setting can go back to default. Rails.application.config.action_controller.raise_on_open_redirects = false diff --git a/lib/mastodon/migration_helpers.rb b/lib/mastodon/migration_helpers.rb index a713f42d41..9997e42523 100644 --- a/lib/mastodon/migration_helpers.rb +++ b/lib/mastodon/migration_helpers.rb @@ -743,7 +743,8 @@ into similar problems in the future (e.g. when new tables are created). private - # https://github.com/rails/rails/blob/v5.2.0/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb#L678-L684 + # Private method copied from: + # https://github.com/rails/rails/blob/v7.1.3.2/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb#L974-L980 def extract_foreign_key_action(specifier) case specifier when 'c'; :cascade diff --git a/spec/config/initializers/rack/attack_spec.rb b/spec/config/initializers/rack/attack_spec.rb index c9ce9e27d0..e25b7dfde9 100644 --- a/spec/config/initializers/rack/attack_spec.rb +++ b/spec/config/initializers/rack/attack_spec.rb @@ -13,7 +13,7 @@ describe Rack::Attack, type: :request do # to avoid crossing period boundaries. # The code Rack::Attack uses to set periods is the following: - # https://github.com/rack/rack-attack/blob/v6.6.1/lib/rack/attack/cache.rb#L64-L66 + # https://github.com/rack/rack-attack/blob/v6.7.0/lib/rack/attack/cache.rb#L70-L72 # So we want to minimize `Time.now.to_i % period` travel_to Time.zone.at(counter_prefix * period.seconds) diff --git a/spec/controllers/.rubocop.yml b/spec/controllers/.rubocop.yml index 525479be81..51d7c23de1 100644 --- a/spec/controllers/.rubocop.yml +++ b/spec/controllers/.rubocop.yml @@ -1,6 +1,6 @@ inherit_from: ../../.rubocop.yml -# Anonymous controllers in specs cannot access described_class -# https://github.com/rubocop/rubocop-rspec/blob/master/lib/rubocop/cop/rspec/described_class.rb#L36-L39 +# Anonymous controllers in specs cannot access `described_class`, explanation: +# https://github.com/rubocop/rubocop-rspec/blob/v2.26.1/lib/rubocop/cop/rspec/described_class.rb#L36-L56 RSpec/DescribedClass: SkipBlocks: true From 24319836de6046fb2985ec1a24c30ad7d47584d7 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 11 Mar 2024 11:46:25 -0400 Subject: [PATCH 56/96] Convert request-based setup into factory setup in push/subscriptions request spec (#29489) --- .../api/v1/push/subscriptions_spec.rb | 90 ++++++++++++------- 1 file changed, 56 insertions(+), 34 deletions(-) diff --git a/spec/requests/api/v1/push/subscriptions_spec.rb b/spec/requests/api/v1/push/subscriptions_spec.rb index d699fd1e08..700250ee2a 100644 --- a/spec/requests/api/v1/push/subscriptions_spec.rb +++ b/spec/requests/api/v1/push/subscriptions_spec.rb @@ -37,66 +37,88 @@ describe 'API V1 Push Subscriptions' do let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } describe 'POST /api/v1/push/subscription' do - before do - post '/api/v1/push/subscription', params: create_payload, headers: headers - end + subject { post '/api/v1/push/subscription', params: create_payload, headers: headers } - it 'saves push subscriptions' do - push_subscription = Web::PushSubscription.find_by(endpoint: create_payload[:subscription][:endpoint]) + it 'saves push subscriptions and returns expected JSON' do + subject - expect(push_subscription.endpoint).to eq(create_payload[:subscription][:endpoint]) - expect(push_subscription.key_p256dh).to eq(create_payload[:subscription][:keys][:p256dh]) - expect(push_subscription.key_auth).to eq(create_payload[:subscription][:keys][:auth]) - expect(push_subscription.user_id).to eq user.id - expect(push_subscription.access_token_id).to eq token.id - end + expect(endpoint_push_subscription) + .to have_attributes( + endpoint: eq(create_payload[:subscription][:endpoint]), + key_p256dh: eq(create_payload[:subscription][:keys][:p256dh]), + key_auth: eq(create_payload[:subscription][:keys][:auth]), + user_id: eq(user.id), + access_token_id: eq(token.id) + ) - it 'replaces old subscription on repeat calls' do - post '/api/v1/push/subscription', params: create_payload, headers: headers - - expect(Web::PushSubscription.where(endpoint: create_payload[:subscription][:endpoint]).count).to eq 1 - end - - it 'returns the expected JSON' do expect(body_as_json.with_indifferent_access) .to include( { endpoint: create_payload[:subscription][:endpoint], alerts: {}, policy: 'all' } ) end + + it 'replaces old subscription on repeat calls' do + 2.times { subject } + + expect(endpoint_push_subscriptions.count) + .to eq(1) + end end describe 'PUT /api/v1/push/subscription' do - before do - post '/api/v1/push/subscription', params: create_payload, headers: headers - put '/api/v1/push/subscription', params: alerts_payload, headers: headers - end + subject { put '/api/v1/push/subscription', params: alerts_payload, headers: headers } - it 'changes alert settings' do - push_subscription = Web::PushSubscription.find_by(endpoint: create_payload[:subscription][:endpoint]) + before { create_subscription_with_token } - expect(push_subscription.data['policy']).to eq(alerts_payload[:data][:policy]) + it 'changes data policy and alert settings and returns expected JSON' do + expect { subject } + .to change { endpoint_push_subscription.reload.data } + .from(nil) + .to(include('policy' => alerts_payload[:data][:policy])) %w(follow follow_request favourite reblog mention poll status).each do |type| - expect(push_subscription.data['alerts'][type]).to eq(alerts_payload[:data][:alerts][type.to_sym].to_s) + expect(endpoint_push_subscription.data['alerts']).to include( + type.to_s => eq(alerts_payload[:data][:alerts][type.to_sym].to_s) + ) end - end - it 'returns the expected JSON' do expect(body_as_json.with_indifferent_access) .to include( - { endpoint: create_payload[:subscription][:endpoint], alerts: alerts_payload[:data][:alerts], policy: alerts_payload[:data][:policy] } + endpoint: create_payload[:subscription][:endpoint], + alerts: alerts_payload[:data][:alerts], + policy: alerts_payload[:data][:policy] ) end end describe 'DELETE /api/v1/push/subscription' do - before do - post '/api/v1/push/subscription', params: create_payload, headers: headers - delete '/api/v1/push/subscription', headers: headers - end + subject { delete '/api/v1/push/subscription', headers: headers } + + before { create_subscription_with_token } it 'removes the subscription' do - expect(Web::PushSubscription.find_by(endpoint: create_payload[:subscription][:endpoint])).to be_nil + expect { subject } + .to change { endpoint_push_subscription }.to(nil) end end + + private + + def endpoint_push_subscriptions + Web::PushSubscription.where( + endpoint: create_payload[:subscription][:endpoint] + ) + end + + def endpoint_push_subscription + endpoint_push_subscriptions.first + end + + def create_subscription_with_token + Fabricate( + :web_push_subscription, + endpoint: create_payload[:subscription][:endpoint], + access_token_id: token.id + ) + end end From 777510a69640b86ee76be83b3bad76ecb63e385e Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 11 Mar 2024 09:57:07 +0100 Subject: [PATCH 57/96] [Glitch] Add hints for rules Port 5b3a8737d6fa84c91e5158c34170f488df9ad313 to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/features/about/index.jsx | 3 ++- app/javascript/flavours/glitch/styles/about.scss | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/features/about/index.jsx b/app/javascript/flavours/glitch/features/about/index.jsx index 623f89ed3d..a201dd5f28 100644 --- a/app/javascript/flavours/glitch/features/about/index.jsx +++ b/app/javascript/flavours/glitch/features/about/index.jsx @@ -170,7 +170,8 @@ class About extends PureComponent {
    {server.get('rules').map(rule => (
  1. - {rule.get('text')} +
    {rule.get('text')}
    + {rule.get('hint').length > 0 && (
    {rule.get('hint')}
    )}
  2. ))}
diff --git a/app/javascript/flavours/glitch/styles/about.scss b/app/javascript/flavours/glitch/styles/about.scss index 0f02563b48..9d23ef41ab 100644 --- a/app/javascript/flavours/glitch/styles/about.scss +++ b/app/javascript/flavours/glitch/styles/about.scss @@ -53,4 +53,10 @@ $fluid-breakpoint: $maximum-width + 20px; border-bottom: 0; } } + + &__hint { + font-size: 14px; + font-weight: 400; + color: $darker-text-color; + } } From efbc8cba17a680ac983b64236b030f814b27ab2c Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 11 Mar 2024 09:57:23 +0100 Subject: [PATCH 58/96] [Glitch] Change dropdown menu icon to not be replaced by close icon when open in web UI Port 2347ea813e5be2ecf762c8a275373a3e2bea56e8 to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/components/dropdown_menu.jsx | 3 +-- app/javascript/flavours/glitch/features/ui/index.jsx | 6 ++---- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/app/javascript/flavours/glitch/components/dropdown_menu.jsx b/app/javascript/flavours/glitch/components/dropdown_menu.jsx index 4d9c34a762..26c828fd64 100644 --- a/app/javascript/flavours/glitch/components/dropdown_menu.jsx +++ b/app/javascript/flavours/glitch/components/dropdown_menu.jsx @@ -9,7 +9,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import { supportsPassiveEvents } from 'detect-passive-events'; import Overlay from 'react-overlays/Overlay'; -import CloseIcon from '@/material-icons/400-24px/close.svg?react'; import { CircularProgress } from 'flavours/glitch/components/circular_progress'; import { WithRouterPropTypes } from 'flavours/glitch/utils/react_router'; @@ -298,7 +297,7 @@ class Dropdown extends PureComponent { }) : ( ({ hasMediaAttachments: state.getIn(['compose', 'media_attachments']).size > 0, canUploadMore: !state.getIn(['compose', 'media_attachments']).some(x => ['audio', 'video'].includes(x.get('type'))) && state.getIn(['compose', 'media_attachments']).size < 4, isWide: state.getIn(['local_settings', 'stretch']), - dropdownMenuIsOpen: state.dropdownMenu.openId !== null, unreadNotifications: state.getIn(['notifications', 'unread']), showFaviconBadge: state.getIn(['local_settings', 'notifications', 'favicon_badge']), hicolorPrivacyIcons: state.getIn(['local_settings', 'hicolor_privacy_icons']), @@ -274,7 +273,6 @@ class UI extends PureComponent { hasMediaAttachments: PropTypes.bool, canUploadMore: PropTypes.bool, intl: PropTypes.object.isRequired, - dropdownMenuIsOpen: PropTypes.bool, unreadNotifications: PropTypes.number, showFaviconBadge: PropTypes.bool, hicolorPrivacyIcons: PropTypes.bool, @@ -600,7 +598,7 @@ class UI extends PureComponent { render () { const { draggingOver } = this.state; - const { children, isWide, location, dropdownMenuIsOpen, layout, moved } = this.props; + const { children, isWide, location, layout, moved } = this.props; const className = classNames('ui', { 'wide': isWide, @@ -632,7 +630,7 @@ class UI extends PureComponent { return ( -
+
{moved && (
Date: Mon, 11 Mar 2024 10:13:35 +0100 Subject: [PATCH 59/96] [Glitch] Use the server setting to get the max number of poll options in UI Port b9722dfe2bdb024e5e98b96d2fc5712d6cb5f747 to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/actions/compose.js | 3 ++- .../glitch/features/compose/components/poll_form.jsx | 5 +++-- app/javascript/flavours/glitch/reducers/compose.js | 8 ++++---- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/javascript/flavours/glitch/actions/compose.js b/app/javascript/flavours/glitch/actions/compose.js index 9e65df7b39..2646aa7b02 100644 --- a/app/javascript/flavours/glitch/actions/compose.js +++ b/app/javascript/flavours/glitch/actions/compose.js @@ -822,11 +822,12 @@ export function addPollOption(title) { }; } -export function changePollOption(index, title) { +export function changePollOption(index, title, maxOptions) { return { type: COMPOSE_POLL_OPTION_CHANGE, index, title, + maxOptions, }; } diff --git a/app/javascript/flavours/glitch/features/compose/components/poll_form.jsx b/app/javascript/flavours/glitch/features/compose/components/poll_form.jsx index e757b9162a..361522d7b4 100644 --- a/app/javascript/flavours/glitch/features/compose/components/poll_form.jsx +++ b/app/javascript/flavours/glitch/features/compose/components/poll_form.jsx @@ -59,10 +59,11 @@ const Option = ({ multipleChoice, index, title, autoFocus }) => { const dispatch = useDispatch(); const suggestions = useSelector(state => state.getIn(['compose', 'suggestions'])); const lang = useSelector(state => state.getIn(['compose', 'language'])); + const maxOptions = useSelector(state => state.getIn(['server', 'server', 'configuration', 'polls', 'max_options'])); const handleChange = useCallback(({ target: { value } }) => { - dispatch(changePollOption(index, value)); - }, [dispatch, index]); + dispatch(changePollOption(index, value, maxOptions)); + }, [dispatch, index, maxOptions]); const handleSuggestionsFetchRequested = useCallback(token => { dispatch(fetchComposeSuggestions(token)); diff --git a/app/javascript/flavours/glitch/reducers/compose.js b/app/javascript/flavours/glitch/reducers/compose.js index 787e7ee2db..f96d9e959f 100644 --- a/app/javascript/flavours/glitch/reducers/compose.js +++ b/app/javascript/flavours/glitch/reducers/compose.js @@ -54,7 +54,7 @@ import { import { REDRAFT } from '../actions/statuses'; import { STORE_HYDRATE } from '../actions/store'; import { TIMELINE_DELETE } from '../actions/timelines'; -import { me, defaultContentType, pollLimits } from '../initial_state'; +import { me, defaultContentType } from '../initial_state'; import { recoverHashtags } from '../utils/hashtag'; import { unescapeHTML } from '../utils/html'; import { overwrite } from '../utils/js_helpers'; @@ -356,12 +356,12 @@ const updateSuggestionTags = (state, token) => { }); }; -const updatePoll = (state, index, value) => state.updateIn(['poll', 'options'], options => { +const updatePoll = (state, index, value, maxOptions) => state.updateIn(['poll', 'options'], options => { const tmp = options.set(index, value).filterNot(x => x.trim().length === 0); if (tmp.size === 0) { return tmp.push('').push(''); - } else if (tmp.size < pollLimits.max_options) { + } else if (tmp.size < maxOptions) { return tmp.push(''); } @@ -649,7 +649,7 @@ export default function compose(state = initialState, action) { case COMPOSE_POLL_REMOVE: return state.set('poll', null); case COMPOSE_POLL_OPTION_CHANGE: - return updatePoll(state, action.index, action.title); + return updatePoll(state, action.index, action.title, action.maxOptions); case COMPOSE_POLL_SETTINGS_CHANGE: return state.update('poll', poll => poll.set('expires_in', action.expiresIn).set('multiple', action.isMultiple)); case COMPOSE_LANGUAGE_CHANGE: From 3631ddbfc9f412f2801f91911931952ea0780d4d Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 11 Mar 2024 14:35:23 +0100 Subject: [PATCH 60/96] [Glitch] Change icons in navigation panel to be filled when active in web UI Port 16c856729bfa400422825b06c843efe7b85c72f8 Signed-off-by: Claire --- .../features/ui/components/column_link.jsx | 15 ++-- .../follow_requests_column_link.jsx | 55 ------------ .../features/ui/components/list_panel.jsx | 56 +++++-------- .../ui/components/navigation_panel.jsx | 84 +++++++++++++++---- .../components/notifications_counter_icon.js | 13 --- 5 files changed, 98 insertions(+), 125 deletions(-) delete mode 100644 app/javascript/flavours/glitch/features/ui/components/follow_requests_column_link.jsx delete mode 100644 app/javascript/flavours/glitch/features/ui/components/notifications_counter_icon.js diff --git a/app/javascript/flavours/glitch/features/ui/components/column_link.jsx b/app/javascript/flavours/glitch/features/ui/components/column_link.jsx index f42ff5a6e6..4445435309 100644 --- a/app/javascript/flavours/glitch/features/ui/components/column_link.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/column_link.jsx @@ -1,27 +1,30 @@ import PropTypes from 'prop-types'; import classNames from 'classnames'; -import { NavLink } from 'react-router-dom'; +import { useRouteMatch, NavLink } from 'react-router-dom'; import { Icon } from 'flavours/glitch/components/icon'; -const ColumnLink = ({ icon, iconComponent, text, to, onClick, href, method, badge, transparent, ...other }) => { +const ColumnLink = ({ icon, activeIcon, iconComponent, activeIconComponent, text, to, onClick, href, method, badge, transparent, ...other }) => { + const match = useRouteMatch(to); const className = classNames('column-link', { 'column-link--transparent': transparent }); const badgeElement = typeof badge !== 'undefined' ? {badge} : null; const iconElement = (typeof icon === 'string' || iconComponent) ? : icon; + const activeIconElement = activeIcon ?? (activeIconComponent ? : iconElement); + const active = match?.isExact; if (href) { return ( - {iconElement} + {active ? activeIconElement : iconElement} {text} {badgeElement} ); } else if (to) { return ( - - {iconElement} + + {active ? activeIconElement : iconElement} {text} {badgeElement} @@ -46,6 +49,8 @@ const ColumnLink = ({ icon, iconComponent, text, to, onClick, href, method, badg ColumnLink.propTypes = { icon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]).isRequired, iconComponent: PropTypes.func, + activeIcon: PropTypes.node, + activeIconComponent: PropTypes.func, text: PropTypes.string.isRequired, to: PropTypes.string, onClick: PropTypes.func, diff --git a/app/javascript/flavours/glitch/features/ui/components/follow_requests_column_link.jsx b/app/javascript/flavours/glitch/features/ui/components/follow_requests_column_link.jsx deleted file mode 100644 index 24fd5b6442..0000000000 --- a/app/javascript/flavours/glitch/features/ui/components/follow_requests_column_link.jsx +++ /dev/null @@ -1,55 +0,0 @@ -import PropTypes from 'prop-types'; -import { Component } from 'react'; - -import { injectIntl, defineMessages } from 'react-intl'; - -import { List as ImmutableList } from 'immutable'; -import { connect } from 'react-redux'; - -import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; -import { fetchFollowRequests } from 'flavours/glitch/actions/accounts'; -import { IconWithBadge } from 'flavours/glitch/components/icon_with_badge'; -import ColumnLink from 'flavours/glitch/features/ui/components/column_link'; - -const messages = defineMessages({ - text: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' }, -}); - -const mapStateToProps = state => ({ - count: state.getIn(['user_lists', 'follow_requests', 'items'], ImmutableList()).size, -}); - -class FollowRequestsColumnLink extends Component { - - static propTypes = { - dispatch: PropTypes.func.isRequired, - count: PropTypes.number.isRequired, - intl: PropTypes.object.isRequired, - }; - - componentDidMount () { - const { dispatch } = this.props; - - dispatch(fetchFollowRequests()); - } - - render () { - const { count, intl } = this.props; - - if (count === 0) { - return null; - } - - return ( - } - text={intl.formatMessage(messages.text)} - /> - ); - } - -} - -export default injectIntl(connect(mapStateToProps)(FollowRequestsColumnLink)); diff --git a/app/javascript/flavours/glitch/features/ui/components/list_panel.jsx b/app/javascript/flavours/glitch/features/ui/components/list_panel.jsx index 1baedfb8b0..2eba2bdbe2 100644 --- a/app/javascript/flavours/glitch/features/ui/components/list_panel.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/list_panel.jsx @@ -1,10 +1,9 @@ -import PropTypes from 'prop-types'; +import { useEffect } from 'react'; import { createSelector } from '@reduxjs/toolkit'; -import ImmutablePropTypes from 'react-immutable-proptypes'; -import ImmutablePureComponent from 'react-immutable-pure-component'; -import { connect } from 'react-redux'; +import { useDispatch, useSelector } from 'react-redux'; +import ListAltActiveIcon from '@/material-icons/400-24px/list_alt-fill.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; import { fetchLists } from 'flavours/glitch/actions/lists'; @@ -18,40 +17,25 @@ const getOrderedLists = createSelector([state => state.get('lists')], lists => { return lists.toList().filter(item => !!item).sort((a, b) => a.get('title').localeCompare(b.get('title'))).take(4); }); -const mapStateToProps = state => ({ - lists: getOrderedLists(state), -}); +export const ListPanel = () => { + const dispatch = useDispatch(); + const lists = useSelector(state => getOrderedLists(state)); -class ListPanel extends ImmutablePureComponent { - - static propTypes = { - dispatch: PropTypes.func.isRequired, - lists: ImmutablePropTypes.list, - }; - - componentDidMount () { - const { dispatch } = this.props; + useEffect(() => { dispatch(fetchLists()); + }, [dispatch]); + + if (!lists || lists.isEmpty()) { + return null; } - render () { - const { lists } = this.props; + return ( +
+
- if (!lists || lists.isEmpty()) { - return null; - } - - return ( -
-
- - {lists.map(list => ( - - ))} -
- ); - } - -} - -export default connect(mapStateToProps)(ListPanel); + {lists.map(list => ( + + ))} +
+ ); +}; diff --git a/app/javascript/flavours/glitch/features/ui/components/navigation_panel.jsx b/app/javascript/flavours/glitch/features/ui/components/navigation_panel.jsx index a6c91a3d44..8ee848e419 100644 --- a/app/javascript/flavours/glitch/features/ui/components/navigation_panel.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/navigation_panel.jsx @@ -1,19 +1,33 @@ import PropTypes from 'prop-types'; -import { Component } from 'react'; +import { Component, useEffect } from 'react'; -import { defineMessages, injectIntl } from 'react-intl'; +import { defineMessages, injectIntl, useIntl } from 'react-intl'; -import BookmarksIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; +import { useSelector, useDispatch } from 'react-redux'; + + +import BookmarksActiveIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react'; +import BookmarksIcon from '@/material-icons/400-24px/bookmarks.svg?react'; import ExploreIcon from '@/material-icons/400-24px/explore.svg?react'; -import HomeIcon from '@/material-icons/400-24px/home-fill.svg?react'; +import HomeActiveIcon from '@/material-icons/400-24px/home-fill.svg?react'; +import HomeIcon from '@/material-icons/400-24px/home.svg?react'; +import ListAltActiveIcon from '@/material-icons/400-24px/list_alt-fill.svg?react'; import ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react'; +import MailActiveIcon from '@/material-icons/400-24px/mail-fill.svg?react'; import MailIcon from '@/material-icons/400-24px/mail.svg?react'; import ManufacturingIcon from '@/material-icons/400-24px/manufacturing.svg?react'; import MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react'; +import NotificationsActiveIcon from '@/material-icons/400-24px/notifications-fill.svg?react'; +import NotificationsIcon from '@/material-icons/400-24px/notifications.svg?react'; +import PersonAddActiveIcon from '@/material-icons/400-24px/person_add-fill.svg?react'; +import PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react'; import PublicIcon from '@/material-icons/400-24px/public.svg?react'; import SearchIcon from '@/material-icons/400-24px/search.svg?react'; -import SettingsIcon from '@/material-icons/400-24px/settings-fill.svg?react'; -import StarIcon from '@/material-icons/400-24px/star-fill.svg?react'; +import SettingsIcon from '@/material-icons/400-24px/settings.svg?react'; +import StarActiveIcon from '@/material-icons/400-24px/star-fill.svg?react'; +import StarIcon from '@/material-icons/400-24px/star.svg?react'; +import { fetchFollowRequests } from 'flavours/glitch/actions/accounts'; +import { IconWithBadge } from 'flavours/glitch/components/icon_with_badge'; import { NavigationPortal } from 'flavours/glitch/components/navigation_portal'; import { timelinePreview, trendsEnabled } from 'flavours/glitch/initial_state'; import { transientSingleColumn } from 'flavours/glitch/is_mobile'; @@ -21,9 +35,7 @@ import { preferencesLink } from 'flavours/glitch/utils/backend_links'; import ColumnLink from './column_link'; import DisabledAccountBanner from './disabled_account_banner'; -import FollowRequestsColumnLink from './follow_requests_column_link'; -import ListPanel from './list_panel'; -import NotificationsCounterIcon from './notifications_counter_icon'; +import { ListPanel } from './list_panel'; import SignInBanner from './sign_in_banner'; const messages = defineMessages({ @@ -42,8 +54,48 @@ const messages = defineMessages({ advancedInterface: { id: 'navigation_bar.advanced_interface', defaultMessage: 'Open in advanced web interface' }, openedInClassicInterface: { id: 'navigation_bar.opened_in_classic_interface', defaultMessage: 'Posts, accounts, and other specific pages are opened by default in the classic web interface.' }, app_settings: { id: 'navigation_bar.app_settings', defaultMessage: 'App settings' }, + followRequests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' }, }); +const NotificationsLink = () => { + const count = useSelector(state => state.getIn(['local_settings', 'notifications', 'tab_badge']) ? state.getIn(['notifications', 'unread']) : 0); + const intl = useIntl(); + + return ( + } + activeIcon={} + text={intl.formatMessage(messages.notifications)} + /> + ); +}; + +const FollowRequestsLink = () => { + const count = useSelector(state => state.getIn(['user_lists', 'follow_requests', 'items'])?.size ?? 0); + const intl = useIntl(); + const dispatch = useDispatch(); + + useEffect(() => { + dispatch(fetchFollowRequests()); + }, [dispatch]); + + if (count === 0) { + return null; + } + + return ( + } + activeIcon={} + text={intl.formatMessage(messages.followRequests)} + /> + ); +}; + class NavigationPanel extends Component { static contextTypes = { @@ -84,9 +136,9 @@ class NavigationPanel extends Component { {signedIn && ( <> - - } text={intl.formatMessage(messages.notifications)} /> - + + + )} @@ -109,10 +161,10 @@ class NavigationPanel extends Component { {signedIn && ( <> - - - - + + + + diff --git a/app/javascript/flavours/glitch/features/ui/components/notifications_counter_icon.js b/app/javascript/flavours/glitch/features/ui/components/notifications_counter_icon.js deleted file mode 100644 index 0816e9660f..0000000000 --- a/app/javascript/flavours/glitch/features/ui/components/notifications_counter_icon.js +++ /dev/null @@ -1,13 +0,0 @@ -import { connect } from 'react-redux'; - -import NotificationsIcon from '@/material-icons/400-24px/notifications-fill.svg?react'; -import { IconWithBadge } from 'flavours/glitch/components/icon_with_badge'; - - -const mapStateToProps = state => ({ - count: state.getIn(['local_settings', 'notifications', 'tab_badge']) ? state.getIn(['notifications', 'unread']) : 0, - id: 'bell', - icon: NotificationsIcon, -}); - -export default connect(mapStateToProps)(IconWithBadge); From 216cea1e277530d39eefddbfccb519d2eca72b8b Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 12 Mar 2024 04:38:32 -0400 Subject: [PATCH 61/96] Fix incorrect frequency value in `FriendsOfFriendsSource` data (#29550) --- .../friends_of_friends_source.rb | 12 +++++--- .../friends_of_friends_source_spec.rb | 30 +++++++++++++++---- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/app/models/account_suggestions/friends_of_friends_source.rb b/app/models/account_suggestions/friends_of_friends_source.rb index 0c95d21a3e..b4f549bf31 100644 --- a/app/models/account_suggestions/friends_of_friends_source.rb +++ b/app/models/account_suggestions/friends_of_friends_source.rb @@ -2,15 +2,19 @@ class AccountSuggestions::FriendsOfFriendsSource < AccountSuggestions::Source def get(account, limit: DEFAULT_LIMIT) + source_query(account, limit: limit) + .map { |id, _frequency, _followers_count| [id, key] } + end + + def source_query(account, limit: DEFAULT_LIMIT) first_degree = account.following.where.not(hide_collections: true).select(:id).reorder(nil) base_account_scope(account) .joins(:account_stat) - .where(id: Follow.where(account_id: first_degree).select(:target_account_id)) + .joins(:passive_relationships).where(passive_relationships: { account_id: first_degree }) .group('accounts.id, account_stats.id') - .reorder('frequency DESC, followers_count DESC') + .reorder(frequency: :desc, followers_count: :desc) .limit(limit) - .pluck(Arel.sql('accounts.id, COUNT(*) AS frequency')) - .map { |id, _frequency| [id, key] } + .pluck(Arel.sql('accounts.id, COUNT(*) AS frequency, followers_count')) end private diff --git a/spec/models/account_suggestions/friends_of_friends_source_spec.rb b/spec/models/account_suggestions/friends_of_friends_source_spec.rb index 56a974add5..d7915985f8 100644 --- a/spec/models/account_suggestions/friends_of_friends_source_spec.rb +++ b/spec/models/account_suggestions/friends_of_friends_source_spec.rb @@ -11,9 +11,9 @@ RSpec.describe AccountSuggestions::FriendsOfFriendsSource do let!(:eve) { Fabricate(:account, discoverable: true, hide_collections: false) } let!(:mallory) { Fabricate(:account, discoverable: false, hide_collections: false) } let!(:eugen) { Fabricate(:account, discoverable: true, hide_collections: false) } + let!(:neil) { Fabricate(:account, discoverable: true, hide_collections: false) } let!(:john) { Fabricate(:account, discoverable: true, hide_collections: false) } let!(:jerk) { Fabricate(:account, discoverable: true, hide_collections: false) } - let!(:neil) { Fabricate(:account, discoverable: true, hide_collections: false) } let!(:larry) { Fabricate(:account, discoverable: true, hide_collections: false) } context 'with follows and blocks' do @@ -70,13 +70,31 @@ RSpec.describe AccountSuggestions::FriendsOfFriendsSource do end it 'returns eligible accounts in the expected order' do - expect(subject.get(bob)).to eq [ - [eugen.id, :friends_of_friends], # followed by 2 friends, 3 followers total - [john.id, :friends_of_friends], # followed by 2 friends, 2 followers total - [neil.id, :friends_of_friends], # followed by 1 friend, 2 followers total - [jerk.id, :friends_of_friends], # followed by 1 friend, 1 follower total + expect(subject.get(bob)).to eq expected_results + end + + it 'contains correct underlying source data' do + expect(source_query_values) + .to contain_exactly( + [eugen.id, 2, 3], # Followed by 2 friends of bob (eve, mallory), 3 followers total (breaks tie) + [john.id, 2, 2], # Followed by 2 friends of bob (eve, mallory), 2 followers total + [neil.id, 1, 2], # Followed by 1 friends of bob (mallory), 2 followers total (breaks tie) + [jerk.id, 1, 1] # Followed by 1 friends of bob (eve), 1 followers total + ) + end + + def expected_results + [ + [eugen.id, :friends_of_friends], + [john.id, :friends_of_friends], + [neil.id, :friends_of_friends], + [jerk.id, :friends_of_friends], ] end + + def source_query_values + subject.source_query(bob).to_a + end end end end From dc36b961aa1bb293c5f78cd8382033d9e143c4f5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 10:03:51 +0100 Subject: [PATCH 62/96] New Crowdin Translations (automated) (#29554) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/an.json | 4 --- app/javascript/mastodon/locales/ar.json | 4 --- app/javascript/mastodon/locales/ast.json | 4 --- app/javascript/mastodon/locales/be.json | 4 --- app/javascript/mastodon/locales/bg.json | 6 ++--- app/javascript/mastodon/locales/bn.json | 3 --- app/javascript/mastodon/locales/br.json | 5 +--- app/javascript/mastodon/locales/ca.json | 20 ++++++++++++--- app/javascript/mastodon/locales/ckb.json | 4 --- app/javascript/mastodon/locales/co.json | 3 --- app/javascript/mastodon/locales/cs.json | 4 --- app/javascript/mastodon/locales/cy.json | 4 --- app/javascript/mastodon/locales/da.json | 19 +++++++++++--- app/javascript/mastodon/locales/de.json | 20 ++++++++++++--- app/javascript/mastodon/locales/el.json | 4 --- app/javascript/mastodon/locales/en-GB.json | 4 --- app/javascript/mastodon/locales/eo.json | 4 --- app/javascript/mastodon/locales/es-AR.json | 20 ++++++++++++--- app/javascript/mastodon/locales/es-MX.json | 20 ++++++++++++--- app/javascript/mastodon/locales/es.json | 20 ++++++++++++--- app/javascript/mastodon/locales/et.json | 4 --- app/javascript/mastodon/locales/eu.json | 20 ++++++++++++--- app/javascript/mastodon/locales/fa.json | 4 --- app/javascript/mastodon/locales/fi.json | 4 --- app/javascript/mastodon/locales/fo.json | 20 ++++++++++++--- app/javascript/mastodon/locales/fr-CA.json | 4 --- app/javascript/mastodon/locales/fr.json | 4 --- app/javascript/mastodon/locales/fy.json | 4 --- app/javascript/mastodon/locales/ga.json | 4 --- app/javascript/mastodon/locales/gd.json | 4 --- app/javascript/mastodon/locales/gl.json | 4 --- app/javascript/mastodon/locales/he.json | 20 ++++++++++++--- app/javascript/mastodon/locales/hi.json | 3 --- app/javascript/mastodon/locales/hr.json | 3 --- app/javascript/mastodon/locales/hu.json | 20 ++++++++++++--- app/javascript/mastodon/locales/hy.json | 4 --- app/javascript/mastodon/locales/ia.json | 1 - app/javascript/mastodon/locales/id.json | 4 --- app/javascript/mastodon/locales/ie.json | 4 --- app/javascript/mastodon/locales/io.json | 4 --- app/javascript/mastodon/locales/is.json | 20 ++++++++++++--- app/javascript/mastodon/locales/it.json | 20 ++++++++++++--- app/javascript/mastodon/locales/ja.json | 4 --- app/javascript/mastodon/locales/ka.json | 1 - app/javascript/mastodon/locales/kab.json | 3 --- app/javascript/mastodon/locales/kk.json | 3 --- app/javascript/mastodon/locales/ko.json | 19 ++++++++++---- app/javascript/mastodon/locales/ku.json | 4 --- app/javascript/mastodon/locales/kw.json | 3 --- app/javascript/mastodon/locales/lad.json | 9 ++++--- app/javascript/mastodon/locales/lt.json | 4 --- app/javascript/mastodon/locales/lv.json | 4 --- app/javascript/mastodon/locales/mk.json | 1 - app/javascript/mastodon/locales/ml.json | 2 -- app/javascript/mastodon/locales/mr.json | 1 - app/javascript/mastodon/locales/ms.json | 4 --- app/javascript/mastodon/locales/my.json | 4 --- app/javascript/mastodon/locales/nl.json | 20 ++++++++++++--- app/javascript/mastodon/locales/nn.json | 4 --- app/javascript/mastodon/locales/no.json | 4 --- app/javascript/mastodon/locales/oc.json | 4 --- app/javascript/mastodon/locales/pa.json | 1 - app/javascript/mastodon/locales/pl.json | 20 ++++++++++++--- app/javascript/mastodon/locales/pt-BR.json | 4 --- app/javascript/mastodon/locales/pt-PT.json | 17 ++++++++++--- app/javascript/mastodon/locales/ro.json | 4 --- app/javascript/mastodon/locales/ru.json | 4 --- app/javascript/mastodon/locales/sa.json | 4 --- app/javascript/mastodon/locales/sc.json | 3 --- app/javascript/mastodon/locales/sco.json | 4 --- app/javascript/mastodon/locales/si.json | 4 --- app/javascript/mastodon/locales/sk.json | 4 --- app/javascript/mastodon/locales/sl.json | 17 ++++++++++--- app/javascript/mastodon/locales/sq.json | 4 --- app/javascript/mastodon/locales/sr-Latn.json | 4 --- app/javascript/mastodon/locales/sr.json | 4 --- app/javascript/mastodon/locales/sv.json | 7 +++--- app/javascript/mastodon/locales/ta.json | 3 --- app/javascript/mastodon/locales/te.json | 3 --- app/javascript/mastodon/locales/th.json | 18 +++++++++++--- app/javascript/mastodon/locales/tr.json | 4 --- app/javascript/mastodon/locales/tt.json | 1 - app/javascript/mastodon/locales/uk.json | 9 ++++--- app/javascript/mastodon/locales/ur.json | 2 -- app/javascript/mastodon/locales/uz.json | 1 - app/javascript/mastodon/locales/vi.json | 4 --- app/javascript/mastodon/locales/zh-CN.json | 20 ++++++++++++--- app/javascript/mastodon/locales/zh-HK.json | 4 --- app/javascript/mastodon/locales/zh-TW.json | 26 ++++++++++++++------ config/locales/doorkeeper.zh-TW.yml | 2 +- config/locales/lt.yml | 8 +++--- config/locales/lv.yml | 2 +- config/locales/simple_form.bg.yml | 2 ++ config/locales/simple_form.br.yml | 1 + config/locales/simple_form.ca.yml | 2 ++ config/locales/simple_form.cy.yml | 2 ++ config/locales/simple_form.da.yml | 2 ++ config/locales/simple_form.de.yml | 2 ++ config/locales/simple_form.es-AR.yml | 2 ++ config/locales/simple_form.es-MX.yml | 2 ++ config/locales/simple_form.es.yml | 2 ++ config/locales/simple_form.eu.yml | 2 ++ config/locales/simple_form.fo.yml | 2 ++ config/locales/simple_form.fy.yml | 2 ++ config/locales/simple_form.gd.yml | 2 ++ config/locales/simple_form.gl.yml | 2 ++ config/locales/simple_form.he.yml | 2 ++ config/locales/simple_form.hu.yml | 2 ++ config/locales/simple_form.is.yml | 2 ++ config/locales/simple_form.it.yml | 2 ++ config/locales/simple_form.ko.yml | 2 ++ config/locales/simple_form.lad.yml | 1 + config/locales/simple_form.lt.yml | 3 +++ config/locales/simple_form.nl.yml | 2 ++ config/locales/simple_form.nn.yml | 2 ++ config/locales/simple_form.pl.yml | 2 ++ config/locales/simple_form.pt-PT.yml | 2 ++ config/locales/simple_form.sl.yml | 2 ++ config/locales/simple_form.sq.yml | 2 ++ config/locales/simple_form.sr-Latn.yml | 1 + config/locales/simple_form.sr.yml | 1 + config/locales/simple_form.sv.yml | 1 + config/locales/simple_form.th.yml | 2 ++ config/locales/simple_form.uk.yml | 2 ++ config/locales/simple_form.vi.yml | 2 ++ config/locales/simple_form.zh-CN.yml | 2 ++ config/locales/simple_form.zh-TW.yml | 6 +++-- config/locales/zh-TW.yml | 2 +- 128 files changed, 404 insertions(+), 333 deletions(-) diff --git a/app/javascript/mastodon/locales/an.json b/app/javascript/mastodon/locales/an.json index e9d609a1ce..bf3a1a43a9 100644 --- a/app/javascript/mastodon/locales/an.json +++ b/app/javascript/mastodon/locales/an.json @@ -253,7 +253,6 @@ "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "hashtag.follow": "Seguir etiqueta", "hashtag.unfollow": "Deixar de seguir etiqueta", - "home.column_settings.basic": "Basico", "home.column_settings.show_reblogs": "Amostrar retutz", "home.column_settings.show_replies": "Amostrar respuestas", "home.hide_announcements": "Amagar anuncios", @@ -363,9 +362,6 @@ "notifications.column_settings.admin.report": "Nuevos informes:", "notifications.column_settings.admin.sign_up": "Nuevos rechistros:", "notifications.column_settings.alert": "Notificacions d'escritorio", - "notifications.column_settings.filter_bar.advanced": "Amostrar totas las categorías", - "notifications.column_settings.filter_bar.category": "Barra de filtrau rapido", - "notifications.column_settings.filter_bar.show_bar": "Amostrar barra de filtros", "notifications.column_settings.follow": "Nuevos seguidores:", "notifications.column_settings.follow_request": "Nuevas solicitutz de seguimiento:", "notifications.column_settings.mention": "Mencions:", diff --git a/app/javascript/mastodon/locales/ar.json b/app/javascript/mastodon/locales/ar.json index 914c15ad95..38653b4a34 100644 --- a/app/javascript/mastodon/locales/ar.json +++ b/app/javascript/mastodon/locales/ar.json @@ -314,7 +314,6 @@ "hashtag.follow": "اتبع الوسم", "hashtag.unfollow": "ألغِ متابعة الوسم", "hashtags.and_other": "…و {count, plural, zero {} one {# واحد آخر} two {# اثنان آخران} few {# آخرون} many {# آخَرًا}other {# آخرون}}", - "home.column_settings.basic": "الأساسية", "home.column_settings.show_reblogs": "اعرض المعاد نشرها", "home.column_settings.show_replies": "اعرض الردود", "home.hide_announcements": "إخفاء الإعلانات", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "التسجيلات الجديدة:", "notifications.column_settings.alert": "إشعارات سطح المكتب", "notifications.column_settings.favourite": "المفضلة:", - "notifications.column_settings.filter_bar.advanced": "اعرض كافة الفئات", - "notifications.column_settings.filter_bar.category": "شريط الفلترة السريعة", - "notifications.column_settings.filter_bar.show_bar": "إظهار شريط التصفية", "notifications.column_settings.follow": "متابعُون جُدُد:", "notifications.column_settings.follow_request": "الطلبات الجديد لِمتابَعتك:", "notifications.column_settings.mention": "الإشارات:", diff --git a/app/javascript/mastodon/locales/ast.json b/app/javascript/mastodon/locales/ast.json index 8e69d434b4..76fa44202d 100644 --- a/app/javascript/mastodon/locales/ast.json +++ b/app/javascript/mastodon/locales/ast.json @@ -221,7 +221,6 @@ "hashtag.counter_by_accounts": "{count, plural, one {{counter} participante} other {{counter} participantes}}", "hashtag.follow": "Siguir a la etiqueta", "hashtag.unfollow": "Dexar de siguir a la etiqueta", - "home.column_settings.basic": "Configuración básica", "home.column_settings.show_reblogs": "Amosar los artículos compartíos", "home.column_settings.show_replies": "Amosar les rempuestes", "home.pending_critical_update.body": "¡Anueva'l sirvidor de Mastodon namás que puedas!", @@ -311,9 +310,6 @@ "notifications.clear": "Borrar los avisos", "notifications.column_settings.admin.report": "Informes nuevos:", "notifications.column_settings.admin.sign_up": "Rexistros nuevos:", - "notifications.column_settings.filter_bar.advanced": "Amosar toles categoríes", - "notifications.column_settings.filter_bar.category": "Barra de peñera rápida", - "notifications.column_settings.filter_bar.show_bar": "Amosar la barra de peñera", "notifications.column_settings.follow": "Siguidores nuevos:", "notifications.column_settings.follow_request": "Solicitúes de siguimientu nueves:", "notifications.column_settings.mention": "Menciones:", diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index c0b744fbaf..bbe21f0569 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -314,7 +314,6 @@ "hashtag.follow": "Падпісацца на хэштэг", "hashtag.unfollow": "Адпісацца ад хэштэга", "hashtags.and_other": "…і яшчэ {count, plural, other {#}}", - "home.column_settings.basic": "Асноўныя", "home.column_settings.show_reblogs": "Паказаць пашырэнні", "home.column_settings.show_replies": "Паказваць адказы", "home.hide_announcements": "Схаваць аб'явы", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Новыя ўваходы:", "notifications.column_settings.alert": "Апавяшчэнні на працоўным стале", "notifications.column_settings.favourite": "Упадабанае:", - "notifications.column_settings.filter_bar.advanced": "Паказваць усе катэгорыі", - "notifications.column_settings.filter_bar.category": "Панэль хуткай фільтрацыі", - "notifications.column_settings.filter_bar.show_bar": "Паказваць панэль фільтрацыі", "notifications.column_settings.follow": "Новыя падпісчыкі:", "notifications.column_settings.follow_request": "Новыя запыты на падпіску:", "notifications.column_settings.mention": "Згадванні:", diff --git a/app/javascript/mastodon/locales/bg.json b/app/javascript/mastodon/locales/bg.json index 93823496b7..ab3eda9cd3 100644 --- a/app/javascript/mastodon/locales/bg.json +++ b/app/javascript/mastodon/locales/bg.json @@ -314,7 +314,6 @@ "hashtag.follow": "Следване на хаштаг", "hashtag.unfollow": "Спиране на следване на хаштаг", "hashtags.and_other": "…и {count, plural, other {# още}}", - "home.column_settings.basic": "Основно", "home.column_settings.show_reblogs": "Показване на подсилванията", "home.column_settings.show_replies": "Показване на отговорите", "home.hide_announcements": "Скриване на оповестяванията", @@ -440,15 +439,13 @@ "notification.reblog": "{name} подсили ваша публикация", "notification.status": "{name} току-що публикува", "notification.update": "{name} промени публикация", + "notification_requests.notifications_from": "Известия от {name}", "notifications.clear": "Изчистване на известията", "notifications.clear_confirmation": "Наистина ли искате да изчистите завинаги всичките си известия?", "notifications.column_settings.admin.report": "Нови доклади:", "notifications.column_settings.admin.sign_up": "Нови регистрации:", "notifications.column_settings.alert": "Известия на работния плот", "notifications.column_settings.favourite": "Любими:", - "notifications.column_settings.filter_bar.advanced": "Показване на всички категории", - "notifications.column_settings.filter_bar.category": "Лента за бърз филтър", - "notifications.column_settings.filter_bar.show_bar": "Показване на лентата с филтри", "notifications.column_settings.follow": "Нови последователи:", "notifications.column_settings.follow_request": "Нови заявки за последване:", "notifications.column_settings.mention": "Споменавания:", @@ -474,6 +471,7 @@ "notifications.permission_denied": "Известията на работния плот не са налични поради предварително отказана заявка за разрешение в браузъра", "notifications.permission_denied_alert": "Известията на работния плот не могат да се включат, тъй като разрешението на браузъра е отказвано преди", "notifications.permission_required": "Известията на работния плот ги няма, щото няма дадено нужното позволение.", + "notifications.policy.filter_new_accounts_title": "Нови акаунти", "notifications_permission_banner.enable": "Включване на известията на работния плот", "notifications_permission_banner.how_to_control": "За да получавате известия, когато Mastodon не е отворен, включете известията на работния плот. Може да управлявате точно кои видове взаимодействия пораждат известия на работния плот чрез бутона {icon} по-горе, след като бъдат включени.", "notifications_permission_banner.title": "Никога не пропускайте нищо", diff --git a/app/javascript/mastodon/locales/bn.json b/app/javascript/mastodon/locales/bn.json index 508caa2f42..85f1598889 100644 --- a/app/javascript/mastodon/locales/bn.json +++ b/app/javascript/mastodon/locales/bn.json @@ -248,7 +248,6 @@ "hashtag.column_settings.tag_mode.any": "এর ভেতরে যেকোনোটা", "hashtag.column_settings.tag_mode.none": "এগুলোর একটাও না", "hashtag.column_settings.tag_toggle": "আরো ট্যাগ এই কলামে যুক্ত করতে", - "home.column_settings.basic": "সাধারণ", "home.column_settings.show_reblogs": "সমর্থনগুলো দেখান", "home.column_settings.show_replies": "মতামত দেখান", "home.hide_announcements": "ঘোষণা লুকান", @@ -338,8 +337,6 @@ "notifications.clear_confirmation": "আপনি কি নির্চিত প্রজ্ঞাপনগুলো মুছে ফেলতে চান ?", "notifications.column_settings.alert": "কম্পিউটারে প্রজ্ঞাপনগুলি", "notifications.column_settings.favourite": "পছন্দসমূহ:", - "notifications.column_settings.filter_bar.advanced": "সব শ্রেণীগুলো দেখানো", - "notifications.column_settings.filter_bar.category": "সংক্ষিপ্ত ছাঁকনি অংশ", "notifications.column_settings.follow": "নতুন অনুসরণকারীরা:", "notifications.column_settings.follow_request": "অনুসরণের অনুরোধগুলি:", "notifications.column_settings.mention": "প্রজ্ঞাপনগুলো:", diff --git a/app/javascript/mastodon/locales/br.json b/app/javascript/mastodon/locales/br.json index 3b376ac470..9e0979641e 100644 --- a/app/javascript/mastodon/locales/br.json +++ b/app/javascript/mastodon/locales/br.json @@ -289,7 +289,6 @@ "hashtag.follow": "Heuliañ ar ger-klik", "hashtag.unfollow": "Paouez heuliañ an hashtag", "hashtags.and_other": "…{count, plural, one {hag # all} other {ha # all}}", - "home.column_settings.basic": "Diazez", "home.column_settings.show_reblogs": "Diskouez ar skignadennoù", "home.column_settings.show_replies": "Diskouez ar respontoù", "home.hide_announcements": "Kuzhat ar c'hemennoù", @@ -410,9 +409,6 @@ "notifications.column_settings.admin.sign_up": "Enskrivadurioù nevez :", "notifications.column_settings.alert": "Kemennoù war ar burev", "notifications.column_settings.favourite": "Muiañ-karet:", - "notifications.column_settings.filter_bar.advanced": "Skrammañ an-holl rummadoù", - "notifications.column_settings.filter_bar.category": "Barrenn siloù prim", - "notifications.column_settings.filter_bar.show_bar": "Diskouezh barrenn siloù", "notifications.column_settings.follow": "Heulierien nevez:", "notifications.column_settings.follow_request": "Pedadoù heuliañ nevez :", "notifications.column_settings.mention": "Menegoù:", @@ -438,6 +434,7 @@ "notifications.permission_denied": "Kemennoù war ar burev n'int ket hegerz rak pedadenn aotren ar merdeer a zo bet nullet araok", "notifications.permission_denied_alert": "Kemennoù wa ar burev na c'hellont ket bezañ lezelet, rak aotre ar merdeer a zo bet nac'het a-raok", "notifications.permission_required": "Kemennoù war ar burev n'int ket hegerz abalamour d'an aotre rekis n'eo ket bet roet.", + "notifications.policy.filter_new_accounts_title": "Kontoù nevez", "notifications_permission_banner.enable": "Lezel kemennoù war ar burev", "notifications_permission_banner.how_to_control": "Evit reseviñ kemennoù pa ne vez ket digoret Mastodon, lezelit kemennoù war ar burev. Gallout a rit kontrollañ peseurt eskemmoù a c'henel kemennoù war ar burev gant ar {icon} nozelenn a-us kentre ma'z int lezelet.", "notifications_permission_banner.title": "Na vankit netra morse", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 2345424728..0c237ccda0 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -241,6 +241,7 @@ "empty_column.list": "Encara no hi ha res en aquesta llista. Quan els membres facin nous tuts, apareixeran aquí.", "empty_column.lists": "Encara no tens cap llista. Quan en facis una, apareixerà aquí.", "empty_column.mutes": "Encara no has silenciat cap usuari.", + "empty_column.notification_requests": "Tot net, ja no hi ha res aquí! Quan rebeu notificacions noves, segons la vostra configuració, apareixeran aquí.", "empty_column.notifications": "Encara no tens notificacions. Quan altre gent interactuï amb tu, les veuràs aquí.", "empty_column.public": "Aquí no hi ha res! Escriu públicament alguna cosa o segueix manualment usuaris d'altres servidors per omplir-ho", "error.unexpected_crash.explanation": "A causa d'un error en el nostre codi o d'un problema de compatibilitat amb el navegador, aquesta pàgina no s'ha pogut mostrar correctament.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Usa una categoria existent o crea'n una de nova", "filter_modal.select_filter.title": "Filtra aquest tut", "filter_modal.title.status": "Filtra un tut", + "filtered_notifications_banner.pending_requests": "Notificacions de {count, plural, =0 {no} one {una persona} other {# persones}} que potser coneixeu", + "filtered_notifications_banner.title": "Notificacions filtrades", "firehose.all": "Tots", "firehose.local": "Aquest servidor", "firehose.remote": "Altres servidors", @@ -314,7 +317,6 @@ "hashtag.follow": "Segueix l'etiqueta", "hashtag.unfollow": "Deixa de seguir l'etiqueta", "hashtags.and_other": "…i {count, plural, other {# més}}", - "home.column_settings.basic": "Bàsic", "home.column_settings.show_reblogs": "Mostra els impulsos", "home.column_settings.show_replies": "Mostra les respostes", "home.hide_announcements": "Amaga els anuncis", @@ -440,15 +442,16 @@ "notification.reblog": "{name} t'ha impulsat", "notification.status": "{name} acaba de publicar", "notification.update": "{name} ha editat un tut", + "notification_requests.accept": "Accepta", + "notification_requests.dismiss": "Ignora", + "notification_requests.notifications_from": "Notificacions de {name}", + "notification_requests.title": "Notificacions filtrades", "notifications.clear": "Esborra les notificacions", "notifications.clear_confirmation": "Segur que vols esborrar permanentment totes les teves notificacions?", "notifications.column_settings.admin.report": "Nous informes:", "notifications.column_settings.admin.sign_up": "Registres nous:", "notifications.column_settings.alert": "Notificacions d'escriptori", "notifications.column_settings.favourite": "Favorits:", - "notifications.column_settings.filter_bar.advanced": "Mostra totes les categories", - "notifications.column_settings.filter_bar.category": "Barra ràpida de filtres", - "notifications.column_settings.filter_bar.show_bar": "Mostra la barra de filtres", "notifications.column_settings.follow": "Nous seguidors:", "notifications.column_settings.follow_request": "Noves sol·licituds de seguiment:", "notifications.column_settings.mention": "Mencions:", @@ -474,6 +477,15 @@ "notifications.permission_denied": "Les notificacions d’escriptori no estan disponibles perquè prèviament s’ha denegat el permís al navegador", "notifications.permission_denied_alert": "No es poden activar les notificacions de l'escriptori perquè abans s'ha denegat el permís del navegador", "notifications.permission_required": "Les notificacions d'escriptori no estan disponibles perquè el permís requerit no ha estat concedit.", + "notifications.policy.filter_new_accounts.hint": "Creat durant els passats {days, plural, one {un dia} other {# dies}}", + "notifications.policy.filter_new_accounts_title": "Comptes nous", + "notifications.policy.filter_not_followers_hint": "Incloent les persones que us segueixen fa menys de {days, plural, one {un dia} other {# dies}}", + "notifications.policy.filter_not_followers_title": "Persones que no us segueixen", + "notifications.policy.filter_not_following_hint": "Fins que no ho aproveu de forma manual", + "notifications.policy.filter_not_following_title": "Persones que no seguiu", + "notifications.policy.filter_private_mentions_hint": "Filtra-ho excepte si és en resposta a una menció vostra o si seguiu el remitent", + "notifications.policy.filter_private_mentions_title": "Mencions privades no sol·licitades", + "notifications.policy.title": "Filtra les notificacions de…", "notifications_permission_banner.enable": "Activa les notificacions d’escriptori", "notifications_permission_banner.how_to_control": "Per a rebre notificacions quan Mastodon no és obert cal activar les notificacions d’escriptori. Pots controlar amb precisió quins tipus d’interaccions generen notificacions d’escriptori després d’activar el botó {icon} de dalt.", "notifications_permission_banner.title": "No et perdis mai res", diff --git a/app/javascript/mastodon/locales/ckb.json b/app/javascript/mastodon/locales/ckb.json index 62195b72dc..a78a45c8de 100644 --- a/app/javascript/mastodon/locales/ckb.json +++ b/app/javascript/mastodon/locales/ckb.json @@ -300,7 +300,6 @@ "hashtag.counter_by_accounts": "{count, plural, one {{counter} participant} other {{counter} participants}}", "hashtag.follow": "شوێنکەوتنی هاشتاگ", "hashtag.unfollow": "شوێن نەکەوتنی هاشتاگ", - "home.column_settings.basic": "بنەڕەتی", "home.column_settings.show_reblogs": "پیشاندانی بەهێزکردن", "home.column_settings.show_replies": "وەڵامدانەوەکان پیشان بدە", "home.hide_announcements": "شاردنەوەی راگەیەنراوەکان", @@ -412,9 +411,6 @@ "notifications.column_settings.admin.report": "ڕاپۆرتە نوێیەکان:", "notifications.column_settings.admin.sign_up": "چوونەژوورەوەی نوێ:", "notifications.column_settings.alert": "ئاگانامەکانی پیشانگەرر ڕومێزی", - "notifications.column_settings.filter_bar.advanced": "هەموو پۆلەکان پیشان بدە", - "notifications.column_settings.filter_bar.category": "شریتی پاڵێوەری خێرا", - "notifications.column_settings.filter_bar.show_bar": "نیشاندانی شریتی پاڵافتن", "notifications.column_settings.follow": "شوێنکەوتوانی نوێ:", "notifications.column_settings.follow_request": "شوینکەوتنی داواکاری نوێ:", "notifications.column_settings.mention": "ئاماژەکان:", diff --git a/app/javascript/mastodon/locales/co.json b/app/javascript/mastodon/locales/co.json index 9d0b0306c8..e547382a7c 100644 --- a/app/javascript/mastodon/locales/co.json +++ b/app/javascript/mastodon/locales/co.json @@ -167,7 +167,6 @@ "hashtag.column_settings.tag_mode.any": "Unu di quessi", "hashtag.column_settings.tag_mode.none": "Nisunu di quessi", "hashtag.column_settings.tag_toggle": "Inchjude tag addiziunali per sta colonna", - "home.column_settings.basic": "Bàsichi", "home.column_settings.show_reblogs": "Vede e spartere", "home.column_settings.show_replies": "Vede e risposte", "home.hide_announcements": "Piattà annunzii", @@ -258,8 +257,6 @@ "notifications.clear": "Purgà e nutificazione", "notifications.clear_confirmation": "Site sicuru·a che vulete toglie tutte ste nutificazione?", "notifications.column_settings.alert": "Nutificazione nant'à l'urdinatore", - "notifications.column_settings.filter_bar.advanced": "Affissà tutte e categurie", - "notifications.column_settings.filter_bar.category": "Barra di ricerca pronta", "notifications.column_settings.follow": "Abbunati novi:", "notifications.column_settings.follow_request": "Nove dumande d'abbunamentu:", "notifications.column_settings.mention": "Minzione:", diff --git a/app/javascript/mastodon/locales/cs.json b/app/javascript/mastodon/locales/cs.json index 00b27e0521..5beb06d9b2 100644 --- a/app/javascript/mastodon/locales/cs.json +++ b/app/javascript/mastodon/locales/cs.json @@ -314,7 +314,6 @@ "hashtag.follow": "Sledovat hashtag", "hashtag.unfollow": "Přestat sledovat hashtag", "hashtags.and_other": "…a {count, plural, one {# další} few {# další} other {# dalších}}", - "home.column_settings.basic": "Základní", "home.column_settings.show_reblogs": "Zobrazit boosty", "home.column_settings.show_replies": "Zobrazit odpovědi", "home.hide_announcements": "Skrýt oznámení", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Nové registrace:", "notifications.column_settings.alert": "Oznámení na počítači", "notifications.column_settings.favourite": "Oblíbené:", - "notifications.column_settings.filter_bar.advanced": "Zobrazit všechny kategorie", - "notifications.column_settings.filter_bar.category": "Panel rychlého filtrování", - "notifications.column_settings.filter_bar.show_bar": "Zobrazit panel filtrů", "notifications.column_settings.follow": "Noví sledující:", "notifications.column_settings.follow_request": "Nové žádosti o sledování:", "notifications.column_settings.mention": "Zmínky:", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 0c1472dcad..583660b283 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -314,7 +314,6 @@ "hashtag.follow": "Dilyn hashnod", "hashtag.unfollow": "Dad-ddilyn hashnod", "hashtags.and_other": "…a {count, plural, other {# more}}", - "home.column_settings.basic": "Syml", "home.column_settings.show_reblogs": "Dangos hybiau", "home.column_settings.show_replies": "Dangos atebion", "home.hide_announcements": "Cuddio cyhoeddiadau", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Cofrestriadau newydd:", "notifications.column_settings.alert": "Hysbysiadau bwrdd gwaith", "notifications.column_settings.favourite": "Ffefrynnau:", - "notifications.column_settings.filter_bar.advanced": "Dangos pob categori", - "notifications.column_settings.filter_bar.category": "Bar hidlo cyflym", - "notifications.column_settings.filter_bar.show_bar": "Dangos y bar hidlo", "notifications.column_settings.follow": "Dilynwyr newydd:", "notifications.column_settings.follow_request": "Ceisiadau dilyn newydd:", "notifications.column_settings.mention": "Crybwylliadau:", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index b9ef82bf0c..ddc0440abc 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -241,6 +241,7 @@ "empty_column.list": "Der er ikke noget på denne liste endnu. Når medlemmer af listen udgiver nye indlæg vil de fremgå hér.", "empty_column.lists": "Du har endnu ingen lister. Når du opretter én, vil den fremgå hér.", "empty_column.mutes": "Du har endnu ikke skjult (muted) nogle brugere.", + "empty_column.notification_requests": "Alt er klar! Der er intet her. Når der modtages nye notifikationer, fremgår de her jf. dine indstillinger.", "empty_column.notifications": "Du har endnu ingen notifikationer. Når andre interagerer med dig, vil det fremgå hér.", "empty_column.public": "Der er intet hér! Skriv noget offentligt eller følg manuelt brugere fra andre servere for at se indhold", "error.unexpected_crash.explanation": "Grundet en fejl i vores kode, eller en browser-kompatibilitetsfejl, kunne siden ikke vises korrekt.", @@ -271,6 +272,7 @@ "filter_modal.select_filter.subtitle": "Vælg en eksisterende kategori eller opret en ny", "filter_modal.select_filter.title": "Filtrér dette indlæg", "filter_modal.title.status": "Filtrér et indlæg", + "filtered_notifications_banner.title": "Filtrerede notifikationer", "firehose.all": "Alle", "firehose.local": "Denne server", "firehose.remote": "Andre servere", @@ -314,7 +316,6 @@ "hashtag.follow": "Følg hashtag", "hashtag.unfollow": "Stop med at følge hashtag", "hashtags.and_other": "…og {count, plural, one {}other {# flere}}", - "home.column_settings.basic": "Grundlæggende", "home.column_settings.show_reblogs": "Vis boosts", "home.column_settings.show_replies": "Vis svar", "home.hide_announcements": "Skjul bekendtgørelser", @@ -440,15 +441,16 @@ "notification.reblog": "{name} boostede dit indlæg", "notification.status": "{name} har netop postet", "notification.update": "{name} redigerede et indlæg", + "notification_requests.accept": "Acceptér", + "notification_requests.dismiss": "Afvis", + "notification_requests.notifications_from": "Notifikationer fra {name}", + "notification_requests.title": "Filtrerede notifikationer", "notifications.clear": "Ryd notifikationer", "notifications.clear_confirmation": "Er du sikker på, at du vil rydde alle dine notifikationer permanent?", "notifications.column_settings.admin.report": "Nye anmeldelser:", "notifications.column_settings.admin.sign_up": "Nye tilmeldinger:", "notifications.column_settings.alert": "Computernotifikationer", "notifications.column_settings.favourite": "Favoritter:", - "notifications.column_settings.filter_bar.advanced": "Vis alle kategorier", - "notifications.column_settings.filter_bar.category": "Hurtigfilterbjælke", - "notifications.column_settings.filter_bar.show_bar": "Vis filterbjælke", "notifications.column_settings.follow": "Nye følgere:", "notifications.column_settings.follow_request": "Nye følgeanmodninger:", "notifications.column_settings.mention": "Omtaler:", @@ -474,6 +476,15 @@ "notifications.permission_denied": "Computernotifikationer er utilgængelige grundet tidligere afvist browsertilladelsesanmodning", "notifications.permission_denied_alert": "Computernotifikationer kan ikke aktiveres, da browsertilladelse tidligere blev nægtet", "notifications.permission_required": "Computernotifikationer er utilgængelige, da den krævede tilladelse ikke er tildelt.", + "notifications.policy.filter_new_accounts.hint": "Oprettet indenfor {days, plural, one {den seneste dag} other {de seneste # dage}}", + "notifications.policy.filter_new_accounts_title": "Ny konti", + "notifications.policy.filter_not_followers_hint": "Inklusiv personer, som har fulgt dig {days, plural, one {mindre end én dag} other {færre end # dage}}", + "notifications.policy.filter_not_followers_title": "Folk, som ikke følger dig", + "notifications.policy.filter_not_following_hint": "Indtil de manuelt godkendes", + "notifications.policy.filter_not_following_title": "Folk, du ikke følger", + "notifications.policy.filter_private_mentions_hint": "Filtreret, medmindre det er i svar på egen omtale, eller hvis afsenderen følges", + "notifications.policy.filter_private_mentions_title": "Uopfordrede private omtaler", + "notifications.policy.title": "Bortfiltrér notifikationer fra…", "notifications_permission_banner.enable": "Aktivér computernotifikationer", "notifications_permission_banner.how_to_control": "Aktivér computernotifikationer for at få besked, når Mastodon ikke er åben. Når de er aktiveret, kan man via knappen {icon} ovenfor præcist styre, hvilke typer af interaktioner, som genererer computernotifikationer.", "notifications_permission_banner.title": "Gå aldrig glip af noget", diff --git a/app/javascript/mastodon/locales/de.json b/app/javascript/mastodon/locales/de.json index 3700b5d91d..70537cdb05 100644 --- a/app/javascript/mastodon/locales/de.json +++ b/app/javascript/mastodon/locales/de.json @@ -241,6 +241,7 @@ "empty_column.list": "Diese Liste ist derzeit leer. Wenn Konten auf dieser Liste neue Beiträge veröffentlichen, werden sie hier erscheinen.", "empty_column.lists": "Du hast noch keine Listen. Sobald du eine anlegst, wird sie hier erscheinen.", "empty_column.mutes": "Du hast keine Profile stummgeschaltet.", + "empty_column.notification_requests": "Alles klar! Hier gibt es nichts. Wenn Sie neue Mitteilungen erhalten, werden diese entsprechend Ihren Einstellungen hier angezeigt.", "empty_column.notifications": "Du hast noch keine Benachrichtigungen. Sobald andere Personen mit dir interagieren, wirst du hier darüber informiert.", "empty_column.public": "Hier ist nichts zu sehen! Schreibe etwas öffentlich oder folge Profilen von anderen Servern, um die Timeline aufzufüllen", "error.unexpected_crash.explanation": "Wegen eines Fehlers in unserem Code oder aufgrund einer Browser-Inkompatibilität kann diese Seite nicht korrekt angezeigt werden.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Einem vorhandenen Filter hinzufügen oder einen neuen erstellen", "filter_modal.select_filter.title": "Diesen Beitrag filtern", "filter_modal.title.status": "Beitrag per Filter ausblenden", + "filtered_notifications_banner.pending_requests": "Benachrichtigungen von {count, plural, =0 {keinem Profil, das du möglicherweise kennst} one {einem Profil, das du möglicherweise kennst} other {# Profilen, die du möglicherweise kennst}}", + "filtered_notifications_banner.title": "Gefilterte Benachrichtigungen", "firehose.all": "Alles", "firehose.local": "Dieser Server", "firehose.remote": "Andere Server", @@ -314,7 +317,6 @@ "hashtag.follow": "Hashtag folgen", "hashtag.unfollow": "Hashtag entfolgen", "hashtags.and_other": "… und {count, plural, one{# weiterer} other {# weitere}}", - "home.column_settings.basic": "Allgemein", "home.column_settings.show_reblogs": "Geteilte Beiträge anzeigen", "home.column_settings.show_replies": "Antworten anzeigen", "home.hide_announcements": "Ankündigungen ausblenden", @@ -440,15 +442,16 @@ "notification.reblog": "{name} teilte deinen Beitrag", "notification.status": "{name} hat gerade etwas gepostet", "notification.update": "{name} bearbeitete einen Beitrag", + "notification_requests.accept": "Akzeptieren", + "notification_requests.dismiss": "Ablehnen", + "notification_requests.notifications_from": "Benachrichtigungen von {name}", + "notification_requests.title": "Gefilterte Benachrichtigungen", "notifications.clear": "Benachrichtigungen löschen", "notifications.clear_confirmation": "Möchtest du wirklich alle Benachrichtigungen für immer löschen?", "notifications.column_settings.admin.report": "Neue Meldungen:", "notifications.column_settings.admin.sign_up": "Neue Registrierungen:", "notifications.column_settings.alert": "Desktop-Benachrichtigungen", "notifications.column_settings.favourite": "Favoriten:", - "notifications.column_settings.filter_bar.advanced": "Alle Filterkategorien anzeigen", - "notifications.column_settings.filter_bar.category": "Filterleiste:", - "notifications.column_settings.filter_bar.show_bar": "Filterleiste anzeigen", "notifications.column_settings.follow": "Neue Follower:", "notifications.column_settings.follow_request": "Neue Follower-Anfragen:", "notifications.column_settings.mention": "Erwähnungen:", @@ -474,6 +477,15 @@ "notifications.permission_denied": "Desktop-Benachrichtigungen können aufgrund einer zuvor verweigerten Berechtigung nicht aktiviert werden", "notifications.permission_denied_alert": "Desktop-Benachrichtigungen können nicht aktiviert werden, da die Browser-Berechtigung zuvor verweigert wurde", "notifications.permission_required": "Desktop-Benachrichtigungen sind nicht verfügbar, da die erforderliche Berechtigung nicht erteilt wurde.", + "notifications.policy.filter_new_accounts.hint": "Innerhalb {days, plural, one {des letzten Tages} other {der letzten # Tagen}} erstellt", + "notifications.policy.filter_new_accounts_title": "Neuen Konten", + "notifications.policy.filter_not_followers_hint": "Einschließlich Profilen, die dir seit weniger als {days, plural, one {einem Tag} other {# Tagen}} folgen", + "notifications.policy.filter_not_followers_title": "Profilen, die mir nicht folgen", + "notifications.policy.filter_not_following_hint": "Solange du sie nicht manuell akzeptierst", + "notifications.policy.filter_not_following_title": "Profilen, denen ich nicht folge", + "notifications.policy.filter_private_mentions_hint": "Solange sie keine Antwort auf deine Erwähnung ist oder du dem Profil nicht folgst", + "notifications.policy.filter_private_mentions_title": "Unerwünschten privaten Erwähnungen", + "notifications.policy.title": "Benachrichtigungen herausfiltern von …", "notifications_permission_banner.enable": "Aktiviere Desktop-Benachrichtigungen", "notifications_permission_banner.how_to_control": "Um Benachrichtigungen zu erhalten, wenn Mastodon nicht geöffnet ist, aktiviere die Desktop-Benachrichtigungen. Du kannst genau bestimmen, welche Arten von Interaktionen Desktop-Benachrichtigungen über die {icon} -Taste erzeugen, sobald diese aktiviert sind.", "notifications_permission_banner.title": "Nichts verpassen", diff --git a/app/javascript/mastodon/locales/el.json b/app/javascript/mastodon/locales/el.json index a5ed320831..5d1f03b090 100644 --- a/app/javascript/mastodon/locales/el.json +++ b/app/javascript/mastodon/locales/el.json @@ -289,7 +289,6 @@ "hashtag.column_settings.tag_toggle": "Προσθήκη επιπλέον ταμπελών για την κολώνα", "hashtag.follow": "Παρακολούθηση ετικέτας", "hashtag.unfollow": "Διακοπή παρακολούθησης ετικέτας", - "home.column_settings.basic": "Βασικές ρυθμίσεις", "home.column_settings.show_reblogs": "Εμφάνιση προωθήσεων", "home.column_settings.show_replies": "Εμφάνιση απαντήσεων", "home.hide_announcements": "Απόκρυψη ανακοινώσεων", @@ -411,9 +410,6 @@ "notifications.column_settings.admin.sign_up": "Νέες εγγραφές:", "notifications.column_settings.alert": "Ειδοποιήσεις επιφάνειας εργασίας", "notifications.column_settings.favourite": "Αγαπημένα:", - "notifications.column_settings.filter_bar.advanced": "Εμφάνιση όλων των κατηγοριών", - "notifications.column_settings.filter_bar.category": "Μπάρα γρήγορου φίλτρου", - "notifications.column_settings.filter_bar.show_bar": "Εμφάνιση μπάρας φίλτρου", "notifications.column_settings.follow": "Νέοι ακόλουθοι:", "notifications.column_settings.follow_request": "Νέο αίτημα ακολούθησης:", "notifications.column_settings.mention": "Επισημάνσεις:", diff --git a/app/javascript/mastodon/locales/en-GB.json b/app/javascript/mastodon/locales/en-GB.json index 6232207af2..e88209625f 100644 --- a/app/javascript/mastodon/locales/en-GB.json +++ b/app/javascript/mastodon/locales/en-GB.json @@ -308,7 +308,6 @@ "hashtag.follow": "Follow hashtag", "hashtag.unfollow": "Unfollow hashtag", "hashtags.and_other": "…and {count, plural, one {one more} other {# more}}", - "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Show boosts", "home.column_settings.show_replies": "Show replies", "home.hide_announcements": "Hide announcements", @@ -440,9 +439,6 @@ "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktop notifications", "notifications.column_settings.favourite": "Favourites:", - "notifications.column_settings.filter_bar.advanced": "Display all categories", - "notifications.column_settings.filter_bar.category": "Quick filter bar", - "notifications.column_settings.filter_bar.show_bar": "Show filter bar", "notifications.column_settings.follow": "New followers:", "notifications.column_settings.follow_request": "New follow requests:", "notifications.column_settings.mention": "Mentions:", diff --git a/app/javascript/mastodon/locales/eo.json b/app/javascript/mastodon/locales/eo.json index 911502d85f..5d2dc61135 100644 --- a/app/javascript/mastodon/locales/eo.json +++ b/app/javascript/mastodon/locales/eo.json @@ -295,7 +295,6 @@ "hashtag.follow": "Sekvi la kradvorton", "hashtag.unfollow": "Ne plu sekvi la kradvorton", "hashtags.and_other": "…kaj {count, plural,other {# pli}}", - "home.column_settings.basic": "Bazaj agordoj", "home.column_settings.show_reblogs": "Montri diskonigojn", "home.column_settings.show_replies": "Montri respondojn", "home.hide_announcements": "Kaŝi la anoncojn", @@ -427,9 +426,6 @@ "notifications.column_settings.admin.sign_up": "Novaj registriĝoj:", "notifications.column_settings.alert": "Sciigoj de la retumilo", "notifications.column_settings.favourite": "Stelumoj:", - "notifications.column_settings.filter_bar.advanced": "Montri ĉiujn kategoriojn", - "notifications.column_settings.filter_bar.category": "Rapida filtra breto", - "notifications.column_settings.filter_bar.show_bar": "Montri la breton de filtrilo", "notifications.column_settings.follow": "Novaj sekvantoj:", "notifications.column_settings.follow_request": "Novaj petoj de sekvado:", "notifications.column_settings.mention": "Mencioj:", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index ead3355589..48d4580056 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -241,6 +241,7 @@ "empty_column.list": "Todavía no hay nada en esta lista. Cuando miembros de esta lista envíen nuevos mensaje, se mostrarán acá.", "empty_column.lists": "Todavía no tenés ninguna lista. Cuando creés una, se mostrará acá.", "empty_column.mutes": "Todavía no silenciaste a ningún usuario.", + "empty_column.notification_requests": "¡Todo limpio! No hay nada acá. Cuando recibás nuevas notificaciones, aparecerán acá, acorde a tu configuración.", "empty_column.notifications": "Todavía no tenés ninguna notificación. Cuando otras cuentas interactúen con vos, vas a ver la notificación acá.", "empty_column.public": "¡Naranja! Escribí algo públicamente, o seguí usuarios manualmente de otros servidores para ir llenando esta línea temporal", "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador web, esta página no se pudo mostrar correctamente.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva", "filter_modal.select_filter.title": "Filtrar este mensaje", "filter_modal.title.status": "Filtrar un mensaje", + "filtered_notifications_banner.pending_requests": "Notificaciones de {count, plural, =0 {ninguna cuenta} one {una cuenta} other {# cuentas}} que podrías conocer", + "filtered_notifications_banner.title": "Notificaciones filtradas", "firehose.all": "Todos", "firehose.local": "Este servidor", "firehose.remote": "Otros servidores", @@ -314,7 +317,6 @@ "hashtag.follow": "Seguir etiqueta", "hashtag.unfollow": "Dejar de seguir etiqueta", "hashtags.and_other": "…y {count, plural, other {# más}}", - "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar adhesiones", "home.column_settings.show_replies": "Mostrar respuestas", "home.hide_announcements": "Ocultar anuncios", @@ -440,15 +442,16 @@ "notification.reblog": "{name} adhirió a tu mensaje", "notification.status": "{name} acaba de enviar un mensaje", "notification.update": "{name} editó un mensaje", + "notification_requests.accept": "Aceptar", + "notification_requests.dismiss": "Descartar", + "notification_requests.notifications_from": "Notificaciones de {name}", + "notification_requests.title": "Notificaciones filtradas", "notifications.clear": "Limpiar notificaciones", "notifications.clear_confirmation": "¿Estás seguro que querés limpiar todas tus notificaciones permanentemente?", "notifications.column_settings.admin.report": "Nuevas denuncias:", "notifications.column_settings.admin.sign_up": "Nuevos registros:", "notifications.column_settings.alert": "Notificaciones de escritorio", "notifications.column_settings.favourite": "Favoritos:", - "notifications.column_settings.filter_bar.advanced": "Mostrar todas las categorías", - "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", - "notifications.column_settings.filter_bar.show_bar": "Mostrar barra de filtros", "notifications.column_settings.follow": "Nuevos seguidores:", "notifications.column_settings.follow_request": "Nuevas solicitudes de seguimiento:", "notifications.column_settings.mention": "Menciones:", @@ -474,6 +477,15 @@ "notifications.permission_denied": "Las notificaciones de escritorio no están disponibles, debido a una solicitud de permiso del navegador web previamente denegada", "notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado antes", "notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se concedió el permiso requerido.", + "notifications.policy.filter_new_accounts.hint": "Creada hace {days, plural, one {un día} other {# días}}", + "notifications.policy.filter_new_accounts_title": "Nuevas cuentas", + "notifications.policy.filter_not_followers_hint": "Incluyendo cuentas que te han estado siguiendo menos de {days, plural, one {un día} other {# días}}", + "notifications.policy.filter_not_followers_title": "Cuentas que no te siguen", + "notifications.policy.filter_not_following_hint": "Hasta que las aprobés manualmente", + "notifications.policy.filter_not_following_title": "Cuentas que no seguís", + "notifications.policy.filter_private_mentions_hint": "Filtradas, a menos que sea en respuesta a tu propia mención o si seguís al remitente", + "notifications.policy.filter_private_mentions_title": "Menciones privadas no solicitadas", + "notifications.policy.title": "Filtrar notificaciones de…", "notifications_permission_banner.enable": "Habilitar notificaciones de escritorio", "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no está abierto, habilitá las notificaciones de escritorio. Podés controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba, una vez que estén habilitadas.", "notifications_permission_banner.title": "No te pierdas nada", diff --git a/app/javascript/mastodon/locales/es-MX.json b/app/javascript/mastodon/locales/es-MX.json index ba54843236..b1a7757081 100644 --- a/app/javascript/mastodon/locales/es-MX.json +++ b/app/javascript/mastodon/locales/es-MX.json @@ -241,6 +241,7 @@ "empty_column.list": "No hay nada en esta lista aún. Cuando miembros de esta lista publiquen nuevos estatus, estos aparecerán qui.", "empty_column.lists": "No tienes ninguna lista. cuando crees una, se mostrará aquí.", "empty_column.mutes": "Aún no has silenciado a ningún usuario.", + "empty_column.notification_requests": "¡Todo limpio! No hay nada aquí. Cuando recibas nuevas notificaciones, aparecerán aquí conforme a tu configuración.", "empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.", "empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo", "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador, esta página no se ha podido mostrar correctamente.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva", "filter_modal.select_filter.title": "Filtrar esta publicación", "filter_modal.title.status": "Filtrar una publicación", + "filtered_notifications_banner.pending_requests": "Notificaciones de {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer", + "filtered_notifications_banner.title": "Notificaciones filtradas", "firehose.all": "Todas", "firehose.local": "Este servidor", "firehose.remote": "Otros servidores", @@ -314,7 +317,6 @@ "hashtag.follow": "Seguir etiqueta", "hashtag.unfollow": "Dejar de seguir etiqueta", "hashtags.and_other": "…y {count, plural, other {# más}}", - "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar retoots", "home.column_settings.show_replies": "Mostrar respuestas", "home.hide_announcements": "Ocultar anuncios", @@ -440,15 +442,16 @@ "notification.reblog": "{name} ha retooteado tu estado", "notification.status": "{name} acaba de publicar", "notification.update": "{name} editó una publicación", + "notification_requests.accept": "Aceptar", + "notification_requests.dismiss": "Descartar", + "notification_requests.notifications_from": "Notificaciones de {name}", + "notification_requests.title": "Notificaciones filtradas", "notifications.clear": "Limpiar notificaciones", "notifications.clear_confirmation": "¿Seguro de querer borrar permanentemente todas tus notificaciones?", "notifications.column_settings.admin.report": "Nuevas denuncias:", "notifications.column_settings.admin.sign_up": "Registros nuevos:", "notifications.column_settings.alert": "Notificaciones de escritorio", "notifications.column_settings.favourite": "Favoritos:", - "notifications.column_settings.filter_bar.advanced": "Mostrar todas las categorías", - "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", - "notifications.column_settings.filter_bar.show_bar": "Mostrar barra de filtros", "notifications.column_settings.follow": "Nuevos seguidores:", "notifications.column_settings.follow_request": "Nuevas solicitudes de seguimiento:", "notifications.column_settings.mention": "Menciones:", @@ -474,6 +477,15 @@ "notifications.permission_denied": "No se pueden habilitar las notificaciones de escritorio ya que se denegó el permiso.", "notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado anteriormente", "notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso requerido.", + "notifications.policy.filter_new_accounts.hint": "Creadas durante {days, plural, one {el último día} other {los últimos # días}}", + "notifications.policy.filter_new_accounts_title": "Cuentas nuevas", + "notifications.policy.filter_not_followers_hint": "Incluyendo personas que te han estado siguiendo desde hace menos de {days, plural, one {un día} other {# días}}", + "notifications.policy.filter_not_followers_title": "Personas que no te siguen", + "notifications.policy.filter_not_following_hint": "Hasta que las apruebes manualmente", + "notifications.policy.filter_not_following_title": "Personas que no sigues", + "notifications.policy.filter_private_mentions_hint": "Filtrada, a menos que sea en respuesta a tu propia mención, o si sigues al remitente", + "notifications.policy.filter_private_mentions_title": "Menciones privadas no solicitadas", + "notifications.policy.title": "Filtrar notificaciones de…", "notifications_permission_banner.enable": "Habilitar notificaciones de escritorio", "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no esté abierto, habilite las notificaciones de escritorio. Puedes controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba una vez que estén habilitadas.", "notifications_permission_banner.title": "Nunca te pierdas nada", diff --git a/app/javascript/mastodon/locales/es.json b/app/javascript/mastodon/locales/es.json index b4cc241814..d7f54a3e2a 100644 --- a/app/javascript/mastodon/locales/es.json +++ b/app/javascript/mastodon/locales/es.json @@ -241,6 +241,7 @@ "empty_column.list": "No hay nada en esta lista aún. Cuando miembros de esta lista publiquen nuevos estatus, estos aparecerán qui.", "empty_column.lists": "No tienes ninguna lista. cuando crees una, se mostrará aquí.", "empty_column.mutes": "Aún no has silenciado a ningún usuario.", + "empty_column.notification_requests": "¡Todo limpio! No hay nada aquí. Cuando recibas nuevas notificaciones, aparecerán aquí conforme a tu configuración.", "empty_column.notifications": "No tienes ninguna notificación aún. Interactúa con otros para empezar una conversación.", "empty_column.public": "¡No hay nada aquí! Escribe algo públicamente, o sigue usuarios de otras instancias manualmente para llenarlo", "error.unexpected_crash.explanation": "Debido a un error en nuestro código o a un problema de compatibilidad con el navegador, esta página no se ha podido mostrar correctamente.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva", "filter_modal.select_filter.title": "Filtrar esta publicación", "filter_modal.title.status": "Filtrar una publicación", + "filtered_notifications_banner.pending_requests": "Notificaciones de {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer", + "filtered_notifications_banner.title": "Notificaciones filtradas", "firehose.all": "Todas", "firehose.local": "Este servidor", "firehose.remote": "Otros servidores", @@ -314,7 +317,6 @@ "hashtag.follow": "Seguir etiqueta", "hashtag.unfollow": "Dejar de seguir etiqueta", "hashtags.and_other": "…y {count, plural, other {# más}}", - "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar impulsos", "home.column_settings.show_replies": "Mostrar respuestas", "home.hide_announcements": "Ocultar anuncios", @@ -440,15 +442,16 @@ "notification.reblog": "{name} ha impulsado tu publicación", "notification.status": "{name} acaba de publicar", "notification.update": "{name} editó una publicación", + "notification_requests.accept": "Aceptar", + "notification_requests.dismiss": "Descartar", + "notification_requests.notifications_from": "Notificaciones de {name}", + "notification_requests.title": "Notificaciones filtradas", "notifications.clear": "Limpiar notificaciones", "notifications.clear_confirmation": "¿Seguro que quieres limpiar permanentemente todas tus notificaciones?", "notifications.column_settings.admin.report": "Nuevos informes:", "notifications.column_settings.admin.sign_up": "Nuevos registros:", "notifications.column_settings.alert": "Notificaciones de escritorio", "notifications.column_settings.favourite": "Favoritos:", - "notifications.column_settings.filter_bar.advanced": "Mostrar todas las categorías", - "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", - "notifications.column_settings.filter_bar.show_bar": "Mostrar barra de filtros", "notifications.column_settings.follow": "Nuevos seguidores:", "notifications.column_settings.follow_request": "Nuevas solicitudes de seguimiento:", "notifications.column_settings.mention": "Menciones:", @@ -474,6 +477,15 @@ "notifications.permission_denied": "No se pueden habilitar las notificaciones de escritorio ya que se denegó el permiso.", "notifications.permission_denied_alert": "No se pueden habilitar las notificaciones de escritorio, ya que el permiso del navegador fue denegado anteriormente", "notifications.permission_required": "Las notificaciones de escritorio no están disponibles porque no se ha concedido el permiso requerido.", + "notifications.policy.filter_new_accounts.hint": "Creadas durante {days, plural, one {el último día} other {los últimos # días}}", + "notifications.policy.filter_new_accounts_title": "Cuentas nuevas", + "notifications.policy.filter_not_followers_hint": "Incluyendo personas que te han estado siguiendo desde hace menos de {days, plural, one {un día} other {# días}}", + "notifications.policy.filter_not_followers_title": "Personas que no te siguen", + "notifications.policy.filter_not_following_hint": "Hasta que las apruebes manualmente", + "notifications.policy.filter_not_following_title": "Personas que no sigues", + "notifications.policy.filter_private_mentions_hint": "Filtrada, a menos que sea en respuesta a tu propia mención, o si sigues al remitente", + "notifications.policy.filter_private_mentions_title": "Menciones privadas no solicitadas", + "notifications.policy.title": "Filtrar notificaciones de…", "notifications_permission_banner.enable": "Habilitar notificaciones de escritorio", "notifications_permission_banner.how_to_control": "Para recibir notificaciones cuando Mastodon no esté abierto, habilite las notificaciones de escritorio. Puedes controlar con precisión qué tipos de interacciones generan notificaciones de escritorio a través del botón {icon} de arriba una vez que estén habilitadas.", "notifications_permission_banner.title": "Nunca te pierdas nada", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index be0c262c32..2759c96a10 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -314,7 +314,6 @@ "hashtag.follow": "Jälgi silti", "hashtag.unfollow": "Lõpeta sildi jälgimine", "hashtags.and_other": "…ja {count, plural, one {}other {# veel}}", - "home.column_settings.basic": "Peamine", "home.column_settings.show_reblogs": "Näita jagamisi", "home.column_settings.show_replies": "Näita vastuseid", "home.hide_announcements": "Peida teadaanded", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Uued kasutajad:", "notifications.column_settings.alert": "Töölauateated", "notifications.column_settings.favourite": "Lemmikud:", - "notifications.column_settings.filter_bar.advanced": "Kuva kõik kategooriad", - "notifications.column_settings.filter_bar.category": "Kiirfiltri riba", - "notifications.column_settings.filter_bar.show_bar": "Näita filtririba", "notifications.column_settings.follow": "Uued jälgijad:", "notifications.column_settings.follow_request": "Uued jälgimistaotlused:", "notifications.column_settings.mention": "Mainimised:", diff --git a/app/javascript/mastodon/locales/eu.json b/app/javascript/mastodon/locales/eu.json index c21fa1d204..4af5aaaaf5 100644 --- a/app/javascript/mastodon/locales/eu.json +++ b/app/javascript/mastodon/locales/eu.json @@ -241,6 +241,7 @@ "empty_column.list": "Ez dago ezer zerrenda honetan. Zerrenda honetako kideek bidalketa berriak argitaratzean, hemen agertuko dira.", "empty_column.lists": "Ez duzu zerrendarik oraindik. Baten bat sortzen duzunean hemen agertuko da.", "empty_column.mutes": "Ez duzu erabiltzailerik mututu oraindik.", + "empty_column.notification_requests": "Garbi-garbi! Ezertxo ere ez hemen. Jakinarazpenak jasotzen dituzunean, hemen agertuko dira zure ezarpenen arabera.", "empty_column.notifications": "Ez duzu jakinarazpenik oraindik. Jarri besteekin harremanetan elkarrizketa abiatzeko.", "empty_column.public": "Ez dago ezer hemen! Idatzi zerbait publikoki edo jarraitu eskuz beste zerbitzari batzuetako erabiltzaileei hau betetzen joateko", "error.unexpected_crash.explanation": "Gure kodean arazoren bat dela eta, edo nabigatzailearekin bateragarritasun arazoren bat dela eta, orri hau ezin izan da ongi bistaratu.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Hautatu lehendik dagoen kategoria bat edo sortu berria", "filter_modal.select_filter.title": "Iragazi bidalketa hau", "filter_modal.title.status": "Iragazi bidalketa bat", + "filtered_notifications_banner.pending_requests": "Ezagutu {count, plural, =0 {dezakezun inoren} one {dezakezun pertsona baten} other {ditzakezun # pertsonen}} jakinarazpenak", + "filtered_notifications_banner.title": "Iragazitako jakinarazpenak", "firehose.all": "Guztiak", "firehose.local": "Zerbitzari hau", "firehose.remote": "Beste zerbitzariak", @@ -314,7 +317,6 @@ "hashtag.follow": "Jarraitu traolari", "hashtag.unfollow": "Utzi traola jarraitzeari", "hashtags.and_other": "…eta {count, plural, one {}other {# gehiago}}", - "home.column_settings.basic": "Oinarrizkoa", "home.column_settings.show_reblogs": "Erakutsi bultzadak", "home.column_settings.show_replies": "Erakutsi erantzunak", "home.hide_announcements": "Ezkutatu iragarpenak", @@ -440,15 +442,16 @@ "notification.reblog": "{name}(e)k bultzada eman dio zure bidalketari", "notification.status": "{name} erabiltzaileak bidalketa egin berri du", "notification.update": "{name} erabiltzaileak bidalketa bat editatu du", + "notification_requests.accept": "Onartu", + "notification_requests.dismiss": "Baztertu", + "notification_requests.notifications_from": "{name} erabiltzailearen jakinarazpenak", + "notification_requests.title": "Iragazitako jakinarazpenak", "notifications.clear": "Garbitu jakinarazpenak", "notifications.clear_confirmation": "Ziur zure jakinarazpen guztiak behin betirako garbitu nahi dituzula?", "notifications.column_settings.admin.report": "Txosten berriak:", "notifications.column_settings.admin.sign_up": "Izen-emate berriak:", "notifications.column_settings.alert": "Mahaigaineko jakinarazpenak", "notifications.column_settings.favourite": "Gogokoak:", - "notifications.column_settings.filter_bar.advanced": "Erakutsi kategoria guztiak", - "notifications.column_settings.filter_bar.category": "Iragazki azkarraren barra", - "notifications.column_settings.filter_bar.show_bar": "Erakutsi iragazki-barra", "notifications.column_settings.follow": "Jarraitzaile berriak:", "notifications.column_settings.follow_request": "Jarraitzeko eskaera berriak:", "notifications.column_settings.mention": "Aipamenak:", @@ -474,6 +477,15 @@ "notifications.permission_denied": "Mahaigaineko jakinarazpenak ez daude erabilgarri, nabigatzaileari baimen eskaera ukatu zitzaiolako", "notifications.permission_denied_alert": "Mahaigaineko jakinarazpenak ezin dira gaitu, nabigatzaileari baimena ukatu zitzaiolako", "notifications.permission_required": "Mahaigaineko jakinarazpenak ez daude erabilgarri, horretarako behar den baimena ez delako eman.", + "notifications.policy.filter_new_accounts.hint": "Azken {days, plural, one {egunean} other {# egunetan}} sortua", + "notifications.policy.filter_new_accounts_title": "Kontu berriak", + "notifications.policy.filter_not_followers_hint": "{days, plural, one {Egun batez} other {# egunez}} baino gutxiago jarraitu zaituen jendea barne", + "notifications.policy.filter_not_followers_title": "Jarraitzen ez zaituen jendea", + "notifications.policy.filter_not_following_hint": "Eskuz onartzen dituzun arte", + "notifications.policy.filter_not_following_title": "Jarraitzen ez duzun jendea", + "notifications.policy.filter_private_mentions_hint": "Iragazita, baldin eta zure aipamenaren erantzuna bada edo bidaltzailea jarraitzen baduzu", + "notifications.policy.filter_private_mentions_title": "Eskatu gabeko aipamen pribatuak", + "notifications.policy.title": "Ez iragazi hemengo jakinarazpenak…", "notifications_permission_banner.enable": "Gaitu mahaigaineko jakinarazpenak", "notifications_permission_banner.how_to_control": "Mastodon irekita ez dagoenean jakinarazpenak jasotzeko, gaitu mahaigaineko jakinarazpenak. Mahaigaineko jakinarazpenak ze elkarrekintzak eragingo dituzten zehazki kontrolatu dezakezu goiko {icon} botoia erabiliz, gaituta daudenean.", "notifications_permission_banner.title": "Ez galdu ezer inoiz", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 9029ba3cb5..9e6128b873 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -314,7 +314,6 @@ "hashtag.follow": "پی‌گرفتن برچسب", "hashtag.unfollow": "پی‌نگرفتن برچسب", "hashtags.and_other": "…و {count, plural, other {# بیش‌تر}}", - "home.column_settings.basic": "پایه‌ای", "home.column_settings.show_reblogs": "نمایش تقویت‌ها", "home.column_settings.show_replies": "نمایش پاسخ‌ها", "home.hide_announcements": "نهفتن اعلامیه‌ها", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "ثبت نام‌های جدید:", "notifications.column_settings.alert": "آگاهی‌های میزکار", "notifications.column_settings.favourite": "برگزیده‌ها:", - "notifications.column_settings.filter_bar.advanced": "نمایش همۀ دسته‌ها", - "notifications.column_settings.filter_bar.category": "نوار پالایش سریع", - "notifications.column_settings.filter_bar.show_bar": "نمایش نوار پالایه", "notifications.column_settings.follow": "پی‌گیرندگان جدید:", "notifications.column_settings.follow_request": "درخواست‌های جدید پی‌گیری:", "notifications.column_settings.mention": "اشاره‌ها:", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 7588b084fd..3f964a7101 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -314,7 +314,6 @@ "hashtag.follow": "Seuraa aihetunnistetta", "hashtag.unfollow": "Lopeta aihetunnisteen seuraaminen", "hashtags.and_other": "…ja {count, plural, other {# lisää}}", - "home.column_settings.basic": "Perusasetukset", "home.column_settings.show_reblogs": "Näytä tehostukset", "home.column_settings.show_replies": "Näytä vastaukset", "home.hide_announcements": "Piilota tiedotteet", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Uudet rekisteröitymiset:", "notifications.column_settings.alert": "Työpöytäilmoitukset", "notifications.column_settings.favourite": "Suosikit:", - "notifications.column_settings.filter_bar.advanced": "Näytä kaikki luokat", - "notifications.column_settings.filter_bar.category": "Pikasuodatuspalkki", - "notifications.column_settings.filter_bar.show_bar": "Näytä suodatinpalkki", "notifications.column_settings.follow": "Uudet seuraajat:", "notifications.column_settings.follow_request": "Uudet seuraamispyynnöt:", "notifications.column_settings.mention": "Maininnat:", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 13e49eb314..67b323e2cf 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -241,6 +241,7 @@ "empty_column.list": "Einki er í hesum listanum enn. Tá limir í hesum listanum posta nýggjar postar, so síggjast teir her.", "empty_column.lists": "Tú hevur ongar goymdar listar enn. Tá tú gert ein lista, so sært tú hann her.", "empty_column.mutes": "Tú hevur enn ikki doyvt nakran brúkara.", + "empty_column.notification_requests": "Alt er klárt! Her er einki. Tá tú fært nýggjar fráboðanir, síggjast tær her sambært tínum stillingum.", "empty_column.notifications": "Tú hevur ongar fráboðanir enn. Tá onnur samskifta við teg, so sær tú fráboðaninar her.", "empty_column.public": "Einki er her! Skriva okkurt alment ella fylg brúkarum frá øðrum ambætarum fyri at fylla tilfar í", "error.unexpected_crash.explanation": "Orsakað av einum feili í okkara kotu ella orsakað av at kagin hjá tær ikki er sambæriligur við skipanina, so bar ikki til at vísa hesa síðuna rætt.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Brúka ein verandi bólk ella skapa ein nýggjan", "filter_modal.select_filter.title": "Filtrera hendan postin", "filter_modal.title.status": "Filtrera ein post", + "filtered_notifications_banner.pending_requests": "Fráboðanir frá {count, plural, =0 {ongum} one {einum persóni} other {# persónum}}, sum tú møguliga kennir", + "filtered_notifications_banner.title": "Sáldaðar fráboðanir", "firehose.all": "Allar", "firehose.local": "Hesin ambætarin", "firehose.remote": "Aðrir ambætarar", @@ -314,7 +317,6 @@ "hashtag.follow": "Fylg frámerki", "hashtag.unfollow": "Gevst at fylgja frámerki", "hashtags.and_other": "…og {count, plural, other {# afturat}}", - "home.column_settings.basic": "Grundleggjandi", "home.column_settings.show_reblogs": "Vís lyft", "home.column_settings.show_replies": "Vís svar", "home.hide_announcements": "Fjal kunngerðir", @@ -440,15 +442,16 @@ "notification.reblog": "{name} lyfti tín post", "notification.status": "{name} hevur júst postað", "notification.update": "{name} rættaði ein post", + "notification_requests.accept": "Góðtak", + "notification_requests.dismiss": "Avvís", + "notification_requests.notifications_from": "Fráboðanir frá {name}", + "notification_requests.title": "Sáldaðar fráboðanir", "notifications.clear": "Rudda fráboðanir", "notifications.clear_confirmation": "Ert tú vís/ur í, at tú vilt strika allar tínar fráboðanir?", "notifications.column_settings.admin.report": "Nýggjar fráboðanir:", "notifications.column_settings.admin.sign_up": "Nýggjar tilmeldingar:", "notifications.column_settings.alert": "Skriviborðsfráboðanir", "notifications.column_settings.favourite": "Dámdir postar:", - "notifications.column_settings.filter_bar.advanced": "Vís allar bólkar", - "notifications.column_settings.filter_bar.category": "Skjótfilturbjálki", - "notifications.column_settings.filter_bar.show_bar": "Vís filturbjálka", "notifications.column_settings.follow": "Nýggir fylgjarar:", "notifications.column_settings.follow_request": "Nýggjar umbønir um at fylgja:", "notifications.column_settings.mention": "Umrøður:", @@ -474,6 +477,15 @@ "notifications.permission_denied": "Skriviborðsfráboðanir eru ikki tøkar tí at ein kaga-umbøn áður bleiv noktað", "notifications.permission_denied_alert": "Tað ber ikki til at sláa skriviborðsfráboðanir til, tí at kagarættindi áður eru noktaði", "notifications.permission_required": "Skriviborðsfráboðanir eru ikki tøkar, tí at neyðugu rættindini eru ikki latin.", + "notifications.policy.filter_new_accounts.hint": "Stovnaðar {days, plural, one {seinasta dagin} other {seinastu # dagarnar}}", + "notifications.policy.filter_new_accounts_title": "Nýggjar kontur", + "notifications.policy.filter_not_followers_hint": "Íroknað fólk, sum hava fylgt tær styttri enn {days, plural, one {ein dag} other {# dagar}}", + "notifications.policy.filter_not_followers_title": "Fólk, sum ikki fylgja tær", + "notifications.policy.filter_not_following_hint": "Til tú góðkennir tey manuelt", + "notifications.policy.filter_not_following_title": "Fólk, sum tú ikki fylgir", + "notifications.policy.filter_private_mentions_hint": "Sáldaði, uttan so at tað er í svari til tínar egnu nevningar ella um tú fylgir sendaranum", + "notifications.policy.filter_private_mentions_title": "Óbidnar privatar umrøður", + "notifications.policy.title": "Sálda burtur fráboðanir frá…", "notifications_permission_banner.enable": "Ger skriviborðsfráboðanir virknar", "notifications_permission_banner.how_to_control": "Ger skriviborðsfráboðanir virknar fyri at móttaka fráboðanir, tá Mastodon ikki er opið. Tá tær eru gjørdar virknar, kanst tú stýra, hvørji sløg av samvirkni geva skriviborðsfráboðanir. Hetta umvegis {icon} knøttin omanfyri.", "notifications_permission_banner.title": "Miss einki", diff --git a/app/javascript/mastodon/locales/fr-CA.json b/app/javascript/mastodon/locales/fr-CA.json index fc969b02f4..8aff0b5afe 100644 --- a/app/javascript/mastodon/locales/fr-CA.json +++ b/app/javascript/mastodon/locales/fr-CA.json @@ -314,7 +314,6 @@ "hashtag.follow": "Suivre ce hashtag", "hashtag.unfollow": "Ne plus suivre ce hashtag", "hashtags.and_other": "…et {count, plural, other {# de plus}}", - "home.column_settings.basic": "Basique", "home.column_settings.show_reblogs": "Afficher boosts", "home.column_settings.show_replies": "Afficher réponses", "home.hide_announcements": "Masquer les annonces", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Nouvelles inscriptions:", "notifications.column_settings.alert": "Notifications navigateur", "notifications.column_settings.favourite": "Favoris:", - "notifications.column_settings.filter_bar.advanced": "Afficher toutes les catégories", - "notifications.column_settings.filter_bar.category": "Barre de filtrage rapide", - "notifications.column_settings.filter_bar.show_bar": "Afficher la barre de filtre", "notifications.column_settings.follow": "Nouveaux⋅elles abonné⋅e⋅s:", "notifications.column_settings.follow_request": "Nouvelles demandes d’abonnement:", "notifications.column_settings.mention": "Mentions:", diff --git a/app/javascript/mastodon/locales/fr.json b/app/javascript/mastodon/locales/fr.json index 8396679d06..223878f6f9 100644 --- a/app/javascript/mastodon/locales/fr.json +++ b/app/javascript/mastodon/locales/fr.json @@ -314,7 +314,6 @@ "hashtag.follow": "Suivre le hashtag", "hashtag.unfollow": "Ne plus suivre le hashtag", "hashtags.and_other": "…et {count, plural, other {# de plus}}", - "home.column_settings.basic": "Basique", "home.column_settings.show_reblogs": "Afficher les partages", "home.column_settings.show_replies": "Afficher les réponses", "home.hide_announcements": "Masquer les annonces", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Nouvelles inscriptions :", "notifications.column_settings.alert": "Notifications du navigateur", "notifications.column_settings.favourite": "Favoris :", - "notifications.column_settings.filter_bar.advanced": "Afficher toutes les catégories", - "notifications.column_settings.filter_bar.category": "Barre de filtrage rapide", - "notifications.column_settings.filter_bar.show_bar": "Afficher la barre de filtre", "notifications.column_settings.follow": "Nouveaux·elles abonné·e·s :", "notifications.column_settings.follow_request": "Nouvelles demandes d’abonnement :", "notifications.column_settings.mention": "Mentions :", diff --git a/app/javascript/mastodon/locales/fy.json b/app/javascript/mastodon/locales/fy.json index bc4fecb93d..5757f2cde7 100644 --- a/app/javascript/mastodon/locales/fy.json +++ b/app/javascript/mastodon/locales/fy.json @@ -314,7 +314,6 @@ "hashtag.follow": "Hashtag folgje", "hashtag.unfollow": "Hashtag ûntfolgje", "hashtags.and_other": "…en {count, plural, one {}other {# mear}}", - "home.column_settings.basic": "Algemien", "home.column_settings.show_reblogs": "Boosts toane", "home.column_settings.show_replies": "Reaksjes toane", "home.hide_announcements": "Meidielingen ferstopje", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Nije registraasjes:", "notifications.column_settings.alert": "Desktopmeldingen", "notifications.column_settings.favourite": "Favoriten:", - "notifications.column_settings.filter_bar.advanced": "Alle kategoryen toane", - "notifications.column_settings.filter_bar.category": "Flugge filterbalke", - "notifications.column_settings.filter_bar.show_bar": "Filterbalke toane", "notifications.column_settings.follow": "Nije folgers:", "notifications.column_settings.follow_request": "Nij folchfersyk:", "notifications.column_settings.mention": "Fermeldingen:", diff --git a/app/javascript/mastodon/locales/ga.json b/app/javascript/mastodon/locales/ga.json index a708088fbb..44af2fb4f6 100644 --- a/app/javascript/mastodon/locales/ga.json +++ b/app/javascript/mastodon/locales/ga.json @@ -249,7 +249,6 @@ "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "hashtag.follow": "Lean haischlib", "hashtag.unfollow": "Ná lean haischlib", - "home.column_settings.basic": "Bunúsach", "home.column_settings.show_reblogs": "Taispeáin moltaí", "home.column_settings.show_replies": "Taispeán freagraí", "home.hide_announcements": "Cuir fógraí i bhfolach", @@ -349,9 +348,6 @@ "notifications.clear": "Glan fógraí", "notifications.column_settings.admin.report": "Tuairiscí nua:", "notifications.column_settings.alert": "Fógraí deisce", - "notifications.column_settings.filter_bar.advanced": "Taispeáin na catagóirí go léir", - "notifications.column_settings.filter_bar.category": "Barra scagaire tapa", - "notifications.column_settings.filter_bar.show_bar": "Taispeáin barra scagaire", "notifications.column_settings.follow": "Leantóirí nua:", "notifications.column_settings.follow_request": "Iarratais leanúnaí nua:", "notifications.column_settings.mention": "Tráchtanna:", diff --git a/app/javascript/mastodon/locales/gd.json b/app/javascript/mastodon/locales/gd.json index f4d12d6337..ae190a51b0 100644 --- a/app/javascript/mastodon/locales/gd.json +++ b/app/javascript/mastodon/locales/gd.json @@ -314,7 +314,6 @@ "hashtag.follow": "Lean an taga hais", "hashtag.unfollow": "Na lean an taga hais tuilleadh", "hashtags.and_other": "…agus {count, plural, one {# eile} two {# eile} few {# eile} other {# eile}}", - "home.column_settings.basic": "Bunasach", "home.column_settings.show_reblogs": "Seall na brosnachaidhean", "home.column_settings.show_replies": "Seall na freagairtean", "home.hide_announcements": "Falaich na brathan-fios", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Clàraidhean ùra:", "notifications.column_settings.alert": "Brathan deasga", "notifications.column_settings.favourite": "Annsachdan:", - "notifications.column_settings.filter_bar.advanced": "Seall a h-uile roinn-seòrsa", - "notifications.column_settings.filter_bar.category": "Bàr-criathraidh luath", - "notifications.column_settings.filter_bar.show_bar": "Seall am bàr-criathraidh", "notifications.column_settings.follow": "Luchd-leantainn ùr:", "notifications.column_settings.follow_request": "Iarrtasan leantainn ùra:", "notifications.column_settings.mention": "Iomraidhean:", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 91b6870be7..52e0ee6f6d 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -314,7 +314,6 @@ "hashtag.follow": "Seguir cancelo", "hashtag.unfollow": "Deixar de seguir cancelo", "hashtags.and_other": "…e {count, plural, one {}other {# máis}}", - "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Amosar compartidos", "home.column_settings.show_replies": "Amosar respostas", "home.hide_announcements": "Agochar anuncios", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Novas usuarias:", "notifications.column_settings.alert": "Notificacións de escritorio", "notifications.column_settings.favourite": "Favoritas:", - "notifications.column_settings.filter_bar.advanced": "Amosar todas as categorías", - "notifications.column_settings.filter_bar.category": "Barra de filtrado rápido", - "notifications.column_settings.filter_bar.show_bar": "Amosar barra de filtros", "notifications.column_settings.follow": "Novas seguidoras:", "notifications.column_settings.follow_request": "Novas peticións de seguimento:", "notifications.column_settings.mention": "Mencións:", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index 2eef70f0fe..dcbc30308c 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -241,6 +241,7 @@ "empty_column.list": "אין עדיין פריטים ברשימה. כאשר חברים ברשימה הזאת יפרסמו הודעות חדשות, הן יופיעו פה.", "empty_column.lists": "אין לך שום רשימות עדיין. לכשיהיו, הן תופענה כאן.", "empty_column.mutes": "עוד לא השתקת שום משתמש.", + "empty_column.notification_requests": "בום! אין פה כלום. כשיווצרו עוד התראות, הן יופיעו כאן על בסיס ההעדפות שלך.", "empty_column.notifications": "אין התראות עדיין. יאללה, הגיע הזמן להתחיל להתערבב.", "empty_column.public": "אין פה כלום! כדי למלא את הטור הזה אפשר לכתוב משהו, או להתחיל לעקוב אחרי אנשים מקהילות אחרות", "error.unexpected_crash.explanation": "עקב תקלה בקוד שלנו או בעיית תאימות דפדפן, לא ניתן להציג דף זה כראוי.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "שימוש בקטגורייה קיימת או יצירת אחת חדשה", "filter_modal.select_filter.title": "סינון ההודעה הזו", "filter_modal.title.status": "סנן הודעה", + "filtered_notifications_banner.pending_requests": "{count, plural,=0 {אין התראות ממשתמשים ה}one {התראה אחת ממישהו/מישהי ה}other {יש # התראות ממשתמשים }}מוכרים לך", + "filtered_notifications_banner.title": "התראות מסוננות", "firehose.all": "הכל", "firehose.local": "שרת זה", "firehose.remote": "שרתים אחרים", @@ -314,7 +317,6 @@ "hashtag.follow": "לעקוב אחרי תגית", "hashtag.unfollow": "להפסיק לעקוב אחרי תגית", "hashtags.and_other": "…{count, plural,other {ועוד #}}", - "home.column_settings.basic": "למתחילים", "home.column_settings.show_reblogs": "הצגת הדהודים", "home.column_settings.show_replies": "הצגת תגובות", "home.hide_announcements": "הסתר הכרזות", @@ -440,15 +442,16 @@ "notification.reblog": "הודעתך הודהדה על ידי {name}", "notification.status": "{name} הרגע פרסמו", "notification.update": "{name} ערכו הודעה", + "notification_requests.accept": "לקבל", + "notification_requests.dismiss": "לבטל", + "notification_requests.notifications_from": "התראות מ־ {name}", + "notification_requests.title": "התראות מסוננות", "notifications.clear": "הסרת התראות", "notifications.clear_confirmation": "להסיר את כל ההתראות לצמיתות ? ", "notifications.column_settings.admin.report": "דו\"חות חדשים", "notifications.column_settings.admin.sign_up": "הרשמות חדשות:", "notifications.column_settings.alert": "התראות לשולחן העבודה", "notifications.column_settings.favourite": "חיבובים:", - "notifications.column_settings.filter_bar.advanced": "הצג את כל הקטגוריות", - "notifications.column_settings.filter_bar.category": "שורת סינון מהיר", - "notifications.column_settings.filter_bar.show_bar": "הצג שורת סינון", "notifications.column_settings.follow": "עוקבים חדשים:", "notifications.column_settings.follow_request": "בקשות מעקב חדשות:", "notifications.column_settings.mention": "פניות:", @@ -474,6 +477,15 @@ "notifications.permission_denied": "לא ניתן להציג התראות מסך כיוון כיוון שהרשאות דפדפן נשללו בעבר", "notifications.permission_denied_alert": "לא ניתן לאפשר נוטיפיקציות מסך שכן הדפדפן סורב הרשאה בעבר", "notifications.permission_required": "לא ניתן לאפשר נוטיפיקציות מסך כיוון שהרשאה דרושה לא ניתנה.", + "notifications.policy.filter_new_accounts.hint": "נוצר {days, plural,one {ביום האחרון} two {ביומיים האחרונים} other {ב־# הימים האחרונים}}", + "notifications.policy.filter_new_accounts_title": "חשבונות חדשים", + "notifications.policy.filter_not_followers_hint": "כולל משתמשים שעקבו אחריך פחות מ{days, plural,one {יום} two {יומיים} other {־# ימים}}", + "notifications.policy.filter_not_followers_title": "משתמשים שלא עוקבות.ים אחריך", + "notifications.policy.filter_not_following_hint": "עד שיאושרו ידנית על ידיך", + "notifications.policy.filter_not_following_title": "משתמשים שאינך עוקב(ת) אחריהםן", + "notifications.policy.filter_private_mentions_hint": "מסונן אלא אם זו תשובה למינשון שלך או אם אתם עוקבים אחרי העונה", + "notifications.policy.filter_private_mentions_title": "מינשונים בפרטי שלא הוזמנו", + "notifications.policy.title": "להסתיר התראות מ…", "notifications_permission_banner.enable": "לאפשר נוטיפיקציות מסך", "notifications_permission_banner.how_to_control": "כדי לקבל התראות גם כאשר מסטודון סגור יש לאפשר התראות מסך. ניתן לשלוט בדיוק איזה סוג של אינטראקציות יביא להתראות מסך דרך כפתור ה- {icon} מרגע שהן מאופשרות.", "notifications_permission_banner.title": "לעולם אל תחמיץ דבר", diff --git a/app/javascript/mastodon/locales/hi.json b/app/javascript/mastodon/locales/hi.json index f88fe19569..edab89a84a 100644 --- a/app/javascript/mastodon/locales/hi.json +++ b/app/javascript/mastodon/locales/hi.json @@ -277,7 +277,6 @@ "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "hashtag.follow": "हैशटैग को फॉलो करें", "hashtag.unfollow": "हैशटैग को उनफ़ोल्लोव करें", - "home.column_settings.basic": "बुनियादी", "home.column_settings.show_reblogs": "बूस्ट दिखाए", "home.column_settings.show_replies": "जवाबों को दिखाए", "home.hide_announcements": "घोषणाएँ छिपाएँ", @@ -376,8 +375,6 @@ "notifications.clear": "सूचनाएं हटाए", "notifications.column_settings.admin.report": "नई रिपोर्ट:", "notifications.column_settings.favourite": "पसंदीदा:", - "notifications.column_settings.filter_bar.advanced": "सभी श्रेणियाँ दिखाएं", - "notifications.column_settings.filter_bar.category": "फ़िल्टर बार", "notifications.column_settings.follow": "नए फ़ॉलोअर्स", "notifications.column_settings.mention": "उल्लेख:", "notifications.column_settings.poll": "चुनाव परिणाम", diff --git a/app/javascript/mastodon/locales/hr.json b/app/javascript/mastodon/locales/hr.json index 9fe15f5a2d..45d1b53268 100644 --- a/app/javascript/mastodon/locales/hr.json +++ b/app/javascript/mastodon/locales/hr.json @@ -261,7 +261,6 @@ "hashtag.column_settings.tag_toggle": "Uključi dodatne oznake za ovaj stupac", "hashtag.follow": "Prati hashtag", "hashtag.unfollow": "Prestani pratiti hashtag", - "home.column_settings.basic": "Osnovno", "home.column_settings.show_reblogs": "Pokaži boostove", "home.column_settings.show_replies": "Pokaži odgovore", "home.hide_announcements": "Sakrij najave", @@ -358,8 +357,6 @@ "notifications.clear": "Očisti obavijesti", "notifications.clear_confirmation": "Želite li zaista trajno očistiti sve Vaše obavijesti?", "notifications.column_settings.alert": "Obavijesti radne površine", - "notifications.column_settings.filter_bar.advanced": "Prikaži sve kategorije", - "notifications.column_settings.filter_bar.category": "Brza traka filtera", "notifications.column_settings.follow": "Novi pratitelji:", "notifications.column_settings.follow_request": "Novi zahtjevi za praćenje:", "notifications.column_settings.mention": "Spominjanja:", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index f499e08f6d..5dd0e7aee5 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -241,6 +241,7 @@ "empty_column.list": "A lista jelenleg üres. Ha a listatagok bejegyzést tesznek közzé, itt fog megjelenni.", "empty_column.lists": "Még nincs egyetlen listád sem. Ha létrehozol egyet, itt fog megjelenni.", "empty_column.mutes": "Még egy felhasználót sem némítottál le.", + "empty_column.notification_requests": "Minden tiszta! Itt nincs semmi. Ha új értesítéseket kapsz, azok itt jelennek meg a beállításoknak megfelelően.", "empty_column.notifications": "Jelenleg még nincsenek értesítéseid. Ha mások kapcsolatba lépnek veled, ezek itt lesznek láthatóak.", "empty_column.public": "Jelenleg itt nincs semmi! Írj valamit nyilvánosan vagy kövess más kiszolgálón levő felhasználókat, hogy megtöltsd.", "error.unexpected_crash.explanation": "Egy kód- vagy böngészőkompatibilitási hiba miatt ez az oldal nem jeleníthető meg helyesen.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Válassz egy meglévő kategóriát, vagy hozz létre egy újat", "filter_modal.select_filter.title": "E bejegyzés szűrése", "filter_modal.title.status": "Egy bejegyzés szűrése", + "filtered_notifications_banner.pending_requests": "Értesítések {count, plural, =0 {0 személytől} one {egy feltehetőleg ismert személytől} other {# feltehetőleg ismert személytől}}", + "filtered_notifications_banner.title": "Szűrt értesítések", "firehose.all": "Összes", "firehose.local": "Ez a kiszolgáló", "firehose.remote": "Egyéb kiszolgálók", @@ -314,7 +317,6 @@ "hashtag.follow": "Hashtag követése", "hashtag.unfollow": "Hashtag követésének megszüntetése", "hashtags.and_other": "…és {count, plural, other {# további}}", - "home.column_settings.basic": "Általános", "home.column_settings.show_reblogs": "Megtolások megjelenítése", "home.column_settings.show_replies": "Válaszok megjelenítése", "home.hide_announcements": "Közlemények elrejtése", @@ -440,15 +442,16 @@ "notification.reblog": "{name} megtolta a bejegyzésedet", "notification.status": "{name} bejegyzést tett közzé", "notification.update": "{name} szerkesztett egy bejegyzést", + "notification_requests.accept": "Elfogadás", + "notification_requests.dismiss": "Elvetés", + "notification_requests.notifications_from": "{name} értesítései", + "notification_requests.title": "Szűrt értesítések", "notifications.clear": "Értesítések törlése", "notifications.clear_confirmation": "Biztos, hogy véglegesen törölni akarod az összes értesítésed?", "notifications.column_settings.admin.report": "Új jelentések:", "notifications.column_settings.admin.sign_up": "Új regisztrálók:", "notifications.column_settings.alert": "Asztali értesítések", "notifications.column_settings.favourite": "Kedvencek:", - "notifications.column_settings.filter_bar.advanced": "Minden kategória megjelenítése", - "notifications.column_settings.filter_bar.category": "Gyorsszűrő sáv", - "notifications.column_settings.filter_bar.show_bar": "Szűrősáv megjelenítése", "notifications.column_settings.follow": "Új követők:", "notifications.column_settings.follow_request": "Új követési kérelmek:", "notifications.column_settings.mention": "Megemlítések:", @@ -474,6 +477,15 @@ "notifications.permission_denied": "Az asztali értesítések nem érhetők el a korábban elutasított böngészőengedély-kérelem miatt", "notifications.permission_denied_alert": "Az asztali értesítések nem engedélyezhetők a korábban elutasított böngésző engedély miatt", "notifications.permission_required": "Az asztali értesítések nem érhetőek el, mivel a szükséges engedély nem lett megadva.", + "notifications.policy.filter_new_accounts.hint": "Az elmúlt {days, plural, one {napban} other {# napban}} létrehozva", + "notifications.policy.filter_new_accounts_title": "Új fiókok", + "notifications.policy.filter_not_followers_hint": "Beleértve azokat, akik kevesebb mint {days, plural, one {egy napja} other {# napja}} követnek", + "notifications.policy.filter_not_followers_title": "Olyan emberek, akik nem követnek", + "notifications.policy.filter_not_following_hint": "Amíg kézileg jóvá nem hagyod őket", + "notifications.policy.filter_not_following_title": "Nem követett emberek", + "notifications.policy.filter_private_mentions_hint": "Kiszűrve, hacsak nem a saját említésedre válaszol, vagy ha nem követed a feladót", + "notifications.policy.filter_private_mentions_title": "Kéretlen személyes említések", + "notifications.policy.title": "Feladó értesítéseinek kiszűrése…", "notifications_permission_banner.enable": "Asztali értesítések engedélyezése", "notifications_permission_banner.how_to_control": "Ahhoz, hogy értesítéseket kapj akkor, amikor a Mastodon nincs megnyitva, engedélyezd az asztali értesítéseket. Pontosan be tudod állítani, hogy milyen interakciókról értesülj a fenti {icon} gombon keresztül, ha egyszer már engedélyezted őket.", "notifications_permission_banner.title": "Soha ne mulassz el semmit", diff --git a/app/javascript/mastodon/locales/hy.json b/app/javascript/mastodon/locales/hy.json index 6ddcfcdb21..67a7aa49ff 100644 --- a/app/javascript/mastodon/locales/hy.json +++ b/app/javascript/mastodon/locales/hy.json @@ -235,7 +235,6 @@ "hashtag.column_settings.tag_toggle": "Ներառել լրացուցիչ պիտակները այս սիւնակում ", "hashtag.follow": "Հետեւել պիտակին", "hashtag.unfollow": "Չհետեւել պիտակին", - "home.column_settings.basic": "Հիմնական", "home.column_settings.show_reblogs": "Ցուցադրել տարածածները", "home.column_settings.show_replies": "Ցուցադրել պատասխանները", "home.hide_announcements": "Թաքցնել յայտարարութիւնները", @@ -345,9 +344,6 @@ "notifications.column_settings.admin.sign_up": "Նոր գրանցումներ՝", "notifications.column_settings.alert": "Աշխատատիրոյթի ծանուցումներ", "notifications.column_settings.favourite": "Հաւանածներ՝", - "notifications.column_settings.filter_bar.advanced": "Ցուցադրել բոլոր կատեգորիաները", - "notifications.column_settings.filter_bar.category": "Արագ զտման վահանակ", - "notifications.column_settings.filter_bar.show_bar": "Ցոյց տալ զտման պանելը", "notifications.column_settings.follow": "Նոր հետեւողներ՝", "notifications.column_settings.follow_request": "Նոր հետեւելու հայցեր:", "notifications.column_settings.mention": "Նշումներ՝", diff --git a/app/javascript/mastodon/locales/ia.json b/app/javascript/mastodon/locales/ia.json index 31c9ef7394..a935bf1112 100644 --- a/app/javascript/mastodon/locales/ia.json +++ b/app/javascript/mastodon/locales/ia.json @@ -297,7 +297,6 @@ "notifications.clear": "Rader notificationes", "notifications.column_settings.alert": "Notificationes de scriptorio", "notifications.column_settings.favourite": "Favoritos:", - "notifications.column_settings.filter_bar.advanced": "Monstrar tote le categorias", "notifications.column_settings.follow": "Nove sequitores:", "notifications.column_settings.mention": "Mentiones:", "notifications.column_settings.poll": "Resultatos del inquesta:", diff --git a/app/javascript/mastodon/locales/id.json b/app/javascript/mastodon/locales/id.json index 88e99a7086..9b841a08bb 100644 --- a/app/javascript/mastodon/locales/id.json +++ b/app/javascript/mastodon/locales/id.json @@ -270,7 +270,6 @@ "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "hashtag.follow": "Ikuti tagar", "hashtag.unfollow": "Batalkan pengikutan tagar", - "home.column_settings.basic": "Dasar", "home.column_settings.show_reblogs": "Tampilkan boost", "home.column_settings.show_replies": "Tampilkan balasan", "home.hide_announcements": "Sembunyikan pengumuman", @@ -381,9 +380,6 @@ "notifications.column_settings.admin.report": "Laporan baru:", "notifications.column_settings.admin.sign_up": "Pendaftaran baru:", "notifications.column_settings.alert": "Notifikasi desktop", - "notifications.column_settings.filter_bar.advanced": "Tampilkan semua kategori", - "notifications.column_settings.filter_bar.category": "Bilah penyaring cepat", - "notifications.column_settings.filter_bar.show_bar": "Tampilkan bilah filter", "notifications.column_settings.follow": "Pengikut baru:", "notifications.column_settings.follow_request": "Permintaan mengikuti baru:", "notifications.column_settings.mention": "Balasan:", diff --git a/app/javascript/mastodon/locales/ie.json b/app/javascript/mastodon/locales/ie.json index 7bd938c1bf..1f60b42400 100644 --- a/app/javascript/mastodon/locales/ie.json +++ b/app/javascript/mastodon/locales/ie.json @@ -314,7 +314,6 @@ "hashtag.follow": "Sequer hashtag", "hashtag.unfollow": "Dessequer hashtag", "hashtags.and_other": "…e {count, plural, other {# in plu}}", - "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Monstrar boosts", "home.column_settings.show_replies": "Monstrar responses", "home.hide_announcements": "Celar proclamationes", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Nov registrationes:", "notifications.column_settings.alert": "Notificationes sur li computator", "notifications.column_settings.favourite": "Favorites:", - "notifications.column_settings.filter_bar.advanced": "Monstrar omni categories", - "notifications.column_settings.filter_bar.category": "Rapid filtre-barre", - "notifications.column_settings.filter_bar.show_bar": "Monstrar filtre-barre", "notifications.column_settings.follow": "Nov sequitores:", "notifications.column_settings.follow_request": "Nov petitiones de sequer:", "notifications.column_settings.mention": "Mentiones:", diff --git a/app/javascript/mastodon/locales/io.json b/app/javascript/mastodon/locales/io.json index c468f689ab..235b6b92af 100644 --- a/app/javascript/mastodon/locales/io.json +++ b/app/javascript/mastodon/locales/io.json @@ -292,7 +292,6 @@ "hashtag.follow": "Sequez hashtago", "hashtag.unfollow": "Desequez hashtago", "hashtags.and_other": "…e {count, plural, one {# plusa}other {# plusa}}", - "home.column_settings.basic": "Simpla", "home.column_settings.show_reblogs": "Montrar repeti", "home.column_settings.show_replies": "Montrar respondi", "home.hide_announcements": "Celez anunci", @@ -424,9 +423,6 @@ "notifications.column_settings.admin.sign_up": "Nova registranti:", "notifications.column_settings.alert": "Desktopavizi", "notifications.column_settings.favourite": "Favoriziti:", - "notifications.column_settings.filter_bar.advanced": "Montrez omna kategorii", - "notifications.column_settings.filter_bar.category": "Rapidfiltrobaro", - "notifications.column_settings.filter_bar.show_bar": "Montrez filtrobaro", "notifications.column_settings.follow": "Nova sequanti:", "notifications.column_settings.follow_request": "Nova sequodemandi:", "notifications.column_settings.mention": "Mencioni:", diff --git a/app/javascript/mastodon/locales/is.json b/app/javascript/mastodon/locales/is.json index 1f42180159..2310325b7c 100644 --- a/app/javascript/mastodon/locales/is.json +++ b/app/javascript/mastodon/locales/is.json @@ -241,6 +241,7 @@ "empty_column.list": "Það er ennþá ekki neitt á þessum lista. Þegar meðlimir á listanum senda inn nýjar færslur, munu þær birtast hér.", "empty_column.lists": "Þú ert ennþá ekki með neina lista. Þegar þú býrð til einhvern lista, munu hann birtast hér.", "empty_column.mutes": "Þú hefur ekki þaggað niður í neinum notendum ennþá.", + "empty_column.notification_requests": "Allt hreint! Það er ekkert hér. Þegar þú færð nýjar tilkynningar, munu þær birtast hér í samræmi við stillingarnar þínar.", "empty_column.notifications": "Þú ert ekki ennþá með neinar tilkynningar. Vertu í samskiptum við aðra til að umræður fari af stað.", "empty_column.public": "Það er ekkert hér! Skrifaðu eitthvað opinberlega, eða fylgstu með notendum á öðrum netþjónum til að fylla upp í þetta", "error.unexpected_crash.explanation": "Vegna villu í kóðanum okkar eða samhæfnivandamála í vafra er ekki hægt að birta þessa síðu svo vel sé.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Notaðu fyrirliggjandi flokk eða útbúðu nýjan", "filter_modal.select_filter.title": "Sía þessa færslu", "filter_modal.title.status": "Sía færslu", + "filtered_notifications_banner.pending_requests": "Tilkynningar frá {count, plural, =0 {engum} one {einum aðila} other {# aðilum}} sem þú gætir þekkt", + "filtered_notifications_banner.title": "Síaðar tilkynningar", "firehose.all": "Allt", "firehose.local": "þessum netþjóni", "firehose.remote": "öðrum netþjónum", @@ -314,7 +317,6 @@ "hashtag.follow": "Fylgjast með myllumerki", "hashtag.unfollow": "Hætta að fylgjast með myllumerki", "hashtags.and_other": "…og {count, plural, other {# til viðbótar}}", - "home.column_settings.basic": "Einfalt", "home.column_settings.show_reblogs": "Sýna endurbirtingar", "home.column_settings.show_replies": "Birta svör", "home.hide_announcements": "Fela auglýsingar", @@ -440,15 +442,16 @@ "notification.reblog": "{name} endurbirti færsluna þína", "notification.status": "{name} sendi inn rétt í þessu", "notification.update": "{name} breytti færslu", + "notification_requests.accept": "Samþykkja", + "notification_requests.dismiss": "Afgreiða", + "notification_requests.notifications_from": "Tilkynningar frá {name}", + "notification_requests.title": "Síaðar tilkynningar", "notifications.clear": "Hreinsa tilkynningar", "notifications.clear_confirmation": "Ertu viss um að þú viljir endanlega eyða öllum tilkynningunum þínum?", "notifications.column_settings.admin.report": "Nýjar kærur:", "notifications.column_settings.admin.sign_up": "Nýjar skráningar:", "notifications.column_settings.alert": "Tilkynningar á skjáborði", "notifications.column_settings.favourite": "Eftirlæti:", - "notifications.column_settings.filter_bar.advanced": "Birta alla flokka", - "notifications.column_settings.filter_bar.category": "Skyndisíustika", - "notifications.column_settings.filter_bar.show_bar": "Birta síustikuna", "notifications.column_settings.follow": "Nýir fylgjendur:", "notifications.column_settings.follow_request": "Nýjar beiðnir um að fylgjast með:", "notifications.column_settings.mention": "Tilvísanir:", @@ -474,6 +477,15 @@ "notifications.permission_denied": "Tilkynningar á skjáborði eru ekki aðgengilegar megna áður hafnaðra beiðna fyrir vafra", "notifications.permission_denied_alert": "Ekki var hægt að virkja tilkynningar á skjáborði, þar sem heimildum fyrir vafra var áður hafnað", "notifications.permission_required": "Tilkynningar á skjáborði eru ekki aðgengilegar þar sem nauðsynlegar heimildir hafa ekki verið veittar.", + "notifications.policy.filter_new_accounts.hint": "Útbúið {days, plural, one {síðasta daginn} other {síðustu # daga}}", + "notifications.policy.filter_new_accounts_title": "Nýir notendur", + "notifications.policy.filter_not_followers_hint": "Þar með talið fólk sem hefur fylgst með þér í minna en {days, plural, one {einn dag} other {# daga}}", + "notifications.policy.filter_not_followers_title": "Fólk sem fylgist ekki með þér", + "notifications.policy.filter_not_following_hint": "Þar til þú samþykkir viðkomandi handvirkt", + "notifications.policy.filter_not_following_title": "Fólk sem þú fylgist ekki með", + "notifications.policy.filter_private_mentions_hint": "Síað nema það sé í svari við einhverju þar sem þú minntist á viðkomandi eða ef þú fylgist með sendandanum", + "notifications.policy.filter_private_mentions_title": "Óumbeðið einkaspjall", + "notifications.policy.title": "Sía út tilkynningar frá…", "notifications_permission_banner.enable": "Virkja tilkynningar á skjáborði", "notifications_permission_banner.how_to_control": "Til að taka á móti tilkynningum þegar Mastodon er ekki opið, skaltu virkja tilkynningar á skjáborði. Þegar þær eru orðnar virkar geturðu stýrt nákvæmlega hverskonar atvik framleiða tilkynningar með því að nota {icon}-hnappinn hér fyrir ofan.", "notifications_permission_banner.title": "Aldrei missa af neinu", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 9e68216a33..303abd4982 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -241,6 +241,7 @@ "empty_column.list": "Non c'è ancora nulla in questa lista. Quando i membri di questa lista pubblicheranno dei nuovi post, appariranno qui.", "empty_column.lists": "Non hai ancora alcuna lista. Quando ne creerai una, apparirà qui.", "empty_column.mutes": "Non hai ancora silenziato alcun utente.", + "empty_column.notification_requests": "Tutto chiaro! Non c'è niente qui. Quando ricevi nuove notifiche, verranno visualizzate qui in base alle tue impostazioni.", "empty_column.notifications": "Non hai ancora nessuna notifica. Quando altre persone interagiranno con te, le vedrai qui.", "empty_column.public": "Non c'è nulla qui! Scrivi qualcosa pubblicamente o segui manualmente gli utenti dagli altri server per riempire questo spazio", "error.unexpected_crash.explanation": "A causa di un bug nel nostro codice o di un problema di compatibilità del browser, non è stato possibile visualizzare correttamente questa pagina.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Usa una categoria esistente o creane una nuova", "filter_modal.select_filter.title": "Filtra questo post", "filter_modal.title.status": "Filtra un post", + "filtered_notifications_banner.pending_requests": "Notifiche da {count, plural, =0 {nessuna persona} one {una persona} other {# persone}} che potresti conoscere", + "filtered_notifications_banner.title": "Notifiche filtrate", "firehose.all": "Tutto", "firehose.local": "Questo server", "firehose.remote": "Altri server", @@ -314,7 +317,6 @@ "hashtag.follow": "Segui l'hashtag", "hashtag.unfollow": "Smetti di seguire l'hashtag", "hashtags.and_other": "…e {count, plural, other {# in più}}", - "home.column_settings.basic": "Base", "home.column_settings.show_reblogs": "Mostra reblog", "home.column_settings.show_replies": "Mostra risposte", "home.hide_announcements": "Nascondi annunci", @@ -440,15 +442,16 @@ "notification.reblog": "{name} ha rebloggato il tuo post", "notification.status": "{name} ha appena pubblicato un post", "notification.update": "{name} ha modificato un post", + "notification_requests.accept": "Accetta", + "notification_requests.dismiss": "Ignora", + "notification_requests.notifications_from": "Notifiche da {name}", + "notification_requests.title": "Notifiche filtrate", "notifications.clear": "Cancella le notifiche", "notifications.clear_confirmation": "Sei sicuro di voler cancellare permanentemente tutte le tue notifiche?", "notifications.column_settings.admin.report": "Nuove segnalazioni:", "notifications.column_settings.admin.sign_up": "Nuove iscrizioni:", "notifications.column_settings.alert": "Notifiche desktop", "notifications.column_settings.favourite": "Preferiti:", - "notifications.column_settings.filter_bar.advanced": "Mostra tutte le categorie", - "notifications.column_settings.filter_bar.category": "Barra rapida del filtro", - "notifications.column_settings.filter_bar.show_bar": "Mostra la barra del filtro", "notifications.column_settings.follow": "Nuovi seguaci:", "notifications.column_settings.follow_request": "Nuove richieste di seguirti:", "notifications.column_settings.mention": "Menzioni:", @@ -474,6 +477,15 @@ "notifications.permission_denied": "Notifiche desktop non disponibili a causa della precedentemente negata richiesta di autorizzazioni del browser", "notifications.permission_denied_alert": "Impossibile abilitare le notifiche desktop, poiché l'autorizzazione del browser è stata precedentemente negata", "notifications.permission_required": "Notifiche destkop non disponibili poiché l'autorizzazione richiesta non è stata concessa.", + "notifications.policy.filter_new_accounts.hint": "Creato {days, plural, one {un giorno} other {# giorni}} fa", + "notifications.policy.filter_new_accounts_title": "Nuovi account", + "notifications.policy.filter_not_followers_hint": "Incluse le persone che ti seguono da meno di {days, plural, one {un giorno} other {# giorni}}", + "notifications.policy.filter_not_followers_title": "Persone che non ti seguono", + "notifications.policy.filter_not_following_hint": "Fino a quando non le approvi manualmente", + "notifications.policy.filter_not_following_title": "Persone che non segui", + "notifications.policy.filter_private_mentions_hint": "Filtrate, a meno che non sia in risposta alla tua menzione o se segui il mittente", + "notifications.policy.filter_private_mentions_title": "Menzioni private indesiderate", + "notifications.policy.title": "Filtra le notifiche da…", "notifications_permission_banner.enable": "Abilita le notifiche desktop", "notifications_permission_banner.how_to_control": "Per ricevere le notifiche quando Mastodon non è aperto, abilita le notifiche desktop. Puoi controllare precisamente quali tipi di interazioni generano le notifiche destkop, tramite il pulsante {icon} sopra, una volta abilitate.", "notifications_permission_banner.title": "Non perderti mai nulla", diff --git a/app/javascript/mastodon/locales/ja.json b/app/javascript/mastodon/locales/ja.json index 27ed9816a7..872293b230 100644 --- a/app/javascript/mastodon/locales/ja.json +++ b/app/javascript/mastodon/locales/ja.json @@ -314,7 +314,6 @@ "hashtag.follow": "ハッシュタグをフォローする", "hashtag.unfollow": "ハッシュタグのフォローを解除", "hashtags.and_other": "ほか{count, plural, other {#個}}", - "home.column_settings.basic": "基本設定", "home.column_settings.show_reblogs": "ブースト表示", "home.column_settings.show_replies": "返信表示", "home.hide_announcements": "お知らせを隠す", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "新規登録:", "notifications.column_settings.alert": "デスクトップ通知", "notifications.column_settings.favourite": "お気に入り:", - "notifications.column_settings.filter_bar.advanced": "すべてのカテゴリを表示", - "notifications.column_settings.filter_bar.category": "クイックフィルターバー:", - "notifications.column_settings.filter_bar.show_bar": "フィルターバーを表示", "notifications.column_settings.follow": "新しいフォロワー:", "notifications.column_settings.follow_request": "新しいフォローリクエスト:", "notifications.column_settings.mention": "返信:", diff --git a/app/javascript/mastodon/locales/ka.json b/app/javascript/mastodon/locales/ka.json index 8628cb38a2..964a764a93 100644 --- a/app/javascript/mastodon/locales/ka.json +++ b/app/javascript/mastodon/locales/ka.json @@ -114,7 +114,6 @@ "follow_request.reject": "უარყოფა", "getting_started.heading": "დაწყება", "hashtag.column_settings.tag_toggle": "Include additional tags in this column", - "home.column_settings.basic": "ძირითადი", "home.column_settings.show_reblogs": "ბუსტების ჩვენება", "home.column_settings.show_replies": "პასუხების ჩვენება", "keyboard_shortcuts.back": "უკან გადასასვლელად", diff --git a/app/javascript/mastodon/locales/kab.json b/app/javascript/mastodon/locales/kab.json index 94f620491f..4ffae68bd0 100644 --- a/app/javascript/mastodon/locales/kab.json +++ b/app/javascript/mastodon/locales/kab.json @@ -242,7 +242,6 @@ "hashtag.counter_by_uses_today": "{count, plural, one {{counter} n tsuffeɣt} other {{counter} n tsuffaɣ}} assa", "hashtag.follow": "Ḍfeṛ ahacṭag", "hashtags.and_other": "…d {count, plural, one {}other {# nniḍen}}", - "home.column_settings.basic": "Igejdanen", "home.column_settings.show_reblogs": "Ssken-d beṭṭu", "home.column_settings.show_replies": "Ssken-d tiririyin", "home.hide_announcements": "Ffer ulɣuyen", @@ -355,8 +354,6 @@ "notifications.clear_confirmation": "Tebɣiḍ s tidet ad tekkseḍ akk tilɣa-inek·em i lebda?", "notifications.column_settings.alert": "Tilɣa n tnarit", "notifications.column_settings.favourite": "Imenyafen:", - "notifications.column_settings.filter_bar.advanced": "Ssken-d meṛṛa tiggayin", - "notifications.column_settings.filter_bar.category": "Iri n usizdeg uzrib", "notifications.column_settings.follow": "Imeḍfaṛen imaynuten:", "notifications.column_settings.follow_request": "Isuturen imaynuten n teḍfeṛt:", "notifications.column_settings.mention": "Abdar:", diff --git a/app/javascript/mastodon/locales/kk.json b/app/javascript/mastodon/locales/kk.json index 1f6cc78a57..f71c10f916 100644 --- a/app/javascript/mastodon/locales/kk.json +++ b/app/javascript/mastodon/locales/kk.json @@ -181,7 +181,6 @@ "hashtag.column_settings.tag_mode.any": "Осылардың біреуін", "hashtag.column_settings.tag_mode.none": "Бұлардың ешқайсысын", "hashtag.column_settings.tag_toggle": "Осы бағанға қосымша тегтерді қосыңыз", - "home.column_settings.basic": "Негізгі", "home.column_settings.show_reblogs": "Бөлісулерді көрсету", "home.column_settings.show_replies": "Жауаптарды көрсету", "home.hide_announcements": "Анонстарды жасыр", @@ -263,8 +262,6 @@ "notifications.clear": "Ескертпелерді тазарт", "notifications.clear_confirmation": "Шынымен барлық ескертпелерді өшіресіз бе?", "notifications.column_settings.alert": "Үстел ескертпелері", - "notifications.column_settings.filter_bar.advanced": "Барлық категорияны көрсет", - "notifications.column_settings.filter_bar.category": "Жедел сүзгі", "notifications.column_settings.follow": "Жаңа оқырмандар:", "notifications.column_settings.follow_request": "Жазылуға жаңа сұранымдар:", "notifications.column_settings.mention": "Аталымдар:", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index d9192e5c61..7dd7636089 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -271,10 +271,12 @@ "filter_modal.select_filter.subtitle": "기존의 카테고리를 사용하거나 새로 하나를 만듧니다", "filter_modal.select_filter.title": "이 게시물을 필터", "filter_modal.title.status": "게시물 필터", + "filtered_notifications_banner.pending_requests": "알 수도 있는 {count, plural, =0 {0명} one {한 명} other {# 명}}의 사람들로부터의 알림", + "filtered_notifications_banner.title": "걸러진 알림", "firehose.all": "모두", "firehose.local": "이 서버", "firehose.remote": "다른 서버", - "follow_request.authorize": "허가", + "follow_request.authorize": "승인", "follow_request.reject": "거부", "follow_requests.unlocked_explanation": "귀하의 계정이 잠긴 계정이 아닐지라도, {domain} 스태프는 이 계정들의 팔로우 요청을 수동으로 처리해 주시면 좋겠다고 생각했습니다.", "follow_suggestions.curated_suggestion": "스태프의 추천", @@ -314,7 +316,6 @@ "hashtag.follow": "팔로우", "hashtag.unfollow": "팔로우 해제", "hashtags.and_other": "…그리고 {count, plural,other {#개 더}}", - "home.column_settings.basic": "기본", "home.column_settings.show_reblogs": "부스트 표시", "home.column_settings.show_replies": "답글 표시", "home.hide_announcements": "공지사항 숨기기", @@ -440,15 +441,16 @@ "notification.reblog": "{name} 님이 부스트했습니다", "notification.status": "{name} 님이 방금 게시물을 올렸습니다", "notification.update": "{name} 님이 게시물을 수정했습니다", + "notification_requests.accept": "수락", + "notification_requests.dismiss": "지우기", + "notification_requests.notifications_from": "{name} 님으로부터의 알림", + "notification_requests.title": "걸러진 알림", "notifications.clear": "알림 비우기", "notifications.clear_confirmation": "정말로 알림을 삭제하시겠습니까?", "notifications.column_settings.admin.report": "새 신고:", "notifications.column_settings.admin.sign_up": "새로운 가입:", "notifications.column_settings.alert": "데스크탑 알림", "notifications.column_settings.favourite": "좋아요:", - "notifications.column_settings.filter_bar.advanced": "모든 범주 표시하기", - "notifications.column_settings.filter_bar.category": "빠른 필터 막대", - "notifications.column_settings.filter_bar.show_bar": "필터 막대 보이기", "notifications.column_settings.follow": "새 팔로워:", "notifications.column_settings.follow_request": "새 팔로우 요청:", "notifications.column_settings.mention": "멘션:", @@ -474,6 +476,13 @@ "notifications.permission_denied": "권한이 거부되었기 때문에 데스크탑 알림을 활성화할 수 없음", "notifications.permission_denied_alert": "이전에 브라우저 권한이 거부되었기 때문에, 데스크탑 알림이 활성화 될 수 없습니다.", "notifications.permission_required": "필요한 권한이 승인되지 않아 데스크탑 알림을 사용할 수 없습니다.", + "notifications.policy.filter_new_accounts.hint": "{days, plural, one {하루} other {#일}} 안에 만들어진", + "notifications.policy.filter_new_accounts_title": "새 계정", + "notifications.policy.filter_not_followers_title": "나를 팔로우하지 않는 사람들", + "notifications.policy.filter_not_following_hint": "내가 수동으로 승인하기 전까지", + "notifications.policy.filter_not_following_title": "내가 팔로우하지 않는 사람들", + "notifications.policy.filter_private_mentions_title": "청하지 않은 개인적인 멘션", + "notifications.policy.title": "알림을 거를 사람들…", "notifications_permission_banner.enable": "데스크탑 알림 활성화", "notifications_permission_banner.how_to_control": "마스토돈이 열려 있지 않을 때에도 알림을 받으려면, 데스크탑 알림을 활성화 하세요. 당신은 어떤 종류의 반응이 데스크탑 알림을 발생할 지를 {icon} 버튼을 통해 세세하게 설정할 수 있습니다.", "notifications_permission_banner.title": "아무것도 놓치지 마세요", diff --git a/app/javascript/mastodon/locales/ku.json b/app/javascript/mastodon/locales/ku.json index 4a0fd671db..a106101081 100644 --- a/app/javascript/mastodon/locales/ku.json +++ b/app/javascript/mastodon/locales/ku.json @@ -258,7 +258,6 @@ "hashtag.column_settings.tag_toggle": "Ji bo vê stûnê hin pêvekan tevlî bike", "hashtag.follow": "Hashtagê bişopîne", "hashtag.unfollow": "Hashtagê neşopîne", - "home.column_settings.basic": "Bingehîn", "home.column_settings.show_reblogs": "Bilindkirinan nîşan bike", "home.column_settings.show_replies": "Bersivan nîşan bide", "home.hide_announcements": "Reklaman veşêre", @@ -370,9 +369,6 @@ "notifications.column_settings.admin.report": "Ragihandinên nû:", "notifications.column_settings.admin.sign_up": "Tomarkirinên nû:", "notifications.column_settings.alert": "Agahdariyên sermaseyê", - "notifications.column_settings.filter_bar.advanced": "Hemû beşan nîşan bide", - "notifications.column_settings.filter_bar.category": "Şivika parzûna bilêz", - "notifications.column_settings.filter_bar.show_bar": "Darika parzûnê nîşan bide", "notifications.column_settings.follow": "Şopînerên nû:", "notifications.column_settings.follow_request": "Daxwazên şopandinê nû:", "notifications.column_settings.mention": "Qalkirin:", diff --git a/app/javascript/mastodon/locales/kw.json b/app/javascript/mastodon/locales/kw.json index e42f50aeff..f9c70db53e 100644 --- a/app/javascript/mastodon/locales/kw.json +++ b/app/javascript/mastodon/locales/kw.json @@ -166,7 +166,6 @@ "hashtag.column_settings.tag_mode.any": "Pynag a'n re ma", "hashtag.column_settings.tag_mode.none": "Travyth a'n re ma", "hashtag.column_settings.tag_toggle": "Yssynsi taggys ynwedhek rag an goloven ma", - "home.column_settings.basic": "Selyek", "home.column_settings.show_reblogs": "Diskwedhes kenerthow", "home.column_settings.show_replies": "Diskwedhes gorthebow", "home.hide_announcements": "Kudha deklaryansow", @@ -257,8 +256,6 @@ "notifications.clear": "Dilea gwarnyansow", "notifications.clear_confirmation": "Owgh hwi sur a vynnes dilea agas gwarnyansow oll yn fast?", "notifications.column_settings.alert": "Gwarnyansow pennskrin", - "notifications.column_settings.filter_bar.advanced": "Displetya rummow oll", - "notifications.column_settings.filter_bar.category": "Barr sidhla skav", "notifications.column_settings.follow": "Holyoryon nowydh:", "notifications.column_settings.follow_request": "Govynnow holya nowydh:", "notifications.column_settings.mention": "Menegow:", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index 91540d58ca..de84becca3 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -271,6 +271,7 @@ "filter_modal.select_filter.subtitle": "Kulanea una kategoria egzistente o kriya mueva", "filter_modal.select_filter.title": "Filtra esta publikasyon", "filter_modal.title.status": "Filtra una publikasyon", + "filtered_notifications_banner.title": "Avizos filtrados", "firehose.all": "Todo", "firehose.local": "Este sirvidor", "firehose.remote": "Otros sirvidores", @@ -314,7 +315,6 @@ "hashtag.follow": "Sige etiketa", "hashtag.unfollow": "Desige etiketa", "hashtags.and_other": "…i {count, plural, one {}other {# mas}}", - "home.column_settings.basic": "Opsyones bazikas", "home.column_settings.show_reblogs": "Amostra repartajasyones", "home.column_settings.show_replies": "Amostra repuestas", "home.hide_announcements": "Eskonde pregones", @@ -440,15 +440,15 @@ "notification.reblog": "{name} repartajo tu publikasyon", "notification.status": "{name} publiko algo", "notification.update": "{name} edito una publikasyon", + "notification_requests.accept": "Acheta", + "notification_requests.dismiss": "Kita", + "notification_requests.title": "Avizos filtrados", "notifications.clear": "Efasa avizos", "notifications.clear_confirmation": "Estas siguro ke keres permanentemente efasar todos tus avizos?", "notifications.column_settings.admin.report": "Muveos raportos:", "notifications.column_settings.admin.sign_up": "Muevas enrejistrasyones:", "notifications.column_settings.alert": "Avizos de ensimameza", "notifications.column_settings.favourite": "Te plazen:", - "notifications.column_settings.filter_bar.advanced": "Amostra todas las kategorias", - "notifications.column_settings.filter_bar.category": "Vara de filtrado rapido", - "notifications.column_settings.filter_bar.show_bar": "Amostra vara de filtros", "notifications.column_settings.follow": "Muevos suivantes:", "notifications.column_settings.follow_request": "Muevas solisitudes de segimiento:", "notifications.column_settings.mention": "Enmentaduras:", @@ -474,6 +474,7 @@ "notifications.permission_denied": "Avizos de ensimameza no estan desponivles porke ya se tiene refuzado el permiso", "notifications.permission_denied_alert": "\"No se pueden kapasitar los avizos de ensimameza, porke ya se tiene refuzado el permiso de navigador", "notifications.permission_required": "Avizos de ensimameza no estan desponivles porke los nesesarios permisos no tienen sido risividos.", + "notifications.policy.filter_new_accounts_title": "Muevos kuentos", "notifications_permission_banner.enable": "Kapasita avizos de ensimameza", "notifications_permission_banner.how_to_control": "Para risivir avizos kuando Mastodon no esta avierto, kapasita avizos de ensimameza. Puedes kontrolar presizamente kualos tipos de enteraksiones djeneren avizos de ensimameza kon el boton {icon} arriva kuando esten kapasitadas.", "notifications_permission_banner.title": "Nunkua te piedres niente", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 8b757484ce..6963c43a3a 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -314,7 +314,6 @@ "hashtag.follow": "Sekti saitažodį", "hashtag.unfollow": "Nebesekti saitažodį", "hashtags.and_other": "…ir {count, plural, one {# daugiau} few {# daugiau} many {# daugiau}other {# daugiau}}", - "home.column_settings.basic": "Paprastas", "home.column_settings.show_reblogs": "Rodyti pakėlimus", "home.column_settings.show_replies": "Rodyti atsakymus", "home.hide_announcements": "Slėpti skelbimus", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Naujos registracijos:", "notifications.column_settings.alert": "Darbalaukio pranešimai", "notifications.column_settings.favourite": "Mėgstami:", - "notifications.column_settings.filter_bar.advanced": "Rodyti visas kategorijas", - "notifications.column_settings.filter_bar.category": "Spartaus filtro juosta", - "notifications.column_settings.filter_bar.show_bar": "Rodyti filtro juostą", "notifications.column_settings.follow": "Nauji sekėjai:", "notifications.column_settings.follow_request": "Nauji sekimo prašymai:", "notifications.column_settings.mention": "Paminėjimai:", diff --git a/app/javascript/mastodon/locales/lv.json b/app/javascript/mastodon/locales/lv.json index 8044e78923..47f10d94c1 100644 --- a/app/javascript/mastodon/locales/lv.json +++ b/app/javascript/mastodon/locales/lv.json @@ -306,7 +306,6 @@ "hashtag.follow": "Sekot tēmturim", "hashtag.unfollow": "Pārstāt sekot tēmturim", "hashtags.and_other": "..un {count, plural, other {# vairāk}}", - "home.column_settings.basic": "Pamata", "home.column_settings.show_reblogs": "Rādīt pastiprinātos ierakstus", "home.column_settings.show_replies": "Rādīt atbildes", "home.hide_announcements": "Slēpt paziņojumus", @@ -438,9 +437,6 @@ "notifications.column_settings.admin.sign_up": "Jaunas pierakstīšanās:", "notifications.column_settings.alert": "Darbvirsmas paziņojumi", "notifications.column_settings.favourite": "Izlase:", - "notifications.column_settings.filter_bar.advanced": "Rādīt visas kategorijas", - "notifications.column_settings.filter_bar.category": "Ātro filtru josla", - "notifications.column_settings.filter_bar.show_bar": "Rādīt filtru joslu", "notifications.column_settings.follow": "Jauni sekotāji:", "notifications.column_settings.follow_request": "Jauni sekošanas pieprasījumi:", "notifications.column_settings.mention": "Pieminēšanas:", diff --git a/app/javascript/mastodon/locales/mk.json b/app/javascript/mastodon/locales/mk.json index f7080842b7..cd30e29493 100644 --- a/app/javascript/mastodon/locales/mk.json +++ b/app/javascript/mastodon/locales/mk.json @@ -137,7 +137,6 @@ "hashtag.column_settings.tag_mode.any": "Било кои", "hashtag.column_settings.tag_mode.none": "Никои", "hashtag.column_settings.tag_toggle": "Стави додатни тагови за оваа колона", - "home.column_settings.basic": "Основно", "home.column_settings.show_reblogs": "Прикажи бустирања", "home.column_settings.show_replies": "Прикажи одговори", "intervals.full.days": "{number, plural, one {# ден} other {# дена}}", diff --git a/app/javascript/mastodon/locales/ml.json b/app/javascript/mastodon/locales/ml.json index 0059dd333b..6f1ec3c117 100644 --- a/app/javascript/mastodon/locales/ml.json +++ b/app/javascript/mastodon/locales/ml.json @@ -181,7 +181,6 @@ "hashtag.column_settings.tag_mode.any": "ഇവയിലേതെങ്കിലും", "hashtag.column_settings.tag_mode.none": "ഇതിലൊന്നുമല്ല", "hashtag.column_settings.tag_toggle": "ഈ എഴുത്തുപംക്തിക്ക് കൂടുതൽ ഉപനാമങ്ങൾ ചേർക്കുക", - "home.column_settings.basic": "അടിസ്ഥാനം", "home.column_settings.show_reblogs": "ബൂസ്റ്റുകൾ കാണിക്കുക", "home.column_settings.show_replies": "മറുപടികൾ കാണിക്കുക", "home.hide_announcements": "പ്രഖ്യാപനങ്ങൾ മറയ്‌ക്കുക", @@ -255,7 +254,6 @@ "notifications.clear": "അറിയിപ്പ് മായ്ക്കുക", "notifications.clear_confirmation": "നിങ്ങളുടെ എല്ലാ അറിയിപ്പുകളും ശാശ്വതമായി മായ്‌ക്കണമെന്ന് നിങ്ങൾക്ക് ഉറപ്പാണോ?", "notifications.column_settings.alert": "ഡെസ്ക്ടോപ്പ് അറിയിപ്പുകൾ", - "notifications.column_settings.filter_bar.advanced": "എല്ലാ വിഭാഗങ്ങളും പ്രദർശിപ്പിക്കുക", "notifications.column_settings.follow": "പുതിയ പിന്തുടരുന്നവർ:", "notifications.column_settings.follow_request": "പുതിയ പിന്തുടരൽ അഭ്യർത്ഥനകൾ:", "notifications.column_settings.mention": "സൂചനകൾ:", diff --git a/app/javascript/mastodon/locales/mr.json b/app/javascript/mastodon/locales/mr.json index 20231f0bbf..0cd5e7ef78 100644 --- a/app/javascript/mastodon/locales/mr.json +++ b/app/javascript/mastodon/locales/mr.json @@ -122,7 +122,6 @@ "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "hashtag.follow": "हॅशटॅग फॉलो करा", "hashtag.unfollow": "हॅशटॅग अनफॉलो करा", - "home.column_settings.basic": "मूळ", "home.column_settings.show_reblogs": "बूस्ट दाखवा", "home.column_settings.show_replies": "उत्तरे दाखवा", "home.hide_announcements": "घोषणा लपवा", diff --git a/app/javascript/mastodon/locales/ms.json b/app/javascript/mastodon/locales/ms.json index 3d6ba920c9..20bd248c3a 100644 --- a/app/javascript/mastodon/locales/ms.json +++ b/app/javascript/mastodon/locales/ms.json @@ -311,7 +311,6 @@ "hashtag.follow": "Ikuti hashtag", "hashtag.unfollow": "Nyahikut tanda pagar", "hashtags.and_other": "…dan {count, plural, other {# more}}", - "home.column_settings.basic": "Asas", "home.column_settings.show_reblogs": "Tunjukkan galakan", "home.column_settings.show_replies": "Tunjukkan balasan", "home.hide_announcements": "Sembunyikan pengumuman", @@ -443,9 +442,6 @@ "notifications.column_settings.admin.sign_up": "Pendaftaran baru:", "notifications.column_settings.alert": "Pemberitahuan atas meja", "notifications.column_settings.favourite": "Kegemaran:", - "notifications.column_settings.filter_bar.advanced": "Papar semua kategori", - "notifications.column_settings.filter_bar.category": "Bar penapis pantas", - "notifications.column_settings.filter_bar.show_bar": "Paparkan bar penapis", "notifications.column_settings.follow": "Pengikut baharu:", "notifications.column_settings.follow_request": "Permintaan ikutan baharu:", "notifications.column_settings.mention": "Sebutan:", diff --git a/app/javascript/mastodon/locales/my.json b/app/javascript/mastodon/locales/my.json index 0d5985b1ce..1b129aaa0f 100644 --- a/app/javascript/mastodon/locales/my.json +++ b/app/javascript/mastodon/locales/my.json @@ -292,7 +292,6 @@ "hashtag.follow": "Hashtag ကို စောင့်ကြည့်မယ်", "hashtag.unfollow": "Hashtag ကို မစောင့်ကြည့်ပါ", "hashtags.and_other": "{count, plural, other {# more}} နှင့်", - "home.column_settings.basic": "အခြေခံ", "home.column_settings.show_reblogs": "Boost များကို ပြပါ", "home.column_settings.show_replies": "ပြန်စာများကို ပြပါ", "home.hide_announcements": "ကြေညာချက်များကို ဖျောက်ပါ", @@ -424,9 +423,6 @@ "notifications.column_settings.admin.sign_up": "အကောင့်အသစ်များ -", "notifications.column_settings.alert": "Desktop သတိပေးချက်များ", "notifications.column_settings.favourite": "Favorites:", - "notifications.column_settings.filter_bar.advanced": "ခေါင်းစဥ်အားလုံးများကိုဖော်ပြပါ", - "notifications.column_settings.filter_bar.category": "အမြန်စစ်ထုတ်မှုဘား", - "notifications.column_settings.filter_bar.show_bar": "စစ်ထုတ်မှုဘားကို ပြပါ", "notifications.column_settings.follow": "စောင့်ကြည့်သူအသစ်များ -", "notifications.column_settings.follow_request": "စောင့်ကြည့်ရန် တောင်းဆိုမှုအသစ်များ -", "notifications.column_settings.mention": "ဖော်ပြချက်များ -", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index a8d42e5ff6..da5c4d8643 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -241,6 +241,7 @@ "empty_column.list": "Er is nog niks te zien in deze lijst. Wanneer lijstleden nieuwe berichten plaatsen, zijn deze hier te zien.", "empty_column.lists": "Je hebt nog geen lijsten. Wanneer je er een aanmaakt, zal dat hier verschijnen.", "empty_column.mutes": "Jij hebt nog geen gebruikers genegeerd.", + "empty_column.notification_requests": "Helemaal leeg! Er is hier niets. Wanneer je nieuwe meldingen ontvangt, verschijnen deze hier volgens jouw instellingen.", "empty_column.notifications": "Je hebt nog geen meldingen. Begin met iemand een gesprek.", "empty_column.public": "Er is hier helemaal niks! Plaatst een openbaar bericht of volg mensen van andere servers om het te vullen", "error.unexpected_crash.explanation": "Als gevolg van een bug in onze broncode of als gevolg van een compatibiliteitsprobleem met jouw webbrowser, kan deze pagina niet goed worden weergegeven.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Een bestaande categorie gebruiken of een nieuwe aanmaken", "filter_modal.select_filter.title": "Dit bericht filteren", "filter_modal.title.status": "Een bericht filteren", + "filtered_notifications_banner.pending_requests": "Meldingen van {count, plural, =0 {no} one {één persoon} other {# mensen}} die je misschien kent", + "filtered_notifications_banner.title": "Gefilterde meldingen", "firehose.all": "Alles", "firehose.local": "Deze server", "firehose.remote": "Andere servers", @@ -314,7 +317,6 @@ "hashtag.follow": "Hashtag volgen", "hashtag.unfollow": "Hashtag ontvolgen", "hashtags.and_other": "…en {count, plural, one {}other {# meer}}", - "home.column_settings.basic": "Algemeen", "home.column_settings.show_reblogs": "Boosts tonen", "home.column_settings.show_replies": "Reacties tonen", "home.hide_announcements": "Mededelingen verbergen", @@ -440,15 +442,16 @@ "notification.reblog": "{name} boostte jouw bericht", "notification.status": "{name} heeft zojuist een bericht geplaatst", "notification.update": "{name} heeft een bericht bewerkt", + "notification_requests.accept": "Accepteren", + "notification_requests.dismiss": "Afwijzen", + "notification_requests.notifications_from": "Meldingen van {name}", + "notification_requests.title": "Gefilterde meldingen", "notifications.clear": "Meldingen verwijderen", "notifications.clear_confirmation": "Weet je het zeker dat je al jouw meldingen wilt verwijderen?", "notifications.column_settings.admin.report": "Nieuwe rapportages:", "notifications.column_settings.admin.sign_up": "Nieuwe registraties:", "notifications.column_settings.alert": "Desktopmeldingen", "notifications.column_settings.favourite": "Favorieten:", - "notifications.column_settings.filter_bar.advanced": "Alle categorieën tonen", - "notifications.column_settings.filter_bar.category": "Snelle filterbalk", - "notifications.column_settings.filter_bar.show_bar": "Filterbalk tonen", "notifications.column_settings.follow": "Nieuwe volgers:", "notifications.column_settings.follow_request": "Nieuw volgverzoek:", "notifications.column_settings.mention": "Vermeldingen:", @@ -474,6 +477,15 @@ "notifications.permission_denied": "Desktopmeldingen zijn niet beschikbaar omdat een eerdere browsertoestemming werd geweigerd", "notifications.permission_denied_alert": "Desktopmeldingen kunnen niet worden ingeschakeld, omdat een eerdere browsertoestemming werd geweigerd", "notifications.permission_required": "Desktopmeldingen zijn niet beschikbaar omdat de benodigde toestemming niet is verleend.", + "notifications.policy.filter_new_accounts.hint": "In de afgelopen {days, plural, one {24 uur} other {# dagen}} geregistreerd", + "notifications.policy.filter_new_accounts_title": "Nieuwe accounts", + "notifications.policy.filter_not_followers_hint": "Inclusief mensen die jou korter dan {days, plural, one {24 uur} other {# dagen}} volgen", + "notifications.policy.filter_not_followers_title": "Mensen die jou niet volgen", + "notifications.policy.filter_not_following_hint": "Totdat je ze handmatig goedkeurt", + "notifications.policy.filter_not_following_title": "Mensen die jij niet volgt", + "notifications.policy.filter_private_mentions_hint": "Onzichtbaar tenzij het een antwoord is op een privébericht van jou of wanneer je de afzender volgt", + "notifications.policy.filter_private_mentions_title": "Ongevraagde privéberichten", + "notifications.policy.title": "Meldingen verbergen van…", "notifications_permission_banner.enable": "Desktopmeldingen inschakelen", "notifications_permission_banner.how_to_control": "Om meldingen te ontvangen wanneer Mastodon niet open staat. Je kunt precies bepalen welke soort interacties wel of geen desktopmeldingen geven via de bovenstaande {icon} knop.", "notifications_permission_banner.title": "Mis nooit meer iets", diff --git a/app/javascript/mastodon/locales/nn.json b/app/javascript/mastodon/locales/nn.json index 3cc537f54f..b8a0512b8c 100644 --- a/app/javascript/mastodon/locales/nn.json +++ b/app/javascript/mastodon/locales/nn.json @@ -314,7 +314,6 @@ "hashtag.follow": "Fylg emneknagg", "hashtag.unfollow": "Slutt å fylgje emneknaggen", "hashtags.and_other": "…og {count, plural, one {}other {# fleire}}", - "home.column_settings.basic": "Grunnleggjande", "home.column_settings.show_reblogs": "Vis framhevingar", "home.column_settings.show_replies": "Vis svar", "home.hide_announcements": "Skjul kunngjeringar", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Nyleg registrerte:", "notifications.column_settings.alert": "Skrivebordsvarsel", "notifications.column_settings.favourite": "Favorittar:", - "notifications.column_settings.filter_bar.advanced": "Vis alle kategoriar", - "notifications.column_settings.filter_bar.category": "Snarfilterlinje", - "notifications.column_settings.filter_bar.show_bar": "Vis filterlinja", "notifications.column_settings.follow": "Nye fylgjarar:", "notifications.column_settings.follow_request": "Ny fylgjarførespurnader:", "notifications.column_settings.mention": "Omtalar:", diff --git a/app/javascript/mastodon/locales/no.json b/app/javascript/mastodon/locales/no.json index a172fc69f4..14e33e9f18 100644 --- a/app/javascript/mastodon/locales/no.json +++ b/app/javascript/mastodon/locales/no.json @@ -304,7 +304,6 @@ "hashtag.follow": "Følg emneknagg", "hashtag.unfollow": "Slutt å følge emneknagg", "hashtags.and_other": "…og {count, plural, one{en til} other {# til}}", - "home.column_settings.basic": "Enkelt", "home.column_settings.show_reblogs": "Vis fremhevinger", "home.column_settings.show_replies": "Vis svar", "home.hide_announcements": "Skjul kunngjøring", @@ -436,9 +435,6 @@ "notifications.column_settings.admin.sign_up": "Nye registreringer:", "notifications.column_settings.alert": "Skrivebordsvarslinger", "notifications.column_settings.favourite": "Favoritter:", - "notifications.column_settings.filter_bar.advanced": "Vis alle kategorier", - "notifications.column_settings.filter_bar.category": "Hurtigfiltreringslinje", - "notifications.column_settings.filter_bar.show_bar": "Vis filterlinjen", "notifications.column_settings.follow": "Nye følgere:", "notifications.column_settings.follow_request": "Nye følgerforespørsler:", "notifications.column_settings.mention": "Nevnt:", diff --git a/app/javascript/mastodon/locales/oc.json b/app/javascript/mastodon/locales/oc.json index 5e122064fc..09276b3b32 100644 --- a/app/javascript/mastodon/locales/oc.json +++ b/app/javascript/mastodon/locales/oc.json @@ -262,7 +262,6 @@ "hashtag.follow": "Sègre l’etiqueta", "hashtag.unfollow": "Quitar de sègre l’etiqueta", "hashtags.and_other": "…e {count, plural, one {}other {# de mai}}", - "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Mostrar los partatges", "home.column_settings.show_replies": "Mostrar las responsas", "home.hide_announcements": "Rescondre las anóncias", @@ -379,9 +378,6 @@ "notifications.column_settings.admin.sign_up": "Nòus inscrits :", "notifications.column_settings.alert": "Notificacions localas", "notifications.column_settings.favourite": "Favorits :", - "notifications.column_settings.filter_bar.advanced": "Mostrar totas las categorias", - "notifications.column_settings.filter_bar.category": "Barra de recèrca rapida", - "notifications.column_settings.filter_bar.show_bar": "Afichar la barra de filtres", "notifications.column_settings.follow": "Nòus seguidors :", "notifications.column_settings.follow_request": "Novèla demanda d’abonament :", "notifications.column_settings.mention": "Mencions :", diff --git a/app/javascript/mastodon/locales/pa.json b/app/javascript/mastodon/locales/pa.json index ee47c1872d..69360184fc 100644 --- a/app/javascript/mastodon/locales/pa.json +++ b/app/javascript/mastodon/locales/pa.json @@ -153,7 +153,6 @@ "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "hashtag.follow": "ਹੈਸ਼ਟੈਗ ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ", "hashtag.unfollow": "ਹੈਸ਼ਟੈਗ ਨੂੰ ਅਣ-ਫ਼ਾਲੋ ਕਰੋ", - "home.column_settings.basic": "ਆਮ", "home.pending_critical_update.link": "ਅੱਪਡੇਟ ਵੇਖੋ", "interaction_modal.title.follow": "{name} ਨੂੰ ਫ਼ਾਲੋ ਕਰੋ", "keyboard_shortcuts.back": "ਪਿੱਛੇ ਜਾਓ", diff --git a/app/javascript/mastodon/locales/pl.json b/app/javascript/mastodon/locales/pl.json index 01b88eacdc..51f705b692 100644 --- a/app/javascript/mastodon/locales/pl.json +++ b/app/javascript/mastodon/locales/pl.json @@ -241,6 +241,7 @@ "empty_column.list": "Nie ma nic na tej liście. Kiedy członkowie listy dodadzą nowe wpisy, pojawia się one tutaj.", "empty_column.lists": "Nie masz żadnych list. Kiedy utworzysz jedną, pojawi się tutaj.", "empty_column.mutes": "Nie wyciszyłeś(-aś) jeszcze żadnego użytkownika.", + "empty_column.notification_requests": "To wszystko – kiedy otrzymasz nowe powiadomienia, pokażą się tutaj zgodnie z twoimi ustawieniami.", "empty_column.notifications": "Nie masz żadnych powiadomień. Rozpocznij interakcje z innymi użytkownikami.", "empty_column.public": "Tu nic nie ma! Napisz coś publicznie, lub dodaj ludzi z innych serwerów, aby to wyświetlić", "error.unexpected_crash.explanation": "W związku z błędem w naszym kodzie lub braku kompatybilności przeglądarki, ta strona nie może być poprawnie wyświetlona.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Użyj istniejącej kategorii lub utwórz nową", "filter_modal.select_filter.title": "Filtruj ten wpis", "filter_modal.title.status": "Filtruj wpis", + "filtered_notifications_banner.pending_requests": "Powiadomienia od {count, plural, =0 {żadnej osoby którą możesz znać} one {# osoby którą możesz znać} other {# osób które możesz znać}}", + "filtered_notifications_banner.title": "Powiadomienia filtrowane", "firehose.all": "Wszystko", "firehose.local": "Ten serwer", "firehose.remote": "Inne serwery", @@ -314,7 +317,6 @@ "hashtag.follow": "Obserwuj hasztag", "hashtag.unfollow": "Przestań obserwować hashtag", "hashtags.and_other": "…i {count, plural, other {jeszcze #}}", - "home.column_settings.basic": "Podstawowe", "home.column_settings.show_reblogs": "Pokazuj podbicia", "home.column_settings.show_replies": "Pokazuj odpowiedzi", "home.hide_announcements": "Ukryj ogłoszenia", @@ -440,15 +442,16 @@ "notification.reblog": "Twój post został podbity przez {name}", "notification.status": "{name} opublikował(a) nowy wpis", "notification.update": "{name} edytował(a) post", + "notification_requests.accept": "Akceptuj", + "notification_requests.dismiss": "Odrzuć", + "notification_requests.notifications_from": "Powiadomienia od {name}", + "notification_requests.title": "Powiadomienia filtrowane", "notifications.clear": "Wyczyść powiadomienia", "notifications.clear_confirmation": "Czy na pewno chcesz bezpowrotnie usunąć wszystkie powiadomienia?", "notifications.column_settings.admin.report": "Nowe zgłoszenia:", "notifications.column_settings.admin.sign_up": "Nowe rejestracje:", "notifications.column_settings.alert": "Powiadomienia na pulpicie", "notifications.column_settings.favourite": "Ulubione:", - "notifications.column_settings.filter_bar.advanced": "Wyświetl wszystkie kategorie", - "notifications.column_settings.filter_bar.category": "Szybkie filtrowanie", - "notifications.column_settings.filter_bar.show_bar": "Pokaż filtry", "notifications.column_settings.follow": "Nowi obserwujący:", "notifications.column_settings.follow_request": "Nowe prośby o możliwość obserwacji:", "notifications.column_settings.mention": "Wspomnienia:", @@ -474,6 +477,15 @@ "notifications.permission_denied": "Powiadomienia na pulpicie nie są dostępne, ponieważ wcześniej nie udzielono uprawnień w przeglądarce", "notifications.permission_denied_alert": "Powiadomienia na pulpicie nie mogą zostać włączone, ponieważ wcześniej odmówiono uprawnień", "notifications.permission_required": "Powiadomienia na pulpicie nie są dostępne, ponieważ nie przyznano wymaganego uprawnienia.", + "notifications.policy.filter_new_accounts.hint": "Utworzone w ciągu {days, plural, one {ostatniego dnia} other {ostatnich # dni}}", + "notifications.policy.filter_new_accounts_title": "Nowe konta", + "notifications.policy.filter_not_followers_hint": "Zawierające osoby które obserwują cię krócej niż {days, plural, one {dzień} other {# dni}}", + "notifications.policy.filter_not_followers_title": "Ludzie, którzy cię nie obserwują", + "notifications.policy.filter_not_following_hint": "Aż ich ręcznie nie zatwierdzisz", + "notifications.policy.filter_not_following_title": "Ludzie, których nie obserwujesz", + "notifications.policy.filter_private_mentions_hint": "Odfiltrowane, chyba że są odpowiedzią na twoją własną wzmiankę, lub obserwujesz wysyłającego", + "notifications.policy.filter_private_mentions_title": "Nieproszone prywatne wzmianki", + "notifications.policy.title": "Odfiltruj powiadomienia od…", "notifications_permission_banner.enable": "Włącz powiadomienia na pulpicie", "notifications_permission_banner.how_to_control": "Aby otrzymywać powiadomienia, gdy Mastodon nie jest otwarty, włącz powiadomienia pulpitu. Możesz dokładnie kontrolować, októrych działaniach będziesz powiadomienia na pulpicie za pomocą przycisku {icon} powyżej, jeżeli tylko zostaną włączone.", "notifications_permission_banner.title": "Nie przegap niczego", diff --git a/app/javascript/mastodon/locales/pt-BR.json b/app/javascript/mastodon/locales/pt-BR.json index 8911afe946..a0b66e74e7 100644 --- a/app/javascript/mastodon/locales/pt-BR.json +++ b/app/javascript/mastodon/locales/pt-BR.json @@ -308,7 +308,6 @@ "hashtag.follow": "Seguir hashtag", "hashtag.unfollow": "Parar de seguir hashtag", "hashtags.and_other": "…e {count, plural, one {}other {outros #}}", - "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar boosts", "home.column_settings.show_replies": "Mostrar respostas", "home.hide_announcements": "Ocultar comunicados", @@ -440,9 +439,6 @@ "notifications.column_settings.admin.sign_up": "Novas inscrições:", "notifications.column_settings.alert": "Notificações no computador", "notifications.column_settings.favourite": "Favoritos:", - "notifications.column_settings.filter_bar.advanced": "Mostrar todas as categorias", - "notifications.column_settings.filter_bar.category": "Barra de filtro rápido das notificações", - "notifications.column_settings.filter_bar.show_bar": "Mostrar barra de filtro", "notifications.column_settings.follow": "Seguidores:", "notifications.column_settings.follow_request": "Seguidores pendentes:", "notifications.column_settings.mention": "Menções:", diff --git a/app/javascript/mastodon/locales/pt-PT.json b/app/javascript/mastodon/locales/pt-PT.json index 26aa0f0b5f..da947f9bf4 100644 --- a/app/javascript/mastodon/locales/pt-PT.json +++ b/app/javascript/mastodon/locales/pt-PT.json @@ -241,6 +241,7 @@ "empty_column.list": "Ainda não existem publicações nesta lista. Quando membros desta lista fizerem novas publicações, elas aparecerão aqui.", "empty_column.lists": "Ainda não tem qualquer lista. Quando criar uma, ela irá aparecer aqui.", "empty_column.mutes": "Ainda não silenciaste qualquer utilizador.", + "empty_column.notification_requests": "Tudo limpo! Não há nada aqui. Quando você receber novas notificações, elas aparecerão aqui conforme as suas configurações.", "empty_column.notifications": "Não tens notificações. Interage com outros utilizadores para iniciar uma conversa.", "empty_column.public": "Não há nada aqui! Escreve algo publicamente ou segue outros utilizadores para veres aqui os conteúdos públicos", "error.unexpected_crash.explanation": "Devido a um erro no nosso código ou a uma compatilidade com o seu navegador, esta página não pôde ser apresentada correctamente.", @@ -271,6 +272,7 @@ "filter_modal.select_filter.subtitle": "Utilize uma categoria existente ou crie uma nova", "filter_modal.select_filter.title": "Filtrar esta publicação", "filter_modal.title.status": "Filtrar uma publicação", + "filtered_notifications_banner.title": "Notificações filtradas", "firehose.all": "Todas", "firehose.local": "Este servidor", "firehose.remote": "Outros servidores", @@ -314,7 +316,6 @@ "hashtag.follow": "Seguir #etiqueta", "hashtag.unfollow": "Deixar de seguir #etiqueta", "hashtags.and_other": "…e {count, plural, other {mais #}}", - "home.column_settings.basic": "Básico", "home.column_settings.show_reblogs": "Mostrar impulsos", "home.column_settings.show_replies": "Mostrar respostas", "home.hide_announcements": "Ocultar comunicações", @@ -440,15 +441,16 @@ "notification.reblog": "{name} reforçou a tua publicação", "notification.status": "{name} acabou de publicar", "notification.update": "{name} editou uma publicação", + "notification_requests.accept": "Aceitar", + "notification_requests.dismiss": "Descartar", + "notification_requests.notifications_from": "Notificações de {name}", + "notification_requests.title": "Notificações filtradas", "notifications.clear": "Limpar notificações", "notifications.clear_confirmation": "Queres mesmo limpar todas as notificações?", "notifications.column_settings.admin.report": "Novas denúncias:", "notifications.column_settings.admin.sign_up": "Novas inscrições:", "notifications.column_settings.alert": "Notificações no ambiente de trabalho", "notifications.column_settings.favourite": "Favoritos:", - "notifications.column_settings.filter_bar.advanced": "Mostrar todas as categorias", - "notifications.column_settings.filter_bar.category": "Barra de filtros rápidos", - "notifications.column_settings.filter_bar.show_bar": "Mostrar barra de filtros", "notifications.column_settings.follow": "Novos seguidores:", "notifications.column_settings.follow_request": "Novos pedidos de seguidor:", "notifications.column_settings.mention": "Menções:", @@ -474,6 +476,13 @@ "notifications.permission_denied": "Notificações no ambiente de trabalho não estão disponíveis porque a permissão, solicitada pelo navegador, foi recusada anteriormente", "notifications.permission_denied_alert": "Notificações no ambiente de trabalho não podem ser ativadas, pois a permissão do navegador foi recusada anteriormente", "notifications.permission_required": "Notificações no ambiente de trabalho não estão disponíveis porque a permissão necessária não foi concedida.", + "notifications.policy.filter_new_accounts_title": "Novas contas", + "notifications.policy.filter_not_followers_title": "Pessoas não te seguem", + "notifications.policy.filter_not_following_hint": "Até que você os aprove manualmente", + "notifications.policy.filter_not_following_title": "Pessoas que você não segue", + "notifications.policy.filter_private_mentions_hint": "Filtrado, a menos que seja em resposta à sua própria menção ou se você seguir o remetente", + "notifications.policy.filter_private_mentions_title": "Menções privadas não solicitadas", + "notifications.policy.title": "Filtrar notificações de…", "notifications_permission_banner.enable": "Ativar notificações no ambiente de trabalho", "notifications_permission_banner.how_to_control": "Para receber notificações quando o Mastodon não estiver aberto, ative as notificações no ambiente de trabalho. Depois da sua ativação, pode controlar precisamente quais tipos de interações geram notificações, através do botão {icon} acima.", "notifications_permission_banner.title": "Nunca perca nada", diff --git a/app/javascript/mastodon/locales/ro.json b/app/javascript/mastodon/locales/ro.json index b8bb779f85..f31499f845 100644 --- a/app/javascript/mastodon/locales/ro.json +++ b/app/javascript/mastodon/locales/ro.json @@ -292,7 +292,6 @@ "hashtag.column_settings.tag_toggle": "Adaugă etichete suplimentare pentru această coloană", "hashtag.follow": "Urmărește haștagul", "hashtag.unfollow": "Nu mai urmări haștagul", - "home.column_settings.basic": "De bază", "home.column_settings.show_reblogs": "Afișează distribuirile", "home.column_settings.show_replies": "Afișează răspunsurile", "home.hide_announcements": "Ascunde anunțurile", @@ -414,9 +413,6 @@ "notifications.column_settings.admin.report": "Raportări noi:", "notifications.column_settings.admin.sign_up": "Înscrieri noi:", "notifications.column_settings.alert": "Notificări pe desktop", - "notifications.column_settings.filter_bar.advanced": "Afișează toate categoriile", - "notifications.column_settings.filter_bar.category": "Bară de filtrare rapidă", - "notifications.column_settings.filter_bar.show_bar": "Arată bara de filtrare", "notifications.column_settings.follow": "Noi urmăritori:", "notifications.column_settings.follow_request": "Noi cereri de abonare:", "notifications.column_settings.mention": "Mențiuni:", diff --git a/app/javascript/mastodon/locales/ru.json b/app/javascript/mastodon/locales/ru.json index fde170db60..000d485eda 100644 --- a/app/javascript/mastodon/locales/ru.json +++ b/app/javascript/mastodon/locales/ru.json @@ -308,7 +308,6 @@ "hashtag.follow": "Подписаться на новые посты", "hashtag.unfollow": "Отписаться", "hashtags.and_other": "...и {count, plural, other {# ещё}}", - "home.column_settings.basic": "Основные", "home.column_settings.show_reblogs": "Показывать продвижения", "home.column_settings.show_replies": "Показывать ответы", "home.hide_announcements": "Скрыть объявления", @@ -440,9 +439,6 @@ "notifications.column_settings.admin.sign_up": "Новые регистрации:", "notifications.column_settings.alert": "Уведомления на рабочем столе", "notifications.column_settings.favourite": "Избранные:", - "notifications.column_settings.filter_bar.advanced": "Отображать все категории", - "notifications.column_settings.filter_bar.category": "Панель сортировки", - "notifications.column_settings.filter_bar.show_bar": "Отображать панель сортировки", "notifications.column_settings.follow": "У вас новый подписчик:", "notifications.column_settings.follow_request": "Новые запросы на подписку:", "notifications.column_settings.mention": "Вас упомянули в посте:", diff --git a/app/javascript/mastodon/locales/sa.json b/app/javascript/mastodon/locales/sa.json index 469930c3ed..36dae25c17 100644 --- a/app/javascript/mastodon/locales/sa.json +++ b/app/javascript/mastodon/locales/sa.json @@ -264,7 +264,6 @@ "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "hashtag.follow": "प्रचलितवस्तु अनुसर", "hashtag.unfollow": "प्रचलितवस्तु अनुसरणं वारय", - "home.column_settings.basic": "मूलभूतम्", "home.column_settings.show_reblogs": "बुस्त् दर्शय", "home.column_settings.show_replies": "उत्तराणि दर्शय", "home.hide_announcements": "विज्ञापनानि प्रच्छादय", @@ -376,9 +375,6 @@ "notifications.column_settings.admin.report": "नूतनावेदनानि", "notifications.column_settings.admin.sign_up": "नूतनपञ्जीकरणम्:", "notifications.column_settings.alert": "देस्क्टप्विज्ञापनानि", - "notifications.column_settings.filter_bar.advanced": "सर्वाणि वर्गाणि प्रदर्शय", - "notifications.column_settings.filter_bar.category": "द्रुतशोधकशलाका", - "notifications.column_settings.filter_bar.show_bar": "शोधकशालकां दर्शय", "notifications.column_settings.follow": "नूतनानुसारिणः:", "notifications.column_settings.follow_request": "नूतनानुसरणानुरोधाः:", "notifications.column_settings.mention": "उल्लिखितानि :", diff --git a/app/javascript/mastodon/locales/sc.json b/app/javascript/mastodon/locales/sc.json index 90b663aea7..a3d11d7dbd 100644 --- a/app/javascript/mastodon/locales/sc.json +++ b/app/javascript/mastodon/locales/sc.json @@ -200,7 +200,6 @@ "hashtag.column_settings.tag_mode.none": "Perunu de custos", "hashtag.column_settings.tag_toggle": "Include etichetas additzionales pro custa colunna", "hashtag.follow": "Sighi su hashtag", - "home.column_settings.basic": "Bàsicu", "home.column_settings.show_reblogs": "Ammustra is cumpartziduras", "home.column_settings.show_replies": "Ammustra rispostas", "home.hide_announcements": "Cua annùntzios", @@ -300,8 +299,6 @@ "notifications.clear": "Lìmpia notìficas", "notifications.clear_confirmation": "Seguru chi boles isboidare in manera permanente totu is notìficas tuas?", "notifications.column_settings.alert": "Notìficas de iscrivania", - "notifications.column_settings.filter_bar.advanced": "Ammustra totu is categorias", - "notifications.column_settings.filter_bar.category": "Barra lestra de filtros", "notifications.column_settings.follow": "Sighiduras noas:", "notifications.column_settings.follow_request": "Rechestas noas de sighidura:", "notifications.column_settings.mention": "Mèntovos:", diff --git a/app/javascript/mastodon/locales/sco.json b/app/javascript/mastodon/locales/sco.json index b7563022a9..7e9778b57c 100644 --- a/app/javascript/mastodon/locales/sco.json +++ b/app/javascript/mastodon/locales/sco.json @@ -249,7 +249,6 @@ "hashtag.column_settings.tag_toggle": "Pit in mair hashtags fir this column", "hashtag.follow": "Follae hashtag", "hashtag.unfollow": "Unfollae hashtag", - "home.column_settings.basic": "Basic", "home.column_settings.show_reblogs": "Shaw boosts", "home.column_settings.show_replies": "Shaw replies", "home.hide_announcements": "Hide annooncements", @@ -359,9 +358,6 @@ "notifications.column_settings.admin.report": "New reports:", "notifications.column_settings.admin.sign_up": "New sign-ups:", "notifications.column_settings.alert": "Desktap notes", - "notifications.column_settings.filter_bar.advanced": "Shaw aw caitegories", - "notifications.column_settings.filter_bar.category": "Quick filter baur", - "notifications.column_settings.filter_bar.show_bar": "Shaw filter baur", "notifications.column_settings.follow": "New follaers:", "notifications.column_settings.follow_request": "New follae requests:", "notifications.column_settings.mention": "Menshies:", diff --git a/app/javascript/mastodon/locales/si.json b/app/javascript/mastodon/locales/si.json index 2058d1415b..a2194b56cb 100644 --- a/app/javascript/mastodon/locales/si.json +++ b/app/javascript/mastodon/locales/si.json @@ -201,7 +201,6 @@ "hashtag.column_settings.tag_mode.all": "මේ සියල්ලම", "hashtag.column_settings.tag_mode.none": "මේ කිසිවක් නැත", "hashtag.column_settings.tag_toggle": "මෙම තීරුවේ අමතර ටැග් ඇතුළත් කරන්න", - "home.column_settings.basic": "මූලික", "home.column_settings.show_replies": "පිළිතුරු පෙන්වන්න", "home.hide_announcements": "නිවේදන සඟවන්න", "home.pending_critical_update.link": "යාවත්කාල බලන්න", @@ -285,9 +284,6 @@ "notifications.column_settings.admin.sign_up": "නව ලියාපදිංචි:", "notifications.column_settings.alert": "වැඩතල දැනුම්දීම්", "notifications.column_settings.favourite": "ප්‍රියතමයන්:", - "notifications.column_settings.filter_bar.advanced": "සියළු ප්‍රවර්ග පෙන්වන්න", - "notifications.column_settings.filter_bar.category": "ඉක්මන් පෙරහන් තීරුව", - "notifications.column_settings.filter_bar.show_bar": "පෙරහන් තීරුව පෙන්වන්න", "notifications.column_settings.follow": "නව අනුගාමිකයින්:", "notifications.column_settings.follow_request": "නව අනුගමන ඉල්ලීම්:", "notifications.column_settings.mention": "සැඳහුම්:", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index 7eee0c29c2..a9c7affab1 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -314,7 +314,6 @@ "hashtag.follow": "Sledovať hashtag", "hashtag.unfollow": "Prestať sledovať hashtag", "hashtags.and_other": "…a {count, plural, other {# ďalších}}", - "home.column_settings.basic": "Základné", "home.column_settings.show_reblogs": "Zobraziť zdieľania", "home.column_settings.show_replies": "Zobraziť odpovede", "home.hide_announcements": "Skryť oznámenia", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Nové registrácie:", "notifications.column_settings.alert": "Upozornenia na ploche", "notifications.column_settings.favourite": "Ohviezdičkované:", - "notifications.column_settings.filter_bar.advanced": "Zobraziť všetky kategórie", - "notifications.column_settings.filter_bar.category": "Rýchly filter", - "notifications.column_settings.filter_bar.show_bar": "Zobraziť filter", "notifications.column_settings.follow": "Nové sledovania od:", "notifications.column_settings.follow_request": "Nové žiadosti o sledovanie od:", "notifications.column_settings.mention": "Označenia:", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index 8396e02a68..df150fc291 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -241,6 +241,7 @@ "empty_column.list": "Na tem seznamu ni ničesar. Ko bodo člani tega seznama objavili nove statuse, se bodo pojavili tukaj.", "empty_column.lists": "Nimate seznamov. Ko ga boste ustvarili, se bo prikazal tukaj.", "empty_column.mutes": "Niste utišali še nobenega uporabnika.", + "empty_column.notification_requests": "Vse prebrano! Tu ni ničesar več. Ko prejmete nova obvestila, se bodo pojavila tu glede na vaše nastavitve.", "empty_column.notifications": "Nimate še nobenih obvestil. Povežite se z drugimi, da začnete pogovor.", "empty_column.public": "Tukaj ni ničesar! Da ga napolnite, napišite nekaj javnega ali pa ročno sledite uporabnikom iz drugih strežnikov", "error.unexpected_crash.explanation": "Zaradi hrošča v naši kodi ali težave z združljivostjo brskalnika te strani ni mogoče ustrezno prikazati.", @@ -271,6 +272,7 @@ "filter_modal.select_filter.subtitle": "Uporabite obstoječo kategorijo ali ustvarite novo", "filter_modal.select_filter.title": "Filtriraj to objavo", "filter_modal.title.status": "Filtrirajte objavo", + "filtered_notifications_banner.title": "Filtrirana obvestila", "firehose.all": "Vse", "firehose.local": "Ta strežnik", "firehose.remote": "Drugi strežniki", @@ -314,7 +316,6 @@ "hashtag.follow": "Sledi ključniku", "hashtag.unfollow": "Nehaj slediti ključniku", "hashtags.and_other": "…in še {count, plural, other {#}}", - "home.column_settings.basic": "Osnovno", "home.column_settings.show_reblogs": "Pokaži izpostavitve", "home.column_settings.show_replies": "Pokaži odgovore", "home.hide_announcements": "Skrij obvestila", @@ -440,15 +441,16 @@ "notification.reblog": "{name} je izpostavila/a vašo objavo", "notification.status": "{name} je pravkar objavil/a", "notification.update": "{name} je uredil(a) objavo", + "notification_requests.accept": "Sprejmi", + "notification_requests.dismiss": "Zavrni", + "notification_requests.notifications_from": "Obvestila od {name}", + "notification_requests.title": "Filtrirana obvestila", "notifications.clear": "Počisti obvestila", "notifications.clear_confirmation": "Ali ste prepričani, da želite trajno izbrisati vsa svoja obvestila?", "notifications.column_settings.admin.report": "Nove prijave:", "notifications.column_settings.admin.sign_up": "Novi vpisi:", "notifications.column_settings.alert": "Namizna obvestila", "notifications.column_settings.favourite": "Priljubljeni:", - "notifications.column_settings.filter_bar.advanced": "Prikaži vse kategorije", - "notifications.column_settings.filter_bar.category": "Vrstica za hitro filtriranje", - "notifications.column_settings.filter_bar.show_bar": "Pokaži vrstico s filtri", "notifications.column_settings.follow": "Novi sledilci:", "notifications.column_settings.follow_request": "Nove prošnje za sledenje:", "notifications.column_settings.mention": "Omembe:", @@ -474,6 +476,13 @@ "notifications.permission_denied": "Namizna obvestila niso na voljo zaradi poprej zavrnjene zahteve dovoljenja brskalnika.", "notifications.permission_denied_alert": "Namiznih obvestil ni mogoče omogočiti, ker je bilo dovoljenje brskalnika že prej zavrnjeno", "notifications.permission_required": "Namizna obvestila niso na voljo, ker zahtevano dovoljenje ni bilo podeljeno.", + "notifications.policy.filter_new_accounts_title": "Novi računi", + "notifications.policy.filter_not_followers_title": "Ljudje, ki vam ne sledijo", + "notifications.policy.filter_not_following_hint": "Dokler jih ročno ne odobrite", + "notifications.policy.filter_not_following_title": "Ljudje, ki jim ne sledite", + "notifications.policy.filter_private_mentions_hint": "Filtrirano, razen če je odgovor na vašo lastno omembo ali če sledite pošiljatelju", + "notifications.policy.filter_private_mentions_title": "Neželene zasebne omembe", + "notifications.policy.title": "Skrij obvestila od …", "notifications_permission_banner.enable": "Omogoči obvestila na namizju", "notifications_permission_banner.how_to_control": "Če želite prejemati obvestila, ko Mastodon ni odprt, omogočite namizna obvestila. Natančno lahko nadzirate, katere vrste interakcij naj tvorijo namizna obvestila; ko so omogočena, za to uporabite gumb {icon} zgoraj.", "notifications_permission_banner.title": "Nikoli ne zamudite ničesar", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index c388ebb865..00d517de72 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -314,7 +314,6 @@ "hashtag.follow": "Ndiqe hashtag-un", "hashtag.unfollow": "Hiqe ndjekjen e hashtag-ut", "hashtags.and_other": "…dhe {count, plural, one {}other {# më tepër}}", - "home.column_settings.basic": "Bazë", "home.column_settings.show_reblogs": "Shfaq përforcime", "home.column_settings.show_replies": "Shfaq përgjigje", "home.hide_announcements": "Fshihi lajmërimet", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Regjistrime të reja:", "notifications.column_settings.alert": "Njoftime desktopi", "notifications.column_settings.favourite": "Të parapëlqyer:", - "notifications.column_settings.filter_bar.advanced": "Shfaq krejt kategoritë", - "notifications.column_settings.filter_bar.category": "Shtyllë filtrimesh të shpejta", - "notifications.column_settings.filter_bar.show_bar": "Shfaq shtyllë filtrash", "notifications.column_settings.follow": "Ndjekës të rinj:", "notifications.column_settings.follow_request": "Kërkesa të reja për ndjekje:", "notifications.column_settings.mention": "Përmendje:", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 35bfc79f2e..4c0264465d 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -314,7 +314,6 @@ "hashtag.follow": "Zaprati heš oznaku", "hashtag.unfollow": "Otprati heš oznaku", "hashtags.and_other": "…i {count, plural, one {još #} few {još #}other {još #}}", - "home.column_settings.basic": "Osnovna", "home.column_settings.show_reblogs": "Prikaži podržavanja", "home.column_settings.show_replies": "Prikaži odgovore", "home.hide_announcements": "Sakrij najave", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Nove ragistracije:", "notifications.column_settings.alert": "Obaveštenja na radnoj površini", "notifications.column_settings.favourite": "Omiljeno:", - "notifications.column_settings.filter_bar.advanced": "Prikaži sve kategorije", - "notifications.column_settings.filter_bar.category": "Traka za brzo filtriranje", - "notifications.column_settings.filter_bar.show_bar": "Prikaži traku sa filterima", "notifications.column_settings.follow": "Novi pratioci:", "notifications.column_settings.follow_request": "Novi zahtevi za praćenje:", "notifications.column_settings.mention": "Pominjanja:", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index dc20585c92..d00e322b42 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -314,7 +314,6 @@ "hashtag.follow": "Запрати хеш ознаку", "hashtag.unfollow": "Отпрати хеш ознаку", "hashtags.and_other": "…и {count, plural, one {још #} few {још #}other {још #}}", - "home.column_settings.basic": "Основна", "home.column_settings.show_reblogs": "Прикажи подржавања", "home.column_settings.show_replies": "Прикажи одговоре", "home.hide_announcements": "Сакриј најаве", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Нове рагистрације:", "notifications.column_settings.alert": "Обавештења на радној површини", "notifications.column_settings.favourite": "Омиљено:", - "notifications.column_settings.filter_bar.advanced": "Прикажи све категорије", - "notifications.column_settings.filter_bar.category": "Трака за брзо филтрирање", - "notifications.column_settings.filter_bar.show_bar": "Прикажи траку са филтерима", "notifications.column_settings.follow": "Нови пратиоци:", "notifications.column_settings.follow_request": "Нови захтеви за праћење:", "notifications.column_settings.mention": "Помињања:", diff --git a/app/javascript/mastodon/locales/sv.json b/app/javascript/mastodon/locales/sv.json index 55503ddf50..37886cd80f 100644 --- a/app/javascript/mastodon/locales/sv.json +++ b/app/javascript/mastodon/locales/sv.json @@ -314,7 +314,6 @@ "hashtag.follow": "Följ hashtagg", "hashtag.unfollow": "Avfölj hashtagg", "hashtags.and_other": "…och {count, plural, one {}other {# mer}}", - "home.column_settings.basic": "Grundläggande", "home.column_settings.show_reblogs": "Visa boostar", "home.column_settings.show_replies": "Visa svar", "home.hide_announcements": "Dölj notiser", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Nya registreringar:", "notifications.column_settings.alert": "Skrivbordsaviseringar", "notifications.column_settings.favourite": "Favoriter:", - "notifications.column_settings.filter_bar.advanced": "Visa alla kategorier", - "notifications.column_settings.filter_bar.category": "Snabbfilter", - "notifications.column_settings.filter_bar.show_bar": "Visa filterfält", "notifications.column_settings.follow": "Nya följare:", "notifications.column_settings.follow_request": "Ny följ-förfrågan:", "notifications.column_settings.mention": "Omnämningar:", @@ -474,6 +470,9 @@ "notifications.permission_denied": "Skrivbordsaviseringar är otillgängliga på grund av tidigare nekade förfrågningar om behörighet i webbläsaren", "notifications.permission_denied_alert": "Skrivbordsaviseringar kan inte aktiveras, eftersom att webbläsarens behörighet har nekats innan", "notifications.permission_required": "Skrivbordsaviseringar är otillgängliga eftersom att rättigheten som krävs inte har godkänts.", + "notifications.policy.filter_new_accounts_title": "Nya konton", + "notifications.policy.filter_not_followers_title": "Personer som inte följer dig", + "notifications.policy.filter_not_following_title": "Personer du inte följer", "notifications_permission_banner.enable": "Aktivera skrivbordsaviseringar", "notifications_permission_banner.how_to_control": "För att ta emot aviseringar när Mastodon inte är öppet, aktivera skrivbordsaviseringar. När de är aktiverade kan du styra exakt vilka typer av interaktioner som aviseras via {icon} -knappen ovan.", "notifications_permission_banner.title": "Missa aldrig något", diff --git a/app/javascript/mastodon/locales/ta.json b/app/javascript/mastodon/locales/ta.json index 6210c3d0b1..7de7146bf6 100644 --- a/app/javascript/mastodon/locales/ta.json +++ b/app/javascript/mastodon/locales/ta.json @@ -211,7 +211,6 @@ "hashtag.column_settings.tag_mode.any": "இவற்றில் எவையேனும்", "hashtag.column_settings.tag_mode.none": "இவற்றில் ஏதுமில்லை", "hashtag.column_settings.tag_toggle": "இந்த நெடுவரிசையில் கூடுதல் சிட்டைகளைச் சேர்க்கவும்", - "home.column_settings.basic": "அடிப்படையானவை", "home.column_settings.show_reblogs": "பகிர்வுகளைக் காண்பி", "home.column_settings.show_replies": "மறுமொழிகளைக் காண்பி", "home.hide_announcements": "அறிவிப்புகளை மறை", @@ -293,8 +292,6 @@ "notifications.clear": "அறிவிப்புகளை அழிக்கவும்", "notifications.clear_confirmation": "உங்கள் எல்லா அறிவிப்புகளையும் நிரந்தரமாக அழிக்க விரும்புகிறீர்களா?", "notifications.column_settings.alert": "டெஸ்க்டாப் அறிவிப்புகள்", - "notifications.column_settings.filter_bar.advanced": "எல்லா வகைகளையும் காட்டு", - "notifications.column_settings.filter_bar.category": "விரைவு வடிகட்டி பட்டை", "notifications.column_settings.follow": "புதிய பின்பற்றுபவர்கள்:", "notifications.column_settings.follow_request": "புதிய பின்தொடர் கோரிக்கைகள்:", "notifications.column_settings.mention": "குறிப்பிடுகிறது:", diff --git a/app/javascript/mastodon/locales/te.json b/app/javascript/mastodon/locales/te.json index 24a67247c0..1202de1556 100644 --- a/app/javascript/mastodon/locales/te.json +++ b/app/javascript/mastodon/locales/te.json @@ -127,7 +127,6 @@ "hashtag.column_settings.tag_mode.any": "వీటిలో ఏవైనా", "hashtag.column_settings.tag_mode.none": "ఇవేవీ కావు", "hashtag.column_settings.tag_toggle": "ఈ నిలువు వరుసలో మరికొన్ని ట్యాగులను చేర్చండి", - "home.column_settings.basic": "ప్రాథమిక", "home.column_settings.show_reblogs": "బూస్ట్ లను చూపించు", "home.column_settings.show_replies": "ప్రత్యుత్తరాలను చూపించు", "keyboard_shortcuts.back": "వెనక్కి తిరిగి వెళ్ళడానికి", @@ -198,8 +197,6 @@ "notifications.clear": "ప్రకటనలను తుడిచివేయు", "notifications.clear_confirmation": "మీరు మీ అన్ని నోటిఫికేషన్లను శాశ్వతంగా తొలగించాలనుకుంటున్నారా?", "notifications.column_settings.alert": "డెస్క్టాప్ నోటిఫికేషన్లు", - "notifications.column_settings.filter_bar.advanced": "అన్ని విభాగాలను చూపించు", - "notifications.column_settings.filter_bar.category": "క్విక్ ఫిల్టర్ బార్", "notifications.column_settings.follow": "క్రొత్త అనుచరులు:", "notifications.column_settings.mention": "ప్రస్తావనలు:", "notifications.column_settings.poll": "ఎన్నిక ఫలితాలు:", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index 0865b18542..d92cbcda1f 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -271,6 +271,7 @@ "filter_modal.select_filter.subtitle": "ใช้หมวดหมู่ที่มีอยู่หรือสร้างหมวดหมู่ใหม่", "filter_modal.select_filter.title": "กรองโพสต์นี้", "filter_modal.title.status": "กรองโพสต์", + "filtered_notifications_banner.title": "การแจ้งเตือนที่กรองอยู่", "firehose.all": "ทั้งหมด", "firehose.local": "เซิร์ฟเวอร์นี้", "firehose.remote": "เซิร์ฟเวอร์อื่น ๆ", @@ -314,7 +315,6 @@ "hashtag.follow": "ติดตามแฮชแท็ก", "hashtag.unfollow": "เลิกติดตามแฮชแท็ก", "hashtags.and_other": "…และอีก {count, plural, other {# เพิ่มเติม}}", - "home.column_settings.basic": "พื้นฐาน", "home.column_settings.show_reblogs": "แสดงการดัน", "home.column_settings.show_replies": "แสดงการตอบกลับ", "home.hide_announcements": "ซ่อนประกาศ", @@ -440,15 +440,16 @@ "notification.reblog": "{name} ได้ดันโพสต์ของคุณ", "notification.status": "{name} เพิ่งโพสต์", "notification.update": "{name} ได้แก้ไขโพสต์", + "notification_requests.accept": "ยอมรับ", + "notification_requests.dismiss": "ปิด", + "notification_requests.notifications_from": "การแจ้งเตือนจาก {name}", + "notification_requests.title": "การแจ้งเตือนที่กรองอยู่", "notifications.clear": "ล้างการแจ้งเตือน", "notifications.clear_confirmation": "คุณแน่ใจหรือไม่ว่าต้องการล้างการแจ้งเตือนทั้งหมดของคุณอย่างถาวร?", "notifications.column_settings.admin.report": "รายงานใหม่:", "notifications.column_settings.admin.sign_up": "การลงทะเบียนใหม่:", "notifications.column_settings.alert": "การแจ้งเตือนบนเดสก์ท็อป", "notifications.column_settings.favourite": "รายการโปรด:", - "notifications.column_settings.filter_bar.advanced": "แสดงหมวดหมู่ทั้งหมด", - "notifications.column_settings.filter_bar.category": "แถบตัวกรองด่วน", - "notifications.column_settings.filter_bar.show_bar": "แสดงแถบตัวกรอง", "notifications.column_settings.follow": "ผู้ติดตามใหม่:", "notifications.column_settings.follow_request": "คำขอติดตามใหม่:", "notifications.column_settings.mention": "การกล่าวถึง:", @@ -474,6 +475,15 @@ "notifications.permission_denied": "การแจ้งเตือนบนเดสก์ท็อปไม่พร้อมใช้งานเนื่องจากมีการปฏิเสธคำขอสิทธิอนุญาตเบราว์เซอร์ก่อนหน้านี้", "notifications.permission_denied_alert": "ไม่สามารถเปิดใช้งานการแจ้งเตือนบนเดสก์ท็อป เนื่องจากมีการปฏิเสธสิทธิอนุญาตเบราว์เซอร์ก่อนหน้านี้", "notifications.permission_required": "การแจ้งเตือนบนเดสก์ท็อปไม่พร้อมใช้งานเนื่องจากไม่ได้ให้สิทธิอนุญาตที่จำเป็น", + "notifications.policy.filter_new_accounts.hint": "สร้างขึ้นภายใน {days, plural, other {# วัน}}ที่ผ่านมา", + "notifications.policy.filter_new_accounts_title": "บัญชีใหม่", + "notifications.policy.filter_not_followers_hint": "รวมถึงผู้คนที่ได้ติดตามคุณน้อยกว่า {days, plural, other {# วัน}}", + "notifications.policy.filter_not_followers_title": "ผู้คนที่ไม่ได้ติดตามคุณ", + "notifications.policy.filter_not_following_hint": "จนกว่าคุณจะอนุมัติเขาด้วยตนเอง", + "notifications.policy.filter_not_following_title": "ผู้คนที่คุณไม่ได้ติดตาม", + "notifications.policy.filter_private_mentions_hint": "กรองไว้เว้นแต่การกล่าวถึงแบบส่วนตัวอยู่ในการตอบกลับการกล่าวถึงของคุณเองหรือหากคุณติดตามผู้ส่ง", + "notifications.policy.filter_private_mentions_title": "การกล่าวถึงแบบส่วนตัวที่ไม่พึงประสงค์", + "notifications.policy.title": "กรองการแจ้งเตือนจาก…", "notifications_permission_banner.enable": "เปิดใช้งานการแจ้งเตือนบนเดสก์ท็อป", "notifications_permission_banner.how_to_control": "เพื่อรับการแจ้งเตือนเมื่อ Mastodon ไม่ได้เปิด เปิดใช้งานการแจ้งเตือนบนเดสก์ท็อป คุณสามารถควบคุมชนิดของการโต้ตอบที่สร้างการแจ้งเตือนบนเดสก์ท็อปได้อย่างแม่นยำผ่านปุ่ม {icon} ด้านบนเมื่อเปิดใช้งานการแจ้งเตือน", "notifications_permission_banner.title": "ไม่พลาดสิ่งใด", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 02c9159be5..6774ad48e1 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -314,7 +314,6 @@ "hashtag.follow": "Etiketi takip et", "hashtag.unfollow": "Etiketi takibi bırak", "hashtags.and_other": "…ve {count, plural, one {}other {# fazlası}}", - "home.column_settings.basic": "Temel", "home.column_settings.show_reblogs": "Yeniden paylaşımları göster", "home.column_settings.show_replies": "Yanıtları göster", "home.hide_announcements": "Duyuruları gizle", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Yeni kayıtlar:", "notifications.column_settings.alert": "Masaüstü bildirimleri", "notifications.column_settings.favourite": "Favorilerin:", - "notifications.column_settings.filter_bar.advanced": "Tüm kategorileri görüntüle", - "notifications.column_settings.filter_bar.category": "Hızlı süzgeç çubuğu", - "notifications.column_settings.filter_bar.show_bar": "Süzgeç çubuğunu göster", "notifications.column_settings.follow": "Yeni takipçiler:", "notifications.column_settings.follow_request": "Yeni takip istekleri:", "notifications.column_settings.mention": "Değinmeler:", diff --git a/app/javascript/mastodon/locales/tt.json b/app/javascript/mastodon/locales/tt.json index 17de9884e7..49c7e9a145 100644 --- a/app/javascript/mastodon/locales/tt.json +++ b/app/javascript/mastodon/locales/tt.json @@ -236,7 +236,6 @@ "hashtag.column_settings.tag_toggle": "Include additional tags in this column", "hashtag.follow": "Хэштегка язылу", "hashtag.unfollow": "Хэштегка язылу юк", - "home.column_settings.basic": "Төп", "home.column_settings.show_reblogs": "Табышмаклау", "home.column_settings.show_replies": "Җаваплар күрсәтү", "home.hide_announcements": "Игъланнарны яшерү", diff --git a/app/javascript/mastodon/locales/uk.json b/app/javascript/mastodon/locales/uk.json index d14654d17c..49d79d32d1 100644 --- a/app/javascript/mastodon/locales/uk.json +++ b/app/javascript/mastodon/locales/uk.json @@ -314,7 +314,6 @@ "hashtag.follow": "Стежити за хештегом", "hashtag.unfollow": "Не стежити за хештегом", "hashtags.and_other": "…і {count, plural, other {ще #}}", - "home.column_settings.basic": "Основні", "home.column_settings.show_reblogs": "Показувати поширення", "home.column_settings.show_replies": "Показувати відповіді", "home.hide_announcements": "Приховати оголошення", @@ -440,15 +439,16 @@ "notification.reblog": "{name} поширює ваш допис", "notification.status": "{name} щойно дописує", "notification.update": "{name} змінює допис", + "notification_requests.accept": "Прийняти", + "notification_requests.dismiss": "Відхилити", + "notification_requests.notifications_from": "Сповіщення від {name}", + "notification_requests.title": "Відфільтровані сповіщення", "notifications.clear": "Очистити сповіщення", "notifications.clear_confirmation": "Ви впевнені, що хочете назавжди видалити всі сповіщення?", "notifications.column_settings.admin.report": "Нові скарги:", "notifications.column_settings.admin.sign_up": "Нові реєстрації:", "notifications.column_settings.alert": "Сповіщення стільниці", "notifications.column_settings.favourite": "Уподобане:", - "notifications.column_settings.filter_bar.advanced": "Показати всі категорії", - "notifications.column_settings.filter_bar.category": "Панель швидкого фільтру", - "notifications.column_settings.filter_bar.show_bar": "Показати панель фільтра", "notifications.column_settings.follow": "Нові підписники:", "notifications.column_settings.follow_request": "Нові запити на підписку:", "notifications.column_settings.mention": "Згадки:", @@ -474,6 +474,7 @@ "notifications.permission_denied": "Сповіщення стільниці недоступні через раніше відхилений запит дозволів для браузера", "notifications.permission_denied_alert": "Сповіщення не можна ввімкнути оскільки у дозволі вже було відмовлено раніше", "notifications.permission_required": "Сповіщення на стільниці не доступні, оскільки необхідний дозвіл не надано.", + "notifications.policy.filter_new_accounts_title": "Нові облікові записи", "notifications_permission_banner.enable": "Увімкнути сповіщення стільниці", "notifications_permission_banner.how_to_control": "Щоб отримувати сповіщення, коли Mastodon не відкрито, увімкніть сповіщення стільниці. Ви можете контролювати, які типи взаємодій створюють сповіщення через кнопку {icon} вгорі після їхнього увімкнення.", "notifications_permission_banner.title": "Не проґавте нічого", diff --git a/app/javascript/mastodon/locales/ur.json b/app/javascript/mastodon/locales/ur.json index fee2cc3a98..d344f00c87 100644 --- a/app/javascript/mastodon/locales/ur.json +++ b/app/javascript/mastodon/locales/ur.json @@ -189,7 +189,6 @@ "hashtag.column_settings.tag_mode.any": "ان میں سے کوئی", "hashtag.column_settings.tag_mode.none": "ان میں سے کوئی بھی نہیں", "hashtag.column_settings.tag_toggle": "اس کالم کے لئے مزید ٹیگز شامل کریں", - "home.column_settings.basic": "بنیادی", "home.column_settings.show_reblogs": "افزائشات دکھائیں", "home.column_settings.show_replies": "جوابات دکھائیں", "intervals.full.days": "{number, plural, one {# روز} other {# روز}}", @@ -253,7 +252,6 @@ "notifications.clear": "اطلاعات ہٹائیں", "notifications.clear_confirmation": "کیا آپ واقعی اپنی تمام اطلاعات کو صاف کرنا چاہتے ہیں؟", "notifications.column_settings.alert": "ڈیسک ٹاپ اطلاعات", - "notifications.column_settings.filter_bar.advanced": "تمام زمرے دکھائیں", "notifications.column_settings.status": "New toots:", "onboarding.actions.go_to_explore": "See what's trending", "onboarding.actions.go_to_home": "Go to your home feed", diff --git a/app/javascript/mastodon/locales/uz.json b/app/javascript/mastodon/locales/uz.json index 8f231c8c77..b307d917fa 100644 --- a/app/javascript/mastodon/locales/uz.json +++ b/app/javascript/mastodon/locales/uz.json @@ -255,7 +255,6 @@ "hashtag.column_settings.tag_toggle": "Ushbu ustun uchun qo'shimcha teglarni qo'shing", "hashtag.follow": "Hashtagni kuzatish", "hashtag.unfollow": "Hashtagni kuzatishni to'xtatish", - "home.column_settings.basic": "Asos", "home.column_settings.show_reblogs": "Boostlarni ko'rish", "home.column_settings.show_replies": "Javoblarni ko'rish", "home.hide_announcements": "E'lonlarni yashirish", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index 9a4182e540..b1785ca5d0 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -314,7 +314,6 @@ "hashtag.follow": "Theo dõi hashtag", "hashtag.unfollow": "Bỏ theo dõi hashtag", "hashtags.and_other": "…và {count, plural, other {# nữa}}", - "home.column_settings.basic": "Tùy chỉnh", "home.column_settings.show_reblogs": "Hiện những lượt đăng lại", "home.column_settings.show_replies": "Hiện những tút dạng trả lời", "home.hide_announcements": "Ẩn thông báo máy chủ", @@ -446,9 +445,6 @@ "notifications.column_settings.admin.sign_up": "Người mới tham gia:", "notifications.column_settings.alert": "Báo trên máy tính", "notifications.column_settings.favourite": "Lượt thích:", - "notifications.column_settings.filter_bar.advanced": "Toàn bộ", - "notifications.column_settings.filter_bar.category": "Phân loại", - "notifications.column_settings.filter_bar.show_bar": "Hiện bộ lọc", "notifications.column_settings.follow": "Người theo dõi:", "notifications.column_settings.follow_request": "Yêu cầu theo dõi:", "notifications.column_settings.mention": "Lượt nhắc đến:", diff --git a/app/javascript/mastodon/locales/zh-CN.json b/app/javascript/mastodon/locales/zh-CN.json index 3e714987c0..6d6cd4b6c7 100644 --- a/app/javascript/mastodon/locales/zh-CN.json +++ b/app/javascript/mastodon/locales/zh-CN.json @@ -241,6 +241,7 @@ "empty_column.list": "列表中还没有任何内容。当列表成员发布新嘟文时,它们将出现在这里。", "empty_column.lists": "你还没有创建过列表。你创建的列表会在这里显示。", "empty_column.mutes": "你没有隐藏任何用户。", + "empty_column.notification_requests": "都看完了!这里没有任何未读通知。当收到新的通知时,它们将根据您的设置显示在这里。", "empty_column.notifications": "你还没有收到过任何通知,快和其他用户互动吧。", "empty_column.public": "这里什么都没有!写一些公开的嘟文,或者关注其他服务器的用户后,这里就会有嘟文出现了", "error.unexpected_crash.explanation": "此页面无法正确显示,这可能是因为我们的代码中有错误,也可能是因为浏览器兼容问题。", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "使用一个已存在类别,或创建一个新类别", "filter_modal.select_filter.title": "过滤此嘟文", "filter_modal.title.status": "过滤一条嘟文", + "filtered_notifications_banner.pending_requests": "来自你可能认识的 {count, plural, =0 {0 个人} other {# 个人}}的通知", + "filtered_notifications_banner.title": "通知(已过滤)", "firehose.all": "全部", "firehose.local": "此服务器", "firehose.remote": "其他服务器", @@ -314,7 +317,6 @@ "hashtag.follow": "关注话题标签", "hashtag.unfollow": "取消关注话题标签", "hashtags.and_other": "… 和另外 {count, plural, other {# 个话题}}", - "home.column_settings.basic": "基本设置", "home.column_settings.show_reblogs": "显示转嘟", "home.column_settings.show_replies": "显示回复", "home.hide_announcements": "隐藏公告", @@ -440,15 +442,16 @@ "notification.reblog": "{name} 转发了你的嘟文", "notification.status": "{name} 刚刚发布嘟文", "notification.update": "{name} 编辑了嘟文", + "notification_requests.accept": "接受", + "notification_requests.dismiss": "拒绝", + "notification_requests.notifications_from": "来自 {name} 的通知", + "notification_requests.title": "通知(已过滤)", "notifications.clear": "清空通知列表", "notifications.clear_confirmation": "你确定要永久清空通知列表吗?", "notifications.column_settings.admin.report": "新举报:", "notifications.column_settings.admin.sign_up": "新注册:", "notifications.column_settings.alert": "桌面通知", "notifications.column_settings.favourite": "喜欢:", - "notifications.column_settings.filter_bar.advanced": "显示所有类别", - "notifications.column_settings.filter_bar.category": "快速筛选栏", - "notifications.column_settings.filter_bar.show_bar": "显示过滤栏", "notifications.column_settings.follow": "新粉丝:", "notifications.column_settings.follow_request": "新关注请求:", "notifications.column_settings.mention": "提及:", @@ -474,6 +477,15 @@ "notifications.permission_denied": "由于权限被拒绝,无法启用桌面通知。", "notifications.permission_denied_alert": "由于在此之前浏览器权限请求就已被拒绝,所以启用桌面通知失败", "notifications.permission_required": "所需权限未被授予,所以桌面通知不可用", + "notifications.policy.filter_new_accounts.hint": "在 {days, plural, other {# 天}}内创建的账户", + "notifications.policy.filter_new_accounts_title": "新账户", + "notifications.policy.filter_not_followers_hint": "包括关注你少于 {days, plural, other {# 天}}的人", + "notifications.policy.filter_not_followers_title": "未关注你的人", + "notifications.policy.filter_not_following_hint": "直到你手动批准", + "notifications.policy.filter_not_following_title": "你没有关注的人", + "notifications.policy.filter_private_mentions_hint": "过滤通知,除非通知是在回复提及你自己的内容,或发送者是你关注的人", + "notifications.policy.filter_private_mentions_title": "不请自来的提及", + "notifications.policy.title": "通知过滤范围", "notifications_permission_banner.enable": "启用桌面通知", "notifications_permission_banner.how_to_control": "启用桌面通知以在 Mastodon 未打开时接收通知。你可以通过交互通过上面的 {icon} 按钮来精细控制可以发送桌面通知的交互类型。", "notifications_permission_banner.title": "精彩不容错过", diff --git a/app/javascript/mastodon/locales/zh-HK.json b/app/javascript/mastodon/locales/zh-HK.json index 2382e3c61c..74a5c5a2d6 100644 --- a/app/javascript/mastodon/locales/zh-HK.json +++ b/app/javascript/mastodon/locales/zh-HK.json @@ -308,7 +308,6 @@ "hashtag.follow": "追蹤主題標籤", "hashtag.unfollow": "取消追蹤主題標籤", "hashtags.and_other": "…及{count, plural, other {其他 # 個}}", - "home.column_settings.basic": "基本", "home.column_settings.show_reblogs": "顯示被轉推的文章", "home.column_settings.show_replies": "顯示回應文章", "home.hide_announcements": "隱藏公告", @@ -440,9 +439,6 @@ "notifications.column_settings.admin.sign_up": "新註冊:", "notifications.column_settings.alert": "顯示桌面通知", "notifications.column_settings.favourite": "最愛:", - "notifications.column_settings.filter_bar.advanced": "顯示所有分類", - "notifications.column_settings.filter_bar.category": "快速過濾欄", - "notifications.column_settings.filter_bar.show_bar": "顯示篩選欄", "notifications.column_settings.follow": "新追蹤者:", "notifications.column_settings.follow_request": "新的追蹤請求:", "notifications.column_settings.mention": "提及你:", diff --git a/app/javascript/mastodon/locales/zh-TW.json b/app/javascript/mastodon/locales/zh-TW.json index f52f283810..ff0bd4c8ff 100644 --- a/app/javascript/mastodon/locales/zh-TW.json +++ b/app/javascript/mastodon/locales/zh-TW.json @@ -241,6 +241,7 @@ "empty_column.list": "這份列表下什麼也沒有。當此列表的成員嘟出新的嘟文時,它們將顯示於此。", "empty_column.lists": "您還沒有新增任何列表。當您新增列表時,它將於此顯示。", "empty_column.mutes": "您尚未靜音任何使用者。", + "empty_column.notification_requests": "清空啦!已經沒有任何通知。當您收到新通知時,它們將依照您的設定於此顯示。", "empty_column.notifications": "您還沒有收到任何通知,當您與別人開始互動時,它將於此顯示。", "empty_column.public": "這裡什麼都沒有!嘗試寫些公開的嘟文,或者跟隨其他伺服器的使用者後,就會有嘟文出現了", "error.unexpected_crash.explanation": "由於發生系統故障或瀏覽器相容性問題,無法正常顯示此頁面。", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "使用既有的類別或是新增", "filter_modal.select_filter.title": "過濾此嘟文", "filter_modal.title.status": "過濾一則嘟文", + "filtered_notifications_banner.pending_requests": "來自您可能認識的 {count, plural, =0 {0 人} other {# 人}} 之通知", + "filtered_notifications_banner.title": "已過濾之通知", "firehose.all": "全部", "firehose.local": "本站", "firehose.remote": "聯邦宇宙", @@ -314,7 +317,6 @@ "hashtag.follow": "跟隨主題標籤", "hashtag.unfollow": "取消跟隨主題標籤", "hashtags.and_other": "…及其他 {count, plural, other {# 個}}", - "home.column_settings.basic": "基本設定", "home.column_settings.show_reblogs": "顯示轉嘟", "home.column_settings.show_replies": "顯示回覆", "home.hide_announcements": "隱藏公告", @@ -394,7 +396,7 @@ "lists.replies_policy.list": "列表成員", "lists.replies_policy.none": "沒有人", "lists.replies_policy.title": "顯示回覆:", - "lists.search": "搜尋您跟隨的使用者", + "lists.search": "搜尋您跟隨之使用者", "lists.subheading": "您的列表", "load_pending": "{count, plural, one {# 個新項目} other {# 個新項目}}", "loading_indicator.label": "正在載入...", @@ -440,15 +442,16 @@ "notification.reblog": "{name} 已轉嘟您的嘟文", "notification.status": "{name} 剛剛嘟文", "notification.update": "{name} 已編輯嘟文", + "notification_requests.accept": "接受", + "notification_requests.dismiss": "關閉", + "notification_requests.notifications_from": "來自 {name} 之通知", + "notification_requests.title": "已過濾之通知", "notifications.clear": "清除通知", "notifications.clear_confirmation": "您確定要永久清除您的通知嗎?", "notifications.column_settings.admin.report": "新檢舉報告:", "notifications.column_settings.admin.sign_up": "新註冊帳號:", "notifications.column_settings.alert": "桌面通知", "notifications.column_settings.favourite": "最愛:", - "notifications.column_settings.filter_bar.advanced": "顯示所有分類", - "notifications.column_settings.filter_bar.category": "快速過濾器", - "notifications.column_settings.filter_bar.show_bar": "顯示過濾器", "notifications.column_settings.follow": "新的跟隨者:", "notifications.column_settings.follow_request": "新的跟隨請求:", "notifications.column_settings.mention": "提及:", @@ -474,6 +477,15 @@ "notifications.permission_denied": "由於之前已拒絕瀏覽器請求,因此無法使用桌面通知", "notifications.permission_denied_alert": "由於之前瀏覽器權限被拒絕,無法啟用桌面通知", "notifications.permission_required": "由於尚未授予所需的權限,因此無法使用桌面通知。", + "notifications.policy.filter_new_accounts.hint": "新增於過去 {days, plural, other {# 日}}", + "notifications.policy.filter_new_accounts_title": "新帳號", + "notifications.policy.filter_not_followers_hint": "包含最近 {days, plural, other {# 日}} 內跟隨您之使用者", + "notifications.policy.filter_not_followers_title": "未跟隨您之使用者", + "notifications.policy.filter_not_following_hint": "直至您手動核准他們", + "notifications.policy.filter_not_following_title": "您未跟隨之使用者", + "notifications.policy.filter_private_mentions_hint": "過濾通知,除非嘟文包含於您的提及,或您跟隨該發嘟帳號", + "notifications.policy.filter_private_mentions_title": "不請自來的私訊", + "notifications.policy.title": "過濾通知來自...", "notifications_permission_banner.enable": "啟用桌面通知", "notifications_permission_banner.how_to_control": "啟用桌面通知以於 Mastodon 沒有開啟的時候接收通知。啟用桌面通知後,您可以透過上面的 {icon} 按鈕準確的控制哪些類型的互動會產生桌面通知。", "notifications_permission_banner.title": "不要錯過任何東西!", @@ -486,7 +498,7 @@ "onboarding.follows.lead": "您的首頁時間軸是 Mastodon 的核心體驗。若您跟隨更多人,它將會變得更活躍有趣。這些個人檔案也許是個好起點,您可以隨時取消跟隨他們!", "onboarding.follows.title": "客製化您的首頁時間軸", "onboarding.profile.discoverable": "使我的個人檔案可以被找到", - "onboarding.profile.discoverable_hint": "當您於 Mastodon 上選擇加入可發現性時,您的嘟文可能會出現於搜尋結果與趨勢中。您的個人檔案可能會被推薦給與您志趣相投的人。", + "onboarding.profile.discoverable_hint": "當您於 Mastodon 上選擇加入可發現性時,您的嘟文可能會顯示於搜尋結果與趨勢中。您的個人檔案可能會被推薦給與您志趣相投的人。", "onboarding.profile.display_name": "顯示名稱", "onboarding.profile.display_name_hint": "完整名稱或暱稱...", "onboarding.profile.lead": "您隨時可以稍候於設定中完成此操作,將有更多自訂選項可使用。", @@ -531,7 +543,7 @@ "privacy.change": "調整嘟文隱私狀態", "privacy.direct.long": "此嘟文提及之所有人", "privacy.direct.short": "指定使用者", - "privacy.private.long": "只有跟隨您的人能看到", + "privacy.private.long": "只有跟隨您之使用者能看到", "privacy.private.short": "跟隨者", "privacy.public.long": "所有人 (無論在 Mastodon 上與否)", "privacy.public.short": "公開", diff --git a/config/locales/doorkeeper.zh-TW.yml b/config/locales/doorkeeper.zh-TW.yml index 65926dfeef..f9813b1319 100644 --- a/config/locales/doorkeeper.zh-TW.yml +++ b/config/locales/doorkeeper.zh-TW.yml @@ -172,7 +172,7 @@ zh-TW: read:bookmarks: 檢視您的書籤 read:favourites: 檢視您收藏之最愛嘟文 read:filters: 檢視您的過濾條件 - read:follows: 檢視您跟隨的人 + read:follows: 檢視您跟隨之使用者 read:lists: 檢視您的列表 read:mutes: 檢視您靜音的人 read:notifications: 檢視您的通知 diff --git a/config/locales/lt.yml b/config/locales/lt.yml index 62336d89d4..52321b87bc 100644 --- a/config/locales/lt.yml +++ b/config/locales/lt.yml @@ -403,10 +403,12 @@ lt: import: Importuoti new: create: Sukurti bloką - hint: Domeno blokavimas nesustabdys vartotojų paskyrų sukūrimo duomenų sistemoje, tačiau automatiškai pritaikys atitinkamus moderavimo metodus šioms paskyroms. + hint: Domeno blokas netrukdys kurti paskyrų įrašų duomenų bazėje, bet atgaline data ir automatiškai taikys tam tikrus tų paskyrų prižiūrėjimo būdus. severity: + desc_html: "Ribojimas padarys šio domeno paskyrų įrašus nematomus visiems, kurie jų neseka. Pristabdymas iš tavo serverio pašalins visą šio domeno paskyrų turinį, mediją ir profilio duomenis. Naudok Nieko, jei nori tik atmesti medijos failus." noop: Nieko - suspend: Draudimas + silence: Riboti + suspend: Pristabdyti title: Naujos domeno blokas reject_media: Atmesti medijos failai reject_media_hint: Panaikina lokaliai saugomus medijos failus bei atsisako jų parsisiuntimo ateityje. Neliečia užblokavimu @@ -468,7 +470,7 @@ lt: assign_to_self: Paskirti man assigned: Paskirtas moderatorius comment: - none: Nėra + none: Nieko created_at: Reportuotas forwarded_replies_explanation: Šis ataskaita yra iš nuotolinio naudotojo ir susijusi su nuotoliniu turiniu. Jis buvo persiųstas tau, nes turinys, apie kurį pranešta, yra atsakymas vienam iš tavo naudotojų. mark_as_resolved: Pažymėti kaip išsprestą diff --git a/config/locales/lv.yml b/config/locales/lv.yml index d6d0f05c50..83489f7e7b 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -473,7 +473,7 @@ lv: status: Statuss suppress: Apspiest sekošanas rekomendāciju suppressed: Apspiestie - title: Sekošanas rekomendācijas + title: Sekošanas ieteikumi unsuppress: Atjaunot sekošanas rekomendāciju instances: availability: diff --git a/config/locales/simple_form.bg.yml b/config/locales/simple_form.bg.yml index 831e1a2f8c..e85e753e88 100644 --- a/config/locales/simple_form.bg.yml +++ b/config/locales/simple_form.bg.yml @@ -116,6 +116,7 @@ bg: sign_up_requires_approval: Новите регистрации ще изискват одобрението ви severity: Изберете какво да се случва със заявките от този IP rule: + hint: По избор. Дайте по-подробно за правилото text: Опишете правило или изискване за потребителите на този сървър. Опитайте се да го направите кратко и просто sessions: otp: 'Въведете двуфакторния код, породен от приложението на телефона си или използвайте един от кодовете си за възстановяване:' @@ -299,6 +300,7 @@ bg: patch: Известие за обновявания на оправени грешки trending_tag: Изискване на преглед за новонашумели rule: + hint: Допълнителни сведения text: Правило settings: indexable: Включване на страницата на профила в търсачките diff --git a/config/locales/simple_form.br.yml b/config/locales/simple_form.br.yml index 529e3224e6..196711aee9 100644 --- a/config/locales/simple_form.br.yml +++ b/config/locales/simple_form.br.yml @@ -67,6 +67,7 @@ br: notification_emails: follow: Heuliañ a ra {name} ac'hanoc'h rule: + hint: Titouroù ouzhpenn text: Reolenn tag: name: Hashtag diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 7d0f799d0c..357f482b83 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -116,6 +116,7 @@ ca: sign_up_requires_approval: Els nous registres requeriran la teva aprovació severity: Tria què passarà amb les sol·licituds des d’aquesta IP rule: + hint: Opcional. Proporciona més detalls de la regla text: Descriu una norma o requeriment pels usuaris d'aquest servidor. Intenta fer-la curta i senzilla sessions: otp: 'Introdueix el codi de dos factors generat per el teu telèfon o utilitza un dels teus codis de recuperació:' @@ -299,6 +300,7 @@ ca: patch: Notificar sobre les actualitzacions de correcció d'errors trending_tag: Nova tendència requereix revisió rule: + hint: Informació addicional text: Norma settings: indexable: Inclou la pàgina del perfil en els motors de cerca diff --git a/config/locales/simple_form.cy.yml b/config/locales/simple_form.cy.yml index 3daedfc860..21cd1ddc0a 100644 --- a/config/locales/simple_form.cy.yml +++ b/config/locales/simple_form.cy.yml @@ -116,6 +116,7 @@ cy: sign_up_requires_approval: Bydd angen eich cymeradwyaeth ar gyfer cofrestriadau newydd severity: Dewiswch beth fydd yn digwydd gyda cheisiadau o'r IP hwn rule: + hint: Dewisol. Darparwch ragor o fanylion am y rheol text: Disgrifiwch reol neu ofyniad ar gyfer defnyddwyr ar y gweinydd hwn. Ceisiwch ei gadw'n fyr ac yn syml sessions: otp: 'Mewnbynnwch y cod dau gam a gynhyrchwyd gan eich ap ffôn neu defnyddiwch un o''ch codau adfer:' @@ -299,6 +300,7 @@ cy: patch: Rhoi gwybod am ddiweddariadau trwsio byg trending_tag: Mae pwnc llosg newydd angen adolygiad rule: + hint: Gwybodaeth ychwanegol text: Rheol settings: indexable: Cynnwys tudalen proffil mewn peiriannau chwilio diff --git a/config/locales/simple_form.da.yml b/config/locales/simple_form.da.yml index fde0bcc248..6c8d995bfd 100644 --- a/config/locales/simple_form.da.yml +++ b/config/locales/simple_form.da.yml @@ -116,6 +116,7 @@ da: sign_up_requires_approval: Nye tilmeldinger kræver din godkendelse severity: Afgør, hvordan forespørgsler fra denne IP behandles rule: + hint: Valgfrit. Oplys yderligere detaljer om reglen text: Beskriv på en kort og enkel form en regel/krav for brugere på denne server sessions: otp: 'Angiv tofaktorkoden generet af din mobil-app eller brug en af genoprettelseskoderne:' @@ -299,6 +300,7 @@ da: patch: Notificér om fejlrettelsesopdateringer trending_tag: Ny tendens kræver revidering rule: + hint: Yderligere oplysninger text: Regel settings: indexable: Inkludér profilside i søgemaskiner diff --git a/config/locales/simple_form.de.yml b/config/locales/simple_form.de.yml index b8fec42d66..1d608af08b 100644 --- a/config/locales/simple_form.de.yml +++ b/config/locales/simple_form.de.yml @@ -116,6 +116,7 @@ de: sign_up_requires_approval: Neue Registrierungen müssen genehmigt werden severity: Wähle aus, was mit Anfragen von dieser IP-Adresse geschehen soll rule: + hint: "(Optional) Gib weitere Details zu dieser Regel an" text: Führe eine Regel oder Auflage für Profile auf diesem Server ein. Bleib dabei kurz und knapp sessions: otp: 'Gib den Zwei-Faktor-Code von deinem Smartphone ein oder verwende einen deiner Wiederherstellungscodes:' @@ -299,6 +300,7 @@ de: patch: Über Fehlerbehebungen informieren trending_tag: Neuer Trend erfordert eine Überprüfung rule: + hint: Zusätzliche Informationen text: Regel settings: indexable: Profilseite in Suchmaschinen einbeziehen diff --git a/config/locales/simple_form.es-AR.yml b/config/locales/simple_form.es-AR.yml index a074091313..0111624082 100644 --- a/config/locales/simple_form.es-AR.yml +++ b/config/locales/simple_form.es-AR.yml @@ -116,6 +116,7 @@ es-AR: sign_up_requires_approval: Los nuevos registros requerirán tu aprobación severity: Elegí lo que pasará con las solicitudes desde esta dirección IP rule: + hint: Opcional. Ofrecé más detalles sobre la regla text: Describí una regla o requisito para los usuarios de este servidor. Intentá hacerla corta y sencilla sessions: otp: 'Ingresá el código de autenticación de dos factores generado por la aplicación en tu dispositivo, o usá uno de tus códigos de recuperación:' @@ -299,6 +300,7 @@ es-AR: patch: Notificar sobre actualizaciones de corrección de errores trending_tag: Una nueva tendencia requiere revisión rule: + hint: Información adicional text: Regla settings: indexable: Incluir la página de perfil en los motores de búsqueda diff --git a/config/locales/simple_form.es-MX.yml b/config/locales/simple_form.es-MX.yml index d8f1cf95a0..28253d385b 100644 --- a/config/locales/simple_form.es-MX.yml +++ b/config/locales/simple_form.es-MX.yml @@ -116,6 +116,7 @@ es-MX: sign_up_requires_approval: Nuevos registros requerirán su aprobación severity: Elegir lo que pasará con las peticiones desde esta IP rule: + hint: Opcional. Proporciona más detalles sobre la regla text: Describe una norma o requisito para los usuarios de este servidor. Intenta hacerla corta y sencilla sessions: otp: 'Introduce el código de autenticación de dos factores generado por tu aplicación de teléfono o usa uno de tus códigos de recuperación:' @@ -299,6 +300,7 @@ es-MX: patch: Notificar en actualizaciones de errores trending_tag: La nueva tendencia requiere de revisión rule: + hint: Información adicional text: Norma settings: indexable: Incluir la página de perfil en los motores de búsqueda diff --git a/config/locales/simple_form.es.yml b/config/locales/simple_form.es.yml index fee260aa89..008ac16073 100644 --- a/config/locales/simple_form.es.yml +++ b/config/locales/simple_form.es.yml @@ -116,6 +116,7 @@ es: sign_up_requires_approval: Nuevos registros requerirán su aprobación severity: Elegir lo que pasará con las peticiones desde esta IP rule: + hint: Opcional. Proporciona más detalles sobre la regla text: Describe una norma o requisito para los usuarios de este servidor. Intenta hacerla corta y sencilla sessions: otp: 'Introduce el código de autenticación de dos factores generado por tu aplicación de teléfono o usa uno de tus códigos de recuperación:' @@ -299,6 +300,7 @@ es: patch: Notificar de actualizaciones de errores trending_tag: Una nueva tendencia requiere revisión rule: + hint: Información adicional text: Norma settings: indexable: Incluye la página de perfil en los buscadores diff --git a/config/locales/simple_form.eu.yml b/config/locales/simple_form.eu.yml index b417b45fa9..03ba1aea6c 100644 --- a/config/locales/simple_form.eu.yml +++ b/config/locales/simple_form.eu.yml @@ -116,6 +116,7 @@ eu: sign_up_requires_approval: Izen emate berriek zure onarpena beharko dute severity: Aukeratu zer gertatuko den IP honetatik datozen eskaerekin rule: + hint: Aukerakoa. Eman arauari buruzko xehetasun gehiago. text: Deskribatu zerbitzari honetako erabiltzaileentzako arau edo betekizun bat. Saiatu labur eta sinple idazten sessions: otp: 'Sartu zure telefonoko aplikazioak sortutako bi faktoreetako kodea, edo erabili zure berreskuratze kodeetako bat:' @@ -299,6 +300,7 @@ eu: patch: Jakinarazi akats zuzenketa eguneraketa guztiak trending_tag: Joera berriak berrikuspena behar du rule: + hint: Informazio gehigarria text: Araua settings: indexable: Gehitu profila bilaketa-motorretan diff --git a/config/locales/simple_form.fo.yml b/config/locales/simple_form.fo.yml index 003eede25b..599e79ea2f 100644 --- a/config/locales/simple_form.fo.yml +++ b/config/locales/simple_form.fo.yml @@ -116,6 +116,7 @@ fo: sign_up_requires_approval: Nýggjar tilmeldingar fara at krevja tína góðkenning severity: Vel, hvat skal henda við umbønum frá hesari IP adressuni rule: + hint: Valfrítt. Gev fleiri smálutir um regluna text: Lýs eina reglu ella eitt krav fyri brúkarar á hesum ambætaranum. Ger tað stutt og einfalt sessions: otp: 'Skriva tvey-faktor koduna frá telefon-appini ella brúka eina av tínum endurgerðskodum:' @@ -299,6 +300,7 @@ fo: patch: Gev fráboðan um feilrættingardagføringar trending_tag: Broytt rák skal kannast rule: + hint: Fleiri upplýsingar text: Regla settings: indexable: Lat vangasíðu vera tøka í leitimaskinum diff --git a/config/locales/simple_form.fy.yml b/config/locales/simple_form.fy.yml index 5dc5ab2c90..e2e40f04dd 100644 --- a/config/locales/simple_form.fy.yml +++ b/config/locales/simple_form.fy.yml @@ -116,6 +116,7 @@ fy: sign_up_requires_approval: Nije registraasjes fereaskje jo goedkarring severity: Kies wat der barre moat mei oanfragen fan dit IP-adres rule: + hint: Opsjoneel. Jou mear details oer de rigel text: Omskriuw in rigel of eask foar brûkers op dizze server. Probearje it koart en simpel te hâlden sessions: otp: 'Fier de twa-stapstagongskoade fan jo mobile telefoan ôf yn of brûk ien fan jo werstelkoaden:' @@ -299,6 +300,7 @@ fy: patch: Meldingen by bugfix-fernijingen trending_tag: Nije trend beoardieling fereasket rule: + hint: Oanfoljende ynformaasje text: Regel settings: indexable: Sykmasinen jo profylside fine litte diff --git a/config/locales/simple_form.gd.yml b/config/locales/simple_form.gd.yml index bd7e44455a..168e7168ed 100644 --- a/config/locales/simple_form.gd.yml +++ b/config/locales/simple_form.gd.yml @@ -116,6 +116,7 @@ gd: sign_up_requires_approval: Bidh cleachdaichean air an ùr-chlàradh feumach air d’ aonta severity: Tagh na thachras le iarrtasan on IP seo rule: + hint: Roghainneil. Thoir seachad barrachd fiosrachaidh mun riaghailt text: Mìnich riaghailt no riatanas do chleachdaichean an fhrithealaiche seo. Feuch an cùm thu sìmplidh goirid e sessions: otp: 'Cuir a-steach an còd dà-cheumnach a ghin aplacaid an fhòn agad no cleachd fear dhe na còdan aisig agad:' @@ -299,6 +300,7 @@ gd: patch: Thoir brathan dhomh do dh’ùrachaidhean càraidh trending_tag: Tha treand ùr ri lèirmheasadh rule: + hint: Barrachd fiosrachaidh text: Riaghailt settings: indexable: Gabh a-staigh duilleag na pròifil sna h-einnseanan-luirg diff --git a/config/locales/simple_form.gl.yml b/config/locales/simple_form.gl.yml index 719da8eefa..ffb12d31bc 100644 --- a/config/locales/simple_form.gl.yml +++ b/config/locales/simple_form.gl.yml @@ -116,6 +116,7 @@ gl: sign_up_requires_approval: Os novos rexistros requerirán a túa aprobación severity: Escolle que acontecerá coas peticións desde este IP rule: + hint: Optativo. Proporciona máis detalles acerca da regra text: Describe unha regra ou requerimento para as usuarias deste servidor. Intenta que sexa curta e simple sessions: otp: 'Escribe o código do segundo factor creado pola aplicación do teu móbil ou usa un dos códigos de recuperación:' @@ -299,6 +300,7 @@ gl: patch: Notificar as actualizacións de arranxos trending_tag: Hai que revisar unha nova tendencia rule: + hint: Información adicional text: Regra settings: indexable: Incluír páxina de perfil nos motores de busca diff --git a/config/locales/simple_form.he.yml b/config/locales/simple_form.he.yml index 3d7512c5f5..4f2611666a 100644 --- a/config/locales/simple_form.he.yml +++ b/config/locales/simple_form.he.yml @@ -116,6 +116,7 @@ he: sign_up_requires_approval: הרשמות חדשות ידרשו את אישורך severity: נא לבחור מה יקרה לבקשות מכתובת IP זו rule: + hint: לא חובה. פירוט נוסף לגבי הכלל text: נא לתאר את הכלל או הדרישה למשתמשים משרת זה. על התיאור להיות קצר ובהיר sessions: otp: 'נא להקליד קוד אימות דו-שלבי ממכשירך או להשתמש באחד מקודי אחזור הגישה שלך:' @@ -299,6 +300,7 @@ he: patch: קבלת הודעה על עדכוני תיקון שקצים trending_tag: נושאים חמים חדשים דורשים סקירה rule: + hint: מידע נוסף text: כלל settings: indexable: חשיפת דף המשתמש במנועי החיפוש diff --git a/config/locales/simple_form.hu.yml b/config/locales/simple_form.hu.yml index 573809c73a..8855494fdf 100644 --- a/config/locales/simple_form.hu.yml +++ b/config/locales/simple_form.hu.yml @@ -116,6 +116,7 @@ hu: sign_up_requires_approval: Új regisztrációk csak a jóváhagyásoddal történhetnek majd meg severity: Válaszd ki, mi történjen a kérésekkel erről az IP-ről rule: + hint: Nem kötelező. Adj meg további részleteket a szabályról. text: Írd le, mi a szabály vagy elvárás ezen a kiszolgálón a felhasználók felé. Próbálj röviden, egyszerűen fogalmazni. sessions: otp: 'Add meg a telefonodon generált kétlépcsős azonosító kódodat vagy használd az egyik tartalék bejelentkező kódot:' @@ -299,6 +300,7 @@ hu: patch: Értesítés hibajavítási frissítésekről trending_tag: Új trend felülvizsgálatra vár rule: + hint: További információk text: Szabály settings: indexable: A profiloldal szerepeltetése a keresőmotorokban diff --git a/config/locales/simple_form.is.yml b/config/locales/simple_form.is.yml index 0859e89897..cae9bbed5f 100644 --- a/config/locales/simple_form.is.yml +++ b/config/locales/simple_form.is.yml @@ -116,6 +116,7 @@ is: sign_up_requires_approval: Nýskráningar munu þurfa samþykki þitt severity: Veldu hvað munir gerast við beiðnir frá þessu IP-vistfangi rule: + hint: Valkvætt. Gefðu nánari upplýsingar um regluna text: Lýstu reglum eða kröfum sem gerðar eru til notenda á þessum netþjóni. Reyndu að hafa þetta skýrt og skorinort sessions: otp: 'Settu inn tveggja-þátta kóðann sem farsímaforritið útbjó eða notaðu einn af endurheimtukóðunum þínum:' @@ -299,6 +300,7 @@ is: patch: Láta vita við uppfærslur með lagfæringum trending_tag: Nýtt vinsælt efni krefst yfirferðar rule: + hint: Viðbótarupplýsingar text: Regla settings: indexable: Hafa notandasnið með í leitarvélum diff --git a/config/locales/simple_form.it.yml b/config/locales/simple_form.it.yml index 244cf7c44a..bf294a48c6 100644 --- a/config/locales/simple_form.it.yml +++ b/config/locales/simple_form.it.yml @@ -116,6 +116,7 @@ it: sign_up_requires_approval: Le nuove iscrizioni richiederanno la tua approvazione severity: Scegli cosa accadrà con le richieste da questo IP rule: + hint: Opzionale. Fornisce maggiori dettagli sulla regola text: Descrivi una regola o un requisito per gli utenti su questo server. Prova a mantenerla breve e semplice sessions: otp: 'Inserisci il codice a due fattori generato dall''app del tuo telefono o usa uno dei codici di recupero:' @@ -299,6 +300,7 @@ it: patch: Notifica sulle correzioni di bug trending_tag: La nuova tendenza richiede un controllo rule: + hint: Informazioni aggiuntive text: Regola settings: indexable: Includi la pagina del profilo nei motori di ricerca diff --git a/config/locales/simple_form.ko.yml b/config/locales/simple_form.ko.yml index 1dee6f1431..d948a88ed1 100644 --- a/config/locales/simple_form.ko.yml +++ b/config/locales/simple_form.ko.yml @@ -116,6 +116,7 @@ ko: sign_up_requires_approval: 새 가입이 승인을 필요로 하도록 합니다 severity: 해당 IP로부터의 요청에 대해 무엇이 일어나게 할 지 고르세요 rule: + hint: 옵션사항. 규칙에 대한 더 상세한 정보를 제공하세요 text: 이 서버 사용자들이 지켜야 할 규칙과 요구사항을 설명해주세요. 짧고 간단하게 작성해주세요 sessions: otp: '휴대전화에서 생성된 이중 인증 코드를 입력하거나, 복구 코드 중 하나를 사용하세요:' @@ -299,6 +300,7 @@ ko: patch: 버그픽스 업데이트에 대해 알림 trending_tag: 검토해야 할 새 유행 rule: + hint: 추가 정보 text: 규칙 settings: indexable: 검색 엔진에 프로필 페이지 기재하기 diff --git a/config/locales/simple_form.lad.yml b/config/locales/simple_form.lad.yml index f9ee9a4b9a..2de24c38ff 100644 --- a/config/locales/simple_form.lad.yml +++ b/config/locales/simple_form.lad.yml @@ -299,6 +299,7 @@ lad: patch: Avizame de aktualizasyones de yerros trending_tag: Un muevo trend nesesita revizyon rule: + hint: Enformasyon adisyonala text: Regla settings: indexable: Inkluye la pajina de profil en los bushkadores diff --git a/config/locales/simple_form.lt.yml b/config/locales/simple_form.lt.yml index 53b8d672de..5431ea1b10 100644 --- a/config/locales/simple_form.lt.yml +++ b/config/locales/simple_form.lt.yml @@ -82,6 +82,8 @@ lt: thumbnail: Maždaug 2:1 dydžio vaizdas, rodomas šalia tavo serverio informacijos. timeline_preview: Atsijungę lankytojai galės naršyti naujausius viešus įrašus, esančius serveryje. trends: Trendai rodo, kurios įrašai, saitažodžiai ir naujienų istorijos tavo serveryje sulaukia didžiausio susidomėjimo. + rule: + hint: Pasirinktinai. Pateik daugiau informacijos apie taisyklę. sessions: otp: 'Įvesk telefono programėlėje sugeneruotą dviejų tapatybės kodą arba naudok vieną iš atkūrimo kodų:' webauthn: Jei tai USB raktas, būtinai jį įkišk ir, jei reikia, paspausk. @@ -168,6 +170,7 @@ lt: label: Yra nauja Mastodon versija patch: Pranešti apie klaidų ištaisymo atnaujinimus rule: + hint: Papildoma informacija text: Taisyklė settings: show_application: Rodyti, iš kurios programėles išsiuntei įrašą diff --git a/config/locales/simple_form.nl.yml b/config/locales/simple_form.nl.yml index 3f4f339b93..df108a2fec 100644 --- a/config/locales/simple_form.nl.yml +++ b/config/locales/simple_form.nl.yml @@ -116,6 +116,7 @@ nl: sign_up_requires_approval: Nieuwe registraties vereisen jouw goedkeuring severity: Kies wat er moet gebeuren met aanvragen van dit IP-adres rule: + hint: Optioneel. Verstrek meer details over de regel text: Omschrijf een regel of vereiste voor gebruikers op deze server. Probeer het kort en simpel te houden sessions: otp: 'Voer de tweestaps-toegangscode vanaf jouw mobiele telefoon in of gebruik een van jouw herstelcodes:' @@ -299,6 +300,7 @@ nl: patch: Meldingen bij bugfix-updates trending_tag: Nieuwe trend vereist beoordeling rule: + hint: Aanvullende informatie text: Regel settings: indexable: Zoekmachines jouw profielpagina laten vinden diff --git a/config/locales/simple_form.nn.yml b/config/locales/simple_form.nn.yml index 98cc372be7..72525619c7 100644 --- a/config/locales/simple_form.nn.yml +++ b/config/locales/simple_form.nn.yml @@ -116,6 +116,7 @@ nn: sign_up_requires_approval: Du må godkjenna nye registreringar severity: Vel kva som skal skje ved førespurnader frå denne IP rule: + hint: Valfritt. Gje meir informasjon om regelen text: Forklar ein regel eller eit krav for brukarar på denne tenaren. Prøv å skriva kort og lettfattleg sessions: otp: Angi tofaktorkoden fra din telefon eller bruk en av dine gjenopprettingskoder. @@ -299,6 +300,7 @@ nn: patch: Varsle om feilrettingsoppdateringar trending_tag: Ny trend krev gjennomgang rule: + hint: Meir informasjon text: Regler settings: indexable: Ta med profilsida i søkjemotorar diff --git a/config/locales/simple_form.pl.yml b/config/locales/simple_form.pl.yml index 4a8208202f..3a1c619f70 100644 --- a/config/locales/simple_form.pl.yml +++ b/config/locales/simple_form.pl.yml @@ -116,6 +116,7 @@ pl: sign_up_requires_approval: Nowe rejestracje będą wymagać twojej zgody severity: Wybierz co ma się stać z żadaniami z tego adresu IP rule: + hint: Opcjonalne. Dodaj więcej szczegółów dot. tej zasady text: Opisz wymóg lub regułę dla użytkowników na tym serwerze. Postaraj się, aby była krótka i prosta sessions: otp: 'Wprowadź kod weryfikacji dwuetapowej z telefonu lub wykorzystaj jeden z kodów zapasowych:' @@ -299,6 +300,7 @@ pl: patch: Powiadamiaj o aktualizacjach naprawiających błędy trending_tag: Nowe popularne wymagają przeglądu rule: + hint: Informacje dodatkowe text: Zasada settings: indexable: Udostępniaj profil wyszukiwarkom diff --git a/config/locales/simple_form.pt-PT.yml b/config/locales/simple_form.pt-PT.yml index 9c54e72140..a84f97f88d 100644 --- a/config/locales/simple_form.pt-PT.yml +++ b/config/locales/simple_form.pt-PT.yml @@ -116,6 +116,7 @@ pt-PT: sign_up_requires_approval: Novas inscrições requererão a sua aprovação severity: Escolha o que acontecerá com as solicitações deste IP rule: + hint: Opcional. Forneça mais detalhes sobre a regra text: Descreva uma regra ou requisito para os utilizadores nesta instância. Tente mantê-la curta e simples sessions: otp: 'Insira o código de autenticação em duas etapas gerado pelo seu telemóvel ou use um dos seus códigos de recuperação:' @@ -299,6 +300,7 @@ pt-PT: patch: Notificar sobre atualizações de correções de problemas trending_tag: Uma nova publicação em alta requer avaliação rule: + hint: Informação Adicional text: Regra settings: indexable: Incluir página de perfil nos motores de busca diff --git a/config/locales/simple_form.sl.yml b/config/locales/simple_form.sl.yml index 1e56894384..cbf0570187 100644 --- a/config/locales/simple_form.sl.yml +++ b/config/locales/simple_form.sl.yml @@ -116,6 +116,7 @@ sl: sign_up_requires_approval: Za nove registracije bo potrebna vaša odobritev severity: Izberite, kaj se bo zgodilo z zahtevami iz tega IP-naslova rule: + hint: Neobvezno. Vnesite dodatne podrobnosti o pravilu text: Opišite pravilo ali zahtevo za uporabnike na tem strežniku. Poskusite biti kratki in jasni sessions: otp: 'Vnesite dvomestno kodo, ki je ustvarjena z aplikacijo na telefonu, ali uporabite eno od vaših obnovitvenih kod:' @@ -299,6 +300,7 @@ sl: patch: Obveščaj o posodobitvah z odpravljenimi hrošči trending_tag: Nov trend zahteva pregled rule: + hint: Dodatne informacije text: Pravilo settings: indexable: V iskalnike vključi stran profila diff --git a/config/locales/simple_form.sq.yml b/config/locales/simple_form.sq.yml index b8404766f3..41ee3d9bd5 100644 --- a/config/locales/simple_form.sq.yml +++ b/config/locales/simple_form.sq.yml @@ -116,6 +116,7 @@ sq: sign_up_requires_approval: Regjistrime të reja do të duan miratimin tuaj severity: Zgjidhni ç’do të ndodhë me kërkesa nga kjo IP rule: + hint: Opsionale. Jepni më tepër hollësi rreth këtij rregulli text: Përshkruani një rregull ose një domosdoshmëri për përdoruesit në këtë shërbyes. Përpiquni të jetë i shkurtër dhe i thjeshtë sessions: otp: 'Jepni kodin dyfaktorësh të prodhuar nga aplikacioni i telefonit tuaj ose përdorni një nga kodet tuaj të rikthimeve:' @@ -299,6 +300,7 @@ sq: patch: Njofto për ndreqje të metash trending_tag: Për gjëra të reja në modë lypset shqyrtim rule: + hint: Informacion shtesë text: Rregull settings: indexable: Përfshi faqe profili në motorë kërkimesh diff --git a/config/locales/simple_form.sr-Latn.yml b/config/locales/simple_form.sr-Latn.yml index 3214a722df..6ed095e2a2 100644 --- a/config/locales/simple_form.sr-Latn.yml +++ b/config/locales/simple_form.sr-Latn.yml @@ -299,6 +299,7 @@ sr-Latn: patch: Obavesti o ispravkama grešaka trending_tag: Novi trend treba pregledati rule: + hint: Dodatne informacije text: Pravilo settings: indexable: Uključi stranicu profila u pretraživače diff --git a/config/locales/simple_form.sr.yml b/config/locales/simple_form.sr.yml index 9631efc053..4fb32000b7 100644 --- a/config/locales/simple_form.sr.yml +++ b/config/locales/simple_form.sr.yml @@ -299,6 +299,7 @@ sr: patch: Обавести о исправкама грешака trending_tag: Нови тренд треба прегледати rule: + hint: Додатне информације text: Правило settings: indexable: Укључи страницу профила у претраживаче diff --git a/config/locales/simple_form.sv.yml b/config/locales/simple_form.sv.yml index 02806e711f..c3b8625c8e 100644 --- a/config/locales/simple_form.sv.yml +++ b/config/locales/simple_form.sv.yml @@ -299,6 +299,7 @@ sv: patch: Meddela vid buggfix-uppdateringar trending_tag: En ny trend kräver granskning rule: + hint: Ytterligare information text: Regel settings: indexable: Inkludera profilsidan i sökmotorer diff --git a/config/locales/simple_form.th.yml b/config/locales/simple_form.th.yml index 259bb00099..b41cf0bea6 100644 --- a/config/locales/simple_form.th.yml +++ b/config/locales/simple_form.th.yml @@ -116,6 +116,7 @@ th: sign_up_requires_approval: การลงทะเบียนใหม่จะต้องการการอนุมัติของคุณ severity: เลือกสิ่งที่จะเกิดขึ้นกับคำขอจาก IP นี้ rule: + hint: ไม่จำเป็น ให้รายละเอียดเพิ่มเติมเกี่ยวกับกฎ text: อธิบายกฎหรือข้อกำหนดสำหรับผู้ใช้ในเซิร์ฟเวอร์นี้ พยายามทำให้กฎหรือข้อกำหนดสั้นและเรียบง่าย sessions: otp: 'ป้อนรหัสสองปัจจัยที่สร้างโดยแอปในโทรศัพท์ของคุณหรือใช้หนึ่งในรหัสกู้คืนของคุณ:' @@ -299,6 +300,7 @@ th: patch: แจ้งเตือนการอัปเดตการแก้ไขข้อบกพร่อง trending_tag: แนวโน้มใหม่ต้องการการตรวจทาน rule: + hint: ข้อมูลเพิ่มเติม text: กฎ settings: indexable: รวมหน้าโปรไฟล์ในเครื่องมือค้นหา diff --git a/config/locales/simple_form.uk.yml b/config/locales/simple_form.uk.yml index a85684a0f9..db8e4b4d27 100644 --- a/config/locales/simple_form.uk.yml +++ b/config/locales/simple_form.uk.yml @@ -119,6 +119,7 @@ uk: sign_up_requires_approval: Нові реєстрації потребуватимуть затвердження вами severity: Виберіть, що буде відбуватися з запитами з цієї IP rule: + hint: Необов'язково. Докладніше про правило text: Опис правила або вимоги для користувачів на цьому сервері. Спробуйте зробити його коротким і простим sessions: otp: 'Введіть код двофакторної автентифікації, згенерований вашим мобільним застосунком, або скористайтеся одним з ваших кодів відновлення:' @@ -302,6 +303,7 @@ uk: patch: Сповіщати про оновлення з виправленнями trending_tag: Нове популярне вимагає розгляду rule: + hint: Додаткова інформація text: Правило settings: indexable: Включити сторінку профілю в пошукові системи diff --git a/config/locales/simple_form.vi.yml b/config/locales/simple_form.vi.yml index ae0a5ea560..f4d9f526b6 100644 --- a/config/locales/simple_form.vi.yml +++ b/config/locales/simple_form.vi.yml @@ -116,6 +116,7 @@ vi: sign_up_requires_approval: Bạn sẽ phê duyệt những đăng ký mới từ IP này severity: Chọn hành động nếu nhận được yêu cầu từ IP này rule: + hint: Tùy chọn. Cung cấp chi tiết hơn về nội quy text: Mô tả một nội quy bắt buộc trên máy chủ này. Nên để ngắn và đơn giản sessions: otp: 'Nhập mã xác minh 2 bước được tạo bởi ứng dụng điện thoại của bạn hoặc dùng một trong các mã khôi phục của bạn:' @@ -299,6 +300,7 @@ vi: patch: Thông báo bản cập sửa lỗi trending_tag: Phê duyệt nội dung nổi bật mới rule: + hint: Thông tin thêm text: Nội quy settings: indexable: Cho phép hiện hồ sơ trong công cụ tìm kiếm diff --git a/config/locales/simple_form.zh-CN.yml b/config/locales/simple_form.zh-CN.yml index d0ca529a4d..7f2eee023c 100644 --- a/config/locales/simple_form.zh-CN.yml +++ b/config/locales/simple_form.zh-CN.yml @@ -116,6 +116,7 @@ zh-CN: sign_up_requires_approval: 新注册需要你的批准 severity: 选择如何处理来自此 IP 的请求。 rule: + hint: 选填。提供关于这条规则的更多详情 text: 描述这个服务器上的用户规则或要求。尽量确保简洁、清晰易懂 sessions: otp: 输入你手机应用上生成的双因素认证代码,或者任意一个恢复代码: @@ -299,6 +300,7 @@ zh-CN: patch: 通知错误修复更新 trending_tag: 新热门待审核 rule: + hint: 补充信息 text: 规则 settings: indexable: 允许搜索引擎索引个人资料页面 diff --git a/config/locales/simple_form.zh-TW.yml b/config/locales/simple_form.zh-TW.yml index fe938712e3..69a2794e6c 100644 --- a/config/locales/simple_form.zh-TW.yml +++ b/config/locales/simple_form.zh-TW.yml @@ -8,7 +8,7 @@ zh-TW: fields: 烘培雞、自我認同代稱、年齡,及任何您想分享的。 indexable: 您的公開嘟文可能會顯示於 Mastodon 之搜尋結果中。曾與您嘟文互動過的人可能無論如何都能搜尋它們。 note: '您可以 @mention 其他人或者使用 #主題標籤。' - show_collections: 人們將能瀏覽您跟隨中及跟隨者帳號。您所跟隨之人能得知您正在跟隨其帳號。 + show_collections: 人們將能瀏覽您跟隨中及跟隨者帳號。您所跟隨之使用者能得知您正在跟隨其帳號。 unlocked: 人們將無需額外請求您的同意便能跟隨您的帳號。取消勾選以審查跟隨請求並選擇是否同意或拒絕新跟隨者。 account_alias: acct: 指定要移動的帳號之「使用者名稱@網域名稱」 @@ -16,7 +16,7 @@ zh-TW: acct: 指定欲移動至帳號之「使用者名稱@網域名稱」 account_warning_preset: text: 您可使用嘟文語法,例如網址、「#」標籤與提及功能 - title: 可選。不會向收件者顯示 + title: 可選的。不會向收件者顯示 admin_account_action: include_statuses: 使用者可看到導致檢舉或警告的嘟文 send_email_notification: 使用者將收到帳號發生之事情的解釋 @@ -116,6 +116,7 @@ zh-TW: sign_up_requires_approval: 新註冊申請需要先經過您的審核 severity: 請選擇將如何處理來自這個 IP 位址的請求 rule: + hint: 可選的。提供關於此規則更多細節 text: 說明使用者於此伺服器上需遵守的規則或條款。試著維持各項條款簡短而明瞭。 sessions: otp: 請輸入產生自您手機 App 的兩階段驗證碼,或輸入其中一個備用驗證碼: @@ -299,6 +300,7 @@ zh-TW: patch: 通知錯誤修正更新 trending_tag: 新熱門趨勢需要審核 rule: + hint: 其他資訊 text: 規則 settings: indexable: 於搜尋引擎中包含個人檔案頁面 diff --git a/config/locales/zh-TW.yml b/config/locales/zh-TW.yml index d8952edec9..2eecfa7b46 100644 --- a/config/locales/zh-TW.yml +++ b/config/locales/zh-TW.yml @@ -397,7 +397,7 @@ zh-TW: create: 新增封鎖 hint: 站點封鎖動作並不會阻止帳號紀錄被新增至資料庫,但會自動回溯性地對那些帳號套用特定管理設定。 severity: - desc_html: "「靜音」令該站點下使用者的嘟文,設定為只對跟隨者顯示,沒有跟隨的人會看不到。「停權」會刪除將該站點下使用者的嘟文、媒體檔案與個人檔案。「」則會拒絕接收來自該站點的媒體檔案。" + desc_html: "「靜音」令該站點下使用者的嘟文,設定為只對跟隨者顯示,沒有跟隨之使用者會看不到。「停權」會刪除將該站點下使用者的嘟文、媒體檔案與個人檔案。「」則會拒絕接收來自該站點的媒體檔案。" noop: 無 silence: 靜音 suspend: 停權 From 0ba9f58e171035e531e86e829975e55955390ae2 Mon Sep 17 00:00:00 2001 From: cuithon <65674308+cuithon@users.noreply.github.com> Date: Tue, 12 Mar 2024 17:40:29 +0800 Subject: [PATCH 63/96] chore: fix some typos (#29555) Signed-off-by: cuithon --- Dockerfile | 2 +- Gemfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index facd9b8aa0..8778133e0d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,7 +20,7 @@ FROM docker.io/ruby:${RUBY_VERSION}-slim-${DEBIAN_VERSION} as ruby # Resulting version string is vX.X.X-MASTODON_VERSION_PRERELEASE+MASTODON_VERSION_METADATA # Example: v4.2.0-nightly.2023.11.09+something -# Overwrite existance of 'alpha.0' in version.rb [--build-arg MASTODON_VERSION_PRERELEASE="nightly.2023.11.09"] +# Overwrite existence of 'alpha.0' in version.rb [--build-arg MASTODON_VERSION_PRERELEASE="nightly.2023.11.09"] ARG MASTODON_VERSION_PRERELEASE="" # Append build metadata or fork information to version.rb [--build-arg MASTODON_VERSION_METADATA="something"] ARG MASTODON_VERSION_METADATA="" diff --git a/Gemfile b/Gemfile index 355e69b0c4..d3bfeb4487 100644 --- a/Gemfile +++ b/Gemfile @@ -112,7 +112,7 @@ group :test do # RSpec helpers for email specs gem 'email_spec' - # Extra RSpec extenion methods and helpers for sidekiq + # Extra RSpec extension methods and helpers for sidekiq gem 'rspec-sidekiq', '~> 4.0' # Browser integration testing From af4e44e30a6a2701102a7d573e47e9db42025821 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Tue, 12 Mar 2024 10:42:51 +0100 Subject: [PATCH 64/96] Fix i18n typo (#29557) --- .../notifications/components/filtered_notifications_banner.jsx | 2 +- app/javascript/mastodon/locales/en.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.jsx b/app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.jsx index dddb9d6412..bf9467bd63 100644 --- a/app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.jsx +++ b/app/javascript/mastodon/features/notifications/components/filtered_notifications_banner.jsx @@ -38,7 +38,7 @@ export const FilteredNotificationsBanner = () => {
- +
diff --git a/app/javascript/mastodon/locales/en.json b/app/javascript/mastodon/locales/en.json index aed3a3a600..2f202bfe15 100644 --- a/app/javascript/mastodon/locales/en.json +++ b/app/javascript/mastodon/locales/en.json @@ -272,7 +272,7 @@ "filter_modal.select_filter.subtitle": "Use an existing category or create a new one", "filter_modal.select_filter.title": "Filter this post", "filter_modal.title.status": "Filter a post", - "filtered_notifications_banner.pending_requests": "Notifications from {count, plural, =0 {no} one {one person} other {# people}} you may know", + "filtered_notifications_banner.pending_requests": "Notifications from {count, plural, =0 {no one} one {one person} other {# people}} you may know", "filtered_notifications_banner.title": "Filtered notifications", "firehose.all": "All", "firehose.local": "This server", From 5b60d4b696cd5fd58ca77eca3365c2a0761c0f57 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 12 Mar 2024 10:51:30 +0100 Subject: [PATCH 65/96] Change background color in web UI (#29522) --- .../mastodon/features/about/index.jsx | 24 +- .../styles/mastodon-light/diff.scss | 88 ------ .../styles/mastodon-light/variables.scss | 4 + app/javascript/styles/mastodon/about.scss | 2 +- app/javascript/styles/mastodon/admin.scss | 2 +- app/javascript/styles/mastodon/basics.scss | 2 +- .../styles/mastodon/components.scss | 250 +++++++++--------- app/javascript/styles/mastodon/variables.scss | 8 +- 8 files changed, 147 insertions(+), 233 deletions(-) diff --git a/app/javascript/mastodon/features/about/index.jsx b/app/javascript/mastodon/features/about/index.jsx index 5197d338cd..65a36520d6 100644 --- a/app/javascript/mastodon/features/about/index.jsx +++ b/app/javascript/mastodon/features/about/index.jsx @@ -189,18 +189,20 @@ class About extends PureComponent { <>

-
- {domainBlocks.get('items').map(block => ( -
-
-
{block.get('domain')}
- {intl.formatMessage(severityMessages[block.get('severity')].title)} -
+ {domainBlocks.get('items').size > 0 && ( +
+ {domainBlocks.get('items').map(block => ( +
+
+
{block.get('domain')}
+ {intl.formatMessage(severityMessages[block.get('severity')].title)} +
-

{(block.get('comment') || '').length > 0 ? block.get('comment') : }

-
- ))} -
+

{(block.get('comment') || '').length > 0 ? block.get('comment') : }

+
+ ))} +
+ )} ) : (

diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss index e3872283e1..675a01dd36 100644 --- a/app/javascript/styles/mastodon-light/diff.scss +++ b/app/javascript/styles/mastodon-light/diff.scss @@ -21,25 +21,6 @@ html { } // Change default background colors of columns -.column > .scrollable, -.getting-started, -.column-inline-form, -.regeneration-indicator { - background: $white; - border: 1px solid lighten($ui-base-color, 8%); - border-top: 0; -} - -.error-column { - border: 1px solid lighten($ui-base-color, 8%); -} - -.column > .scrollable.about { - border-top: 1px solid lighten($ui-base-color, 8%); -} - -.about__meta, -.about__section__title, .interaction-modal { background: $white; border: 1px solid lighten($ui-base-color, 8%); @@ -53,37 +34,10 @@ html { background: lighten($ui-base-color, 12%); } -.filter-form { - background: $white; - border-bottom: 1px solid lighten($ui-base-color, 8%); -} - -.column-back-button, -.column-header { - background: $white; - border: 1px solid lighten($ui-base-color, 8%); - - @media screen and (max-width: $no-gap-breakpoint) { - border-top: 0; - } - - &--slim-button { - top: -50px; - right: 0; - } -} - -.column-header__back-button, -.column-header__button, -.column-header__button.active, .account__header { background: $white; } -.column-header { - border-bottom: 0; -} - .column-header__button.active { color: $ui-highlight-color; @@ -91,7 +45,6 @@ html { &:active, &:focus { color: $ui-highlight-color; - background: $white; } } @@ -117,25 +70,6 @@ html { } } -.column-subheading { - background: darken($ui-base-color, 4%); - border-bottom: 1px solid lighten($ui-base-color, 8%); -} - -.getting-started, -.scrollable { - .column-link { - background: $white; - border-bottom: 1px solid lighten($ui-base-color, 8%); - - &:hover, - &:active, - &:focus { - background: $ui-base-color; - } - } -} - .getting-started .navigation-bar { border-top: 1px solid lighten($ui-base-color, 8%); border-bottom: 1px solid lighten($ui-base-color, 8%); @@ -168,23 +102,6 @@ html { border-bottom: 0; } -.notification__filter-bar { - border: 1px solid lighten($ui-base-color, 8%); - border-top: 0; -} - -.drawer__header, -.drawer__inner { - background: $white; - border: 1px solid lighten($ui-base-color, 8%); -} - -.drawer__inner__mastodon { - background: $white - url('data:image/svg+xml;utf8,') - no-repeat bottom / 100% auto; -} - .upload-progress__backdrop { background: $ui-base-color; } @@ -194,11 +111,6 @@ html { background: lighten($white, 4%); } -.detailed-status, -.detailed-status__action-bar { - background: $white; -} - // Change the background colors of status__content__spoiler-link .reply-indicator__content .status__content__spoiler-link, .status__content .status__content__spoiler-link { diff --git a/app/javascript/styles/mastodon-light/variables.scss b/app/javascript/styles/mastodon-light/variables.scss index 3cf5561ca3..09a75a834b 100644 --- a/app/javascript/styles/mastodon-light/variables.scss +++ b/app/javascript/styles/mastodon-light/variables.scss @@ -59,4 +59,8 @@ $emojis-requiring-inversion: 'chains'; .theme-mastodon-light { --dropdown-border-color: #d9e1e8; --dropdown-background-color: #fff; + --background-border-color: #d9e1e8; + --background-color: #fff; + --background-color-tint: rgba(255, 255, 255, 90%); + --background-filter: blur(10px); } diff --git a/app/javascript/styles/mastodon/about.scss b/app/javascript/styles/mastodon/about.scss index 9d23ef41ab..48fe9449f0 100644 --- a/app/javascript/styles/mastodon/about.scss +++ b/app/javascript/styles/mastodon/about.scss @@ -26,7 +26,7 @@ $fluid-breakpoint: $maximum-width + 20px; li { position: relative; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); padding: 1em 1.75em; padding-inline-start: 3em; font-weight: 500; diff --git a/app/javascript/styles/mastodon/admin.scss b/app/javascript/styles/mastodon/admin.scss index ef9c2fd889..60e3cc19dd 100644 --- a/app/javascript/styles/mastodon/admin.scss +++ b/app/javascript/styles/mastodon/admin.scss @@ -1378,8 +1378,8 @@ a.sparkline { } .account-card { - background: $ui-base-color; border-radius: 4px; + border: 1px solid lighten($ui-base-color, 8%); &__permalink { color: inherit; diff --git a/app/javascript/styles/mastodon/basics.scss b/app/javascript/styles/mastodon/basics.scss index 28dad81da5..2e7d5e5e9c 100644 --- a/app/javascript/styles/mastodon/basics.scss +++ b/app/javascript/styles/mastodon/basics.scss @@ -8,7 +8,7 @@ body { font-family: $font-sans-serif, sans-serif; - background: darken($ui-base-color, 8%); + background: var(--background-color); font-size: 13px; line-height: 18px; font-weight: 400; diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index faa775ec4b..047d9d9739 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -1311,7 +1311,7 @@ body > [data-popper-placement] { box-sizing: border-box; width: 100%; clear: both; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); &__button { display: inline; @@ -1332,19 +1332,14 @@ body > [data-popper-placement] { .focusable { &:focus { outline: 0; - background: lighten($ui-base-color, 4%); - - .detailed-status, - .detailed-status__action-bar { - background: lighten($ui-base-color, 8%); - } + background: rgba($ui-highlight-color, 0.05); } } .status { padding: 16px; min-height: 54px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); cursor: auto; @keyframes fade { @@ -1588,10 +1583,10 @@ body > [data-popper-placement] { } .status__wrapper-direct { - background: mix($ui-base-color, $ui-highlight-color, 95%); + background: rgba($ui-highlight-color, 0.05); &:focus { - background: mix(lighten($ui-base-color, 4%), $ui-highlight-color, 95%); + background: rgba($ui-highlight-color, 0.05); } .status__prepend { @@ -1616,9 +1611,8 @@ body > [data-popper-placement] { } .detailed-status { - background: lighten($ui-base-color, 4%); padding: 16px; - border-top: 1px solid lighten($ui-base-color, 8%); + border-top: 1px solid var(--background-border-color); &--flex { display: flex; @@ -1678,9 +1672,8 @@ body > [data-popper-placement] { } .detailed-status__action-bar { - background: lighten($ui-base-color, 4%); - border-top: 1px solid lighten($ui-base-color, 8%); - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-top: 1px solid var(--background-border-color); + border-bottom: 1px solid var(--background-border-color); display: flex; flex-direction: row; padding: 10px 0; @@ -1735,7 +1728,7 @@ body > [data-popper-placement] { .domain { padding: 10px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); .domain__domain-name { flex: 1 1 auto; @@ -1759,7 +1752,7 @@ body > [data-popper-placement] { .account { padding: 16px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); .account__display-name { flex: 1 1 auto; @@ -2017,7 +2010,7 @@ a.account__display-name { .notification__report { padding: 16px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); display: flex; gap: 10px; @@ -2276,6 +2269,7 @@ a.account__display-name { .dropdown-menu { background: var(--dropdown-background-color); + backdrop-filter: var(--background-filter); border: 1px solid var(--dropdown-border-color); padding: 4px; border-radius: 4px; @@ -2466,6 +2460,7 @@ $ui-header-height: 55px; z-index: 3; justify-content: space-between; align-items: center; + backdrop-filter: var(--background-filter); &__logo { display: inline-flex; @@ -2514,7 +2509,8 @@ $ui-header-height: 55px; } .tabs-bar__wrapper { - background: darken($ui-base-color, 8%); + background: var(--background-color-tint); + backdrop-filter: var(--background-filter); position: sticky; top: $ui-header-height; z-index: 2; @@ -2550,8 +2546,15 @@ $ui-header-height: 55px; flex-direction: column; > .scrollable { - background: $ui-base-color; + border: 1px solid var(--background-border-color); + border-top: 0; border-radius: 0 0 4px 4px; + + &.about, + &.privacy-policy { + border-top: 1px solid var(--background-border-color); + border-radius: 4px; + } } } @@ -2581,7 +2584,6 @@ $ui-header-height: 55px; font-size: 16px; align-items: center; justify-content: center; - border-bottom: 2px solid transparent; } .column, @@ -2710,8 +2712,7 @@ $ui-header-height: 55px; .navigation-panel { margin: 0; - background: $ui-base-color; - border-inline-start: 1px solid lighten($ui-base-color, 8%); + border-inline-start: 1px solid var(--background-border-color); height: 100vh; } @@ -2729,8 +2730,15 @@ $ui-header-height: 55px; .layout-single-column .ui__header { display: flex; - background: $ui-base-color; - border-bottom: 1px solid lighten($ui-base-color, 8%); + background: var(--background-color-tint); + border-bottom: 1px solid var(--background-border-color); + } + + .column > .scrollable, + .tabs-bar__wrapper .column-header, + .tabs-bar__wrapper .column-back-button { + border-left: 0; + border-right: 0; } .column-header, @@ -2788,7 +2796,7 @@ $ui-header-height: 55px; inset-inline-start: 9px; top: -13px; background: $ui-highlight-color; - border: 2px solid lighten($ui-base-color, 8%); + border: 2px solid var(--background-color); padding: 1px 6px; border-radius: 6px; font-size: 10px; @@ -2810,7 +2818,7 @@ $ui-header-height: 55px; } .column-link--transparent .icon-with-badge__badge { - border-color: darken($ui-base-color, 8%); + border-color: var(--background-color); } .column-title { @@ -3160,7 +3168,7 @@ $ui-header-height: 55px; flex: 0 0 auto; border: 0; background: transparent; - border-top: 1px solid lighten($ui-base-color, 4%); + border-top: 1px solid var(--background-border-color); margin: 10px 0; } @@ -3177,13 +3185,14 @@ $ui-header-height: 55px; overflow: hidden; display: flex; border-radius: 4px; + border: 1px solid var(--background-border-color); } .drawer__inner { position: absolute; top: 0; inset-inline-start: 0; - background: darken($ui-base-color, 4%); + background: var(--background-color); box-sizing: border-box; padding: 0; display: flex; @@ -3192,15 +3201,11 @@ $ui-header-height: 55px; overflow-y: auto; width: 100%; height: 100%; - - &.darker { - background: $ui-base-color; - } } .drawer__inner__mastodon { - background: darken($ui-base-color, 4%) - url('data:image/svg+xml;utf8,') + background: var(--background-color) + url('data:image/svg+xml;utf8,') no-repeat bottom / 100% auto; flex: 1; min-height: 47px; @@ -3224,7 +3229,7 @@ $ui-header-height: 55px; .drawer__header { flex: 0 0 auto; font-size: 16px; - background: darken($ui-base-color, 4%); + border: 1px solid var(--background-border-color); margin-bottom: 10px; display: flex; flex-direction: row; @@ -3234,7 +3239,7 @@ $ui-header-height: 55px; a:hover, a:focus, a:active { - background: $ui-base-color; + color: $primary-text-color; } } @@ -3279,15 +3284,14 @@ $ui-header-height: 55px; .column-back-button { box-sizing: border-box; width: 100%; - background: $ui-base-color; + background: transparent; + border: 1px solid var(--background-border-color); border-radius: 4px 4px 0 0; color: $highlight-text-color; cursor: pointer; flex: 0 0 auto; font-size: 16px; line-height: inherit; - border: 0; - border-bottom: 1px solid lighten($ui-base-color, 8%); text-align: unset; padding: 13px; margin: 0; @@ -3300,13 +3304,17 @@ $ui-header-height: 55px; &:hover { text-decoration: underline; } + + @media screen and (max-width: $no-gap-breakpoint) { + border-top: 0; + } } .column-header__back-button { display: flex; align-items: center; gap: 5px; - background: $ui-base-color; + background: transparent; border: 0; font-family: inherit; color: $highlight-text-color; @@ -3412,8 +3420,6 @@ $ui-header-height: 55px; } .column-link { - background: lighten($ui-base-color, 8%); - color: $primary-text-color; display: flex; align-items: center; gap: 5px; @@ -3423,12 +3429,18 @@ $ui-header-height: 55px; overflow: hidden; white-space: nowrap; border: 0; + background: transparent; + color: $secondary-text-color; border-left: 4px solid transparent; &:hover, &:focus, &:active { - background: lighten($ui-base-color, 11%); + color: $primary-text-color; + } + + &.active { + color: $highlight-text-color; } &:focus { @@ -3440,22 +3452,6 @@ $ui-header-height: 55px; border-radius: 0; } - &--transparent { - background: transparent; - color: $secondary-text-color; - - &:hover, - &:focus, - &:active { - background: transparent; - color: $primary-text-color; - } - - &.active { - color: $highlight-text-color; - } - } - &--logo { background: transparent; padding: 10px; @@ -3480,8 +3476,8 @@ $ui-header-height: 55px; } .column-subheading { - background: $ui-base-color; - color: $dark-text-color; + background: darken($ui-base-color, 4%); + color: $darker-text-color; padding: 8px 20px; font-size: 12px; font-weight: 500; @@ -3489,12 +3485,6 @@ $ui-header-height: 55px; cursor: default; } -.getting-started__wrapper, -.getting-started, -.flex-spacer { - background: $ui-base-color; -} - .getting-started__wrapper { flex: 0 0 auto; } @@ -3506,6 +3496,8 @@ $ui-header-height: 55px; .getting-started { color: $dark-text-color; overflow: auto; + border: 1px solid var(--background-border-color); + border-top: 0; &__trends { flex: 0 1 auto; @@ -3514,7 +3506,7 @@ $ui-header-height: 55px; margin-top: 10px; h4 { - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); padding: 10px; font-size: 12px; text-transform: uppercase; @@ -3636,7 +3628,7 @@ $ui-header-height: 55px; margin-top: 14px; text-decoration: none; overflow: hidden; - border: 1px solid lighten($ui-base-color, 8%); + border: 1px solid var(--background-border-color); border-radius: 8px; &__actions { @@ -3893,7 +3885,7 @@ a.status-card { } .load-gap { - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); } .timeline-hint { @@ -3926,7 +3918,8 @@ a.status-card { font-size: 16px; font-weight: 500; color: $dark-text-color; - background: $ui-base-color; + border: 1px solid var(--background-border-color); + border-top: 0; cursor: default; display: flex; flex: 1 1 auto; @@ -4002,8 +3995,7 @@ a.status-card { .column-header { display: flex; font-size: 16px; - background: $ui-base-color; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border: 1px solid var(--background-border-color); border-radius: 4px 4px 0 0; flex: 0 0 auto; cursor: pointer; @@ -4070,6 +4062,10 @@ a.status-card { padding-top: 16px; } } + + @media screen and (max-width: $no-gap-breakpoint) { + border-top: 0; + } } .column-header__buttons { @@ -4089,9 +4085,9 @@ a.status-card { display: flex; justify-content: center; align-items: center; - background: $ui-base-color; border: 0; color: $darker-text-color; + background: transparent; cursor: pointer; font-size: 16px; padding: 0 15px; @@ -4110,7 +4106,6 @@ a.status-card { &.active { color: $primary-text-color; - background: lighten($ui-base-color, 4%); &:hover { color: $primary-text-color; @@ -4127,7 +4122,6 @@ a.status-card { max-height: 70vh; overflow: hidden; overflow-y: auto; - border-bottom: 1px solid lighten($ui-base-color, 8%); color: $darker-text-color; transition: max-height 150ms ease-in-out, @@ -4149,13 +4143,14 @@ a.status-card { height: 0; background: transparent; border: 0; - border-top: 1px solid lighten($ui-base-color, 8%); + border-top: 1px solid var(--background-border-color); margin: 10px 0; } } .column-header__collapsible-inner { - background: $ui-base-color; + border: 1px solid var(--background-border-color); + border-top: 0; } .column-header__setting-btn { @@ -4401,9 +4396,8 @@ a.status-card { } .account--panel { - background: lighten($ui-base-color, 4%); - border-top: 1px solid lighten($ui-base-color, 8%); - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-top: 1px solid var(--background-border-color); + border-bottom: 1px solid var(--background-border-color); display: flex; flex-direction: row; padding: 10px 0; @@ -4609,7 +4603,6 @@ a.status-card { .empty-column-indicator, .follow_requests-unlocked_explanation { color: $dark-text-color; - background: $ui-base-color; text-align: center; padding: 20px; font-size: 15px; @@ -4636,14 +4629,14 @@ a.status-card { .follow_requests-unlocked_explanation { background: darken($ui-base-color, 4%); - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); contain: initial; flex-grow: 0; } .error-column { padding: 20px; - background: $ui-base-color; + border: 1px solid var(--background-border-color); border-radius: 4px; display: flex; flex: 1 1 auto; @@ -4858,7 +4851,7 @@ a.status-card { width: 100%; height: 6px; border-radius: 6px; - background: darken($ui-base-color, 8%); + background: var(--background-color); position: relative; margin-top: 5px; } @@ -5280,7 +5273,7 @@ a.status-card { } .search-results__section { - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); &:last-child { border-bottom: 0; @@ -5288,7 +5281,7 @@ a.status-card { &__header { background: darken($ui-base-color, 4%); - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); padding: 15px; font-weight: 500; font-size: 14px; @@ -6335,7 +6328,7 @@ a.status-card { .attachment-list { display: flex; font-size: 14px; - border: 1px solid lighten($ui-base-color, 8%); + border: 1px solid var(--background-border-color); border-radius: 4px; margin-top: 16px; overflow: hidden; @@ -6345,7 +6338,7 @@ a.status-card { color: $dark-text-color; padding: 8px 18px; cursor: default; - border-inline-end: 1px solid lighten($ui-base-color, 8%); + border-inline-end: 1px solid var(--background-border-color); display: flex; flex-direction: column; align-items: center; @@ -6497,7 +6490,7 @@ a.status-card { overflow: hidden; box-sizing: border-box; position: relative; - background: darken($ui-base-color, 8%); + background: var(--background-color); border-radius: 8px; padding-bottom: 44px; width: 100%; @@ -6893,7 +6886,6 @@ a.status-card { .scrollable .account-card { margin: 10px; - background: lighten($ui-base-color, 8%); } .scrollable .account-card__title__avatar { @@ -6904,11 +6896,7 @@ a.status-card { } .scrollable .account-card__bio::after { - background: linear-gradient( - to left, - lighten($ui-base-color, 8%), - transparent - ); + background: linear-gradient(to left, var(--background-color), transparent); } .account-gallery__container { @@ -6937,8 +6925,8 @@ a.status-card { .notification__filter-bar, .account__section-headline { - background: $ui-base-color; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border: 1px solid var(--background-border-color); + border-top: 0; cursor: default; display: flex; flex-shrink: 0; @@ -6979,10 +6967,15 @@ a.status-card { } } } + + .scrollable & { + border-left: 0; + border-right: 0; + } } .filter-form { - background: $ui-base-color; + border-bottom: 1px solid var(--background-border-color); &__column { display: flex; @@ -7200,7 +7193,8 @@ noscript { justify-content: flex-start; gap: 15px; align-items: center; - background: lighten($ui-base-color, 4%); + border: 1px solid var(--background-border-color); + border-top: 0; label { flex: 1 1 auto; @@ -7301,7 +7295,7 @@ noscript { .list { padding: 10px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); } .list__wrapper { @@ -7445,7 +7439,7 @@ noscript { height: 145px; position: relative; background: darken($ui-base-color, 4%); - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); img { object-fit: cover; @@ -7459,7 +7453,7 @@ noscript { &__bar { position: relative; padding: 0 20px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); .avatar { display: block; @@ -7467,8 +7461,8 @@ noscript { width: 94px; .account__avatar { - background: darken($ui-base-color, 8%); - border: 2px solid $ui-base-color; + background: var(--background-color); + border: 2px solid var(--background-border-color); } } } @@ -7583,13 +7577,12 @@ noscript { margin: 0; margin-top: 16px; border-radius: 4px; - background: darken($ui-base-color, 4%); - border: 0; + border: 1px solid var(--background-border-color); dl { display: block; padding: 11px 16px; - border-bottom-color: lighten($ui-base-color, 4%); + border-bottom-color: var(--background-border-color); } dd, @@ -7764,7 +7757,7 @@ noscript { display: flex; align-items: center; padding: 15px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); gap: 15px; &:last-child { @@ -7882,7 +7875,7 @@ noscript { .conversation { display: flex; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); padding: 5px; padding-bottom: 0; @@ -8237,7 +8230,7 @@ noscript { .picture-in-picture-placeholder { box-sizing: border-box; - border: 2px dashed lighten($ui-base-color, 8%); + border: 2px dashed var(--background-border-color); background: $base-shadow-color; display: flex; flex-direction: column; @@ -8265,7 +8258,7 @@ noscript { .notifications-permission-banner { padding: 30px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); display: flex; flex-direction: column; align-items: center; @@ -8335,7 +8328,7 @@ noscript { color: $primary-text-color; text-decoration: none; padding: 15px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); gap: 15px; &:last-child { @@ -8714,7 +8707,6 @@ noscript { } .privacy-policy { - background: $ui-base-color; padding: 20px; @media screen and (min-width: $no-gap-breakpoint) { @@ -9083,6 +9075,7 @@ noscript { .about { padding: 20px; + border-top: 1px solid var(--background-border-color); @media screen and (min-width: $no-gap-breakpoint) { border-radius: 4px; @@ -9129,7 +9122,7 @@ noscript { } &__meta { - background: lighten($ui-base-color, 4%); + border: 1px solid var(--background-border-color); border-radius: 4px; display: flex; margin-bottom: 30px; @@ -9145,7 +9138,7 @@ noscript { width: 0; border: 0; border-style: solid; - border-color: lighten($ui-base-color, 8%); + border-color: var(--background-border-color); border-left-width: 1px; min-height: calc(100% - 60px); flex: 0 0 auto; @@ -9253,7 +9246,7 @@ noscript { line-height: 22px; padding: 20px; border-radius: 4px; - background: lighten($ui-base-color, 4%); + border: 1px solid var(--background-border-color); color: $highlight-text-color; cursor: pointer; } @@ -9263,7 +9256,7 @@ noscript { } &__body { - border: 1px solid lighten($ui-base-color, 4%); + border: 1px solid var(--background-border-color); border-top: 0; padding: 20px; font-size: 15px; @@ -9273,18 +9266,17 @@ noscript { &__domain-blocks { margin-top: 30px; - background: darken($ui-base-color, 4%); - border: 1px solid lighten($ui-base-color, 4%); + border: 1px solid var(--background-border-color); border-radius: 4px; &__domain { - border-bottom: 1px solid lighten($ui-base-color, 4%); + border-bottom: 1px solid var(--background-border-color); padding: 10px; font-size: 15px; color: $darker-text-color; &:nth-child(2n) { - background: darken($ui-base-color, 2%); + background: darken($ui-base-color, 4%); } &:last-child { @@ -9380,7 +9372,7 @@ noscript { } .hashtag-header { - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); padding: 15px; font-size: 17px; line-height: 22px; @@ -9442,8 +9434,8 @@ noscript { gap: 12px; padding: 16px 0; padding-bottom: 0; - border-bottom: 1px solid mix($ui-base-color, $ui-highlight-color, 75%); - background: mix($ui-base-color, $ui-highlight-color, 95%); + border-bottom: 1px solid var(--background-border-color); + background: rgba($ui-highlight-color, 0.05); &__header { display: flex; @@ -9527,8 +9519,8 @@ noscript { overflow-x: scroll; &__card { - background: darken($ui-base-color, 4%); - border: 1px solid lighten($ui-base-color, 8%); + background: var(--background-color); + border: 1px solid var(--background-border-color); border-radius: 4px; display: flex; flex-direction: column; @@ -9565,7 +9557,7 @@ noscript { .account__avatar { flex-shrink: 0; align-self: flex-end; - border: 1px solid lighten($ui-base-color, 8%); + border: 1px solid var(--background-border-color); background-color: $ui-base-color; } diff --git a/app/javascript/styles/mastodon/variables.scss b/app/javascript/styles/mastodon/variables.scss index 611c8bb5d1..94078d960d 100644 --- a/app/javascript/styles/mastodon/variables.scss +++ b/app/javascript/styles/mastodon/variables.scss @@ -94,10 +94,14 @@ $font-display: 'mastodon-font-display' !default; $font-monospace: 'mastodon-font-monospace' !default; :root { - --dropdown-border-color: #{lighten($ui-base-color, 12%)}; - --dropdown-background-color: #{lighten($ui-base-color, 4%)}; + --dropdown-border-color: #{lighten($ui-base-color, 4%)}; + --dropdown-background-color: #{rgba(darken($ui-base-color, 8%), 0.9)}; --dropdown-shadow: 0 20px 25px -5px #{rgba($base-shadow-color, 0.25)}, 0 8px 10px -6px #{rgba($base-shadow-color, 0.25)}; --modal-background-color: #{darken($ui-base-color, 4%)}; --modal-border-color: #{lighten($ui-base-color, 4%)}; + --background-border-color: #{lighten($ui-base-color, 4%)}; + --background-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%); + --background-color: #{darken($ui-base-color, 8%)}; + --background-color-tint: #{rgba(darken($ui-base-color, 8%), 0.9)}; } From d4ed7e466c41f19e5f9352700c76e7ffc4d28119 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 12 Mar 2024 09:09:11 -0400 Subject: [PATCH 66/96] Extract `by_domain_length` scope in `DomainNormalizable` concern (#29517) --- app/models/concerns/domain_normalizable.rb | 12 ++++++++++++ app/models/domain_block.rb | 2 +- app/models/email_domain_block.rb | 2 +- app/models/preview_card_provider.rb | 2 +- 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/app/models/concerns/domain_normalizable.rb b/app/models/concerns/domain_normalizable.rb index 8e244c1d87..76f91c5b64 100644 --- a/app/models/concerns/domain_normalizable.rb +++ b/app/models/concerns/domain_normalizable.rb @@ -5,6 +5,18 @@ module DomainNormalizable included do before_validation :normalize_domain + + scope :by_domain_length, -> { order(domain_char_length.desc) } + end + + class_methods do + def domain_char_length + Arel.sql( + <<~SQL.squish + CHAR_LENGTH(domain) + SQL + ) + end end private diff --git a/app/models/domain_block.rb b/app/models/domain_block.rb index e310918e9b..b5d1f2e079 100644 --- a/app/models/domain_block.rb +++ b/app/models/domain_block.rb @@ -70,7 +70,7 @@ class DomainBlock < ApplicationRecord segments = uri.normalized_host.split('.') variants = segments.map.with_index { |_, i| segments[i..].join('.') } - where(domain: variants).order(Arel.sql('char_length(domain) desc')).first + where(domain: variants).by_domain_length.first rescue Addressable::URI::InvalidURIError, IDN::Idna::IdnaError nil end diff --git a/app/models/email_domain_block.rb b/app/models/email_domain_block.rb index 40be59420a..f3a86eae8f 100644 --- a/app/models/email_domain_block.rb +++ b/app/models/email_domain_block.rb @@ -56,7 +56,7 @@ class EmailDomainBlock < ApplicationRecord end def blocking?(allow_with_approval: false) - blocks = EmailDomainBlock.where(domain: domains_with_variants, allow_with_approval: allow_with_approval).order(Arel.sql('char_length(domain) desc')) + blocks = EmailDomainBlock.where(domain: domains_with_variants, allow_with_approval: allow_with_approval).by_domain_length blocks.each { |block| block.history.add(@attempt_ip) } if @attempt_ip.present? blocks.any? end diff --git a/app/models/preview_card_provider.rb b/app/models/preview_card_provider.rb index 8ba24331bb..756707e3f1 100644 --- a/app/models/preview_card_provider.rb +++ b/app/models/preview_card_provider.rb @@ -54,6 +54,6 @@ class PreviewCardProvider < ApplicationRecord def self.matching_domain(domain) segments = domain.split('.') - where(domain: segments.map.with_index { |_, i| segments[i..].join('.') }).order(Arel.sql('char_length(domain) desc')).first + where(domain: segments.map.with_index { |_, i| segments[i..].join('.') }).by_domain_length.first end end From 00d94f3ffabda89a2f955212e763cdba3f1f54c6 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 12 Mar 2024 13:10:37 -0400 Subject: [PATCH 67/96] Use vanilla JS to get Rails CSRF values (#29403) --- app/javascript/mastodon/utils/log_out.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/app/javascript/mastodon/utils/log_out.ts b/app/javascript/mastodon/utils/log_out.ts index 3a4cc8ecb1..b08a61a6a2 100644 --- a/app/javascript/mastodon/utils/log_out.ts +++ b/app/javascript/mastodon/utils/log_out.ts @@ -1,5 +1,3 @@ -import Rails from '@rails/ujs'; - export const logOut = () => { const form = document.createElement('form'); @@ -9,13 +7,18 @@ export const logOut = () => { methodInput.setAttribute('type', 'hidden'); form.appendChild(methodInput); - const csrfToken = Rails.csrfToken(); - const csrfParam = Rails.csrfParam(); + const csrfToken = document.querySelector( + 'meta[name=csrf-token]', + ); + + const csrfParam = document.querySelector( + 'meta[name=csrf-param]', + ); if (csrfParam && csrfToken) { const csrfInput = document.createElement('input'); - csrfInput.setAttribute('name', csrfParam); - csrfInput.setAttribute('value', csrfToken); + csrfInput.setAttribute('name', csrfParam.content); + csrfInput.setAttribute('value', csrfToken.content); csrfInput.setAttribute('type', 'hidden'); form.appendChild(csrfInput); } From 96013cd576ec51a41a7fe06a28225a3e43ca8496 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 13 Mar 2024 04:22:32 -0400 Subject: [PATCH 68/96] Reduce `RSpec/ExampleLength` in CSP request spec (#29104) --- spec/requests/content_security_policy_spec.rb | 49 ++++++++++++------- 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/spec/requests/content_security_policy_spec.rb b/spec/requests/content_security_policy_spec.rb index d4cc40bce5..d4447dca4b 100644 --- a/spec/requests/content_security_policy_spec.rb +++ b/spec/requests/content_security_policy_spec.rb @@ -3,25 +3,38 @@ require 'rails_helper' describe 'Content-Security-Policy' do - it 'sets the expected CSP headers' do - allow(SecureRandom).to receive(:base64).with(16).and_return('ZbA+JmE7+bK8F5qvADZHuQ==') + before { allow(SecureRandom).to receive(:base64).with(16).and_return('ZbA+JmE7+bK8F5qvADZHuQ==') } + it 'sets the expected CSP headers' do get '/' - expect(response.headers['Content-Security-Policy'].split(';').map(&:strip)).to contain_exactly( - "base-uri 'none'", - "default-src 'none'", - "frame-ancestors 'none'", - "font-src 'self' https://cb6e6126.ngrok.io", - "img-src 'self' data: blob: https://cb6e6126.ngrok.io", - "style-src 'self' https://cb6e6126.ngrok.io 'nonce-ZbA+JmE7+bK8F5qvADZHuQ=='", - "media-src 'self' data: https://cb6e6126.ngrok.io", - "frame-src 'self' https:", - "manifest-src 'self' https://cb6e6126.ngrok.io", - "form-action 'self'", - "child-src 'self' blob: https://cb6e6126.ngrok.io", - "worker-src 'self' blob: https://cb6e6126.ngrok.io", - "connect-src 'self' data: blob: https://cb6e6126.ngrok.io ws://cb6e6126.ngrok.io:4000", - "script-src 'self' https://cb6e6126.ngrok.io 'wasm-unsafe-eval'" - ) + + expect(response_csp_headers) + .to match_array(expected_csp_headers) + end + + def response_csp_headers + response + .headers['Content-Security-Policy'] + .split(';') + .map(&:strip) + end + + def expected_csp_headers + <<~CSP.split("\n").map(&:strip) + base-uri 'none' + child-src 'self' blob: https://cb6e6126.ngrok.io + connect-src 'self' data: blob: https://cb6e6126.ngrok.io ws://cb6e6126.ngrok.io:4000 + default-src 'none' + font-src 'self' https://cb6e6126.ngrok.io + form-action 'self' + frame-ancestors 'none' + frame-src 'self' https: + img-src 'self' data: blob: https://cb6e6126.ngrok.io + manifest-src 'self' https://cb6e6126.ngrok.io + media-src 'self' data: https://cb6e6126.ngrok.io + script-src 'self' https://cb6e6126.ngrok.io 'wasm-unsafe-eval' + style-src 'self' https://cb6e6126.ngrok.io 'nonce-ZbA+JmE7+bK8F5qvADZHuQ==' + worker-src 'self' blob: https://cb6e6126.ngrok.io + CSP end end From 19f0590795500c2a93baa317b79b53efaca2ec88 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 13 Mar 2024 04:33:03 -0400 Subject: [PATCH 69/96] Add basic coverage for `TagSearchService` class (#29319) --- spec/services/tag_search_service_spec.rb | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 spec/services/tag_search_service_spec.rb diff --git a/spec/services/tag_search_service_spec.rb b/spec/services/tag_search_service_spec.rb new file mode 100644 index 0000000000..de42e54071 --- /dev/null +++ b/spec/services/tag_search_service_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe TagSearchService do + describe '#call' do + let!(:one) { Fabricate(:tag, name: 'one') } + + before { Fabricate(:tag, name: 'two') } + + it 'runs a search for tags' do + results = subject.call('#one', limit: 5) + + expect(results) + .to have_attributes( + size: 1, + first: eq(one) + ) + end + end +end From 3eaac3af73eac44accf4abefb273486e90c4c9dd Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 13 Mar 2024 04:38:57 -0400 Subject: [PATCH 70/96] Use `before_all` block to setup `requests/cache_spec` data (#29437) --- spec/rails_helper.rb | 1 + spec/requests/cache_spec.rb | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index 3e84d68738..89fc25bcbd 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -21,6 +21,7 @@ require 'paperclip/matchers' require 'capybara/rspec' require 'chewy/rspec' require 'email_spec/rspec' +require 'test_prof/recipes/rspec/before_all' Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f } diff --git a/spec/requests/cache_spec.rb b/spec/requests/cache_spec.rb index c56eec16c5..91e5b022e3 100644 --- a/spec/requests/cache_spec.rb +++ b/spec/requests/cache_spec.rb @@ -39,7 +39,7 @@ module TestEndpoints /api/v1/accounts/lookup?acct=alice /api/v1/statuses/110224538612341312 /api/v1/statuses/110224538612341312/context - /api/v1/polls/12345 + /api/v1/polls/123456789 /api/v1/trends/statuses /api/v1/directory ).freeze @@ -166,14 +166,18 @@ describe 'Caching behavior' do ActionController::Base.allow_forgery_protection = old end - let(:alice) { Fabricate(:account, username: 'alice') } - let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Moderator')) } + let(:alice) { Account.find_by(username: 'alice') } + let(:user) { User.find_by(email: 'user@host.example') } + let(:token) { Doorkeeper::AccessToken.find_by(resource_owner_id: user.id) } - before do - status = Fabricate(:status, account: alice, id: '110224538612341312') - Fabricate(:status, account: alice, id: '110224538643211312', visibility: :private) + before_all do + alice = Fabricate(:account, username: 'alice') + user = Fabricate(:user, email: 'user@host.example', role: UserRole.find_by(name: 'Moderator')) + status = Fabricate(:status, account: alice, id: 110_224_538_612_341_312) + Fabricate(:status, account: alice, id: 110_224_538_643_211_312, visibility: :private) Fabricate(:invite, code: 'abcdef') - Fabricate(:poll, status: status, account: alice, id: '12345') + Fabricate(:poll, status: status, account: alice, id: 123_456_789) + Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read') user.account.follow!(alice) end @@ -321,8 +325,6 @@ describe 'Caching behavior' do end context 'with an auth token' do - let!(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read') } - TestEndpoints::ALWAYS_CACHED.each do |endpoint| describe endpoint do before do @@ -585,8 +587,6 @@ describe 'Caching behavior' do end context 'with an auth token' do - let!(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: 'read') } - TestEndpoints::ALWAYS_CACHED.each do |endpoint| describe endpoint do before do From 469028b6d3788c1b1e535d6d0b1f9f6e91e26c33 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 13 Mar 2024 04:39:26 -0400 Subject: [PATCH 71/96] Remove unneeded `type: :service` from spec/services files (#29304) --- spec/services/account_search_service_spec.rb | 2 +- spec/services/account_statuses_cleanup_service_spec.rb | 2 +- .../activitypub/fetch_featured_collection_service_spec.rb | 2 +- .../activitypub/fetch_featured_tags_collection_service_spec.rb | 2 +- spec/services/activitypub/fetch_remote_account_service_spec.rb | 2 +- spec/services/activitypub/fetch_remote_actor_service_spec.rb | 2 +- spec/services/activitypub/fetch_remote_key_service_spec.rb | 2 +- spec/services/activitypub/fetch_remote_status_service_spec.rb | 2 +- spec/services/activitypub/fetch_replies_service_spec.rb | 2 +- spec/services/activitypub/process_account_service_spec.rb | 2 +- spec/services/activitypub/process_collection_service_spec.rb | 2 +- spec/services/activitypub/process_status_update_service_spec.rb | 2 +- spec/services/activitypub/synchronize_followers_service_spec.rb | 2 +- spec/services/after_block_domain_from_account_service_spec.rb | 2 +- spec/services/after_block_service_spec.rb | 2 +- spec/services/app_sign_up_service_spec.rb | 2 +- spec/services/authorize_follow_service_spec.rb | 2 +- spec/services/backup_service_spec.rb | 2 +- spec/services/batched_remove_status_service_spec.rb | 2 +- spec/services/block_domain_service_spec.rb | 2 +- spec/services/block_service_spec.rb | 2 +- spec/services/bootstrap_timeline_service_spec.rb | 2 +- spec/services/clear_domain_media_service_spec.rb | 2 +- spec/services/delete_account_service_spec.rb | 2 +- spec/services/fan_out_on_write_service_spec.rb | 2 +- spec/services/favourite_service_spec.rb | 2 +- spec/services/fetch_link_card_service_spec.rb | 2 +- spec/services/fetch_oembed_service_spec.rb | 2 +- spec/services/fetch_remote_status_service_spec.rb | 2 +- spec/services/fetch_resource_service_spec.rb | 2 +- spec/services/follow_service_spec.rb | 2 +- spec/services/import_service_spec.rb | 2 +- spec/services/mute_service_spec.rb | 2 +- spec/services/notify_service_spec.rb | 2 +- spec/services/post_status_service_spec.rb | 2 +- spec/services/precompute_feed_service_spec.rb | 2 +- spec/services/process_mentions_service_spec.rb | 2 +- spec/services/purge_domain_service_spec.rb | 2 +- spec/services/reblog_service_spec.rb | 2 +- spec/services/reject_follow_service_spec.rb | 2 +- spec/services/remove_from_followers_service_spec.rb | 2 +- spec/services/remove_status_service_spec.rb | 2 +- spec/services/report_service_spec.rb | 2 +- spec/services/resolve_account_service_spec.rb | 2 +- spec/services/resolve_url_service_spec.rb | 2 +- spec/services/search_service_spec.rb | 2 +- spec/services/software_update_check_service_spec.rb | 2 +- spec/services/suspend_account_service_spec.rb | 2 +- spec/services/translate_status_service_spec.rb | 2 +- spec/services/unallow_domain_service_spec.rb | 2 +- spec/services/unblock_domain_service_spec.rb | 2 +- spec/services/unblock_service_spec.rb | 2 +- spec/services/unfollow_service_spec.rb | 2 +- spec/services/unsuspend_account_service_spec.rb | 2 +- spec/services/update_account_service_spec.rb | 2 +- spec/services/update_status_service_spec.rb | 2 +- spec/services/verify_link_service_spec.rb | 2 +- 57 files changed, 57 insertions(+), 57 deletions(-) diff --git a/spec/services/account_search_service_spec.rb b/spec/services/account_search_service_spec.rb index 4f89cd220c..5ec0885903 100644 --- a/spec/services/account_search_service_spec.rb +++ b/spec/services/account_search_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -describe AccountSearchService, type: :service do +describe AccountSearchService do describe '#call' do context 'with a query to ignore' do it 'returns empty array for missing query' do diff --git a/spec/services/account_statuses_cleanup_service_spec.rb b/spec/services/account_statuses_cleanup_service_spec.rb index 0ac113f105..403c4632d7 100644 --- a/spec/services/account_statuses_cleanup_service_spec.rb +++ b/spec/services/account_statuses_cleanup_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -describe AccountStatusesCleanupService, type: :service do +describe AccountStatusesCleanupService do let(:account) { Fabricate(:account, username: 'alice', domain: nil) } let(:account_policy) { Fabricate(:account_statuses_cleanup_policy, account: account) } let!(:unrelated_status) { Fabricate(:status, created_at: 3.years.ago) } diff --git a/spec/services/activitypub/fetch_featured_collection_service_spec.rb b/spec/services/activitypub/fetch_featured_collection_service_spec.rb index dab204406b..7ea87922ac 100644 --- a/spec/services/activitypub/fetch_featured_collection_service_spec.rb +++ b/spec/services/activitypub/fetch_featured_collection_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe ActivityPub::FetchFeaturedCollectionService, type: :service do +RSpec.describe ActivityPub::FetchFeaturedCollectionService do subject { described_class.new } let(:actor) { Fabricate(:account, domain: 'example.com', uri: 'https://example.com/account', featured_collection_url: 'https://example.com/account/pinned') } diff --git a/spec/services/activitypub/fetch_featured_tags_collection_service_spec.rb b/spec/services/activitypub/fetch_featured_tags_collection_service_spec.rb index 638278a10e..59367b1e32 100644 --- a/spec/services/activitypub/fetch_featured_tags_collection_service_spec.rb +++ b/spec/services/activitypub/fetch_featured_tags_collection_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe ActivityPub::FetchFeaturedTagsCollectionService, type: :service do +RSpec.describe ActivityPub::FetchFeaturedTagsCollectionService do subject { described_class.new } let(:collection_url) { 'https://example.com/account/tags' } diff --git a/spec/services/activitypub/fetch_remote_account_service_spec.rb b/spec/services/activitypub/fetch_remote_account_service_spec.rb index 799a70d091..789a705c41 100644 --- a/spec/services/activitypub/fetch_remote_account_service_spec.rb +++ b/spec/services/activitypub/fetch_remote_account_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe ActivityPub::FetchRemoteAccountService, type: :service do +RSpec.describe ActivityPub::FetchRemoteAccountService do subject { described_class.new } let!(:actor) do diff --git a/spec/services/activitypub/fetch_remote_actor_service_spec.rb b/spec/services/activitypub/fetch_remote_actor_service_spec.rb index 4ce42ea560..025051e9fa 100644 --- a/spec/services/activitypub/fetch_remote_actor_service_spec.rb +++ b/spec/services/activitypub/fetch_remote_actor_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe ActivityPub::FetchRemoteActorService, type: :service do +RSpec.describe ActivityPub::FetchRemoteActorService do subject { described_class.new } let!(:actor) do diff --git a/spec/services/activitypub/fetch_remote_key_service_spec.rb b/spec/services/activitypub/fetch_remote_key_service_spec.rb index 478778cc9f..b6fcf3f479 100644 --- a/spec/services/activitypub/fetch_remote_key_service_spec.rb +++ b/spec/services/activitypub/fetch_remote_key_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe ActivityPub::FetchRemoteKeyService, type: :service do +RSpec.describe ActivityPub::FetchRemoteKeyService do subject { described_class.new } let(:webfinger) { { subject: 'acct:alice@example.com', links: [{ rel: 'self', href: 'https://example.com/alice' }] } } diff --git a/spec/services/activitypub/fetch_remote_status_service_spec.rb b/spec/services/activitypub/fetch_remote_status_service_spec.rb index 0fb32d20b1..a86f141fe0 100644 --- a/spec/services/activitypub/fetch_remote_status_service_spec.rb +++ b/spec/services/activitypub/fetch_remote_status_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe ActivityPub::FetchRemoteStatusService, type: :service do +RSpec.describe ActivityPub::FetchRemoteStatusService do include ActionView::Helpers::TextHelper subject { described_class.new } diff --git a/spec/services/activitypub/fetch_replies_service_spec.rb b/spec/services/activitypub/fetch_replies_service_spec.rb index 8e1f606e26..e7d8d3528a 100644 --- a/spec/services/activitypub/fetch_replies_service_spec.rb +++ b/spec/services/activitypub/fetch_replies_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe ActivityPub::FetchRepliesService, type: :service do +RSpec.describe ActivityPub::FetchRepliesService do subject { described_class.new } let(:actor) { Fabricate(:account, domain: 'example.com', uri: 'http://example.com/account') } diff --git a/spec/services/activitypub/process_account_service_spec.rb b/spec/services/activitypub/process_account_service_spec.rb index b13869f357..8b80dafe45 100644 --- a/spec/services/activitypub/process_account_service_spec.rb +++ b/spec/services/activitypub/process_account_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe ActivityPub::ProcessAccountService, type: :service do +RSpec.describe ActivityPub::ProcessAccountService do subject { described_class.new } context 'with property values, an avatar, and a profile header' do diff --git a/spec/services/activitypub/process_collection_service_spec.rb b/spec/services/activitypub/process_collection_service_spec.rb index 63502c546e..74df0f9106 100644 --- a/spec/services/activitypub/process_collection_service_spec.rb +++ b/spec/services/activitypub/process_collection_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe ActivityPub::ProcessCollectionService, type: :service do +RSpec.describe ActivityPub::ProcessCollectionService do subject { described_class.new } let(:actor) { Fabricate(:account, domain: 'example.com', uri: 'http://example.com/account') } diff --git a/spec/services/activitypub/process_status_update_service_spec.rb b/spec/services/activitypub/process_status_update_service_spec.rb index 67f2f27276..e451d15dc0 100644 --- a/spec/services/activitypub/process_status_update_service_spec.rb +++ b/spec/services/activitypub/process_status_update_service_spec.rb @@ -6,7 +6,7 @@ def poll_option_json(name, votes) { type: 'Note', name: name, replies: { type: 'Collection', totalItems: votes } } end -RSpec.describe ActivityPub::ProcessStatusUpdateService, type: :service do +RSpec.describe ActivityPub::ProcessStatusUpdateService do subject { described_class.new } let!(:status) { Fabricate(:status, text: 'Hello world', account: Fabricate(:account, domain: 'example.com')) } diff --git a/spec/services/activitypub/synchronize_followers_service_spec.rb b/spec/services/activitypub/synchronize_followers_service_spec.rb index f62376ab95..648f9a3321 100644 --- a/spec/services/activitypub/synchronize_followers_service_spec.rb +++ b/spec/services/activitypub/synchronize_followers_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe ActivityPub::SynchronizeFollowersService, type: :service do +RSpec.describe ActivityPub::SynchronizeFollowersService do subject { described_class.new } let(:actor) { Fabricate(:account, domain: 'example.com', uri: 'http://example.com/account', inbox_url: 'http://example.com/inbox') } diff --git a/spec/services/after_block_domain_from_account_service_spec.rb b/spec/services/after_block_domain_from_account_service_spec.rb index 05af125997..2fce424b1a 100644 --- a/spec/services/after_block_domain_from_account_service_spec.rb +++ b/spec/services/after_block_domain_from_account_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe AfterBlockDomainFromAccountService, type: :service do +RSpec.describe AfterBlockDomainFromAccountService do subject { described_class.new } let!(:wolf) { Fabricate(:account, username: 'wolf', domain: 'evil.org', inbox_url: 'https://evil.org/inbox', protocol: :activitypub) } diff --git a/spec/services/after_block_service_spec.rb b/spec/services/after_block_service_spec.rb index d81bba1d8d..82825dad98 100644 --- a/spec/services/after_block_service_spec.rb +++ b/spec/services/after_block_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe AfterBlockService, type: :service do +RSpec.describe AfterBlockService do subject { described_class.new.call(account, target_account) } let(:account) { Fabricate(:account) } diff --git a/spec/services/app_sign_up_service_spec.rb b/spec/services/app_sign_up_service_spec.rb index b37b6da1f0..ec7b7516f9 100644 --- a/spec/services/app_sign_up_service_spec.rb +++ b/spec/services/app_sign_up_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe AppSignUpService, type: :service do +RSpec.describe AppSignUpService do subject { described_class.new } let(:app) { Fabricate(:application, scopes: 'read write') } diff --git a/spec/services/authorize_follow_service_spec.rb b/spec/services/authorize_follow_service_spec.rb index 602250ee96..be2a864185 100644 --- a/spec/services/authorize_follow_service_spec.rb +++ b/spec/services/authorize_follow_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe AuthorizeFollowService, type: :service do +RSpec.describe AuthorizeFollowService do subject { described_class.new } let(:sender) { Fabricate(:account, username: 'alice') } diff --git a/spec/services/backup_service_spec.rb b/spec/services/backup_service_spec.rb index 806ba18323..b4cb60083b 100644 --- a/spec/services/backup_service_spec.rb +++ b/spec/services/backup_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe BackupService, type: :service do +RSpec.describe BackupService do subject(:service_call) { described_class.new.call(backup) } let!(:user) { Fabricate(:user) } diff --git a/spec/services/batched_remove_status_service_spec.rb b/spec/services/batched_remove_status_service_spec.rb index 1c59d5ed06..e501b9ba84 100644 --- a/spec/services/batched_remove_status_service_spec.rb +++ b/spec/services/batched_remove_status_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe BatchedRemoveStatusService, :sidekiq_inline, type: :service do +RSpec.describe BatchedRemoveStatusService, :sidekiq_inline do subject { described_class.new } let!(:alice) { Fabricate(:account) } diff --git a/spec/services/block_domain_service_spec.rb b/spec/services/block_domain_service_spec.rb index 7ad00fff68..0f278293a8 100644 --- a/spec/services/block_domain_service_spec.rb +++ b/spec/services/block_domain_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe BlockDomainService, type: :service do +RSpec.describe BlockDomainService do subject { described_class.new } let!(:bad_account) { Fabricate(:account, username: 'badguy666', domain: 'evil.org') } diff --git a/spec/services/block_service_spec.rb b/spec/services/block_service_spec.rb index 9e4ff8e598..e72e528259 100644 --- a/spec/services/block_service_spec.rb +++ b/spec/services/block_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe BlockService, type: :service do +RSpec.describe BlockService do subject { described_class.new } let(:sender) { Fabricate(:account, username: 'alice') } diff --git a/spec/services/bootstrap_timeline_service_spec.rb b/spec/services/bootstrap_timeline_service_spec.rb index 721a0337fd..c99813bceb 100644 --- a/spec/services/bootstrap_timeline_service_spec.rb +++ b/spec/services/bootstrap_timeline_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe BootstrapTimelineService, type: :service do +RSpec.describe BootstrapTimelineService do subject { described_class.new } context 'when the new user has registered from an invite' do diff --git a/spec/services/clear_domain_media_service_spec.rb b/spec/services/clear_domain_media_service_spec.rb index 9766e62de8..f1e5097a99 100644 --- a/spec/services/clear_domain_media_service_spec.rb +++ b/spec/services/clear_domain_media_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe ClearDomainMediaService, type: :service do +RSpec.describe ClearDomainMediaService do subject { described_class.new } let!(:bad_account) { Fabricate(:account, username: 'badguy666', domain: 'evil.org') } diff --git a/spec/services/delete_account_service_spec.rb b/spec/services/delete_account_service_spec.rb index 1965b7daab..de93862435 100644 --- a/spec/services/delete_account_service_spec.rb +++ b/spec/services/delete_account_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe DeleteAccountService, type: :service do +RSpec.describe DeleteAccountService do shared_examples 'common behavior' do subject { described_class.new.call(account) } diff --git a/spec/services/fan_out_on_write_service_spec.rb b/spec/services/fan_out_on_write_service_spec.rb index 77237dffbd..b51d802a5b 100644 --- a/spec/services/fan_out_on_write_service_spec.rb +++ b/spec/services/fan_out_on_write_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe FanOutOnWriteService, type: :service do +RSpec.describe FanOutOnWriteService do subject { described_class.new } let(:last_active_at) { Time.now.utc } diff --git a/spec/services/favourite_service_spec.rb b/spec/services/favourite_service_spec.rb index 3143e7b669..d0f1ff17c1 100644 --- a/spec/services/favourite_service_spec.rb +++ b/spec/services/favourite_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe FavouriteService, type: :service do +RSpec.describe FavouriteService do subject { described_class.new } let(:sender) { Fabricate(:account, username: 'alice') } diff --git a/spec/services/fetch_link_card_service_spec.rb b/spec/services/fetch_link_card_service_spec.rb index d8ca310b28..63ebc3b978 100644 --- a/spec/services/fetch_link_card_service_spec.rb +++ b/spec/services/fetch_link_card_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe FetchLinkCardService, type: :service do +RSpec.describe FetchLinkCardService do subject { described_class.new } let(:html) { 'Hello world' } diff --git a/spec/services/fetch_oembed_service_spec.rb b/spec/services/fetch_oembed_service_spec.rb index 777cbae3fb..c9f84048b6 100644 --- a/spec/services/fetch_oembed_service_spec.rb +++ b/spec/services/fetch_oembed_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -describe FetchOEmbedService, type: :service do +describe FetchOEmbedService do subject { described_class.new } before do diff --git a/spec/services/fetch_remote_status_service_spec.rb b/spec/services/fetch_remote_status_service_spec.rb index 798740c9b3..a9c61e7b4e 100644 --- a/spec/services/fetch_remote_status_service_spec.rb +++ b/spec/services/fetch_remote_status_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe FetchRemoteStatusService, type: :service do +RSpec.describe FetchRemoteStatusService do let(:account) { Fabricate(:account, domain: 'example.org', uri: 'https://example.org/foo') } let(:prefetched_body) { nil } diff --git a/spec/services/fetch_resource_service_spec.rb b/spec/services/fetch_resource_service_spec.rb index 78037a06ce..ee4810571b 100644 --- a/spec/services/fetch_resource_service_spec.rb +++ b/spec/services/fetch_resource_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe FetchResourceService, type: :service do +RSpec.describe FetchResourceService do describe '#call' do subject { described_class.new.call(url) } diff --git a/spec/services/follow_service_spec.rb b/spec/services/follow_service_spec.rb index cf4de34c89..bea2412a3d 100644 --- a/spec/services/follow_service_spec.rb +++ b/spec/services/follow_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe FollowService, type: :service do +RSpec.describe FollowService do subject { described_class.new } let(:sender) { Fabricate(:account, username: 'alice') } diff --git a/spec/services/import_service_spec.rb b/spec/services/import_service_spec.rb index 7d005c8a11..90877d9997 100644 --- a/spec/services/import_service_spec.rb +++ b/spec/services/import_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe ImportService, :sidekiq_inline, type: :service do +RSpec.describe ImportService, :sidekiq_inline do include RoutingHelper let!(:account) { Fabricate(:account, locked: false) } diff --git a/spec/services/mute_service_spec.rb b/spec/services/mute_service_spec.rb index a2ca2ffe13..681afc0b16 100644 --- a/spec/services/mute_service_spec.rb +++ b/spec/services/mute_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe MuteService, type: :service do +RSpec.describe MuteService do subject { described_class.new.call(account, target_account) } let(:account) { Fabricate(:account) } diff --git a/spec/services/notify_service_spec.rb b/spec/services/notify_service_spec.rb index 57ff326c73..514f634d7f 100644 --- a/spec/services/notify_service_spec.rb +++ b/spec/services/notify_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe NotifyService, type: :service do +RSpec.describe NotifyService do subject { described_class.new.call(recipient, type, activity) } let(:user) { Fabricate(:user) } diff --git a/spec/services/post_status_service_spec.rb b/spec/services/post_status_service_spec.rb index acbebc5056..ee68092a36 100644 --- a/spec/services/post_status_service_spec.rb +++ b/spec/services/post_status_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe PostStatusService, type: :service do +RSpec.describe PostStatusService do subject { described_class.new } it 'creates a new status' do diff --git a/spec/services/precompute_feed_service_spec.rb b/spec/services/precompute_feed_service_spec.rb index 663babae8a..9b2c6c280f 100644 --- a/spec/services/precompute_feed_service_spec.rb +++ b/spec/services/precompute_feed_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe PrecomputeFeedService, type: :service do +RSpec.describe PrecomputeFeedService do subject { described_class.new } describe 'call' do diff --git a/spec/services/process_mentions_service_spec.rb b/spec/services/process_mentions_service_spec.rb index 0db73c41fa..2c202d3e57 100644 --- a/spec/services/process_mentions_service_spec.rb +++ b/spec/services/process_mentions_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe ProcessMentionsService, type: :service do +RSpec.describe ProcessMentionsService do subject { described_class.new } let(:account) { Fabricate(:account, username: 'alice') } diff --git a/spec/services/purge_domain_service_spec.rb b/spec/services/purge_domain_service_spec.rb index 6d8af14deb..a5c49160db 100644 --- a/spec/services/purge_domain_service_spec.rb +++ b/spec/services/purge_domain_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe PurgeDomainService, type: :service do +RSpec.describe PurgeDomainService do subject { described_class.new } let(:domain) { 'obsolete.org' } diff --git a/spec/services/reblog_service_spec.rb b/spec/services/reblog_service_spec.rb index e5d0a2d6ce..f807536a2e 100644 --- a/spec/services/reblog_service_spec.rb +++ b/spec/services/reblog_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe ReblogService, type: :service do +RSpec.describe ReblogService do let(:alice) { Fabricate(:account, username: 'alice') } context 'when creates a reblog with appropriate visibility' do diff --git a/spec/services/reject_follow_service_spec.rb b/spec/services/reject_follow_service_spec.rb index 48316a6c4d..98aaf70478 100644 --- a/spec/services/reject_follow_service_spec.rb +++ b/spec/services/reject_follow_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe RejectFollowService, type: :service do +RSpec.describe RejectFollowService do subject { described_class.new } let(:sender) { Fabricate(:account, username: 'alice') } diff --git a/spec/services/remove_from_followers_service_spec.rb b/spec/services/remove_from_followers_service_spec.rb index 21da38a97b..d6420f7674 100644 --- a/spec/services/remove_from_followers_service_spec.rb +++ b/spec/services/remove_from_followers_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe RemoveFromFollowersService, type: :service do +RSpec.describe RemoveFromFollowersService do subject { described_class.new } let(:bob) { Fabricate(:account, username: 'bob') } diff --git a/spec/services/remove_status_service_spec.rb b/spec/services/remove_status_service_spec.rb index 109acfb09a..b385cfa55b 100644 --- a/spec/services/remove_status_service_spec.rb +++ b/spec/services/remove_status_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe RemoveStatusService, :sidekiq_inline, type: :service do +RSpec.describe RemoveStatusService, :sidekiq_inline do subject { described_class.new } let!(:alice) { Fabricate(:account) } diff --git a/spec/services/report_service_spec.rb b/spec/services/report_service_spec.rb index 2caeb189d9..141dc8c3be 100644 --- a/spec/services/report_service_spec.rb +++ b/spec/services/report_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe ReportService, type: :service do +RSpec.describe ReportService do subject { described_class.new } let(:source_account) { Fabricate(:account) } diff --git a/spec/services/resolve_account_service_spec.rb b/spec/services/resolve_account_service_spec.rb index b82e5b3865..316266c8f8 100644 --- a/spec/services/resolve_account_service_spec.rb +++ b/spec/services/resolve_account_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe ResolveAccountService, type: :service do +RSpec.describe ResolveAccountService do subject { described_class.new } before do diff --git a/spec/services/resolve_url_service_spec.rb b/spec/services/resolve_url_service_spec.rb index 5270cc10dd..3d59a55f10 100644 --- a/spec/services/resolve_url_service_spec.rb +++ b/spec/services/resolve_url_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -describe ResolveURLService, type: :service do +describe ResolveURLService do subject { described_class.new } describe '#call' do diff --git a/spec/services/search_service_spec.rb b/spec/services/search_service_spec.rb index 39adf43876..394ee7c3a6 100644 --- a/spec/services/search_service_spec.rb +++ b/spec/services/search_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -describe SearchService, type: :service do +describe SearchService do subject { described_class.new } describe '#call' do diff --git a/spec/services/software_update_check_service_spec.rb b/spec/services/software_update_check_service_spec.rb index c8821348ac..a1eb9d86e9 100644 --- a/spec/services/software_update_check_service_spec.rb +++ b/spec/services/software_update_check_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe SoftwareUpdateCheckService, type: :service do +RSpec.describe SoftwareUpdateCheckService do subject { described_class.new } shared_examples 'when the feature is enabled' do diff --git a/spec/services/suspend_account_service_spec.rb b/spec/services/suspend_account_service_spec.rb index 4a5f8a0b6b..d62f7ef0d6 100644 --- a/spec/services/suspend_account_service_spec.rb +++ b/spec/services/suspend_account_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe SuspendAccountService, :sidekiq_inline, type: :service do +RSpec.describe SuspendAccountService, :sidekiq_inline do shared_examples 'common behavior' do subject { described_class.new.call(account) } diff --git a/spec/services/translate_status_service_spec.rb b/spec/services/translate_status_service_spec.rb index 5f6418f5d6..0779fbbe6c 100644 --- a/spec/services/translate_status_service_spec.rb +++ b/spec/services/translate_status_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe TranslateStatusService, type: :service do +RSpec.describe TranslateStatusService do subject(:service) { described_class.new } let(:status) { Fabricate(:status, text: text, spoiler_text: spoiler_text, language: 'en', preloadable_poll: poll, media_attachments: media_attachments) } diff --git a/spec/services/unallow_domain_service_spec.rb b/spec/services/unallow_domain_service_spec.rb index 383977d352..caec3d596f 100644 --- a/spec/services/unallow_domain_service_spec.rb +++ b/spec/services/unallow_domain_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe UnallowDomainService, type: :service do +RSpec.describe UnallowDomainService do subject { described_class.new } let(:bad_domain) { 'evil.org' } diff --git a/spec/services/unblock_domain_service_spec.rb b/spec/services/unblock_domain_service_spec.rb index 3d6d82ff68..289ddfc218 100644 --- a/spec/services/unblock_domain_service_spec.rb +++ b/spec/services/unblock_domain_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -describe UnblockDomainService, type: :service do +describe UnblockDomainService do subject { described_class.new } describe 'call' do diff --git a/spec/services/unblock_service_spec.rb b/spec/services/unblock_service_spec.rb index 9813c5e7fa..4c9fcb9aee 100644 --- a/spec/services/unblock_service_spec.rb +++ b/spec/services/unblock_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe UnblockService, type: :service do +RSpec.describe UnblockService do subject { described_class.new } let(:sender) { Fabricate(:account, username: 'alice') } diff --git a/spec/services/unfollow_service_spec.rb b/spec/services/unfollow_service_spec.rb index 18a25a676d..bba17a8d27 100644 --- a/spec/services/unfollow_service_spec.rb +++ b/spec/services/unfollow_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe UnfollowService, type: :service do +RSpec.describe UnfollowService do subject { described_class.new } let(:sender) { Fabricate(:account, username: 'alice') } diff --git a/spec/services/unsuspend_account_service_spec.rb b/spec/services/unsuspend_account_service_spec.rb index c848767cd1..79a4441d3e 100644 --- a/spec/services/unsuspend_account_service_spec.rb +++ b/spec/services/unsuspend_account_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe UnsuspendAccountService, type: :service do +RSpec.describe UnsuspendAccountService do shared_context 'with common context' do subject { described_class.new.call(account) } diff --git a/spec/services/update_account_service_spec.rb b/spec/services/update_account_service_spec.rb index 9f4e36862d..5204f1f34d 100644 --- a/spec/services/update_account_service_spec.rb +++ b/spec/services/update_account_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe UpdateAccountService, type: :service do +RSpec.describe UpdateAccountService do subject { described_class.new } describe 'switching form locked to unlocked accounts', :sidekiq_inline do diff --git a/spec/services/update_status_service_spec.rb b/spec/services/update_status_service_spec.rb index 55651c305d..930f673e10 100644 --- a/spec/services/update_status_service_spec.rb +++ b/spec/services/update_status_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe UpdateStatusService, type: :service do +RSpec.describe UpdateStatusService do subject { described_class.new } context 'when nothing changes' do diff --git a/spec/services/verify_link_service_spec.rb b/spec/services/verify_link_service_spec.rb index 2895072420..0ce8c9a904 100644 --- a/spec/services/verify_link_service_spec.rb +++ b/spec/services/verify_link_service_spec.rb @@ -2,7 +2,7 @@ require 'rails_helper' -RSpec.describe VerifyLinkService, type: :service do +RSpec.describe VerifyLinkService do subject { described_class.new } context 'when given a local account' do From 8349b45d6038c4d029b6371ea1caa40c48a8ea3b Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 13 Mar 2024 04:46:11 -0400 Subject: [PATCH 72/96] Accept extra args that we wont verify in `ap/activity/add_spec` (#29005) --- spec/lib/activitypub/activity/add_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/lib/activitypub/activity/add_spec.rb b/spec/lib/activitypub/activity/add_spec.rb index ec6df01716..c0abd9f393 100644 --- a/spec/lib/activitypub/activity/add_spec.rb +++ b/spec/lib/activitypub/activity/add_spec.rb @@ -50,7 +50,7 @@ RSpec.describe ActivityPub::Activity::Add do end it 'fetches the status and pins it' do - allow(service_stub).to receive(:call) do |uri, id: true, on_behalf_of: nil, request_id: nil| # rubocop:disable Lint/UnusedBlockArgument + allow(service_stub).to receive(:call) do |uri, id: true, on_behalf_of: nil, **| expect(uri).to eq 'https://example.com/unknown' expect(id).to be true expect(on_behalf_of&.following?(sender)).to be true @@ -64,7 +64,7 @@ RSpec.describe ActivityPub::Activity::Add do context 'when there is no local follower' do it 'tries to fetch the status' do - allow(service_stub).to receive(:call) do |uri, id: true, on_behalf_of: nil, request_id: nil| # rubocop:disable Lint/UnusedBlockArgument + allow(service_stub).to receive(:call) do |uri, id: true, on_behalf_of: nil, **| expect(uri).to eq 'https://example.com/unknown' expect(id).to be true expect(on_behalf_of).to be_nil From 71eecbfa1fa5a8c2a06d232260ac9d3a4bd77ddb Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 13 Mar 2024 04:47:09 -0400 Subject: [PATCH 73/96] Move `api/v2/filters/*` to request spec (#28956) --- .../api/v2/filters/keywords_spec.rb} | 31 ++++++++----------- .../api/v2/filters/statuses_spec.rb} | 25 ++++++--------- 2 files changed, 23 insertions(+), 33 deletions(-) rename spec/{controllers/api/v2/filters/keywords_controller_spec.rb => requests/api/v2/filters/keywords_spec.rb} (79%) rename spec/{controllers/api/v2/filters/statuses_controller_spec.rb => requests/api/v2/filters/statuses_spec.rb} (81%) diff --git a/spec/controllers/api/v2/filters/keywords_controller_spec.rb b/spec/requests/api/v2/filters/keywords_spec.rb similarity index 79% rename from spec/controllers/api/v2/filters/keywords_controller_spec.rb rename to spec/requests/api/v2/filters/keywords_spec.rb index 9f25237bcf..55fb2afd95 100644 --- a/spec/controllers/api/v2/filters/keywords_controller_spec.rb +++ b/spec/requests/api/v2/filters/keywords_spec.rb @@ -2,25 +2,20 @@ require 'rails_helper' -RSpec.describe Api::V2::Filters::KeywordsController do - render_views - +RSpec.describe 'API V2 Filters Keywords' do let(:user) { Fabricate(:user) } let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } let(:filter) { Fabricate(:custom_filter, account: user.account) } let(:other_user) { Fabricate(:user) } let(:other_filter) { Fabricate(:custom_filter, account: other_user.account) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #index' do + describe 'GET /api/v2/filters/:filter_id/keywords' do let(:scopes) { 'read:filters' } let!(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) } it 'returns http success' do - get :index, params: { filter_id: filter.id } + get "/api/v2/filters/#{filter.id}/keywords", headers: headers expect(response).to have_http_status(200) expect(body_as_json) .to contain_exactly( @@ -30,18 +25,18 @@ RSpec.describe Api::V2::Filters::KeywordsController do context "when trying to access another's user filters" do it 'returns http not found' do - get :index, params: { filter_id: other_filter.id } + get "/api/v2/filters/#{other_filter.id}/keywords", headers: headers expect(response).to have_http_status(404) end end end - describe 'POST #create' do + describe 'POST /api/v2/filters/:filter_id/keywords' do let(:scopes) { 'write:filters' } let(:filter_id) { filter.id } before do - post :create, params: { filter_id: filter_id, keyword: 'magic', whole_word: false } + post "/api/v2/filters/#{filter_id}/keywords", headers: headers, params: { keyword: 'magic', whole_word: false } end it 'creates a filter', :aggregate_failures do @@ -65,12 +60,12 @@ RSpec.describe Api::V2::Filters::KeywordsController do end end - describe 'GET #show' do + describe 'GET /api/v2/filters/keywords/:id' do let(:scopes) { 'read:filters' } let(:keyword) { Fabricate(:custom_filter_keyword, keyword: 'foo', whole_word: false, custom_filter: filter) } before do - get :show, params: { id: keyword.id } + get "/api/v2/filters/keywords/#{keyword.id}", headers: headers end it 'responds with the keyword', :aggregate_failures do @@ -90,12 +85,12 @@ RSpec.describe Api::V2::Filters::KeywordsController do end end - describe 'PUT #update' do + describe 'PUT /api/v2/filters/keywords/:id' do let(:scopes) { 'write:filters' } let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) } before do - get :update, params: { id: keyword.id, keyword: 'updated' } + put "/api/v2/filters/keywords/#{keyword.id}", headers: headers, params: { keyword: 'updated' } end it 'updates the keyword', :aggregate_failures do @@ -113,12 +108,12 @@ RSpec.describe Api::V2::Filters::KeywordsController do end end - describe 'DELETE #destroy' do + describe 'DELETE /api/v2/filters/keywords/:id' do let(:scopes) { 'write:filters' } let(:keyword) { Fabricate(:custom_filter_keyword, custom_filter: filter) } before do - delete :destroy, params: { id: keyword.id } + delete "/api/v2/filters/keywords/#{keyword.id}", headers: headers end it 'destroys the keyword', :aggregate_failures do diff --git a/spec/controllers/api/v2/filters/statuses_controller_spec.rb b/spec/requests/api/v2/filters/statuses_spec.rb similarity index 81% rename from spec/controllers/api/v2/filters/statuses_controller_spec.rb rename to spec/requests/api/v2/filters/statuses_spec.rb index d9df803971..26d2fb00e1 100644 --- a/spec/controllers/api/v2/filters/statuses_controller_spec.rb +++ b/spec/requests/api/v2/filters/statuses_spec.rb @@ -2,25 +2,20 @@ require 'rails_helper' -RSpec.describe Api::V2::Filters::StatusesController do - render_views - +RSpec.describe 'API V2 Filters Statuses' do let(:user) { Fabricate(:user) } let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } let(:filter) { Fabricate(:custom_filter, account: user.account) } let(:other_user) { Fabricate(:user) } let(:other_filter) { Fabricate(:custom_filter, account: other_user.account) } + let(:headers) { { 'Authorization' => "Bearer #{token.token}" } } - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #index' do + describe 'GET /api/v2/filters/:filter_id/statuses' do let(:scopes) { 'read:filters' } let!(:status_filter) { Fabricate(:custom_filter_status, custom_filter: filter) } it 'returns http success' do - get :index, params: { filter_id: filter.id } + get "/api/v2/filters/#{filter.id}/statuses", headers: headers expect(response).to have_http_status(200) expect(body_as_json) .to contain_exactly( @@ -30,7 +25,7 @@ RSpec.describe Api::V2::Filters::StatusesController do context "when trying to access another's user filters" do it 'returns http not found' do - get :index, params: { filter_id: other_filter.id } + get "/api/v2/filters/#{other_filter.id}/statuses", headers: headers expect(response).to have_http_status(404) end end @@ -42,7 +37,7 @@ RSpec.describe Api::V2::Filters::StatusesController do let!(:status) { Fabricate(:status) } before do - post :create, params: { filter_id: filter_id, status_id: status.id } + post "/api/v2/filters/#{filter_id}/statuses", headers: headers, params: { status_id: status.id } end it 'creates a filter', :aggregate_failures do @@ -65,12 +60,12 @@ RSpec.describe Api::V2::Filters::StatusesController do end end - describe 'GET #show' do + describe 'GET /api/v2/filters/statuses/:id' do let(:scopes) { 'read:filters' } let!(:status_filter) { Fabricate(:custom_filter_status, custom_filter: filter) } before do - get :show, params: { id: status_filter.id } + get "/api/v2/filters/statuses/#{status_filter.id}", headers: headers end it 'responds with the filter', :aggregate_failures do @@ -89,12 +84,12 @@ RSpec.describe Api::V2::Filters::StatusesController do end end - describe 'DELETE #destroy' do + describe 'DELETE /api/v2/filters/statuses/:id' do let(:scopes) { 'write:filters' } let(:status_filter) { Fabricate(:custom_filter_status, custom_filter: filter) } before do - delete :destroy, params: { id: status_filter.id } + delete "/api/v2/filters/statuses/#{status_filter.id}", headers: headers end it 'destroys the filter', :aggregate_failures do From 01b624c4a0d17ec24f6acf56298fe9e5e8a6dd49 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 13 Mar 2024 04:50:21 -0400 Subject: [PATCH 74/96] Use `normalizes` on `CustomFilter#context` value (#27602) --- app/models/custom_filter.rb | 6 +----- spec/models/custom_filter_spec.rb | 8 ++++++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/app/models/custom_filter.rb b/app/models/custom_filter.rb index 5e2d152e34..7c148e877f 100644 --- a/app/models/custom_filter.rb +++ b/app/models/custom_filter.rb @@ -41,7 +41,7 @@ class CustomFilter < ApplicationRecord validates :title, :context, presence: true validate :context_must_be_valid - before_validation :clean_up_contexts + normalizes :context, with: ->(context) { context.map(&:strip).filter_map(&:presence) } before_save :prepare_cache_invalidation! before_destroy :prepare_cache_invalidation! @@ -114,10 +114,6 @@ class CustomFilter < ApplicationRecord private - def clean_up_contexts - self.context = Array(context).map(&:strip).filter_map(&:presence) - end - def context_must_be_valid errors.add(:context, I18n.t('filters.errors.invalid_context')) if invalid_context_value? end diff --git a/spec/models/custom_filter_spec.rb b/spec/models/custom_filter_spec.rb index 9404936337..8ac9dbb896 100644 --- a/spec/models/custom_filter_spec.rb +++ b/spec/models/custom_filter_spec.rb @@ -32,4 +32,12 @@ RSpec.describe CustomFilter do expect(record).to model_have_error_on_field(:context) end end + + describe 'Normalizations' do + it 'cleans up context values' do + record = described_class.new(context: ['home', 'notifications', 'public ', '']) + + expect(record.context).to eq(%w(home notifications public)) + end + end end From 9754967d5fd37cf35b362d4429d320c1e5f94428 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 13 Mar 2024 04:51:44 -0400 Subject: [PATCH 75/96] Move `pagination_max_id` and `pagination_since_id` into api/base controller (#28844) --- app/controllers/api/base_controller.rb | 8 ++++++++ app/controllers/api/v1/accounts/statuses_controller.rb | 8 ++------ app/controllers/api/v1/admin/accounts_controller.rb | 8 ++------ .../api/v1/admin/canonical_email_blocks_controller.rb | 8 ++------ app/controllers/api/v1/admin/domain_allows_controller.rb | 8 ++------ app/controllers/api/v1/admin/domain_blocks_controller.rb | 8 ++------ .../api/v1/admin/email_domain_blocks_controller.rb | 8 ++------ app/controllers/api/v1/admin/ip_blocks_controller.rb | 8 ++------ app/controllers/api/v1/admin/reports_controller.rb | 8 ++------ app/controllers/api/v1/admin/tags_controller.rb | 8 ++------ .../trends/links/preview_card_providers_controller.rb | 8 ++------ app/controllers/api/v1/blocks_controller.rb | 8 ++------ app/controllers/api/v1/bookmarks_controller.rb | 8 ++------ .../api/v1/crypto/encrypted_messages_controller.rb | 8 ++------ app/controllers/api/v1/domain_blocks_controller.rb | 8 ++------ app/controllers/api/v1/endorsements_controller.rb | 8 ++------ app/controllers/api/v1/favourites_controller.rb | 8 ++------ app/controllers/api/v1/followed_tags_controller.rb | 8 ++------ app/controllers/api/v1/lists/accounts_controller.rb | 8 ++------ app/controllers/api/v1/mutes_controller.rb | 8 ++------ app/controllers/api/v1/notifications_controller.rb | 8 ++------ app/controllers/api/v1/scheduled_statuses_controller.rb | 8 ++------ app/controllers/api/v1/timelines/base_controller.rb | 8 ++------ 23 files changed, 52 insertions(+), 132 deletions(-) diff --git a/app/controllers/api/base_controller.rb b/app/controllers/api/base_controller.rb index 98fa1897ef..8bf9da2cfd 100644 --- a/app/controllers/api/base_controller.rb +++ b/app/controllers/api/base_controller.rb @@ -73,6 +73,14 @@ class Api::BaseController < ApplicationController protected + def pagination_max_id + pagination_collection.last.id + end + + def pagination_since_id + pagination_collection.first.id + end + def set_pagination_headers(next_path = nil, prev_path = nil) links = [] links << [next_path, [%w(rel next)]] if next_path diff --git a/app/controllers/api/v1/accounts/statuses_controller.rb b/app/controllers/api/v1/accounts/statuses_controller.rb index 6a994ff541..56d4e69091 100644 --- a/app/controllers/api/v1/accounts/statuses_controller.rb +++ b/app/controllers/api/v1/accounts/statuses_controller.rb @@ -51,11 +51,7 @@ class Api::V1::Accounts::StatusesController < Api::BaseController @statuses.size == limit_param(DEFAULT_STATUSES_LIMIT) end - def pagination_max_id - @statuses.last.id - end - - def pagination_since_id - @statuses.first.id + def pagination_collection + @statuses end end diff --git a/app/controllers/api/v1/admin/accounts_controller.rb b/app/controllers/api/v1/admin/accounts_controller.rb index ff9cae6398..06cebffcb6 100644 --- a/app/controllers/api/v1/admin/accounts_controller.rb +++ b/app/controllers/api/v1/admin/accounts_controller.rb @@ -137,12 +137,8 @@ class Api::V1::Admin::AccountsController < Api::BaseController api_v1_admin_accounts_url(pagination_params(min_id: pagination_since_id)) unless @accounts.empty? end - def pagination_max_id - @accounts.last.id - end - - def pagination_since_id - @accounts.first.id + def pagination_collection + @accounts end def records_continue? diff --git a/app/controllers/api/v1/admin/canonical_email_blocks_controller.rb b/app/controllers/api/v1/admin/canonical_email_blocks_controller.rb index 7b192b979f..f81e480bd7 100644 --- a/app/controllers/api/v1/admin/canonical_email_blocks_controller.rb +++ b/app/controllers/api/v1/admin/canonical_email_blocks_controller.rb @@ -77,12 +77,8 @@ class Api::V1::Admin::CanonicalEmailBlocksController < Api::BaseController api_v1_admin_canonical_email_blocks_url(pagination_params(min_id: pagination_since_id)) unless @canonical_email_blocks.empty? end - def pagination_max_id - @canonical_email_blocks.last.id - end - - def pagination_since_id - @canonical_email_blocks.first.id + def pagination_collection + @canonical_email_blocks end def records_continue? diff --git a/app/controllers/api/v1/admin/domain_allows_controller.rb b/app/controllers/api/v1/admin/domain_allows_controller.rb index dd54d67106..1841292843 100644 --- a/app/controllers/api/v1/admin/domain_allows_controller.rb +++ b/app/controllers/api/v1/admin/domain_allows_controller.rb @@ -73,12 +73,8 @@ class Api::V1::Admin::DomainAllowsController < Api::BaseController api_v1_admin_domain_allows_url(pagination_params(min_id: pagination_since_id)) unless @domain_allows.empty? end - def pagination_max_id - @domain_allows.last.id - end - - def pagination_since_id - @domain_allows.first.id + def pagination_collection + @domain_allows end def records_continue? diff --git a/app/controllers/api/v1/admin/domain_blocks_controller.rb b/app/controllers/api/v1/admin/domain_blocks_controller.rb index 2538c7c7c2..8cd90b7c52 100644 --- a/app/controllers/api/v1/admin/domain_blocks_controller.rb +++ b/app/controllers/api/v1/admin/domain_blocks_controller.rb @@ -84,12 +84,8 @@ class Api::V1::Admin::DomainBlocksController < Api::BaseController api_v1_admin_domain_blocks_url(pagination_params(min_id: pagination_since_id)) unless @domain_blocks.empty? end - def pagination_max_id - @domain_blocks.last.id - end - - def pagination_since_id - @domain_blocks.first.id + def pagination_collection + @domain_blocks end def records_continue? diff --git a/app/controllers/api/v1/admin/email_domain_blocks_controller.rb b/app/controllers/api/v1/admin/email_domain_blocks_controller.rb index df54b9f0a4..34489e19b4 100644 --- a/app/controllers/api/v1/admin/email_domain_blocks_controller.rb +++ b/app/controllers/api/v1/admin/email_domain_blocks_controller.rb @@ -70,12 +70,8 @@ class Api::V1::Admin::EmailDomainBlocksController < Api::BaseController api_v1_admin_email_domain_blocks_url(pagination_params(min_id: pagination_since_id)) unless @email_domain_blocks.empty? end - def pagination_max_id - @email_domain_blocks.last.id - end - - def pagination_since_id - @email_domain_blocks.first.id + def pagination_collection + @email_domain_blocks end def records_continue? diff --git a/app/controllers/api/v1/admin/ip_blocks_controller.rb b/app/controllers/api/v1/admin/ip_blocks_controller.rb index 61c1912344..0f666476c5 100644 --- a/app/controllers/api/v1/admin/ip_blocks_controller.rb +++ b/app/controllers/api/v1/admin/ip_blocks_controller.rb @@ -75,12 +75,8 @@ class Api::V1::Admin::IpBlocksController < Api::BaseController api_v1_admin_ip_blocks_url(pagination_params(min_id: pagination_since_id)) unless @ip_blocks.empty? end - def pagination_max_id - @ip_blocks.last.id - end - - def pagination_since_id - @ip_blocks.first.id + def pagination_collection + @ip_blocks end def records_continue? diff --git a/app/controllers/api/v1/admin/reports_controller.rb b/app/controllers/api/v1/admin/reports_controller.rb index 7129a5f6ca..f0598aa81e 100644 --- a/app/controllers/api/v1/admin/reports_controller.rb +++ b/app/controllers/api/v1/admin/reports_controller.rb @@ -101,12 +101,8 @@ class Api::V1::Admin::ReportsController < Api::BaseController api_v1_admin_reports_url(pagination_params(min_id: pagination_since_id)) unless @reports.empty? end - def pagination_max_id - @reports.last.id - end - - def pagination_since_id - @reports.first.id + def pagination_collection + @reports end def records_continue? diff --git a/app/controllers/api/v1/admin/tags_controller.rb b/app/controllers/api/v1/admin/tags_controller.rb index 6a7c9f5bf3..989e7e610a 100644 --- a/app/controllers/api/v1/admin/tags_controller.rb +++ b/app/controllers/api/v1/admin/tags_controller.rb @@ -56,12 +56,8 @@ class Api::V1::Admin::TagsController < Api::BaseController api_v1_admin_tags_url(pagination_params(min_id: pagination_since_id)) unless @tags.empty? end - def pagination_max_id - @tags.last.id - end - - def pagination_since_id - @tags.first.id + def pagination_collection + @tags end def records_continue? diff --git a/app/controllers/api/v1/admin/trends/links/preview_card_providers_controller.rb b/app/controllers/api/v1/admin/trends/links/preview_card_providers_controller.rb index 5d9fcc82c0..7ab7e6bd04 100644 --- a/app/controllers/api/v1/admin/trends/links/preview_card_providers_controller.rb +++ b/app/controllers/api/v1/admin/trends/links/preview_card_providers_controller.rb @@ -54,12 +54,8 @@ class Api::V1::Admin::Trends::Links::PreviewCardProvidersController < Api::BaseC api_v1_admin_trends_links_preview_card_providers_url(pagination_params(min_id: pagination_since_id)) unless @providers.empty? end - def pagination_max_id - @providers.last.id - end - - def pagination_since_id - @providers.first.id + def pagination_collection + @providers end def records_continue? diff --git a/app/controllers/api/v1/blocks_controller.rb b/app/controllers/api/v1/blocks_controller.rb index 0934622f88..7826a3c681 100644 --- a/app/controllers/api/v1/blocks_controller.rb +++ b/app/controllers/api/v1/blocks_controller.rb @@ -40,12 +40,8 @@ class Api::V1::BlocksController < Api::BaseController api_v1_blocks_url pagination_params(since_id: pagination_since_id) unless paginated_blocks.empty? end - def pagination_max_id - paginated_blocks.last.id - end - - def pagination_since_id - paginated_blocks.first.id + def pagination_collection + paginated_blocks end def records_continue? diff --git a/app/controllers/api/v1/bookmarks_controller.rb b/app/controllers/api/v1/bookmarks_controller.rb index 498eb16f44..08d3cf8344 100644 --- a/app/controllers/api/v1/bookmarks_controller.rb +++ b/app/controllers/api/v1/bookmarks_controller.rb @@ -43,12 +43,8 @@ class Api::V1::BookmarksController < Api::BaseController api_v1_bookmarks_url pagination_params(min_id: pagination_since_id) unless results.empty? end - def pagination_max_id - results.last.id - end - - def pagination_since_id - results.first.id + def pagination_collection + results end def records_continue? diff --git a/app/controllers/api/v1/crypto/encrypted_messages_controller.rb b/app/controllers/api/v1/crypto/encrypted_messages_controller.rb index 68cf4384f7..c70ae46d18 100644 --- a/app/controllers/api/v1/crypto/encrypted_messages_controller.rb +++ b/app/controllers/api/v1/crypto/encrypted_messages_controller.rb @@ -41,12 +41,8 @@ class Api::V1::Crypto::EncryptedMessagesController < Api::BaseController api_v1_crypto_encrypted_messages_url pagination_params(min_id: pagination_since_id) unless @encrypted_messages.empty? end - def pagination_max_id - @encrypted_messages.last.id - end - - def pagination_since_id - @encrypted_messages.first.id + def pagination_collection + @encrypted_messages end def records_continue? diff --git a/app/controllers/api/v1/domain_blocks_controller.rb b/app/controllers/api/v1/domain_blocks_controller.rb index 34def3c44a..5774c4d1c7 100644 --- a/app/controllers/api/v1/domain_blocks_controller.rb +++ b/app/controllers/api/v1/domain_blocks_controller.rb @@ -50,12 +50,8 @@ class Api::V1::DomainBlocksController < Api::BaseController api_v1_domain_blocks_url pagination_params(since_id: pagination_since_id) unless @blocks.empty? end - def pagination_max_id - @blocks.last.id - end - - def pagination_since_id - @blocks.first.id + def pagination_collection + @blocks end def records_continue? diff --git a/app/controllers/api/v1/endorsements_controller.rb b/app/controllers/api/v1/endorsements_controller.rb index 2216a9860d..449a9ac245 100644 --- a/app/controllers/api/v1/endorsements_controller.rb +++ b/app/controllers/api/v1/endorsements_controller.rb @@ -44,12 +44,8 @@ class Api::V1::EndorsementsController < Api::BaseController api_v1_endorsements_url pagination_params(since_id: pagination_since_id) unless @accounts.empty? end - def pagination_max_id - @accounts.last.id - end - - def pagination_since_id - @accounts.first.id + def pagination_collection + @accounts end def records_continue? diff --git a/app/controllers/api/v1/favourites_controller.rb b/app/controllers/api/v1/favourites_controller.rb index faf1bda96a..85e46b1166 100644 --- a/app/controllers/api/v1/favourites_controller.rb +++ b/app/controllers/api/v1/favourites_controller.rb @@ -43,12 +43,8 @@ class Api::V1::FavouritesController < Api::BaseController api_v1_favourites_url pagination_params(min_id: pagination_since_id) unless results.empty? end - def pagination_max_id - results.last.id - end - - def pagination_since_id - results.first.id + def pagination_collection + results end def records_continue? diff --git a/app/controllers/api/v1/followed_tags_controller.rb b/app/controllers/api/v1/followed_tags_controller.rb index eae2bdc010..0ea4a95ef5 100644 --- a/app/controllers/api/v1/followed_tags_controller.rb +++ b/app/controllers/api/v1/followed_tags_controller.rb @@ -34,12 +34,8 @@ class Api::V1::FollowedTagsController < Api::BaseController api_v1_followed_tags_url pagination_params(since_id: pagination_since_id) unless @results.empty? end - def pagination_max_id - @results.last.id - end - - def pagination_since_id - @results.first.id + def pagination_collection + @results end def records_continue? diff --git a/app/controllers/api/v1/lists/accounts_controller.rb b/app/controllers/api/v1/lists/accounts_controller.rb index 0604ad60fc..5ae74bf04d 100644 --- a/app/controllers/api/v1/lists/accounts_controller.rb +++ b/app/controllers/api/v1/lists/accounts_controller.rb @@ -71,12 +71,8 @@ class Api::V1::Lists::AccountsController < Api::BaseController api_v1_list_accounts_url pagination_params(since_id: pagination_since_id) unless @accounts.empty? end - def pagination_max_id - @accounts.last.id - end - - def pagination_since_id - @accounts.first.id + def pagination_collection + @accounts end def records_continue? diff --git a/app/controllers/api/v1/mutes_controller.rb b/app/controllers/api/v1/mutes_controller.rb index 2fb685ac39..9542d96110 100644 --- a/app/controllers/api/v1/mutes_controller.rb +++ b/app/controllers/api/v1/mutes_controller.rb @@ -40,12 +40,8 @@ class Api::V1::MutesController < Api::BaseController api_v1_mutes_url pagination_params(since_id: pagination_since_id) unless paginated_mutes.empty? end - def pagination_max_id - paginated_mutes.last.id - end - - def pagination_since_id - paginated_mutes.first.id + def pagination_collection + paginated_mutes end def records_continue? diff --git a/app/controllers/api/v1/notifications_controller.rb b/app/controllers/api/v1/notifications_controller.rb index 52280ef607..777740751f 100644 --- a/app/controllers/api/v1/notifications_controller.rb +++ b/app/controllers/api/v1/notifications_controller.rb @@ -70,12 +70,8 @@ class Api::V1::NotificationsController < Api::BaseController api_v1_notifications_url pagination_params(min_id: pagination_since_id) unless @notifications.empty? end - def pagination_max_id - @notifications.last.id - end - - def pagination_since_id - @notifications.first.id + def pagination_collection + @notifications end def browserable_params diff --git a/app/controllers/api/v1/scheduled_statuses_controller.rb b/app/controllers/api/v1/scheduled_statuses_controller.rb index 2220b6d22e..f6c0703833 100644 --- a/app/controllers/api/v1/scheduled_statuses_controller.rb +++ b/app/controllers/api/v1/scheduled_statuses_controller.rb @@ -63,11 +63,7 @@ class Api::V1::ScheduledStatusesController < Api::BaseController @statuses.size == limit_param(DEFAULT_STATUSES_LIMIT) end - def pagination_max_id - @statuses.last.id - end - - def pagination_since_id - @statuses.first.id + def pagination_collection + @statuses end end diff --git a/app/controllers/api/v1/timelines/base_controller.rb b/app/controllers/api/v1/timelines/base_controller.rb index 173e173cc9..7735cf1dc0 100644 --- a/app/controllers/api/v1/timelines/base_controller.rb +++ b/app/controllers/api/v1/timelines/base_controller.rb @@ -9,12 +9,8 @@ class Api::V1::Timelines::BaseController < Api::BaseController set_pagination_headers(next_path, prev_path) end - def pagination_max_id - @statuses.last.id - end - - def pagination_since_id - @statuses.first.id + def pagination_collection + @statuses end def next_path_params From 7e6eb64f1e89179f49ebdaddab7f96ac3f53ad05 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 13 Mar 2024 04:56:37 -0400 Subject: [PATCH 76/96] Use full snowflake range in `admin/metrics` classes (#29416) --- .../admin/metrics/dimension/instance_languages_dimension.rb | 4 ++-- app/lib/admin/metrics/dimension/servers_dimension.rb | 4 ++-- app/lib/admin/metrics/dimension/tag_languages_dimension.rb | 4 ++-- app/lib/admin/metrics/dimension/tag_servers_dimension.rb | 4 ++-- app/lib/admin/metrics/measure/instance_statuses_measure.rb | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/lib/admin/metrics/dimension/instance_languages_dimension.rb b/app/lib/admin/metrics/dimension/instance_languages_dimension.rb index b478213808..661e6d93b7 100644 --- a/app/lib/admin/metrics/dimension/instance_languages_dimension.rb +++ b/app/lib/admin/metrics/dimension/instance_languages_dimension.rb @@ -37,11 +37,11 @@ class Admin::Metrics::Dimension::InstanceLanguagesDimension < Admin::Metrics::Di end def earliest_status_id - Mastodon::Snowflake.id_at(@start_at, with_random: false) + Mastodon::Snowflake.id_at(@start_at.beginning_of_day, with_random: false) end def latest_status_id - Mastodon::Snowflake.id_at(@end_at, with_random: false) + Mastodon::Snowflake.id_at(@end_at.end_of_day, with_random: false) end def params diff --git a/app/lib/admin/metrics/dimension/servers_dimension.rb b/app/lib/admin/metrics/dimension/servers_dimension.rb index 42aba8e213..2c8406d52f 100644 --- a/app/lib/admin/metrics/dimension/servers_dimension.rb +++ b/app/lib/admin/metrics/dimension/servers_dimension.rb @@ -30,10 +30,10 @@ class Admin::Metrics::Dimension::ServersDimension < Admin::Metrics::Dimension::B end def earliest_status_id - Mastodon::Snowflake.id_at(@start_at) + Mastodon::Snowflake.id_at(@start_at.beginning_of_day, with_random: false) end def latest_status_id - Mastodon::Snowflake.id_at(@end_at) + Mastodon::Snowflake.id_at(@end_at.end_of_day, with_random: false) end end diff --git a/app/lib/admin/metrics/dimension/tag_languages_dimension.rb b/app/lib/admin/metrics/dimension/tag_languages_dimension.rb index cd077ff863..6e283d2c65 100644 --- a/app/lib/admin/metrics/dimension/tag_languages_dimension.rb +++ b/app/lib/admin/metrics/dimension/tag_languages_dimension.rb @@ -40,11 +40,11 @@ class Admin::Metrics::Dimension::TagLanguagesDimension < Admin::Metrics::Dimensi end def earliest_status_id - Mastodon::Snowflake.id_at(@start_at, with_random: false) + Mastodon::Snowflake.id_at(@start_at.beginning_of_day, with_random: false) end def latest_status_id - Mastodon::Snowflake.id_at(@end_at, with_random: false) + Mastodon::Snowflake.id_at(@end_at.end_of_day, with_random: false) end def params diff --git a/app/lib/admin/metrics/dimension/tag_servers_dimension.rb b/app/lib/admin/metrics/dimension/tag_servers_dimension.rb index fc5e49a966..db820e965c 100644 --- a/app/lib/admin/metrics/dimension/tag_servers_dimension.rb +++ b/app/lib/admin/metrics/dimension/tag_servers_dimension.rb @@ -40,11 +40,11 @@ class Admin::Metrics::Dimension::TagServersDimension < Admin::Metrics::Dimension end def earliest_status_id - Mastodon::Snowflake.id_at(@start_at, with_random: false) + Mastodon::Snowflake.id_at(@start_at.beginning_of_day, with_random: false) end def latest_status_id - Mastodon::Snowflake.id_at(@end_at, with_random: false) + Mastodon::Snowflake.id_at(@end_at.end_of_day, with_random: false) end def params diff --git a/app/lib/admin/metrics/measure/instance_statuses_measure.rb b/app/lib/admin/metrics/measure/instance_statuses_measure.rb index 8c71c66145..b918a30a57 100644 --- a/app/lib/admin/metrics/measure/instance_statuses_measure.rb +++ b/app/lib/admin/metrics/measure/instance_statuses_measure.rb @@ -51,11 +51,11 @@ class Admin::Metrics::Measure::InstanceStatusesMeasure < Admin::Metrics::Measure end def earliest_status_id - Mastodon::Snowflake.id_at(@start_at, with_random: false) + Mastodon::Snowflake.id_at(@start_at.beginning_of_day, with_random: false) end def latest_status_id - Mastodon::Snowflake.id_at(@end_at, with_random: false) + Mastodon::Snowflake.id_at(@end_at.end_of_day, with_random: false) end def time_period From 2c0441acd7f943a9873b650cf75d33c73d545acf Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 13 Mar 2024 05:19:54 -0400 Subject: [PATCH 77/96] Use rails built-in `tag` methods in `TextFormatter.shortened_link` (#28976) --- app/lib/text_formatter.rb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/lib/text_formatter.rb b/app/lib/text_formatter.rb index 581ee835b3..2b3febc219 100644 --- a/app/lib/text_formatter.rb +++ b/app/lib/text_formatter.rb @@ -50,6 +50,7 @@ class TextFormatter class << self include ERB::Util + include ActionView::Helpers::TagHelper def shortened_link(url, rel_me: false) url = Addressable::URI.parse(url).to_s @@ -60,9 +61,11 @@ class TextFormatter suffix = url[prefix.length + 30..] cutoff = url[prefix.length..].length > 30 - <<~HTML.squish.html_safe # rubocop:disable Rails/OutputSafety - #{h(display_url)} - HTML + tag.a href: url, target: '_blank', rel: rel.join(' '), translate: 'no' do + tag.span(prefix, class: 'invisible') + + tag.span(display_url, class: (cutoff ? 'ellipsis' : '')) + + tag.span(suffix, class: 'invisible') + end rescue Addressable::URI::InvalidURIError, IDN::Idna::IdnaError h(url) end From 46e902f1f373210f75e24bbbdcf0850b20bb1c53 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 13 Mar 2024 05:22:43 -0400 Subject: [PATCH 78/96] Merge `api/v1/accounts/credentials` controller spec into existing request spec (#29006) --- .../accounts/credentials_controller_spec.rb | 105 ------------------ .../api/v1/accounts/credentials_spec.rb | 74 +++++++++--- 2 files changed, 61 insertions(+), 118 deletions(-) delete mode 100644 spec/controllers/api/v1/accounts/credentials_controller_spec.rb diff --git a/spec/controllers/api/v1/accounts/credentials_controller_spec.rb b/spec/controllers/api/v1/accounts/credentials_controller_spec.rb deleted file mode 100644 index a62fa54e60..0000000000 --- a/spec/controllers/api/v1/accounts/credentials_controller_spec.rb +++ /dev/null @@ -1,105 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -describe Api::V1::Accounts::CredentialsController do - render_views - - let(:user) { Fabricate(:user) } - let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } - - context 'with an oauth token' do - before do - allow(controller).to receive(:doorkeeper_token) { token } - end - - describe 'GET #show' do - let(:scopes) { 'read:accounts' } - - it 'returns http success' do - get :show - expect(response).to have_http_status(200) - end - end - - describe 'PATCH #update' do - let(:scopes) { 'write:accounts' } - - describe 'with valid data' do - before do - allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) - - patch :update, params: { - display_name: "Alice Isn't Dead", - note: "Hi!\n\nToot toot!", - avatar: fixture_file_upload('avatar.gif', 'image/gif'), - header: fixture_file_upload('attachment.jpg', 'image/jpeg'), - source: { - privacy: 'unlisted', - sensitive: true, - }, - } - end - - it 'updates account info', :aggregate_failures do - expect(response).to have_http_status(200) - - user.reload - user.account.reload - - expect(user.account.display_name).to eq("Alice Isn't Dead") - expect(user.account.note).to eq("Hi!\n\nToot toot!") - expect(user.account.avatar).to exist - expect(user.account.header).to exist - expect(user.setting_default_privacy).to eq('unlisted') - expect(user.setting_default_sensitive).to be(true) - - expect(ActivityPub::UpdateDistributionWorker).to have_received(:perform_async).with(user.account_id) - end - end - - describe 'with empty source list' do - before do - patch :update, params: { - display_name: "I'm a cat", - source: {}, - }, as: :json - end - - it 'returns http success' do - expect(response).to have_http_status(200) - end - end - - describe 'with invalid data' do - before do - patch :update, params: { note: 'This is too long. ' * 30 } - end - - it 'returns http unprocessable entity' do - expect(response).to have_http_status(422) - end - end - end - end - - context 'without an oauth token' do - before do - allow(controller).to receive(:doorkeeper_token).and_return(nil) - end - - describe 'GET #show' do - it 'returns http unauthorized' do - get :show - expect(response).to have_http_status(401) - end - end - - describe 'PATCH #update' do - it 'returns http unauthorized' do - patch :update, params: { note: 'Foo' } - expect(response).to have_http_status(401) - end - end - end -end diff --git a/spec/requests/api/v1/accounts/credentials_spec.rb b/spec/requests/api/v1/accounts/credentials_spec.rb index b13e79b12b..737348c2dd 100644 --- a/spec/requests/api/v1/accounts/credentials_spec.rb +++ b/spec/requests/api/v1/accounts/credentials_spec.rb @@ -15,15 +15,11 @@ RSpec.describe 'credentials API' do it_behaves_like 'forbidden for wrong scope', 'write write:accounts' - it 'returns http success' do - subject - - expect(response).to have_http_status(200) - end - - it 'returns the expected content' do + it 'returns http success with expected content' do subject + expect(response) + .to have_http_status(200) expect(body_as_json).to include({ source: hash_including({ discoverable: false, @@ -34,24 +30,55 @@ RSpec.describe 'credentials API' do end end - describe 'POST /api/v1/accounts/update_credentials' do + describe 'PATCH /api/v1/accounts/update_credentials' do subject do patch '/api/v1/accounts/update_credentials', headers: headers, params: params end - let(:params) { { discoverable: true, locked: false, indexable: true } } + before { allow(ActivityPub::UpdateDistributionWorker).to receive(:perform_async) } + + let(:params) do + { + avatar: fixture_file_upload('avatar.gif', 'image/gif'), + discoverable: true, + display_name: "Alice Isn't Dead", + header: fixture_file_upload('attachment.jpg', 'image/jpeg'), + indexable: true, + locked: false, + note: 'Hello!', + source: { + privacy: 'unlisted', + sensitive: true, + }, + } + end it_behaves_like 'forbidden for wrong scope', 'read read:accounts' - it 'returns http success' do - subject + describe 'with empty source list' do + let(:params) { { display_name: "I'm a cat", source: {} } } - expect(response).to have_http_status(200) + it 'returns http success' do + subject + expect(response).to have_http_status(200) + end end - it 'returns JSON with updated attributes' do + describe 'with invalid data' do + let(:params) { { note: 'This is too long. ' * 30 } } + + it 'returns http unprocessable entity' do + subject + expect(response).to have_http_status(422) + end + end + + it 'returns http success with updated JSON attributes' do subject + expect(response) + .to have_http_status(200) + expect(body_as_json).to include({ source: hash_including({ discoverable: true, @@ -59,6 +86,27 @@ RSpec.describe 'credentials API' do }), locked: false, }) + + expect(ActivityPub::UpdateDistributionWorker) + .to have_received(:perform_async).with(user.account_id) + end + + def expect_account_updates + expect(user.account.reload) + .to have_attributes( + display_name: eq("Alice Isn't Dead"), + note: 'Hello!', + avatar: exist, + header: exist + ) + end + + def expect_user_updates + expect(user.reload) + .to have_attributes( + setting_default_privacy: eq('unlisted'), + setting_default_sensitive: be(true) + ) end end end From 27fd084cb5ccb4bf6b2a3eb28b0b123063230c10 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 13 Mar 2024 11:17:55 +0100 Subject: [PATCH 79/96] Exempt some notification types from notification filtering (#29565) --- app/services/notify_service.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb index 428fdb4d47..66cbff0ef8 100644 --- a/app/services/notify_service.rb +++ b/app/services/notify_service.rb @@ -68,6 +68,13 @@ class NotifyService < BaseService NEW_FOLLOWER_THRESHOLD = 3.days.freeze + NON_FILTERABLE_TYPES = %i( + admin.sign_up + admin.report + poll + update + ).freeze + def initialize(notification) @notification = notification @recipient = notification.account @@ -76,6 +83,7 @@ class NotifyService < BaseService end def filter? + return false if NON_FILTERABLE_TYPES.include?(@notification.type) return false if override_for_sender? from_limited? || From b43eaa4517107326c7e73b949cec759f841b4a30 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 13 Mar 2024 11:35:49 +0100 Subject: [PATCH 80/96] Refactor notification filtering behavior definition (#29567) --- app/models/notification.rb | 46 +++++++++++++++++++++++++--------- app/services/notify_service.rb | 2 +- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/app/models/notification.rb b/app/models/notification.rb index e322daea4a..861a154369 100644 --- a/app/models/notification.rb +++ b/app/models/notification.rb @@ -29,18 +29,40 @@ class Notification < ApplicationRecord 'Poll' => :poll, }.freeze - TYPES = %i( - mention - status - reblog - follow - follow_request - favourite - poll - update - admin.sign_up - admin.report - ).freeze + PROPERTIES = { + mention: { + filterable: true, + }.freeze, + status: { + filterable: false, + }.freeze, + reblog: { + filterable: true, + }.freeze, + follow: { + filterable: true, + }.freeze, + follow_request: { + filterable: true, + }.freeze, + favourite: { + filterable: true, + }.freeze, + poll: { + filterable: false, + }.freeze, + update: { + filterable: false, + }.freeze, + 'admin.sign_up': { + filterable: false, + }.freeze, + 'admin.report': { + filterable: false, + }.freeze, + }.freeze + + TYPES = PROPERTIES.keys.freeze TARGET_STATUS_INCLUDES_BY_TYPE = { status: :status, diff --git a/app/services/notify_service.rb b/app/services/notify_service.rb index 66cbff0ef8..f3d16f1be7 100644 --- a/app/services/notify_service.rb +++ b/app/services/notify_service.rb @@ -83,7 +83,7 @@ class NotifyService < BaseService end def filter? - return false if NON_FILTERABLE_TYPES.include?(@notification.type) + return false unless Notification::PROPERTIES[@notification.type][:filterable] return false if override_for_sender? from_limited? || From 268856d5d9f72f003a08a53c7d094ed4df7c16bc Mon Sep 17 00:00:00 2001 From: Erik Uden Date: Wed, 13 Mar 2024 12:45:20 +0100 Subject: [PATCH 81/96] Fix toggle button color for light (and dark/default) theme (#29553) --- app/javascript/styles/mastodon-light/diff.scss | 4 ++-- app/javascript/styles/mastodon/components.scss | 13 +++++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/app/javascript/styles/mastodon-light/diff.scss b/app/javascript/styles/mastodon-light/diff.scss index 675a01dd36..493e377d61 100644 --- a/app/javascript/styles/mastodon-light/diff.scss +++ b/app/javascript/styles/mastodon-light/diff.scss @@ -263,11 +263,11 @@ html { } .react-toggle-track { - background: $ui-secondary-color; + background: $ui-primary-color; } .react-toggle:hover:not(.react-toggle--disabled) .react-toggle-track { - background: darken($ui-secondary-color, 10%); + background: lighten($ui-primary-color, 10%); } .react-toggle.react-toggle--checked:hover:not(.react-toggle--disabled) diff --git a/app/javascript/styles/mastodon/components.scss b/app/javascript/styles/mastodon/components.scss index 047d9d9739..b6dc1abc99 100644 --- a/app/javascript/styles/mastodon/components.scss +++ b/app/javascript/styles/mastodon/components.scss @@ -3369,7 +3369,7 @@ $ui-header-height: 55px; height: 20px; padding: 0; border-radius: 10px; - background-color: #626982; + background-color: $ui-primary-color; } .react-toggle--focus { @@ -3392,7 +3392,7 @@ $ui-header-height: 55px; width: 16px; height: 16px; border-radius: 50%; - background-color: $primary-text-color; + background-color: $ui-button-color; box-sizing: border-box; transition: all 0.25s ease; transition-property: border-color, left; @@ -3403,6 +3403,15 @@ $ui-header-height: 55px; border-color: $ui-highlight-color; } +.react-toggle:hover:not(.react-toggle--disabled) .react-toggle-track { + background: darken($ui-primary-color, 5%); +} + +.react-toggle.react-toggle--checked:hover:not(.react-toggle--disabled) + .react-toggle-track { + background: lighten($ui-highlight-color, 5%); +} + .switch-to-advanced { color: $light-text-color; background-color: $ui-base-color; From 171948b910684cb5b3f7ac0e2da169c527196ed1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 13 Mar 2024 13:42:44 +0100 Subject: [PATCH 82/96] New Crowdin Translations (automated) (#29563) Co-authored-by: GitHub Actions --- app/javascript/mastodon/locales/be.json | 16 ++++++++++++++++ app/javascript/mastodon/locales/ca.json | 1 - app/javascript/mastodon/locales/cy.json | 15 +++++++++++++++ app/javascript/mastodon/locales/da.json | 1 + app/javascript/mastodon/locales/es-AR.json | 2 +- app/javascript/mastodon/locales/et.json | 1 + app/javascript/mastodon/locales/fa.json | 4 ++-- app/javascript/mastodon/locales/fi.json | 11 +++++++++++ app/javascript/mastodon/locales/fil.json | 1 + app/javascript/mastodon/locales/fo.json | 2 +- app/javascript/mastodon/locales/gl.json | 16 ++++++++++++++++ app/javascript/mastodon/locales/he.json | 1 - app/javascript/mastodon/locales/hu.json | 2 +- app/javascript/mastodon/locales/it.json | 2 +- app/javascript/mastodon/locales/ko.json | 3 ++- app/javascript/mastodon/locales/lad.json | 8 ++++++++ app/javascript/mastodon/locales/lt.json | 10 ++++++++++ app/javascript/mastodon/locales/nl.json | 2 +- app/javascript/mastodon/locales/sk.json | 7 +++++++ app/javascript/mastodon/locales/sl.json | 3 +++ app/javascript/mastodon/locales/sq.json | 13 +++++++++++++ app/javascript/mastodon/locales/sr-Latn.json | 16 ++++++++++++++++ app/javascript/mastodon/locales/sr.json | 16 ++++++++++++++++ app/javascript/mastodon/locales/th.json | 1 + app/javascript/mastodon/locales/tr.json | 20 ++++++++++++++++++-- app/javascript/mastodon/locales/vi.json | 16 ++++++++++++++++ config/locales/fa.yml | 8 ++++---- config/locales/fi.yml | 4 ++-- config/locales/lad.yml | 10 ++++++++++ config/locales/simple_form.be.yml | 2 ++ config/locales/simple_form.ca.yml | 2 +- config/locales/simple_form.fa.yml | 2 +- config/locales/simple_form.fi.yml | 2 ++ config/locales/simple_form.ja.yml | 2 ++ config/locales/simple_form.lad.yml | 1 + config/locales/simple_form.sr-Latn.yml | 1 + config/locales/simple_form.sr.yml | 1 + config/locales/simple_form.tr.yml | 2 ++ config/locales/sq.yml | 1 + 39 files changed, 208 insertions(+), 20 deletions(-) diff --git a/app/javascript/mastodon/locales/be.json b/app/javascript/mastodon/locales/be.json index bbe21f0569..6e0c5afb60 100644 --- a/app/javascript/mastodon/locales/be.json +++ b/app/javascript/mastodon/locales/be.json @@ -241,6 +241,7 @@ "empty_column.list": "У гэтым спісе пакуль што нічога няма. Калі члены лісту апублікуюць новыя запісы, яны з'явяцца тут.", "empty_column.lists": "Як толькі вы створыце новы спіс ён будзе захоўвацца тут, але пакуль што тут пуста.", "empty_column.mutes": "Вы яшчэ нікога не ігнаруеце.", + "empty_column.notification_requests": "Чысціня! Тут нічога няма. Калі вы будзеце атрымліваць новыя апавяшчэння, яны будуць з'яўляцца тут у адпаведнасці з вашымі наладамі.", "empty_column.notifications": "У вас няма ніякіх апавяшчэнняў. Калі іншыя людзі ўзаемадзейнічаюць з вамі, вы ўбачыце гэта тут.", "empty_column.public": "Тут нічога няма! Апублікуйце што-небудзь, або падпішыцеся на карыстальнікаў з другіх сервераў", "error.unexpected_crash.explanation": "Гэта старонка не можа быць адлюстравана карэктна з-за памылкі ў нашым кодзе, або праблемы з сумяшчальнасцю браўзера.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Скарыстайцеся існуючай катэгорыяй або стварыце новую", "filter_modal.select_filter.title": "Фільтраваць гэты допіс", "filter_modal.title.status": "Фільтраваць допіс", + "filtered_notifications_banner.pending_requests": "Апавяшчэнні ад {count, plural, =0 {# людзей якіх} one {# чалавека якіх} few {# чалавек якіх} many {# людзей якіх} other {# чалавека якіх}} вы магчыма ведаеце", + "filtered_notifications_banner.title": "Адфільтраваныя апавяшчэнні", "firehose.all": "Усе", "firehose.local": "Гэты сервер", "firehose.remote": "Іншыя серверы", @@ -439,6 +442,10 @@ "notification.reblog": "{name} пашырыў ваш допіс", "notification.status": "Новы допіс ад {name}", "notification.update": "Допіс {name} адрэдагаваны", + "notification_requests.accept": "Прыняць", + "notification_requests.dismiss": "Адхіліць", + "notification_requests.notifications_from": "Апавяшчэнні ад {name}", + "notification_requests.title": "Адфільтраваныя апавяшчэнні", "notifications.clear": "Ачысціць апавяшчэнні", "notifications.clear_confirmation": "Вы ўпэўнены, што жадаеце назаўсёды сцерці ўсё паведамленні?", "notifications.column_settings.admin.report": "Новыя скаргі:", @@ -470,6 +477,15 @@ "notifications.permission_denied": "Апавяшчэнні на працоўным стале недаступныя з-за папярэдне адхіленага запыта праў браўзера", "notifications.permission_denied_alert": "Апавяшчэнні на працоўным стале не могуць быць уключаныя, з-за таго што запыт браўзера быў адхілены", "notifications.permission_required": "Апавяшчэнні на працоўным стале недаступныя, з-за таго што неабходны дазвол не быў дадзены.", + "notifications.policy.filter_new_accounts.hint": "Створаныя на працягу {days, plural, one {апошняга # дня} few {апошніх # дзён} many {апошніх # дзён} other {апошняй # дня}}", + "notifications.policy.filter_new_accounts_title": "Новыя ўліковыя запісы", + "notifications.policy.filter_not_followers_hint": "Уключаючы людзей, якія падпісаны на вас менш, чым {days, plural, one {# дзень} few {# дні} many {# дзён} other {# дня}}", + "notifications.policy.filter_not_followers_title": "Людзі, якія не падпісаны на вас", + "notifications.policy.filter_not_following_hint": "Пакуль вы не пацвердзіце іх уручную", + "notifications.policy.filter_not_following_title": "Людзі, на якіх вы не падпісаны", + "notifications.policy.filter_private_mentions_hint": "Фільтруецца за выключэннем адказу на вашае згадванне ці калі вы падпісаны на адпраўніка", + "notifications.policy.filter_private_mentions_title": "Непажаданыя асаблівыя згадванні", + "notifications.policy.title": "Адфільтроўваць апавяшчэнні ад…", "notifications_permission_banner.enable": "Уключыць апавяшчэнні на працоўным стале", "notifications_permission_banner.how_to_control": "Каб атрымліваць апавяшчэнні, калі Mastodon не адкрыты, уключыце апавяшчэнні працоўнага стала. Вы зможаце дакладна кантраляваць, якія падзеі будуць ствараць апавяшчэнні з дапамогай {icon} кнопкі, як толькі яны будуць уключаны.", "notifications_permission_banner.title": "Не прапусціце нічога", diff --git a/app/javascript/mastodon/locales/ca.json b/app/javascript/mastodon/locales/ca.json index 0c237ccda0..8ba140d207 100644 --- a/app/javascript/mastodon/locales/ca.json +++ b/app/javascript/mastodon/locales/ca.json @@ -272,7 +272,6 @@ "filter_modal.select_filter.subtitle": "Usa una categoria existent o crea'n una de nova", "filter_modal.select_filter.title": "Filtra aquest tut", "filter_modal.title.status": "Filtra un tut", - "filtered_notifications_banner.pending_requests": "Notificacions de {count, plural, =0 {no} one {una persona} other {# persones}} que potser coneixeu", "filtered_notifications_banner.title": "Notificacions filtrades", "firehose.all": "Tots", "firehose.local": "Aquest servidor", diff --git a/app/javascript/mastodon/locales/cy.json b/app/javascript/mastodon/locales/cy.json index 583660b283..e55dff9254 100644 --- a/app/javascript/mastodon/locales/cy.json +++ b/app/javascript/mastodon/locales/cy.json @@ -241,6 +241,7 @@ "empty_column.list": "Does dim yn y rhestr yma eto. Pan fydd aelodau'r rhestr yn cyhoeddi postiad newydd, mi fydd yn ymddangos yma.", "empty_column.lists": "Nid oes gennych unrhyw restrau eto. Pan fyddwch yn creu un, mi fydd yn ymddangos yma.", "empty_column.mutes": "Nid ydych wedi tewi unrhyw ddefnyddwyr eto.", + "empty_column.notification_requests": "Dim i boeni amdano! Does dim byd yma. Pan fyddwch yn derbyn hysbysiadau newydd, byddan nhw'n ymddangos yma yn ôl eich gosodiadau.", "empty_column.notifications": "Nid oes gennych unrhyw hysbysiadau eto. Rhyngweithiwch ag eraill i ddechrau'r sgwrs.", "empty_column.public": "Does dim byd yma! Ysgrifennwch rywbeth cyhoeddus, neu dilynwch ddefnyddwyr o weinyddion eraill i'w lanw", "error.unexpected_crash.explanation": "Oherwydd gwall yn ein cod neu oherwydd problem cysondeb porwr, nid oedd y dudalen hon gallu cael ei dangos yn gywir.", @@ -271,6 +272,7 @@ "filter_modal.select_filter.subtitle": "Defnyddiwch gategori sy'n bodoli eisoes neu crëu un newydd", "filter_modal.select_filter.title": "Hidlo'r postiad hwn", "filter_modal.title.status": "Hidlo postiad", + "filtered_notifications_banner.title": "Hysbysiadau wedi'u hidlo", "firehose.all": "Popeth", "firehose.local": "Gweinydd hwn", "firehose.remote": "Gweinyddion eraill", @@ -439,6 +441,10 @@ "notification.reblog": "Hybodd {name} eich post", "notification.status": "{name} newydd ei bostio", "notification.update": "Golygodd {name} bostiad", + "notification_requests.accept": "Derbyn", + "notification_requests.dismiss": "Cau", + "notification_requests.notifications_from": "Hysbysiadau gan {name}", + "notification_requests.title": "Hysbysiadau wedi'u hidlo", "notifications.clear": "Clirio hysbysiadau", "notifications.clear_confirmation": "Ydych chi'n siŵr eich bod am glirio'ch holl hysbysiadau am byth?", "notifications.column_settings.admin.report": "Adroddiadau newydd:", @@ -470,6 +476,15 @@ "notifications.permission_denied": "Nid oes hysbysiadau bwrdd gwaith ar gael oherwydd cais am ganiatâd porwr a wrthodwyd yn flaenorol", "notifications.permission_denied_alert": "Nid oes modd galluogi hysbysiadau bwrdd gwaith, gan fod caniatâd porwr wedi'i wrthod o'r blaen", "notifications.permission_required": "Nid oes hysbysiadau bwrdd gwaith ar gael oherwydd na roddwyd y caniatâd gofynnol.", + "notifications.policy.filter_new_accounts.hint": "Crëwyd o fewn {days, lluosog, un {yr un diwrnod} arall {y # diwrnod}} diwethaf", + "notifications.policy.filter_new_accounts_title": "Cyfrifon newydd", + "notifications.policy.filter_not_followers_hint": "Gan gynnwys pobl sydd wedi bod yn eich dilyn am llai {days, plural, un {nag un diwrnod} arall {na # diwrnod}}", + "notifications.policy.filter_not_followers_title": "Pobl sydd ddim yn eich dilyn", + "notifications.policy.filter_not_following_hint": "Hyd nes i chi eu cymeradwyo â llaw", + "notifications.policy.filter_not_following_title": "Pobl nad ydych yn eu dilyn", + "notifications.policy.filter_private_mentions_hint": "Wedi'i hidlo oni bai ei fod mewn ymateb i'ch crybwylliad eich hun neu os ydych yn dilyn yr anfonwr", + "notifications.policy.filter_private_mentions_title": "Crybwylliadau preifat digymell", + "notifications.policy.title": "Hidlo hysbysiadau gan…", "notifications_permission_banner.enable": "Galluogi hysbysiadau bwrdd gwaith", "notifications_permission_banner.how_to_control": "I dderbyn hysbysiadau pan nad yw Mastodon ar agor, galluogwch hysbysiadau bwrdd gwaith. Gallwch reoli'n union pa fathau o ryngweithiadau sy'n cynhyrchu hysbysiadau bwrdd gwaith trwy'r botwm {icon} uchod unwaith y byddan nhw wedi'u galluogi.", "notifications_permission_banner.title": "Peidiwch â cholli dim", diff --git a/app/javascript/mastodon/locales/da.json b/app/javascript/mastodon/locales/da.json index ddc0440abc..4f03c55bd4 100644 --- a/app/javascript/mastodon/locales/da.json +++ b/app/javascript/mastodon/locales/da.json @@ -272,6 +272,7 @@ "filter_modal.select_filter.subtitle": "Vælg en eksisterende kategori eller opret en ny", "filter_modal.select_filter.title": "Filtrér dette indlæg", "filter_modal.title.status": "Filtrér et indlæg", + "filtered_notifications_banner.pending_requests": "Notifikationer fra {count, plural, =0 {ingen} one {én person} other {# personer}} du måske kender", "filtered_notifications_banner.title": "Filtrerede notifikationer", "firehose.all": "Alle", "firehose.local": "Denne server", diff --git a/app/javascript/mastodon/locales/es-AR.json b/app/javascript/mastodon/locales/es-AR.json index 48d4580056..35802420d0 100644 --- a/app/javascript/mastodon/locales/es-AR.json +++ b/app/javascript/mastodon/locales/es-AR.json @@ -272,7 +272,7 @@ "filter_modal.select_filter.subtitle": "Usar una categoría existente o crear una nueva", "filter_modal.select_filter.title": "Filtrar este mensaje", "filter_modal.title.status": "Filtrar un mensaje", - "filtered_notifications_banner.pending_requests": "Notificaciones de {count, plural, =0 {ninguna cuenta} one {una cuenta} other {# cuentas}} que podrías conocer", + "filtered_notifications_banner.pending_requests": "Notificaciones de {count, plural, =0 {nadie} one {una persona} other {# personas}} que podrías conocer", "filtered_notifications_banner.title": "Notificaciones filtradas", "firehose.all": "Todos", "firehose.local": "Este servidor", diff --git a/app/javascript/mastodon/locales/et.json b/app/javascript/mastodon/locales/et.json index 2759c96a10..79e376693e 100644 --- a/app/javascript/mastodon/locales/et.json +++ b/app/javascript/mastodon/locales/et.json @@ -271,6 +271,7 @@ "filter_modal.select_filter.subtitle": "Kasuta olemasolevat kategooriat või loo uus", "filter_modal.select_filter.title": "Filtreeri seda postitust", "filter_modal.title.status": "Postituse filtreerimine", + "filtered_notifications_banner.pending_requests": "Teateid {count, plural, =0 {mitte üheltki} one {ühelt} other {#}} inimeselt, keda võid teada", "firehose.all": "Kõik", "firehose.local": "See server", "firehose.remote": "Teised serverid", diff --git a/app/javascript/mastodon/locales/fa.json b/app/javascript/mastodon/locales/fa.json index 9e6128b873..2ca44a41aa 100644 --- a/app/javascript/mastodon/locales/fa.json +++ b/app/javascript/mastodon/locales/fa.json @@ -325,8 +325,8 @@ "interaction_modal.description.follow": "با حسابی روی ماستودون می‌توانید {name} را برای دریافت فرسته‌هایش در خوراک خانگیتان دنبال کنید.", "interaction_modal.description.reblog": "با حسابی روی ماستودون می‌توانید این فرسته را با پی‌گیران خودتان هم‌رسانی کنید.", "interaction_modal.description.reply": "با حسابی روی ماستودون می‌توانید به این فرسته پاسخ دهید.", - "interaction_modal.login.action": "من رو ببر خونه", - "interaction_modal.login.prompt": "دامنه سرور شخصی شما، به عنوان مثال. mastodon.social", + "interaction_modal.login.action": "رفتن به خانه", + "interaction_modal.login.prompt": "دامنهٔ کارساز شخصیتان چون mastodon.social", "interaction_modal.no_account_yet": "در ماستودون نیست؟", "interaction_modal.on_another_server": "روی کارسازی دیگر", "interaction_modal.on_this_server": "روی این کارساز", diff --git a/app/javascript/mastodon/locales/fi.json b/app/javascript/mastodon/locales/fi.json index 3f964a7101..93e758dd40 100644 --- a/app/javascript/mastodon/locales/fi.json +++ b/app/javascript/mastodon/locales/fi.json @@ -271,6 +271,7 @@ "filter_modal.select_filter.subtitle": "Käytä olemassa olevaa luokkaa tai luo uusi", "filter_modal.select_filter.title": "Suodata tämä julkaisu", "filter_modal.title.status": "Suodata julkaisu", + "filtered_notifications_banner.title": "Suodatetut ilmoitukset", "firehose.all": "Kaikki", "firehose.local": "Tämä palvelin", "firehose.remote": "Muut palvelimet", @@ -439,6 +440,10 @@ "notification.reblog": "{name} tehosti julkaisuasi", "notification.status": "{name} julkaisi juuri", "notification.update": "{name} muokkasi julkaisua", + "notification_requests.accept": "Hyväksy", + "notification_requests.dismiss": "Hylkää", + "notification_requests.notifications_from": "Ilmoitukset käyttäjältä {name}", + "notification_requests.title": "Suodatetut ilmoitukset", "notifications.clear": "Tyhjennä ilmoitukset", "notifications.clear_confirmation": "Haluatko varmasti poistaa kaikki ilmoitukset pysyvästi?", "notifications.column_settings.admin.report": "Uudet ilmoitukset:", @@ -470,6 +475,12 @@ "notifications.permission_denied": "Työpöytäilmoitukset eivät ole käytettävissä, koska selaimen käyttöoikeuspyyntö on aiemmin evätty", "notifications.permission_denied_alert": "Työpöytäilmoituksia ei voi ottaa käyttöön, koska selaimen käyttöoikeus on aiemmin estetty", "notifications.permission_required": "Työpöytäilmoitukset eivät ole käytettävissä, koska siihen tarvittavaa lupaa ei ole myönnetty.", + "notifications.policy.filter_new_accounts.hint": "Luotu {days, plural, one {viime päivänä} other {viimeisenä # päivänä}}", + "notifications.policy.filter_new_accounts_title": "Uudet tilit", + "notifications.policy.filter_not_followers_title": "Henkilöt, jotka eivät seuraa sinua", + "notifications.policy.filter_not_following_title": "Henkilöt, joita et seuraa", + "notifications.policy.filter_private_mentions_title": "Ei-toivotut yksityismaininnat", + "notifications.policy.title": "Suodata ilmoitukset pois kohteesta…", "notifications_permission_banner.enable": "Ota työpöytäilmoitukset käyttöön", "notifications_permission_banner.how_to_control": "Saadaksesi ilmoituksia, kun Mastodon ei ole auki, ota työpöytäilmoitukset käyttöön. Voit hallita tarkasti, mistä saat työpöytäilmoituksia kun ilmoitukset on otettu käyttöön yllä olevan {icon}-painikkeen kautta.", "notifications_permission_banner.title": "Älä anna minkään mennä ohi", diff --git a/app/javascript/mastodon/locales/fil.json b/app/javascript/mastodon/locales/fil.json index 04208c5544..14bf1af222 100644 --- a/app/javascript/mastodon/locales/fil.json +++ b/app/javascript/mastodon/locales/fil.json @@ -169,6 +169,7 @@ "empty_column.list": "Wala pang laman ang listahang ito. Kapag naglathala ng mga bagong post ang mga miyembro ng listahang ito, makikita iyon dito.", "empty_column.lists": "Wala ka pang mga listahan. Kapag gumawa ka ng isa, makikita yun dito.", "explore.search_results": "Mga resulta ng paghahanap", + "filter_modal.select_filter.search": "Hanapin o gumawa", "firehose.all": "Lahat", "firehose.local": "Itong serbiro", "firehose.remote": "Ibang mga serbiro", diff --git a/app/javascript/mastodon/locales/fo.json b/app/javascript/mastodon/locales/fo.json index 67b323e2cf..daaefea86d 100644 --- a/app/javascript/mastodon/locales/fo.json +++ b/app/javascript/mastodon/locales/fo.json @@ -272,7 +272,7 @@ "filter_modal.select_filter.subtitle": "Brúka ein verandi bólk ella skapa ein nýggjan", "filter_modal.select_filter.title": "Filtrera hendan postin", "filter_modal.title.status": "Filtrera ein post", - "filtered_notifications_banner.pending_requests": "Fráboðanir frá {count, plural, =0 {ongum} one {einum persóni} other {# persónum}}, sum tú møguliga kennir", + "filtered_notifications_banner.pending_requests": "Fráboðanir frá {count, plural, =0 {ongum} one {einum persóni} other {# persónum}}, sum tú kanska kennir", "filtered_notifications_banner.title": "Sáldaðar fráboðanir", "firehose.all": "Allar", "firehose.local": "Hesin ambætarin", diff --git a/app/javascript/mastodon/locales/gl.json b/app/javascript/mastodon/locales/gl.json index 52e0ee6f6d..e3928b5f3b 100644 --- a/app/javascript/mastodon/locales/gl.json +++ b/app/javascript/mastodon/locales/gl.json @@ -241,6 +241,7 @@ "empty_column.list": "Aínda non hai nada nesta listaxe. Cando as usuarias incluídas na listaxe publiquen mensaxes, amosaranse aquí.", "empty_column.lists": "Aínda non tes listaxes. Cando crees unha, amosarase aquí.", "empty_column.mutes": "Aínda non silenciaches a ningúnha usuaria.", + "empty_column.notification_requests": "Todo ben! Nada por aquí. Cando recibas novas notificación aparecerán aquí seguindo o criterio dos teus axustes.", "empty_column.notifications": "Aínda non tes notificacións. Aparecerán cando outras persoas interactúen contigo.", "empty_column.public": "Nada por aquí! Escribe algo de xeito público, ou segue de xeito manual usuarias doutros servidores para ir enchéndoo", "error.unexpected_crash.explanation": "Debido a un erro no noso código ou a unha compatilidade co teu navegador, esta páxina non pode ser amosada correctamente.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Usar unha categoría existente ou crear unha nova", "filter_modal.select_filter.title": "Filtrar esta publicación", "filter_modal.title.status": "Filtrar unha publicación", + "filtered_notifications_banner.pending_requests": "Notificacións de {count, plural, =0 {ninguén} one {unha persoa} other {# persoas}} que poderías coñecer", + "filtered_notifications_banner.title": "Notificacións filtradas", "firehose.all": "Todo", "firehose.local": "Este servidor", "firehose.remote": "Outros servidores", @@ -439,6 +442,10 @@ "notification.reblog": "{name} compartiu a túa publicación", "notification.status": "{name} publicou", "notification.update": "{name} editou unha publicación", + "notification_requests.accept": "Aceptar", + "notification_requests.dismiss": "Desbotar", + "notification_requests.notifications_from": "Notificacións de {name}", + "notification_requests.title": "Notificacións filtradas", "notifications.clear": "Limpar notificacións", "notifications.clear_confirmation": "Tes a certeza de querer limpar de xeito permanente todas as túas notificacións?", "notifications.column_settings.admin.report": "Novas denuncias:", @@ -470,6 +477,15 @@ "notifications.permission_denied": "Non se activaron as notificacións de escritorio porque se denegou o permiso", "notifications.permission_denied_alert": "Non se poden activar as notificacións de escritorio, xa que o permiso para o navegador foi denegado previamente", "notifications.permission_required": "As notificacións de escritorio non están dispoñibles porque non se concedeu o permiso necesario.", + "notifications.policy.filter_new_accounts.hint": "Creadas desde {days, plural, one {onte} other {fai # días}}", + "notifications.policy.filter_new_accounts_title": "Novas contas", + "notifications.policy.filter_not_followers_hint": "Inclúe a persoas que te seguen desde fai menos de {days, plural, one {1 día} other {# días}}", + "notifications.policy.filter_not_followers_title": "Persoas que non te seguen", + "notifications.policy.filter_not_following_hint": "Ata que as autorices", + "notifications.policy.filter_not_following_title": "Persoas que ti non segues", + "notifications.policy.filter_private_mentions_hint": "Filtradas a non ser que sexa unha resposta á túa propia mención ou se ti segues á remitente", + "notifications.policy.filter_private_mentions_title": "Mencións privadas non solicitadas", + "notifications.policy.title": "Desbotar notificacións de…", "notifications_permission_banner.enable": "Activar notificacións de escritorio", "notifications_permission_banner.how_to_control": "Activa as notificacións de escritorio para recibir notificacións mentras Mastodon non está aberto. Podes controlar de xeito preciso o tipo de interaccións que crean as notificacións de escritorio a través da {icon} superior unha vez están activadas.", "notifications_permission_banner.title": "Non perder nada", diff --git a/app/javascript/mastodon/locales/he.json b/app/javascript/mastodon/locales/he.json index dcbc30308c..af6b1c6118 100644 --- a/app/javascript/mastodon/locales/he.json +++ b/app/javascript/mastodon/locales/he.json @@ -272,7 +272,6 @@ "filter_modal.select_filter.subtitle": "שימוש בקטגורייה קיימת או יצירת אחת חדשה", "filter_modal.select_filter.title": "סינון ההודעה הזו", "filter_modal.title.status": "סנן הודעה", - "filtered_notifications_banner.pending_requests": "{count, plural,=0 {אין התראות ממשתמשים ה}one {התראה אחת ממישהו/מישהי ה}other {יש # התראות ממשתמשים }}מוכרים לך", "filtered_notifications_banner.title": "התראות מסוננות", "firehose.all": "הכל", "firehose.local": "שרת זה", diff --git a/app/javascript/mastodon/locales/hu.json b/app/javascript/mastodon/locales/hu.json index 5dd0e7aee5..1cbca5654b 100644 --- a/app/javascript/mastodon/locales/hu.json +++ b/app/javascript/mastodon/locales/hu.json @@ -272,7 +272,7 @@ "filter_modal.select_filter.subtitle": "Válassz egy meglévő kategóriát, vagy hozz létre egy újat", "filter_modal.select_filter.title": "E bejegyzés szűrése", "filter_modal.title.status": "Egy bejegyzés szűrése", - "filtered_notifications_banner.pending_requests": "Értesítések {count, plural, =0 {0 személytől} one {egy feltehetőleg ismert személytől} other {# feltehetőleg ismert személytől}}", + "filtered_notifications_banner.pending_requests": "Értesítések {count, plural, =0 {nincsenek} one {egy valósztínűleg ismerős személytől} other {# valószínűleg ismerős személytől}}", "filtered_notifications_banner.title": "Szűrt értesítések", "firehose.all": "Összes", "firehose.local": "Ez a kiszolgáló", diff --git a/app/javascript/mastodon/locales/it.json b/app/javascript/mastodon/locales/it.json index 303abd4982..56b637612d 100644 --- a/app/javascript/mastodon/locales/it.json +++ b/app/javascript/mastodon/locales/it.json @@ -272,7 +272,7 @@ "filter_modal.select_filter.subtitle": "Usa una categoria esistente o creane una nuova", "filter_modal.select_filter.title": "Filtra questo post", "filter_modal.title.status": "Filtra un post", - "filtered_notifications_banner.pending_requests": "Notifiche da {count, plural, =0 {nessuna persona} one {una persona} other {# persone}} che potresti conoscere", + "filtered_notifications_banner.pending_requests": "Notifiche da {count, plural, =0 {nessuno} one {una persona} other {# persone}} che potresti conoscere", "filtered_notifications_banner.title": "Notifiche filtrate", "firehose.all": "Tutto", "firehose.local": "Questo server", diff --git a/app/javascript/mastodon/locales/ko.json b/app/javascript/mastodon/locales/ko.json index 7dd7636089..642a3f4ae1 100644 --- a/app/javascript/mastodon/locales/ko.json +++ b/app/javascript/mastodon/locales/ko.json @@ -271,7 +271,7 @@ "filter_modal.select_filter.subtitle": "기존의 카테고리를 사용하거나 새로 하나를 만듧니다", "filter_modal.select_filter.title": "이 게시물을 필터", "filter_modal.title.status": "게시물 필터", - "filtered_notifications_banner.pending_requests": "알 수도 있는 {count, plural, =0 {0명} one {한 명} other {# 명}}의 사람들로부터의 알림", + "filtered_notifications_banner.pending_requests": "알 수도 있는 {count, plural, =0 {0 명} one {한 명} other {# 명}}의 사람들로부터의 알림", "filtered_notifications_banner.title": "걸러진 알림", "firehose.all": "모두", "firehose.local": "이 서버", @@ -478,6 +478,7 @@ "notifications.permission_required": "필요한 권한이 승인되지 않아 데스크탑 알림을 사용할 수 없습니다.", "notifications.policy.filter_new_accounts.hint": "{days, plural, one {하루} other {#일}} 안에 만들어진", "notifications.policy.filter_new_accounts_title": "새 계정", + "notifications.policy.filter_not_followers_hint": "나를 팔로우 한 지 {days, plural, other {# 일}}이 되지 않은 사람들을 포함", "notifications.policy.filter_not_followers_title": "나를 팔로우하지 않는 사람들", "notifications.policy.filter_not_following_hint": "내가 수동으로 승인하기 전까지", "notifications.policy.filter_not_following_title": "내가 팔로우하지 않는 사람들", diff --git a/app/javascript/mastodon/locales/lad.json b/app/javascript/mastodon/locales/lad.json index de84becca3..e23f225928 100644 --- a/app/javascript/mastodon/locales/lad.json +++ b/app/javascript/mastodon/locales/lad.json @@ -271,6 +271,7 @@ "filter_modal.select_filter.subtitle": "Kulanea una kategoria egzistente o kriya mueva", "filter_modal.select_filter.title": "Filtra esta publikasyon", "filter_modal.title.status": "Filtra una publikasyon", + "filtered_notifications_banner.pending_requests": "Avizos de {count, plural, =0 {dingun} one {una persona} other {# personas}} ke puedes koneser", "filtered_notifications_banner.title": "Avizos filtrados", "firehose.all": "Todo", "firehose.local": "Este sirvidor", @@ -442,6 +443,7 @@ "notification.update": "{name} edito una publikasyon", "notification_requests.accept": "Acheta", "notification_requests.dismiss": "Kita", + "notification_requests.notifications_from": "Avizos de {name}", "notification_requests.title": "Avizos filtrados", "notifications.clear": "Efasa avizos", "notifications.clear_confirmation": "Estas siguro ke keres permanentemente efasar todos tus avizos?", @@ -474,7 +476,13 @@ "notifications.permission_denied": "Avizos de ensimameza no estan desponivles porke ya se tiene refuzado el permiso", "notifications.permission_denied_alert": "\"No se pueden kapasitar los avizos de ensimameza, porke ya se tiene refuzado el permiso de navigador", "notifications.permission_required": "Avizos de ensimameza no estan desponivles porke los nesesarios permisos no tienen sido risividos.", + "notifications.policy.filter_new_accounts.hint": "Kriyadas durante {days, plural, one {el ultimo diya} other {los ultimos # diyas}}", "notifications.policy.filter_new_accounts_title": "Muevos kuentos", + "notifications.policy.filter_not_followers_title": "Personas ke te no sigen", + "notifications.policy.filter_not_following_hint": "Asta ke las aproves manualmente", + "notifications.policy.filter_not_following_title": "Personas ke no siges", + "notifications.policy.filter_private_mentions_title": "Enmentaduras privadas no solisitadas", + "notifications.policy.title": "Filtra avizos de…", "notifications_permission_banner.enable": "Kapasita avizos de ensimameza", "notifications_permission_banner.how_to_control": "Para risivir avizos kuando Mastodon no esta avierto, kapasita avizos de ensimameza. Puedes kontrolar presizamente kualos tipos de enteraksiones djeneren avizos de ensimameza kon el boton {icon} arriva kuando esten kapasitadas.", "notifications_permission_banner.title": "Nunkua te piedres niente", diff --git a/app/javascript/mastodon/locales/lt.json b/app/javascript/mastodon/locales/lt.json index 6963c43a3a..326560c888 100644 --- a/app/javascript/mastodon/locales/lt.json +++ b/app/javascript/mastodon/locales/lt.json @@ -439,6 +439,10 @@ "notification.reblog": "{name} pakėlė tavo įrašą", "notification.status": "{name} ką tik paskelbė", "notification.update": "{name} redagavo įrašą", + "notification_requests.accept": "Priimti", + "notification_requests.dismiss": "Atmesti", + "notification_requests.notifications_from": "Pranešimai iš {name}", + "notification_requests.title": "Filtruojami pranešimai", "notifications.clear": "Išvalyti pranešimus", "notifications.clear_confirmation": "Ar tikrai nori visam laikui išvalyti visus pranešimus?", "notifications.column_settings.admin.report": "Naujos ataskaitos:", @@ -470,6 +474,12 @@ "notifications.permission_denied": "Darbalaukio pranešimai nepasiekiami dėl anksčiau atmestos naršyklės leidimų užklausos.", "notifications.permission_denied_alert": "Negalima įjungti darbalaukio pranešimų, nes prieš tai naršyklės leidimas buvo atmestas.", "notifications.permission_required": "Darbalaukio pranešimai nepasiekiami, nes nebuvo suteiktas reikiamas leidimas.", + "notifications.policy.filter_new_accounts.hint": "Sukurta per {days, plural, one {vieną dieną} few {# dienas} many {# dienos} other {# dienų}}", + "notifications.policy.filter_new_accounts_title": "Naujos paskyros", + "notifications.policy.filter_not_following_hint": "Kol jų nepatvirtinsi rankiniu būdu", + "notifications.policy.filter_not_following_title": "Žmonių, kuriuos neseki", + "notifications.policy.filter_private_mentions_title": "Nepageidaujami privatūs paminėjimai", + "notifications.policy.title": "Filtruoti pranešimus iš…", "notifications_permission_banner.enable": "Įjungti darbalaukio pranešimus", "notifications_permission_banner.how_to_control": "Jei nori gauti pranešimus, kai Mastodon nėra atidarytas, įjunk darbalaukio pranešimus. Įjungęs (-usi) darbalaukio pranešimus, gali tiksliai valdyti, kokių tipų sąveikos generuoja darbalaukio pranešimus, naudojant pirmiau esančiu mygtuku {icon}.", "notifications_permission_banner.title": "Niekada nieko nepraleisk", diff --git a/app/javascript/mastodon/locales/nl.json b/app/javascript/mastodon/locales/nl.json index da5c4d8643..34a0c5ea5a 100644 --- a/app/javascript/mastodon/locales/nl.json +++ b/app/javascript/mastodon/locales/nl.json @@ -272,7 +272,7 @@ "filter_modal.select_filter.subtitle": "Een bestaande categorie gebruiken of een nieuwe aanmaken", "filter_modal.select_filter.title": "Dit bericht filteren", "filter_modal.title.status": "Een bericht filteren", - "filtered_notifications_banner.pending_requests": "Meldingen van {count, plural, =0 {no} one {één persoon} other {# mensen}} die je misschien kent", + "filtered_notifications_banner.pending_requests": "Meldingen van {count, plural, =0 {niemand} one {één persoon} other {# mensen}} die je misschien kent", "filtered_notifications_banner.title": "Gefilterde meldingen", "firehose.all": "Alles", "firehose.local": "Deze server", diff --git a/app/javascript/mastodon/locales/sk.json b/app/javascript/mastodon/locales/sk.json index a9c7affab1..07f7617358 100644 --- a/app/javascript/mastodon/locales/sk.json +++ b/app/javascript/mastodon/locales/sk.json @@ -271,6 +271,7 @@ "filter_modal.select_filter.subtitle": "Použite existujúcu kategóriu alebo vytvorte novú", "filter_modal.select_filter.title": "Filtrovanie tohto príspevku", "filter_modal.title.status": "Filtrovanie príspevku", + "filtered_notifications_banner.pending_requests": "Oboznámenia od {count, plural, =0 {nikoho} one {jedného človeka} other {# ľudí}} čo môžeš poznať", "firehose.all": "Všetko", "firehose.local": "Tento server", "firehose.remote": "Ostatné servery", @@ -439,6 +440,9 @@ "notification.reblog": "{name} zdieľa váš príspevok", "notification.status": "{name} uverejňuje niečo nové", "notification.update": "{name} upravuje príspevok", + "notification_requests.accept": "Prijať", + "notification_requests.notifications_from": "Oboznámenia od {name}", + "notification_requests.title": "Filtrované oboznámenia", "notifications.clear": "Vyčistiť upozornenia", "notifications.clear_confirmation": "Určite chcete nenávratne odstrániť všetky svoje upozornenia?", "notifications.column_settings.admin.report": "Nové hlásenia:", @@ -470,6 +474,9 @@ "notifications.permission_denied": "Upozornenia na ploche sú nedostupné pre už skôr zamietnutú požiadavku prehliadača", "notifications.permission_denied_alert": "Upozornenia na ploche nemôžu byť zapnuté, pretože požiadavka prehliadača bola už skôr zamietnutá", "notifications.permission_required": "Upozornenia na ploche sú nedostupné, pretože neboli udelené potrebné povolenia.", + "notifications.policy.filter_new_accounts_title": "Nové účty", + "notifications.policy.filter_not_followers_title": "Ľudia, ktorí ťa nenasledujú", + "notifications.policy.filter_not_following_title": "Ľudia, ktorých nenasleduješ", "notifications_permission_banner.enable": "Povoliť upozornenia na ploche", "notifications_permission_banner.how_to_control": "Ak chcete dostávať upozornenia, keď Mastodon nie je otvorený, povoľte upozornenia na ploche. Po ich zapnutí môžete presne kontrolovať, ktoré typy interakcií generujú upozornenia na ploche, a to prostredníctvom tlačidla {icon} vyššie.", "notifications_permission_banner.title": "Nenechajte si nič ujsť", diff --git a/app/javascript/mastodon/locales/sl.json b/app/javascript/mastodon/locales/sl.json index df150fc291..1fe7dd0786 100644 --- a/app/javascript/mastodon/locales/sl.json +++ b/app/javascript/mastodon/locales/sl.json @@ -272,6 +272,7 @@ "filter_modal.select_filter.subtitle": "Uporabite obstoječo kategorijo ali ustvarite novo", "filter_modal.select_filter.title": "Filtriraj to objavo", "filter_modal.title.status": "Filtrirajte objavo", + "filtered_notifications_banner.pending_requests": "Obvestila od {count, plural, =0 {nikogar, ki bi ga} one {# človeka, ki bi ga} two {# ljudi, ki bi ju} few {# ljudi, ki bi jih} other {# ljudi, ki bi jih}} lahko poznali", "filtered_notifications_banner.title": "Filtrirana obvestila", "firehose.all": "Vse", "firehose.local": "Ta strežnik", @@ -476,7 +477,9 @@ "notifications.permission_denied": "Namizna obvestila niso na voljo zaradi poprej zavrnjene zahteve dovoljenja brskalnika.", "notifications.permission_denied_alert": "Namiznih obvestil ni mogoče omogočiti, ker je bilo dovoljenje brskalnika že prej zavrnjeno", "notifications.permission_required": "Namizna obvestila niso na voljo, ker zahtevano dovoljenje ni bilo podeljeno.", + "notifications.policy.filter_new_accounts.hint": "Ustvarjen v {days, plural, one {zadnjem # dnevu} two {zadnjih # dnevih} few {zadnjih # dnevih} other {zadnjih # dnevih}}", "notifications.policy.filter_new_accounts_title": "Novi računi", + "notifications.policy.filter_not_followers_hint": "Vključujoč ljudi, ki vam sledijo manj kot {days, plural, one {# dan} two {# dneva} few {# dni} other {# dni}}", "notifications.policy.filter_not_followers_title": "Ljudje, ki vam ne sledijo", "notifications.policy.filter_not_following_hint": "Dokler jih ročno ne odobrite", "notifications.policy.filter_not_following_title": "Ljudje, ki jim ne sledite", diff --git a/app/javascript/mastodon/locales/sq.json b/app/javascript/mastodon/locales/sq.json index 00d517de72..beba09d59b 100644 --- a/app/javascript/mastodon/locales/sq.json +++ b/app/javascript/mastodon/locales/sq.json @@ -241,6 +241,7 @@ "empty_column.list": "Në këtë listë ende s’ka gjë. Kur anëtarë të kësaj liste postojnë gjendje të reja, ato do të shfaqen këtu.", "empty_column.lists": "Ende s’keni ndonjë listë. Kur të krijoni një të tillë, do të duket këtu.", "empty_column.mutes": "S’keni heshtuar ende ndonjë përdorues.", + "empty_column.notification_requests": "Gjithçka si duhet! S’ka ç’bëhet këtu. Kur merrni njoftime të reja, do të shfaqen këtu, në përputhje me rregullimet tuaja.", "empty_column.notifications": "Ende s’keni ndonjë njoftim. Ndërveproni me të tjerët që të nisë biseda.", "empty_column.public": "S’ka gjë këtu! Shkruani diçka publikisht, ose ndiqni dorazi përdorues prej instancash të tjera, që kjo të mbushet", "error.unexpected_crash.explanation": "Për shkak të një të mete në kodin tonë ose të një problemi përputhshmërie të shfletuesit, kjo faqe s’mund të shfaqet saktë.", @@ -271,6 +272,7 @@ "filter_modal.select_filter.subtitle": "Përdorni një kategori ekzistuese, ose krijoni një të re", "filter_modal.select_filter.title": "Filtroje këtë postim", "filter_modal.title.status": "Filtroni një postim", + "filtered_notifications_banner.title": "Njoftime të filtruar", "firehose.all": "Krejt", "firehose.local": "Këtë shërbyes", "firehose.remote": "Shërbyes të tjerë", @@ -439,6 +441,10 @@ "notification.reblog": "{name} përforcoi mesazhin tuaj", "notification.status": "{name} sapo postoi", "notification.update": "{name} përpunoi një postim", + "notification_requests.accept": "Pranoje", + "notification_requests.dismiss": "Hidhe tej", + "notification_requests.notifications_from": "Njoftime prej {name}", + "notification_requests.title": "Njoftime të filtruar", "notifications.clear": "Spastroji njoftimet", "notifications.clear_confirmation": "Jeni i sigurt se doni të spastrohen përgjithmonë krejt njoftimet tuaja?", "notifications.column_settings.admin.report": "Raportime të reja:", @@ -470,6 +476,13 @@ "notifications.permission_denied": "S’merren dot njoftime në desktop, ngaqë më herët shfletuesit i janë mohuar lejet për këtë", "notifications.permission_denied_alert": "S’mund të aktivizohen njoftimet në desktop, ngaqë lejet e shfletuesit për këtë janë mohuar më herët", "notifications.permission_required": "S’merren dot njoftime desktop, ngaqë s’është akorduar leja përkatëse.", + "notifications.policy.filter_new_accounts_title": "Llogari të reja", + "notifications.policy.filter_not_followers_title": "Persona që s’ju ndjekin", + "notifications.policy.filter_not_following_hint": "Deri sa t’i miratoni dorazi", + "notifications.policy.filter_not_following_title": "Persona që s’i ndiqni", + "notifications.policy.filter_private_mentions_hint": "Filtruar, hiq rastin nëse gjendet te përgjigje ndaj përmendjes tuaj, ose nëse dërguesin e ndiqni", + "notifications.policy.filter_private_mentions_title": "Përmendje private të pakërkuara", + "notifications.policy.title": "Filtroni njoftime nga…", "notifications_permission_banner.enable": "Aktivizo njoftime në desktop", "notifications_permission_banner.how_to_control": "Për të marrë njoftime, kur Mastodon-i s’është i hapur, aktivizoni njoftime në desktop. Përmes butoni {icon} më sipër, mund të kontrolloni me përpikëri cilat lloje ndërveprimesh prodhojnë njoftime në desktop, pasi të jenë aktivizuar.", "notifications_permission_banner.title": "Mos t’ju shpëtojë gjë", diff --git a/app/javascript/mastodon/locales/sr-Latn.json b/app/javascript/mastodon/locales/sr-Latn.json index 4c0264465d..6a5ad998d4 100644 --- a/app/javascript/mastodon/locales/sr-Latn.json +++ b/app/javascript/mastodon/locales/sr-Latn.json @@ -241,6 +241,7 @@ "empty_column.list": "U ovoj listi još nema ničega. Kada članovi ove liste objave nešto novo, pojaviće se ovde.", "empty_column.lists": "Još uvek nemate nijednu listu. Kada napravite jednu, ona će se pojaviti ovde.", "empty_column.mutes": "Još uvek ne ignorišete nijednog korisnika.", + "empty_column.notification_requests": "Sve je čisto! Ovde nema ničega. Kada dobijete nova obaveštenja, ona će se pojaviti ovde u skladu sa vašim podešavanjima.", "empty_column.notifications": "Još uvek nemate nikakva obaveštenja. Kada drugi ljudi budu u interakciji sa vama, videćete to ovde.", "empty_column.public": "Ovde nema ničega! Napišite nešto javno ili ručno pratite korisnike sa drugih servera da biste ovo popunili", "error.unexpected_crash.explanation": "Zbog greške u našem kodu ili problema sa kompatibilnošću pregledača, ova stranica se nije mogla pravilno prikazati.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Koristite postojeću kategoriju ili kreirajte novu", "filter_modal.select_filter.title": "Filtriraj ovu objavu", "filter_modal.title.status": "Filtriraj objavu", + "filtered_notifications_banner.pending_requests": "Obaveštenja od {count, plural, =0 {nikoga koga možda poznajete} one {# osobe koju možda poznajete} few {# osobe koje možda poznajete} other {# osoba koje možda poznajete}}", + "filtered_notifications_banner.title": "Filtrirana obaveštenja", "firehose.all": "Sve", "firehose.local": "Ovaj server", "firehose.remote": "Ostali serveri", @@ -439,6 +442,10 @@ "notification.reblog": "{name} je podržao vašu objavu", "notification.status": "{name} je upravo objavio", "notification.update": "{name} je uredio objavu", + "notification_requests.accept": "Prihvati", + "notification_requests.dismiss": "Odbaci", + "notification_requests.notifications_from": "Obaveštenja od {name}", + "notification_requests.title": "Filtrirana obaveštenja", "notifications.clear": "Obriši obaveštenja", "notifications.clear_confirmation": "Da li ste sigurni da želite trajno da obrišete sva vaša obaveštenja?", "notifications.column_settings.admin.report": "Nove prijave:", @@ -470,6 +477,15 @@ "notifications.permission_denied": "Obaveštenja na radnoj površini nisu dostupna zbog prethodno odbijenog zahteva za dozvolu pregledača", "notifications.permission_denied_alert": "Obaveštenja na radnoj površini ne mogu biti omogućena, jer je dozvola pregledača ranije bila odbijena", "notifications.permission_required": "Obaveštenja na radnoj površini nisu dostupna jer potrebna dozvola nije dodeljena.", + "notifications.policy.filter_new_accounts.hint": "Kreirano {days, plural, one {u poslednjeg # dana} few {u poslednja # dana} other {u poslednjih # dana}}", + "notifications.policy.filter_new_accounts_title": "Novi nalozi", + "notifications.policy.filter_not_followers_hint": "Uključujući ljude koji su vas pratili manje od {days, plural, one {# dana} few {# dana} other {# dana}}", + "notifications.policy.filter_not_followers_title": "Ljudi koji vas ne prate", + "notifications.policy.filter_not_following_hint": "Dok ih ručno ne odobrite", + "notifications.policy.filter_not_following_title": "Ljudi koje ne pratite", + "notifications.policy.filter_private_mentions_hint": "Filtrirano osim ako je odgovor na vaše pominjanje ili ako pratite pošiljaoca", + "notifications.policy.filter_private_mentions_title": "Neželjena privatna pominjanja", + "notifications.policy.title": "Filtriraj obaveštenja od…", "notifications_permission_banner.enable": "Omogućiti obaveštenja na radnoj površini", "notifications_permission_banner.how_to_control": "Da biste primali obaveštenja kada Mastodon nije otvoren, omogućite obaveštenja na radnoj površini. Kada su obaveštenja na radnoj površini omogućena vrste interakcija koje ona generišu mogu se podešavati pomoću dugmeta {icon}.", "notifications_permission_banner.title": "Nikada ništa ne propustite", diff --git a/app/javascript/mastodon/locales/sr.json b/app/javascript/mastodon/locales/sr.json index d00e322b42..9f96a2ccc0 100644 --- a/app/javascript/mastodon/locales/sr.json +++ b/app/javascript/mastodon/locales/sr.json @@ -241,6 +241,7 @@ "empty_column.list": "У овој листи још нема ничега. Када чланови ове листе објаве нешто ново, појавиће се овде.", "empty_column.lists": "Још увек немате ниједну листу. Када направите једну, она ће се појавити овде.", "empty_column.mutes": "Још увек не игноришете ниједног корисника.", + "empty_column.notification_requests": "Све је чисто! Овде нема ничега. Када добијете нова обавештења, она ће се појавити овде у складу са вашим подешавањима.", "empty_column.notifications": "Још увек немате никаква обавештења. Када други људи буду у интеракцији са вама, видећете то овде.", "empty_column.public": "Овде нема ничега! Напишите нешто јавно или ручно пратите кориснике са других сервера да бисте ово попунили", "error.unexpected_crash.explanation": "Због грешке у нашем коду или проблема са компатибилношћу прегледача, ова страница се није могла правилно приказати.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Користите постојећу категорију или креирајте нову", "filter_modal.select_filter.title": "Филтрирај ову објаву", "filter_modal.title.status": "Филтрирај објаву", + "filtered_notifications_banner.pending_requests": "Обавештења од {count, plural, =0 {никога кога можда познајете} one {# особе коју можда познајете} few {# особе које можда познајете} other {# особа које можда познајете}}", + "filtered_notifications_banner.title": "Филтрирана обавештења", "firehose.all": "Све", "firehose.local": "Овај сервер", "firehose.remote": "Остали сервери", @@ -439,6 +442,10 @@ "notification.reblog": "{name} је подржао вашу објаву", "notification.status": "{name} је управо објавио", "notification.update": "{name} је уредио објаву", + "notification_requests.accept": "Прихвати", + "notification_requests.dismiss": "Одбаци", + "notification_requests.notifications_from": "Обавештења од {name}", + "notification_requests.title": "Филтрирана обавештења", "notifications.clear": "Обриши обавештења", "notifications.clear_confirmation": "Да ли сте сигурни да желите трајно да обришете сва ваша обавештења?", "notifications.column_settings.admin.report": "Нове пријаве:", @@ -470,6 +477,15 @@ "notifications.permission_denied": "Обавештења на радној површини нису доступна због претходно одбијеног захтева за дозволу прегледача", "notifications.permission_denied_alert": "Обавештења на радној површини не могу бити омогућена, јер је дозвола прегледача раније била одбијена", "notifications.permission_required": "Обавештења на радној површини нису доступна јер потребна дозвола није додељена.", + "notifications.policy.filter_new_accounts.hint": "Креирано {days, plural, one {у последњег # дана} few {у последња # дана} other {у последњих # дана}}", + "notifications.policy.filter_new_accounts_title": "Нови налози", + "notifications.policy.filter_not_followers_hint": "Укључујући људе који су вас пратили мање од {days, plural, one {# дана} few {# дана} other {# дана}}", + "notifications.policy.filter_not_followers_title": "Људи који вас не прате", + "notifications.policy.filter_not_following_hint": "Док их ручно не одобрите", + "notifications.policy.filter_not_following_title": "Људи које не пратите", + "notifications.policy.filter_private_mentions_hint": "Филтрирано осим ако је одговор на ваше помињање или ако пратите пошиљаоца", + "notifications.policy.filter_private_mentions_title": "Нежељена приватна помињања", + "notifications.policy.title": "Филтрирај обавештења од…", "notifications_permission_banner.enable": "Омогућити обавештења на радној површини", "notifications_permission_banner.how_to_control": "Да бисте примали обавештења када Mastodon није отворен, омогућите обавештења на радној површини. Kада су обавештења на радној површини омогућена врсте интеракција које она генеришу могу се подешавати помоћу дугмета {icon}.", "notifications_permission_banner.title": "Никада ништа не пропустите", diff --git a/app/javascript/mastodon/locales/th.json b/app/javascript/mastodon/locales/th.json index d92cbcda1f..30a9601d67 100644 --- a/app/javascript/mastodon/locales/th.json +++ b/app/javascript/mastodon/locales/th.json @@ -271,6 +271,7 @@ "filter_modal.select_filter.subtitle": "ใช้หมวดหมู่ที่มีอยู่หรือสร้างหมวดหมู่ใหม่", "filter_modal.select_filter.title": "กรองโพสต์นี้", "filter_modal.title.status": "กรองโพสต์", + "filtered_notifications_banner.pending_requests": "การแจ้งเตือนจาก {count, plural, =0 {ไม่มีใคร} other {# คน}} ที่คุณอาจรู้จัก", "filtered_notifications_banner.title": "การแจ้งเตือนที่กรองอยู่", "firehose.all": "ทั้งหมด", "firehose.local": "เซิร์ฟเวอร์นี้", diff --git a/app/javascript/mastodon/locales/tr.json b/app/javascript/mastodon/locales/tr.json index 6774ad48e1..08fe40fe45 100644 --- a/app/javascript/mastodon/locales/tr.json +++ b/app/javascript/mastodon/locales/tr.json @@ -241,6 +241,7 @@ "empty_column.list": "Henüz bu listede bir şey yok. Bu listenin üyeleri bir şey paylaşığında burada gözükecek.", "empty_column.lists": "Henüz listen yok. Liste oluşturduğunda burada görünür.", "empty_column.mutes": "Henüz bir kullanıcıyı sessize almadınız.", + "empty_column.notification_requests": "Hepsi tamam! Burada yeni bir şey yok. Yeni bildirim aldığınızda, ayarlarınıza göre burada görüntülenecekler.", "empty_column.notifications": "Henüz bildiriminiz yok. Sohbete başlamak için başkalarıyla etkileşim kurun.", "empty_column.public": "Burada hiçbir şey yok! Herkese açık bir şeyler yazın veya burayı doldurmak için diğer sunuculardaki kullanıcıları takip edin", "error.unexpected_crash.explanation": "Bizim kodumuzdaki bir hatadan ya da tarayıcı uyumluluk sorunundan dolayı, bu sayfa düzgün görüntülenemedi.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Mevcut bir kategoriyi kullan veya yeni bir tane oluştur", "filter_modal.select_filter.title": "Bu gönderiyi süzgeçle", "filter_modal.title.status": "Bir gönderi süzgeçle", + "filtered_notifications_banner.pending_requests": "Bildiğiniz {count, plural, =0 {hiç kimseden} one {bir kişiden} other {# kişiden}} bildirim", + "filtered_notifications_banner.title": "Filtrelenmiş bildirimler", "firehose.all": "Tümü", "firehose.local": "Bu sunucu", "firehose.remote": "Diğer sunucular", @@ -356,7 +359,7 @@ "keyboard_shortcuts.hotkey": "Kısayol tuşu", "keyboard_shortcuts.legend": "Bu efsaneyi görüntülemek için", "keyboard_shortcuts.local": "Yerel akışı aç", - "keyboard_shortcuts.mention": "Yazandan bahsetmek için", + "keyboard_shortcuts.mention": "Yazana değinmek için", "keyboard_shortcuts.muted": "Sessize alınmış kullanıcı listesini açmak için", "keyboard_shortcuts.my_profile": "Profilinizi açmak için", "keyboard_shortcuts.notifications": "Bildirimler sütununu açmak için", @@ -433,12 +436,16 @@ "notification.favourite": "{name} gönderinizi beğendi", "notification.follow": "{name} seni takip etti", "notification.follow_request": "{name} size takip isteği gönderdi", - "notification.mention": "{name} senden bahsetti", + "notification.mention": "{name} sana değindi", "notification.own_poll": "Anketiniz sona erdi", "notification.poll": "Oy verdiğiniz bir anket sona erdi", "notification.reblog": "{name} gönderini yeniden paylaştı", "notification.status": "{name} az önce gönderdi", "notification.update": "{name} bir gönderiyi düzenledi", + "notification_requests.accept": "Onayla", + "notification_requests.dismiss": "Yoksay", + "notification_requests.notifications_from": "{name} bildirimleri", + "notification_requests.title": "Filtrelenmiş bildirimler", "notifications.clear": "Bildirimleri temizle", "notifications.clear_confirmation": "Tüm bildirimlerinizi kalıcı olarak temizlemek ister misiniz?", "notifications.column_settings.admin.report": "Yeni bildirimler:", @@ -470,6 +477,15 @@ "notifications.permission_denied": "Daha önce reddedilen tarayıcı izinleri isteği nedeniyle masaüstü bildirimleri kullanılamıyor", "notifications.permission_denied_alert": "Tarayıcı izni daha önce reddedildiğinden, masaüstü bildirimleri etkinleştirilemez", "notifications.permission_required": "Masaüstü bildirimleri, gereksinim duyulan izin verilmediği için mevcut değil.", + "notifications.policy.filter_new_accounts.hint": "Son {days, plural, one {bir gün} other {# gün}}de oluşturuldu", + "notifications.policy.filter_new_accounts_title": "Yeni hesaplar", + "notifications.policy.filter_not_followers_hint": "Sizi {days, plural, one {bir gün} other {# gün}}den azdır takip eden kişileri de içeriyor", + "notifications.policy.filter_not_followers_title": "Seni takip etmeyen kullanıcılar", + "notifications.policy.filter_not_following_hint": "Onları manuel olarak onaylayana kadar", + "notifications.policy.filter_not_following_title": "Takip etmediğin kullanıcılar", + "notifications.policy.filter_private_mentions_hint": "Kendi değinmenize yanıt veya takip ettiğiniz kullanıcıdan değilse filtrelenir", + "notifications.policy.filter_private_mentions_title": "İstenmeyen özel değinmeler", + "notifications.policy.title": "Şundan bildirimleri filtrele…", "notifications_permission_banner.enable": "Masaüstü bildirimlerini etkinleştir", "notifications_permission_banner.how_to_control": "Mastodon açık olmadığında bildirim almak için masaüstü bildirimlerini etkinleştirin. Etkinleştirildikten sonra yukarıdaki {icon} düğmesini kullanarak hangi etkileşim türlerinin masaüstü bildirimleri oluşturduğunu tam olarak kontrol edebilirsiniz.", "notifications_permission_banner.title": "Hiçbir şeyi kaçırmayın", diff --git a/app/javascript/mastodon/locales/vi.json b/app/javascript/mastodon/locales/vi.json index b1785ca5d0..c74c780127 100644 --- a/app/javascript/mastodon/locales/vi.json +++ b/app/javascript/mastodon/locales/vi.json @@ -241,6 +241,7 @@ "empty_column.list": "Chưa có tút. Khi những người trong danh sách này đăng tút mới, chúng sẽ xuất hiện ở đây.", "empty_column.lists": "Bạn chưa tạo danh sách nào.", "empty_column.mutes": "Bạn chưa ẩn bất kỳ ai.", + "empty_column.notification_requests": "Sạch sẽ! Không còn gì ở đây. Khi bạn nhận được thông báo mới, chúng sẽ xuất hiện ở đây theo cài đặt của bạn.", "empty_column.notifications": "Bạn chưa có thông báo nào. Hãy thử theo dõi hoặc nhắn riêng cho ai đó.", "empty_column.public": "Trống trơn! Bạn hãy viết gì đó hoặc bắt đầu theo dõi những người khác", "error.unexpected_crash.explanation": "Trang này có thể không hiển thị chính xác do lỗi lập trình Mastodon hoặc vấn đề tương thích trình duyệt.", @@ -271,6 +272,8 @@ "filter_modal.select_filter.subtitle": "Sử dụng một danh mục hiện có hoặc tạo một danh mục mới", "filter_modal.select_filter.title": "Lọc tút này", "filter_modal.title.status": "Lọc một tút", + "filtered_notifications_banner.pending_requests": "{count, plural, =0 {} other {#}}", + "filtered_notifications_banner.title": "Thông báo đã lọc", "firehose.all": "Toàn bộ", "firehose.local": "Máy chủ này", "firehose.remote": "Máy chủ khác", @@ -439,6 +442,10 @@ "notification.reblog": "{name} đăng lại tút của bạn", "notification.status": "{name} đăng tút mới", "notification.update": "{name} đã sửa tút", + "notification_requests.accept": "Chấp nhận", + "notification_requests.dismiss": "Bỏ qua", + "notification_requests.notifications_from": "Thông báo từ {name}", + "notification_requests.title": "Thông báo đã lọc", "notifications.clear": "Xóa hết thông báo", "notifications.clear_confirmation": "Bạn thật sự muốn xóa vĩnh viễn tất cả thông báo của mình?", "notifications.column_settings.admin.report": "Báo cáo mới:", @@ -470,6 +477,15 @@ "notifications.permission_denied": "Trình duyệt không cho phép hiển thị thông báo trên màn hình.", "notifications.permission_denied_alert": "Không thể bật thông báo trên màn hình bởi vì trình duyệt đã cấm trước đó", "notifications.permission_required": "Không hiện thông báo trên màn hình bởi vì chưa cho phép.", + "notifications.policy.filter_new_accounts.hint": "Đã tạo trong vòng {days, plural, other {# ngày}}", + "notifications.policy.filter_new_accounts_title": "Tài khoản mới", + "notifications.policy.filter_not_followers_hint": "Bao gồm những người đã theo dõi bạn ít hơn {days, plural, other {# ngày}}", + "notifications.policy.filter_not_followers_title": "Những người không theo dõi bạn", + "notifications.policy.filter_not_following_hint": "Cho tới khi bạn duyệt họ", + "notifications.policy.filter_not_following_title": "Những người bạn không theo dõi", + "notifications.policy.filter_private_mentions_hint": "Được lọc trừ khi nó trả lời lượt nhắc từ bạn hoặc nếu bạn theo dõi người gửi", + "notifications.policy.filter_private_mentions_title": "Lượt nhắc riêng tư không được yêu cầu", + "notifications.policy.title": "Lọc ra thông báo từ…", "notifications_permission_banner.enable": "Cho phép thông báo trên màn hình", "notifications_permission_banner.how_to_control": "Hãy bật thông báo trên màn hình để không bỏ lỡ những thông báo từ Mastodon. Một khi đã bật, bạn có thể lựa chọn từng loại thông báo khác nhau thông qua {icon} nút bên dưới.", "notifications_permission_banner.title": "Không bỏ lỡ điều thú vị nào", diff --git a/config/locales/fa.yml b/config/locales/fa.yml index 5d62f9143e..af5e1cfea8 100644 --- a/config/locales/fa.yml +++ b/config/locales/fa.yml @@ -508,7 +508,7 @@ fa: private_comment: یادداشت خصوصی public_comment: یادداشت عمومی purge: پاکسازی - title: ارتباط میان‌سروری + title: ارتباط همگانی total_blocked_by_us: مسدودشده از طرف ما total_followed_by_them: ما را پی می‌گیرند total_followed_by_us: ما پیگیرشان هستیم @@ -673,7 +673,7 @@ fa: follow_recommendations: پیروی از پیشنهادها profile_directory: شاخهٔ نمایه public_timelines: خط زمانی‌های عمومی - publish_discovered_servers: انتشار سرورهای یافته‌شده + publish_discovered_servers: انتشار کارسازهای کشف شده publish_statistics: انتشار آمار title: کشف trends: پرطرفدارها @@ -898,7 +898,7 @@ fa: description: prefix_invited_by_user: "@%{name} شما را به عضویت در این کارساز ماستودون دعوت کرده است!" prefix_sign_up: همین امروز عضو ماستودون شوید! - suffix: با داشتن حساب می‌توانید دیگران را پی بگیرید، نوشته‌های تازه منتشر کنید، و با کاربران دیگر از هر سرور ماستودون دیگری و حتی سرورهای دیگر در ارتباط باشید! + suffix: با داشتن حساب می‌توانید دیگران را پی گرفته، نوشته‌هایی منتشر کرده و با کاربرانی از هر کارساز ماستودن دیگری در ارتباط باشید! didnt_get_confirmation: یک پیوند تأیید را دریافت نکردید؟ dont_have_your_security_key: کلید امنیتیتان را ندارید؟ forgot_password: گذرواژه خود را فراموش کرده‌اید؟ @@ -921,7 +921,7 @@ fa: cas: CAS saml: SAML register: عضو شوید - registration_closed: سرور %{instance} عضو تازه‌ای نمی‌پذیرد + registration_closed: کارساز %{instance} عضو تازه‌ای نمی‌پذیرد resend_confirmation: ارسال مجدد پیوند تایید reset_password: بازنشانی گذرواژه rules: diff --git a/config/locales/fi.yml b/config/locales/fi.yml index bc73e3ee0e..156a4700eb 100644 --- a/config/locales/fi.yml +++ b/config/locales/fi.yml @@ -1551,7 +1551,7 @@ fi: limit_reached: Erilaisten reaktioiden raja saavutettu unrecognized_emoji: ei ole tunnistettu emoji redirects: - prompt: Mikäli luotat linkkiin, jatka napsauttaen sitä. + prompt: Jos luotat linkkiin, jatka napsauttamalla sitä. title: Olet poistumassa palvelimelta %{instance}. relationships: activity: Tilin aktiivisuus @@ -1802,7 +1802,7 @@ fi: explanation: Joku on yrittänyt kirjautua tilillesi antaen väärän toisen todennustunnisteen. further_actions_html: Jos se et ollut sinä, suosittelemme, että %{action} välittömästi, sillä se on saattanut vaarantua. subject: Kaksivaiheisen todennuksen virhe - title: Kaksivaihekirjautumisen toinen vaihe epäonnistui + title: Kaksivaiheisen kirjautumisen toinen vaihe epäonnistui suspicious_sign_in: change_password: vaihda salasanasi details: 'Tässä on tiedot kirjautumisesta:' diff --git a/config/locales/lad.yml b/config/locales/lad.yml index 2293045375..8affb2a88b 100644 --- a/config/locales/lad.yml +++ b/config/locales/lad.yml @@ -1846,15 +1846,25 @@ lad: apps_ios_action: Abasha en App Store apps_step: Abasha muestras aplikasyones ofisyalas. apps_title: Aplikasyones de Mastodon + checklist_title: Lista de bienvenida edit_profile_action: Personaliza edit_profile_step: Kompleta tu profil para aumentar tus enteraksyones. edit_profile_title: Personaliza tu profil explanation: Aki ay algunos konsejos para ampesar feature_action: Ambezate mas + feature_audience_title: Konstruye tu audyensya kon konfyansa + feature_control_title: Manten kontrol de tu linya de tyempo + feature_creativity_title: Kreativita sin paralelas + feature_moderation_title: La moderasyon komo deveria ser follow_action: Sige follow_title: Personaliza tu linya prinsipala + follows_subtitle: Sige kuentos konesidos follows_title: A ken segir + follows_view_more: Ve mas personas para segir + hashtags_recent_count: "%{people} personas en los ultimos %{days} diyas" + hashtags_subtitle: Eksplora los trendes de los ultimos 2 diyas hashtags_title: Etiketas en trend + hashtags_view_more: Ve mas etiketas en trend post_action: Eskrive post_step: Puedes introdusirte al mundo kon teksto, fotos, videos o anketas. post_title: Eskrive tu primera publikasyon diff --git a/config/locales/simple_form.be.yml b/config/locales/simple_form.be.yml index e72d16a187..245c1e8528 100644 --- a/config/locales/simple_form.be.yml +++ b/config/locales/simple_form.be.yml @@ -116,6 +116,7 @@ be: sign_up_requires_approval: Новыя рэгістрацыі запатрабуюць вашага ўзгаднення severity: Абярыце, што будзе адбывацца з запытамі з гэтага IP rule: + hint: Неабавязкова. Пазначце дадатковыя звесткі аб правіле text: Апішыце правіла ці патрабаванне для карыстальнікаў на гэтым серверы. Імкніцеся зрабіць яго простым ды кароткім sessions: otp: 'Увядзіце код двухфактарнай аўтэнтыфікацыі з вашага тэлефона або адзін з кодаў аднаўлення:' @@ -299,6 +300,7 @@ be: patch: Апавяшчаць аб абнаўленнях з выпраўленнем памылак trending_tag: Новы трэнд патрабуе разгляду rule: + hint: Дадатковая інфармацыя text: Правіла settings: indexable: Індэксаваць профіль у пошукавых сістэмах diff --git a/config/locales/simple_form.ca.yml b/config/locales/simple_form.ca.yml index 357f482b83..e4bee0214c 100644 --- a/config/locales/simple_form.ca.yml +++ b/config/locales/simple_form.ca.yml @@ -116,7 +116,7 @@ ca: sign_up_requires_approval: Els nous registres requeriran la teva aprovació severity: Tria què passarà amb les sol·licituds des d’aquesta IP rule: - hint: Opcional. Proporciona més detalls de la regla + hint: Opcional. Proporcioneu més detalls de la regla text: Descriu una norma o requeriment pels usuaris d'aquest servidor. Intenta fer-la curta i senzilla sessions: otp: 'Introdueix el codi de dos factors generat per el teu telèfon o utilitza un dels teus codis de recuperació:' diff --git a/config/locales/simple_form.fa.yml b/config/locales/simple_form.fa.yml index a312e5aa1c..03f1875451 100644 --- a/config/locales/simple_form.fa.yml +++ b/config/locales/simple_form.fa.yml @@ -62,7 +62,7 @@ fa: username: تنها می‌توانید از حروف، اعداد، و زیرخط استفاده کنید whole_word: اگر کلیدواژه فقط دارای حروف و اعداد باشد، تنها وقتی پیدا می‌شود که با کل یک واژه در متن منطبق باشد، نه با بخشی از یک واژه domain_allow: - domain: این دامین خواهد توانست داده‌ها از این سرور را دریافت کند و داده‌های از این دامین در این‌جا پردازش و ذخیره خواهند شد + domain: این دامنه خواهد توانست داده‌ها را از این کارساز واکشی کرده و داده‌های ورودی از آن پردازش و ذخیره خواهند شد email_domain_block: domain: این می‌تواند نام دامنه‌ای باشد که در نشانی رایانامه یا رکورد MX استفاده می‌شود. پس از ثبت نام بررسی خواهند شد. with_dns_records: تلاشی برای resolve کردن رکوردهای ساناد دامنهٔ داده‌شده انجام شده و نتیجه نیز مسدود خواهد شد diff --git a/config/locales/simple_form.fi.yml b/config/locales/simple_form.fi.yml index 3d79f76e8a..b1c2e91a1e 100644 --- a/config/locales/simple_form.fi.yml +++ b/config/locales/simple_form.fi.yml @@ -116,6 +116,7 @@ fi: sign_up_requires_approval: Uudet rekisteröitymiset edellyttävät hyväksyntääsi severity: Valitse, mitä tapahtuu tämän IP-osoitteen pyynnöille rule: + hint: Valinnainen. Anna lisätietoja säännöstä text: Kuvaile sääntöä tai edellytystä palvelimesi käyttäjille. Suosi tiivistä, yksinkertaista ilmaisua sessions: otp: 'Näppäile mobiilisovelluksessa näkyvä kaksivaiheisen todennuksen tunnusluku, tai käytä tarvittaessa palautuskoodia:' @@ -299,6 +300,7 @@ fi: patch: Ilmoita virhekorjauspäivityksistä trending_tag: Uusi trendi vaatii tarkistusta rule: + hint: Lisätietoja text: Sääntö settings: indexable: Sisällytä profiilisivu hakukoneisiin diff --git a/config/locales/simple_form.ja.yml b/config/locales/simple_form.ja.yml index e7b8e15616..81615c1344 100644 --- a/config/locales/simple_form.ja.yml +++ b/config/locales/simple_form.ja.yml @@ -116,6 +116,7 @@ ja: sign_up_requires_approval: 承認するまで新規登録が完了しなくなります severity: このIPに対する措置を選択してください rule: + hint: ルールについての具体的な説明を追加できます (任意) text: ユーザーのためのルールや要件を記述してください。短くシンプルにしてください。 sessions: otp: '携帯電話のアプリで生成された二要素認証コードを入力するか、リカバリーコードを使用してください:' @@ -299,6 +300,7 @@ ja: patch: 緊急のアップデートとバグ修正アップデートを通知する trending_tag: 新しいトレンドのレビューをする必要がある時 rule: + hint: ルールの補足説明 text: ルール settings: indexable: 検索エンジンからアクセスできるようにする diff --git a/config/locales/simple_form.lad.yml b/config/locales/simple_form.lad.yml index 2de24c38ff..75113be18b 100644 --- a/config/locales/simple_form.lad.yml +++ b/config/locales/simple_form.lad.yml @@ -116,6 +116,7 @@ lad: sign_up_requires_approval: Muevas enrejistrasyones rekeriran tu achetasyon severity: Eskoje lo ke pasara kon las petisyones dizde este IP rule: + hint: Opsyonal. Adjusta mas detalyos sovre la regla text: Deskrive una norma o rekerensya para los utilizadores de este sirvidor. Aprova fazerla kurta i kolay sessions: otp: 'Introduse el kodiche de autentifikasyon de dos pasos djenerado por tu aplikasyon de telefon o uza uno de tus kodiches de recuperasyon:' diff --git a/config/locales/simple_form.sr-Latn.yml b/config/locales/simple_form.sr-Latn.yml index 6ed095e2a2..13296a04ce 100644 --- a/config/locales/simple_form.sr-Latn.yml +++ b/config/locales/simple_form.sr-Latn.yml @@ -116,6 +116,7 @@ sr-Latn: sign_up_requires_approval: Nove registracije će zahtevati Vaše odobrenje severity: Izaberite šta će se desiti sa zahtevima sa ove IP adrese rule: + hint: Opcionalno. Pružite više detalja o pravilu text: Opišite pravilo ili uslov za korisnike na ovom serveru. Potrudite se da opis bude kratak i jednostavan sessions: otp: 'Unesite dvofaktorski kod sa Vašeg telefona ili koristite jedan od kodova za oporavak:' diff --git a/config/locales/simple_form.sr.yml b/config/locales/simple_form.sr.yml index 4fb32000b7..9820482182 100644 --- a/config/locales/simple_form.sr.yml +++ b/config/locales/simple_form.sr.yml @@ -116,6 +116,7 @@ sr: sign_up_requires_approval: Нове регистрације ће захтевати Ваше одобрење severity: Изаберите шта ће се десити са захтевима са ове IP адресе rule: + hint: Опционално. Пружите више детаља о правилу text: Опишите правило или услов за кориснике на овом серверу. Потрудите се да опис буде кратак и једноставан sessions: otp: 'Унесите двофакторски код са Вашег телефона или користите један од кодова за опоравак:' diff --git a/config/locales/simple_form.tr.yml b/config/locales/simple_form.tr.yml index cc644d4df4..16c23caeb0 100644 --- a/config/locales/simple_form.tr.yml +++ b/config/locales/simple_form.tr.yml @@ -116,6 +116,7 @@ tr: sign_up_requires_approval: Yeni kayıt onayınızı gerektirir severity: Bu IP'den gelen isteklere ne olacağını seçin rule: + hint: İsteğe bağlı. Kural hakkında daha fazla ayrıntı verin text: Bu sunucu üzerindeki kullanıcılar için bir kural veya gereksinimi tanımlayın. Kuralı kısa ve yalın tutmaya çalışın sessions: otp: 'Telefonunuzdaki two-factor kodunuzu giriniz veya kurtarma kodlarınızdan birini giriniz:' @@ -299,6 +300,7 @@ tr: patch: Yama güncellemelerini bildir trending_tag: Yeni eğilimin gözden geçmesi gerekiyor rule: + hint: Ek bilgi text: Kural settings: indexable: Arama motorları profil sayfasını içersin diff --git a/config/locales/sq.yml b/config/locales/sq.yml index ecf79da51a..0aa7ad34bc 100644 --- a/config/locales/sq.yml +++ b/config/locales/sq.yml @@ -1843,6 +1843,7 @@ sq: apps_step: Shkarkoni aplikacionet tona zyrtare. apps_title: Aplikacione Mastodon checklist_subtitle: 'Le t’ju vëmë në udhë drejt këtij horizonti të ri rrjetesh shoqërorë:' + checklist_title: Listë hapash mirëseardhjeje edit_profile_action: Personalizojeni edit_profile_step: Përforconi ndërveprimet tuaja, duke pasur një profil shterues. edit_profile_title: Personalizoni profilin tuaj From acf3f410aef3cfb9e8f5f73042526de9b2f96d13 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Wed, 13 Mar 2024 13:54:50 +0100 Subject: [PATCH 83/96] Fix navigation panel icons missing classes (#29569) --- .../mastodon/features/ui/components/navigation_panel.jsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx index deda3258b9..f2b40af72b 100644 --- a/app/javascript/mastodon/features/ui/components/navigation_panel.jsx +++ b/app/javascript/mastodon/features/ui/components/navigation_panel.jsx @@ -64,8 +64,8 @@ const NotificationsLink = () => { } - activeIcon={} + icon={} + activeIcon={} text={intl.formatMessage(messages.notifications)} /> ); @@ -88,8 +88,8 @@ const FollowRequestsLink = () => { } - activeIcon={} + icon={} + activeIcon={} text={intl.formatMessage(messages.followRequests)} /> ); From c09b8a716473ff251ecd81fe6050a38133ddabb0 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 13 Mar 2024 10:11:23 -0400 Subject: [PATCH 84/96] Add `Account.without_internal` scope (#29559) Co-authored-by: Claire --- app/controllers/application_controller.rb | 2 +- app/helpers/application_helper.rb | 2 +- app/models/account.rb | 1 + spec/models/account_spec.rb | 8 ++++---- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index a046ea19c9..8ba10d64c0 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -129,7 +129,7 @@ class ApplicationController < ActionController::Base end def single_user_mode? - @single_user_mode ||= Rails.configuration.x.single_user_mode && Account.where('id > 0').exists? + @single_user_mode ||= Rails.configuration.x.single_user_mode && Account.without_internal.exists? end def use_seamless_external_login? diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 4f7f66985d..a4f92743c5 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -213,7 +213,7 @@ module ApplicationHelper state_params[:moved_to_account] = current_account.moved_to_account end - state_params[:owner] = Account.local.without_suspended.where('id > 0').first if single_user_mode? + state_params[:owner] = Account.local.without_suspended.without_internal.first if single_user_mode? json = ActiveModelSerializers::SerializableResource.new(InitialStatePresenter.new(state_params), serializer: InitialStateSerializer).to_json # rubocop:disable Rails/OutputSafety diff --git a/app/models/account.rb b/app/models/account.rb index d627fd6b64..0a4c0f3478 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -111,6 +111,7 @@ class Account < ApplicationRecord normalizes :username, with: ->(username) { username.squish } + scope :without_internal, -> { where(id: 1...) } scope :remote, -> { where.not(domain: nil) } scope :local, -> { where(domain: nil) } scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) } diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index f6376eb36e..bdb33e53ce 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -888,7 +888,7 @@ RSpec.describe Account do { username: 'b', domain: 'b' }, ].map(&method(:Fabricate).curry(2).call(:account)) - expect(described_class.where('id > 0').alphabetic).to eq matches + expect(described_class.without_internal.alphabetic).to eq matches end end @@ -939,7 +939,7 @@ RSpec.describe Account do it 'returns an array of accounts who do not have a domain' do local_account = Fabricate(:account, domain: nil) _account_with_domain = Fabricate(:account, domain: 'example.com') - expect(described_class.where('id > 0').local).to contain_exactly(local_account) + expect(described_class.without_internal.local).to contain_exactly(local_account) end end @@ -950,14 +950,14 @@ RSpec.describe Account do matches[index] = Fabricate(:account, domain: matches[index]) end - expect(described_class.where('id > 0').partitioned).to match_array(matches) + expect(described_class.without_internal.partitioned).to match_array(matches) end end describe 'recent' do it 'returns a relation of accounts sorted by recent creation' do matches = Array.new(2) { Fabricate(:account) } - expect(described_class.where('id > 0').recent).to match_array(matches) + expect(described_class.without_internal.recent).to match_array(matches) end end From 6262ceeb704c9636f09c25e856638ee4441b58d9 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 13 Mar 2024 11:42:39 -0400 Subject: [PATCH 85/96] Fix `RSpec/DescribedClass` cop (#29472) --- spec/lib/feed_manager_spec.rb | 12 +++++----- spec/lib/sanitize/config_spec.rb | 2 +- spec/lib/signature_parser_spec.rb | 2 +- spec/lib/webfinger_resource_spec.rb | 4 ++-- spec/models/account_spec.rb | 2 +- spec/models/form/import_spec.rb | 2 +- spec/models/privacy_policy_spec.rb | 2 +- spec/models/tag_spec.rb | 2 +- spec/models/user_role_spec.rb | 22 +++++++++---------- spec/models/user_settings_spec.rb | 4 ++-- spec/services/post_status_service_spec.rb | 2 +- .../validators/follow_limit_validator_spec.rb | 2 +- 12 files changed, 29 insertions(+), 29 deletions(-) diff --git a/spec/lib/feed_manager_spec.rb b/spec/lib/feed_manager_spec.rb index 618b6167bd..613bcb3045 100644 --- a/spec/lib/feed_manager_spec.rb +++ b/spec/lib/feed_manager_spec.rb @@ -11,7 +11,7 @@ RSpec.describe FeedManager do end it 'tracks at least as many statuses as reblogs', :skip_stub do - expect(FeedManager::REBLOG_FALLOFF).to be <= FeedManager::MAX_ITEMS + expect(described_class::REBLOG_FALLOFF).to be <= described_class::MAX_ITEMS end describe '#key' do @@ -225,12 +225,12 @@ RSpec.describe FeedManager do it 'trims timelines if they will have more than FeedManager::MAX_ITEMS' do account = Fabricate(:account) status = Fabricate(:status) - members = Array.new(FeedManager::MAX_ITEMS) { |count| [count, count] } + members = Array.new(described_class::MAX_ITEMS) { |count| [count, count] } redis.zadd("feed:home:#{account.id}", members) described_class.instance.push_to_home(account, status) - expect(redis.zcard("feed:home:#{account.id}")).to eq FeedManager::MAX_ITEMS + expect(redis.zcard("feed:home:#{account.id}")).to eq described_class::MAX_ITEMS end context 'with reblogs' do @@ -260,7 +260,7 @@ RSpec.describe FeedManager do described_class.instance.push_to_home(account, reblogged) # Fill the feed with intervening statuses - FeedManager::REBLOG_FALLOFF.times do + described_class::REBLOG_FALLOFF.times do described_class.instance.push_to_home(account, Fabricate(:status)) end @@ -321,7 +321,7 @@ RSpec.describe FeedManager do described_class.instance.push_to_home(account, reblogs.first) # Fill the feed with intervening statuses - FeedManager::REBLOG_FALLOFF.times do + described_class::REBLOG_FALLOFF.times do described_class.instance.push_to_home(account, Fabricate(:status)) end @@ -467,7 +467,7 @@ RSpec.describe FeedManager do status = Fabricate(:status, reblog: reblogged) described_class.instance.push_to_home(receiver, reblogged) - FeedManager::REBLOG_FALLOFF.times { described_class.instance.push_to_home(receiver, Fabricate(:status)) } + described_class::REBLOG_FALLOFF.times { described_class.instance.push_to_home(receiver, Fabricate(:status)) } described_class.instance.push_to_home(receiver, status) # The reblogging status should show up under normal conditions. diff --git a/spec/lib/sanitize/config_spec.rb b/spec/lib/sanitize/config_spec.rb index 550ad1c52b..2d8dc2f63b 100644 --- a/spec/lib/sanitize/config_spec.rb +++ b/spec/lib/sanitize/config_spec.rb @@ -4,7 +4,7 @@ require 'rails_helper' describe Sanitize::Config do describe '::MASTODON_STRICT' do - subject { Sanitize::Config::MASTODON_STRICT } + subject { described_class::MASTODON_STRICT } it 'converts h1 to p strong' do expect(Sanitize.fragment('

Foo

', subject)).to eq '

Foo

' diff --git a/spec/lib/signature_parser_spec.rb b/spec/lib/signature_parser_spec.rb index 08e9bea66c..3f398e8dd0 100644 --- a/spec/lib/signature_parser_spec.rb +++ b/spec/lib/signature_parser_spec.rb @@ -27,7 +27,7 @@ RSpec.describe SignatureParser do let(:header) { 'hello this is malformed!' } it 'raises an error' do - expect { subject }.to raise_error(SignatureParser::ParsingError) + expect { subject }.to raise_error(described_class::ParsingError) end end end diff --git a/spec/lib/webfinger_resource_spec.rb b/spec/lib/webfinger_resource_spec.rb index 0e2bdcb71a..442f91aad0 100644 --- a/spec/lib/webfinger_resource_spec.rb +++ b/spec/lib/webfinger_resource_spec.rb @@ -46,7 +46,7 @@ describe WebfingerResource do expect do described_class.new(resource).username - end.to raise_error(WebfingerResource::InvalidRequest) + end.to raise_error(described_class::InvalidRequest) end it 'finds the username in a valid https route' do @@ -137,7 +137,7 @@ describe WebfingerResource do expect do described_class.new(resource).username - end.to raise_error(WebfingerResource::InvalidRequest) + end.to raise_error(described_class::InvalidRequest) end end end diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb index bdb33e53ce..2c5df198d9 100644 --- a/spec/models/account_spec.rb +++ b/spec/models/account_spec.rb @@ -678,7 +678,7 @@ RSpec.describe Account do end describe 'MENTION_RE' do - subject { Account::MENTION_RE } + subject { described_class::MENTION_RE } it 'matches usernames in the middle of a sentence' do expect(subject.match('Hello to @alice from me')[1]).to eq 'alice' diff --git a/spec/models/form/import_spec.rb b/spec/models/form/import_spec.rb index 872697485e..c2f41d442c 100644 --- a/spec/models/form/import_spec.rb +++ b/spec/models/form/import_spec.rb @@ -30,7 +30,7 @@ RSpec.describe Form::Import do it 'has errors' do subject.validate - expect(subject.errors[:data]).to include(I18n.t('imports.errors.over_rows_processing_limit', count: Form::Import::ROWS_PROCESSING_LIMIT)) + expect(subject.errors[:data]).to include(I18n.t('imports.errors.over_rows_processing_limit', count: described_class::ROWS_PROCESSING_LIMIT)) end end diff --git a/spec/models/privacy_policy_spec.rb b/spec/models/privacy_policy_spec.rb index 0d74713755..03bbe7264b 100644 --- a/spec/models/privacy_policy_spec.rb +++ b/spec/models/privacy_policy_spec.rb @@ -8,7 +8,7 @@ describe PrivacyPolicy do it 'has the privacy text' do policy = described_class.current - expect(policy.text).to eq(PrivacyPolicy::DEFAULT_PRIVACY_POLICY) + expect(policy.text).to eq(described_class::DEFAULT_PRIVACY_POLICY) end end diff --git a/spec/models/tag_spec.rb b/spec/models/tag_spec.rb index 69aaeed0af..5a1d620884 100644 --- a/spec/models/tag_spec.rb +++ b/spec/models/tag_spec.rb @@ -22,7 +22,7 @@ RSpec.describe Tag do end describe 'HASHTAG_RE' do - subject { Tag::HASHTAG_RE } + subject { described_class::HASHTAG_RE } it 'does not match URLs with anchors with non-hashtag characters' do expect(subject.match('Check this out https://medium.com/@alice/some-article#.abcdef123')).to be_nil diff --git a/spec/models/user_role_spec.rb b/spec/models/user_role_spec.rb index 96d12263ae..4ab66c3260 100644 --- a/spec/models/user_role_spec.rb +++ b/spec/models/user_role_spec.rb @@ -8,7 +8,7 @@ RSpec.describe UserRole do describe '#can?' do context 'with a single flag' do it 'returns true if any of them are present' do - subject.permissions = UserRole::FLAGS[:manage_reports] + subject.permissions = described_class::FLAGS[:manage_reports] expect(subject.can?(:manage_reports)).to be true end @@ -19,7 +19,7 @@ RSpec.describe UserRole do context 'with multiple flags' do it 'returns true if any of them are present' do - subject.permissions = UserRole::FLAGS[:manage_users] + subject.permissions = described_class::FLAGS[:manage_users] expect(subject.can?(:manage_reports, :manage_users)).to be true end @@ -51,7 +51,7 @@ RSpec.describe UserRole do describe '#permissions_as_keys' do before do - subject.permissions = UserRole::FLAGS[:invite_users] | UserRole::FLAGS[:view_dashboard] | UserRole::FLAGS[:manage_reports] + subject.permissions = described_class::FLAGS[:invite_users] | described_class::FLAGS[:view_dashboard] | described_class::FLAGS[:manage_reports] end it 'returns an array' do @@ -70,7 +70,7 @@ RSpec.describe UserRole do let(:input) { %w(manage_users) } it 'sets permission flags' do - expect(subject.permissions).to eq UserRole::FLAGS[:manage_users] + expect(subject.permissions).to eq described_class::FLAGS[:manage_users] end end @@ -78,7 +78,7 @@ RSpec.describe UserRole do let(:input) { %w(manage_users manage_reports) } it 'sets permission flags' do - expect(subject.permissions).to eq UserRole::FLAGS[:manage_users] | UserRole::FLAGS[:manage_reports] + expect(subject.permissions).to eq described_class::FLAGS[:manage_users] | described_class::FLAGS[:manage_reports] end end @@ -86,7 +86,7 @@ RSpec.describe UserRole do let(:input) { %w(foo) } it 'does not set permission flags' do - expect(subject.permissions).to eq UserRole::Flags::NONE + expect(subject.permissions).to eq described_class::Flags::NONE end end end @@ -96,7 +96,7 @@ RSpec.describe UserRole do subject { described_class.nobody } it 'returns none' do - expect(subject.computed_permissions).to eq UserRole::Flags::NONE + expect(subject.computed_permissions).to eq described_class::Flags::NONE end end @@ -110,11 +110,11 @@ RSpec.describe UserRole do context 'when role has the administrator flag' do before do - subject.permissions = UserRole::FLAGS[:administrator] + subject.permissions = described_class::FLAGS[:administrator] end it 'returns all permissions' do - expect(subject.computed_permissions).to eq UserRole::Flags::ALL + expect(subject.computed_permissions).to eq described_class::Flags::ALL end end @@ -135,7 +135,7 @@ RSpec.describe UserRole do end it 'has default permissions' do - expect(subject.permissions).to eq UserRole::FLAGS[:invite_users] + expect(subject.permissions).to eq described_class::FLAGS[:invite_users] end it 'has negative position' do @@ -155,7 +155,7 @@ RSpec.describe UserRole do end it 'has no permissions' do - expect(subject.permissions).to eq UserRole::Flags::NONE + expect(subject.permissions).to eq described_class::Flags::NONE end it 'has negative position' do diff --git a/spec/models/user_settings_spec.rb b/spec/models/user_settings_spec.rb index 653597c90d..dfc4910d6e 100644 --- a/spec/models/user_settings_spec.rb +++ b/spec/models/user_settings_spec.rb @@ -24,7 +24,7 @@ RSpec.describe UserSettings do context 'when setting was not defined' do it 'raises error' do - expect { subject[:foo] }.to raise_error UserSettings::KeyError + expect { subject[:foo] }.to raise_error described_class::KeyError end end end @@ -93,7 +93,7 @@ RSpec.describe UserSettings do describe '.definition_for' do context 'when key is defined' do it 'returns a setting' do - expect(described_class.definition_for(:always_send_emails)).to be_a UserSettings::Setting + expect(described_class.definition_for(:always_send_emails)).to be_a described_class::Setting end end diff --git a/spec/services/post_status_service_spec.rb b/spec/services/post_status_service_spec.rb index ee68092a36..3c2e4f3a79 100644 --- a/spec/services/post_status_service_spec.rb +++ b/spec/services/post_status_service_spec.rb @@ -150,7 +150,7 @@ RSpec.describe PostStatusService do expect do subject.call(account, text: '@alice hm, @bob is really annoying lately', allowed_mentions: [mentioned_account.id]) - end.to raise_error(an_instance_of(PostStatusService::UnexpectedMentionsError).and(having_attributes(accounts: [unexpected_mentioned_account]))) + end.to raise_error(an_instance_of(described_class::UnexpectedMentionsError).and(having_attributes(accounts: [unexpected_mentioned_account]))) end it 'processes duplicate mentions correctly' do diff --git a/spec/validators/follow_limit_validator_spec.rb b/spec/validators/follow_limit_validator_spec.rb index 51b0683d27..e069b0ed3a 100644 --- a/spec/validators/follow_limit_validator_spec.rb +++ b/spec/validators/follow_limit_validator_spec.rb @@ -56,7 +56,7 @@ RSpec.describe FollowLimitValidator do follow.valid? - expect(follow.errors[:base]).to include(I18n.t('users.follow_limit_reached', limit: FollowLimitValidator::LIMIT)) + expect(follow.errors[:base]).to include(I18n.t('users.follow_limit_reached', limit: described_class::LIMIT)) end end From 71e5f0f48c3bc95a894fa3ad2c5a34f05c584482 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 13 Mar 2024 11:43:40 -0400 Subject: [PATCH 86/96] Add coverage for suspended instance actor scenario (#29571) --- spec/controllers/instance_actors_controller_spec.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/spec/controllers/instance_actors_controller_spec.rb b/spec/controllers/instance_actors_controller_spec.rb index 70aaff9d65..42ffb67988 100644 --- a/spec/controllers/instance_actors_controller_spec.rb +++ b/spec/controllers/instance_actors_controller_spec.rb @@ -41,6 +41,14 @@ RSpec.describe InstanceActorsController do it_behaves_like 'shared behavior' end + + context 'with a suspended instance actor' do + let(:authorized_fetch_mode) { false } + + before { Account.representative.update(suspended_at: 10.days.ago) } + + it_behaves_like 'shared behavior' + end end end end From a32a126cac42c73236236b5a9bd660765b9c58ee Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 13 Mar 2024 17:47:48 +0100 Subject: [PATCH 87/96] Hide media by default in notification requests (#29572) --- app/javascript/mastodon/components/status.jsx | 25 ++++++----- .../features/notifications/request.jsx | 41 ++++++++++--------- .../ui/util/sensitive_media_context.tsx | 28 +++++++++++++ 3 files changed, 65 insertions(+), 29 deletions(-) create mode 100644 app/javascript/mastodon/features/ui/util/sensitive_media_context.tsx diff --git a/app/javascript/mastodon/components/status.jsx b/app/javascript/mastodon/components/status.jsx index be9a1cec65..7b97e45766 100644 --- a/app/javascript/mastodon/components/status.jsx +++ b/app/javascript/mastodon/components/status.jsx @@ -22,6 +22,7 @@ import Card from '../features/status/components/card'; // to use the progress bar to show download progress import Bundle from '../features/ui/components/bundle'; import { MediaGallery, Video, Audio } from '../features/ui/util/async-components'; +import { SensitiveMediaContext } from '../features/ui/util/sensitive_media_context'; import { displayMedia } from '../initial_state'; import { Avatar } from './avatar'; @@ -78,6 +79,8 @@ const messages = defineMessages({ class Status extends ImmutablePureComponent { + static contextType = SensitiveMediaContext; + static propTypes = { status: ImmutablePropTypes.map, account: ImmutablePropTypes.record, @@ -133,19 +136,21 @@ class Status extends ImmutablePureComponent { ]; state = { - showMedia: defaultMediaVisibility(this.props.status), - statusId: undefined, + showMedia: defaultMediaVisibility(this.props.status) && !(this.context?.hideMediaByDefault), forceFilter: undefined, }; - static getDerivedStateFromProps(nextProps, prevState) { - if (nextProps.status && nextProps.status.get('id') !== prevState.statusId) { - return { - showMedia: defaultMediaVisibility(nextProps.status), - statusId: nextProps.status.get('id'), - }; - } else { - return null; + componentDidUpdate (prevProps) { + // This will potentially cause a wasteful redraw, but in most cases `Status` components are used + // with a `key` directly depending on their `id`, preventing re-use of the component across + // different IDs. + // But just in case this does change, reset the state on status change. + + if (this.props.status?.get('id') !== prevProps.status?.get('id')) { + this.setState({ + showMedia: defaultMediaVisibility(this.props.status) && !(this.context?.hideMediaByDefault), + forceFilter: undefined, + }); } } diff --git a/app/javascript/mastodon/features/notifications/request.jsx b/app/javascript/mastodon/features/notifications/request.jsx index 5977a6ce96..da9ed21e55 100644 --- a/app/javascript/mastodon/features/notifications/request.jsx +++ b/app/javascript/mastodon/features/notifications/request.jsx @@ -15,6 +15,7 @@ import Column from 'mastodon/components/column'; import ColumnHeader from 'mastodon/components/column_header'; import { IconButton } from 'mastodon/components/icon_button'; import ScrollableList from 'mastodon/components/scrollable_list'; +import { SensitiveMediaContextProvider } from 'mastodon/features/ui/util/sensitive_media_context'; import NotificationContainer from './containers/notification_container'; @@ -106,25 +107,27 @@ export const NotificationRequest = ({ multiColumn, params: { id } }) => { )} /> - - {notifications.map(item => ( - item && - ))} - + + + {notifications.map(item => ( + item && + ))} + + {columnTitle} diff --git a/app/javascript/mastodon/features/ui/util/sensitive_media_context.tsx b/app/javascript/mastodon/features/ui/util/sensitive_media_context.tsx new file mode 100644 index 0000000000..408154c31b --- /dev/null +++ b/app/javascript/mastodon/features/ui/util/sensitive_media_context.tsx @@ -0,0 +1,28 @@ +import { createContext, useContext, useMemo } from 'react'; + +export const SensitiveMediaContext = createContext<{ + hideMediaByDefault: boolean; +}>({ + hideMediaByDefault: false, +}); + +export function useSensitiveMediaContext() { + return useContext(SensitiveMediaContext); +} + +type ContextValue = React.ContextType; + +export const SensitiveMediaContextProvider: React.FC< + React.PropsWithChildren<{ hideMediaByDefault: boolean }> +> = ({ hideMediaByDefault, children }) => { + const contextValue = useMemo( + () => ({ hideMediaByDefault }), + [hideMediaByDefault], + ); + + return ( + + {children} + + ); +}; From 13c95244361e45cd983fab02c711f9b51f4477c3 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 11 Mar 2024 16:02:21 +0100 Subject: [PATCH 88/96] [Glitch] Add notification policies and notification requests in web UI Port c10bbf5fe3800f933c33fa19cf23b5ec4fb778ea to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/actions/notifications.js | 293 ++++++++++++++++++ .../glitch/components/column_header.jsx | 53 ++-- .../components/column_settings.jsx | 2 +- .../components/column_settings.jsx | 22 +- .../glitch/features/firehose/index.jsx | 53 ++-- .../components/column_settings.jsx | 38 +-- .../components/column_settings.tsx | 123 ++++---- .../glitch/features/list_timeline/index.jsx | 55 ++-- .../components/checkbox_with_label.jsx | 31 ++ .../components/column_settings.jsx | 147 +++++---- .../filtered_notifications_banner.jsx | 49 +++ .../components/notification_request.jsx | 65 ++++ .../containers/column_settings_container.js | 9 +- .../glitch/features/notifications/index.jsx | 4 + .../glitch/features/notifications/request.jsx | 144 +++++++++ .../features/notifications/requests.jsx | 85 +++++ .../components/column_settings.jsx | 24 +- .../flavours/glitch/features/ui/index.jsx | 6 +- .../features/ui/util/async-components.js | 8 + .../flavours/glitch/locales/en.json | 3 + .../flavours/glitch/reducers/index.ts | 4 + .../glitch/reducers/notification_policy.js | 12 + .../glitch/reducers/notification_requests.js | 96 ++++++ .../flavours/glitch/reducers/notifications.js | 2 +- .../flavours/glitch/styles/components.scss | 273 ++++++++++++---- .../flavours/glitch/styles/forms.scss | 6 + .../flavours/glitch/utils/numbers.ts | 8 + 27 files changed, 1324 insertions(+), 291 deletions(-) create mode 100644 app/javascript/flavours/glitch/features/notifications/components/checkbox_with_label.jsx create mode 100644 app/javascript/flavours/glitch/features/notifications/components/filtered_notifications_banner.jsx create mode 100644 app/javascript/flavours/glitch/features/notifications/components/notification_request.jsx create mode 100644 app/javascript/flavours/glitch/features/notifications/request.jsx create mode 100644 app/javascript/flavours/glitch/features/notifications/requests.jsx create mode 100644 app/javascript/flavours/glitch/reducers/notification_policy.js create mode 100644 app/javascript/flavours/glitch/reducers/notification_requests.js diff --git a/app/javascript/flavours/glitch/actions/notifications.js b/app/javascript/flavours/glitch/actions/notifications.js index 4179cfa56a..d5f7477f68 100644 --- a/app/javascript/flavours/glitch/actions/notifications.js +++ b/app/javascript/flavours/glitch/actions/notifications.js @@ -57,6 +57,38 @@ export const NOTIFICATIONS_MARK_AS_READ = 'NOTIFICATIONS_MARK_AS_READ'; export const NOTIFICATIONS_SET_BROWSER_SUPPORT = 'NOTIFICATIONS_SET_BROWSER_SUPPORT'; export const NOTIFICATIONS_SET_BROWSER_PERMISSION = 'NOTIFICATIONS_SET_BROWSER_PERMISSION'; +export const NOTIFICATION_POLICY_FETCH_REQUEST = 'NOTIFICATION_POLICY_FETCH_REQUEST'; +export const NOTIFICATION_POLICY_FETCH_SUCCESS = 'NOTIFICATION_POLICY_FETCH_SUCCESS'; +export const NOTIFICATION_POLICY_FETCH_FAIL = 'NOTIFICATION_POLICY_FETCH_FAIL'; + +export const NOTIFICATION_REQUESTS_FETCH_REQUEST = 'NOTIFICATION_REQUESTS_FETCH_REQUEST'; +export const NOTIFICATION_REQUESTS_FETCH_SUCCESS = 'NOTIFICATION_REQUESTS_FETCH_SUCCESS'; +export const NOTIFICATION_REQUESTS_FETCH_FAIL = 'NOTIFICATION_REQUESTS_FETCH_FAIL'; + +export const NOTIFICATION_REQUESTS_EXPAND_REQUEST = 'NOTIFICATION_REQUESTS_EXPAND_REQUEST'; +export const NOTIFICATION_REQUESTS_EXPAND_SUCCESS = 'NOTIFICATION_REQUESTS_EXPAND_SUCCESS'; +export const NOTIFICATION_REQUESTS_EXPAND_FAIL = 'NOTIFICATION_REQUESTS_EXPAND_FAIL'; + +export const NOTIFICATION_REQUEST_FETCH_REQUEST = 'NOTIFICATION_REQUEST_FETCH_REQUEST'; +export const NOTIFICATION_REQUEST_FETCH_SUCCESS = 'NOTIFICATION_REQUEST_FETCH_SUCCESS'; +export const NOTIFICATION_REQUEST_FETCH_FAIL = 'NOTIFICATION_REQUEST_FETCH_FAIL'; + +export const NOTIFICATION_REQUEST_ACCEPT_REQUEST = 'NOTIFICATION_REQUEST_ACCEPT_REQUEST'; +export const NOTIFICATION_REQUEST_ACCEPT_SUCCESS = 'NOTIFICATION_REQUEST_ACCEPT_SUCCESS'; +export const NOTIFICATION_REQUEST_ACCEPT_FAIL = 'NOTIFICATION_REQUEST_ACCEPT_FAIL'; + +export const NOTIFICATION_REQUEST_DISMISS_REQUEST = 'NOTIFICATION_REQUEST_DISMISS_REQUEST'; +export const NOTIFICATION_REQUEST_DISMISS_SUCCESS = 'NOTIFICATION_REQUEST_DISMISS_SUCCESS'; +export const NOTIFICATION_REQUEST_DISMISS_FAIL = 'NOTIFICATION_REQUEST_DISMISS_FAIL'; + +export const NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST = 'NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST'; +export const NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS = 'NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS'; +export const NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL = 'NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL'; + +export const NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST = 'NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST'; +export const NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS = 'NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS'; +export const NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL = 'NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL'; + defineMessages({ mention: { id: 'notification.mention', defaultMessage: '{name} mentioned you' }, }); @@ -401,3 +433,264 @@ export function setBrowserPermission (value) { value, }; } + +export const fetchNotificationPolicy = () => (dispatch, getState) => { + dispatch(fetchNotificationPolicyRequest()); + + api(getState).get('/api/v1/notifications/policy').then(({ data }) => { + dispatch(fetchNotificationPolicySuccess(data)); + }).catch(err => { + dispatch(fetchNotificationPolicyFail(err)); + }); +}; + +export const fetchNotificationPolicyRequest = () => ({ + type: NOTIFICATION_POLICY_FETCH_REQUEST, +}); + +export const fetchNotificationPolicySuccess = policy => ({ + type: NOTIFICATION_POLICY_FETCH_SUCCESS, + policy, +}); + +export const fetchNotificationPolicyFail = error => ({ + type: NOTIFICATION_POLICY_FETCH_FAIL, + error, +}); + +export const updateNotificationsPolicy = params => (dispatch, getState) => { + dispatch(fetchNotificationPolicyRequest()); + + api(getState).put('/api/v1/notifications/policy', params).then(({ data }) => { + dispatch(fetchNotificationPolicySuccess(data)); + }).catch(err => { + dispatch(fetchNotificationPolicyFail(err)); + }); +}; + +export const fetchNotificationRequests = () => (dispatch, getState) => { + const params = {}; + + if (getState().getIn(['notificationRequests', 'isLoading'])) { + return; + } + + if (getState().getIn(['notificationRequests', 'items'])?.size > 0) { + params.since_id = getState().getIn(['notificationRequests', 'items', 0, 'id']); + } + + dispatch(fetchNotificationRequestsRequest()); + + api(getState).get('/api/v1/notifications/requests', { params }).then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedAccounts(response.data.map(x => x.account))); + dispatch(fetchNotificationRequestsSuccess(response.data, next ? next.uri : null)); + }).catch(err => { + dispatch(fetchNotificationRequestsFail(err)); + }); +}; + +export const fetchNotificationRequestsRequest = () => ({ + type: NOTIFICATION_REQUESTS_FETCH_REQUEST, +}); + +export const fetchNotificationRequestsSuccess = (requests, next) => ({ + type: NOTIFICATION_REQUESTS_FETCH_SUCCESS, + requests, + next, +}); + +export const fetchNotificationRequestsFail = error => ({ + type: NOTIFICATION_REQUESTS_FETCH_FAIL, + error, +}); + +export const expandNotificationRequests = () => (dispatch, getState) => { + const url = getState().getIn(['notificationRequests', 'next']); + + if (!url || getState().getIn(['notificationRequests', 'isLoading'])) { + return; + } + + dispatch(expandNotificationRequestsRequest()); + + api(getState).get(url).then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedAccounts(response.data.map(x => x.account))); + dispatch(expandNotificationRequestsSuccess(response.data, next?.uri)); + }).catch(err => { + dispatch(expandNotificationRequestsFail(err)); + }); +}; + +export const expandNotificationRequestsRequest = () => ({ + type: NOTIFICATION_REQUESTS_EXPAND_REQUEST, +}); + +export const expandNotificationRequestsSuccess = (requests, next) => ({ + type: NOTIFICATION_REQUESTS_EXPAND_SUCCESS, + requests, + next, +}); + +export const expandNotificationRequestsFail = error => ({ + type: NOTIFICATION_REQUESTS_EXPAND_FAIL, + error, +}); + +export const fetchNotificationRequest = id => (dispatch, getState) => { + const current = getState().getIn(['notificationRequests', 'current']); + + if (current.getIn(['item', 'id']) === id || current.get('isLoading')) { + return; + } + + dispatch(fetchNotificationRequestRequest(id)); + + api(getState).get(`/api/v1/notifications/requests/${id}`).then(({ data }) => { + dispatch(fetchNotificationRequestSuccess(data)); + }).catch(err => { + dispatch(fetchNotificationRequestFail(id, err)); + }); +}; + +export const fetchNotificationRequestRequest = id => ({ + type: NOTIFICATION_REQUEST_FETCH_REQUEST, + id, +}); + +export const fetchNotificationRequestSuccess = request => ({ + type: NOTIFICATION_REQUEST_FETCH_SUCCESS, + request, +}); + +export const fetchNotificationRequestFail = (id, error) => ({ + type: NOTIFICATION_REQUEST_FETCH_FAIL, + id, + error, +}); + +export const acceptNotificationRequest = id => (dispatch, getState) => { + dispatch(acceptNotificationRequestRequest(id)); + + api(getState).post(`/api/v1/notifications/requests/${id}/accept`).then(() => { + dispatch(acceptNotificationRequestSuccess(id)); + }).catch(err => { + dispatch(acceptNotificationRequestFail(id, err)); + }); +}; + +export const acceptNotificationRequestRequest = id => ({ + type: NOTIFICATION_REQUEST_ACCEPT_REQUEST, + id, +}); + +export const acceptNotificationRequestSuccess = id => ({ + type: NOTIFICATION_REQUEST_ACCEPT_SUCCESS, + id, +}); + +export const acceptNotificationRequestFail = (id, error) => ({ + type: NOTIFICATION_REQUEST_ACCEPT_FAIL, + id, + error, +}); + +export const dismissNotificationRequest = id => (dispatch, getState) => { + dispatch(dismissNotificationRequestRequest(id)); + + api(getState).post(`/api/v1/notifications/requests/${id}/dismiss`).then(() =>{ + dispatch(dismissNotificationRequestSuccess(id)); + }).catch(err => { + dispatch(dismissNotificationRequestFail(id, err)); + }); +}; + +export const dismissNotificationRequestRequest = id => ({ + type: NOTIFICATION_REQUEST_DISMISS_REQUEST, + id, +}); + +export const dismissNotificationRequestSuccess = id => ({ + type: NOTIFICATION_REQUEST_DISMISS_SUCCESS, + id, +}); + +export const dismissNotificationRequestFail = (id, error) => ({ + type: NOTIFICATION_REQUEST_DISMISS_FAIL, + id, + error, +}); + +export const fetchNotificationsForRequest = accountId => (dispatch, getState) => { + const current = getState().getIn(['notificationRequests', 'current']); + const params = { account_id: accountId }; + + if (current.getIn(['item', 'account']) === accountId) { + if (current.getIn(['notifications', 'isLoading'])) { + return; + } + + if (current.getIn(['notifications', 'items'])?.size > 0) { + params.since_id = current.getIn(['notifications', 'items', 0, 'id']); + } + } + + dispatch(fetchNotificationsForRequestRequest()); + + api(getState).get('/api/v1/notifications', { params }).then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedStatuses(response.data.map(item => item.status).filter(status => !!status))); + dispatch(fetchNotificationsForRequestSuccess(response.data, next?.uri)); + }).catch(err => { + dispatch(fetchNotificationsForRequestFail(err)); + }); +}; + +export const fetchNotificationsForRequestRequest = () => ({ + type: NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST, +}); + +export const fetchNotificationsForRequestSuccess = (notifications, next) => ({ + type: NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS, + notifications, + next, +}); + +export const fetchNotificationsForRequestFail = (error) => ({ + type: NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL, + error, +}); + +export const expandNotificationsForRequest = () => (dispatch, getState) => { + const url = getState().getIn(['notificationRequests', 'current', 'notifications', 'next']); + + if (!url || getState().getIn(['notificationRequests', 'current', 'notifications', 'isLoading'])) { + return; + } + + dispatch(expandNotificationsForRequestRequest()); + + api(getState).get(url).then(response => { + const next = getLinks(response).refs.find(link => link.rel === 'next'); + dispatch(importFetchedStatuses(response.data.map(item => item.status).filter(status => !!status))); + dispatch(expandNotificationsForRequestSuccess(response.data, next?.uri)); + }).catch(err => { + dispatch(expandNotificationsForRequestFail(err)); + }); +}; + +export const expandNotificationsForRequestRequest = () => ({ + type: NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST, +}); + +export const expandNotificationsForRequestSuccess = (notifications, next) => ({ + type: NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS, + notifications, + next, +}); + +export const expandNotificationsForRequestFail = (error) => ({ + type: NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL, + error, +}); diff --git a/app/javascript/flavours/glitch/components/column_header.jsx b/app/javascript/flavours/glitch/components/column_header.jsx index 262166d2d1..22e73f5211 100644 --- a/app/javascript/flavours/glitch/components/column_header.jsx +++ b/app/javascript/flavours/glitch/components/column_header.jsx @@ -1,7 +1,7 @@ import PropTypes from 'prop-types'; import { PureComponent, useCallback } from 'react'; -import { FormattedMessage, injectIntl, defineMessages } from 'react-intl'; +import { FormattedMessage, injectIntl, defineMessages, useIntl } from 'react-intl'; import classNames from 'classnames'; import { withRouter } from 'react-router-dom'; @@ -11,7 +11,7 @@ import ArrowBackIcon from '@/material-icons/400-24px/arrow_back.svg?react'; import ChevronLeftIcon from '@/material-icons/400-24px/chevron_left.svg?react'; import ChevronRightIcon from '@/material-icons/400-24px/chevron_right.svg?react'; import CloseIcon from '@/material-icons/400-24px/close.svg?react'; -import TuneIcon from '@/material-icons/400-24px/tune.svg?react'; +import SettingsIcon from '@/material-icons/400-24px/settings.svg?react'; import { Icon } from 'flavours/glitch/components/icon'; import { ButtonInTabsBar, useColumnsContext } from 'flavours/glitch/features/ui/util/columns_context'; import { WithRouterPropTypes } from 'flavours/glitch/utils/react_router'; @@ -23,10 +23,12 @@ const messages = defineMessages({ hide: { id: 'column_header.hide_settings', defaultMessage: 'Hide settings' }, moveLeft: { id: 'column_header.moveLeft_settings', defaultMessage: 'Move column to the left' }, moveRight: { id: 'column_header.moveRight_settings', defaultMessage: 'Move column to the right' }, + back: { id: 'column_back_button.label', defaultMessage: 'Back' }, }); -const BackButton = ({ pinned, show }) => { +const BackButton = ({ pinned, show, onlyIcon }) => { const history = useAppHistory(); + const intl = useIntl(); const { multiColumn } = useColumnsContext(); const handleBackClick = useCallback(() => { @@ -39,18 +41,20 @@ const BackButton = ({ pinned, show }) => { const showButton = history && !pinned && ((multiColumn && history.location?.state?.fromMastodon) || show); - if(!showButton) return null; - - return (); + if (!showButton) return null; + return ( + + ); }; BackButton.propTypes = { pinned: PropTypes.bool, show: PropTypes.bool, + onlyIcon: PropTypes.bool, }; class ColumnHeader extends PureComponent { @@ -145,27 +149,31 @@ class ColumnHeader extends PureComponent { } if (multiColumn && pinned) { - pinButton = ; + pinButton = ; moveButtons = ( -
+
); } else if (multiColumn && this.props.onPin) { - pinButton = ; + pinButton = ; } - backButton = ; + backButton = ; const collapsedContent = [ extraContent, ]; if (multiColumn) { - collapsedContent.push(pinButton); - collapsedContent.push(moveButtons); + collapsedContent.push( +
+ {pinButton} + {moveButtons} +
+ ); } if (this.context.identity.signedIn && (children || (multiColumn && this.props.onPin))) { @@ -177,7 +185,7 @@ class ColumnHeader extends PureComponent { onClick={this.handleToggleClick} > - + {collapseIssues && } @@ -190,16 +198,19 @@ class ColumnHeader extends PureComponent {

{hasTitle && ( - + <> + {backButton} + + + )} {!hasTitle && backButton}
- {hasTitle && backButton} {extraButton} {collapseButton}
diff --git a/app/javascript/flavours/glitch/features/community_timeline/components/column_settings.jsx b/app/javascript/flavours/glitch/features/community_timeline/components/column_settings.jsx index 1e93125d59..a13081e82b 100644 --- a/app/javascript/flavours/glitch/features/community_timeline/components/column_settings.jsx +++ b/app/javascript/flavours/glitch/features/community_timeline/components/column_settings.jsx @@ -26,7 +26,7 @@ class ColumnSettings extends PureComponent { const { settings, onChange, intl } = this.props; return ( -
+
} />
diff --git a/app/javascript/flavours/glitch/features/direct_timeline/components/column_settings.jsx b/app/javascript/flavours/glitch/features/direct_timeline/components/column_settings.jsx index 9c8e23ce73..45de7010b6 100644 --- a/app/javascript/flavours/glitch/features/direct_timeline/components/column_settings.jsx +++ b/app/javascript/flavours/glitch/features/direct_timeline/components/column_settings.jsx @@ -26,18 +26,20 @@ class ColumnSettings extends PureComponent { const { settings, onChange, intl } = this.props; return ( -
- +
+
+
+ } /> +
+
-
- } /> -
+
+

- - -
- -
+
+ +
+
); } diff --git a/app/javascript/flavours/glitch/features/firehose/index.jsx b/app/javascript/flavours/glitch/features/firehose/index.jsx index 678bc3525a..dc6a38ae2e 100644 --- a/app/javascript/flavours/glitch/features/firehose/index.jsx +++ b/app/javascript/flavours/glitch/features/firehose/index.jsx @@ -45,28 +45,37 @@ const ColumnSettings = () => { ); return ( -
-
- } - /> - } - /> - - -
+
+
+
+ } + /> + + } + /> +
+
+ +
+

+ +
+ +
+
); }; diff --git a/app/javascript/flavours/glitch/features/hashtag_timeline/components/column_settings.jsx b/app/javascript/flavours/glitch/features/hashtag_timeline/components/column_settings.jsx index 4488c5b2a0..94ee7bb119 100644 --- a/app/javascript/flavours/glitch/features/hashtag_timeline/components/column_settings.jsx +++ b/app/javascript/flavours/glitch/features/hashtag_timeline/components/column_settings.jsx @@ -109,28 +109,28 @@ class ColumnSettings extends PureComponent { const { settings, onChange } = this.props; return ( -
-
-
- +
+
+
+ } /> - - - +
+ + + + + +
-
- {this.state.open && ( -
- {this.modeSelect('any')} - {this.modeSelect('all')} - {this.modeSelect('none')} -
- )} - -
- } /> -
+ {this.state.open && ( +
+ {this.modeSelect('any')} + {this.modeSelect('all')} + {this.modeSelect('none')} +
+ )} +
); } diff --git a/app/javascript/flavours/glitch/features/home_timeline/components/column_settings.tsx b/app/javascript/flavours/glitch/features/home_timeline/components/column_settings.tsx index 5438ba6f75..5b8fe5ccc8 100644 --- a/app/javascript/flavours/glitch/features/home_timeline/components/column_settings.tsx +++ b/app/javascript/flavours/glitch/features/home_timeline/components/column_settings.tsx @@ -35,75 +35,68 @@ export const ColumnSettings: React.FC = () => { ); return ( -
- - - +
+
+
+ + } + /> -
- - } - /> -
+ + } + /> -
- - } - /> -
+ + } + /> +
+
-
- - } - /> -
+
+

+ +

- - - - -
- -
+
+ +
+
); }; diff --git a/app/javascript/flavours/glitch/features/list_timeline/index.jsx b/app/javascript/flavours/glitch/features/list_timeline/index.jsx index abc664e0a1..08ce97f1ba 100644 --- a/app/javascript/flavours/glitch/features/list_timeline/index.jsx +++ b/app/javascript/flavours/glitch/features/list_timeline/index.jsx @@ -193,35 +193,38 @@ class ListTimeline extends PureComponent { pinned={pinned} multiColumn={multiColumn} > -
- +
+
+ - -
+ + -
- - -
- - { replies_policy !== undefined && ( -
- - - -
- { ['none', 'list', 'followed'].map(policy => ( - - ))} +
+
+ +
-
- )} + + + {replies_policy !== undefined && ( +
+

+ +
+ { ['none', 'list', 'followed'].map(policy => ( + + ))} +
+
+ )} +
{ + const handleChange = useCallback(({ target }) => { + onChange(target.checked); + }, [onChange]); + + return ( + + ); +}; + +CheckboxWithLabel.propTypes = { + checked: PropTypes.bool, + disabled: PropTypes.bool, + children: PropTypes.children, + onChange: PropTypes.func, +}; diff --git a/app/javascript/flavours/glitch/features/notifications/components/column_settings.jsx b/app/javascript/flavours/glitch/features/notifications/components/column_settings.jsx index 63e03c65f1..6b3df02e73 100644 --- a/app/javascript/flavours/glitch/features/notifications/components/column_settings.jsx +++ b/app/javascript/flavours/glitch/features/notifications/components/column_settings.jsx @@ -7,6 +7,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_REPORTS } from 'flavours/glitch/permissions'; +import { CheckboxWithLabel } from './checkbox_with_label'; import ClearColumnButton from './clear_column_button'; import GrantPermissionButton from './grant_permission_button'; import PillBarButton from './pill_bar_button'; @@ -27,14 +28,32 @@ export default class ColumnSettings extends PureComponent { alertsEnabled: PropTypes.bool, browserSupport: PropTypes.bool, browserPermission: PropTypes.string, + notificationPolicy: ImmutablePropTypes.map, + onChangePolicy: PropTypes.func.isRequired, }; onPushChange = (path, checked) => { this.props.onChange(['push', ...path], checked); }; + handleFilterNotFollowing = checked => { + this.props.onChangePolicy('filter_not_following', checked); + }; + + handleFilterNotFollowers = checked => { + this.props.onChangePolicy('filter_not_followers', checked); + }; + + handleFilterNewAccounts = checked => { + this.props.onChangePolicy('filter_new_accounts', checked); + }; + + handleFilterPrivateMentions = checked => { + this.props.onChangePolicy('filter_private_mentions', checked); + }; + render () { - const { settings, pushSettings, onChange, onClear, alertsEnabled, browserSupport, browserPermission, onRequestNotificationPermission } = this.props; + const { settings, pushSettings, onChange, onClear, alertsEnabled, browserSupport, browserPermission, onRequestNotificationPermission, notificationPolicy } = this.props; const unreadMarkersShowStr = ; const filterBarShowStr = ; @@ -47,48 +66,68 @@ export default class ColumnSettings extends PureComponent { const pushStr = showPushSettings && ; return ( -
+
{alertsEnabled && browserSupport && browserPermission === 'denied' && ( -
- -
+ )} {alertsEnabled && browserSupport && browserPermission === 'default' && ( -
- - - -
+ + + )} -
+
-
+ -
- - - +
+

- + + + + + + + + + + + + + + + + + + +
-
- -
- - - + +
+

+
-
+ -
- +
+

+ +

+ +
+ +
+
+ +
+

@@ -96,10 +135,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -107,10 +146,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -118,10 +157,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -129,10 +168,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -140,10 +179,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -151,10 +190,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -162,10 +201,10 @@ export default class ColumnSettings extends PureComponent {
-
+ -
- +
+

@@ -173,11 +212,11 @@ export default class ColumnSettings extends PureComponent {
-
+ {((this.context.identity.permissions & PERMISSION_MANAGE_USERS) === PERMISSION_MANAGE_USERS) && ( -
- +
+

@@ -185,12 +224,12 @@ export default class ColumnSettings extends PureComponent {
-
+ )} {((this.context.identity.permissions & PERMISSION_MANAGE_REPORTS) === PERMISSION_MANAGE_REPORTS) && ( -
- +
+

@@ -198,7 +237,7 @@ export default class ColumnSettings extends PureComponent {
-
+ )}
); diff --git a/app/javascript/flavours/glitch/features/notifications/components/filtered_notifications_banner.jsx b/app/javascript/flavours/glitch/features/notifications/components/filtered_notifications_banner.jsx new file mode 100644 index 0000000000..20d6501329 --- /dev/null +++ b/app/javascript/flavours/glitch/features/notifications/components/filtered_notifications_banner.jsx @@ -0,0 +1,49 @@ +import { useEffect } from 'react'; + +import { FormattedMessage } from 'react-intl'; + +import { Link } from 'react-router-dom'; + +import { useDispatch, useSelector } from 'react-redux'; + + +import ArchiveIcon from '@/material-icons/400-24px/archive.svg?react'; +import { fetchNotificationPolicy } from 'flavours/glitch/actions/notifications'; +import { Icon } from 'flavours/glitch/components/icon'; +import { toCappedNumber } from 'flavours/glitch/utils/numbers'; + +export const FilteredNotificationsBanner = () => { + const dispatch = useDispatch(); + const policy = useSelector(state => state.get('notificationPolicy')); + + useEffect(() => { + dispatch(fetchNotificationPolicy()); + + const interval = setInterval(() => { + dispatch(fetchNotificationPolicy()); + }, 120000); + + return () => { + clearInterval(interval); + }; + }, [dispatch]); + + if (policy === null || policy.getIn(['summary', 'pending_notifications_count']) * 1 === 0) { + return null; + } + + return ( + + + +
+ + +
+ +
+ {toCappedNumber(policy.getIn(['summary', 'pending_notifications_count']))} +
+ + ); +}; diff --git a/app/javascript/flavours/glitch/features/notifications/components/notification_request.jsx b/app/javascript/flavours/glitch/features/notifications/components/notification_request.jsx new file mode 100644 index 0000000000..6ba97066ce --- /dev/null +++ b/app/javascript/flavours/glitch/features/notifications/components/notification_request.jsx @@ -0,0 +1,65 @@ +import PropTypes from 'prop-types'; +import { useCallback } from 'react'; + +import { defineMessages, useIntl } from 'react-intl'; + +import { Link } from 'react-router-dom'; + +import { useSelector, useDispatch } from 'react-redux'; + +import DoneIcon from '@/material-icons/400-24px/done.svg?react'; +import VolumeOffIcon from '@/material-icons/400-24px/volume_off.svg?react'; +import { acceptNotificationRequest, dismissNotificationRequest } from 'flavours/glitch/actions/notifications'; +import { Avatar } from 'flavours/glitch/components/avatar'; +import { IconButton } from 'flavours/glitch/components/icon_button'; +import { makeGetAccount } from 'flavours/glitch/selectors'; +import { toCappedNumber } from 'flavours/glitch/utils/numbers'; + +const getAccount = makeGetAccount(); + +const messages = defineMessages({ + accept: { id: 'notification_requests.accept', defaultMessage: 'Accept' }, + dismiss: { id: 'notification_requests.dismiss', defaultMessage: 'Dismiss' }, +}); + +export const NotificationRequest = ({ id, accountId, notificationsCount }) => { + const dispatch = useDispatch(); + const account = useSelector(state => getAccount(state, accountId)); + const intl = useIntl(); + + const handleDismiss = useCallback(() => { + dispatch(dismissNotificationRequest(id)); + }, [dispatch, id]); + + const handleAccept = useCallback(() => { + dispatch(acceptNotificationRequest(id)); + }, [dispatch, id]); + + return ( +
+ + + +
+
+ + {toCappedNumber(notificationsCount)} +
+ + @{account?.get('acct')} +
+ + +
+ + +
+
+ ); +}; + +NotificationRequest.propTypes = { + id: PropTypes.string.isRequired, + accountId: PropTypes.string.isRequired, + notificationsCount: PropTypes.string.isRequired, +}; diff --git a/app/javascript/flavours/glitch/features/notifications/containers/column_settings_container.js b/app/javascript/flavours/glitch/features/notifications/containers/column_settings_container.js index 1e62ed9a5a..de266160f8 100644 --- a/app/javascript/flavours/glitch/features/notifications/containers/column_settings_container.js +++ b/app/javascript/flavours/glitch/features/notifications/containers/column_settings_container.js @@ -4,7 +4,7 @@ import { connect } from 'react-redux'; import { showAlert } from '../../../actions/alerts'; import { openModal } from '../../../actions/modal'; -import { setFilter, clearNotifications, requestBrowserPermission } from '../../../actions/notifications'; +import { setFilter, clearNotifications, requestBrowserPermission, updateNotificationsPolicy } from '../../../actions/notifications'; import { changeAlerts as changePushNotifications } from '../../../actions/push_notifications'; import { changeSetting } from '../../../actions/settings'; import ColumnSettings from '../components/column_settings'; @@ -21,6 +21,7 @@ const mapStateToProps = state => ({ alertsEnabled: state.getIn(['settings', 'notifications', 'alerts']).includes(true), browserSupport: state.getIn(['notifications', 'browserSupport']), browserPermission: state.getIn(['notifications', 'browserPermission']), + notificationPolicy: state.get('notificationPolicy'), }); const mapDispatchToProps = (dispatch, { intl }) => ({ @@ -73,6 +74,12 @@ const mapDispatchToProps = (dispatch, { intl }) => ({ dispatch(requestBrowserPermission()); }, + onChangePolicy (param, checked) { + dispatch(updateNotificationsPolicy({ + [param]: checked, + })); + }, + }); export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(ColumnSettings)); diff --git a/app/javascript/flavours/glitch/features/notifications/index.jsx b/app/javascript/flavours/glitch/features/notifications/index.jsx index 783c35a43e..e84ef70b05 100644 --- a/app/javascript/flavours/glitch/features/notifications/index.jsx +++ b/app/javascript/flavours/glitch/features/notifications/index.jsx @@ -37,6 +37,7 @@ import { LoadGap } from '../../components/load_gap'; import ScrollableList from '../../components/scrollable_list'; import NotificationPurgeButtonsContainer from '../../containers/notification_purge_buttons_container'; +import { FilteredNotificationsBanner } from './components/filtered_notifications_banner'; import NotificationsPermissionBanner from './components/notifications_permission_banner'; import ColumnSettingsContainer from './containers/column_settings_container'; import FilterBarContainer from './containers/filter_bar_container'; @@ -357,6 +358,9 @@ class Notifications extends PureComponent { {filterBarContainer} + + + {scrollContainer} diff --git a/app/javascript/flavours/glitch/features/notifications/request.jsx b/app/javascript/flavours/glitch/features/notifications/request.jsx new file mode 100644 index 0000000000..d89527f69a --- /dev/null +++ b/app/javascript/flavours/glitch/features/notifications/request.jsx @@ -0,0 +1,144 @@ +import PropTypes from 'prop-types'; +import { useRef, useCallback, useEffect } from 'react'; + +import { defineMessages, useIntl } from 'react-intl'; + +import { Helmet } from 'react-helmet'; + +import { useSelector, useDispatch } from 'react-redux'; + +import ArchiveIcon from '@/material-icons/400-24px/archive.svg?react'; +import DoneIcon from '@/material-icons/400-24px/done.svg?react'; +import VolumeOffIcon from '@/material-icons/400-24px/volume_off.svg?react'; +import { fetchNotificationRequest, fetchNotificationsForRequest, expandNotificationsForRequest, acceptNotificationRequest, dismissNotificationRequest } from 'flavours/glitch/actions/notifications'; +import Column from 'flavours/glitch/components/column'; +import ColumnHeader from 'flavours/glitch/components/column_header'; +import { IconButton } from 'flavours/glitch/components/icon_button'; +import ScrollableList from 'flavours/glitch/components/scrollable_list'; + +import NotificationContainer from './containers/notification_container'; + +const messages = defineMessages({ + title: { id: 'notification_requests.notifications_from', defaultMessage: 'Notifications from {name}' }, + accept: { id: 'notification_requests.accept', defaultMessage: 'Accept' }, + dismiss: { id: 'notification_requests.dismiss', defaultMessage: 'Dismiss' }, +}); + +const selectChild = (ref, index, alignTop) => { + const container = ref.current.node; + const element = container.querySelector(`article:nth-of-type(${index + 1}) .focusable`); + + if (element) { + if (alignTop && container.scrollTop > element.offsetTop) { + element.scrollIntoView(true); + } else if (!alignTop && container.scrollTop + container.clientHeight < element.offsetTop + element.offsetHeight) { + element.scrollIntoView(false); + } + + element.focus(); + } +}; + +export const NotificationRequest = ({ multiColumn, params: { id } }) => { + const columnRef = useRef(); + const intl = useIntl(); + const dispatch = useDispatch(); + const notificationRequest = useSelector(state => state.getIn(['notificationRequests', 'current', 'item', 'id']) === id ? state.getIn(['notificationRequests', 'current', 'item']) : null); + const accountId = notificationRequest?.get('account'); + const account = useSelector(state => state.getIn(['accounts', accountId])); + const notifications = useSelector(state => state.getIn(['notificationRequests', 'current', 'notifications', 'items'])); + const isLoading = useSelector(state => state.getIn(['notificationRequests', 'current', 'notifications', 'isLoading'])); + const hasMore = useSelector(state => !!state.getIn(['notificationRequests', 'current', 'notifications', 'next'])); + const removed = useSelector(state => state.getIn(['notificationRequests', 'current', 'removed'])); + + const handleHeaderClick = useCallback(() => { + columnRef.current?.scrollTop(); + }, [columnRef]); + + const handleLoadMore = useCallback(() => { + dispatch(expandNotificationsForRequest()); + }, [dispatch]); + + const handleDismiss = useCallback(() => { + dispatch(dismissNotificationRequest(id)); + }, [dispatch, id]); + + const handleAccept = useCallback(() => { + dispatch(acceptNotificationRequest(id)); + }, [dispatch, id]); + + const handleMoveUp = useCallback(id => { + const elementIndex = notifications.findIndex(item => item !== null && item.get('id') === id) - 1; + selectChild(columnRef, elementIndex, true); + }, [columnRef, notifications]); + + const handleMoveDown = useCallback(id => { + const elementIndex = notifications.findIndex(item => item !== null && item.get('id') === id) + 1; + selectChild(columnRef, elementIndex, false); + }, [columnRef, notifications]); + + useEffect(() => { + dispatch(fetchNotificationRequest(id)); + }, [dispatch, id]); + + useEffect(() => { + if (accountId) { + dispatch(fetchNotificationsForRequest(accountId)); + } + }, [dispatch, accountId]); + + const columnTitle = intl.formatMessage(messages.title, { name: account?.get('display_name') }); + + return ( + + + + + + )} + /> + + + {notifications.map(item => ( + item && + ))} + + + + {columnTitle} + + + + ); +}; + +NotificationRequest.propTypes = { + multiColumn: PropTypes.bool, + params: PropTypes.shape({ + id: PropTypes.string.isRequired, + }), +}; + +export default NotificationRequest; diff --git a/app/javascript/flavours/glitch/features/notifications/requests.jsx b/app/javascript/flavours/glitch/features/notifications/requests.jsx new file mode 100644 index 0000000000..6cb77b997b --- /dev/null +++ b/app/javascript/flavours/glitch/features/notifications/requests.jsx @@ -0,0 +1,85 @@ +import PropTypes from 'prop-types'; +import { useRef, useCallback, useEffect } from 'react'; + +import { defineMessages, useIntl, FormattedMessage } from 'react-intl'; + +import { Helmet } from 'react-helmet'; + +import { useSelector, useDispatch } from 'react-redux'; + +import ArchiveIcon from '@/material-icons/400-24px/archive.svg?react'; +import { fetchNotificationRequests, expandNotificationRequests } from 'flavours/glitch/actions/notifications'; +import Column from 'flavours/glitch/components/column'; +import ColumnHeader from 'flavours/glitch/components/column_header'; +import ScrollableList from 'flavours/glitch/components/scrollable_list'; + +import { NotificationRequest } from './components/notification_request'; + +const messages = defineMessages({ + title: { id: 'notification_requests.title', defaultMessage: 'Filtered notifications' }, +}); + +export const NotificationRequests = ({ multiColumn }) => { + const columnRef = useRef(); + const intl = useIntl(); + const dispatch = useDispatch(); + const isLoading = useSelector(state => state.getIn(['notificationRequests', 'isLoading'])); + const notificationRequests = useSelector(state => state.getIn(['notificationRequests', 'items'])); + const hasMore = useSelector(state => !!state.getIn(['notificationRequests', 'next'])); + + const handleHeaderClick = useCallback(() => { + columnRef.current?.scrollTop(); + }, [columnRef]); + + const handleLoadMore = useCallback(() => { + dispatch(expandNotificationRequests()); + }, [dispatch]); + + useEffect(() => { + dispatch(fetchNotificationRequests()); + }, [dispatch]); + + return ( + + + + } + > + {notificationRequests.map(request => ( + + ))} + + + + {intl.formatMessage(messages.title)} + + + + ); +}; + +NotificationRequests.propTypes = { + multiColumn: PropTypes.bool, +}; + +export default NotificationRequests; diff --git a/app/javascript/flavours/glitch/features/public_timeline/components/column_settings.jsx b/app/javascript/flavours/glitch/features/public_timeline/components/column_settings.jsx index 82684c8368..63c14b897b 100644 --- a/app/javascript/flavours/glitch/features/public_timeline/components/column_settings.jsx +++ b/app/javascript/flavours/glitch/features/public_timeline/components/column_settings.jsx @@ -25,18 +25,22 @@ class ColumnSettings extends PureComponent { const { settings, onChange, intl } = this.props; return ( -
-
- } /> - } /> - {!settings.getIn(['other', 'onlyRemote']) && } />} -
+
+
+
+ } /> + } /> + {!settings.getIn(['other', 'onlyRemote']) && } />} +
+
- +
+ -
- -
+
+ +
+
); } diff --git a/app/javascript/flavours/glitch/features/ui/index.jsx b/app/javascript/flavours/glitch/features/ui/index.jsx index f847bf6448..51ac4ac145 100644 --- a/app/javascript/flavours/glitch/features/ui/index.jsx +++ b/app/javascript/flavours/glitch/features/ui/index.jsx @@ -50,6 +50,8 @@ import { DirectTimeline, HashtagTimeline, Notifications, + NotificationRequests, + NotificationRequest, FollowRequests, FavouritedStatuses, BookmarkedStatuses, @@ -212,7 +214,9 @@ class SwitchingColumnsArea extends PureComponent { - + + + diff --git a/app/javascript/flavours/glitch/features/ui/util/async-components.js b/app/javascript/flavours/glitch/features/ui/util/async-components.js index c17bb206e3..14d46d7043 100644 --- a/app/javascript/flavours/glitch/features/ui/util/async-components.js +++ b/app/javascript/flavours/glitch/features/ui/util/async-components.js @@ -201,3 +201,11 @@ export function About () { export function PrivacyPolicy () { return import(/*webpackChunkName: "features/glitch/async/privacy_policy" */'../../privacy_policy'); } + +export function NotificationRequests () { + return import(/*webpackChunkName: "features/glitch/notifications/requests" */'../../notifications/requests'); +} + +export function NotificationRequest () { + return import(/*webpackChunkName: "features/glitch/notifications/request" */'../../notifications/request'); +} diff --git a/app/javascript/flavours/glitch/locales/en.json b/app/javascript/flavours/glitch/locales/en.json index 8de7059787..990c8afe4c 100644 --- a/app/javascript/flavours/glitch/locales/en.json +++ b/app/javascript/flavours/glitch/locales/en.json @@ -64,6 +64,9 @@ "notification_purge.btn_invert": "Invert\nselection", "notification_purge.btn_none": "Select\nnone", "notification_purge.start": "Enter notification cleaning mode", + "notifications.column_settings.filter_bar.advanced": "Display all categories", + "notifications.column_settings.filter_bar.category": "Quick filter bar", + "notifications.column_settings.filter_bar.show_bar": "Show filter bar", "notifications.marked_clear": "Clear selected notifications", "notifications.marked_clear_confirmation": "Are you sure you want to permanently clear all selected notifications?", "settings.always_show_spoilers_field": "Always enable the Content Warning field", diff --git a/app/javascript/flavours/glitch/reducers/index.ts b/app/javascript/flavours/glitch/reducers/index.ts index 4775c076e7..1049a39900 100644 --- a/app/javascript/flavours/glitch/reducers/index.ts +++ b/app/javascript/flavours/glitch/reducers/index.ts @@ -28,6 +28,8 @@ import media_attachments from './media_attachments'; import meta from './meta'; import { modalReducer } from './modal'; import mutes from './mutes'; +import { notificationPolicyReducer } from './notification_policy'; +import { notificationRequestsReducer } from './notification_requests'; import notifications from './notifications'; import picture_in_picture from './picture_in_picture'; import pinnedAccountsEditor from './pinned_accounts_editor'; @@ -88,6 +90,8 @@ const reducers = { history, tags, followed_tags, + notificationPolicy: notificationPolicyReducer, + notificationRequests: notificationRequestsReducer, }; // We want the root state to be an ImmutableRecord, which is an object with a defined list of keys, diff --git a/app/javascript/flavours/glitch/reducers/notification_policy.js b/app/javascript/flavours/glitch/reducers/notification_policy.js new file mode 100644 index 0000000000..579f2afdb2 --- /dev/null +++ b/app/javascript/flavours/glitch/reducers/notification_policy.js @@ -0,0 +1,12 @@ +import { fromJS } from 'immutable'; + +import { NOTIFICATION_POLICY_FETCH_SUCCESS } from 'flavours/glitch/actions/notifications'; + +export const notificationPolicyReducer = (state = null, action) => { + switch(action.type) { + case NOTIFICATION_POLICY_FETCH_SUCCESS: + return fromJS(action.policy); + default: + return state; + } +}; diff --git a/app/javascript/flavours/glitch/reducers/notification_requests.js b/app/javascript/flavours/glitch/reducers/notification_requests.js new file mode 100644 index 0000000000..c1da951f6c --- /dev/null +++ b/app/javascript/flavours/glitch/reducers/notification_requests.js @@ -0,0 +1,96 @@ +import { Map as ImmutableMap, List as ImmutableList, fromJS } from 'immutable'; + +import { + NOTIFICATION_REQUESTS_EXPAND_REQUEST, + NOTIFICATION_REQUESTS_EXPAND_SUCCESS, + NOTIFICATION_REQUESTS_EXPAND_FAIL, + NOTIFICATION_REQUESTS_FETCH_REQUEST, + NOTIFICATION_REQUESTS_FETCH_SUCCESS, + NOTIFICATION_REQUESTS_FETCH_FAIL, + NOTIFICATION_REQUEST_FETCH_REQUEST, + NOTIFICATION_REQUEST_FETCH_SUCCESS, + NOTIFICATION_REQUEST_FETCH_FAIL, + NOTIFICATION_REQUEST_ACCEPT_REQUEST, + NOTIFICATION_REQUEST_DISMISS_REQUEST, + NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST, + NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS, + NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL, + NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST, + NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS, + NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL, +} from 'flavours/glitch/actions/notifications'; + +import { notificationToMap } from './notifications'; + +const initialState = ImmutableMap({ + items: ImmutableList(), + isLoading: false, + next: null, + current: ImmutableMap({ + isLoading: false, + item: null, + removed: false, + notifications: ImmutableMap({ + items: ImmutableList(), + isLoading: false, + next: null, + }), + }), +}); + +const normalizeRequest = request => fromJS({ + ...request, + account: request.account.id, +}); + +const removeRequest = (state, id) => { + if (state.getIn(['current', 'item', 'id']) === id) { + state = state.setIn(['current', 'removed'], true); + } + + return state.update('items', list => list.filterNot(item => item.get('id') === id)); +}; + +export const notificationRequestsReducer = (state = initialState, action) => { + switch(action.type) { + case NOTIFICATION_REQUESTS_FETCH_SUCCESS: + return state.withMutations(map => { + map.update('items', list => ImmutableList(action.requests.map(normalizeRequest)).concat(list)); + map.set('isLoading', false); + map.update('next', next => next ?? action.next); + }); + case NOTIFICATION_REQUESTS_EXPAND_SUCCESS: + return state.withMutations(map => { + map.update('items', list => list.concat(ImmutableList(action.requests.map(normalizeRequest)))); + map.set('isLoading', false); + map.set('next', action.next); + }); + case NOTIFICATION_REQUESTS_EXPAND_REQUEST: + case NOTIFICATION_REQUESTS_FETCH_REQUEST: + return state.set('isLoading', true); + case NOTIFICATION_REQUESTS_EXPAND_FAIL: + case NOTIFICATION_REQUESTS_FETCH_FAIL: + return state.set('isLoading', false); + case NOTIFICATION_REQUEST_ACCEPT_REQUEST: + case NOTIFICATION_REQUEST_DISMISS_REQUEST: + return removeRequest(state, action.id); + case NOTIFICATION_REQUEST_FETCH_REQUEST: + return state.set('current', initialState.get('current').set('isLoading', true)); + case NOTIFICATION_REQUEST_FETCH_SUCCESS: + return state.update('current', map => map.set('isLoading', false).set('item', normalizeRequest(action.request))); + case NOTIFICATION_REQUEST_FETCH_FAIL: + return state.update('current', map => map.set('isLoading', false)); + case NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST: + case NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST: + return state.setIn(['current', 'notifications', 'isLoading'], true); + case NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS: + return state.updateIn(['current', 'notifications'], map => map.set('isLoading', false).update('items', list => ImmutableList(action.notifications.map(notificationToMap)).concat(list)).update('next', next => next ?? action.next)); + case NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS: + return state.updateIn(['current', 'notifications'], map => map.set('isLoading', false).update('items', list => list.concat(ImmutableList(action.notifications.map(notificationToMap)))).set('next', action.next)); + case NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL: + case NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL: + return state.setIn(['current', 'notifications', 'isLoading'], false); + default: + return state; + } +}; diff --git a/app/javascript/flavours/glitch/reducers/notifications.js b/app/javascript/flavours/glitch/reducers/notifications.js index 37aed87348..c6d70945ba 100644 --- a/app/javascript/flavours/glitch/reducers/notifications.js +++ b/app/javascript/flavours/glitch/reducers/notifications.js @@ -54,7 +54,7 @@ const initialState = ImmutableMap({ markNewForDelete: false, }); -const notificationToMap = (notification, markForDelete) => ImmutableMap({ +export const notificationToMap = (notification, markForDelete = false) => ImmutableMap({ id: notification.id, type: notification.type, account: notification.account.id, diff --git a/app/javascript/flavours/glitch/styles/components.scss b/app/javascript/flavours/glitch/styles/components.scss index f08a6017f3..9098591764 100644 --- a/app/javascript/flavours/glitch/styles/components.scss +++ b/app/javascript/flavours/glitch/styles/components.scss @@ -3506,12 +3506,13 @@ $ui-header-height: 55px; border: 0; border-bottom: 1px solid lighten($ui-base-color, 8%); text-align: unset; - padding: 15px; + padding: 13px; margin: 0; z-index: 3; outline: 0; display: flex; align-items: center; + gap: 5px; &:hover { text-decoration: underline; @@ -3521,6 +3522,7 @@ $ui-header-height: 55px; .column-header__back-button { display: flex; align-items: center; + gap: 5px; background: $ui-base-color; border: 0; font-family: inherit; @@ -3528,25 +3530,19 @@ $ui-header-height: 55px; cursor: pointer; white-space: nowrap; font-size: 16px; - padding: 0; - padding-inline-end: 5px; + padding: 13px; z-index: 3; &:hover { text-decoration: underline; } - &:last-child { - padding: 0; - padding-inline-end: 15px; + &.compact { + padding-inline-end: 5px; + flex: 0 0 auto; } } -.column-back-button__icon { - display: inline-block; - margin-inline-end: 5px; -} - .react-toggle { display: inline-block; position: relative; @@ -4255,7 +4251,7 @@ a.status-card { z-index: 2; outline: 0; - & > button { + &__title { display: flex; align-items: center; gap: 5px; @@ -4277,8 +4273,18 @@ a.status-card { } } - & > .column-header__back-button { + .column-header__back-button + &__title { + padding-inline-start: 0; + } + + .column-header__back-button { + flex: 1; color: $highlight-text-color; + + &.compact { + flex: 0 0 auto; + color: $primary-text-color; + } } &.active { @@ -4292,6 +4298,18 @@ a.status-card { &:active { outline: 0; } + + &__advanced-buttons { + display: flex; + justify-content: space-between; + align-items: center; + padding: 16px; + padding-top: 0; + + &:first-child { + padding-top: 16px; + } + } } .column-header__buttons { @@ -4427,7 +4445,6 @@ a.status-card { .column-header__collapsible-inner { background: $ui-base-color; - padding: 15px; } .column-header__setting-btn { @@ -4449,20 +4466,8 @@ a.status-card { } .column-header__setting-arrows { - float: right; - - .column-header__setting-btn { - padding: 5px; - - &:first-child { - padding-inline-end: 7px; - } - - &:last-child { - padding-inline-start: 7px; - margin-inline-start: 5px; - } - } + display: flex; + align-items: center; } .column-settings__pillbar { @@ -4795,24 +4800,56 @@ a.status-card { text-align: center; } -.column-settings__outer { - background: lighten($ui-base-color, 8%); - padding: 15px; -} +.column-settings { + display: flex; + flex-direction: column; -.column-settings__section { - color: $darker-text-color; - cursor: default; - display: block; - font-weight: 500; - margin-bottom: 10px; -} + &__section { + // FIXME: Legacy + color: $darker-text-color; + cursor: default; + display: block; + font-weight: 500; + } -.column-settings__row--with-margin { - margin-bottom: 15px; + .column-header__links { + margin: 0; + } + + section { + padding: 16px; + border-bottom: 1px solid lighten($ui-base-color, 8%); + + &:last-child { + border-bottom: 0; + } + } + + h3 { + font-size: 16px; + line-height: 24px; + letter-spacing: 0.5px; + font-weight: 500; + color: $primary-text-color; + margin-bottom: 16px; + } + + &__row { + display: flex; + flex-direction: column; + gap: 12px; + } + + .app-form__toggle { + &__toggle > div { + border: 0; + } + } } .column-settings__hashtags { + margin-top: 15px; + .column-settings__row { margin-bottom: 15px; } @@ -4940,16 +4977,13 @@ a.status-card { } .setting-toggle { - display: block; - line-height: 24px; + display: flex; + align-items: center; + gap: 8px; } .setting-toggle__label { color: $darker-text-color; - display: inline-block; - margin-bottom: 14px; - margin-inline-start: 8px; - vertical-align: middle; } .limited-account-hint { @@ -7536,29 +7570,33 @@ img.modal-warning { background: $ui-base-color; &__column { - padding: 10px 15px; - padding-bottom: 0; + display: flex; + flex-direction: column; + gap: 15px; + padding: 15px; } .radio-button { - display: block; + display: flex; } } .column-settings__row .radio-button { - display: block; + display: flex; } .radio-button { font-size: 14px; position: relative; - display: inline-block; - padding: 6px 0; + display: inline-flex; + align-items: center; line-height: 18px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: pointer; + gap: 10px; + color: $secondary-text-color; input[type='radio'], input[type='checkbox'] { @@ -7566,21 +7604,29 @@ img.modal-warning { } &__input { - display: inline-block; + display: block; position: relative; - border: 1px solid $ui-primary-color; + border: 2px solid $secondary-text-color; box-sizing: border-box; width: 18px; height: 18px; flex: 0 0 auto; - margin-inline-end: 10px; - top: -1px; border-radius: 50%; - vertical-align: middle; &.checked { - border-color: lighten($ui-highlight-color, 4%); - background: lighten($ui-highlight-color, 4%); + border-color: $secondary-text-color; + + &::before { + position: absolute; + left: 2px; + top: 2px; + content: ''; + display: block; + border-radius: 50%; + width: 10px; + height: 10px; + background: $secondary-text-color; + } } } } @@ -10185,3 +10231,110 @@ noscript { } } } + +.filtered-notifications-banner { + display: flex; + align-items: center; + background: $ui-base-color; + border-bottom: 1px solid lighten($ui-base-color, 8%); + padding: 15px; + gap: 15px; + color: $darker-text-color; + text-decoration: none; + + &:hover, + &:active, + &:focus { + color: $secondary-text-color; + + .filtered-notifications-banner__badge { + background: $secondary-text-color; + } + } + + .icon { + width: 24px; + height: 24px; + } + + &__text { + flex: 1 1 auto; + font-style: 14px; + line-height: 20px; + + strong { + font-size: 16px; + line-height: 24px; + display: block; + } + } + + &__badge { + background: $darker-text-color; + color: $ui-base-color; + border-radius: 100px; + padding: 2px 8px; + font-weight: 500; + font-size: 11px; + line-height: 16px; + } +} + +.notification-request { + display: flex; + align-items: center; + gap: 16px; + padding: 15px; + border-bottom: 1px solid lighten($ui-base-color, 8%); + + &__link { + display: flex; + align-items: center; + gap: 12px; + flex: 1 1 auto; + text-decoration: none; + color: inherit; + overflow: hidden; + + .account__avatar { + flex-shrink: 0; + } + } + + &__name { + flex: 1 1 auto; + color: $darker-text-color; + font-style: 14px; + line-height: 20px; + overflow: hidden; + text-overflow: ellipsis; + + &__display-name { + display: flex; + align-items: center; + gap: 6px; + font-size: 16px; + letter-spacing: 0.5px; + line-height: 24px; + color: $secondary-text-color; + } + + .filtered-notifications-banner__badge { + background-color: $highlight-text-color; + border-radius: 4px; + padding: 1px 6px; + } + } + + &__actions { + display: flex; + align-items: center; + gap: 8px; + + .icon-button { + border-radius: 4px; + border: 1px solid lighten($ui-base-color, 8%); + padding: 5px; + } + } +} diff --git a/app/javascript/flavours/glitch/styles/forms.scss b/app/javascript/flavours/glitch/styles/forms.scss index 5b7247734f..a279715fca 100644 --- a/app/javascript/flavours/glitch/styles/forms.scss +++ b/app/javascript/flavours/glitch/styles/forms.scss @@ -1315,6 +1315,12 @@ code { font-weight: 600; } + .hint { + display: block; + font-size: 14px; + color: $darker-text-color; + } + .recommended { position: absolute; margin: 0 4px; diff --git a/app/javascript/flavours/glitch/utils/numbers.ts b/app/javascript/flavours/glitch/utils/numbers.ts index 35bcde83e2..03235cea81 100644 --- a/app/javascript/flavours/glitch/utils/numbers.ts +++ b/app/javascript/flavours/glitch/utils/numbers.ts @@ -69,3 +69,11 @@ export function pluralReady( export function roundTo10(num: number): number { return Math.round(num * 0.1) / 0.1; } + +export function toCappedNumber(num: string): string { + if (parseInt(num) > 99) { + return '99+'; + } else { + return num; + } +} From b36e96ec9079fd6f82657eb33c1d5280a818ffa6 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 11 Mar 2024 15:33:48 +0100 Subject: [PATCH 89/96] [Glitch] Change action button to be last on profiles in web UI Port 19efa1b9f1486ffe95c14582017d9e9ede48d597 to glitch-soc Signed-off-by: Claire --- .../glitch/features/account/components/header.jsx | 14 +++++--------- .../flavours/glitch/styles/components.scss | 5 +---- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/app/javascript/flavours/glitch/features/account/components/header.jsx b/app/javascript/flavours/glitch/features/account/components/header.jsx index b2aee7682a..c693e85f41 100644 --- a/app/javascript/flavours/glitch/features/account/components/header.jsx +++ b/app/javascript/flavours/glitch/features/account/components/header.jsx @@ -21,6 +21,7 @@ import { Button } from 'flavours/glitch/components/button'; import { CopyIconButton } from 'flavours/glitch/components/copy_icon_button'; import { Icon } from 'flavours/glitch/components/icon'; import { IconButton } from 'flavours/glitch/components/icon_button'; +import { LoadingIndicator } from 'flavours/glitch/components/loading_indicator'; import DropdownMenuContainer from 'flavours/glitch/containers/dropdown_menu_container'; import { autoPlayGif, me, domain } from 'flavours/glitch/initial_state'; import { PERMISSION_MANAGE_USERS, PERMISSION_MANAGE_FEDERATION } from 'flavours/glitch/permissions'; @@ -206,7 +207,7 @@ class Header extends ImmutablePureComponent { if (me !== account.get('id')) { if (signedIn && !account.get('relationship')) { // Wait until the relationship is loaded - actionBtn = ''; + actionBtn = ; } else if (account.getIn(['relationship', 'requested'])) { actionBtn =
diff --git a/app/javascript/flavours/glitch/styles/components.scss b/app/javascript/flavours/glitch/styles/components.scss index 9098591764..eab3f3358b 100644 --- a/app/javascript/flavours/glitch/styles/components.scss +++ b/app/javascript/flavours/glitch/styles/components.scss @@ -8089,10 +8089,7 @@ noscript { .button { flex-shrink: 1; white-space: nowrap; - - @media screen and (max-width: $no-gap-breakpoint) { - min-width: 0; - } + min-width: 80px; } .icon-button { From 435c46b316579e98f57b8ea76f88311812a8ab86 Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Tue, 12 Mar 2024 10:42:51 +0100 Subject: [PATCH 90/96] [Glitch] Fix i18n typo Port af4e44e30a6a2701102a7d573e47e9db42025821 to glitch-soc Signed-off-by: Claire --- .../notifications/components/filtered_notifications_banner.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/flavours/glitch/features/notifications/components/filtered_notifications_banner.jsx b/app/javascript/flavours/glitch/features/notifications/components/filtered_notifications_banner.jsx index 20d6501329..2cd843ebc9 100644 --- a/app/javascript/flavours/glitch/features/notifications/components/filtered_notifications_banner.jsx +++ b/app/javascript/flavours/glitch/features/notifications/components/filtered_notifications_banner.jsx @@ -38,7 +38,7 @@ export const FilteredNotificationsBanner = () => {
- +
From 8c0673037a4fcc8e1f27faccecc2c9fc32559027 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 12 Mar 2024 10:51:30 +0100 Subject: [PATCH 91/96] [Glitch] Change background color in web UI Port 5b60d4b696cd5fd58ca77eca3365c2a0761c0f57 Signed-off-by: Claire --- .../flavours/glitch/features/about/index.jsx | 24 +- .../flavours/glitch/styles/about.scss | 2 +- .../flavours/glitch/styles/admin.scss | 2 +- .../flavours/glitch/styles/basics.scss | 2 +- .../flavours/glitch/styles/components.scss | 251 +++++++++--------- .../glitch/styles/mastodon-light/diff.scss | 88 ------ .../styles/mastodon-light/variables.scss | 4 + .../flavours/glitch/styles/variables.scss | 8 +- 8 files changed, 147 insertions(+), 234 deletions(-) diff --git a/app/javascript/flavours/glitch/features/about/index.jsx b/app/javascript/flavours/glitch/features/about/index.jsx index a201dd5f28..4fde1f0473 100644 --- a/app/javascript/flavours/glitch/features/about/index.jsx +++ b/app/javascript/flavours/glitch/features/about/index.jsx @@ -189,18 +189,20 @@ class About extends PureComponent { <>

-
- {domainBlocks.get('items').map(block => ( -
-
-
{block.get('domain')}
- {intl.formatMessage(severityMessages[block.get('severity')].title)} -
+ {domainBlocks.get('items').size > 0 && ( +
+ {domainBlocks.get('items').map(block => ( +
+
+
{block.get('domain')}
+ {intl.formatMessage(severityMessages[block.get('severity')].title)} +
-

{(block.get('comment') || '').length > 0 ? block.get('comment') : }

-
- ))} -
+

{(block.get('comment') || '').length > 0 ? block.get('comment') : }

+
+ ))} +
+ )} ) : (

diff --git a/app/javascript/flavours/glitch/styles/about.scss b/app/javascript/flavours/glitch/styles/about.scss index 9d23ef41ab..48fe9449f0 100644 --- a/app/javascript/flavours/glitch/styles/about.scss +++ b/app/javascript/flavours/glitch/styles/about.scss @@ -26,7 +26,7 @@ $fluid-breakpoint: $maximum-width + 20px; li { position: relative; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); padding: 1em 1.75em; padding-inline-start: 3em; font-weight: 500; diff --git a/app/javascript/flavours/glitch/styles/admin.scss b/app/javascript/flavours/glitch/styles/admin.scss index becce27568..ca4346558c 100644 --- a/app/javascript/flavours/glitch/styles/admin.scss +++ b/app/javascript/flavours/glitch/styles/admin.scss @@ -1399,8 +1399,8 @@ a.sparkline { } .account-card { - background: $ui-base-color; border-radius: 4px; + border: 1px solid lighten($ui-base-color, 8%); &__permalink { color: inherit; diff --git a/app/javascript/flavours/glitch/styles/basics.scss b/app/javascript/flavours/glitch/styles/basics.scss index 7dc8e340c3..5f9708a8a2 100644 --- a/app/javascript/flavours/glitch/styles/basics.scss +++ b/app/javascript/flavours/glitch/styles/basics.scss @@ -8,7 +8,7 @@ body { font-family: $font-sans-serif, sans-serif; - background: darken($ui-base-color, 8%); + background: var(--background-color); font-size: 13px; line-height: 18px; font-weight: 400; diff --git a/app/javascript/flavours/glitch/styles/components.scss b/app/javascript/flavours/glitch/styles/components.scss index eab3f3358b..0a446447f6 100644 --- a/app/javascript/flavours/glitch/styles/components.scss +++ b/app/javascript/flavours/glitch/styles/components.scss @@ -1375,7 +1375,7 @@ body > [data-popper-placement] { box-sizing: border-box; width: 100%; clear: both; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); &__button { display: inline; @@ -1396,19 +1396,14 @@ body > [data-popper-placement] { .focusable { &:focus { outline: 0; - background: lighten($ui-base-color, 4%); - - .detailed-status, - .detailed-status__action-bar { - background: lighten($ui-base-color, 8%); - } + background: rgba($ui-highlight-color, 0.05); } } .status { padding: 10px 14px; // glitch: reduced padding min-height: 54px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); cursor: auto; @keyframes fade { @@ -1800,10 +1795,10 @@ body > [data-popper-placement] { } .status__wrapper-direct { - background: mix($ui-base-color, $ui-highlight-color, 95%); + background: rgba($ui-highlight-color, 0.05); &:focus { - background: mix(lighten($ui-base-color, 4%), $ui-highlight-color, 95%); + background: rgba($ui-highlight-color, 0.05); } .status__prepend { @@ -1831,9 +1826,8 @@ body > [data-popper-placement] { } .detailed-status { - background: lighten($ui-base-color, 4%); padding: 14px 10px; // glitch: reduced padding - border-top: 1px solid lighten($ui-base-color, 8%); + border-top: 1px solid var(--background-border-color); &--flex { display: flex; @@ -1893,9 +1887,8 @@ body > [data-popper-placement] { } .detailed-status__action-bar { - background: lighten($ui-base-color, 4%); - border-top: 1px solid lighten($ui-base-color, 8%); - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-top: 1px solid var(--background-border-color); + border-bottom: 1px solid var(--background-border-color); display: flex; flex-direction: row; padding: 8px 0; // glitch: reduced padding @@ -1950,7 +1943,7 @@ body > [data-popper-placement] { .domain { padding: 10px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); .domain__domain-name { flex: 1 1 auto; @@ -1974,7 +1967,7 @@ body > [data-popper-placement] { .account { padding: 10px; // glitch: reduced padding - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); .account__display-name { flex: 1 1 auto; @@ -2234,7 +2227,7 @@ a.account__display-name { .notification__report { padding: 10px; // glitch: reduced padding - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); display: flex; gap: 10px; @@ -2493,6 +2486,7 @@ a.account__display-name { .dropdown-menu { background: var(--dropdown-background-color); + backdrop-filter: var(--background-filter); border: 1px solid var(--dropdown-border-color); padding: 2px; // glitch: reduced padding border-radius: 4px; @@ -2683,6 +2677,7 @@ $ui-header-height: 55px; z-index: 3; justify-content: space-between; align-items: center; + backdrop-filter: var(--background-filter); &__logo { display: inline-flex; @@ -2731,7 +2726,8 @@ $ui-header-height: 55px; } .tabs-bar__wrapper { - background: darken($ui-base-color, 8%); + background: var(--background-color-tint); + backdrop-filter: var(--background-filter); position: sticky; top: $ui-header-height; z-index: 2; @@ -2767,8 +2763,15 @@ $ui-header-height: 55px; flex-direction: column; > .scrollable { - background: $ui-base-color; + border: 1px solid var(--background-border-color); + border-top: 0; border-radius: 0 0 4px 4px; + + &.about, + &.privacy-policy { + border-top: 1px solid var(--background-border-color); + border-radius: 4px; + } } } @@ -2798,7 +2801,6 @@ $ui-header-height: 55px; font-size: 16px; align-items: center; justify-content: center; - border-bottom: 2px solid transparent; } .column, @@ -2927,8 +2929,7 @@ $ui-header-height: 55px; .navigation-panel { margin: 0; - background: $ui-base-color; - border-inline-start: 1px solid lighten($ui-base-color, 8%); + border-inline-start: 1px solid var(--background-border-color); height: 100vh; } @@ -2946,8 +2947,15 @@ $ui-header-height: 55px; .layout-single-column .ui__header { display: flex; - background: $ui-base-color; - border-bottom: 1px solid lighten($ui-base-color, 8%); + background: var(--background-color-tint); + border-bottom: 1px solid var(--background-border-color); + } + + .column > .scrollable, + .tabs-bar__wrapper .column-header, + .tabs-bar__wrapper .column-back-button { + border-left: 0; + border-right: 0; } .column-header, @@ -3005,7 +3013,7 @@ $ui-header-height: 55px; inset-inline-start: 9px; top: -13px; background: $ui-highlight-color; - border: 2px solid lighten($ui-base-color, 8%); + border: 2px solid var(--background-color); padding: 1px 6px; border-radius: 6px; font-size: 10px; @@ -3027,7 +3035,7 @@ $ui-header-height: 55px; } .column-link--transparent .icon-with-badge__badge { - border-color: darken($ui-base-color, 8%); + border-color: var(--background-color); } .column-title { @@ -3377,7 +3385,7 @@ $ui-header-height: 55px; flex: 0 0 auto; border: 0; background: transparent; - border-top: 1px solid lighten($ui-base-color, 4%); + border-top: 1px solid var(--background-border-color); margin: 10px 0; } @@ -3394,13 +3402,14 @@ $ui-header-height: 55px; overflow: hidden; display: flex; border-radius: 4px; + border: 1px solid var(--background-border-color); } .drawer__inner { position: absolute; top: 0; inset-inline-start: 0; - background: darken($ui-base-color, 4%); + background: var(--background-color); box-sizing: border-box; padding: 0; display: flex; @@ -3409,15 +3418,11 @@ $ui-header-height: 55px; overflow-y: auto; width: 100%; height: 100%; - - &.darker { - background: $ui-base-color; - } } .drawer__inner__mastodon { - background: darken($ui-base-color, 4%) - url('data:image/svg+xml;utf8,') + background: var(--background-color) + url('data:image/svg+xml;utf8,') no-repeat bottom / 100% auto; flex: 1; min-height: 47px; @@ -3441,7 +3446,7 @@ $ui-header-height: 55px; .drawer__header { flex: 0 0 auto; font-size: 16px; - background: darken($ui-base-color, 4%); + border: 1px solid var(--background-border-color); margin-bottom: 10px; display: flex; flex-direction: row; @@ -3451,7 +3456,7 @@ $ui-header-height: 55px; a:hover, a:focus, a:active { - background: $ui-base-color; + color: $primary-text-color; } } @@ -3496,15 +3501,14 @@ $ui-header-height: 55px; .column-back-button { box-sizing: border-box; width: 100%; - background: $ui-base-color; + background: transparent; + border: 1px solid var(--background-border-color); border-radius: 4px 4px 0 0; color: $highlight-text-color; cursor: pointer; flex: 0 0 auto; font-size: 16px; line-height: inherit; - border: 0; - border-bottom: 1px solid lighten($ui-base-color, 8%); text-align: unset; padding: 13px; margin: 0; @@ -3517,13 +3521,17 @@ $ui-header-height: 55px; &:hover { text-decoration: underline; } + + @media screen and (max-width: $no-gap-breakpoint) { + border-top: 0; + } } .column-header__back-button { display: flex; align-items: center; gap: 5px; - background: $ui-base-color; + background: transparent; border: 0; font-family: inherit; color: $highlight-text-color; @@ -3629,8 +3637,6 @@ $ui-header-height: 55px; } .column-link { - background: lighten($ui-base-color, 8%); - color: $primary-text-color; display: flex; align-items: center; gap: 5px; @@ -3640,12 +3646,18 @@ $ui-header-height: 55px; overflow: hidden; white-space: nowrap; border: 0; + background: transparent; + color: $secondary-text-color; border-left: 4px solid transparent; &:hover, &:focus, &:active { - background: lighten($ui-base-color, 11%); + color: $primary-text-color; + } + + &.active { + color: $highlight-text-color; } &:focus { @@ -3657,22 +3669,6 @@ $ui-header-height: 55px; border-radius: 0; } - &--transparent { - background: transparent; - color: $secondary-text-color; - - &:hover, - &:focus, - &:active { - background: transparent; - color: $primary-text-color; - } - - &.active { - color: $highlight-text-color; - } - } - &--logo { background: transparent; padding: 10px; @@ -3697,8 +3693,8 @@ $ui-header-height: 55px; } .column-subheading { - background: $ui-base-color; - color: $dark-text-color; + background: darken($ui-base-color, 4%); + color: $darker-text-color; padding: 8px 20px; font-size: 12px; font-weight: 500; @@ -3706,12 +3702,6 @@ $ui-header-height: 55px; cursor: default; } -.getting-started__wrapper, -.getting-started, -.flex-spacer { - background: $ui-base-color; -} - .getting-started__wrapper { flex: 0 0 auto; } @@ -3723,6 +3713,8 @@ $ui-header-height: 55px; .getting-started { color: $dark-text-color; overflow: auto; + border: 1px solid var(--background-border-color); + border-top: 0; &__trends { flex: 0 1 auto; @@ -3731,7 +3723,7 @@ $ui-header-height: 55px; margin-top: 10px; h4 { - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); padding: 10px; font-size: 12px; text-transform: uppercase; @@ -3876,7 +3868,7 @@ input.glitch-setting-text { margin-top: 14px; text-decoration: none; overflow: hidden; - border: 1px solid lighten($ui-base-color, 8%); + border: 1px solid var(--background-border-color); border-radius: 8px; &__actions { @@ -4133,7 +4125,7 @@ a.status-card { } .load-gap { - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); } .timeline-hint { @@ -4166,7 +4158,8 @@ a.status-card { font-size: 16px; font-weight: 500; color: $dark-text-color; - background: $ui-base-color; + border: 1px solid var(--background-border-color); + border-top: 0; cursor: default; display: flex; flex: 1 1 auto; @@ -4242,8 +4235,7 @@ a.status-card { .column-header { display: flex; font-size: 16px; - background: $ui-base-color; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border: 1px solid var(--background-border-color); border-radius: 4px 4px 0 0; flex: 0 0 auto; cursor: pointer; @@ -4310,6 +4302,10 @@ a.status-card { padding-top: 16px; } } + + @media screen and (max-width: $no-gap-breakpoint) { + border-top: 0; + } } .column-header__buttons { @@ -4329,9 +4325,9 @@ a.status-card { display: flex; justify-content: center; align-items: center; - background: $ui-base-color; border: 0; color: $darker-text-color; + background: transparent; cursor: pointer; font-size: 16px; padding: 0 15px; @@ -4350,7 +4346,6 @@ a.status-card { &.active { color: $primary-text-color; - background: lighten($ui-base-color, 4%); &:hover { color: $primary-text-color; @@ -4406,7 +4401,6 @@ a.status-card { max-height: 70vh; overflow: hidden; overflow-y: auto; - border-bottom: 1px solid lighten($ui-base-color, 8%); color: $darker-text-color; transition: max-height 150ms ease-in-out, @@ -4428,7 +4422,7 @@ a.status-card { height: 0; background: transparent; border: 0; - border-top: 1px solid lighten($ui-base-color, 8%); + border-top: 1px solid var(--background-border-color); margin: 10px 0; } @@ -4444,7 +4438,8 @@ a.status-card { } .column-header__collapsible-inner { - background: $ui-base-color; + border: 1px solid var(--background-border-color); + border-top: 0; } .column-header__setting-btn { @@ -4786,9 +4781,8 @@ a.status-card { } .account--panel { - background: lighten($ui-base-color, 4%); - border-top: 1px solid lighten($ui-base-color, 8%); - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-top: 1px solid var(--background-border-color); + border-bottom: 1px solid var(--background-border-color); display: flex; flex-direction: row; padding: 10px 0; @@ -4998,7 +4992,6 @@ a.status-card { .empty-column-indicator, .follow_requests-unlocked_explanation { color: $dark-text-color; - background: $ui-base-color; text-align: center; padding: 20px; font-size: 15px; @@ -5025,14 +5018,14 @@ a.status-card { .follow_requests-unlocked_explanation { background: darken($ui-base-color, 4%); - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); contain: initial; flex-grow: 0; } .error-column { padding: 20px; - background: $ui-base-color; + border: 1px solid var(--background-border-color); border-radius: 4px; display: flex; flex: 1 1 auto; @@ -5247,7 +5240,7 @@ a.status-card { width: 100%; height: 6px; border-radius: 6px; - background: darken($ui-base-color, 8%); + background: var(--background-color); position: relative; margin-top: 5px; } @@ -5781,7 +5774,7 @@ a.status-card { } .search-results__section { - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); &:last-child { border-bottom: 0; @@ -5789,7 +5782,7 @@ a.status-card { &__header { background: darken($ui-base-color, 4%); - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); padding: 15px; font-weight: 500; font-size: 14px; @@ -6885,7 +6878,7 @@ img.modal-warning { .attachment-list { display: flex; font-size: 14px; - border: 1px solid lighten($ui-base-color, 8%); + border: 1px solid var(--background-border-color); border-radius: 4px; margin-top: 14px; // glitch: reduced margins overflow: hidden; @@ -6895,7 +6888,7 @@ img.modal-warning { color: $dark-text-color; padding: 8px 18px; cursor: default; - border-inline-end: 1px solid lighten($ui-base-color, 8%); + border-inline-end: 1px solid var(--background-border-color); display: flex; flex-direction: column; align-items: center; @@ -7066,7 +7059,7 @@ img.modal-warning { overflow: hidden; box-sizing: border-box; position: relative; - background: darken($ui-base-color, 8%); + background: var(--background-color); border-radius: 8px; padding-bottom: 44px; width: 100%; @@ -7479,7 +7472,6 @@ img.modal-warning { .scrollable .account-card { margin: 10px; - background: lighten($ui-base-color, 8%); } .scrollable .account-card__title__avatar { @@ -7490,11 +7482,7 @@ img.modal-warning { } .scrollable .account-card__bio::after { - background: linear-gradient( - to left, - lighten($ui-base-color, 8%), - transparent - ); + background: linear-gradient(to left, var(--background-color), transparent); } .account-gallery__container { @@ -7523,9 +7511,8 @@ img.modal-warning { .notification__filter-bar, .account__section-headline { - // deliberate glitch-soc choice for now - background: darken($ui-base-color, 4%); - border-bottom: 1px solid lighten($ui-base-color, 8%); + border: 1px solid var(--background-border-color); + border-top: 0; cursor: default; display: flex; flex-shrink: 0; @@ -7564,10 +7551,15 @@ img.modal-warning { } } } + + .scrollable & { + border-left: 0; + border-right: 0; + } } .filter-form { - background: $ui-base-color; + border-bottom: 1px solid var(--background-border-color); &__column { display: flex; @@ -7785,7 +7777,8 @@ noscript { justify-content: flex-start; gap: 15px; align-items: center; - background: lighten($ui-base-color, 4%); + border: 1px solid var(--background-border-color); + border-top: 0; label { flex: 1 1 auto; @@ -7886,7 +7879,7 @@ noscript { .list { padding: 10px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); } .list__wrapper { @@ -8030,7 +8023,7 @@ noscript { height: 145px; position: relative; background: darken($ui-base-color, 4%); - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); img { object-fit: cover; @@ -8045,7 +8038,7 @@ noscript { position: relative; padding: 0 20px; padding-bottom: 16px; // glitch-soc addition for the different tabs design - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); .avatar { display: block; @@ -8053,8 +8046,8 @@ noscript { width: 94px; .account__avatar { - background: darken($ui-base-color, 8%); - border: 2px solid $ui-base-color; + background: var(--background-color); + border: 2px solid var(--background-border-color); } } } @@ -8169,13 +8162,12 @@ noscript { margin: 0; margin-top: 16px; border-radius: 4px; - background: darken($ui-base-color, 4%); - border: 0; + border: 1px solid var(--background-border-color); dl { display: block; padding: 8px 16px; // glitch-soc: padding purposefuly reduced - border-bottom-color: lighten($ui-base-color, 4%); + border-bottom-color: var(--background-border-color); } dd, @@ -8350,7 +8342,7 @@ noscript { display: flex; align-items: center; padding: 15px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); gap: 15px; &:last-child { @@ -8468,7 +8460,7 @@ noscript { .conversation { display: flex; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); padding: 5px; padding-bottom: 0; @@ -8829,7 +8821,7 @@ noscript { .picture-in-picture-placeholder { box-sizing: border-box; - border: 2px dashed lighten($ui-base-color, 8%); + border: 2px dashed var(--background-border-color); background: $base-shadow-color; display: flex; flex-direction: column; @@ -8857,7 +8849,7 @@ noscript { .notifications-permission-banner { padding: 30px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); display: flex; flex-direction: column; align-items: center; @@ -8927,7 +8919,7 @@ noscript { color: $primary-text-color; text-decoration: none; padding: 15px; - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); gap: 15px; &:last-child { @@ -9306,7 +9298,6 @@ noscript { } .privacy-policy { - background: $ui-base-color; padding: 20px; @media screen and (min-width: $no-gap-breakpoint) { @@ -9675,6 +9666,7 @@ noscript { .about { padding: 20px; + border-top: 1px solid var(--background-border-color); @media screen and (min-width: $no-gap-breakpoint) { border-radius: 4px; @@ -9721,7 +9713,7 @@ noscript { } &__meta { - background: lighten($ui-base-color, 4%); + border: 1px solid var(--background-border-color); border-radius: 4px; display: flex; margin-bottom: 30px; @@ -9737,7 +9729,7 @@ noscript { width: 0; border: 0; border-style: solid; - border-color: lighten($ui-base-color, 8%); + border-color: var(--background-border-color); border-left-width: 1px; min-height: calc(100% - 60px); flex: 0 0 auto; @@ -9845,7 +9837,7 @@ noscript { line-height: 22px; padding: 20px; border-radius: 4px; - background: lighten($ui-base-color, 4%); + border: 1px solid var(--background-border-color); color: $highlight-text-color; cursor: pointer; } @@ -9855,7 +9847,7 @@ noscript { } &__body { - border: 1px solid lighten($ui-base-color, 4%); + border: 1px solid var(--background-border-color); border-top: 0; padding: 20px; font-size: 15px; @@ -9865,18 +9857,17 @@ noscript { &__domain-blocks { margin-top: 30px; - background: darken($ui-base-color, 4%); - border: 1px solid lighten($ui-base-color, 4%); + border: 1px solid var(--background-border-color); border-radius: 4px; &__domain { - border-bottom: 1px solid lighten($ui-base-color, 4%); + border-bottom: 1px solid var(--background-border-color); padding: 10px; font-size: 15px; color: $darker-text-color; &:nth-child(2n) { - background: darken($ui-base-color, 2%); + background: darken($ui-base-color, 4%); } &:last-child { @@ -9972,7 +9963,7 @@ noscript { } .hashtag-header { - border-bottom: 1px solid lighten($ui-base-color, 8%); + border-bottom: 1px solid var(--background-border-color); padding: 15px; font-size: 17px; line-height: 22px; @@ -10034,8 +10025,8 @@ noscript { gap: 12px; padding: 16px 0; padding-bottom: 0; - border-bottom: 1px solid mix($ui-base-color, $ui-highlight-color, 75%); - background: mix($ui-base-color, $ui-highlight-color, 95%); + border-bottom: 1px solid var(--background-border-color); + background: rgba($ui-highlight-color, 0.05); &__header { display: flex; @@ -10119,8 +10110,8 @@ noscript { overflow-x: scroll; &__card { - background: darken($ui-base-color, 4%); - border: 1px solid lighten($ui-base-color, 8%); + background: var(--background-color); + border: 1px solid var(--background-border-color); border-radius: 4px; display: flex; flex-direction: column; @@ -10157,7 +10148,7 @@ noscript { .account__avatar { flex-shrink: 0; align-self: flex-end; - border: 1px solid lighten($ui-base-color, 8%); + border: 1px solid var(--background-border-color); background-color: $ui-base-color; } diff --git a/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss b/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss index 02a1e7207d..0ab1c8f871 100644 --- a/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss +++ b/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss @@ -21,25 +21,6 @@ html { } // Change default background colors of columns -.column > .scrollable, -.getting-started, -.column-inline-form, -.regeneration-indicator { - background: $white; - border: 1px solid lighten($ui-base-color, 8%); - border-top: 0; -} - -.error-column { - border: 1px solid lighten($ui-base-color, 8%); -} - -.column > .scrollable.about { - border-top: 1px solid lighten($ui-base-color, 8%); -} - -.about__meta, -.about__section__title, .interaction-modal { background: $white; border: 1px solid lighten($ui-base-color, 8%); @@ -53,37 +34,10 @@ html { background: lighten($ui-base-color, 12%); } -.filter-form { - background: $white; - border-bottom: 1px solid lighten($ui-base-color, 8%); -} - -.column-back-button, -.column-header { - background: $white; - border: 1px solid lighten($ui-base-color, 8%); - - @media screen and (max-width: $no-gap-breakpoint) { - border-top: 0; - } - - &--slim-button { - top: -50px; - right: 0; - } -} - -.column-header__back-button, -.column-header__button, -.column-header__button.active, .account__header { background: $white; } -.column-header { - border-bottom: 0; -} - .column-header__button.active { color: $ui-highlight-color; @@ -91,7 +45,6 @@ html { &:active, &:focus { color: $ui-highlight-color; - background: $white; } } @@ -117,25 +70,6 @@ html { } } -.column-subheading { - background: darken($ui-base-color, 4%); - border-bottom: 1px solid lighten($ui-base-color, 8%); -} - -.getting-started, -.scrollable { - .column-link { - background: $white; - border-bottom: 1px solid lighten($ui-base-color, 8%); - - &:hover, - &:active, - &:focus { - background: $ui-base-color; - } - } -} - .getting-started .navigation-bar { border-top: 1px solid lighten($ui-base-color, 8%); border-bottom: 1px solid lighten($ui-base-color, 8%); @@ -168,23 +102,6 @@ html { border-bottom: 0; } -.notification__filter-bar { - border: 1px solid lighten($ui-base-color, 8%); - border-top: 0; -} - -.drawer__header, -.drawer__inner { - background: $white; - border: 1px solid lighten($ui-base-color, 8%); -} - -.drawer__inner__mastodon { - background: $white - url('data:image/svg+xml;utf8,') - no-repeat bottom / 100% auto; -} - .upload-progress__backdrop { background: $ui-base-color; } @@ -194,11 +111,6 @@ html { background: lighten($white, 4%); } -.detailed-status, -.detailed-status__action-bar { - background: $white; -} - // Change the background colors of status__content__spoiler-link .reply-indicator__content .status__content__spoiler-link, .status__content .status__content__spoiler-link { diff --git a/app/javascript/flavours/glitch/styles/mastodon-light/variables.scss b/app/javascript/flavours/glitch/styles/mastodon-light/variables.scss index 3cf5561ca3..09a75a834b 100644 --- a/app/javascript/flavours/glitch/styles/mastodon-light/variables.scss +++ b/app/javascript/flavours/glitch/styles/mastodon-light/variables.scss @@ -59,4 +59,8 @@ $emojis-requiring-inversion: 'chains'; .theme-mastodon-light { --dropdown-border-color: #d9e1e8; --dropdown-background-color: #fff; + --background-border-color: #d9e1e8; + --background-color: #fff; + --background-color-tint: rgba(255, 255, 255, 90%); + --background-filter: blur(10px); } diff --git a/app/javascript/flavours/glitch/styles/variables.scss b/app/javascript/flavours/glitch/styles/variables.scss index ed5b1b6488..b96699abda 100644 --- a/app/javascript/flavours/glitch/styles/variables.scss +++ b/app/javascript/flavours/glitch/styles/variables.scss @@ -100,10 +100,14 @@ $ui-avatar-border-size: 8%; $dismiss-overlay-width: 4rem; :root { - --dropdown-border-color: #{lighten($ui-base-color, 12%)}; - --dropdown-background-color: #{lighten($ui-base-color, 4%)}; + --dropdown-border-color: #{lighten($ui-base-color, 4%)}; + --dropdown-background-color: #{rgba(darken($ui-base-color, 8%), 0.9)}; --dropdown-shadow: 0 20px 25px -5px #{rgba($base-shadow-color, 0.25)}, 0 8px 10px -6px #{rgba($base-shadow-color, 0.25)}; --modal-background-color: #{darken($ui-base-color, 4%)}; --modal-border-color: #{lighten($ui-base-color, 4%)}; + --background-border-color: #{lighten($ui-base-color, 4%)}; + --background-filter: blur(10px) saturate(180%) contrast(75%) brightness(70%); + --background-color: #{darken($ui-base-color, 8%)}; + --background-color-tint: #{rgba(darken($ui-base-color, 8%), 0.9)}; } From 00d72866a378481bb6cd49acce4b3b516e615302 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Tue, 12 Mar 2024 13:10:37 -0400 Subject: [PATCH 92/96] [Glitch] Use vanilla JS to get Rails CSRF values Port 00d94f3ffabda89a2f955212e763cdba3f1f54c6 to glitch-soc Signed-off-by: Claire --- app/javascript/flavours/glitch/utils/log_out.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/app/javascript/flavours/glitch/utils/log_out.ts b/app/javascript/flavours/glitch/utils/log_out.ts index a7c7ef5454..d4db471a6e 100644 --- a/app/javascript/flavours/glitch/utils/log_out.ts +++ b/app/javascript/flavours/glitch/utils/log_out.ts @@ -1,5 +1,3 @@ -import Rails from '@rails/ujs'; - import { signOutLink } from 'flavours/glitch/utils/backend_links'; export const logOut = () => { @@ -11,13 +9,18 @@ export const logOut = () => { methodInput.setAttribute('type', 'hidden'); form.appendChild(methodInput); - const csrfToken = Rails.csrfToken(); - const csrfParam = Rails.csrfParam(); + const csrfToken = document.querySelector( + 'meta[name=csrf-token]', + ); + + const csrfParam = document.querySelector( + 'meta[name=csrf-param]', + ); if (csrfParam && csrfToken) { const csrfInput = document.createElement('input'); - csrfInput.setAttribute('name', csrfParam); - csrfInput.setAttribute('value', csrfToken); + csrfInput.setAttribute('name', csrfParam.content); + csrfInput.setAttribute('value', csrfToken.content); csrfInput.setAttribute('type', 'hidden'); form.appendChild(csrfInput); } From e1b64151a2e81f9dcb77c44e82b68ef7e075ba96 Mon Sep 17 00:00:00 2001 From: Erik Uden Date: Wed, 13 Mar 2024 12:45:20 +0100 Subject: [PATCH 93/96] [Glitch] Fix toggle button color for light (and dark/default) theme Port 268856d5d9f72f003a08a53c7d094ed4df7c16bc to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/styles/components.scss | 13 +++++++++++-- .../flavours/glitch/styles/mastodon-light/diff.scss | 4 ++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/app/javascript/flavours/glitch/styles/components.scss b/app/javascript/flavours/glitch/styles/components.scss index 0a446447f6..5c0d721aab 100644 --- a/app/javascript/flavours/glitch/styles/components.scss +++ b/app/javascript/flavours/glitch/styles/components.scss @@ -3586,7 +3586,7 @@ $ui-header-height: 55px; height: 20px; padding: 0; border-radius: 10px; - background-color: #626982; + background-color: $ui-primary-color; } .react-toggle--focus { @@ -3609,7 +3609,7 @@ $ui-header-height: 55px; width: 16px; height: 16px; border-radius: 50%; - background-color: $primary-text-color; + background-color: $ui-button-color; box-sizing: border-box; transition: all 0.25s ease; transition-property: border-color, left; @@ -3620,6 +3620,15 @@ $ui-header-height: 55px; border-color: $ui-highlight-color; } +.react-toggle:hover:not(.react-toggle--disabled) .react-toggle-track { + background: darken($ui-primary-color, 5%); +} + +.react-toggle.react-toggle--checked:hover:not(.react-toggle--disabled) + .react-toggle-track { + background: lighten($ui-highlight-color, 5%); +} + .switch-to-advanced { color: $light-text-color; background-color: $ui-base-color; diff --git a/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss b/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss index 0ab1c8f871..50cd0aded5 100644 --- a/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss +++ b/app/javascript/flavours/glitch/styles/mastodon-light/diff.scss @@ -263,11 +263,11 @@ html { } .react-toggle-track { - background: $ui-secondary-color; + background: $ui-primary-color; } .react-toggle:hover:not(.react-toggle--disabled) .react-toggle-track { - background: darken($ui-secondary-color, 10%); + background: lighten($ui-primary-color, 10%); } .react-toggle.react-toggle--checked:hover:not(.react-toggle--disabled) From 663dd49a85627eb4f7b956400c0eb458a6f5656a Mon Sep 17 00:00:00 2001 From: Renaud Chaput Date: Wed, 13 Mar 2024 13:54:50 +0100 Subject: [PATCH 94/96] [Glitch] Fix navigation panel icons missing classes Port acf3f410aef3cfb9e8f5f73042526de9b2f96d13 to glitch-soc Signed-off-by: Claire --- .../glitch/features/ui/components/navigation_panel.jsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/javascript/flavours/glitch/features/ui/components/navigation_panel.jsx b/app/javascript/flavours/glitch/features/ui/components/navigation_panel.jsx index 8ee848e419..7ac748e438 100644 --- a/app/javascript/flavours/glitch/features/ui/components/navigation_panel.jsx +++ b/app/javascript/flavours/glitch/features/ui/components/navigation_panel.jsx @@ -65,8 +65,8 @@ const NotificationsLink = () => { } - activeIcon={} + icon={} + activeIcon={} text={intl.formatMessage(messages.notifications)} /> ); @@ -89,8 +89,8 @@ const FollowRequestsLink = () => { } - activeIcon={} + icon={} + activeIcon={} text={intl.formatMessage(messages.followRequests)} /> ); From e7b49181afcc043c5f35061d26b3c68c30a03d41 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 13 Mar 2024 17:47:48 +0100 Subject: [PATCH 95/96] [Glitch] Hide media by default in notification requests Port a32a126cac42c73236236b5a9bd660765b9c58ee to glitch-soc Signed-off-by: Claire --- .../flavours/glitch/components/status.jsx | 24 +++++++---- .../glitch/features/notifications/request.jsx | 41 ++++++++++--------- .../ui/util/sensitive_media_context.tsx | 28 +++++++++++++ 3 files changed, 66 insertions(+), 27 deletions(-) create mode 100644 app/javascript/flavours/glitch/features/ui/util/sensitive_media_context.tsx diff --git a/app/javascript/flavours/glitch/components/status.jsx b/app/javascript/flavours/glitch/components/status.jsx index 42076f0890..32a34a086a 100644 --- a/app/javascript/flavours/glitch/components/status.jsx +++ b/app/javascript/flavours/glitch/components/status.jsx @@ -20,6 +20,7 @@ import Card from '../features/status/components/card'; // to use the progress bar to show download progress import Bundle from '../features/ui/components/bundle'; import { MediaGallery, Video, Audio } from '../features/ui/util/async-components'; +import { SensitiveMediaContext } from '../features/ui/util/sensitive_media_context'; import { displayMedia } from '../initial_state'; import AttachmentList from './attachment_list'; @@ -72,6 +73,8 @@ export const defaultMediaVisibility = (status, settings) => { class Status extends ImmutablePureComponent { + static contextType = SensitiveMediaContext; + static propTypes = { containerId: PropTypes.string, id: PropTypes.string, @@ -125,8 +128,7 @@ class Status extends ImmutablePureComponent { isCollapsed: false, autoCollapsed: false, isExpanded: undefined, - showMedia: undefined, - statusId: undefined, + showMedia: defaultMediaVisibility(this.props.status, this.props.settings) && !(this.context?.hideMediaByDefault), revealBehindCW: undefined, showCard: false, forceFilter: undefined, @@ -211,12 +213,6 @@ class Status extends ImmutablePureComponent { updated = true; } - if (nextProps.status && nextProps.status.get('id') !== prevState.statusId) { - update.showMedia = defaultMediaVisibility(nextProps.status, nextProps.settings); - update.statusId = nextProps.status.get('id'); - updated = true; - } - if (nextProps.settings.getIn(['media', 'reveal_behind_cw']) !== prevState.revealBehindCW) { update.revealBehindCW = nextProps.settings.getIn(['media', 'reveal_behind_cw']); if (update.revealBehindCW) { @@ -312,6 +308,18 @@ class Status extends ImmutablePureComponent { if (snapshot !== null && this.props.updateScrollBottom && this.node.offsetTop < snapshot.top) { this.props.updateScrollBottom(snapshot.height - snapshot.top); } + + // This will potentially cause a wasteful redraw, but in most cases `Status` components are used + // with a `key` directly depending on their `id`, preventing re-use of the component across + // different IDs. + // But just in case this does change, reset the state on status change. + + if (this.props.status?.get('id') !== prevProps.status?.get('id')) { + this.setState({ + showMedia: defaultMediaVisibility(this.props.status, this.props.settings) && !(this.context?.hideMediaByDefault), + forceFilter: undefined, + }); + } } componentWillUnmount() { diff --git a/app/javascript/flavours/glitch/features/notifications/request.jsx b/app/javascript/flavours/glitch/features/notifications/request.jsx index d89527f69a..4aca0af7f6 100644 --- a/app/javascript/flavours/glitch/features/notifications/request.jsx +++ b/app/javascript/flavours/glitch/features/notifications/request.jsx @@ -15,6 +15,7 @@ import Column from 'flavours/glitch/components/column'; import ColumnHeader from 'flavours/glitch/components/column_header'; import { IconButton } from 'flavours/glitch/components/icon_button'; import ScrollableList from 'flavours/glitch/components/scrollable_list'; +import { SensitiveMediaContextProvider } from 'flavours/glitch/features/ui/util/sensitive_media_context'; import NotificationContainer from './containers/notification_container'; @@ -106,25 +107,27 @@ export const NotificationRequest = ({ multiColumn, params: { id } }) => { )} /> - - {notifications.map(item => ( - item && - ))} - + + + {notifications.map(item => ( + item && + ))} + + {columnTitle} diff --git a/app/javascript/flavours/glitch/features/ui/util/sensitive_media_context.tsx b/app/javascript/flavours/glitch/features/ui/util/sensitive_media_context.tsx new file mode 100644 index 0000000000..408154c31b --- /dev/null +++ b/app/javascript/flavours/glitch/features/ui/util/sensitive_media_context.tsx @@ -0,0 +1,28 @@ +import { createContext, useContext, useMemo } from 'react'; + +export const SensitiveMediaContext = createContext<{ + hideMediaByDefault: boolean; +}>({ + hideMediaByDefault: false, +}); + +export function useSensitiveMediaContext() { + return useContext(SensitiveMediaContext); +} + +type ContextValue = React.ContextType; + +export const SensitiveMediaContextProvider: React.FC< + React.PropsWithChildren<{ hideMediaByDefault: boolean }> +> = ({ hideMediaByDefault, children }) => { + const contextValue = useMemo( + () => ({ hideMediaByDefault }), + [hideMediaByDefault], + ); + + return ( + + {children} + + ); +}; From 369e72853639ab23e1eef5d71734e00bca568bb9 Mon Sep 17 00:00:00 2001 From: Claire Date: Wed, 13 Mar 2024 20:17:58 +0100 Subject: [PATCH 96/96] Fix collapsed posts background color --- app/javascript/flavours/glitch/styles/components.scss | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/app/javascript/flavours/glitch/styles/components.scss b/app/javascript/flavours/glitch/styles/components.scss index 5c0d721aab..7b4bc06784 100644 --- a/app/javascript/flavours/glitch/styles/components.scss +++ b/app/javascript/flavours/glitch/styles/components.scss @@ -1557,10 +1557,7 @@ body > [data-popper-placement] { bottom: 0; inset-inline-start: 0; inset-inline-end: 0; - background: linear-gradient( - rgba($ui-base-color, 0), - rgba($ui-base-color, 1) - ); + background: linear-gradient(transparent, var(--background-color)); pointer-events: none; }

x&sZ#2<=5xM-6WB2Y|W0S#>kErKZP=EkOy}S~0Xcuzcs3kK{ z%L$JI{%Xa&B#-%_ec;g%`K`k^l#;Kt z9F-#@^&5BjbOemZFIX5*9SAHEz6BGCH*}9D?}I1WXz8l5qrCqBbX#h4pr;ndmHivx z@v`p6dG=Z1M3mJSp%93bA*m|LMY|yr-Y^!3E5ZGFrDnA$sKsvhap6U*J?RgqMSSz@ zxzh6Tuoen7t>nnZ*m0KzgM;ZElMDOWdkf9!+>E9wnR6yt*G9(MsvHUNU0g8~yguE$ zhqhvs$;9T4HTtq8lWqfHFDsc3_BXE+GL-m+iYAAF6W)^ALQ3V8DWcf}EB9m!Q}e~i z8yceplr0;l&HA&m?YCz0Gn!+}7N3)+Acs?O)U#q!p%o$xua;bH4mxsrKRTQm#xKPg zYjqH0iE!EYX&+J&jpYRc+-23px77d$ZGwHidJB>5r$#!h8F?hNB+7Q4T0C}xZS9mP zjaFRfq%Z}XW`M*n0sywub3dheXw&Y1@3tI*wu&}s~A{vM78okpbUhSyt(nCf70)w{PyG!))ySzZRr`m73ZWwn+>g78XImoW*xr-9fv@ zN$=THTM}LJ$@&igRN*-NAnFJNydirqb4?@6QYqPCx?ubmyV__~Mew#OYq6*Anr=6; zt3#=J#iPU{%@uG)fGfiT5Tq_5a_|!sZpX-6nQXz z*W5HpR#4}b_O;Dc-&o=+-kAuilh}^aZHQyc6N*b*X@r`Ec?B{-t2bg3BY@1>iDo=8 zWtHh$wAqy)+|w=IO?jevt}dgBW4*ihpWF{$7oXfO+RvtN+e;^G*Y-2@^M_i1sn-#L zgkx=1nymt29?4t93P9t*3&2iIo=2oOBj*cEsb9_Q{=JN}JK8!zij`|BJ7;7$oYh1+ z(b*~7AT(D}X{hi{_U@#9vcFF0KoYv}#bC<>c0>Zq$D_vitZ$LW;xeX%O574xM~4o( zaU7%$DaujnmKb4@IH9F-q%e4J>GYh4eUTKgM%zdd-poGP&HFC5_{%CIA!J9La1CVr zvVHkTf&izNcZgD#*gvC()jyDPelU9--@$(U*w6r~<>DpCE7h0JGoq~lgif`+oVHf7 z>Z^9f6Ot*OM`rc$y__0MELdT7Fe!3G9tyMy%PmfOxliYA&glz~uH%-^o($H68NiBj z*NPi*hfYlrH*^Ck#&YCT&hz{x{S(nO0Nl|!qmqJvXe()2GR)Zd&BwpA_x{JUTg-3K zoa;%uG%E`(y7IWD9W=wQo2ob4Sp$ZhY0&@5F?H|xm)vpVtij1sSFzP+6{e>ljxRq~ z-@)I4vP;Dahe`j|suXbe{gqRz`hAyFI?N;Ye~^Xz<8l30!AJvK5vxP?2N3=3+2#*m zo9|TiUptlcb#YISpx0?Ub>}O);(tl%ohAQ^mojMKf}}Wt6T?C?z4E_gDDdl1h3o~- zk3PSie<>6Du7;SB3@Ul7T=`Wf+=$i=)(1e2!w7$whWho0ZkfDd zFf#0TA)`*^W;fpM58$=%b|yau2NjjNGxve**5!^}^q4!MgJK8)S01gk_RHNgbZn%N zM_u=dSUonF<#L_Kk_nm1GwW=4eLeWhtAW8+$AHmJDA0hHLdc$DSrUCEhWNC+$sExq zHfB*_Wc0QV8>GT9VXNLkmGPuaW9|ythegIo)`BE1*OZ#ur432W>cZ-2RMk#UvCIE6+OOV+m(kNi3xVqZWz6D$6rhd zsz!q}SZ}ax^P)E}_e-MDkKdLcBLHZqj#b7c7uUNrE??6&VwOfE%6V0v>r$eXujt5x zx9;$!v&G6Get^+QgyUOJa*prma}#TNhNfr*cec0p=Lu?a1)-P4`KWJGVREOF7Gj}G zDsP%LM0N=bXxz@q?-}1$uNqk0OfT71oh`hzG{;kE$U{*%%TNfm`e~t=EiWPwuzYow zUNbBx1B2s>Yl!}5R5DS+-$3e(|0|Gst|H6FR$xlJiy3Sx$TV73h}b=BB@;0?R#hYt zfIEtf)}VfB%+wcDuzLTy(7_`h6x=zUQETaao(`48UayX;+fnJGMHInU`juR-weTj> z)!;oJbg-<1U0;c1qtjL$LaUjtL?vH&gV_vYuE~fmWyuy?Js7p7M;eyJIgGnr`krW5 z8IzyVZvzPhSYw*4YS3UMZPly}&oDm|_~51~dpVBpXE|_)PQRQbu4w_x!Q|J!U9{{ZnT;F6-{|C@j9~wRz zaIfga-CKNI?Z$l>GluL|AYJLsTw-Ph8ft?ALrMGg03P|+jzwXb4U$+t;ih$DaiyD9 zzX`jF7%Sf=@2|?{)x{#8q^E>Vy|-Gd3Bx*R3*~y`PbR;$2(zSJByS}OXZ6Isrd7w^5?}Uz;v;z^lHnk+V5b&7 z=!eiwzs@f9&L=b)+gH8N=tGNS)z|Q8_BdUL;IP8Zu$nr~%omW`i;Yaq)l^z@(9pM@ zOcpRUu_xdMyl96ZaBU&W$gg0T1>MWV>ffzv4XZ+>nOKHm^mrzeU+oKO0YEa92pvO| zIMO)LQNdQ=j!JG|1I&PgI^}p*KJ9LuA$%#nxOjqAr+|u1Vt-YdOq8(5Y3uoA^3w(n zHw8Wh+SY;opqmL93LbPSHxd^(t;;`)a7im70T{*|wUR*UldECTjIVwCFqlIHd(-6R zmg*cw-4uPFztgRP=CqY!!7K>Pru2?|t)sBn#smH6 zR)kJ*QPpfISRy2EB=-5$LNmCJgO9{Koaabm7c)dY^7gYFst{j0n-n#TjPtAXr#c&! z#e@|(vlQG*A&PB**8O?tO`|u2Td7k~+4Xo(0-19sgpH~RQbQG)D{1V#&$+{^ZY}_T zC!s!gMcny=GzAT&R?No!x)U!pIi7bwn|g|Qsvk;ORveq7@vXfCBb`UQFA`~>A;EDj zWN!G%&PWps@fJcGaT-E4W}H;0O3zymiV&r!dISMX3PCq>KJ5Od+|kjq6(e(TQXA^E z^%;Bl9I(M=bJ@_ba&@qzDC;-6D6u~P!{a+?D)Tl%g+8_3Frtovgw^OD+zD$Cy7xbH ztTE&@T|BVUVcIEwOYF_Kk30N1*4}ESr{obg;bb+~SJgC=CtZ0sfUqm^mi5Tng}@#jl7~-8jG%SJEC&NQ_$3s1(#^JZ*BbV3XeWx>br~=aOR9{bm^$k45cJ6!6;(M#hN9imyGseZ>`&i-(pc@?XV zlCCNFs9bH0nL@>^QU;Rg{m>(iD27Bzd5EOGZDAnalo=jw5&MFz+S-qRwq$A%0QZgQ zglnrvAe^A~!5e-6uhR0_o?#$Z=_C6Z^>T9CXunQ=fbGQR`kw@3yJ_8m>5)R%D0F_v z5Q*OA=U-l5B7#cT;~2^K`Qz5!B&NGTsU92Ud_QU*#97v=Bc}JMMD(F@r{JCl9&2@E z>c`7^D7}xUu#c~(iS_=DErO3CDJg8D<&DWi zrvy4bAI%bHn9ZmhZgv{9+BuICNyyMLjNdTQC&F~6(W;o#B6LSZNHML{x!>dc0|f}t}YDv6JkdB@x`ub-s)pe6XD!yjXh9oZ>laC z2dQWS7lG2Y!sJr7EAAOQPYv=sgfmoU^4yeDuN?=&J^L3=iPFv_2EQKBukw?AUPnsr z16^XFCrMEH5h;y1Js8iO0@o(%ELReA+W0UnqZ8a_YUr#tjFZ|GBjr%B`6Wu4vSKo5 z1>07gD7S+zaOKN4dx;84Dl%@72284s$}=2vW~T=lWBc9eN~==bK5(a&ArY&92lX5* z5eECsg(KCATrUAMG{p8A-+wwT)J?kJ7||8oPMBJ@n||`emYsWnJ^zUTr_#;4XEYXF zvWs_=t-YIYfsT+a52LSoOQ9IqdykMAhfk>MYz=2(y>7*Oylhygypz;eD$+0N4dNsZ!P`F+9=hkn)LP!GVVys}X*FKe)FUX1 z|2oUqiT%+yzl>&E|k5Z>Lk@l1O>-cxJIz6ts_wlRZcz+ee@B9BHI%~0u zGbRT<^_G9r!+)Xqca9Bo;km@5Lg%%21X$^i_kZ5F{ijdqx`e}tF2_#f01Zj zi=`w{n&n8upk#?40ih2*5ht2aZI_Pc3tdEsuLe(gm(<>AXv?gH*#(zLjGA@eK0S;+ z0{AQBV228FIbTd71uEl;?srNnsvu=q+wPsXIE2;4ACLWD{4SCt| zbY62tOnfOj3fR(e=umRQ`U(8zN5;Z zYm<}Y3S2N}F5o@^$$wK@rZJ)DMnia$$rsaqP@?Le-}>vCBR(b_tgAkRfVeB>w!7FF zmQ;w zNgDFiX z@ZU`k|5fe&-yX{?i>rhTrBn?hx%~ma_B}q~buv~RO&b}^F*$>V85IZ0HRDQR!_v%N zHj5$6i4Qv#zs;LAZ2ssa(CC*Q(yiM?5)PMrq^)gou5NWBy+9 zF=N@HjEO5a-9I{{^N{T3VR7I{*7kLqrL&0f&)j0-$>`!S7F+IQ{9trSYz=VV76SZF zk?uYDssV9i?(tmsS!#Wp52IQ$Fm?@}E=+J!lMoY*WTHfsru!c8cJp^`DKle@c)7MS z^Y|~!@{y(%o3XjPQzbqrB1M_<_w8Qx?KbYtEW-!+2VBv?Y4roB?&5+~&{*X$m1ECW z$6i0{1IV=W;Q+jFZjr7}*sruSe4MA(zfiZOxgLFWx_^HhvNB5$0#8Y(=LdMqOCWtC zPq1IJGI;Y5y(k%EDgbmYJ{kka|JpTKveK>6)f)OtzYovAlgelAUtiJklke^4U4qxy ze9vsB*=8VP!>0Jd6;Mv5)m~hgjuKFV8-fTB#HIASlj;l@7rVnN|MY0zaBOQd1eNhG zYA5~dov7yIoh!PL*9zrAbxWRpwVm9cEb8Y$@%ql!pL6t^%1Pr7PQonJ(NJ63(vprJ zX}o$Uv6YlK?E)+ow=|ULZyhfL>O6k9HR6T1NOS)vIcEDghiVI~P>)iM9IKdh-~V%gMYb0wGZ2cR(atybDh0=7<}gfKrm8f=ABnPA!Z5sHw?>qMz_ zOvhpu6Tiu4hRYLkfp~@=()}tin+twN3@mCBL|`GFCkZ7z@A)P&69ZX!zcOIekn)kY zbA`lOGH)GnrHOq*zJ_P*-dIra)ew*%+qGo273=!i>`N+!eV8asZXbq#*17-)?U<+| z<;@9a0XcgeXLp&W`=%Ai8nI5()^SOc$w;o27rOmEY85~j{WfWn=hf-a{DwELeqL@) zLKpZuR&=!URbSv%S+!2)J3uL+b=N{y%HB=OU=4`2dD7I(Q?on}re^;l_5K?5Gt!`p zsJ~u+e}}$wf!$9gTc_L!V3$vXe9p=`gE=>r#Y1)h1QB5gDH&lHP3bp_CirK`KD`mY zr?j((4|;YiVPFVzq@%ODecho$1NEvd%2(}FiE2Jbo%TA2=79}E`Z#2c5e^jjzTl?a z^E0TltGKnZ!E@~u+gt9l{d*!;6}!v^batgm05gDte@|_xG99n0P5ddP>e=w5-J9M zeL}1@g^O2G^VfV`13~v9Tmw2^&gC+sR)(Cf7C|Z>&2CDW6WB zBZR8@fdt#MzK#88gZAOB(icV^s~1RaFr=-<;33fvkI$;o>Ew*DU8(W6xXTT#XXC!O zxkABmvXbvZDnctSRTmg&SJ)YBk4Q>^rWMXC2q8~HrP=`mB<2(OTRd7;rNN`R1gAFp z@riOKN}F#tO5?qKl$(VJwCIvo&9QLQ%N#oeBzuQGV@(GWGbA^{$AWYdn9ur@bF zT*HVrXs{%q4|>B6t}+ApW;h9-4y(K0DvtKUpmhaeo#zi77}2B|nQ}r@r)2ym6ux^% z=HBTNDj^#oxaYwM<`qusu>-l=O5fhvT_<8a)L}CRA5y6$^ol=oO&Ah*pk}l;IVorU z@^5%D*PDV9gu0oyVWrGfl9IGJg11-zGycz< zQV-|nyDP`L5T2Ir90|rjDf%|2@Esx~Hzpgd2wuj|7DYx|X{g966QSD^LEI?dlVl{` z$L^<;kin$iLZn5S8!1}auUZ%;F$&m_H$+y@N0!ApRzge?a2!f9mAW z?TIyhw1G@`XtS`*%IBAJ_eeruL@#$Y`Qc$S}hyQDz_pJNxH@nVP)eYOQ^IXks=^qJ$TYs^lIvE3}LOH zrQzZj0FOGHYBDPz)lrQaTmXto?LUB5dhR^0mj4g--ZChz_FeaET!K5n-3jg*8VNKI z+zG+mT^kMV?(XjHu0evkdvFb8`rW5$@BKe>&Yn{>GpFXmRP~qD-D^G1l3vy8y6@|E zS;`-MWFoArb7MZfZe_Xf}z^IaQVtvjoN*1I&5i3IJ}M|lFY9$P4i8l)0j&c(O>~0 z%l*PWneNUt55B*1+Ty=-RwR1Jqz=pDRnFO_5-hLVl;IR%qruQ(jP4D0D>qM#L5H)_ zu{=)B+Y^dQ|1$-2<9q{@cjUg(Ar?Y@qQj3FUQ)x!44HkhaoSmRAXD=+g)d++Tsc&Igfy;vQ^#HXihuRW8v7zV&=9C8*z+*#e4*za0Wnr8x zsDD$=S78^|5;h$WD1RnWy4-#XF>+et+9bwJIo1GjaYZMI$cN4arvLsTj_g|bHv-g ziqv6rRFFH_Yqvm0!z9w{ufvOPt2C!BDv##1|M6`foJvJEzge~CCjDoBQO|4x#m#D` z&;2h9n%S3s0r?fT7I(^Z!W(}9k{XAfa`-QQGCr6SA zdt>WP&DTbw8?y0|RP4vn4eD z`3e59#5W^&X%xG&G`{ltjeAyOyt32yrOckaN?CQT?()Ygf4AJHr&+(BX)~`$qAOE3 zT7JV3??Kak>lM#?MQ(oR1ygS#!y>aPqwhcd<>RvVX}kD|cdl=Dv`+5_-)2Y{{)oiz z-o2umm+kvW_6hW6j>kjlTzswZ1O<;jQC?&N{= z|9qG$roOTIB~ppI?{!=Ak&+f}$_}hp??>)B40=|{oS22!#M7n^F=oi97yTwE8qE}g zDYgo<&{kePQOc%X(Na&`GnM$CSp^zayLRtbAYn_1MU4MZ??ZTz$f8ODPSdbULtfA@ z=fBd=!kI3H0v0!A#hq!=+dsXUC(j<`!eOl1V~{>LEX_xEd0Tx{+f#P_9egSgo?Nt& zM=Y_0l~UlP{g}*j_zBtZRvj43K?#d(Mgtgi?mZF>oR^;{{iUTLTZckvhJfR@e@X0@ z-fgqqYF@)%egt|2>5Zj|*^`q~Jc$8CQN2%1)K$Wjrw8dvJMv_e8<_Qil4recWmr07 z&lglA+anYiF?mYZAWsM2N1(9(F?Ykj=|ZUxAjK<)N-ptY2!h#S%D~=SVfF zVh*qHoj4|1072K-$hpXffnWA~)+Dx~Ah05OTVX%8Wr`*=aXD>#v|M;$8lD~sEWLP# zIg{(K)XSJslmCg7S5oR?gFf8~2g-Of*IyMt3`X>X)CerqcwKP9$N373YFRIU(XsO< zCpP@;1noY=QxZ@afh_Boumzx5%gt z^Oe13S>(zM`mjg|jA78O5>}{zL`kkh?vLVbmm;5hwF_Uk?M-_9a4$efobWr%OnAVP#KaSdNU@ ziocT-v-2;Hx+8|{jOcXU!TQ~uyl->)J>5t^G(!`%8C{VnbBY;rXrdf}9=sE67IuP;Og zD^Ppu)+Da9{?RA(S4F6rOi-pp9l?&_4#H>%N7$eMR1iSGiz5CB5nh!Hx0(6IoWX5X zIqoL3ki5i7ay9kJR&wFrRXNwS@qCtGdMX>In-;b0&T?4;OQ?05Xb?L z_=r%P3}WqB?*vTg*J>n(+u{S2l~7Ai3{YUs(W^$$b>~-_wH}j}aF(irt?cTwbf!cn z+qvnKXiV~_ELUSAxD_ngI)H&m;PEU@8%2osO?(roLwN4VlTi}YLI*Q0+xj*zQO!D+ z7vW0>dtFd(KP5aSJs93wqL;C3UZ^1dOkd4 z9xhslB|-ON&w9i&a9X|jA`EIZvbN6UQ`^1>8BsA7mn2N zj^>1tIBYnD^z_h_lp+9J+v^5r&*HciNghUC$pVwOFWh*WM(~&7Yms$gnTj zT!_`xj+{oKy6h=%?WwwEDP)veoC#G6t;y|=g|``MVb0Mw)vB0UyjT>xX$t7L`nOGJ zJ`g$8NlAT%r$bBe29CEdkROqo0L6-UTtoeXIH-H?Yu0|)Pan=(o}L{;G zldNb8_q}1PRKd@Mmo`s@K&qAqrZi-;9%K7KO-cJ+BUhVtZp0*$xcnq)rJAUSUeu*x#bpW2ra>w8Z)m=N#)(e~lym^ftrDsI|N0XF2e38}LzW2I&NlW8~@G>5oR93g2ECcOBHeYRwiHwqFe zTRB2%_klLc@ASgjz zM2T9LO1l;}SPdCy-Zyh-A){&q$O_g|&6TgJ8L1#^p-^YYlCs;l5ya@{FH}=y<)&Aw zL({5cL6V}4i1HxK`W(Vc9NNcTaHgy0hGr2n(e4*&87;2x3^;JTGDc89F{eoI6Qa9w zsf~#g4SjmHYqX(>cv@(F_y+?uuGeMOD-5h{>0%TDGPK6X)uh@h^siL(_Q`Eu+kaobd5LW3R9UuL~vN>Wk!cKGJ z)-8vL8cz}}_Fp772HF!q5Tm5`Vkb)7Df-C-a-N3TD-j{yZWZFCDdp<6;~D$|o%Z+8 znXgGIp2evB(1ZYJbfxvLDC*%hlZoD$L368Fq^^#fh}Gfdl^Rl-P zppQ8qSYx3q$yyg4YqaOHh(3k!LQa(J%V!JD8>1tC*XS18iNM5R_KZD>vq%yYibnRY z0XpG1X0LX{MEint9@hfs8wksCe|nGyjK|I+@;PG6D}ob=X~P-9BELU^1)}__3A!!A zSxGpxxYlt%0pYYXjKNSCnDjBB0Pqh*88s7Tg$EiYvJ{yQ8jReyDk{mjDV|d6Dh3X* z7}w~&-Ofd(G7y>if9X-Jtm<;sJpPi*&*d*5;xE8LT~hsz$ott}0RH=2W%z1Lhm_+r zvihE4B~ydy?@}M0I*NtZw5&MENFy$Z&hl|$WaZbsxKpa1FqFd3UC{nF%FjZLTgv(F zUw1{LBFZJSO>rdQSf;oe7rf_a<_ckOaU&5KO@M9d-=RQaS$jCazg4FTEl#QMsiw6x zfX^~QnX3i+2aE8{s0Tcou4oo*>#L8PKuOAOPzZFXL?Pw(FUp814sHZ&hM@$G!Tk6nD;~ipH7LCDVX&#Ws8nyM%v&doV`C ze{*N)RZd?1vW%)e9|yGnpm4QuuqOflh=^&zeg4-qnJwt)k5FYSjh1de)(4HiUiyY6 zk~M{d_;2=zDMm)L$Qh8Tia|jv{VOhC!DIvng={zX1b7O#a};c)5^AG@R7zM8f9{2R zI^4?Qk}41biw%d|7FpMO2!~8gt|Ze61qFkuy7f6rnSf6)=h#N{a4m0TbxoPn>{}dj z8_q!%?YPZq+jxn+tT^NkHlkV4=R}iq+R2~FCCM!xh!wx#1G{2O?Du>@@;axEM|r#F zkJThnIW;c*Ukd4fp6C)_blJfMceh;_rRoz@(fJLOPP3AH*gh5nRO=4s>txhMkJ93_ z=xl`COGvhI*$}C*sYIE|no+PV{U-}8dLqt{*9W~jrfoB}Y1SFf9d%Yt9`S6|bKQ1Vkfd{;QvW2=-(k)|M!ZMUtY5P9y8bf0&Y`p->ajm@2Wq%DT=;M+xk6E zdi(`wNNad%WHkAirfF` z@&SpvMxlw@)&`Ea=Ss`X+RjD{Lt{;0M^>MxqFpLvZRo7eU87?l9Mtri3-=Ayo{TXe z%k>HYW0qf%s-wc3P0IN8fKWh~BY=|d8fB(pDu>3?f?_D(IJbwLW35J366T^8M-Jx6 zYR>ZJ;Ub%ebvA(YbnMW@`kqETYX#vKi*F-W*R=sWmg8=wQja-Hm*rsAS+BI9M+t+y zYFIYdC^eTV79|uF=p16bhmSNc$Yr(V@!amV#~8Dn@OWqJAreChCPLj$`^XYdK(B$gVL|!_SAN@d{jl9`t?F-z z3&T26xM3m!q`7l-zQd=3tCveA`42s)JH*>17aqQO{A;}8DANuUCq*zZ8>QU*bBzr?s&@#zYr3Df_X zlFhW1b7dtaOH4?8v)Zjr_brT(-WkU=Br=z7clMo_-5GU>}uDUl9xTd zBMAvZ>@te|H{gNG2uvor1$?{xh`R$qnJZq+#&mA=aP4gKVr+gu4IX2t6OQVjQvR+1 zty~;xF4TEwu)0$e-$rtzZdTmrU3F`-yZjFMgKfD3l^@V@pC@OTBkrd|b3#env2HX? zCK?V^Fxpal820`0fo<>Jpul+YjhQ)$%PmWJjSKW|hx|%sljb~brM7e|59f8nIQq9? z@_gi5Wb0A}e}_h%BTB;Gc}x1nm;3e?jBmSpAsa-sTru+Q@jK(D``R-LJT>tIYi*{d z-I2aiw#s9KKx~=t*p)F5Qc9jQ1fGv;LC7F=T%k^zj*Zi={=n8_ttQ?v zv|8PemYPgSss>1*kxst4Vqx4gAOqKT%O%ad}JRjpdqH;4SJQL(c(=I@!fc;B?Q-DHq`e@HR6e!a+Mlsy&UqYK-d_z<78kySrEJwiLzj&-vgvJf|q z|B^Sr(^F77wPThsq`=8i-)K2X-wsY^q(x8?)8ZuVC93}lI6Eem#l5l8X56UPrb8d% z^4d`R5po-pl$ll8_LV*{SP6*j$#@|UOaT__fDw6ALZNv|sM{kNFVNoLQ@C!b-ml$c zFpPHmqE+IQFB;-ysoZE$Qk0&_!n8U53Ab>Q(9LkI-ExJvMD~>0on$A?23ZtSeAqju zEb;IIUO`NrWoNH5^+t=C?M95$xncPx6`xD=&rl*XUyi>3u2YSn^2}AQe6LT&3?qP? zUy7YRaecn`HuVojrWZ+%TnEe=4h=zj=^BJN_fhiIzYx9)eS>-KR@?W!|SAMN1pne_TFgX*L#%jo-@Ev^PDSeiO*HaCubk zA(1;$XJLrt=$t#dtnw8|nJ!7!^Z8XXqWt_TLe?0ihO7Ox;#+jlZP{VUHy5kxg>Dza zxilE2|9|8E8xBi_oDTBRFKR@+|A3R{CH=enRV0dOfoJ>Uo5P~h7<@fzc$j_?OF7x% ze#Q%W-C56+I$TSss}X}6R>V{-1s;QJn)sXnHDIPdm@@}C_e4u|#o||jUD!s$LzGQ+ zdVogrk1rFt>27?=T{b?0`E|Z0lxc21YAHHOIt@-q!xz%ef)kym;VsXC&uvs(npRBW zX6D6Gp?; zwP#9>h&fJb-Yvl4%FAyHHUse8N&t#oi+PJh-CawLbF%R8BB}{t|=O2=^&vUdMJhA>D)HdM|XjzG**y*0|3kdOKrO-xLLe z!)v?^4e^(|oK&HzrD$YFX5#1^P7^iDOWDS$q$DEMaRX%S*@y^dykO!^q7$9U8x#*V zzsL+owMxDkD|rx`9x=HlZm@w&DxvCLE^MmWLJ~-u&uT-{} zOAherjMz#i658^gLeRrN0cVVwsg>eppElByrOc>q?p2FYMNtmT-}76IyATigF@cc1 zy{IB-UikdzY2?IkHI@-35oyCvg4*pcVrDrXKWb|}KVM?k<)eKO)W>JgDdrI_z9RF} zSNn>9%KLsB1q5dU;^@nFM0hg2324*G1L=UX>b4R0&GD0_IGZsb1t-_D)NS>61x*}Q zLVRyuKxy$V`aCcCS2Qpz?^9otcXk>RUXZt7Aj?r1Qc-$g^!7m#&Lq-rjA2K*4gYC2 zr4!A1js2lhQnR+~26^1Vj?Z>@lH%w5sQJoJ9OT)6uAdBD21X=Kb?r?+GW}Cs7XBEh zN)3Z3$C9~0)QM%Li{5)o>{OWC{a#98cIh^^v!xpLO|GTM3N4*Fu_zv`hUM9q_h52p z96vN(pIcOgrgGOq8&T$8-L*+P>-E@^)XrC^jVkm=JU7pJj#N?0BRzBF`Khu7Y@P_* zw5|6HOhsSLCP_s>9{cbqP+s#T=p>f6Wf%xh_&%D_%YmD~S&~dhOH)N)axg(d_R-9|)wy0u zQm+iU1SG2r71)tUD zzOHI|EjJg+NW5nvB8Br_j+$c5FhSk{dKklCciQB|LD6Rz5J=3ccQJjd7WOT4i!8e! z_Ya74pIz_6iZva?zmQen#97oZCs2a#721ta0Ep4sz`mi%PTe_ExCn%P>}0RR|&o~dO3 z>MO6&{I`UJErg019GQGhiD4+xwLb>_YZ2Og05>X+8T9 zOOnZ0YE+*ikUrwbqQP>~jrODfr&l3P*mE2Qo30iP8Zl$#m{PQar@@N5>HvCbHW?U2 zwIFlI4iZ!-Hv?c}w_Do|Zy)oGx-SN~sOt@+jLV8kc8NbxOq(9y@*6mRsr|t^?+@<% zxBJ7WQIU5sw}7jK1x+TKVd^-qbp%)(8&aYXbVZVI1$gD!J^(ZgJDE9MCLYD<~U)BwX0@C;x`hKWRfzP;;3gJ`L&4$4M56aI(FNXOx? zoqas0W7ufxh)CeJUW6Es`YMq!j%C%Dmq4l{1Ap;254Dx)sSzWRW3_yIViC$-C+$oD zi6s%~^Q6w5aaxY$)FNXT(K5R6SV+#ypSODM{bF3+_oRh5uOXa+sE+??n%B zse<|?sY~6-GsbOfHLs+Q7C>nl$HOE!XpW#~^h{xSz(Rm)NW8 zC>LKDV&c(xOYZ^D?qI{kFMCND?tzt!JSsk$-?blP} zyntx2osC{Zqnc1v{kK<)#=n3-UB74T#uw)C{6?)ko6%&8fi^W$b6!dLjzmZ?v)=@E z7%goy+UJh}jNB)O?zE_w2N_ZB6OLj+Dr? zQ6a~T6=P!ByoCK?WP$@WoZwTXD^f7U!t$B6=9^qE9NUo#`a$CUwyAr1sd9vAv zCC{a!eeF=h7{VVQ3z{ExqJeh;ZH?r;fMU9;5a7LFau4ohsMb4@-fhPyH*WM9Atoun^Dx z?k_;jJ-4UoiIZ-E86>}W0gK7%D3p&Y1{>ryllscMsLn7TESj z_$Mi8*~7VbogJw5R(%@{n8U?UVkf$HzCAj!7Fl(6{VgpK zOkKO=SEo{qScSD18Ij0YY;0)uwq0(S8ak^T6<50Q<}L8kdSzw7yHJ%`^GF}45y!uX z2YFJkd8hKbtw1FO)o7zVX-=T%8o*N0|Nj>I1NT zI?G!SYBzXLn$Td(mXDWB?3;8(Bmft$6Z9GnP_@8?U3I-|J4;?%Esc{2;`@50>}0J4 zR{}REJ!GEp1-^(y#cN_P1WN+)0ctp!Lli;0_5;?wvMg)Ti1mG>za$oSv zz2&aB`>modn*Kn>JZ&sbX^+~Z{M=7%q1?t;&70X-k4({uB8-p=4-`X~3Rll)``+}l z^|`e{IMjVcvpVYQE|J0o3yq)OnqsT}MLdYB`;U{ta#Xj*dj8QGGC=lhhLIGdfb5~7bsrISx;yI2=3hKJ4%C+6=15!vT%8E)~6j7X_y zW~`~!^sLU$CaPHoG{hmZ$gB1Ta5Vy1g`Vm!Cob&P(!D2CLErfT=7~=5d2VS90`g50 z;^OI{eRA1gbG(t zuon>)Ls$XS3^C}@8veWL{4f5P|5#A}BksHJNANyf;aSfY@HYC+{+6YF->0+5Y5pYn zFGPT(v;Pz=p?%&>Yo_CWL3aw#oHw1EAex=g%uBmK$6V{Ddx%Q>n;#-f9I+q0>5=H2 z=>NM_CR%6LZLBf{!?X2Ot$^G5dlY3j`9b{8u3W%LEK+MRTo@QDQ2-GQLD+L!grgJg znuhl~KFFkXE5QLC$uV+D&fC%XI$A4c)h#piq;VK)Z&puDc23au7eVP3P0^g|3+{ub zW=3e-$ig{(Sm zh3YC@bU_DKFyDMs{#PLl57E2Fu(W{9%939#tgKop4&;GsdUVF0#12bZ184!q2rz)X zT>n~vH}glBDCX1%$E}5qlddTu3jxknzB>b%1@JM1rk4zHmrDXWItpPh*;WZ5JpmdA zOp4a4yt3KM$vMBv^rnO~t5U1D*GjZ~{F2%}bzprouL99pV$E9c@27eLJNu(&Uw^d~ zIhFBs6iDb-l~{dZo8Hx4i4h92q?HoBPK#ByObdjkG#lQ<5d**i#1Q7cm3}Z?Yx>AQ zX0t!qSsyKM^AeOl(d@~YP3 z>(%w9{7^eSo|F~?zTl{H6v>-}8bGJEZo+*6J&JjxCuvDz)v>z@19v07xx4M5Z7iXE z(;VQ0{+N@vi9T#YHq-M6Es zzC0z?B*HrqKuDTSlgN5U$py#c_y!hUV!z!or`lQ72@h3J&{(-WtD6nmwwUNJisKN2 zjufAfVZ591?T?%W>2G~zZMYPH7Z@EB$YrzZCTZFu=rp_p;$N&!z{e15>K=(4uL z>@@A>Eo)83%w&Gx^Cq9dh2ADXWm8i&op;wqfy<4hXktFWS;6p`pYkR;O0?Ax`P@4o zE1OAAX2M3@3Mf^4IQlFJo3(fV81aYztpTSsd3$w!S7CRrd24Zu?p6guHbR)6yZnF` zag=er3`yZwB9b1Z2YQokC|auJvhFRvZMTy z?&Zp<${(%f*+?p6)rIe7h^wwa`TGk69vdCgikbdVq}p&D(Ia0pq1^Y1ge zEU@dA5}uZeDWm7+sj)E4=Pkdo&V2KN{~fI|y*l>YO0LL;`S(;)+`$D&U6TzLuZrw4 z6-rGZDfNAW+v4eZyhnJ&Q{3AS_6d$nV57{F$!4Pk zZuwMPT7fmx`CC%Gxv*9lmP`cBAo+LHT?2XoNN7bU0N}o+f9pYzw6;GtZ+Ns3^Kx+S zzR@HQyMl*rHRcPt^WtDn{&`uGavGLgZ-3uQ8l`z@rxOvF#s0M{GqlNcNnsDvFoM9d z5DVfbQE);8_~ihgxuF`ljD8%t8FTS8c?dVU!c|R{#fNAMEJrz;Uh*J~uZ+4X`zsjY z^uyDqw$Z1I5T;$T1?p^lyPHukF?kils}N}=aeKJrG#-!Fb2=7`{L!PMr(J(>vR|cn z=8UJ*k6&n%_)yZ23`{oh{?W$?$mYX*+Kn{!McurM-@CuOJEa zX)&rO*9iw$NCeMI6{EOdwSN|2Mn@M~$Bs!-8r9p4VC>IgRX%Va3?EBPvzOEUVs^#3uh-e9vf+zc{b| zEWAr}3WDwXnOmbmEIk-B;(tcNIIT~2`+Yd)Nn_N%$ihRYn3OW$5308O#R`In;p(MG z8k=~0c&019MIW1L5&I7~4RdTt0^YA5Z#2dQ^La$kGA*~XC5o#egK(^dD~6jn0(_@4 zlFbDU0I5J=A#Ma@q*v?EC=Y|b#zdWXs9?6qrTOIVitm`l z3S((H3fQ(9n_(7^k{JI~N>98Nnf|qiy(?3K9r>Z-V_{LF&_?Br?F)C#uWUPWDaPnn?f$t4k*k)Xnz5SFa0td16S@>)^sxfSN>Iw2Q^{9V4bQsKs!+r` z7_8E=pxD7EI2F1_{!fsuc0+m(!PaU;5l^ITc3pH_LR+;?S-(<@QTFeB5$kpvRhWFC z2JmlaGMZi-=^|^cqj8dc?wu0P`vFB9b<+Z>l9!5#58v?q{0d3H21&Q#Q#$6?vnIpB z=Eq_nAn?rF4to+XPg8m~dkdfOfX`_C*V?r_hNRZjQF|;b(sT=Fjc6D7P6;MPiSg-+ z^M(|)V;KQ(Xk9=H&kb*+%cRM_fKy+-x?taz4YQh68YZEn@~W{9)thimM3#LMN%#)me>xVJlS02 zLHZ8p54KNkLEC<0MN2f-H3N&m_SZy3b)G6^5xTr^L&b5oEw7FfJf54ZUq)@uM@yH% zU+M9y`vgK*C1_6x8)=wUC5;Pu@7yBLsYjr6Nfi_viYh)bUU4a}&1)taTJt@hNK`oK z+4h0LHeCI+>fzQyfN09LJTOEc6^G)aXA<||U6IA+du90hIXw{-RkZ8N)RU=M4}Loa zt`&A{D9vK$WL#|M?Lv+Ts7L~Abln)SQ@0eW&rO2i(li~7?=RUui8^Gow3ap!m;;qN zzs!;3_P)iFACD#;2n6*711AkeqhW)p@Nztqyt5F=fOhh#^BX2^PWHRM25oankb|_X z&6Z=gwx#0^`LLTc0fmRqLj6asun;vl(``1|q@&n*DbDfd!Zczd_f!~n$*Nh!63*SA zk6uRyxhyVHN8Z~@d2Pj4(MREvE<(Gfr--$6mvAyob6ql1r4iJikpQF|I5-eSE_ z*ZBe0S`ypFDM!y8AYh0$?@BkYZrw`I1+eNh}JP!baHP1y=*-LUCP8S$ZiCTrfj$7T? z>>yy|m~m1Ytd2ApvMe}E!U-xRNJ`wv46fUwK3$bRCExga2o<^WFHV!W>ojqP@lP2p z(7GA@z@I0mZ!oSS#dXn%oytrTBL@(D4=P~~5<_hv#J{!6fpG6n+HXue7`R@?QTKnh zu?l+5FnT8HS(_m*-YAQ2j;69%&bpc69jIcczzXyeh0?J{D*Fdg#6Zo%J?m@<+(V+nl79}?){ScB`{Lvu&xV=S*DkRDvc1AdszLTuIn1Q@ z;H$3w2qA|r;g-bYMGm+Cz0*DprXnnZ>U0S+zLl<48B(51?-J*6Xk{upU!$bbq)} zb}Y=0+u^pGVY?uw9~2~Lz~z{~lqA+0TrOFHNI#jrdtfM~!H`mHv2)N68^h*{3L1^F z45{_@1riE7&bA8H-6vaB$qS@*>f-qnYEql*auIX?Fr3-eUmRg1elbEuOS9 z_Q=%uf-MZT4uZS6P?CXiYLv@?g@sVUoxj4-VS^<^tyNP00`@gbEL3!m@6*s3-Wx57 z4vfbu20q6*;R{yeBmGJ*1I=4N!NobcnK?UPe4gzT3=zRP11~N#7mI?VbP?w#AS?v>Xas= z4x_NC<%_@aWQmDL2-Wra%l`(u$1Gwi?2_;qF`#m2!GFT^{`Sz%Hx`B~4#gMJ&$Ivw z3k#8L$gu8u&+=XHryQ@8yUh+glET&;U#0lhf|WM1y0*%nT<*L70u+BWm5G$(Ye_z* zWGydv+nSlL^)!+rx!Vxi4Eyk3o$LXR4_=>r_d1Qa=jmJIwR7caHywSDE%46&Y~6Jg zF-%f(WW1mu@?p?}UmP?m8;?mQxx=}pe>y;O80PX!uTz@vyRQ@8w{FBjp-$%D13gT(1DJfMXv$}VqL{QUT;OQ&MnOR`U)#+P}BdG8N~ z!Z?cz^~Rm$jXLlWOi}*QOi<^oI)iNBO#{bos4z))-)r05L*%t`r;a6%zFfhnHPy;w z6LPDYZ|V^sAO-;B>tZtyv%z%GqJYta#O%}8o4puVjjY)FK0eq}xK4x$P=amN=c*=F z;a_zfuVbV1dx-U>F2B9_liM~`n^$KitY^M zJK$^bl43QhjpL0~WCpU*)C9nSXtAmNjI?~D`EVE~8)w>9(N7M7?nQ2xp%@oKXxdig zjH!Qe=>es_0ZwR}*R_O?6^=)0si`=KA3UU3vlJ+(8;;_o9GaAoeh?h|aH5?l>|3I= zO|5j(+S;l4#^JR>w!@Xrp++-isSoeH(^=t)Oxx(5FD?*Zzo}x!BSVBx3PyZ|ninXW z5TWS&IR7v;Y5}X&$z+z>z$zYU1Qk^B$$KqSP=3KRMxh90p#XvzlL)E=EQtrLK6D-5Sqs+_8|m#wU-NwnP4Kc<98g z{tI$jUh#Ed&r}EX^b+FMKQhsjqS`OZ>fLR|y8qWm`G4Re-_$|+V**U{hnB5c3Ss%- z5MxhCE==jtctcfN(#4v8iq=_XdXQ|lg0^^ z;l4zgJv=xV%S-UcS7oRf6-4^aMk6O`q!HdtLvVI1*dFy!+6=qn z`?gIfED&W~yuTi4#jg``6XU&82?}&uZv!rURnu^%4HHA5Gz1U?K!3%;uYu66sTBBZ zU(PPsO+V{t-BPec5=$V&WHSHa9u3Dl4G4fICxS$72EmB5!oci8Q)pqh!cO*1a4R(w zl1Vl(X4`RcB9~{XQSf_tB1!k;KwVv(sdQA0qkaCoV#B%-8Tjf-tW$Y1rbIawhk>2X zNFY`;Eo*xPMw|4)4SzT`7{-%gOA$aGZE2V{-q}U#_4?dZT6_@u{9?N>Vk-gZHXasZ zTx+FEBS?edE^x*ABIC4rL*pJMHr|9M>x8I;0l;MC08o;Xl2VdR`KmWnyWYaJWa`As z$BOW<3vvbwj~cUqY{~X3U|Cc5S*U;6Ipk|(=T0sRGxZ)i3EC}mI(4KxbPM{NKK1LG zr!}<$OZMPK%35rQsi?PQB>@vd@2wi;0a&gh6d>aL6tMzmojL+S$y3c zC9qegHMiH4CcIDG*!iubW4dogYc6?lH0b^rX?k)B4LLEF5EE;U96;g}gIv2V3bx%D zM6sERFsosyp4`e{)j(ud$%e-}a3uN3Fb{P~Nv^~Lxtmhh!t=bQnvb-|sZmoI?1xwE zli}>ksDgIGX;cv`B4KtKfdEDDnM!*M2Rlc5YRgg8LFlG0<{mB%ggWQGd_pkvAcg`J z`*>!-QiA`1zSv1A?l&2a1A%n3hV9^PhTbrn4SOKPL)+-yZ;e$;HH3B@v@tC#=9A8b zJ`P$J3Pa1mO=$@3&Ez+!Gl z3QCwH{Q%r3bJ0j`JZ=W7cwxNj?d>Ap#c%bUG3!Q%U}{ z2~4<#3pLxL=rr=}v8+zdX<6lhPE{;?K>!D-2;tddNS(3GL$h0wD~Y9&jbh)bRP&Cl#qy)= znn$m=@ut(P*)#|_mQYpxCoeeFm562|6a33afg`+IkHXEdEw0&C=Eup9oX+p`b{*p6 z>5s(WWK`fjAV8YxTM19n;<)q_I!hR=-p!E0cmWM^aW51m&nyb00l+EJxq_DTJSs3P zDlGH!ie-RBH@vT1vfiwcnkpFVf(sW@8-g+7ylr^T26kWCSjbu*2?KzfHVgc5VM&!kJ;HX(Qnyzz1f_Yr#TmmRGQ*$h z0R|`#L5PV?vHHW}mvU4pecbRF#DKXkbpm1Jv=}I<5>O{sn8>5)N#d8u1NG{_2mw3h zD^OT641KyO<7a4!On;!8S3iH5Ne1QY+8V1x)*fkJCc8KTUbS(!|C~ztcm4-Na3-1x ze&<(=J0bwCW9eM<#Zk-$1YVCre$FM+nJZi*>cDY z=1Jv_nIhT-Picc{Kg74T0t4lm>iO~$lg&NU;B&D&ak4GzhlRKOVcyA`4_VK|qe-oa z!#eJeFG8t&(R2xtjC&x32 zlCmYFKE4CkObl|iyFrX}>0r;vYPq(yEN%hspAT}aFm5sVJ&w&uzu;rcGn$PFOEzAN zie+i_A6)O*5TX%CrxBLRih|vT*ngN_9wjqwWZ!(54Xw`{LKc@SzC-l+jX@t< z#VZKv=a);VpDDU1-3!OB2+aF7(SbKAwZ*)*RG~jP#}g_#8~L*|>;K{IDY?tv_JTV? z8;v(TylHVlrrPOQ#(1#&ekYdp(C`gxm!(mp%wC+pK(k4UQ|dPhZMHh)3)Sr+5{fOd zXmy2pTOq$M(?1r>NcQh5DCWb?G^PK6@jkVqWUK!!`{NCR)~9l5o9Ia8*q`&lvb}10m0zpceEhHC=-2)&jvnpdM*Ugk?$&<| z-bYOUY>*e`I=jYY3Q_*nk}#-dC8&NY9( zzWw*h?pv~6@H0oZr2p@3n$+lCLYE?*#i`$dwUEypDaK54!P%1`a}&%yezp7cvA1}n zmV1A=;uJQz@-%6pJpKaP_VlooRJL6lb4*34|44HP-5qupO6f&?!PV2*?njuGYT`X4 zRMLq3A9!qH?teoT!q}MV&77C@PqE3AqxDgik@fDAVLY~j(YKJZeA~$03q&7d{sO$p zyOSCp1v(ytF@w-qP9m-@cVS>C}2znX5gF^A#u6gv))pY4Qs*|4-|d zoIy}zr<{KQ?vUW7_KFidh^?t-H|8bg55;@J)L#JPbo7hfZ9OkQSp5IhdWz3m*V1p& z?--D~-T%{TmHPf4?7d}FT-&;?TZIRAcP%8i6eJLWQ+VN);7;Kl5+Jy{L(qakgFC_9 z-Ge(M1W5u3^VZyF&$ZURd#-cNZMU8K>;CK2T8+_b^j>51KHl&9p0~gOE$laAOvY2} zP4WZcf?%}{*c&-TxST6}(AVuTE16Y0TTz2^SHD2mPa4B-O=hqSP3-m!SdeoZ zy7+Wnha{RH!$cjtk27-z_eFtjvZa1*b@U#cI*6VXZZer7Mhp^hZ!P>!jm9+blowaMg+i@1+k;F)KE@xY zg6Ts+SbKBeQ+lTB`Z6sD*9L)wgJ;RY;)f3-zcC4>X=w8EyIyxr6K5G(scJI3DT>EP zr;m`c_k1((ZP}yDgLpbMP~iCwl?;|fY-qV=ue=~TG!=CQI8R0W2f$0ukjkzY&3Vd$ zy$DfYQ?0~)Z-##kW5h@E$9$C^-`4ZEDz9vkn35e>uAy42SQT2~PKQN@Mz;0pwJ@MK zuK=|JAU^$C&6ZR7)b_b%T6P2XZ(!F`Q?Eruin0m?N3j-2g=ps!Q!;rXRI`{);-L5$ z5*V}Jsm|~WW{;o7K@t%ICw?*3AAp+|ztzXOY-f!17Sb1nDTea@bi*))fo4QMTf?5f zZ{%h2`UU}4jI^Pucz1o;kydDEZ!*6P<9`7?7886`{PW=W;g;rS?;>s$KeQ;fWB)>W z*?Q2a2$#t=DH{KV2I5@2lkiV$+%j3F_~C$cr_|gbekqmhel2?aWP^P#M{+J6qg{U# zz1Ynt%=gs0*d*Pnl#|NhWIakuWs{uqGK?~FjI`9SL{Wq_zj~L_V51&WtLDJV`b0h0 z!DG_Dt`UPQdYJ&&Li>BrMa6zs^g-N5sm<~6G#pkRDSAkXjm?}L4hp&@0@fC#sq&6| z+oQ?nnd^ud!z;CO%c}*TTa{0{~E(&on=1swjB&~^^O*WHpVuo+Q zXK*c9X1J4#kK-GkpZ`u#f`tWGQNgp_FTS%M4P`7#vOn2^(WkvLgB^Pj`G2ZnQ(_^p-Eg zn`ag(_0+cN3@KP5N-~q(Tp8soBcq7yiaoH|xY+I;M)%5ZZkF8p>e&U__MI~Dvqy;v zh&r{DRyR7xjrO1zQXW%y!#RxEGKkszkdQi8X`(F)AZ8CP%iJfU;{NysyRIbbQ>oI` zZs)KCa2OlU_k34aOD;9xwk&5I8?NU^bHG{w;Z~1D7si4b-z+`NuVkWj?xE_ew-64; zD-m(>Y(3g*@UUbxdo(GTcwUpIHnUaF5K0i>d-StVK~%hN)vFUt9O3aqD_@t(C_F}V zJi~Q2-WYd6ltnFa8VAN&pXrb=Uf{#UwV5EOKNQ6Bc3t=Vjv%RGvvhWTs}Jmno7i_F zLTbVX>z8WNaeOuYswABolH3?d^hw2mL`xBQAL{M#W@??@3(u>YcJFWen7cnJ>3ufY zKljlp_=I}t0PktF)AXwrVXquV1<)PT@EcFDVQJiWtIoFEJZ>b0swDtJksVf**V7ZDSeBR^J#R4Uj91leTO#xETNe_R zj1{$bv5arK!VnoEu{*oxi{44`2hrg|@MDlRju)=>lN7*6DqyHb&m9r2$5ZU-=K=r4 za79+xz9`w>oo|1X%SU4^PBJC?bG1k^vkI-}+^?cSC*dQ+#lQnL?BnIo@-&&VD@1`VsJ937Ae-dfR7?-(*WS_lsos>vW&LiI)8%VqBRf zVx>3kRc|MY`0|1u& zES6NQVtACFS-fuDE1+rYtZR`ah0KMI25O(gt)9GUcRRh7r#9NK5nnd;KS^wS_siIO zNi?_L#$EOnUvF?j%#gA74mKv692_JX85Bwqs@RVG2OvD3WNBw;wPUw>dO669J7CSN z>iv%KV z*H>ZdlWWQ0f~Nk?npiIWU5eY$mLd95Iu~~KCGCC{v0r-PK0QBSa(ks!Q-s!I{UBYk zNx7d6Ai3`m>~HLDRb^VL*|RYY`SFMcme+_@!PH^P&yj}+a2rr~db-Q0eE7^&;zPf$ z>a>T!8BIBY7Jfu`rjgPS`-(&*MP#y*DZeBxcc(0(Bm@!yZ^t#AXMg+7a0AY3&K6eynE#3;|JzuER^iUj$(VF;@i9 zC<0r1lZG5RR=sX0wGQ$le+sp(>~f9CBDdy>M1fd$Y6eJ%B~As`^W^vxB2@TvvxL$s zBuGDykrYVSgYU27qx^$@x5ZdQW_z|;ayE*rhDKRL!%H~THPl^mP<36EH}|;~tMT`G z;Dor3CET&1^iQsA-ZQ7otkGIuEfz(fN;5GJh>90BNife1X%N$>}rYCS8M?C3<-Ily}qxCRucPNVF)uey_ z@vtY-mI}M(to27pzW-BgJE3QH&l@Yb*gKU+};ViB~B zIe^mY-WXfQTt9;JbRqoTWkLUC(fS`SZ@sbEgy{5kN_lnOA~iY*W)-feAUGqXTL&`= z9h%3^j(pBXk;Y13dQ3?r<^E>3K{EDu2vqH%^<{avJ4!dbxU%XIQ!wAoiXq`$(U)qo zx1&B2rpij}tMz?BKxsJdEclz8&WLYNLOhyi5ElMeZ0jx3q(S~Qq%KK)$fs-;G+vj6 zQE3uC@9(n~#@ZhGp`=Hf&0QMFGpI@ zO%;WnidQ0B7Kys?yqV5eun>0jA)Rd9pDNsnR?w1+AspZwLA)Cj$3@YO=rkj&-N>8d z%{3TWWT}(QkA8#RSpSa`csh2YPVA z0l&IR_#%UxL{Wju%ladp4s@NNIg6$|jULcOayw4YYIcQpXj=h>E^OPG*CQk{^9=x% znS66v?tc1QfR~ln|E`WS-dX{L^-Hh0wOIyNBUI*O8@lL1pu)75oG<=!j6H( z_QrFg5^8IaWbFkzB7QcSI2!`0;7Jcj z&eRo4BGyp#$cUOX=gsGGXac&M3u!~F(U)oFl68%}XqV_oROiO9vFrn((0BdV*6935 z7t9kG48ZBLZ}dSo7QgYUuQw3zNlrzgOUC&mdES{2MOA`%he|}~JP1EvS8G~&Jqdm) zOU!tK_|=_Z>{?5!(&>9VtG1){*5+c1xxUYu^dODVAc!+l%*roF3pcRF5e0u~z9YnQ zAU?}$bx15f*D*txu`L(2zWVc&l!R#57q6weur>w13bqtvr=4Wc9tDdBt+O?X%M zP3mW0avA#?W%O1WSVf~cOKg^JXMLP5G}ZkQcfy33o7F0wji1UANWvTl@C$i$Oc1oZ zdYHN93o1*Y&D8nQA=yOrv>2!(B^PUQxb79zVU ze@U52n>{lZEz7`Ni>N21EJCYC{nXU!P=Ihu=U#NQ*=cyzwnOJ_$B{OKb*1hUt~1NU zjS?`~TEsEh6Hvf*OfT}dx%3;}rw2Xle6wBm+QfyX$%VS!J_?f6qh1*6o+H%>zy?sA zEpWD{)d&z`>wMEtKVMgnf+!q#uzsz!PI6kP(ov&#hpx zfB=!lHm9AOFzRP8&otFOT@uYAZNeTfAt3`0J2O--udY?w9OF?bVegPgsp#51#UD^k zIs_sN;xv;*z7<+YidQcjT38wPV2*<%KVob#3!{Ng2a*p^Zk-D+}h5`f=;5@o|ukG!d>>kN?#v z>JMRw=K7w)&wcO*avQ0REfFKnJ@O?#uaPkJbNl=iihaA(dQsI5H%&Ncuic_bE4Jwn z;i&&MD$6;h(EyJBHigFYflQ`WNtj^?{}3 z`-R5XJH6s2=1-p--fG`B(N$UR^3kFH`??8J8l=UD-ZqRAqVE>@zXApQvr6MXw-BkN zK!SfucG&(C>>z>UIuLgyZqqg9eoFRGa~`q-c_(YfG-U6m$_<*8_U+eTmIb*FNGr~u zupHOYoUKo@sNOsuP8l1IO?VqUF5jN!%ov52!iXrztwIy~$efMH`9jM*a*^9?_v!R? z%Cip1wT7GDTCH{=stk4npZOraI{vN;6|5-hCFxi@s4VR+CN!lfm z>A|{dW)7x-mg>j-B;&v{J zq9A5yB*+Os`o;%e0^dzD#x`PknL6&M>0rY%dBp7EVkNyZa{(_mg1?BFHx_l;JB!uB|nY`LW0Io3H z2x#P<$ew;WtH%M&g4S>w!>ugW?TN2JxX})UhpBt@+Bbu$q1kw4A=13Boaq8_L7)mo zRnp*XXk@rM`0Df6{0k!YpE9@95Mp^TrKE)bORlIEQZfaR3Z%as65OlxeN5!cTkHOKq(9_5)bX91UTturIfCLb!`wnvN zNN+C^x~m=8;UFqXy|KK$B$@l%xOFAG3RV`yKA2MoYIBN$6rd?z=o7_%4q-v=x3WfmXzhcK~Lff-G~M-ss|C66>CSn8xuOIR3cOxVnQtl zy07pjIEBn(l;|)6pm^pck{LwDeMU7fO!T#S&q($P7$6LxCiAuPT-$UZ;ig;+MYmB3 z*1^~ILPPbJ@5Kum!RI1@7^2wCNAWTnc)#ke^(m4JS(oe_PVwyEvyBuLQzXImp^ird zVUW;bs3_zryAk)--_Zqh5uKB-UK~EpDP0YC{<5weoT=Tq;7TRUpSdk)6gC&MCF1}q zG1hz2oxh&_UYr5wO2w4_-jb(Ybw7*+rewmb4J2QIm2ROn`iFB{nmb;0*z3G35dLIT zv+f*qK$I*5qDh(;R=wpzh!e9Gs!VaLA>syauyi1)XxZyaaTX0O`uAye4ug{Z@d^CAiU3XeiO)?_7huCM|o;4U`z)DY%1xE}7B!Qo=k&W`Y99N=kvk?XAhX?Dv);Q~_t3C;V#%=iTM&W1GAi9NepQs}IUL znlIn#%^ZB$Yyh@URs}e|x}BQ{k80uhZP&qUxy`Qd>Pe{c&tvR+Ct7ZX7bP7A{g%0VXeb;#uL`1>8`QHPDhCw(Ug!7zq5})=+i}wo(1eX z1JlI7a`wf7U5xLyIwdYS3vFGxo!7zHP6u~xZWD*t#?Ly$oY&_mPmI7_stdj<^xCTC zUMS9aEuuSQht-GmazSq7Q6fBbm5m9q6(&Xi}7JASnljTD&Qa=0Pn z%jh=RpBpvy_Un(^vy<`zPAj~}Qita9Gm)9nt19Z07v5@IN!ofA2breV#fjaGMHPnv z1E@%^1XPiNQqX_Azy3!Y>3_qs6j@ESQ2w6_;U55qC1H;{K3Z`igT<#YP2w_%L0|C? ziLFylqjw== zkj>=eW%uQZFlDhAsS97Z;*S-u%^5UBcwiFs5;U_!E$-&vHD1o?|ae(gng0EHJTy}1Yn1v%?f(&d`>V4sOb%p@WsBX5a_&WsJ!6n(h% z>)D%jW_@jyTU~#W!_g@;i#u3SqLhP|Bext!?v~&sDm}vDh}Kc;1V* zL0ry-G4)+~Z(HX@=RCK+8buF_XT1oUYPr2;BY zC#51UUKm@YD0+fLhfURzoy{eYK=cloM(3auF6v(F6S*SF+J-pYG}C?-^36!K4sr)! z7Sgqx@@Ig6^rkc^>h?Q4 z1%%rE&sb2hyo1v~fZY0vsDu#XT+CdEB!ZBg4aBB1G!-oVP1}>}Ai+Xwg z`i)MSOf+JkENT!4@WT?0Qg_7LW{70nShv}=^KqN!1f^ngrj~-jS*Mk zlk#tBp^i?*$F2{5DI%Elp4mAk9*i2f-@Clk<5}f1KPt)Hm;O0HwwXsB8^mmO{@}5x z!A?u+u`K=-ztHGjn=}f^87cUGknJMK!?6A?<*`YrQooe^Vf8cETV9)wJFO$roPh4J zhoDZIpzzmpv(Yc1H*3*uDe>~wh~iQgsfcT-RmZQBNV|>~S$E^F!(DRpdU<6IUQQ=No@Q3gH(z4dF@V&r~lDKAi-f^{qj!E;XGO!PPT;J z_3=BQi}X*ppG7~&{`}z7^uy+7Cj2Ld|CUD`dF>#U|wXTZxJ!EDgHKSHF&48Q!hZj#FiACUj^lQIjRGYC<0g{X!3gz$U9gzH5eB0zR(kpXz^&u zKzczPZ~67oZoiSu#zghHxjoa0*7foH$(Q5=Jv4kd!38OCQipK?+o;V3RBx^t{Q>f8xsrdS%kmy9w$NAYY5zna53f98F zUsjksvMYom1d&*a!4VLh%aNT7(!F5JhWB9Pgtg(n8G5 z)yWyJ7nw^9L@V{i>)*Fqd=UA)k@jVfH@aV7{#zsDK0DA&`3@|0snJAvpsKV-c^Oe2 z1?36_VQPmqUda? zFQ8#~-@h__(hYZ=N8rb}NV?E_nFKy13?%2=SDeum{jRujiuwWj;?BrD+QH#`*pIt2 z-lP=LR54&*CJ}kR7B3#V(4p(txynztlL$&ELrwfeMpmONKcvnVT<@b#_A#mnMzzFS zvTLDd*dd@w$E$hC*14|Is#sw4E@i-9ue)7H=1Y01r-XsI=l4tl&#xz$;6rLiM+<=$?AZ3(bLcV`d$!_Nu{nQ2)sVR_T z(8>=8mv&g3ACEDFb!<}ls-!K@kS=kq4o&bBq>iMzg9vvMuhFnjXIz;9Qa#IOF=ry{ z&+49S`sqo>45Ym5kTUOh85%}6wB7=nIa&58;a1j)KbaC6&(h_Ho`9b~^f?Qv`_kEl z@)Gk4>B=6Aif0{k1)sG5Y{A3TQ?lY$xH|7;sqJ;TrVQv*<4x6<+>@dQJuTREG2!#U zu9Av9t33pf{<7t1^W!3pVBz0NtiPsodIcK}X#kqE_ve>W{zu}|@be@xe(E`ohKGdcx|byQ$TO zxrQa5zOZ{I9Yhb%Q}(XK=KszF<@7V@0QytQ@2RX zi$rbQAx7*?T>4*pa$ew8sg!u0pQ$h~!r{fiawHe~*3kIdAP-RSmj?|0dx8e`oQ{Kn zm|YF1o&*A|=lQ=sWocRysz)CgPN-{|2+n(tkW#LKQJsZU3&)RlB@XQiFB&jEr2M9G za13ZPV(p0dy!meT55SsklI|yhPwjsI2LAvwRx&piU(V)s%B0pD&M_=}cRQ;xdW~99 zS1-yVq!KQ`alUu?WEu2anGB~jcVTR0TlR?@CTxdr+JpeoSt0WwY9)+HMK;`CKY_Me zqs#Z(n=RL7h4yDH8{qsnp_L=@^TON`tFgdvR2MZNQfaqc6MTQHZ8waa?-6uXyBV5N zVQUojWkTYIx1Xsh=Bf=zt7q}XKwRy*!ei*bk^LTFXiPloH*%jk%u=JZ@m>u=33NO3 zYeZ6dy+F}%T+b|Z944rRf3?Tmpv%z2lQsu7a}%lS;%qF&b|N)3-%x!tH;3GIg}!le zl&#qrgVT};&oe%WH)lWz!is|+aqNt}rB)OD9NJ23nOnOU`^3)hDyZeyfS-p`5D@KR`33)s82D z<)tbj#j+x=BXZ`C{i>SXXFN~_F$+em=QQQfqqf^)A}z@alNo!T;9Yv1bQn4zJ;)!c;}cI_xf zcATpV?7ytsa`!}X3u8nOc4NcEwDN-W;3qqO0CZ{-mUN4FFX5efe!-&k=@lds#Vk5O zuwRqebf?dvlLpXU3Z-C052K{wYEsuXdB_TLN1R=2)?Bd6bg)0Y;UHgPF(6B8G-$te zRJ`KJa9sqrM)eBID`Hb3f`CfSa1iMLC?d(Dy{V!_zWa2p%}a1QDLU}EeambDJj1Xf z3W+=u+Jjq0sc$PWzci3mXFFzzPixKGb&R43y-fYEi~Zw`?L40K2daaWD=jz1RYCaX z>UYqyWu;Ii5*>GU(l8Vx4Mf++CCf>%BG=vV_9laX)>VuLFQu8mc*l||s&NT-NDE!v zBJ(V=VZ5|Q(lIRbj9pTxP_Y_v8>0XYaI4+Wzv6ytd~RLS;lI7KAZ4H{yfgfG2}&%x9CK>Q^@Kslcc3&dS~v( z(~%w#x*`;NPGS817|n?$x>vG}r`*5Inp=}T71ylFDaDq~41M*FjTsn`Ni5MF)kW9g zgvgKrh6n*n(h>k|&mU6t54g4nH6DEYy&6-vG&?53zle5l z?rCH3`fD!Lrbfh+ttCBkL%7DZUI6Up>5>vx{zP@X$U5(G-h0nhK0VVXdpT=M6 zy>V%NlTI9aye+!OG3`qMB6PC;%YwEZVY zQe08lM65~JyxX|xcj2&QNv@yQCt_pmzIV#ot*-6Sw5rx*IxA%O%*^cIpeLbnfg-^W zy}^H~VgI~`{*hw+=MANkTdSA3Z&`qoEZ|*=VIqj9RS1Kcy}YsAmAG;-w608bb&}SaiqCkA~G|UQ`+TL@XlD1 z50ipv%p!GPO&C&EgF;xKIo%DO{!BdsO%qH>tr^O~PBHNB2t28@#l4`CTZf;>1!ui-i%fr4*j$)ZHb!9+B0$ty!o~3>(#<6}s9225@b7p(2~OD*C7@>Ip&D zHjCE7)_t1@zUMOD%=g^w(bO=M40{rgFKOX10nx)Q%Sp8)mo>Dc$vI6cdKMd+CNnfQ zl9kW``?2~{Z;WR%Wnfv0wXXF+5sZ6th22E5Cv}dK(1dUlx;D5um)G2wA+XKb>9}(H z;_r}AYOme|ahUby1`QeI;M6F`PEIoMQHDf`d0xpUsj0#^Rm};3!y0OiCy>dbEc1UG z%tMusaEsA-#$6nx`XRzoQ7SuVt7h!}$n!X?SCwu3gKrQStJkf^yV|0n41(pbPZZZO z2&mf7V3GQdz~9S{e7{Q#$&9}~Jk6ix!St1)R!*O+X zzhEwAclaP5yp_aE7QmS}I3{NJ6F@;1s3(#xKU##HG*-q;(}Jhmn%)|X*y$)+`w_3 z2r|KSgpMWgfFBV2zQ^C>P2;lid;3Op-#{eG$gc7MnI5kjJ`1TbOKT$>J4|ioo0Z0XZtqItzjXLXy!BbPzf>pj1r4uE* z*kvl*jcuE?7{uFX>^Unhs-Qtq9SWz|1!B#SLe(I-CxY@Z4+vbJY_& zcrC={3}camG>^5&1{GlDu0=g3oNH&s9rMY3C}sgh#B-rn4~wVx@wUs>n%X4tXW#0g zp%P-{XDY$Qc^E9!U-CNYBZlZNte{{Y0G>Ys!pONa7vC+RK*GA9Q^441_49pv)xhSa zq_d(@dxEJx;N^RVw&;Q;@*pR(5G_<^;#*WKzm>hQ*Mr}#1t^I1bqf}6a0^+PUn!nQ zHZLk%Dru8eScASH`=ABZQ}ygIq7dEuINR+>v}#FR;)rQcxWBbpR8*y|>ad?&58LIY zW6~w!KXSvefIDU4Y5@sJ5$bvmA4`(9^ezzaj5%60H(S4#$Fa_zQ7aW2&GH@OQ!!hL zjZsT+eHRTxiJ;_ix+>7Den?!u*M!<2+os{ zo2ofDtdQ{2>)qMCFEKgz+l{aoMT2yUZ$nMfFk?k^w#+1~ z;vBbZuFN7<_sj&XqmU4!dtQMhH?*^u*4AO7x>(Hj%xKWd{L`~>NdsR!fqZ*|9!)V2 zRY4+94jb5jqG~1Z9^W`S_r8I0*B`TF?P)Io8AVvBwIjAa_UXA}MKrY_jqF8BU8H0* z5>Om#yrUHZttixy=4bzsS-_MJ2bO)w^U^l%Oz(WjQxm*$M<{!mOQOSa-l0XAh}QA) zu4p^bhfM3a^C8xgVU`pufMr$_=9u}=BRpR~CB-%_p$2Y7Qv?a8Yh_WW?%&A;(kGq0_=sX`9MY`1hLY^t^S5gmwx zyx|@g2>_i%p>(-F;X}bd%-QJg5(zcGue_(1oxFInVjyiD+JTI&)yC=EbihH`%E#&mM)rd5K7mA7g?_{Mq&@utFVqNk6&sdih`slK!mtgdJKAz%JJ!1N6D) zO7EJTKyi-7UJN12FPf{DJspYU2h)TF@8*3UU?M3B2?MJXGK&pXGrC%|`=^Av;{3KK z;x&i%hF*_*wCV#bw?ZmqrQoKHwC!OzB0QQnay>Z*35WTH64p#zl$thG6mIUu($P?9 zT)J5xpEo=)Wes%ydxtKhlk7Nw?^Tg_b~q4T^|dhCRT{leuEWrO2OQ0)MPkX!NLeeg z;-*|P8|gq|BR0*GUBN7N@&-v6Imy6qmEsI!Ie`mwr!)-H({WoZ$I-K`DxY-rJ44p? zlxFr%PV;T8r0m(hO7Vks-hQ<`=_z=`&YNhzd5E?3vP+M(?~X|36*ZRgWT#%w+eOg> z;=I?(6mPYLW!`-Yw_UN!=Ahp<2(iY04IWEz55f?LrlOu$9Br+k^?km(r+720&U3T< zl+N6o0)GiIYxT8fb8ajWX~~cjUpMzTR0kZDghGnN6yND$_7e)eoTqGYU3%4?)!~zY zI@$?tE~d?Dd|!%N9JZckGc2SfK4po;%*v|@229!;{gnRE;>cZ2yi;LU0Y`vz`ASTU z-73YBH32=?A=qN1iJD^gq;iNHFzr4-MofgyXUURO{c$%&w$*><+rjb_YgIl?l{mr? zf4D)j+39=d3xw7D+FOUt|#HhyoWYk?PB9^1yK4hb)orb3qXQgGmTQpSBDK^Y_;0pX+;15_xxa{gXRF&~Nc#`U z>~{4Rs>V0W?Zp~WJ&b<;Wc^N+Y~T(>&duMzZ6fL@8BEm1WbdpqO%Y9d65*dAsOrwg> zx>6Xgnp8K>HxHPj?zQlDXY_QKnX2Ln>isN3zmb2Xy11bHpFQfy&(5r&5}3dzi`cbvQ&HHnWD&6} zL4aSvm{V!sC1=XOlA##!4LZ-)LZGU`x)3nnOQOK>DGGgV;OYCtQY!6qD#Gk^J7{V} z^1qA@r}RHRAlMX6m5sD_v0s(xIX0gdJCFD_k`jLYES@^@ee#?V_17Z$Kjh+NNu>P@ zP50LFhTf+quRo~&)i7wRhUtu5Tm%j}eogy%^H<|G24X^G+Ev?H{g(KXRNh~WItS+x zf4nzm&z%Q3?L<(^oCmVb;szPu@&3#vfvu_dOn(4aKG&#qG>S@1tiGCU($Ng5clTrS zE^4@T=8I~cZdh8YsPHU0;CPeX#{H>?IqPMZP} z(dFj7O3(--9~=N6AgXB~`M$pP5WT#^eSPv*<8)vlAFnlS?wP#f>EqmO)?l+{sP7IH zMvZ)7LR>)|kU7sA*W#K9B>5%l5s1t|1Lu6I>s zN5~W#k9DqCoA4EB{1nwhWl>AM*GAxqVAxa*H45)0UJ)+pIF#Eg>Saux-#M1lq_fti$|by zDv6)%XwgEw<(i9gSm^%S@2Oj4L~{GN!oZ|`0QVz|@BJb_%iGxXT^ujDUx(ICm;KeK zGJUz7IF*;_h^&)*`}WBILW zP1KDqaL@BW>f%YnQ!nYhEYT+|@zU^9bV6J&!V}f4(Co+mHp>Q$<*k4FpUA-YyNjHZ zS#QmgZf!S~mV`d73}HM~7A+$`u5cw{!Y#m<%j`i7iQIPue=T_NHzVmN>c8GvZ5tNf zwoO0Os@3iYe}7jdcc^r*Aseg?VAdv;mfk{&2Y-94y~=y;mZtAywSD?W^M5s#o^rZc zjDU1s(e6tlg7#Wfwikcmq<`}@be92&OU0{%^V60}mPo#h1f+G^qKgSx z*PduXsJ@Q<(Fz*F*JrP1$=hE2mu0918L;*GKO3+u<<$JAAS74-FL^o|-Z0A*0yE;# z)e?xt0Py3>7W`O#DY5&FzZu8yP(TSGuofM&(xgXxfmg(gz(h^nNBv@pdQ5aAp|^0R zQ|v{7Fq9EoIB^!;Wk)sGC!HU!ndjD4Vsz)YxpYwRk&`Pz0-WL{A`&8sOFd#6bTY@p zt%AQ3QD8FRod;1$V{|Va^fEb4ustKSNb6&J0U9DOVrR^F@kR)V1wxaPb7z61mFjVm zmn(4bF}=21rEnt#K|YE@I*_he?1I){V6-@J&5V$~I~a)lW3Ggb>I@B^K`o%t{&i}H_|avNQxe6Gk6h9ea5Auc|M zK2K@1T6R@p<#ni}yyuly{$Yhe>}ct-pr8owo7uW;ku zzj9c#vShv0_j9rjN+#t#?>7CVKOp|OtJEDgL_|!NGxk7l(a?HZ-L<`@q-9z5vSamf)MvY!qUXzyA>A5n8Rrs?+2mpn zb$xQUcJgac=c5}@ypB`Zy|X|c$cC_XctLpc%Q+nHDL+Xqf*<-&_sNbPx3jzZsn&|2 zv?_<4xR13-CQ>#J+ISY(-#jIpWXT!O&U@b4#?Nfts(-JUjFZr;L-|h9-Q4E%--N_%&vUt6^v*^rn7sz776x&C8pAI> zq5d`e$o{T>^xXhnd>FM?8kLM%n+WGC(ZCJPL8;rk^-iaYN{!QZIFHP)BPw-r3*(dx zdD49hwNzUjb>i(J+daoew-er(m?Y za4r*T#75iG?KO#&yC)VvFU6ve6;0*)igPSRbD0DDwBf{=#fgMB`YUhA&fop?`RMH& z+%cAGQ8MpBTD_Hakni51KQEtLw|m#T`b(ve>jFnv%-X7|m7AyjwNNuGkH;GE)juPU ze!5%O-K{b-t{itm8RW~k5PyUNB-IQPy&|EK$>_{S6G#-5^%`i-J`U`l@v%GSAb_>G zU7g1`s>z=eh^l3Wa0b)1W^or&jd48*#kXXq9Jz;x42h{XI+9(XrPcbM4o(VCM@3s% zmU85RUkZTCigXshsc5Lk^v7=Z?5;|o^kh-ot+EXb#+=lGEwY8VQ(+~XGwJfoUFqRs z;QZ`s?F-WD@v3PCk7rf)BNusgGp173MG|R1NjUj~y$W3}H0c|^gtuJ@k;xEhfhb1Z5MY2WhdwrQcw5U-=B4VRXJPH}2NT zuD@82F;u9>X17Iv#3dY}RB8J%{iD5wG=o-27hZ+A=;Fi4u0lcR}3=UJZNDR z-lc9x7;Rey0M{tajH+Ee-k_>fXT`mUp2399I-Seq_fE>4_&es-0GTWFPba*S$e^DS zHN#b45|+TN-36EVhvCTH#m`z0xJ_qE0qSKVm(MYbW^z)#<+xSBGXoL zAwe;eX(~rp7_b4=;vUr=b5oY6Xms4v;^f55Z^3F?<**LNUp5u%-p%=j)Nja}YVCy# zl4hm6pUs!I4{z0}yiIf2n&Wn<#>16B zamFO{u-2-Wlu1x)o8Yb)Zer+u!V`>TuVMyN8hV4qml)bM znj@b~S(`7IMp7)fv`GQd`XiR&6~OSeGb`QBxKfHLF>Sl_lPu9I=SxghSQ4%lXS7bw z0|Z5z5)Hu5$V{I-TkXC9V{+Xt|Jd5@GM4=+hXMu;VOSYh3i3n1OgLh?#cq2 zgJn?-;%~f{q}oTh)>T+0F-*~^gky85o-vA377%(;vQOEHu}s{q{}!*Y@T;UQW3uHa zbGhZ+e)U<=js>l8?9fIPUl!?3hk;pcCV^)qx{T*w>%?I#y!cQEveFU+4V1Zxb3@rJ zqEw}o2tH!72?R-_qF@l-#HrtZ;BE8ATljf9y>N2ZDVXAkk917k6f_ZQR!ylysEW&UIlk-!|N0C*QcKFur4+=(QYQ8J%c8yu*m6NfhBg8-LB~B-V%kcU`E8!k4m3REZf9n@b1!C1spFv+P$Io z=dk_N&f@i2zaLqM|B?MGbhKjPT(LF9`Z9Ovxv!mo?U(gQVogUoM_gu5I5vgvoxs8! zTU#WEPJ=6^;&U3%o#K$1U~DjROC%J@9$cwIxa#uLzk;fYH<@ga$S-lA3Dc}LSvD0= z;+h)!Cbh6KPw7Z+Z*odu7=_PL*L-u++1yuV?kVm+ zd-|gbM$iSH?wgC&y+=FV#rDTwTr>=QBE|BDlN0iNpG7 zds=52Bm;S{r7)MsIyrYxKmnlKQ&V7@Ip`kMc7P15rR;vaoNNtdYgs<1U!rwnY<7DX zdQAQhaP8oazZ*9N-%z4b3!#VUb46>P{Yet(RA^t-5titpw+6e~hI*!%wPwZ`K+8!K z#bsIJMR%7;-3Y1O%u{^}G5aBaX8?6VF<;e+=Y<&G-tu+rHgk*egM)gVd>Xyc=6J~BHs5dnx)Lki}B;gmiq*q8j>(mRwK<$8eP_QK5H(XcybUtPvjV6gAmn) z3dOiXUzyy|2{`vPXSl3nj8nYU39~=BiDtkee1UH&zna%}1;~fjPHEN7*z(ueDfu%mn_3H}P)u7Km~D1QcERKuBOJn@-%XJQ8l@wdBC!_Ua77<=Giuzk zs1UgvsCuHieS^+R)TM@|>s6*R`2fRciCs|S#@6d|z2NppQtIQ7Z#dTkWM7SCzD!N>GVx|3BDYIVcZn|?8v6Aj{8IzkNLx6dBd z9kFC)PD+-?0I6-gHt89lTuLo)8pBd>o!`0;@~N@2F04E$FQe(XbGiQrB1Fn`(`hZ3 zVXbI<$+eA@_e%BgEY^KheRRhy$7FRiIK}P|LKt&#=6_@YFtQO)U!X_;ZuMPM;JH?w zk8OtDpTA*Rqz)gOeo@lepY-NAbuFy3#7K+oIu|L2rZ%x%+!5=>AciUChFlPE2X^2C zsiUoN@re-t)Br*~*95!vDDAmd^a@*|g%}Dv&Z@S9b~rSVp)rz~wO?MnO%1jCt^tn% zfPuhg*t?=)oZPX#!!2CtCYX`1ef%s_PC+{5Gzfy}!vlxMGY4N??61n!`tGZkRW+;8 zy)Uq5g$bZCKJg+Rx{$6S74l9|=o-e8bv1KiDw$GEjBIW(OPl?x>`$mM{Ot7jAApIB z4EwwKw;wrU{O@fB96?<5Vm3`UqTQ&%N@DO$5_9JvKcYOv};lhG3RY)3R_N{v%bs+sv{SOT))5t5Ep<2 z2k>swGEMO!Gs~28DOGe`R9p+om9#b8>JS{{Lktbv6U&TL;AU48udQW*GS19F0003* z4b&r>fp0_&{rP>S+^WcxB2;Dx&TUV~v7^osK#>rdA=ILIXIW^5mmmqCN*%5@m9bOQ z{NMGw|NZ9lf8uU93(K6l_?ht2K%c(vrOmdD35mdza&U~|Jpo|Gzset#q{<|9uHsyQ&xePZFZ_lH_V~b1=#11G?er(Nm~Kk`0qsmMIfj$w7xH z5F=>U?;fjlAprGcyZ+P3ak)STD5s`Ue^dZ=B73NIFD_G_`yAK%YNn!bP@?C9 zUnHi-uy(TD(Sa?7a%lm2frGvJIInfK>`|uDQujD;iCd5=|K2xEM4k68ZvI5B`I_~} z+6A*3wne;ED5ZzsoK=gK!ts*G z{5|?;K2ZNit`PKW5uoIqU6Y4CMl-*AcN5+@ru50O0(&p~A3zD4eTLs?Vs@p9f~yWM zZ*>avh`l@H+IS{?xy>2$%@EnXM1-dxKia%q;tGTeWJkP+sBeaTD$co#&R=IM7dx=n@^Yscd1lA)9C+c?yh%EpNGmLNuKorTosg!AQt{OujX+tYUfS8nF zt?^7S!FQHr_^a3K8zRu>@RQ&%+v0o8xHC5wL_Zg*f+|PkxXIa}pyu6g?YHh4U9yt0 z;~jqR37nxu&rmE4%O|h~RVLQwRsLoyWX0!}94{(STyhEil7!mwcu$ z%0lHg4{F*S1gEiL5Z_bWVzt=`wfV9;wa!9RO>^mFkq{GIa&+)R2JC=Du|V}F0J}LC z*<1aro+}E+PxA$DaPe0WNhR8lGN0u6LhKg9-lQT)Wg6wLXzDC!+H*8hQQ@bRUO`Gx zXQHqXQ0kaPVu07Qn#_XXaCDYJuSTZEKvx0W6!~P|Sw+BYwXT^YGLAVQP_Tt<8GZ7^ zSYhzgP)U|Rmo?i8Ar*hH_lCs%+kIbwCD#hMDrrNu|3*DFg;+*CW82J$Yb+3D!07%s)KBE(_NE!%+iyU~Fo z8<~NX0J&kFBu6Ts68A<-ZaaP=%VyZ*I~6y006eETD6^-TxOa(@Hu>%pI;SGwKv<`P zYqC&2ss9jHb1cj(yM0?!YDFQy^SKMkL!CuTAc4PT%E42%w}XOJNOHIOWPq|`<+`aB z(|&>M>C$2StZMf;KZ^nJ?Z?Yh=v3nGR2%_3>jx?_IxGQ0n*F}@znr+ z!3_uq2mngkla_kd$Y}K%C9knII<_0mwAZZYo1YGSkWrt*D=d1Nc1?)=oN=AY?IVK9cHT1tI5ldlxbs`s;PryJ&A9tiXZfF- z2TjW}(%TdZzc|u^W22Ie7~nab{fXXa4E^z(f;fLe1UtHam$-DDz~{G!^ka`&jt)}$ zB0n4_OXsaWmLbj&PHQEye_iC@`7JjO3J*J8w=16HX8+e1c*kUye$ z1v+{HfdCwwQ$(Z6GI0|san?ZLZq}H#2e!4F{TN!N%@8f=!c#Q#sAObvFEi!Bavuyv zoGl9i3=6as0~u1y0_+c+TlS2mAoau#i@LOABNv<{ z)n>xfl3Z!q-RVVL-(4l7OK}hBRg!xgCg|yoAO<d3pk`ZG4hZq+l)@z`!$}XHiRCWMLg2p@>`W(5qgNILZbryCOs@ks=T%qi`WX`Z#Na+dN<_ z;Y7a;wp_MEWVZ#5>*aYnDD6k$tw3KBOkpNw363)%KU($FQ?lL9Y2rGLfw-r};Ix~# z>ol$^uezqr^0ZUO%Jc#H9#2_2Te3>@8q%RqkTMu8L2_0CiIZ0&L6xP$ zKO(K2w^=iKh236_t^{Po_Vmmj?t_@<0--9bvSTS|S1uKhIQzSOHp%$yBnRFo(b)ZQa4F~ z{onAP;9~EV_P1oAWg)|B7aq+PJYdH@zB_LCGzB9QM|8i$F#aI~y)y*?RqY2oHm@gk ztSa5T^?V1bk=!yd4{p24l0mXBacoX>e92^#8uRb3$^_Jepwyr&WzBwc5+?J~$Y&Lw zLur+$QpjoqB2n&}BB)0REusP=m1%z)Yh)n@dcLqJ5eBM6*>RcPpFq)9+2tMA*8BDY z9oZ*FgU^8=?bR=LVl`ny;8V;ZE7iMe)#ZyfT?kk5yKG8JIS|M(SLjfzI$pD|=fH7- z%evEAF8*3}MW9-XtlK5seMxR?%R$=mQ49)9hMvF{92BfH!IX*F0zs`HPfHl%AgFTS zYaS-Oe?_UMJvjB{(zkOQ%f8=rL<^}Pq|%{HEyFWXzZAkS+fJegLUZDEpX3{b1)toC zu`l#m^PuUDq-)cls&QRu#R?Zv7iHHSb;a=ETYfBY^Td6JJ0rkja`}6d&g(MS_8aEQ zo1yqjd;Bwe>DpV9jHT|F_4po%zVt-YVt&3FBW=+#Wq_T2W8lFh3plxKaixsgk%-E_jp3FNz-&YD6i?AvK`K{ zzl(lb*s`_k&n@OzsWsLyV6v?RnEa*9fBMnrf$yCK>4!#%_KQ z6*}aVQ4<-_BB{v%W%q`xt`o6l{{R|<0j96eLWEYnMGANd&#NC^;y)Ui|0nhvb+Lr! zqt|ZhH)Pr)U%QUCOKI&bTJNwsh`qWw z?#Rm*_b;yu`PH*kR9o#zIh!8J=07CDH?;RW0dM*u9jNc1?=K5~@*y{wm`-ozz07V$|fT7&jy_LE*BLq&bRwTI^$ zK-FA7bPH?5`@UCTy2bv1gYQEi{CzR6c+bedcwNqH&B#~wLEl~6yYWGF^`dXByiud( zAYQwBo}J^+CGIthkMG7tmz&Dbwd!T^+NnE~Y-VH^@haBkQ@#H0bz=zj>jeB>aD=a1 zm)4NksWR>EP*2h94rMnU2YV>GiM*Br@0ov(~mR!rw>$sB2KV$Nzz>W{)Q43|Sp9AE9NZIziW$7(mq@(_g%SgfZFdvmT2NJt=y zzDU=(Ug<>jsaY_<*kLIk${mRDx8CEG*85Fj+r^8ws`(1FLLvo;7kM!o?<0Oml?}Bi z;m1rG?l0KYug?DX_LHL@d0>pPpgN_k^zb^jEK9e_5cezB!}_72;oI<^v;_Upi4(cU zOavI}RUifc0(Q^}&ldMJt^KJ5C1K}NKp*XEM(L!_rox}HYf=F#{&P}>a%Dm_RI>(p zrtfyW!FA&|B=&(>W}CUPn>>b!`dvn1o_3P(^UdfVUHH+=Zp@@oWgbghL7R~l1cP)y zF6sIp>uwD>!HvE5GFP=Y^OT5wBXHwYF~ zmjJxD0qlSmqTMT&6fc9>X4C()NeieeGH7zG-K5z$3JJkfbt8p> zC-db2?l}F3UmX^v1ft?7Kh>O@fpmQDjj5+^g899t;5-Hg8)}%EfpCD~n+C3T0o{%Nv z3uZ)BLr;hX3373xAfn9o$2s~W?Rsn8*=W?oIIB9Iz5Hys=qz((=-IJzYyqp@Pckv( zSmlU($Xs?Obt8yk5?MmT837`{HEOSYza<}ERzm{;-(6WP=1^qc2KgKOJzKqiVP? z(c~dO*wknwM{trQRbd@Nil6y9oI@}_L=~#JFunQc&=+749>y)$xn)p~ETfwI-9rnRu0a|nMDq2YjPe1b=ML487vROW7V2;7`qU^zmQh}khL=0} z%91#{67@6;<|}64hqJ^$3OTwMH&bsXWl2^W6pZOA1qDB3LW_{r595o&+qI<|S@kd0 zqvrdKEyufbb`;9GJe>$Oy&aV?po%^G;GsM8O`T zhHiJR4;u|xPs5?Qx@15741pRr38(<7v^Rzl z%vRahOl00992=wEm` zK!Fc^J&@c*YMe6V$7*bvjCloO(2IT;xc^nP!mfxw&m~9cu>O})aCKgslD&_}<87p> z;Q6nOoAxck@LoPFst3AMWq)G%+O>7z6nsZPXM$drNE~$_F4m8P)QvM-nm3~}bML^F zUo%ot3{?po+%_M9R(fK>p@ihos?i`Vuc#D8NgQw_{V)B6)Kc}*EIoRXwDFVE5}lc9 zqr`~`*yeGwphhO@KL8v}1UHGDpOs(zuuw}s#og^6esWGWX8_-hQFeOGlC+t7Vni^N z;BvKnr~D9KNHUh7pH{|TJgvTCy1rw@Otj=X4U1zyMh6LOKw> zSLj^aHW^-*zWw-+U~5^|x((ha8Q+5B-~wD;jb47iq2g<9g21!*nJtV)!gHfems$6o z354tKHtgRi(<+yah}ZeQQlNgTUnI9bNHuM#aq4>>(*AZC!Ne!Ds8r@Z3K;P7=d+62 z1hVI(U3gHdHVH^)6n)P^)_cTkPw(VsO?*eLlKdD;`h!xoFP&}}p{db*u4H#E%0_XV z>A_4>aagtR4i;3QoVZIZ5~~qmNDf1Zj&++hw~{fjX8Y=O%|C0xu*{PSxFiCHRz@^Y zOWvmB&IY&v4T_E1ZvBtHmiGN~wZsYIbL zaOn0cpA4}K$w80V$Ea)Zk-71m;5J7e{aO(XIfj<}2_owu_C>ur%gv^AOPE3WC83P`BaHV#O{kH zZ7a!I8Z-c=FqU4J)gNSvSYOYfHtzWt-q$8`;v~H}A8TpZY2U7|HbtE5y7875Y4Im; zR%Nj~q8ung=4*3*_v;VxpoF+H7@@mHv1Iq>RwQ8g6 z&2ba*OZDSg*R!T<<&GZ4C~Eld1>}h8f#f0Yt`tBtyh;z4y zEHHM;K`ZBKXL(5162QZV`HhW+N{;^ga-Neh`I3K+IUGPE{TBy;7dlk7*99p$-zP?w0*m70~#A#hQndsszh{byX?x9NdP{+*#Tpen|oH^+B4`5NQASssLPQvUlGJ+;UXSfw1-HT3Ph;h z8z8fP(v&%rrZ;7vp;tkr>!0WXG9k#|@L%*JK$$YAO>tf~T;QDIbXG%M2U289s-25B zMXZ2F@+fF+j&(OHmhSyC1K=H19t-Fs(5BX(?i5T*#Tl|ik%nbTu!eB!D^Yj_M)Gz- zL_j`H{jn{w`8T80#;97jQH&>@nM*Sf+j}cLV$QSqCa;t5~tvk~+OPw2@ z!9}dVs?G#VQXb5TYuJ5f?}**2O`wsfgvG7+gLR+;|6X@Sx^!(>M#_mW)|@bG%9 z)(QT_prBbk+^MuQyZF-o?fQ$TJ?X#ts_X1Of)+$jCmIBs_yk=q-{1ArdG8BATE$4G zV)QL9O4f!e1wAIA9#AzmM_^k-p`Xp#j0Z=G@03?MdpY}wTba~zfor@Yz|&WQQr_9g zXvHzE?vE_@%CA-VYHElvfN4phpMeWfyh=?)iG(UR>w??jEFd-#aBHkRJH{uRdh!sm zW0~vpN#sz+d$xr)e-Er6!axPB*-yVEu%wHfJ_(5`Zsa)^eAy3|6LACPcgz|1%d|%A zRQ&wnWQ=plos5imRuFCbeBM63D!aPCy@@P$Vcw4OvD zM6Z0zji3fZ44$MHqyTV(C?Pxt21-(27mb8n@|v{fVTY9up-=;J2&WDCq*Smx2=O3j z+)^yDKIhw_rWI1F&C+CCDXB@Y=Guc-&APCApq*@mR3%gD;v-hA0LH9JsqWTd?kFw} zp68nBtlStO+q{A=xR*UVko^naoCUK3>uWd~qqq0osJ%V=MdxPL!O9Jcl8i0?_7A6s zu#}5{8qWRbYeqyQ!2bYRE8-ZVL_|Y?hctD3sL~=vO8pwAlC-_M@MT|K zBaFl#huN9waZNV+AHYf3m(o0U45X=QFW1~(bc@{6xk(<;l@LV+aF7Hl0%CmrxXuS( zxxPW()qemge1BNaGH5m8^=|B@MD@De$xo_Z>8`m&36hWz;FF|r#$z9?&EGj}nP)tO zUTtHm{p6E%9OXj-4;^tg>*(D^EyUnQlp|&1;)CRbxWME4x{ok^DNeQ@*5V#U^aaAE z(}$X;IGaJw_zBQ=auE#x5UmM$^h6U4h-AFI=kPW0y0C5nUlJ#bf?{}JW<$gd@tDD(DD^t_ji{3mWz>Ka;8E!-oHp*?r zzr6;)>{sI#_C@9hK`t0+4F8RL~+s!j~TvifbtW`$hgDd9d#& zEA?WHN?Z0XThFrCOK|4ss19*}wE9TeYe@hlfUfPJkG&8KdaN)U41npVeL$`cx63{P z+rcYBq47pFStB=C=?t-}NHMT4?ucJh^tET=%zD-(bi?IFRFmS(F3q-CGa^+{@hKUK zk@Hh$Qhl?da6CFijYBVOz*~T)?6qLTw(Ndw?V89?R2lEj3ur%7DN7J$&AcIc_IZ>u ziYcF&wSZfYy9V*+mg3-^?ErCbFC%qE`Ja<`4_Vr=Qml2GNuoLw8Y)95HF5{d-*oSN z9!wPE~ks0i@;da3JK%>2XF&WO8JPfa&jDJlr%XlCt|xh2agYi z+HYq^Tm%&jcc+X4Lwk`VB#I0CN}WxH>c4ucq&~nQ5@RDxEh&*&)^19o8Z)(qNsZnN zNCo&FJMfwjB6g|xQO5qNC%Yi%-2NHb+d?gB;t z<7f%ZYDenoL{X`yfARy+vVN8{MNWZfXNBZkSH!0;`wyI5gaN4KJEMK}TEpimMd& zUE`iM53W|19fYr($?P(SYLXqt)uXm4ql2;}B#@9)Vo@X{r0WgCbTB&c9PHHJ^a^#* zT5L>>jr9a9+qUEjdc@%0Y&y?*jABG6`^1aiI~Z&dvvi~}ZWz?3nWy{KYuLJjlwV=> z>ZpD8{X#2@8@xJqbtdJozUZ~ zK~_yJplGD?7BH?8c((U7FnT9y%n&zS{6Sz1{399149Z1$^eM9B3|9)%@-8sy*|I9xwx{>Q&EM#r0 z_c6WVVxmX*W$=z7;=>n%@ojOzljfNF->gl)$Bgn4tUlO7`aSie-(YrhhoS+<-GngL zPxN;izvl>e^lVxD_&d8a#h}AgjVfR_DUIT_+kx-N)c_Dfa--3fOL8zM~a`nv# zSZROfwr?M~6$H}U62SN*6Y%A1l|@8y^0-z|D%`B!a*&k5XT`I!oEUjhT3lP~K$|jY zaAKS^YC38<+giL|KC@1$6t0d9h^I$n53WAsBCSUrK%7l zp?>@Z>6dW)+g!js00^i(>aJp?W@~C^Sx3$*Cu@f2*Nk+gaByN6elDmAF-5^g&>g*M zt6*cEuN1tdMHir|ubboXjhMAM|5K3E-OM<9`2EyyyJx20@N)A?J3qBbNa0lXKb#73 zv;Ci^g6jVhUFLt|sQRCsAO96X^RK%B4gM_;c6|TsBkj}JgQvkNva`=j@gCv-;Owo_ zsjFC=Ye0Ly>-7cB=Fs$%l?OxFPc8K(`8Tx9zaI6!VX^*wU>43F|36WsUua%D&T`I5 z_^uup(tk&sEY>;KVOH;ONW(Ki8(HROffqvHk8hK{;Ce8%wybsev}xcXYw|{yfb_62 zM+H6aQ1x%)d);q{+uQ2{NnVgmaHjggdZ@pZ?8a?o9@9kLn;}{jf=pB~Vd%M>Zq;7V?os6>;+!0W71+1Y`HesL;Q0L-~1PFOUBKh@G|*HYp=M*qpzp@@PBh zuZtM7oo-CMXYeVA@G`1z{AJ_cu6XU;e5=Qpp7A?trUztaMJqgGUbd1b5p z0`*+O+6rCAX|u{>(lJ9MmBue9qEL+VZVB~6K-NY>b*O@e{V(08M$R`AWFgV4=Klav zIsk}2pL7nCnjR*X>ATD3POv6_L)W&`)~^k;zb3aXdHS^vEn7+i95M0N+!9hUn3G`+ zM(EgH;3dKX`<_GJE>cm7y01?B6(?l=tz$TezY^m!{pozA^#YZQ=%}caYsRB)(ALsm zY-5UP&#K?IE>%w@Txgma!Qzb~>`Ra^vQO)nnb)<78!^d00MysMeRYn`@<;Mgw)|E_ zww-VJa^Fqj+D?rsTh%tr$SuN_@0(H-zG&8IYSu;Ue)#;0CDuSk+bOk-0e|VO@dWGr zXQGiodS^OILxT7P!wBWE_X|tZ8D``3IGpjjKPUx;SCh&k;wkr?XY?_(I*(Xcd6UeF~c2_zMbhNCAc5D1aRV(swnUpi=7qW8%u=3zqpA%^S&|&oGy( zibqGht~lrI?7*@a*syj_{aeT5bZ{GbWj=CI94(pT7Ik(^1x?~9X+P%7uve_h6r#m7 z@1s8Njkg-Rl8pkZ&J24csv4^iugZdt3cth#PN}sU2~rg^z@0r2=W~nFG@p0lE@$)D zhK}q{mVvO+(YVi5E9atz*}`cKo6}{iw!@Tkm~_b(p)w~#%Ibs|^q{CHW$6st90u^` zQqMB@GnJ3q-WN3(n~_CTyJl&O?WQY>L9(%n-L$WFw&Q#>x7vtv%gp$za6n!?O_C|d z9UuX*T8cFaiSf-hQSa5hN%>Rc##4&HLG>I(z@g+)>1JJF_`r|NM=1Mx7INHm6g;RmeGk{kL;BTZMA&jxLW$$!l3re!AhlB1*4`8rBIx@&gRnMr(T zkw@zgKf)h)&MS76GKra<&nf@7MXL(bF@iqwH0b=^0*n?u!xs;6#W+w%qxB2O?^siP--yP*3ONjO{v zf?Buq_!_P*T7)VDsT635>a)zmhdX-_l0KEoQD+>6_n7ClV;h(64EVQ{?*f!I;Syy` z33{)hUGq6(Vx2-0YFrTJMCl(Wk^Z;Zx4iHeHrfH+)yh@t0pu$)9YcwfhoX3}*_ zJzSpFz)0^##N~2_`7mPM;q=neTlDLLenPnm7R)xwa;r>hT7igJC_ygqNl_(S!Rr*~ zbB7-VA}v-^%1ladzKeR7beu5(FLnewAKXW+rBxV8#C0Oou=F-N5R$GctT3R#bA*SK zA}@rNrZ%9=z%Or#ANk~Q+~G^&K`7&N<{n|Eq9~)30;M%&>%K8pXWnb8V_;WChMvMe zDb#Ygg&?=W-F+(nKdO%#=Aql|>&27D^7XZnWqgm2ef&$KCZ5!pQp-WC*qaBXou_){ z&@J|R@eByVi1lmjCe8&RxSb+QQwzxcl?pDHW3;1O&p`Oa%N5yPpkOuM1}hGl*pV)} z1db8jR*s-)@B%$}0tO|H3w+Rk5$OojK=Sce)?0?O6Q{gGlf46tOQv4q#a}CTm~4sj z{Ozlm*6i|L8f6~cp9K`(&thrFgvfA*;eKb5c%2$=m~o=1-n|bJM`)qdx@1Uhb2z&e z+M#4;30>J*{sWuguotqml&@mYOJT&E{;@gfb%l@T_Spwr5$(}nEtd7hIPEO-JGLSD zwWqm@$xwU^u?DR*hY_FO!jv~`TJFIoHP|W*oF6@-Y-2qk4?Q9T{ICdYAZYA%o>(j= zn*k2}jXwKZzk@!|u-Ge^sM~fXn10Ho4!*J4*yJ(o8H?lkKBw|;6?m!@{w3V&CN=4QmCLH$VsCe5AAGVn@4bJA1bBz_Ghz9^5 z9Td*w&Y!`B;9tFMjoEjTwAH>@jIexSY(=CYCbE6pa2kc zUZF}uX>**m2sBG9i`_%x5ksSSYYA*DkJ|KbX9j&3{^U+VE5o`h4t-dMAgfK*w6m}i zUL+3DI3U62Z7{}jlum3h8=9-_OnN5_d;`io|Fv2QGpZomEUtJH(O@(vh~2BJS*riI z6s)cox0KvcK1|U2Zy>{>G@h2f4FbQN=g5xB_t`*?dqkds*Bu}oOg~09nmclpL9ZL2^|1jdIFrCTw|+J zXOP=q5ZT{{^t5QWbb*p1odhiarteGxVG@4F`7=#(J#`&ry&fzEfzgvYc7LtrD}|$2 z*oYjomqPWb+*M{a=qPGXG*5Eu0|7{WSU)k>FEfVb)tMX=*J5LDZE`8#)mFd`VU_i` zSOyea9L^{RfM=iTb?TPA?dmP+=fyS~V>FKSV>ve{@?FIrj$y7JqewhYEd0zrSYUo9 zN?q0`Ri|&V8o{dSHEJ8KxSFH5mxrQ=;(YOoQe|^?^C=3~ecrdCfAUMbay9ugSzY%W zvv-&O9-2%txV5%B%402Ag~e0`R#B{TMY>p;-{0L)d_+Hb>3Lf364Q|1gy#^F!{?jE zOR{5}xjv)CU%#`IkbY*4t=F;0t#X`CZ54cob}iN$WS+ot82ClZ=~cy+4=>6YA&E!N z4gw{0OMU)q(eFYn_)cOed$)_Wq>fFBCnkz8$z#mXCu^6a`i+i~E#oT6fP`!89k6OP zZL=rPPxt$v{v1Pb$?B) z`e9TDAt5_m0pIIU2^iXsU^K|s4-66xKL?57$hy zr){I06qxF|1XXioq5m(LAtPaf0=+e>BKp)ny==eb>mO50+GrCU&_{QwAo# z>9SlqNg|8YS(fF1+UFc)RcR7&1rx?*25aKI>;ivMSn?!b%rC*#Z8_IEK*uy7ly5AR zO{R zE0VEUkTViXw(mwUpX@~TdwQ2%GM|VH9f7$WLi8le8W~9vNI8gL0c--ch`J||RX8vk z+pGG{8&3&+XM$)z%GT6(LzxJQz9RMm5ZB+Sm;@fm;*EUnDvt5rC~eW$NJutqplr(b6p0PXqSh1+mP4H>x?M6RZP}X2h`~85Mp^f0U#k{^! zo;CK}F)PVEDD%ZHNuYX2ICWyb@+B7p;NOn`JQ;yhUr>_MvR@1S$h^-J)O5-5 zI(ake`WOuW@sUp`7}UKp3m;CZi9tB2@kbPg5YtavsU~m=q=`cjeInwwg6@CT9$qXg z$X}D8eZhWEtmdlE-4B)$mKOL z6ampBJMMr)$@se4V%330z=_5QQQ+%{qZVPRNh^?_peKK376*|)y6~nyIEW%5&Rk(T zHqXQzUOE~byV5efjmy)(ZNtgWfX`uwb_KkQFj~J`woz=ZW#CL7^5s{xnel4xIY^FC zUlM`nQ7M-|X+KLcQbTdK?^(l3Jbigcv($3_SE+T~r1%Bt)G*kfS8&ncm(G>#AAyBm zlE3fnnto^gs2JU^nkqm50o3jQfXK)@01y`kfLr|z`nw>&_C##?oy9j%VMC{5dRofy zu~A-_jsxp*1)#10w=p%MOpIAxQYjJ~VG-a^p2b&S< z8`MKo;D)LMnQCP2%`RYn6W{WG`XNquc;x+gwAM>~LnMcukG+XRvZbWjElEzoDXJL;0$5=QUH89Mh#+w)!WQy@v{lE=OHlFe!yT8}C84P#X4_1_ ze&NB|SnulZ8>vCb#BM2Y-`jrx+33fWs#+(LxM?ZNweBl(;d&;)%gi3%nPwFqcz<&8 zU>eX;z88j{5_S;4=T5)`=l~MH?B3i5+;;iwN`@3T@0@?ru@Zs40x&g0NTeP zM1${Of)uu81@V2S7$gFA}8KNb0-^hcBZW%m^Kc|jPpjn`N zr9MD#^m$?N8TB}s7!a_$a_DAly%BmiB9$e{HahPJh)7j}9J1s3R>fhN7r%o=X>z%@ zcNK=u|JrQ~eSf$bO7Rgzu%RYP=mz>X; z6ZgPbev|-F9%HWS-Q8KA>MjCqb3-E0Oit{L2AJVr3hPc0K8=ToR|intA2;6m7Oh&v zT!yP)Gvn;PW!R{qhNta_8;``pvT?;kJ=6MFIOiI1@y!AXtVt=t_DOvBTro=+Btrhf z9FdkN25!Cz9XVYcHfejt#@ehazenLLzQP~1qrG+m;PB2Q=8(cfobQpfE%FTCRzC`B zy@Kcbf;|n~1=8xxrxm0(E8(RBtb=S?IkLDKZ}51+na zvH6d4JNh5Wd06j3lTmFj`8Q}8+mSN|QLR-c=RR8UopL=4uRUnF6^l|^!HpX`*S7-? zrQ4jf9)EAUSRE{902|qPkry?J`^}m}obEwdkQ}UrlJ_bUnfbw#MLNQJ-cjko`YLYz zL$!Bt$#8l-kpTml6Z7e;2xLJKf=&>WDoCV(Rx8$S<468=&+bsHlm4!Tk=`|OF(%wl znaA`fvpLTmK0_>H`9M;I%ZJao>y^prG7t%+2$!%*_+8qgH2L#zDx6e6?UL=mFV!7*y3Y7Dbr==P1F&J+XP9;tKEN9diOMH(6Y5b|FzOd`H8mXfeL)m#BZCN{HS0 zhL;38MB}{+Dsyzvm1fod#iAjL;P<~HOD0aMwp4Vftw_AA7lN#9R;%dVs4RFDMKj{# z$Y4~c(`i(hQIjZU+wgNjYs;FS1)qlJ^XaWSpyCmR87i9?kwWJWPR-O$30aZ5RQwz^ z%vJ69z)19)ez-XaPa;_znMIHNQ_%tUpZy)ODW}Q@!m=IXskY4lS`TS1mzZa5TLvUZ z-6Ok)G97>dU4edSbk@(@_3z{-oKKMVaFdENf%ZV8zhPSi0^Ntt1+bluBHEYB3GLfc z{{Uu|C(8dygAKCHYC8j5F)mk=_%k=XEn@@HLOy;Su=^l*OS_~zJ8mlSNgxwx5Ws*R ziEfGK-Ek-g+oyA;yZgb5cXuz*@;)yq6bLY3nOyj}Ao%R%ec}_6@n~zI)sXl$*~l6IUY2h`K7=1U9?EWGtsYhVi&q9#l#T-^(;O#nxyO6w|_~VQeqYk zTSq@cRPXhsc3DBm2S&<%CfVZ*g=E%^h|32hNZ{}z*<)+BSnBZ9yjB!=j2`QL zrel!vk$oov#t${?6o%)sDIw)V>cOirc!{b~SGp4!uy2N@_^A0U6(0Kr_>B0XQufN_ zxUdemGp8kcIkD>{-FD7NP|ko0ON6u~hMIs1oCGf%iEE)=RL?({beZL7AE>h3(RI^Y1>`IuLcBrPk&P!d83Dp%ZJ&SNpLBjMHV z@S|0w(u-nS!Z93ZC3nwws(&FZ-MCXfYmi}Nnd8%~jM`&$ZlyBrAs0_2YXOTlp0;ve zwG*S&T2uO;_A={6D*fC4!rog(#kHl4x`h+m-QC?S5DF^_D_n!SyCo?c3WvfaxJz&; zAh^2*4H_gs0s)c`*{Ak*Ztw2Xqx;_e#<=H>`{RtkA7(9BYu22#R?T<5@AC*X(W&ha zqn6ZmJlgJ~U!Y7d`6p$|qpbSHIELtm<7#!}@td!B(u#$?cQj|es=1hnYu{lddz9Yn z5+J}MK$u-ndCQITkWx|!0DxHe+<%@+{XG5?k7w_QYjN^LA48Ez!;Z6?BtKtwJ8SWS zXj#juQ2G$~(m;wbmt9~aO%c$uBTc-m{N4InPIOl1$=16EZg@xIc0P?!M9Qy-R`&vd3 zuzQb*x&*Y&qKpN2k|dC2vPqhI$f7t%)(rqOkyff+OEn40nw-Djzpc4>QjsLKC9~bu zu$H;JtsT18HTx*P88c$)^;K!d!{73P@;9Ewo6?6d`IpvxwS|hx(zcr?c@ERhB$qnP zT-aTwReK>aw#?N+<_%}i<7!HKkt%6J@OgyRY9&F5+#0A*_*j+0|K#flc#R&?su#8T zo8CY0xTj!C$)jsEWLw-=KcR&iLnJ_NvO}hV>58S=(=KNeOWrN_9F#>)kNs!a$=?aF zf0u>nPX9%S^ZU~q=6DwHmEK7%&5h-(ChHusRrl-^DUdrnX z?wsH-RNCIKae~sbMvbO!Q#J6uV^g=)_?o1-Wwt5ZFR>?3hOfaxZ5wt?FAC!q4H}N# z)KtNXoqz~4{R~g+t{I;pw$gO@*->zQK}d8km=^6L)bE>{0L@*yk^^OC_?%syAGJ#O z<&)fz*Th3_yol?Jvf4X?rzPA^Elas(NML;Qq5X|NYDX>nvG~SPwG{OXR`<{l)+j-t z-snGeUGa%#=6xH>qZ4V1d-S(<8Em7{C;WTxM=mjySxxRU@dX|+P5X9i`?~OrcxrM% zXi;Ro^jPDa<=SFpW$kM8uC0xFa~D&y1Muy0NynSqUU$sb&!m@ez~cTTS>Ug~(-<{` zJQxlJ!^73ko*NN8S~7gNO!UCu`pn8o2JpT)#E>}bW=0<+(C8%8{ba938%2Me&neT) zQf}L3=cX(SZcR{sVkW68DUh3j4xGl`4+;?QW_0Un@@Dm_r8>`(j#3l#CONNDo3kML zSx$C}7LU1t5`_sM8tP}rzZlb!OX6oy!>w4%bWpj4Xp_3$;)|P7O>iYtAR%(t*jM+6 z$ycwaKAtz&-#zTwZ_JB&zV>}LREET~;3?`(H&l_RN3zpLw2u-CMYL>GLyhwA6}!#N zlRRQCI8<+LEjxN(dV4sb05yenEEbehQbMyI+_i1j0wK70N2+c}UcA;93}S})vKK;N z6zCZ0l>j;(Dit2SDvz|iPVk=U`EEM%Ot;ETnfFJf-cSR@^SogYlQ(xJsRwEymOOss zw{QL*i!RJa!nDdA=bhAt$N8CBg<-ZL}{xLP@vavtp_++xpC3 zv5pMHK3Kp4KwDu^`0eIAfA?fls{5+|m3ewglggAVZa|W*F%wI;{i*PTGr&GD7HvJ& zwFNFz@%>kn_6Lk@kJireLkKy=m#9wp%3D_|i3&`i+i8>}=p{htSZxC zEJO4bT7m+}MeMO?q)LYbcQ(Pbx?H`a=B5+;3NmfAiA4Z5yIrGk_&p0vD1%^cyFh}6 zr`mi{GsVZ)_hd@>Nhfq-S>9uB`Nj1$M7if#LbjBjsC#cw2`F|0KE6g^)B4`D99?|` zGK#94>^!M)VOMX-MDF5Vc$1LjUEgn~GUPGRq=H=Cmpnzl%IS%Ik}t~}=X9U)PgkD> z;2DB#hN7zWpa2#CN_z85qh9u9W4_X`>S%gl+EeAZ$wG7r)FWx#)5)-rML9H-)UV$Hr@*T{RhNe6|+Dh$DKZWNPfL3hFD4X0p zPKOC*f>`%3L>y>#=~KMC&@1YvWSB#2GMhRjZ5P%dxD7}-IQDE%W4%3)>vpwK?$BV3 zPqZ5S!kuM}r){WPO6)92JM+3e0*gl8%7r-AWcq0IwY|rZpT0hBtbcE7G_B8eh-oG{ zK;{8!S%|x;WQw@ilc0SC<$23$qaCd(j+_rVe-O8VILc^5Ty^{73%A=BNxJ*iwM=^} z{7e|dktQh7MNLtw@@D?-QTG*1wx#G|T^{C(Zx)HATl?A#ivHc&0rxF!=h6BV9+ZF^ zmQv*NE51FsW29m+?c;!DMR^?FQYx6Hv9EMCl-Cz8H|4z<7EkO%$|Au){x^+xM&7cy z9X7jDAzS!$u)6c1sm)z#!8&*aYDDJU6|rzzN(pr%>c;HtL!SE@Ii~|3wC{rlgLMsa zl9NK$s81@gbbC`?H!suqEH)uUcCSXH1~6!sMQ-PWy&7x{|Aa-Y>moOfBsb zab0&&PrOUOf>gTwl`_egE4!$13~*3M2_OW3ISr;LHpfIRRTQeAT40+5w+iyt-|wQ=w`&(ZB1@H^)OeU z@t}V8aN11dvT4CV7nwH*pgOcA6jEkh1oT`;6XHZ|ZSZb`>@)ey%UWRh2{nls@l~Y+ zO5Df-Z~}DnaCEHq4Xw|8T^Q)h-#F*l(AOZ?ruDC;;207G9Kur1YbQk#FXh5LbQf@sIR#xED>&A>5eSH;b(?-Te@ zv4td9izB*#MKCkdyTCZjrEYdy7^uVKM=hi#bzkPo_Qr4r%7AJ5 zQHjlhDM4R)f}K0d7()@N#FUVPc_B4nm2WSOdf?_M+(~38(v_NV)i@7H`K-T)Dt%uf zO@tSm>&CWKD%C&1?X9k=*2^~>-Ze`B+=(JWFGFIa25lpNmE*{V%}wo?8ed%SZqM=$ z!=kMuzdQ$=wN)+!*NyqcuDX%}FQ%rKWvpq)WPel?DBh~;&#ruPedtgDHASVUFPGzO zG=Z%nBQoR(sH1!*1pvgAA(ze#^&3;tex9S$y*~ZXOTXZQu=t446BK~LJ`wSmZ7x=c zJrdGf+jE`MrCCAYyM*x1@8k_kHiHl5b3@~=@Q3XP^@yjU)tZxml{&axmj01rqwCA? z22HAeLPr=hZmiAy9)Q9A#_gU~`8SHI*8fsm(OVwBkX}9%_>2T_8tABAM{)S3pqIak zt063LTWMz1P6^>D@z9c3m8Z<55T{ z!d6Vq^BosRTw?5mVY}}qGlI~kx%jVHGF&lN($szF#X>DS6G(n;`UX&B^hM?8ZD|qz=3XHFA_;c#TOYo=nIOP*}`H5})j3mULk?KUOME zulaFi+wrrxvro#20EN9`7aCMgOEn=897VOP2u6b^q3v4i9vF&1;rJ0}K2ijklP2~j_6}fV5DNo>>fk|>$87h+>kqF8mBv)R1C0x$* zQSyXp88`B|S+{MA*vVLVLw29Pdt;(|R}@CxfG$&T8#u+Qge(@84ydEjgT2bLd{zMe-vK`SbtCQBwG>kokC z)16j0q-9In!iA$Fl~P7rdYB+{)7^hu?6ToJe(tI3x+=TKWS~`OiXt?Cz?K8&3;uij z@hy)s>75t&cQk6#q{7EN1o#a=|Er?-GA_%>t+VWXt!FA(`{1O~sABgzS>bMVX~0AZ zF9Wk&vy4ly_jXObmc3>E>tL`eEg5T4#~%Q8a{4v~pZ^xG9labc*Get>Ol6)E zSCNf}vvxw?p<9HB@KU{@$&a^MCOy5Ik45hGj)hOi_v%~Sw~l|Iap>a7%d9si@tcH^ zAJ;oLjk#Q9tjh&l9CR&eHD(Nnio5TWan~il(x^FE(6^j0h;+w@xpI{ObSo8B1`0C% zJkwDtzl1j!MrhsBfmgrR+{fj781feS&e;xT94J^+i7s*(t>eIUl|bdBc{Vi-0eKvs z8kg=4&z_Dd4qGdw77M)ZdMJAS271JLwMonyY4#&EcNfwF7r|NIUY_`B^|M~1}$K(!(MkZ))PnaYCOu{(y6 zP27VDgH=Q?i5@*F8;4R%sGN2yH-X=ytcglI)q*SWV=cvgkgYn`YUp+eNO$(UjaS(~UBZ~%bFodDN~AS`)qsn5yz5~jjf{8@U2co0tH4IP@Rh;9Ht znT!dLr24I=KzE-RsRdb|k@(bQevv$Qu%10J#By2GqG{4PEvqyIK|zDj#}B58(gKdU zq^~zJ#p;Z4q!4tDETdPlsV>j9zeN&bb=B)t1f_L0*9_iUc`*!c>EL$;d*EiFPk zY@_g3@&=T%G8&h#Wx*Qp9l1|L3#=TOk1WcKUvFZ2ykDP723IY zr!s!_*x6T4iO>~Xe&p^$tMaj!eoGu!Gp;DUTd&SmG`lWn&zfVKy2LT8=^bA#e9dvY{_eepStp~ z=K>~htHc>C)9R+m=Y%^1(;zcIht+B#&VwbvKLgry?*_iCDhRf>sY&&%(1w0oJ6)8d zPYokQMk#H$NnqVRR3Rk1Gp7Y#{ zDmA&i(u{bpfv$-gWC;7e$@9)I@T|zHRA8#S_{$-H_ji|&_@6Ez8c0^H-rw$G9u3m! zlbY)SRxa{$<_cPB^tb7^!g~=LwicydLV}SI+<&?V{4so5=iU z=Diz291XJ^Ft5lY*c^gSTcpHH={tL#HjZ~(!U4d$L&5~LX?odvmz89*zoce}RjjDw zJ%q3buGV|XW?HLd?a&3ivDu9v$V!#=lT7FTsiuG4WSmMWE2OtbThy_j#A)^Lxt@X)S>J-1gZk-`}>WY;yA6iAQvr2_d>YWx~B zF(WDJH_1`wMf*!y2#+iX>)X4#xKuEqSrbNtY?9?in$8FLNe!-bKi%f?rA*&^t({(b zU-)(sN;d)uc!#o})VzA1;BCIF>cvcPBjFhCcy&x+TdHr4MRF~uw0lqpi2wEY8ay?U zw*|R1Mh_LRut>I`YViwySO8%Wi=3*D3l}6P`t1pY9^jY4*0Vp@-{TJ2d!lEFCdSmw zNzX$=VtAvDk06Av|)5i1LV@i_>D&;XGqHsGS)Z<9%$tS*g zc(ICusML7NH*c=ph(`i9=v?D*t42*(sY&5jK8nDi!?@s{p{PZ99>dx$S%-als*#;1 zg-wFo7;u%g5+Xxpo-hI?y$iih*5O!9yqNc~kdNNeW&|qvlcjDYWj`#*z&Xq$#Lo&# zGl{l)G57Hvd0M0W)Hx;-?A{ku7h;duNuHuw?1KaS&_&x6Xj?WI#P7^V99oKqN0lqa z(xD6}+qu%HtWdPO>*LUX3A3zovax|kU*RClc74|z9*rI&ApjS`4?9xnHL*0<_GraC zPxE2hG)a8=`?4p!rlz=`j|5jllCIm%C#>%w?>`-;S5wlyZ)y;heb;>Kk(kX~CV0|# zI;ZRR`_yzqISqEV;12}gf8+g7!M4oPqvRZ?qL=1yfVVTqg{dgwJrPs`4VciYT}2E7 zRd?o31t~-l=J@i;S6qMA7b$;%?zhCFvScp<;=*w}9{|Gnb3Nm1O@iiGyk+bL9C>6* zwX7_8*~YwV;W*Z^Flzu^1Qe?p48>jvVtC=SF>1?Vtnm7+M^Ll-7BPfGE_<@Rg$%<1 zfR~QP!u0GLpx|ADdDZL-&mFF9k1^vEO84Do9IA&{q;+{(GpNTvAo});^ar%zYD%%f zfXO{y)c3ut+r5^~_d_Zb*f7s@tv6&-k+DPqARjaj;*Sw`F)AGqKU`=B>pOB(9^Q@H z>n-E@;rL~tq9FFtCka!ZJ62V&l5L%SWf4%@olmk%UtlX|r)emt5=<6|FugBY7n<&_p!YJxZ}4quL0P_fFLSoY$;tI`jqXre zyRSSzG4!-j6?#NSci99cjkmq_@vE}YO7>4!&LN1uwkP-EV5Z2 zPDe|aWZy`QA?casn%SG#P(__xiXo;2CYP1IDv7Aco~ANh~%d!}U^GCBqAQ zVG*v%3KjRsp2_2#hR0`mf&E1y*J$oMwz}MkA{@k0k81KVMwQrk#)8QdTf)OB8i+9e zC7~M25*BwjnmhnYVH~sJ9pZ3F8@rLVMKL|mpiOtyzQz+qw*64aXvT4adcDOY zPQD_kv9%THKtIz3oHLVWwyZkq8*p;c#bK8sz~UH3$Eu09Ez?b5cbeq*BA)CXa=RcJ z`8x3hl~WN!v}P@O*n%*)0`*$T|A#Kkn1j1ThI>wCA~gJ@-r^ySe~a$C61osPNF}J_ zSZx;Mt6EL({{1inwPyV|FhEwbEFuFu$+<_D`YfSsH5B{90NApgliE|=JZFWkHrn4VZfO36X!DDT*z5M0UQB5DHE(g-U(j;%QrRHeZAtr4o-OwP( z37NKqi&XitGZLyLdwFhCth9NFnveuyOtzN-p{kcnY!u{@WO$Yc(_^4wxN!d9(wX?R z11A$L@l?_UKTAPNhs*^WdedEa0)}!(!Am#>F}=x`v&lQk9)l#piW&BLH!}2kAbMXu zn&~;nVB&d`N}kz;B17aTX^m%khAiz?o_mgd#T33jXZedSRsy`u)0bzn?N|~W7SqG? z_g~tO)5Wf4lEmY@EId_6GH`58;V~boSqANQHJ&Evro9}T;ksoWQCQrs2jgPk_sc&1Z*TL-r&!f92mV23W+=n& zEgJbH$4x`uFGM!P0p;`i%lI&HnMWq&Fw>1e!TF|M5m;4|lOS?jIH{dr-RD(vXRZT9r9h8IN4{S6=YDNpt3 zLJ~zoKuf>=YB-C)zjAsGcq@~8G;3NgZIt>~!)qY6mz&HtjPI)x47Rg-koH%9HT-pv zRZ?Fl9B;GA|7xgSLZ#iBA3%8-AUu)VCJAq3{HsCXuTG@MjphC8UV(i+{GU$!HBus+ zf32}=*V}jSPQ$l1Neud$0g@V%z%F>`cC?1gI9jfFeA)5Uuu6yweOQVB3Bg1E7%eqo!f$OdT~;{Z z%Cq1=4%F(Fh{plq#p0$DzD-IkL38zYHA27^8>*=;{EB$y2c!&EWuFPVR0)`YBt7*+ zVq7_RD!GCSY@(Xv4~W0kwbW@Bo+C6&a;HTWAz2T}DKCUsqQQ1{dsuW1Z_e~PJhUG1QnpJzK%adgT3ipp<9lCZ*1X8+>uSH%4RV$hpB!Oo;mz?JQ^ zcE)Rg|A<9t(yL z^p%S3hHyzGkEN3{QjdvWF!jtF6v&B*-%M^2%|t0h8kB@;O)vmZAa@>z1j4#K_|=nn z?$(Q`?5BxS+B>nEa1upIzLRj}I||3slYhdt*V>T!m{w=zi(|V5H=+oYS8Yls!q792 z9htOfSRM_%-V7u7x5%8oR!plRf8T$%SpBI|;qC%5 zs#N(GVIbor%9L%6I(}piDFnt~%JHZ%lLYvev5HvD6}+eaQP>Di@_$W}}2^lx5y{MLC~W2v7Q26iCR21fr)$NqzAU=;edZ(U#NKX%a9lK=Xl zfBSl^=E_cxIQZ<}$EwaY!@<*CXg(kaBI#efBmXeVAxO#IUsL{XzhJ-o2dVHf%|8UL zFxNg&mM&=yo4_l1{{FecdQ>iA%>vFNiDAeeRJ6;r{Esl+tFg%SJ&=+=dw#Fr59jQq z(-I7#EpH-*2cM0Vl>Trx8p9)q|EHJ>WmtCQW+|QWdy<^;Fte}OydMN{e7_h0V?~uRfOV^!(e}FBgautzD*UaA( zflu+nFC2{YVUYPzt{Oxs2-3!98J)cp_C=i^0lHk(SLsdE;USi&7K-SFLcap#BhJLz zmS>uQ{&nu@4NW!Y9M`0}Q?s?SGrmjU0Pw^+RQp+!6|^)VY(iyBE*#@$TkO=FF_xi7 zHi<=sYyT;6xRo{s6aPa?gW|C2WS1*&w$zt(R^J&@+lDSRMFz{l-p;?$j$0aZx#W;m zUmjJTvafxd)-}f-4}X_8Jy|EeI*-YP0##eTBVH)+*%;)>X)Y6FkW^8<+U3f3BSW#D zEQv4x&_S_7Lw|_78cGI`!KVN8FbZ4&Q_@z>&po7jsd`_~%_*Z4)ES1Tas}^Wy+axN zhW$f);(AZ!<+<8IA-zMkRFR>9Q0|0K3J|C^>b!Z>3BqaEXF1-D_55& zm&8>K1XR8#GrW3UZhCIu!#ckxHH1e#ZO*z~)Q;iJ+Lg z+hr7XWz(1oZ6g*kuTNLh?<8D#sIs-AmCf6It)u&=gwf3)$vw|PIHceTJfKtaHM73& z#=%hl8nHQ9^$P*QxEZupV;K8W!wB)s+Vl`Xeq8=OwUE~U_)k)9T9CJqtiRp5A<%*L z)R>26_Z-qL?+T~e^bgpp$?sVerNin{uxcNnaV=keihZ%5e$Tf}9c-Q=eGap@)y4vj ze~n^dem%fMUb3RVEMShg@xq0#tiDUHE`q8QOuN~@Bt^84AiAo&bjXm#c)NY*Wpv;` z9K`HPqtwks_t2EiLGWDN9tV@_*TL`SI9FpW-D6_29!8%;aCymDvDn&y2yxn8&ysX| z13ao&LKVB!9|;NAQ}X7)*Md}{jz2G7rOx2}rn6S~rRbJX;XOCzEuPrt$#bzhPceMD zvL;}jZpZTL*1?FLlu9vLX9G~1(yc4we*sAeS3?1_7Im#8W=sw=y_N`Bdlu=6 z$|2l&b%TejFNmw^*!&tc|F~~d#V1WYW&Tr;Rj8;Pr=1*;UB_jI%8PwPa!n8k zcbBNk5B)h&<0(wzjv#Y1BmNkc20tyZ{I%!p@=d1S#C&W)OL7VpmTbdtAm&^C|- zZBb2YWRe08+CQJ#rjI2i7%an^SnWcbT*f}VDtfj>@wgz(0%(ER!YhbBqXo@O_0 z(DA*+r_ibsc1d0}rmuYVTFjI4-{a!! zTzx50ePR!{Z;ZA2cTwwE`HQu`kc}zGd9x$SDwJ2uTr*sEeocA1;+1tNAMqU^#)!Cr z$wi0`0g$+or$1TK=~g|vonka<^2Z-$Az6JZiHnb6A)<&W8so^>afW#Z3C}6ufD~Qu z>2R5Z?`)%&lmKn?Y(Ucbr*1Vuy6L3 zd-!U4!Ypr!b!{5gD;TXZ;$UMOiASs11^od)?aE;x1wmT*{`sNupX`KsxHE3Q%KY77 zlCM&gxwTZ+xtC^kz1fw~>y!_iXl5#fMY>6u)DlfU!LdUDOrQ{><|>Lp8F88}|L31s z?6AByYRdI7tlG+a0Scrt!M)~CH9cjzxTR&eVkgtLbr7D5BvW$%anM-<)G7lmg(~%3 zs&Sf@d^Hf;9A6eNibt^xr)_I4PdM$?6d#;)OANla&4m#tln-p7SiyYHlcA5kzF&{h{-H6TrRqII^cSUj?c}b!^RF8l!30kH|Zwc&}6jy)JU^z`4l0J z-x$ZkS5e)#Ex%lw(~X5z2Mj5RRhGx|IisHQPkD3WGot-=D@YXj?y}nCIgNEbf&< zAdG7_?Lw>Ud)*%d;w2S_jWq%Th*70^9Jb!XbD?A;j0~yy`#79d|mfyd>eRdg=(XijHANdxGTC3_VgsXn)GsMi* zs5hb{|GeUJgMgO)l3VL$O4j50@BJ=%QI*r6pyiZS2cDw6{w0PYw_h=f@&P?!_v?+@ zy}W^wW=Wuufu2os&#Y8W^!vjgcCbFjdu=dMjsm&)KH3@S#*hFK?-VZ+j7#q``MNi-|MF^#LDTV)=f26ruK;5h7g+Nlx_Ky25 z*^0`TmjRBuRP>m-dSWrT6_>`~Y1lM}EsT9iTZ*Wmsdnzh?A6WK#pRD4-qSEk(-zI| zA;FnmYoIA#t)~0!R?x=$Df`=loCGQa+F3K_$jRrubGS6WE{oeJ^P-G4dyR_hqx~KdYYbJ4RTC9y$CvGZc%5`%sQy7P}V5x~`QKm-pttyMtl0#al{; z1W7!j4?$Cbk$Dgg&9dZ~8KEq&2Yxr#;fv}%!_N;^gxj0>35^Zw*@??8&e-t}LYaI5 z9I2EBAJ|^Wze%!tH-;WWWpSX(6>k?PoTYHj$!-6mS=)Pbt;0j%6W*utcFP;h5cF)V zsi(YJLr>WbTOP&TsuO(OUlYn8CC3hG7Y6gOd-(iQb`|RN5o@jI5<1}K)gkuTT#l00 zSBh2idr9lEmW1oo%gefa?U84ucXF-7zLyzYJ9&6-nbdY9=j3cGC zf@+tWkJIUTKeu;HDR>iQyTK>_BjS#aLxgU*hHD%d~y<~kY z%r>Ha^FP;-?lAT4shI(Z+GcK~*P05>9$-#C84{n*W$&&n)R!VV1n57(kDwzETmK#5 z*0Jpja>cJN>vAu|qlWXX9>3^3cl0^T3*y3U0FEYj5LE3jLocM7Y8}QHvfVI>0!%g- zDGA$uYbh{g_uE}>EM=t1eWb8WAmOoIV<+P|dm^1s)uPY2;?q}-Aia_~`k`dAx5PFS=>#=ikjmp$6m7pV7SCSP()f~!pyJnqHnz)+PXNB4a#IQ zy`NOcWn!+_R}aQ6J@D-BGn$K?YV&`5oLz0y=w!BQ@)FBa*PMQz?MKUIbPX=ar5nZW zcRZorUXliY?65x(5pk`Z1o&7EcUJG}sdaoC=xzv<(C$&_g*_f5!Go{QY+KB3H&~J( zy2A%do@LxwdqZT|0w;hVcqpA+Uy@g*v6s1=u7zC1ZnhWhimaVXhwX{;-rUcyjEt^^ zjO06Q&{>6;@>F`m^f~_2*3`;d`ZUJIpsN(qvOO+*I#Dx_zy5VASV$*x2)Y z0}AbGK=Spe8r<*6V{!|6&#h=^Ip(>)Lkw42T{{CYv9Q_f!7v;SKUAoqNCFkMUF-_M zOP*muh-Zf}Ho;TF7eK~+Lic?z-a8j9tVl-`Bq{qM8 zLRyPy+}e|bZ9TfQG5!EJ34@L@XTTwSts(t?SLdwsh zcBZ?a+__&Q-RT5|uz-_Hqs?%qM(qc}wf0fPw{lXc3Q4SbCw$C|u1gw8t#iP1qMc^5 zoD$3A$L-O%Qwp9x(^YuCFzNG8qgDZw6LlvO(92|AN(JvNhOMYHx$!;|PwY?!%eH3v z7mB&piyhNWjLCRjmN}I;;N=-o>|Qa(1V& zF=>r;7fI(M4o5{xK?P4kwL8lpz)y*c?w8ojkt(^BNS zG|~*yklfODnYxCY-W43abb4q38qS?9l6_)zKTf4OJqg0`C#QPjBY$SKW@c2?DxPo; zmUzT*5#YBE9g>SZ%`->;(G@sQC#flMtAiV~UsTk+3G+v z4f-G5xDWV#%xLbIuH)~_V=U1QaWJht!*bMM^3K4N(I%DT7k;`j>rsV5^Qd_vIDE2F zK|;p?@*#u4USJ$uEnkdgz2yiLeBM>~gr(zz_)Q)Fo}$P}-ME!;kHL9Cz)i;LsuG9;@pUl-B8+nsGY-rso6A+++~Urw2k zOxv66d@B!x2S%QtG1aLED;luG5Rp)oFnJ@P*>f6B-)s(z)(|Z2yybBPA0&Lkyoa7m zn&}V+v370v63bWzw4A>~gPkRI!2}ribht26-0+(N^S`vU->!ACoUqf3NVz*0*v>Yt z8N^F*6J}6J$Do|C=nf`(-FcaI`!9zbB+>r?n7BJR!MVAgV~+3c85d5bll7PeE?D?x zX3V5BR;QPOQBq)3K(LIQL}uy}E#8v=YBNF222HW8E{r)NLmrh)0isvboQX5t%UYIl z_eKjjPlmflFZQ(CPXy=$S1kC<*$(cWxPL9X>E)rr&W}^h>WdbR#?i+HPyqoVta@SV zWBqsQ9|9a)#fx~oW?O`nj=`&;jh2$6WOxAoEN*QJxS}!>H44hzhQC`iwVXuf($tKg zddEv~X?Cd>Hcl<7%gMz`HGSHLS3Dg`8cd=oifz(w9Nn1}-*^ zYQrzaDn&4j^DSSjHBUgkuYS>N?(O(?@m!|G1ssv}A?JC3+s*1gfZX!O>&BNdIr9x> z`b-WXl^eTeKLZ4dbi{gp)IU$D{8CQ=pQN_>KmYvygSW-J4oRhI2LG>6Dw#IBLP3u% z0~iy)<9GkE1EZCfVlHOS`L{&%>B@gKUgjcINU8B(li;rr)fD9wXWzcFd0*~!BguLJ7y4qho`s<8E`{5Qn zzBfa=ecoktH6GJkrP1Tai)B6h-+Q_L&EEaLba?GQyEj{(&|}4^BR2<**6HvV7$&h} zfKC6GlHKlKZg+)xYk0V*9F29pHhVm-_uWcuay$n=jP*Dd2}}CJXqnq%kyuq)ns(UE?I5CY(A&|KFlUcHcsK90hn~R7dQ0 z5r*c|Eo>H%H!9$oPH+E|0Yy@d+nhejDk2(?PqMVO8P~MVvJm|8ZQY_v6Qz!Lp1X0~ zd7}^4PfujZ|J4HLgt-0fp9w{th)4mDFY3Fr@M-cM3$UEylnRM;0-VP|&kl}G!d2s& zhGzpHr7AsSBF}R=ul!Mi=U8!x&^yiy3*@tRqHxVVY<0yU7B*G7qYRBE9JvIx|D6nJ92tk{p8us(LbZ2mw@SaDSVmI3+(j>6OOW$1d@pW1-aq`#VUB9nAm%* zBQEfil8f~$kwr`Sq~w-vkJPMaA5w=l&r5r{3=9EYluf5=T+perzDOPX5 z6uu#k*8<6~*~&1_@L|?Q>1U;iz0NJ)6^b)k8B)^PB?VvAJ5sME!J{g+g;H&IW{`&C zTpZvEvm)3J>72&^5F;5t&8FS(m3D_<=<3I6m;j@D4T3!R+>zUEFSSuZYaQ-gQ9!m^ z;)DoEoeV7dR0ylmt2ef&5F9$u32a- z|M_0l{d^=|mQSUc-YM$~L;YDuR9ArrXsZLE* zi9(xF(DQL$W7^8}A3c;MVe;oj!{G7<;H+;n^rn~eNsPVMeW)j(#<`d?)@z9Nzdcja zw8zIIlPR2{qjVoQ2TeYHE z$xe5DQF3%`YVLSm6p((xU)&_2d&Go}!u6e9Q!go-*vgdyQbfN1Rh##^1 zf-5l%T2y(0_?MoW+*-7VA{lLt-Q+a5-j-h?TjFu9JOE@f%?%|>Ufp2YzxeT$$x}d`@lM zhVwrF24!z&Al`of&bC9mH6()@9NM||K5D+yd-bc;^!uh`h#lw-wzEGk2nk@-G(QiF z-U=dn(K5O=LSLK0ZvxLr^`g?CP*b5)HTH?AW~z?_nv4set6L*=! zv${8*i5lN#^Kw?+w<63{P3k@Gg4|A|l}~raygm=OF3jW`mlodkey243qPHa+Dw9)8gy7M`a@?4NtO8&*qRf9cR z@6i^_GJaKcP3{@atV&s`?k}1hHd?K6%i%2v) z%EHl|imqkTr&2_#*_SacPuQ}MWp3=X8Np8|qY2=)*$edwM40WHEjjnq-!1t_;1y;l zj-C=7Yn5U0L<@tZ>4&XRQ9|mWxj*vn7Ujd1`I%+vT-m2QfEWmBhJBJ(97EIqh)TW9 zB(*X%eXI!k6r39!fS*Jl47YT`m8bn?Tj?#mKv>H zD>AhGtB%2oE$Y)?a&=A&3Oqw@yv)j0ok|wpn%pd9>nb$3qMEnUBDbYbOhg+MX33W5 zKzLX1b410FyOz}#i=E^O$6M?~Qi8J&7XT^@6;j^lSvKz3XZt1A)E&QM9*vaE1Yek~ ztVp-9eKYN{9P8;Qr+P+XLktppJsFzGj$Jj@s<@{DN>C(aR=2FgS*?vN(h$5p+DM_l zZy!K3Eca(^dBu9yoap149Xw7anSJ@%*c5o+{jq%I(+5IyiTWRuj5(~*1zeZ0x*k0RvmPc== z{m`}+$ul&ViA0H(v{wY6D-Zayyj$#lez2m+r%4F1%xYK)P%7&3+FJpCFt&2G$xF1+ zuy$M%shvZ`d9H~@wvUQMOf)*9@-1LZo_0TJeYa;s%xg(TN9A}Ut@D(hVg`|BB2YE1 zXen;;`hd3z3ZE+L(Uyfh^PRgF-fA$UX8YFA9~8iOxBIiAU63X{i$=fqlMb$NM|r=& zO$e`Kfe}Q9uBHq;W!Zhxn~&< z#qh6Y2=(xIb|YLJIQTBRzuITcmWGbY?|L#=ChnY$GK}zhP z39O`Vk?ZmVoq`&96AL{P2xj6mE!2v0)$@`JH~1)*4gI0DzyUcrIuHPm(`pXsOEr!+ z8364Hzaq1o=I7?!j(@Iw9(10jcGIKuwf@WdZ|PgKI*t$Y+>0L4hDpAGZv#CzPyCCz z-yzKn1eb5NCC>FTet+DE_4y@$d|EZUjc|+n7(nRhtx~}&rF^c@rK43g7+G>JJQpon z!3qBH9e_dyxGL`}kRvp$4}9{H$iMP2C2{_gzgjpFLn3VKf6(@pL2b72zHV@*NN^99 z;O@`>!3pl}?p~xw(ctdIgF|tr6!#W)iWewQph%%_`yS4owfC&E_nJBDd^nlOwBQEP75y^H^Y9V8tda&;U&Qo=!!=7krJe0tGAOnFR+KITFE_Fq7=I;g zJ?eOB`&w&|au3!uGR)}v3C44cO2JC+wl8B3qF;PFos`S{?$EixVPQKTc$~MLN<@11 z*c&Wy#q$>R7YQOs>d*rFE?-^{To-V(6!a09ChhG#Iqtpxte_0?x_?*px4tHJkIhkk!m z_cr@@JHZ#%^{NepDmE$XAzPA;B?i3ITeRmwdl`Ed@ky2_7VzH>UpQ2};1yH(o07W5 zO+|_<-jhL*lM$2^kJ0E@>(qaPLTk6Bjm$W29&0wKsxFq@Jx7&=O}GmXlz;L?)lK`3 zB9lPY5Dagom#H#mc@T4Y^XaOPev6*Ric@a7onJh5yPuUfsTtmZ0yfBu5}@P(^+8KR zq5c~d+WC_{{I=LdZxZWwnV8_Oe*t$ixX&Ly^#$zw3lMm5vL%SRXqfb=*hFc3M)Vop zOL?qsIO(qIyO@ZZF0to+$$A3{;#jZ{j#-|d z(W|l9DsavdUnhG+2SUDe)Q!cg`xn6aNNpzSRpsd_9W%Pq9IPUH-dU2|_Ag*E+JtHv zU26hEgUzSao-vXTqz#Z!rz8S=H-{j1P2Ljt$@z>g{^4C})YMhK`xl^iMPnmSyp3G3xcra?B4SynUE!}!3$>`?Ca?|_yOx4-(Plr zGCqV>c!d!a2gs?TM&v2s^bsD4@sC1rM154jrZ4>sF zow4X*x*T=56l9N(9t+)Ok0afz5UIEM3WIb@n(j|@!pB$0onFnFg2#$Z{Eq4%X19FF z%?C;E>@>Y-2?d7&?iFJ>+BzhoFB_C@kDk$rpt0jf_Q3hb{hq(JV5u@VU`dmAubl_W z@N#p%T)KPii#c;;Ib0vIsF$L>E{>LRRrzv%@i%?VtBI+0PL4E(bHg24m-~dplV`{G zKdg^dLHNcn;pvo9Xk15cRB*oVg@MoQVqdyva#g*Fqn|NCZM`r?4N0Cq(bUfR4W1vU zvQC+7UD(b@WF(9zu%HXLG}(zHEb?JT^`PeA)5*IlO7v@ukWM#o2Pv)6Glfx z0}zYV8ttukyFC6z4J7^&)3YZPUFuxwa_R^gCsmAq$ETM7^1_UqKgt5jH7g^)FcycL2io_@Dhk*%M>NZ zFP$3+I4hQmqWV!3W^7v#sbAdcviD7^CT|S24($UrE8Q5a$2P!fO0Jbx@?g7AH3+2q zQXC;JzX@U z>}`%GeyY~l1+2^X{__Lfq0!)b85Wle{BH-lbRWSM9S(cnByDOKF-QsLV)5ev7yKWX zR|mT=^HhgKLtEIHEg|H4#OWSm_V^Xvr0!^h2S9vnQS~e(R7SMOTFxEAh|GjA{Dr%d z4VF#hB1A5&VI7A|eOL!Ya~aENZ%b8Xk`N|;7;4tp*yC$9Ihy|bqmnf`1#wJ5#)7Rx zJA#6bNi3E(if>mn6e1(cBh>h|JN*r%o8JKhxax4lrmC=HaX4l&E$URj>Anq4BV&sB zG)>Q_4Zfqr zgdZCwHuNk&=XyP+s3HYdA)n^ju0}CtF+iX7`3x^ zAdQ1rhIvblp6~`q?fy115A*1d zI>p}+lrxIIqN|9UJQxflSfYF;9_a9t;~GN{X8G9k1Q7xykN}=Q6l}mtW(Gk0El%7> zTjsb1lH8zi;^v9XV^I_KWEM@!x2ecUo}*?{E>tgdmxu_BePbJmTKE-k!_dH1JSyQe zu0w6tif;k>_3<*=JClSX3e}q++OP&28wcLaC&PLcxduDuEjZq*3jI9$lasXb_#w%+ z3%8t~bTDlAe9{m&OwoW*%?< zOax83BDFmVI-t4M{YTHhMedEKk7pq-@shH==p8MQ7o#@H-9d}7^B2iHSDfXk z7}UME8#e88(=GVjyN~H`Uy(Xtz3T8d^mE^bPwypjH~ByMxRAaLxO+wh++W{(U*h4^ zJ)rDTn5kD#s7#B|5o$_gZILmKw?TOdZK2!4oM;+49KvdRo$+kj@5b8RN#byr9NP+f zYg6zQ{`1E}w+3=2LUK~B&Rcwz`8yf_m1&KN=oe?XC(ZOjAWvnc8^6u3+V{YrU#hr1 zqs4ie-y?Ry-ikc7oi?!e3%3|Jv=w?8Y!RIFz-E7<`$YgyVBKswVpdoI>Qn&Qpoo3p z9=8V_v+-5iDB+7exyxK4KLx;6PnBtIJHbQu@gaTEeZ57hA#=a$$$^pLT!C=(0v%Jv zrJtSpdjM2|b^wOtjfikWMT?})R689l3?Q(S=VWX#n_`(nrpHMN)cFGf=$QDU_0+wj zVYp07eXH$jbk_#~H>y|6L`+)<+V(X)ef}q?7K+v%^b@*)Lo2}_2FLUD{Cr>{^4lbH zi6S`_$ImQDhc1<*g#0svC-4%LcTKPzexs|lk0Ta?c8{&Ehn-<|b!r*Q{rFEKZwxMg zaHktslt21@KXTVCP2`m}fcOCo>93m;Djy_VeOZ{ch}{-s@LATu>>bfK8jgm=Qx{P{ zVa+9du_{$<=)h+jyJ4|#&n~N^#GaEMBq|LX3`Bb+eClpQWz*`gJ%Ie7os^Y7xE8Zp zyZj~lI&$lzo5n8aK6Y`6xqWA?59TT~JS=WVA+Iw2NAbGP+iU%@g0uX&>xd%MmZ}fD zvO>YCEO@tqZ8wCiO&_^So8n!B9b;{&v|--3@u%yk*Lb80bo-xNFWrj>~6 zk{gYU%Ug6dI&uWGZ)&s2=e|g=FoHOG%w?HU08mCii3d71yYRqZ&Tp*W-`yqdWD5Uk zUcTD@yYR=z)8qL1pi}Z!;~z2i_kt4=dbx^LAdfk#4sPd%;9P7F@mOAdGFqZI zo`ZNw0d1leE^jb8XXUThy$Veu?@VXsznNqC$+^B`$JBZc zj0FJQY|yF`+?hJ>yQ~;K3Oet!c_B~S(ItmKQf`gK_%|!{F$tXj0)-KSMS|yTOm?(A=!F$*!39>A zFy$Q`4mp%)k$B3j6m3*&KwgJlRRVkVls|J!yS87w$>x5_*$Vks{=4Nu$|axKVpab3 zEoI7P3I*wJGNX$yEhwytAAvxyxtD#HA8ygzH+kXA+xI)OTT5~#0@th^Fot)sT8 zHbgnSz?g(uxt`5Kj&#m_C7{6c69d0`?=H;Xv=eRt@{3M9A8xd7SzNx#_22BNE>2J) zikdWTG|wW^>Tun^cP*Hlz9$#PbokwIci%9|Z?Th;??HL2=hX}mK`Q7+Ah20LxbCn| zQIU!1gbxCYJIhC+X(t9*^@ngV@hqW-k}2~??h=;dbAs&&6N_5fj?lB-(oo71W_@v1 zaAv<1S_sC@vOK+Mj2PA?ldB~;-BnWdlCOCRNUKX*FcW1KHH{2?^b%W3pI=Ksz8I>k zO2wGxLnc{}^U+M^$dkz@waQdro9>(mH{R&cyd$v2HGxuea*KCGYnFingoA7rXBlyh zMgp{={BC7`=*6Dwr+ir&q-{=Y)%n?RyVN*H#i?@H-$6(2%+71>l^^KqWIU}Qqlxr&*cno&f(h?!Xkc=qrFHeX@6Vf}E zCU!qEBq^>kBJF=6Pqq+{aeAY%xu}_^a4)tP+y2~=f{sF-BG5@91xl^P_@lj~r344N ze~Asa{nps)_ZU!av)$ZU`cb9_U(Ptz|2bX-NhP^OkTci$?pvGu zZ!JV)8%CaL38io@H({WqGIujMXEVsjjF(vELyl0rOjNys6yXZz0MWIfnglW zN-=nmJM9kvuMN0zQ*3Osvx?$ux!U6RXXkAqbF_4!lO;J=;GzU@c?@A8ELbm7|Cd-| zOdoNVU$w3+tGI-RDN?iX+L4TLjrOzEg+#hqHbyv?b zy>F_+yBZK0O&cw)-JhOmUXWs56fuQ~ITB+QC|L#gfjM`;NKbWU!mYE&9&D4OhcFx) z@K&4?)ixl>`Mv^Ff5Bpj6DnlF^=8ph;u!6)7@1e=`!bR*OlduBm{oP^j9yxh|F8A; ztVG!6`s)`N8T%iXbiII2f4ZJtf7d%0)!=uX=f=rl_t{XIB8DlKsr9{Jb`lU)R&h_qba-rW5WgKQh`1WX_!)%*imX2*lT8(s6IGh7#K3m2({JfmqQmaYV=Fn^+E#G=PcJ!I2CAaMljiNWDLoSZ42^ z<|op(_a(;bF^di8+%#{gflWJPGtq>V67@_yBzXtDYLr7*z$BXpY%J(0(_#8htY2)g zafT>xd$^{!9(cuSRQ{zcX(LKfiCqi7MO7ClK%)b;Ln|#T#ooENU7Bmo&OKRtJ~gBb zXa5QRtK8tMQ*PRl=6#F9(-%09cH$jg3|@+ zBXeTd{#VM_0zvX-IO9q!wiyK`YW=Q{*EUV2rc<0cp*ny%PmO#%y))agUBaIw-wZL? z7My_pH3yaTSuO(0tQ;ksAD>2E8jH>}|K>P+<|-;9*uQyw^-QAze)_k1tGC6i!=*pF zO>9*^iZ_!#UEAS1nGP8gg0N=HD@6s^#K(Fu9U2AB?XZULwox2SW3%0QXpcOqbU+aK zKx28Z)ys|?TFORi2lGB)KGene?J^RSL5d?U<1#O^=5e`*Ev2mIV^63zNz=oKAp*|? zvx-0^fSed}3C@ZWje(L>tmSj`8zYJ;-EdKw9Pz34b6f`=TnIxy`VY+A$n??q=%(gB zYb^auKcDt2S#K0o*UWVO3>pnqvSr&@UI&!f?e4TqO>!*=ObEHG6db9@k_s?A7M(DS zl&S4uoHHL#HUv_8+MAxE8loVY3%8Of|s)6Pfm4O_IE& zC^IUjnB&IG6vgN;ATN^!hF^-T$)$si80)6oikfqZhF8y(FJ4XWxZ3nrY5a}ln=x@! zbqm@#47#H$nrAUN){;obQYBE!*5v`BaKsX$0kELkWElf-9uPrq6Y}BDq?n#Gt>2V! zIdBnF>#Tj{RyF{@pPGmii4-g+*Nc08@J(RXP?OmH*ih4%?rE}QYttLM4Y_&_guCO` z#GqhRCVvhH$uA4Lh8`EP(C_`YA-vx6t?hFA?R=+;W4vKsPv-9_~{(H~`lJ39^ z*(%0SwzLk8I6{|jsGM(4`MSB5#al?(mP{!HAFa^W7dP0+#8t7IOF`AXg7i&Hl*X6{ zxxhDkyH zUo##%I<9_nJd!&zomt&<#*lc2y_!m@GUB%k7hY2tO1Uag)2BZeoAl#D2|nUOCF5gD zG1Z`JQ42Y#61wI8L8_x&_noqi=CB{LST* z(2w+Vo=X;{%{u=~E9~$Ly);dnI&q&}u7rqky>+4}-j#V{2N=Rc9|lpSZalO>61tK~ zD%&cJLB4sjyPznCPZ6bT<{k$y+UI>VJ1+p84{=WpOHchD-Y1#jan`k&pWo$PtA3z& z#@A`%l!GaA&%p!mXhNb_INY|0&?iWdG#Ze+F%)qn=a(ZP)Q=*&1zQx%y5RLzoa}|2 zq>ySIcWnU3%9@Q>bcyyGC4WLYuJ{lkW@Asy;72vf^UL$R(T}{fC{;!ppy}1=GzC)1 zKjk|JEoe;|7Mm9x09)tk_hII%O2y8H`J&+=bE2grltosRv4LJt{mc~yJlopQFhI--O1EnhaM8HWM3AsHcJ&e35Ulqf8pDU zi&7Q=Pi${G0&a%?jHqaeT@r3{rj&CwSc??}r#5{~ZPC(T5;N@dd#&6=V7Wj1n3Le` zGG5PN>b~9Dd`Rnq&EbZg%^%Z~oP?S{Sx$8q3$;4l`yEa9_G7g$n(43j-kkTvFdcu7 z9RYYgHMf*)27E_JAx}nW z%W16=+-Bb9v~H_NCK8NG*&Ncvn%QZ%H2=8op!VZ3p78e0*i;KBG~Hssf*F}4Yj%vt@qT=tq#^EZA&!JN7`GT6mn1s zb+%lZ@;0gRp1qINsW+4N!^+@4%z5J zev4XpF`|kS5#bveIa}nO{^S2R#+KsETunZoclt~uB0M1?~;Oipx*r~Nir58_$|tP znIq1@c8al_QD2mI7BX*3tEy{<`noaLmZ9n~+7K`J)zNgTuq6EbDd(F^^IZp*Y2)eX zHnQA&ycpQ5-58ngU8xul+6O@MvI&f~mTIgDemR$nbLZ{twtG`$5Qv?_-RGrn{g>pH zy!Z_1T*cTr3IiIv$=;haLp>1*ByJtf33HAZfWD^A92w8qF5=nVbhq+KwA~^NxQeRg zW^&quGSx=6XaL`soJ=r>5D6!sm##;I|#gzD0Mrgry) zpDAYFN<`vAk6({4n32>jJ1LBV-t3 zF1HrOzC2*l?qF>??rcV5Y#NEfjz=7b-Sm+q#zTk2r)bZk9E%@~9+i2qUgAOIcA*&D z=4WcoVzRCs?9LqSwPrhaE?t5<(b~~fNjsHSk8lcJ9by49WB>rND71m~sE_;q0#r-9 zIU7RBw?j#da!wG&y&?xX>&p+F5>Bd& zXO)$R7-i+Xp>$PoQ?Xb07>f6#5w{v$8tvb-^4636RW9R%l3Sml7nIwoV+{s`bVPkA zk+e8(9QCTsScXpY733SVzs&=E7)RE?_Z()gY z0q5NgC3FKI5u!xIOt?0=Ovc;tt!adK?!{>B?H*qXJ1T28MiTWT8+dH4 za#CZ$n01I-6{21^q9P=l48Fr3X^VYCXm&?^TcUl$dhAaath3i%F!b72=*;j7mu(0M zaXpnS&KBF(zkq~1SVZn73UmQi88y6tNf z>ufAXuC>qi-xs=XsdWVe(;da$BCZXGatVXqyQ?o@=}>2bSL8<~A9PCQaV}7qXcYi~ zpqxL`93ByjR`Y+V08dY*{bgpv-UA~VIf9GsU~kfzv<97@g`*qk0^^l>Pp*o2Pus1g z58(87i~x1a**vVzCI*8u1P`}Yk7vR3T{q`{KV1}d?~i!?aCNom5D|s!!bm^jKb@7^zr>E#0}1MQQi$|kz#*iE z6uTUaD~`2f^bWOYV{ltB1*kw_k{KyZsumid_tGK}uD-oVWo02ZH9x|c&b-3R!6~6wzeYEuv{swKHV^|(p!yT06 z>$&|EMxOIB_C{ON^;0!fb*UAt#jt}A3+s;Ww zxVkMYG?;+L!fKij9^%zzby)sxd4*D;1QA0&r6GeQW>4uosb)PC{jW$L@GU+#W0s1= z=Lt%`?lhiIM=GBA8t5}~u>s`^-vQsm4CN_HW0eMn2YZg$7hA2bc9YQSJrd;B@UR~& zpp%e$ZZ*$vByd#o5he^(i7Y^XD8%>&H70r-D-;$bHi6pTn+1_q9-`$H&6I_^iz@^M zJ$(erNoDTerxi%}+_s~v1yEY_lX`w{sg_2CKn2@J_JM=`;c;vdf^W{oGgyN;&M&(2 zRkGI5$P+3Tgw$(p16g`zy$Kx^(9r@btHu>mtJE4rYxK(7B}}6VuMQV3>6hW^C0&oE zjYi0h!9VMl>O3sBg*Fu>7G50R_#*_Pve3iGC_4N<$~PslO~tK|=UTHgP$cFfR&Tji zHS}9kB$Xi6#(J}npJa(nfWRsEcOMkJWXNC!LM?9hFpw5r%=kT#n{mYf=HJ*ND&%|m zN5S8BqT02?ZJ%|?GzYXH&r@fUm!$(njnF+3%s8o#QuJo9bGa{M@-+3>Ytldrh|UG`9?sPLlb8r`KGQ$lLUBwf5YeX3hZF z^V8z~6{Mbdx}7Q}nuyQXbZu!5R=`2tFi88eEDBNM%KoTB!Y*GywQFmuJ@@+WUODMM z-AQWX;~)=eqT}JS$R!R1y$RAhot+QrVvv^AxGK4NR$Asj3eIA4Z||N;fd}aYEC%Kp zckOPj*Zkuf5ajX)ttJ!@7C$K4iwrQq7KnJs22Spu0NCGoIE1X#PUtUk5WOfAy=Ef* z>l=NF2M$97s*z?we2p=!tdrSLP5Q}a@%d~|r<&QsR2d$i1i&9%c6-2<>lmizw^K1NJfcuJzvW;$Ai9_N?e4Q~Md=K=??z z)q~lD7_PlG8&Vub3U)`!I}z_9^ggR~*3ULp75Uzfs90pn`LglMFa2*iusi+(;Kv;m zJTGG2|L%^qrhvn9b8bOf*DH7dGAkcpwa#E7J}wayt@CQ zf;=X^-+TbbE=eYn2&!0m*BH1We!r;THCmu_4sRr1C=}r%tz;&fua|#wQ^V zqw=_*T74gdN=iDx8k7YMeNsGzBp~Fb`1e!u)cAeGUJK!U^MH(=3uc1+yd!g z;~q^78ZOJ?pUbh$#7SNbivUc#fU4*%4P0+uGxr4tjb#QIYJS{$_%v&Tet>y8Q@!%) z3m;vm1P07md!R(c|5Ioz&4lck z(_m0g<-wmKWa>oqL0z>JIG*QVPr{MEi&Mh|JBw@;M~w#@g%!M8tPayHF=vWp+3&11 zb(aJ)d(MSN2?^?bQgLuZD`kGKQ<(QksOK8;2ngo4JP)q*sAlW08JYuEWZ@zv8+qnn z`1#)LMVWlSp{gM(KsRp%8D^E}%N1G*=Z|H%?(IP*A+%e0S759ZqfVPW+s3NN{e*L6Xi9Cht3v~`Nb@j)@_e1DhM`b#>&5i7DFSn zh;e_D-?vVA6fC_gjGy|iK1~%omwQI);dKRskcUcBP2B2fWGhdNpOM;W0#~}pnBl-6 z$a|gS_#NG+ja*^aBr6GUI)LB=^@2yhdYq4rlfWI?p6ktcsZ8@OpW_3^uj6hSpq?0H z7UguNZ}DFL%hM^gM+YNU6N8^$rS25OJ?= zlGD$ngOkH(zvFXOnbz_7Vm}ySnUi#6*(Auy=Q_`_!Xr?+uw-A3iGxl`g^EbMwco?4qIu)8xl+5QE5%3R+NS#sBclU$JoDi@Mu4ZxI2{pmZpm5eVZNC;N4 zBk}}TGGq@^^xlE;^-1~S!C^`9_5{m5AS+VG+5slBMWpb#qM>H;NVHvpvAb~H(!JuY z{xag?#u>{&s+1(%sG6+p-ReuMsv$p=Rh)x*k}VCpyL%2o~LM-m1PINP!jU zQ&1=t^HQU%GyGm7%=PJnZ#17q>r%c$kpEpbilB(XAfA^9%5kOpRIF@{JldKJ^BHkt zRKXghf2Nm_bM!L&h8{RM#jmdZQpdo6cS?yC_PZstGQaN`(hpHB{$uer-1P68=Okiw z4PlF~K6M-gxXv>31*7W8#~VoKNt$w5bfpyrf0Fi49u)rL4tK)0mJh2d8Fi7+sLvDu z&+!H?=pxOID!;Br%BmCm3&6wz5S=Xv6I7`-oA8_^@r#-y)KF;DS+q*Tg-CiFm>5rp z-_9|oIpr@8Val={f$XlYAyC1!QJAZmssVA5Eij{1AqJwFrsVk_d8dm)_}k@ws_$JS zjb=tIByj(8*2%f1=lpFQo#9&2a)G>8#FA8?acEm7tLc#Vf9gHJ82<&T_P=1UzPt>T zp*g%osO#vpMzL?0U+jNkvwrFb89VjUxz1q?m)%vwOr?3^XwSZN??Q|9jZyOcfXVNH zBb6%?IrJ}}iSy~E`AqU&IwQyb>?mca-k%-+2>3E>H*Z}Q0lb(e;Jf^!E3Py&oN-!1 ze={vp@Z>p8m-tV33v0{a@D^O!ZPn#_`dNU+)<3V^^&3OXO{a>PT*r(GKD$(~2CcWW z(#GJY@@OMmu_*@xSjDij!uA0S%691JUjA76cW5y=Ee#&9^sX;CT4ya9JX9~xQ7|Ay zmIRw(RLYA?D#V%{SUR;nDQfqD;w)+U{W5LXHE*NnQ<%~Q$~XtJ@7A+tGyk;7nxHT7 zg>5Rb>jZ^XNO#CfCL=yLI7=Sw0z33at2+%HrCdXcP{v15x6kDpBE^L+jbD3XeyZv9 zH>Z=@*3b&x@O#iGFDwtMiTj;iZBz!zCEk&NhWCYuCxK%EY(rU40WC&HY2Pj`cHn9- zV3Gc`^oBMR3^2Q@f^O<~ZSwLRPSAk$opClh ze$TW#G(3fjF1>73Smqr{R3Soegs9!^f`rel+(j^~ zSwDk>=vy*LD_=g3OAHKXMhwY1eSw(J5{TZa++e(ELE!z?z5Di38dWR1A8;})i1cb& zx%=mx@Na>$4(5OvQfIR;7Q)&krW8g12o;qdkuQ?2R)~1dK3DY-dg#sYHaUaf_v@OQ ze)^~8%%a=h?4p@nuU)&y{z@EFCp>PN!C!@phW+ZuD)i~n_-t?;?9^IrX_6;I_J&dG zj=}@A7fmBHnfgztDS6THLQ{dJ-K52uP}P9PmT2w(JJ*EQ$p1>T(BUW@ey`{ zkwXS2uU@|8WwKJ*s-$cD?^~Ix98J5bK6a$hNR(qp6oJ}M*+K}%>cz}XT+wfHZ9?U95c zrg{Vxi2IWQH(dUOirU<8yJi<1Qs{g}(@>YlxWU@TU=Q2NuqV^y&pPoxr~9rl#<|W} zWXROqd&zZm63*FZ=vwsywxn@mJT`gyt(XZNJthc*G)I8}pulYa(_&kdSjB;huR6&B zqzTmAm1BaP&f-pC=(_@1Qh%30)Tmxli2;syS#;w2HLcx>KM9GwUE7H9*G%j_W^3e3 z*iK^0`;`4NheK1!Wk-K|@)hHeUh)?Z)FN)Eu4yEAcQ9ZUxmq~0I@J8ex>6+FjgIXgMC&pLBu0TA)8(mjQ9!0G zvady~pp!<>4G6Rq|E_<`!4(O9)3~|7*iIVv+~>zr)y&c!(^|fCrS24$$U{ixwG8_g zpse>ji%cMT(-sWyCgyW!%{<_Z7iv8FuEHJApGfMjO0994#Qo)hW>%Vi=-_NIbgqf~ zg&4#E#^j3!d}Gqu)Qg(w4*GIPawR2xHP0o?qqX{dSh8!5DQuF9KLwi-H22sbm6?SF zu(5(lVb-5*Z1k18AJ6%!OQdI{`&HE9V9n#VUgc^H`_`4sgI+q1#C&i-yWb=HiB1phC8ygbMMvV+ZOj+!VGS8QVWxDs^une#O*z-i3uIJ#k5F$(iF zB{p`bSvyKO;YuwRE7pOtgI!JRL`rdj3e<%;ZGjw7)u0HvJyHs%pl=IHBhASH6q%M6 z?7AOcGW0*Zoar4;sRj4*$I$7hlFP-3ZM47qqwD_yq~U7gVoi=3NbZV&HM~D6gz3&6 zWiH*$g33FuJ;abSnlV8>}H$0u8m7iACN zAo&6lj+nQG29sbH>TZ?bEL{{1hizLs@1+T8DbBIlPIsNeA|aFa+W}z((i>d!oQrf= z9R@3QZefAFSsp8P50ss~Qylwb*9>ZU_*lRpbT8%)pT2}jxmLVh|7RcXUjSHiVuJc# zz>ce?C;SZg!TETmKHyLJm|E1AZUf_6=js_zMg*m<$YsyA4UtlH{5P5V1Q)X;p5N}t zpUJJse-xzKJqATk3PwH-40Qi(zQJ4VU_*e-$ml+e%748`Z&w%%u9zg}PR~DCrNf0j&pI&em-pd@z1FU4M-_O%WV{)82A5lFbgQ|=ZN2=ye znP;A@p9z&FWSA|DV;Z}`->2boTewf+Z#q*p+Z{m)diq3O?6g_Zl1jCq@@Q#*p;TC{ zB7BRde_hAk>|nN^TIp$HrIw{oTd9EXWdpAZyhZuw6)SR2I7lbI(Ol3uFdHq)gK@bw zYE>G+_G@+?yHMuSO?!Aw6K9O00KVr|I_FtYrS0j_io;xgM2(%wXH6$6-d{}MKrb-{ z+ojax-(doQbj*To(_73mOhkn~yRVUKV_EK%HnvDKWtK%d~|RTHFXiNMaH0_ zaat6pbo%dI5Q@Rdr_k|_gS;%jzAq-yu4-AM$TUd0wicX=sQ9wn?dp`yx8!ZZJ4Bk)z6CTj`og(u`d z7J0n;Tx!$Qsp!kihvT4SVh~Ijhv+0gb^3OEpZL48 zWe$Bwj@m+Ic5(l)9>Le*WO}C4EX~})I;fx*W^^3O10WwF@eQruSC__0Z&NIVS=ru> z0@qX>N%B#Z`i?_r<)i|7G)JZQ1O_oUix8~@f2GU&qh$|eJPoJKai+`ug?sIMg=IBW3n|`GT#9N@ zk<$IZ`H$jsf02ZFVu&hSp&*U$n1oMDJsl>1$>%-=m2Xm7FcAKLx0#lPRos(TlI~c_yjP??VF(Stow{^BnutRme9)t=p>31yq@F zq5xAz)dlJiqo5E*k*O&1FGSD5A*!<4g(l|wJVM1<(Evlj75Z3X_$e@dA~Nu0;YCGE%#b8Kg}(~g zaOvBrPVFZ1x$bWZ<7NW#c@hqO*g<1n`ii@`d}I9gZ8*umcj{lsGJW5)1mjPOvg)Zw zvK?_M?e)O^aDk#BdwlwgH1x3Z33umhp5;^(?0r&IF#&v4dt7a8C?8O5Ib;BaHh{>J z?!K5wQOJ7NS4l}uZ#});CagE^m#~dHCSa<{h{a&S=*<|s@Hrl9lm5ER;l%n1l9(Wt zp4eR^Wn7m`rZvr0KBgstYfm(31%(b<+6nIK_EmpA?~i4J!K(ukj5^aPQ>*$-GiIy2 z@``pbYt)GJk<8?RyzNVl=_B^IX!{T9WiuJuX?7NGaARd=&YipVFpa zK2+C@cU2pN?Tww6S(}qjAMCKd4 zX_vV9hw(XxE)Ty^yf#RUP6VWQV_l1f|4lMP`;QkvvMA*sEvBp&GdWZS_{jPEXHJEV$|-cWDH%*IB! z!!ea#*Vu@Wp(E|UiPDK&f%R0$>{@c|N_IJV9nu%HR>QYm*D(X*8ERk-QEfys0}jcuPFDTP_E77;GjjG{ybL|ye{vcs z4IeKxr^5{@I+FSo4ojPAmOg*Le!Um)v7Fmy;Qyhrs(5inbNv77j@Fw{`IT^hB@6WH zjCHL#v@gB}GEgt|6i?tqydwBhEay2iKt*kFzX7K@#c z-ICPmm~_r0e9MxbMgc7-lF<6PlALnorP~=SZ|D-s#apQ|^6)V-ol;k?nFp#B&txZ+ zBPiAX@24%L66giI2NHg&GFRZnEzUd&&CBR@xc7~@zZ>80wYrytui6W(&V&wSCV#?E zEmv!OIT}mfpSBH5gLF}rgXq!THyo72)1lqI89#GKnpd=_6LTN_v*c2X!m<)q0xDLO zfL&^WqBP#XBZe|!Nyrok7Pk5G!7je3a#9AIm7U~XdfqZiA zX-s2}r^GZcwjX|;Zv+Z;WoN*S%w9$?ROoE7c*(FQ4Cdmd8Z>)@lBdJk=qrcA9osGm)v2igP;a+Je`9qb8$L> zv=qOP_u@-!Jxq3l$9gEDF{F7&uL4I%tF0S;7j#8Jjha zn@8^)Y>?qMK%4&u5iQrwtvsc9orA-nxTBoYPu?PFCsR}-`42nt>N&+y(#YXdMH850 zyOIT^S7&k3XESd&7N3x)4m-d6#9EnHJ4cc3{OP6sNygBmq$&9PJ^L0)-t#0+&`=Az z9SVZ;EC+jjiD!rAmEKH+-7{nOWVQ#1fej#{AQ1%-y>>>x8P?Qq`X#u z`=;DpiO_~z1w_QTTK*&^a!yuMI*bj@%9C&$sCyoF5_u`SwI<(X=3sKp955=`H(0~A zsjDfm8Y(Rug$%cCDyl3CI66!}{rpk>j!2dDv?2}kxubkX~u69%oxIyI&vi16n+a|sKD!Lh3 zW0m6#eZ6$)w&IL`a_MV4SVr4Od{Kb2JMJE49W%2XR41y}d&p6Oja+e2b;NoisTjM* z^dfu!fn!2`f!Y763{rBLQpK_6-|)5|ZoEn1)lG!f;8TPB)}v00*Ii*7<<7U1CAU?d zp4aBd!ZWio2|06I2ftWHkE>+ggrUIk*8%}U$oy8$pUur~n!<iVtbHkC? z_ldC$TnHMyNqjkOMn3g}W>3nO4Y+{-o->|JHaBwG`Z-I{;+| zfYuwWm{fe=W;imd1DcsMXPXp@l#$6^4lg!5CI9|wqy16P9ObRo4C@ZxbK+>1Mn<-Gv8A|y6>a| zH?VHo0O)3ty1Kug;NI2i-44G|yTSGroikIBtS=BySF)}FrGQ{D9u6Af7kjrz7ndx-=tLn7f zl9iFD!=xR+9l`>Z9r)tZiEOXPLIrzd026=69&{jZj`g#&FJa2EKAn`}kDv_xFk+6k zN^^&STN^m2vLm|I{te${^VKmsje{=m!urE{ZrdObd+;hn21x^WU>V_#hqx}vwkZOj zs%om_+wr@3tYUT4Vf=H}#`ttRKg9^a61j;ZuT_eB!XvENDanzdAA3cei~S4i{6_n@ z-t}Rbd^yO7F#mFeadj0BsXo)FCsnyuGfwh)l1z@Wl%AR!YDW=ld3}M85}}TNxGhZ4 zQ^A%c^;#?;lxWfYbNjsxxu|SCwrQzq**S9HG_1eG9* z(GZM8h;e+8OX9HM!sn>Gcxlf2fdZTy3NE3vcn#>bQoBct%>$BUUH+3W6fDuEYXs`S zuCIUETs9h5NeKk9izBa%dwmeQV@=8V0jD4vD{`KW9E|rHfUGMJI9!lj9xnivtvNoL ziC)|nCac%6P~~IGXUNF52Z&_2YyuBy0aa&tOR+Tu&5Gr%Nw$MoacRiHN{nQocmP(g z6cUlFiux)vaNb!0nLW0V-l>cTm)JNrMN=%sz*&$n~w#E zQ(3&=axdAGC|<+8U=$Nj+Kd_sro+Qx#v1`P1HxqTcNj%8FUS(jW~_FpGJ)r9Qu%yCNqIT z0I@L)bpzBb>l!!(;v(8-Hh$b~EdvqQ?0%@`U)08(hLoOhtyHsYGwTp1p=8r$xsQp; z23f%(Wtc~0MXsqf!Q3~x_2PU%8X*KDT^e%*oF`Msh>(dTLP{nyypdZ;)itbeKVi(X zb;_=W#~4|Il;;D&$W+jhuTR3pS^5Q7DCx z$-2@XOQLnTB3hgn9yFI@T)4iX@#O!AqvA{`ut16Ukn{xw*_+JSsdo{+q1eo47^7Ho zs2flLUG~f!YQUh7G6-7X)^*;=cyEVH{ULrF$!TpGj`QoRfTo$+;bZw2nXUz7yFS`= z)h3+Mz5YB%Y-rV%?%+ov)mKrz=Hc~93LWnMg9g(77ked|DW!iiND!t9b=7V_ebwl= zUPScdexTt)xUl^pQqn?^_>6rqZ`PY+SJiTSksZvcO`Uk5G^x004SSo$Jd!aau!G|$Q$z8l#I*x& z**Ckm%?7n+h3d>QDpPD*8KB%MXWyCtY zX8Xz!rs26ynokao?DHH%B7=sW=1G+KM6{b=Ds~Xl9w1O4B8*3<=8`p{nl2y8Hs1Br zE9SQJ;7_$fIG#zqc&tYksQYAuUDE_@QLt_4Bj0 z%*YX1sI>j@&`moL`H-Z+4o3FEAlv0eE+;y_4$O=E9V!nJ4e^Ch)H>U$eZ)c54<)nV zdaQ7!g~)T#LK4tdQPF3Dsmlf;F+zK%}v*we#S9PC=rOGAg zvQT*8JgK~ZxLH7;a$*mvA=qWU;?*&if$P@Sgnkv1cH^VU8a%#m9UUwd@B}B|cdk>} z0RH=r>NMD5Da~l*!UT<-EeR=_E6sqnm7(PmJ#s&<@^lgw{&5w(E zijl3HG8gMQr&y^|1!0eU2*FoDukHhou9x-S$H=Fp6dRZRk2d@7*8Ji^U*oj_66v3& zd8v)c>5EE4`3mLtp|al-LWBJ(6&YRxQ%Qoem#f6j>S$Gt@7ND@Z{1I%%|x9%L0w`K}StG?p9cXPe`235Mq3D6V1k?E^cMs(0~b5HD9<_aK+;Ums@ zc9FjU-YuEhE);gVZdX0fDlL8anZyy?y+2N3pf~7Wy)_9d)K|>DQH@5RgUKbmAzDt15(f0#r6b4XQTog9w;A-M70&Q9 zXy{gek}l^#o@6or0D}fnHsf?38SP7TV3q2C=Vjtaie*cyb76QnTUG|KCV}e!#vAJ| zLSM;%w0_8j@>T4KuJ%3;Yqq*glUfvd0nV)B0+73?_>O7)>IKrd_|1?JbC;>2-l(m4esR4x1u zIif@Y<$S5+rpnsai@`hTe57NHyoHM-F|HAp6WZ${yhg!?mSskO^!&R$dfI;DMcuE& zNLw;etTB_a3F16mPxb zC$O$%t(^Kg>ayBbE$=uHcTi{4xzYHp%k9hAw)YIzE5-Xx2hAfLyHT;m1@OL11|X(u zB#svB6sPk9$2UBTzb^fC!{E$O>n+<<>#jDY_6?j8+>j5v$wviTOo>Zm4U&QC%B|7J z7kOeIrAC(~lL}+LqkyMd@Tk|xD1HjS@_g%UPqt_{3;QB7;n`MX<1h?ZBmlXC9Eg*7 zgsc%&$ja!xp|y*-*Iz~nWxhyD6y24YWq%i3X@Q_yiXw7Jz&Q-*o$DVKSrAM)rfmP* z=9q9vT{?y1K?np*ygnQC=Mlym{>cBGQupAA96j1f!f9!`Yvm*PebFys&T`jITo}3EqdO8RYouS}c|@q9@IsXN3t=zcAnLzX+tB196$A+UhFFE`OUy zw4k$#U|4Ev*(VE<8p)L6fx#ZddB}R)tF%=wL{TXe59;BF0x7}67NmHdsDuLbtDQGy zK+N9&T$CD)aC?0XXWJu|nZ6ATLNb*kTZsv4k+@aA^`1Mu-qS))`D)ubfq`HT%vC*J zM_zR}O7NfxhVL{&DfDHO8}77!$Q3TdE#A?NvO}jNiw+00_YE_+-h?8H%C1bk23X5t zniK*FkG~~~C0sTxmMb4SU zE$HbHml3G5EF>`VjS4qTjKhxFmV2LHIMZhcpUW5{SjQSGKkAMOBP9~=D*^0kt>I|` z-jt+tM!8~6%>1>QI}yl4{-g8Cq~dV(pt~A~JIN~P$wzY@D)j2@NLg{RWBs^i;Zco= z=CdT?**;7JazrX0R^^ru@&I14dGw=n`+ zf`<%6hM5N#OrLN>oXu5IpFmP-%vYIPXFMx8UujauYex{}*Q<7eP7`DGZT1@DEJJtj z6QhG-mbCbDZT5&vQtZ`|R_0kAuL$$Q1X}OkA%5xjGf2Ouoqcv8gv!;b>hEPndzR9^ z!k0X!bctgHcLst(kf+HG^?6BhKNEN!jv4V{$9$8dAnxZ&(8K?>lyL4H9_H`(Bc%}< zAyC$t)wEGBC-X$hV2%&2g#c4$0RSoD_vQ3+Vx!k&{a7hSr@ z%fRDSOFB~+0u%zd#}&Ze)^@GhN}b~L>dSXdp4g?BkIm}Ugg8=)9}qkTUl&O|d#P|` ztcXc7w5frIV=r4jNpQG)f4%W8bSC zaK6GBpxjAGuZDz9YGw$G=gnT_trw=FS(29_=7_gK`Up8L*K`o@kd z6Qt}5vV%jliPA)^o(AIq0DQ@>*IIzf0gBj~uDLyBZL7tcN z>r*F0;tb?hz8n}%iwaSeKTCvd-V19GEyE{O&bZe@1=dRN*N!0!^ax&avnLUtai2wt z_hIgXPVKGFC^H$YmU?06M6RV=1d=PdaH9e(8Z?kyXdEAYl1}UWz9fQ?wlFx*72&=$ zo%H}PBCOFk3}ny+Ff)PS9v!jmQjxzaaTtwxn7Azpx>p!lw<_0on3U&fhGd6{LMUN_ zDoF`Ao$bH0IDifz1F{ZOb3P|VMAzAflx^Z6_o>fq4qsgV67JL#Uu?$O*12AvJTHWL zYp1wy(P2v>if#*^e*Csa5`~>}R06>c5B!h$pUNUbmW4n1G76h;PrDJk!-hpV-gk;= z1qdFl!2cUnxWNDV4P)~kSs#Y(Zily84~^87HrvmrQU8+hNj)xq{`~|A_l~;eAliiT zS!AZ}CKLqGbBXwmCLp3N=)YpPe@1tKxc>ll&?aO08^F^3&B)tak^P6w<<9LZ5s#Lkz&6Z&($G_Zth9NE~zvr&c>T;r^#A@@E`h$+Dc1*1x zv1|kY`M8sq`qINitA7}0+PB-{f*IdeDC9G?IDeBKiKuQ=+bgSTnM`951734XBs%KT zJ^*q9y0a-sO)6pVDP6O8DcJN$;A8LXwK zi6GJ=B$gcLxf(%*xL3q>J$(~PIV1Wq`q)h?+nC}hQ_IS@{db{TY}O3&8R|rI@iOjjw*b_4NojIoHedS}UVf0<{^^mpcZPr{h79 z6gj|Bd}N|>N;E>U+#a^G!g$6Fyt=7M*F)}V`>_1_u5+7H0oOFAu`S)&%ZO&tP)&C) zY>j19IcDwk3^pxd@G=WN8^vwAf0LoGzl&SG?*(&-o)reQa8R1tTZKC4mvO~aUho*d z>s~8ruVR7Uy)?S|==)b?Yrq2snGhP$23qMmXruc}ZO-gjr3r~{?34S!D$ZAf1m-+p z=34yT(IE?r0}FWSPa6oq$_;9iAwb`P8OG+}WZt7%n^V)d!L-QE=IY4B>7h=;wW(23 zte@oy>IV|UOYk<)rYDN71+HX$z!qL)15*`K@`h|vkA=JV&(Ruwd%5B8?|Mu&spw4Y zR%>cYfk1%)9XfVcW^?4Qd7>0jn8XT6IH{QLH}SzrfxN^0a;}O+O=mB{#dOmOWkb(L z$};^q0b!$|BJ2fTwWz02pUv)$3)J%LkSX-56zZR4h{d=#R-0 z(*!yB?#K-c>e`Z$a2yvIG(nATl$@Gz);19bv}}S;m+f9Tj~9xW9lpbzrO-5yQPT+d z8TKIcJtV<>(i~;2iSIl0Fthap%Xv-@8TZT)|48cGx<;ND-Cezn#o^oRk&XCMF7a4* z`R~iwf-5B@@7vT%oUadi6 z0IC9BbC~HQ(0lMT{Q4;P%!5hjQHqzNRwU7fO9Y9Z6x*G&zqr$=X?BV?sMB^bZiy+6N)r+5 z7({u5Bz`lFb4GARV*Y6QToL&(GNLy!+&kMPSwiOA{F=1b%aGbwgkD?_J`j5bx{>%(B(Mbd6W)AIpXSN|(CGsA8VjnxuXEso7F)I2y zZ&`ppiZj2#Z1$mH|C3kGTb6o;lbDUl>XKr(NJrSN+qW|SU)8aaP_)s}!OHIq8K|9U zh%cLp9=ZAB3m@-3QzBpBH?w)_iMem45M3A zsRE98WmG|~80jqMl&^4AteqKkifyH)Mvan`#s}E5poE{etsBHUE-Snst6t9x^ZFsDJpgw1P`DMj>SkupSWzm!?K*| zEtM$JV6*d@?Ep_E%lXcXyKIQREUXp_fiPm3a&@U_Lrdq(G;9y9UcAK&pAD*|`m zP>O1~i0LRMOO}sOmZE-rGEUdM<0CNlnjEU=r@S=OPn!B%$)jxzxN?jg??P>4$+~f)q@0T5l2b&6-@nPeEkL0$BUO$nu{|Vr-}& z#uK{c@=2(!bj(Jq#w)Tueo=JBlxS4fI4P~4F=U~;XB?dsLE{iS^5!>mI-ik=hqkl_ zfP^f}bWi+xkc4||D|(*zx#}>dKr8f|QW(lotvxfs4lJ|ngU=DqH`M>VxEs^8J!$zH zgFd*1)hS@r3P;wN8oBfV)Ooht|HOXnoQ|N8JB317hFuS~I$=!Wq4110r98dsgGzo1 z96(e2MF!n82*7AY_@b$(5x<|@F*4GknoS#{u%MkjkdP(I7JDlvp~oH3uMl{A9;(v- ze-sz_bjFirGg^wrmsXfvbX@qAb?PZaJwb+GFfS(uu=d1hujKuuDUdAp*^b-6X=EJ84(^B+#@r9R;jdfz+du}1Y+|c zqA_U=MMV!4Pb5DH017vS1A%9ESG1NDB07v>BIuM!POP4zRm+wV{?V2#v7SMW!rFu? zIPN%_fidEkNDRQlL!*)GKsNXd=c`pkxGv$-+zU;AlZf8{A?aNfz#c%lkRU8vok|Rn)s00I%X|oeyvab06<$bh#-1_nqI-Ad6+=m!w$)|d6D3P);>bTgrvJ}Y*G=!)%GdgE@N}aI>kulH>D-U%yAfx&g zT$xHuG^JVe)L>|Kraf_X*jpE^x>CB*Gf7fnFBWqE5Si?b%8CJrJj@}n;K$_*TdSKe z%1$yvDT0!RLk5t2$fTbS_#lZW$jPxIr_zmMAaL09#-9e`ycZ&f3~U$JSKkJ1i$aiu zs+y+@wYx7Jo!_0<{IX#NX~!wr&@jDCt;?>jezaj)Y~?awyP6l6pSq8V1P*@z@}S8# zHb$#D==c9K=OnbN`pxx~w&vEux906%uXHuJ2p!FTt^9a@T`s4wf_}5H`x~H2lfA>A zNm=7RRzdvzp#00J`Cm8qD~~rNdoL<9mJ`kX#=*0|dqEl()K>UXqKED`K;ZJPh{mz& z&lEm4K=dCti&t{hvFQU770!Z0#T+dI|Gro6Z(hRRP4T~cE&O=nM3w6vcdo>E!-W1H zy84`*OfP(?i8`1gA)5LBP?=`pw3|IQ$+IneJRgVs%#U}&!`VS6XgABv8B(jHprJL< zGew!&R>FN1X!#v8AdLGPy`(GIusfxE3t_l@)uK&cv1iTe89kEIkZ8Ced*3&9W+kfb zGz9Bqz8(kXfwtsXDtJOtmIt^_F{Q)Pu3s1X3H%&6h)ZuyHrn? zw9f2dwHI&o*yq*}?HOS?L@_2SJ`dT``C_4~(r|o3QqOPW)q3(Uvm|i!J{QQtswiiG zvmjPmJ9u7;H-tWwK>%Wr=Zba1j3i_cuTEPcJp^f|{HAUeoAOKdD? zZuP!iP!ClYL+gnQ3*cMn26bpPiy|M-<6s1yI$M z1fq!c6!p}d5ex^SO@T1a?efCG#l+XFiO*{sg9EG4J@`!C{6u?GB+%J*{IZ(kr5058 zw2%@S8?Tdh=&fcBD_eqC5^aCkW@3GH1~Uf}e>SD{mX3~S@Thqyq|kJ>FQ(>@TEl4f z<>ECNuL~^>f|<45o-PRJKLFN1S{CN+nhXty2WWA{SPo4likquUUppaH z2W73MIF!u_l^|V$7^t5NNQxQbYf<{h0Ow`J2HT&wtQjUVB`sLG)Xi!|1FH^3dZF^w z+WPN$HKD*1SP6BgB61r5^-4D}jY+411m5T)BGkBbi@?edSF5YKs?xU6iq$kF)i5uP z!kOpZF02jy9Nz*#dhK*TtpHpoeK>i?&exP9@}7dGfJ$go=I$()Sv$_M^o+5VgA%Es%DRROw^q5rP_s9fuUB(b&_ zWSIK5ePi@g6X;mJX9cCJ)#6)}l_lb_ev)`GTmm$Fc$6RMj7X5y93Ih^6aijR~2_~xlWV~u}DBbtIM z*Sc%F#`vbxu(u?7H6VaS=+Nx6)4x41Qum3z;yogX#Sz3v7a8+}69^Ob%qZNNmUPv) zf-UxKwik1Alo|E*y(+lSi7LHu|0bQ2PlgA?zu}9=tUBB@9`?h3?q*@MuzRHvLP4OQ zQa_m_FFU2-Ib#E%|vQwLV*Z6s0Nt&vHq)# z?`*8>nUwqk{kvj&gCts^^ghgDRE2cbnu&y;m1BIFG>b9FVw3yo{Y z1yyUO6~p#Ud8od;1c+~q5alE1Wel5`RyQ{pLWYW=(rgphm@_&MI}{#TS7tmaVqUNA zAwiS=Mc|gT22hXj{D|4}ci^{?cPMd7oT^O`J z>|1AO)CgQyIM`m%gVzEp0VYI{f}%iv<4~7k;~u2)8{qXgb>|*Iv!#J%x4de(Jon~a zu!k&!b%-x18>%4G+ri<+STwzP-v=gu5=osTvn*U5WwdA`XcX1_(M^i6aKMZA?9c4i zwFE5Bsbnzy@@h58S7#$O!>_{CdxOb=SJ(m6X3c~d`VkV-+H)b=M_>)!2sSh@YzhC9 zNddJ88d74am~iE=@BY&D2OGtYX-_o<5{;!Y;Kt`EDg&PBJcQsV%@kC6WHJ;?2LJF9 zdb5+J_cAT}9Y6~G;|Fe0b4fDqJYcLfX#G{i-p z=i~_5}C6 z^_Btbs5zGGXamk}H*5-bpN#UH(-M+v8;!`3J)KLt;QXPPRIA5WNy=Hiith z#W}H8`iIbUbGWz%YAZ_a)1}Hyp{nv)x9&d)prdrsjpP;mDi3Ce-yyKRaGw(* z*MwU>Q4{|Gd<;dHl2$W$jgL0vT27RW=9R{NVO86cG=+K?If`uz`DGiuJu9&O1cFEx z*bf0WL`~6x<*aNu#ZcYp%Ammc4vGKLb=}snyS!3cPhcRwWbXun9YbM~bqV)cVIUqp zmbRl}Ok^W5p@7ODf_H5%RVFY-^OC3s1BRwRlY13d>& zVF4tF*|pp5-tKfLU9rl>6mNmLNVAC3saB9g z{=hxn!C?`dq2LiFLUv)ch(OsET&!5f)1T5=O)JAqmY>U_sp$#_dI$GRwxWgzSC)A))Z&}Jr9Jyj-or&`y;qcC3CVs2VP5WBhUg!1KG^aY- zgG%g)kK{6d1koa#d@T%E1T5Tbmi$nMBzJwpfIy8#B+hxW8jl{iu8o16#g#J)vBcfy zpUJRLqXZ!#>*^hkwszLKzB^U?grMZpowupqf|QJ{7qfPByU!jqrBB)ucMCf}UZ5*c zSOiVv5N&8HYPka#XdR$INHinvBRXbUlNt+y9^B6-^T3IGsU)&vq6rDmYK#PSRC-9T zwxme81wK`LsN^xlRCcM(ql(T9g~e5I_W#oXF~g35K%aTB+2ajK>+bm_ed&EZUnP$~SHGA9fVJfMPbUT4(Xv@Hyy>t274gfbSH zjK4@&d|dMQT9h@SR@pfJZ8*{MOONLiDZUm5dt#Ipi`(u10W3vQx~@us^RDz`4SB9y zZAZD~9a%{sTC zXT}HEabr_Z4n?iFc9R6>~b^KF{!2tn1gdI1CEo< z=0&jXRJ_VK&HG|>TbwP~7ugJwjuzr@cl{JeW)po}<2YzFx6yhM+eNN&at0HPmxB}y zfH#6|sGj3ypBO2Q#jcsEDF-qNA=6F0D#ngWFgCl|3GB7 zdWP?P!0`_WNaLD+L}fo%@>dyaMs|T{w#Uf*x0Cwsr;G9S9}tLUDQ+JLmEX!-9WDwk zqJ2Im{V=24r=L>H{&y+SAEc?ZQlF2ofWuKi2&dpgC+j$L<+L+sVGAPev6n0I>`^yu zdY6tFf7Jya=f-7jCa=?4@P9TJVX{ zWLNPlD7fL$32B#kg~rR=@am5U5d`an#-1>^na~_3HiN#$YjAZMIE4q9k1Ah3iae9J3)L(?XotMpjjd8VF zzeOS~ry(t>MW4flx>ie-;c{|CiwB9ZO0s@%L#&L z|5a-kK77&bs-TlT`V;2^t1P$VItWH^t$WNf`u$zYgBX+O`{aNJ}4 zpuf+!I{yp2R&7ea!UhE{TbL*rP86O&CrJ|=hzGnu>oztss9su&Tt6PGLosE_!e080 zy^O`gb|$da?isGu-bt?^JjKwcyKRldY&#s^W|6#a40|`R!FSVg1e~j94XyKe7j`VOVlh= zawCu%wg}30CeD0MyPf7alq*EU@-pNHMp!*q8NbTLyfrYo9OMKl{BVQf+{VAe44G|6 zDQnrI^oJ}P4}u^gzk?h6C2nug_R!kBIHRE)e%!Yaeg8qT`LCul2Z$u{54cu_($nC_ zH<#}g%7{%R2$&IehA!P-0`UJ^H~-J%IQeH&1nby!Gof*xAU6sO*&=wKVufBsh^PF% zi+sfII*5Tm7{3^_i#W`YPjW(nm{4Z?YawPxsZs#UpCpFbQN)@`LZIkeIBIOdh`Gz+ z7ku1){j2=nqp)u{t7KZQuJz)a^pu*NFS?n|P& zHbC@`0r3C-+qVJ#I}d>({jb}U-H7gkj<;JP5*#^hiw|~)(4zN8%ztx-ImrJ{_pqVg z*(RmK7Z;}YpFK}xyGDoeHQG5oI$@rcr4U8!fx!VTUTD%?nV-~abXxd+Dw!r-u=aAr zS1o7OG<#H(3L4Yf(BhYaD%bGzIubp}Aa4vB6l&lNf*VJ|E$xA-It}mRp1zeW`&!?e z5pTjsB@SQ!nB(qMn>oZ2IkwwnTvhjc#+_gAv3JjH-K9HuH2euuyZJ)Yuh zU1T+t0sDoA`6+Jxsen4~>?ZWZZpNd+kL!Z6C$C2O8C@Xv`G@sMXVA?k^g0>9;%ue% zpV|#c^bcrKO^!dZoI|Dz7t?zG0883x`j<@SOx;~(Dim!yrPzz?@8-u}RPq0KgZI<# zXJm0V{e$~)_HhyaKX5f+SFAsiDM$~g@3`eVtFMWn+$+i34_NTH2=;G`HX-hRiK=^6 zrLV$|bl0+L^nv}`Vf`Bt>k&%?4qs-R6;=31WYlW_z#M?in1iO%6!H4opa9Oh@2j8M zrn-3Eq~-Z#-Wn_pVP7sb&(M}-Z>nC&7@%I;>E59($DZ#)k?{FEC{|Kneu%E?Q7+Oo~fcF0wf=0k&r9)gSc zGk{OCJ2OrLAD;(JMU#gv!sCie;-?R|+EDvZw$ac^g^3CC;KGr0++Fi@zo)VE?@pn&?>bNCz_P3dd8{!j>mB%}1_x4{~-+Scxn{RNL3Ro*;-*?0CG@~TU!?PyA6bEw+DFRz~m#0D zwhK7}oleSG72e`vQ^5L8Q)G2x8rKbKk`g^L>{yj*lTfvvNgZiMxKlI=*<32Sj1H`~ zh)$!4fcb4yhkNsMF55z(qeIQF!~N1QG5Cc?Y-CH=edvG_G5}nu!rc1T7Q&04+$4@g z?s~fnea`IG?99jn$8}S?dum9NxJS<3g|4Z`hP+|2ozn^~A#h|S(_TQyp_XKqV2jus z7$L)=R6ydd-Bt)()0)XuYvbw^uCF=nn`_$79LW0aQ(QM)EV{^+U*MGX`c%S7XToMg zlPUjP9ZQA?g@_A$A5HZ2kM-X0=iIAtsJ)rybB%XIW;XkEt-d~AcHK`?P5#hQl^S&< zRH8CQEc0A{B&UZC2qPq=6P~nlL{I*1a`h|%$=}8<^I|M)eEwWsVt+_c9kkUwsxfp!-FMx-e7gvaXEO&bnBw7D;QNaiZa3Vn?z z)<=M#j9xhoK?-WMfjt3S(kYv0Kx9&8AVEf9TqC=lr;7gkpD+349}C?PD&kv4{M}*E zn%C8+>ArG`Xdn0+V1O8qlOWi^?vC&u4$XD~gj#7=b~7TQ{4a)~CiP)l8M!j_V;~e2 zr`BPuol-RL&O$@KdUT=IzfP-W-lWxe%B^D*>Ef#$_gCuFviUvIC4p%w^o^Q1N{5{k z^M*>NuKRx7jk9nze&IP~xZe<<*Vm8V^g@{S#UE1seLGq%E=9Xjcc|8%_unJ4{Rw(Q0D~(;?rJ#!yN5& zzyF*}NN|4@sqMlP6>dqZ}=PLbEyDlsXDxXJs zvMI{<6Kje{j`OS3;O|#UM+AmMM&7^Bju%o)VmUR2T zco1ZY;zE_4H%=paM;Zsi2rt-kevAW;H>_9UN90H9Y5bn++j5@y-68pB|GL+j7fI68 zq?Hx=d7alTXYqGkO{Y!?k$kv!paiAnNJKBTP$UZg4AcNetmjAP zf7wR9=7d3l#4&_V2F)|Q-Pr+tCyxnU8q%WG@yGaNEU z$pLsl8Cu{bD&$kuz}s@?c|*9|w#EG)>d(*+5sIiwWct4lt$mxMDwo2}2Dc&`0)QY0 zK({NM(0AWDD@2@ZnBN-LR!Lsd}#GIzqUdxT*qU`aqbOcLECxD*z~H``WddfHyFJ$JdpyC~~pq*ylQj7U&QtpSBm zj-KcOfCOO>RP6puOK;rOx3oXFUN(x7zFOgsH{j5+udp zEzmEmF}Yq~zwvbLse$Qew~=#e-}T3aQ~Ss5{rLK-R~H`4Y!?ERhC!jv__Z=HHFx_^ z5j~d?F!Umat?idGTt>Py+?&m3?IxMoMzQU(4$qoe67?96+GL0Q;Zt7jBSa45eFI{0 z{R6Sls4s|?zLTcQFy-=j2kIzUPt-~d2xB3kv4u+kfxw!qQ||F)(PvIK4hvldCFKDw z5*2mrMz*K1;mfZ~mv$HIt6T6M(^j+U&sZ0VhsNs_<=ZtX_P0N%j%kMxWVEtH;Gm%J zBGK#fuTglRQ(CGxg#Pq#{%$*_e>1qmHntl5K-1v*U~!Qy#PXRLm65D!7VAj}G76g$ zE)X!g>?=xMn)Vg<)`|-=R>Q#YLF;ppMp~<|oC+=Mk}9Q$iYZet1*1edp@0U!KYnr^ zd~`^i{mZe!c!%PF@72E4vI==|r%ejGJs}-s3?mGu>!+7f&$#OIg5}6}#QB~mN%bN> zS&=s9bhEvvny5=&F}#;tM#TxeKnkw{9P6j=l@#6nFXrCzD~>p9ux#Aj-Ccq^!M$5Vm*bE&!>xI}1TS*qAhl(*`Dv$9a2J3OF#LzVK&SmVfxR9S`-GrckH*q% zYWwklYV-Pa8CkAox&ik%QxO5Ml@+UglZjB65NB)O`*cI2)GV~MjIy%&lLhXuVp}IJ zK2FwP(Ww#5uo8di6c`mO4gi~RTt9Wi(~sV?L{u3FmirpJ+tYoNbmBm{st$F8vTFah zN3CBUZS@Mqb=l|B8|6O&xKOIf!tkU|F8VwbtVLcEC|=g|o+4^=U7Rh}(k%*mtG9@@ zh8fW2%K>ZG$8?6fk)4PKC+ZqUw4%V}kfi}+GaxKXAs{G1aWXV!fn-yUjf~B2C_KL< zp^qnF?m?-cRa4o+gs5Q{b?p_BBw+F}3j#uF5b<)gqG{)W_2vOZ2G19(0#>(+EGL5z zq4`~3fHS2NWSjdsT;~PNZCiA^A%xOBQvLlfw>sfniU^A23i4+bd@1M3$;C0D%6`hr zRAM$QU$=1;+mY+jVN&4LO3?~kZxJ(5@}De)tjju={V!oH3x+&IKzhb39(noEUIuK& zVlG*~xR6S;LXk6vwy^<7kbf3kGJkI3$v*BMAVard*psJ|N6~9~;Y?Yz!^y^~w<6NA zXb;#~mT3Hgbog3WF|kbg1y`J(5uQRqwx*7QXXlfuhpr5#8GmR-Vsjpg;NRu6rVQqg z;|E_%zBzF+t(5l;vKYNsn1@CJ-7xB>c9wQIYC6| zL_$O}EV8Z$UcLESfgZQF%^UsYn@TqBH`1bVeA?a$)1Pmifc?f#<+Mo_%eoPq8r0E* z$m#;AWti-8bpW{?;w?M$$ZcOo8|j^tWUNcx%#^s(|3l11iOZ=Ggtnz_yN5>3^+?s8x9Av=MGB18e)xJ zS%IHysUH;zAn*_`=3KX`U!6}>;hswM4cQtdAq0p6;RU7W{y2d8U3Ii@66&|{JZssz zXX#5ldvoGqJT~!F$}jU{4SwD1+EK4eEZW)?jvyhvprLBAS{+kq;TOziEk}8>fzPr{)nl7@W=^GZd0ft-*b?7tHMM!Lp>rq!b)uqnt=_DQ zm(}l4o~ds3b+r!yUajfM8SZv$n-n1ZhMqr+x{kn2+FJT-t^xmcHHQCIwiE(|r;(7V z2WvA4NdOOyvFs?7ey>a+fgN)u*q?|i!)s;)aH%!gs?S>M1nKeW8_F=QD@dPeC3@KW zk{KGr+lPoW9Sbc1h@$hPLAbsiB^8sLePj23B9}GNIuDM&8)C)b-khz9@}+4LhDoh~D|l&fxnE(jOm|TP5!~8}F~t=L znFHdCEz;^3t4qzVW2fZzTjT>@s9vHDY01Ejmok zJdR8tXIn7hmI46$K>!`SzzRg5;HMOrD7HR3=c2>>zK;=K;uxKoi77~Tncy8VrRh!U z_aOiJ576{ip#PQQYs&Uj00!y%`&_0{?Y zyyaf&xD;0pO|;bNxLp#^8+-zqj)C6m_J>(kNJb08P zKklPmzGYYB98L`!1vam!cemj`PlrUIqw7_ye)^WEA>A()B%48br>iBBlP`@@cp>mJ zU%=B;nSxL*dG=SMG3)xLuWPE`RQrs|>-`y3&I~Qfc*uLlA~Z&f!Fd%VSuD{MZd3bijRZQv~QsVQ@5wy zb+19=JooS)02buPe~;!(fVpF|7N?UE09D=#{D9#O$vyYkKW@Z`jB1J-5ey0wyGO+6 zGZJHh&RY%WS*p&)C#s1#4R>AtVm>}o>`v(3!V?LAWAufYH%>j)G02?c zN#C6Y?hyMp%1DfSzB*SCJo=z5o)#+*EKu=E2=iI5HS%|*s&%U|0`Az$a>jDW zCPYSYCP`4KlAuy0an39XawM3d!bA5UEygS`OhOf<_dM@-fR4VXuRY<;GmQ{YXOP6g zpV9S0^^4MdM!>uL`{~MQ;mV|6o0)fKiXDSB=Rx@qfMjf73oVZ&ntgS;!0c#qjhsqFvtP(f?cfDru#nyI zL(Q~70)^ujYb1`V5nxb2DaQwg6x8%nQ9_?K^01Ngi8b}MWa=QCIvtnP7k}5)@*T|j zVH3uQ^8UX=SAp}!MU9mT-nH4kTh9BN4eesGRLGpVxX!*7hm19`MBbP+g#-m5`#eS% z9q!cQ_!o`>w~V&wrG>jAd;0ulYVDW%1QpS$MMmTlGQ&e%ik3HorArtKoO{inAIBn8 zNuTb&C4?#V;jMCge**7tQ~cqr4S3n_sViGlS@d?*nM<1+6eD{!nOg6QWDw0~=B#Mo zX&xzF1TOF9&F0?|+682pZRW~uavLccbQ+6#+Dd@0HlxovaiW>sn299IJeD|vHX}i} zgS1ebQuRSrU7B(N8~b81x3!q_WS$4JLp{9A1kyK*avL>qN7cW-p5Ed+c+F&_OCNK( zNu#Ul;W905K(&Jl5r69{zUgadq}}*`xBmVDJ#zq(Gri;uF7y2uF^L{b-}vEVzRAvW zYEni{?YYGmKK?2kHx*iyjC_3ph1^aG$ANx^Tgr355=TyQzoEJO%%Z!MSozB z%i~bIaG?2~b=`ug42-^Sp4@f-^7H_pQd2(+ zL>%S+U3lr^|V6M2;61Vq2CjHHX* z8z{iB)kzc4nU0lf%GGdXD)wkSrlEjr?9Zo>C7jA zz@E&~?#bggr)?XpX!#fHN@|ekY2p-Pk;<11w;)2mSbvlY9Atj8d1}#dsEGe@P5yJj z*uGPk3g;!mp-2c`OmHubzM!ec} z<BRXJUkt!GC z2PKu>V~rat(BhM@ElMZ)9yg346&d<6Zw{V>-1$U#ti>>&R}RdjGy?g^w~VKC8za70 zVR;W)sCyJ4^;HLd6ePiDC$d4rM09$HM3E{8(o>9=q)_a=*Rd}!Eiz)vHC&BrA3bQ^ z?M&K;bx^G6<)=NIQUmUZb3m=GW>i=R{TVVfq<(BIx;`7_;xcM6tYx%}nGm>!%Z9f7 z4LGGgUmRKts=#BcQt&)~CR7;KK6GkrFWUV?(}LexRkI5DwFWa8w_wir9u+T>|0Yo zl(yedHfl9S+E3-8KcdWo0HjBPu+f;(y>MFsSm%iViV*K;DW}GPogD%3aa4EC@plH3(gJ+m4Ro zZS#B6uHifZ6`gi+vcecA{Y4pMMHM4%YcPWWOH7SjobxignQN78J9UV-mp?NkeN zmxm`5$1_U19MnrSaxHV)1ZDBGPH!t-eVq^f|MR-PgRP=YsSHa1LaA?odjo4}OF7O0 zn$}xRILBp8R_|T3I#f-RD8UM&j#X0Tf?rm#$A@2p8aobE;A^Znpz4;XjK+Bm-*i??H3=mySg8W%MzY+wBW z?vptZHP@eI%jL9qeX_h>_U=-dL7GyU#7b#nX30ud2W_mv5U z1^)3aMLnLVL-itVo7!R)@~sU()Dd;ps?}(b({OWhj`4Or@X{<+4C7VF)iQ5Z(Ek)d zpZG3+hvU?yUfWmiU5uOVRveaM?a?J)#ai@zOijEBUIm1h2^5ui#!)V zv*{vCdzk3JuuCtSq>k|smC1L> z@sUz!Q}*$Uhv+)otYx71Wxo4H2SW@_KR3!N$28PIc09lGT`g9!Ii}gN;1C^$g+6Y} zGRtlOInO%$pA%qd!GV}~iN1WkV}w#9gtTx(qhlA! zaXVr;kDOMPX5?JBp?eFJD=#8!RBzMu{7;+ROy+mqybvm!XW@HmJ*~CYCY$mtE4`sV z6&L@3^&2kJWv(^&BGpvp@>xC|R_Y5P0kkNym}0C3A!s~J(mub{P_fxyYlWmrrad;s|t@7f^c0yQ`Z)<|sSKV-NN% zWU@EOT7J|Qr0AZSx8CR=03px_F%l4Y(!x{5sm~xK|yuLlqGtI!59+ zLW6;wCT>^~RU5CncFmuFnR1&8#~}jT2XBYixNKwi%NtY@Ukd@;b@b3g(y+j5W6Kp3 zeA1Ptq^ea~5uaS>6A+%jekXMWBKk*EE=m_A*_CynA0A1m3X?nJIwhZ{9olbn2CY0U zk;p8MZ&!Vk%pYgqgFE*eN4TQzm$2Ax$`}DieWMt}A6vdd72I#tR5jy9^)yaMNObuz zzuOck!3b({U~9(UXo&tt=r=s`Cq?tL8d*HQWCY@-s)SEGPh>l#TgY4ThbbZ@lPA7F zK#-a1=U->kWC;EChdy>X#dcid?Mp0gc0RHv0&ODGRkN{~1tj0WMRBp$?5>B++HC2rN0LdWl zh+n#Y$~XLKNF_V}0gn7=B>SBPQ_#mLEv4Rr9#y44V@@bNai&xm4 z)!MF<;mvNcQ#C&_hI)jmitq>ITiY)Y_!|Y$3M92TU73qwCo50p( z(H~j{8LhzDIGS}Q=rg=f zS1u`%Kg+!@=fopf7W2k7uuew<5FY`h|B=FrokeH|Hq^D{%KR!Zmh7Tn`UjYJL4UP& z3i0oDz%Cf-N!kL?1XrdsPT=e3`sortyNJ+k8A*?D9-3dIMEy`qu99z$0uC0oc%6eeqpDIi}H?Rqt1|jSi$Q>BQs})fUPE!gGa>! zs7$$-!JyP7&H%FckwBaJ=_JL=Sxi=Edi-*i9B&C%NJ?nMt744ETIZ?($l&y=Q00J9 z9BMqO6W#SN`^Z}XoKlMI1gVEqP-bV29-I~~F&VF6_Sh95<|xff)M+gx>Qy*#HZ&Js zM!brZ_4My;K1u#n{6vodWAJUTHH*#DwDI{0O61Yr99BO0Uh!BLX2wX9DKry=i%N8p z$}$mvx}O!u)>5`Pk2nJUnV9X5w%(oPg2XQ_%>`K(=;xq_7_12t>CPWGdRY4X!Thb_ zxpww^%htH6rS%I3FBYlW(j6v$iD+UCv*wOgljR{Rr|`+`hdz9n@hXa;Qp8`t%tk3$ zTC-tH_R0FR+E7SP5>G=CWTv4JrOKRf5#{OHkYiwgRLY0U{I;qx?zsvSBXfoNjd!rU zwIY4@+2y<5#Aov&qb99}Yi!e4h|p8zYe9j#570{O~Opt_PJvJ+Vu zz#8Ox<8eHE?^#^jKD$M96LQm$A|DLjzqw+Yf8h9+%u#Ca*MZE2(mGNw{Wm)~iJeze1Ge`fo+Axa7r*R@j(PCg)0D9vV&XLYzcXk*BS0mAX`U7iPH@?nBubj_WFhN5<^NJO|p^sgAB7)BT)WJzDiadtU4) z?cT{H%(B|wF69z>F3QIEVq#K~M;;~N{a}!u;<%pjv2}0dGYJDu_gCW;qRY<;ow-XJ zZHel#EF^2{Fo>!BV!p+zm)Cv=_g8!st^-x>1hE68ga)HR9&`zIYUH^k$ih;E2*sag zY_D24^~#&2&}Nekxu-w_=_x&~B_^tWgf#wUOK{^dlwu*CS@i}9BEp>rphg5aFowgT z^PZ+RxgrcBU@uy=^B$_FC$ryif0gx-6|L`<4)Q&G2U*B1(3qYQ{nUxYFIzh|n6GF_ zRp%X8Hz|S?hse`v;P%2Xxj>m#X>_7O zh~)pk_v3f}FGI*u^na~CHDp9~d*J8y=n{ES=y2EI;RNGJuPHwsuE+Y~L-$Rr z?c~S^t2euw49fFucCGVo8l4XVS)zqJ=aPBeGU~8j!qz!#ghi4O=?BpnyW3*;7_mf0 zIj34g`!z}67~|!JTUPPWgVsoSH_hzM@(Op@qHQ1WZQI?hfxZv9(m;ksC(_6B+vPAZ ziuDYIg;^C)R!0i+WWZ8!cP}AE3x%wZmbYQZemixHg}!Z?t%A-mb$rk!j@6blV3O4R z5Q2`NOZ$s3`^hzX%Md0Dj#Ha)7 z0Ao&#QP-UJW=txS&|>}^y!+}`WZ}w_rQ5H4Z7`RYfjrmS5teae>55E88@hp&eNltm zHiqfpsbjngT}VYq&J^~n#bFsxC!Ok+e1xYQK}fN5Or3uLXLtvzWMP{lyyHfocXIx} zb&e+YuhPvblKTYN6+cgyIiJtcqzHulst_G1dQk|a{wjZ!7~2EIpk%^q%zt~bH@LjY z<|=MmQMMdfq?x)7=oI#vX%bPMkm}xX#!1b2-8sq#>cwfUHU;wv>pi_4w-c^)Dp`MD zx)fGT)K{Rx(@oxPL@{=`y}V!uf0t77%P?4YG|1vVaB+9~yLl#6MPz z%e^4w45KNUC)^BRG<{$=fDh`rb#BR1CE?*uquQlw{&oX$=BQUr$(Hd=PLHZaC1!p-7d0` z-dd-6MJ}z$TNn(5pFK`BwF58IB0&`vE+OmtTq1l0B`lUqXMuu10X(Oa%bv7-kJUa) zh;U!HqsA&b278>MJyo$c&_7^?q(UXLLq$JkRn8`~b<}2?T%u!`BUI*XyEoNG zx;=azjiA{>7pRJczcaDa-}~hh$Ev6xU9O4jM~N#JIB7H5ju1AtkmIznVWG8K{8h0< z$+$V&UdHUvRN3Ph{i0nnr#oeF4S@}}z*k~Rs)IX%*O;T#g2m@hiReEgBUhori^h!1n0- zV*6bjEXVy@d-|y_F##F|9}HQbyfPa4DhsMba!~2#q%Ek;%X^yLQ2?Qx`91wzgU{t^ z3PET-!u95*dV6Kh6Z64$>*^}~bQTn(B|o`nYS}Qa;9nd}=)9-xmR>4=(3mXu2>P+fix(uN`Nh6*9! zJq}wn+_8Icuin5bc^MYH^P+MWXmOfyJ&gQasg;w|E?@=sRYr3w3t2Pqf>8=yTq%?g zKJ!2~`a}63Cd$Wz#aWi)&Re9ZRYgl>*UBTCvRdb?Feyb@vw~_{JRB2;klz{r6%xXk z&-xk=cIc3x)`GsccdK$cE5_<(D>`Jq_T$HMmHW?D(Ai^{r?AAV##kBZqD+Vt4km0l zODy`s(PmJvn&D@eI6$w{!bNG(*BwP$yEh7yK+cfVPO9QlT~AtYR57^^f^EqFCJa3_ z3u)#bHO9!G1pZ5kG-pH4qTY&hLwS!2x|IgWQMp|WOjqYc{q@W$OKcAl&@!UTOd`{m zO`@X4UKnZQu_3u`9qsk#^E*xs`apVHkw0Cs#y2Fk@Ll}5gViSm86W_@}u`xIX2_+PBRP zsT?Z=d=b)K_I>^GJFJUMsfvq6foF8R<5NX?(rQ_uq1WbjdU`b{TI>hu8Rq8drC7S>rah*hlnLXFBVOu4i!Zh}N-1JuC@;(d73Y z4s66w#nPd!e+nt(rU83dp{?V56#=a;qZDdjg~a5rvSAZSyO4}W@Fu7HtT~@Er($t& zl=v}#10!hhE%>--_44md?^=BDIjP7=>0l9=pGl(E;gMy@0J$lfJEL_OuqvnwW*dk| zO--$So>28!FV3PPU%n}0LG)AWuE}4AgeAYf+b!F4pST7(E0Kb~5HRyYacZKCDs-R< zoClBSETecU2^)52hXLcAdRKQ0Eu&=IF{445azazN3acb{Z{D?ywowE>D-vFwogX#v)PWtIY`2s*q!% z(R6$=aPr3yJ}NT;yHNQ2X39o4flK+IGn~JXq75l>NR zy^(DI(*;^1GgC{41M!IOY20P0FHI~`FrV5Po!(e~#n!ssQ9x%h%_i5ccQn;EZeCnl z9(<;v{R~!zAv~d%_RH*t?OeZKzQb`YS+V^ac1}C8w=>3DQU_Mt`~>f~qzAT;pwm*= z$Hu`8AymU=iZBzGmZIc1)Iymz+%yQU@V2d;v zR0Ex*g?R=qKv;@3p1QUnZ0Vm(N@ItfOb}&E(8G&H^4U6~Yw{s1qTPf`B$Q~JKshI` zD{R3|Yt_zOfc(2Mcl>Mw@<|=W*X<>8RNZbAE8Ce256<4&T`nVa{$a&A;<{;V=5YGq z45iA}Yb=PCIiACTkhR4BhrdKa-`a2iYB#PX_8&m?D+@;+)-54%@PNMV5GRtIqnZ2~UhKkNi*7HrtSQj#K zwWR8l$d1|xTB8Dq{j>s=sj2LLe|tl7+qsMke#0SG`5}pbLd0lQH@lx8F zzop=rq~nae9#m&r`nnc%gUt&i2eJQt3A(P*5^2~Hm$M_!-sLliId^QGQ!*`)ClHQ_ zvQ$edxgvbj3+6?-b>(;oFdsILLXjexbIhrK&1n9XQV^`{9#FX=huRij)sjEol@)53 zwS00fDC<6dk_6A5ZliM@=@p&2882DI9F$>$p-yV;N^vx|XSHKJ91vPa;8e}vVlN0hS?Zb3#O`f@@ViAO0I>wFi%nG-W;;-Y8mH;OECNc~*F9MK~~oacG*2`BGdQD@{oXsG{h%hmZw`b}6h@;mgR zT(sMrmdd!AXBwDAL5zO=P)1#&@fB>j~x^;1MyR$5=E=&Mtm5Px`g`p6l9oleG1uV&XHAI}^It zA#rPRt3_n6gk{Rt>}XJBw1l)G%q<{ycanGZX(3;251=u>`46x_@z>F4)zo@@ckS@* zef=Rvt~bC%6uaX+Ur2BmzWb~$+N5(6qr468PvNtFX)#`zFLC2hy7oR<^r&AH2b5cu z22;8(2(v2a26q8=SlQqX>8SPxPx^4@6Na)tyX;F`%hP;#HqoNJSYz4w;I#a{w+z37 zCYU+u=W)3BL1rep8d;0bd;wc)o^9W{OPW_S-r~9)bBsspglH;k!)q0T zm(=g{Z#|N8yxpD|no-Sf_{62=H-3D>b}PTRT$_C=iw-9R@gRSV}_KNQD4M_i~)Oc&&UpUik}P_N2(cLma& zU`C?-2VnAap~a5O1XLou9EqpB6x_4w6D#;_DXevy4eVy9B-$xMhKYRN%d!O&LKqdt zOG4eF%e~;f8j*sl-LB53DOnO>h>?cJ(#4)exVwl0+dgr>Rjhsukl()OYxZ&)zz;Df9^}XEL$XJy@R#o=u$aY`pe9iBmH}bKO^-jKy;#A)zY0?s_nJ8+f(a7jQ z6a9Ge#LCDASZO4+m%q~Xrt+32$p?Sp1U`i0-dOU78jgt9>gY!IJv4AXDu$H@1L6R1 zi13`T0cATdKMU!j?+}iC-h>U?ND(gm9!#sysSWK4gqN+wk|r%uocTeGI9@(}9j~a? zqz$98u0B4lJiCVM9b>slzi4-!g5Mai-x{a_qfi=jwgc7|6r|BRm0`)-1e4+5xakWt za|F+0pTAz??#q6XL1eP^S8(`U`=Q)Z^yy}sozQ8MF1q=JZ>BY;w|2D=GWDdB=&sML zx%KExe@V<=ZOthhi<;#@GMkpSH`uVnpr9yc0n)!oD`sufXlr_<52sTH1->f%faRj5 zrX*oe9e)6wmz50|cUq2ER#&Rl1X5D6ipsY-DRa7EIgkrOwBgbbUrmK5wPBGxg4AGw z2>F9NiQhi%mrORQ@~UYnvYA6CV!WeZpY#_`+7Q7hjb$210$^IUX~xv3#P4v!7wE`D zKsg%I>!jl(#i>qS^h3Gu9araBDykN7lD8k5Yr?QWA`f0S<03m&eD1%DdqtXjH!jxm z^d`Swh%8ltjxC-84o{0W$W8a-DQ*sC!7=4LX}3(J^7u!P~3W4JB;#yQEk%4khkT%dt%SbBowM| zj9#x?g|YPV4*BEB#(|I2nEfN{QMdm>t9a_X{14_6dNqOq6+FdA#Fxe6+p%xX#w{Jk zKKor~!j+w(6}eCoO8m<`3Q1kg)<56+OAHo7UaABgMx?NLPH_!`C)F4UOVvg=hf8