From cd5d0c7c928c5fa1456394f0fd55b8b15f8c83af Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Thu, 22 Sep 2022 22:45:26 +0200 Subject: [PATCH 1/5] dont archive rdrama.org --- files/helpers/actions.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/files/helpers/actions.py b/files/helpers/actions.py index bd76364082..4a225a9b05 100644 --- a/files/helpers/actions.py +++ b/files/helpers/actions.py @@ -92,7 +92,7 @@ def execute_snappy(post, v): body += "\n\n" - if post.url and not post.url.startswith(SITE_FULL): + if post.url and not post.url.startswith(SITE_FULL) and not post.url.startswith('/') and not post.url.startswith('https://rdrama.org'): if post.url.startswith('https://old.reddit.com/r/'): rev = post.url.replace('https://old.reddit.com/', '') rev = f"* [unddit.com](https://unddit.com/{rev})\n" @@ -101,10 +101,8 @@ def execute_snappy(post, v): rev = f"* [camas.unddit.com](https://camas.unddit.com/reddit-search/#\u007b\"author\":\"{rev}\",\"resultSize\":100\u007d)\n" else: rev = '' - newposturl = post.url - if newposturl.startswith('/'): newposturl = f"{SITE_FULL}{newposturl}" - body += f"Snapshots:\n\n{rev}* [archive.org](https://web.archive.org/{newposturl})\n* [archive.ph](https://archive.ph/?url={quote(newposturl)}&run=1) (click to archive)\n* [ghostarchive.org](https://ghostarchive.org/search?term={quote(newposturl)}) (click to archive)\n\n" - archive_url(newposturl) + body += f"Snapshots:\n\n{rev}* [archive.org](https://web.archive.org/{post.url})\n* [archive.ph](https://archive.ph/?url={quote(post.url)}&run=1) (click to archive)\n* [ghostarchive.org](https://ghostarchive.org/search?term={quote(post.url)}) (click to archive)\n\n" + archive_url(post.url) captured = [] body_for_snappy = post.body_html.replace(' data-src="', ' src="') @@ -123,7 +121,7 @@ def execute_snappy(post, v): for href, title in captured: - if href.startswith(SITE_FULL): continue + if href.startswith(SITE_FULL) or href.startswith('https://rdrama.org'): continue if "Snapshots:\n\n" not in body: body += "Snapshots:\n\n" From bf5abefc4c7a643df6254ddaf33ff3b7d97969f2 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Thu, 22 Sep 2022 22:51:25 +0200 Subject: [PATCH 2/5] remove tarded banner --- files/assets/images/rDrama/banners/115.webp | Bin 29788 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 files/assets/images/rDrama/banners/115.webp diff --git a/files/assets/images/rDrama/banners/115.webp b/files/assets/images/rDrama/banners/115.webp deleted file mode 100644 index 8ee0fa9c74a3ad49969b50a5dd4a4705ee8af879..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29788 zcmV(@K-RxfNk&FgbN~QXMM6+kP&gn+bN~SG#sQrHDi#L506uLll}Dr^A|WX;E8u_) ziA~>y#~2xF$$fmKft}TtCi>Ur=Y+xIWb|II&V|I7X7@+0IU@qgyu>wmre z<$sg-aQP3~uJb)B{U@L=uK!8@x&8;*Bk?@W{@eF&+z0!g?oYQ}^b`sHkN#`bzx<#6 z-|zi8{%8K5|EK!Df$!#Dbkb> zX!!BP-ioIjhH|2PiRUkux+(!e3aW_rf7hpqg_vtN{e>JZkX8q%?>$yqpZKh{kR&#) zazV}`Aafa$gr@};MNwJMzvPcHu%X}|UGRIl&4i%iSSATv9j3GPQDX+2Q9N)x; zegP+uBd;=3S=G;W?cU)4ZkS(nRi}_Y7op>M6^D2M>0G8vol!yhM?NF_rZ+{| z42V7@mK)mn+;81QY$M5-HC=DEwpWcpFMr<3cop!3h$nWI>^30}I^IlD3`H{aUzSd- z#Mbm!aYkgm!qn3KL$TY?hm08AN(%g+mOQA|1ER(V^Tsc)rX#2@yFvTo0Chg#RXC}1 zm%YNN-iWC8^|@IUHX}O|Cd=Wq-Gsyx5gFe#ItJ(=L3`~&tgj~bXT-bCIl^VhrAI5?)K`R@dM)iYXWWee6Cxl33JuqfNxZleP1el%g~}sP zd*JW_Rd4;23}oGAsugtR%5QI<|M%Z|ER@fFOaV{!+V_0=*Qm5$YErvN#u{<&x@`#X zVP}@VmEzATqML<8VP@wS!r@8zlaIL-08Ji-(14kp+Wt3uFDZOlzI4>v{N1|Awsdj7 z8BzQ3cJ=9(|0Y(F*q}rd@ZqwhXju5sqJ=V3#t-Og5(yw{Q0~w3`MrMPh9yOk5e59o zaSNW@8EVR#>(AE>s1~F!EhI;j@ktp5b=gD-f zpEfIlS$~nQ)+*6@K8yDeVKYyYt%-Db44`=7A8WN?TghiofhIW>ZcmSw8Xf+8$#PO;Du%RxQQ5$mjKF`C!V*6PZh+kKi zgOT0wVTBzS2x1kOqwfE<9C*Ot8^cYz;#3_!>h%b>(Jk)>bGd8ZrD1FS1|qHIleD&a zpDy{W)2(!PJy^C;3h+Y|FW*ryn;2$7NS|zS|5R(P2w@!WSTUvXVUdj8O^-$gq=|R{ za=^XnF7nWoF{S-yo_y^5RiFUIBs=gkC3e`-yuLj$A@Q4p0Rm7yZ>Y9m?#8Q5g+P@) zYShyHL%#zuUujxt;(=^=m?3J0(x~5;7a(R03-G; z1B@{fXt=uj3q^6D&u-bDGHrbH>=*~Y2`hx~j1WE|uMRMr1Yg7Kd0y^du8@z}2%dms zyAglCwf08JST|P2rzB(7#4`Q6mK_97SR{@3uaj0fpMhztKg5D7pzm<~irnMKI2r5z z(@I(-AH|V9+;pn>8d3yyhCsz1DBK2>CFZxu`O;+^fPM0rBL*6#z}&psH2 z(<}5^6}WRO1zNJl%UFd^1h7}*t3{xxrfMxsFXTJ$GbQ#GoaiwRdoR*th@feY$%J;P zs8sy+B2;lV3S}bP-P#A6M1QEnx*}WhYWo- z*rx1lY1BJ+HP7kbjzK1GT(qXX$BIk90Ya<~IlJZ|`$h@6($1O!%W89yU(vp88%t z(*8t}H3m)7RcDG<`|vT4w@ zanwG^GNp|sWXBbEOUzEV8rDfuHNM2l@y0y|_)4(7+*CEkM88{w*#3hW*3Vmh@0`7H zI&vTy2uD759|svh>U~oJ?VSTaK&$v!Ngi_x*7tVi>YNrhB2wivkHudGHr75@);Ucy zTetPRz;hFtXS1RnFfP|5$^udbx*x`OU*4VqAssN}3rk9o@a-4% zZpiV&Z2m~C%y+O}E1WzPIs7g4elW_@(_5K30+KPh8W*IDWpPTDWIv0r6-KO+uX8;E zZ7?u11~4s`EnD?qc273wle@liYTb(^?LOgQQ`64Kdg z-3mZ1{JTL@AAj+G$wbnU9v-@*;`$DB%dY>|f6Y9aQ~=RS9-rgEH3QyD<7T_P!ka>b zl1cXtgMD+36*qKt)X0Y2lYk1HADBuqKsGK>V?%O9V4cv25YAbawgFHOMQQUb!01?G z)+;us`!LF>%~sPdI@+)6d*`D5s8stop|y~wZ~+h2{I71}Lxyig1<#J7>G=M&csjwO zEOv|CW^_Y=T!VhVdAV?j)1jNjU*hlM0ac#t0b;k_zHDpl9D?J{H6DC=OYGnqD{ETe zvi<$4TlYptY9U7kV451Ba*^81dte3bN*3CiE;=sIOG{AC0EE9+Q9B!R@Adn92ThgX zDpN|p#FHrs)*XP__h{4C)5E+2jNN-w-^7Q08d^Re?HHYDDC9upUfzu}f0Sjjc_;xu z89*mkXb8xvd&lnx-db-Olyua4-B)y(^sB3 zT1DYr*>|(zKX0wrPIZ)F``zpdzLYpiHTFp^kYf@Z_!*M>656Zi@C9sfyHAY3XXk`I zHK`BaAk!|K&w=}!-TR;l*vfh~TjDU!FUFka zP!UBu09fV#5ngs6Q;O_LeI>t}Bp*J28S0!RaemAN2h_k6BVgQ=XbX>^9+QLfSfUfF zro|>lY(KU1eQnKNZfk=iHTgHcWz==)FVG;?oaOSR>Zx@v#=-PLcIG4ow=dNO)w&o$ zx9oKIprz2--de<5WdN-Hk*B{c;wTj53$q(c1EbVusLxigf!w_>7(oX>>2;@3Lpxwu;iurF3=eo7d{Wav{lZnc;y?xH9 ziih|z_dnV70%6sb@#`(ogCLOxzZ>p2HT{Yp;M2gIn;@3yr<0W zU{kG$@yjFD+ilmInMpof*N~~0!?t)2d;H`>Ux9X*h>sKx1Dj0aUE!Q>Q>BA-euh{T z358O7|Js$4-u7f~SW4&BD$Qu#nE=a5;SHuPd-tGtQIcDS1I-m$F=JFMetu2KTt}LH zzGI$UBScckb2Oqfn{VfBr>S4ADXr_X@mZnd!i_ZcK~qa2>%+Rr9+2G#>A?0e+|2$H z1pjv-jkZ2U(&Bew*G#vSX|hOoobF8!dOvPWTy|$|)JaTI83~2-c`knQ+_6hE1|C+) zEN;U$Q&gF!e;|ybqB&4uNKs>hZ@uvSwnS1B)ZT@|%PG}pMe7wg^a4>hJq+TH!99z< z$xXP4jaGeTY-)T&)w7(+bG+p%c=XS{yN(5y}X_kG@}o^{^(2pjuI4v@##BvgqUS-K)$_Pdfx@SO=@G7Rp= zd;)e1)v^31yR~&E9u`Hk`T`jp<9*;wRY1Un2zHm}n%?~;U!vh(QEp3vD)=#X_MJ7q zSLbRq(TC z?D3~F#_yGNW3OT7>wq;#e z3Jo;wyq<))ewG25#VFIGxW7+*K4G7j@%Bni3(i(gVw{VesSzo|G#7If+-~ryB7Cy3b&ATba2$;^a+^KHPDa`asbjEM zl@@3~@4|Ov3O<^|X`F5^T1&MwG9`E@XSOTV*J@p9RO(0v3sJM_%?~-`hkgZ#s58Rl zDVJIg?m>b)6!o+z+Ee$@_6gy0#G zr<0OnB(miW!j!+X14+JalmGy7lYz5eVy@#;^G`{TSXcQv{D_d=K_E$xyS3pDViH>1 z`J}zV8T*^p?k^%WB!X$_0F=0E6PK*W|AJEjpvpIdzbt=4ydBzDGX z6yc-HYg05v$GZv~0AM;67UYw-qwb6H1s(29ZeXC*`+6<7nFi<9Z-? zwE5+vn)f*WQR1a}*7!p;r`;RD6j(TQR}pX{X)MG%BuHlnrsYB)*42;?{WrJFH5q9| zYo$|dNk|-02GzKhywh%%BJE{I%>Ry}>eq!R!H9stJ_ONYS9|xxy;e0UhTbL=8J-@`M7jala>0V?v}D;(gxxogpO?gRY+zrY9sEv7G?$Cn z#ENZ$f~AM6%ukBZ)i+49%q+q)iD4FeLykw=!-y$`^&a?DK?^vPFmCI^ZDl-3J6}EMrq{mpV-SHS ze^?1RJ7yr1Cp?YOjoUF!vI@T*w$u5YgR000q}SXFFSp2wG;Iyq0Kn27;Y8 z#i5<(4kn(w8ot8b3Io(yjR5TBHWoDku+ENjMdd#e`=u64nafQ{1%Vu>)Pd9}PSWvh zdr@Taog>W1BaPHTMh#aZN|aMwU)qd~dMmdQMzPUGONk^xMNi#}7WgcTjZlLB^YTWB zT1UCk77~vXxtw{pqL^_Pp%mGx=_m(6#cuStO_O1g8u98{TBlyInnV;&Xue(XsHs zrCSO;TZw;)nfD>uOKMm?ASf%}G2Yt(_71sD_#4v*r@r@37?z)@l>W*wz+~zHiY2@` zxB&wJ*Cz=>*m)PT@`FaV`2$rS6VMxGnkB&y*vSxTcp7`wV3^nos<9+ z9*0fXcyf7f^?rtJoG?JfU=wI(b!8}xtABQs$SX5Xdm4%+xQ*|@U}i*ud+Jvzn# z3>uq3gnbdgZ9Q4`yPRf<-?hg#VhK4_|se2TvoaZej_Lfk~W%<(*AZkC@IkZQeR_<4n)88;)6qqCU)%TooVC;!6dr{Ph+l{t@-m`w)nbJyDWyv3DP1?()6H#fQD zwrd}F(lH2xlFCHUY32|%-N5~{T0E_Na*+u_^>Kx2#9K8|$6DKwT_YdOE&JWC_)$^6 zpK|t(orQMvuu#&DxohuJcUM(a;0JH3he)FK&4Ds%>M2Tw0d&7A_70FevRbxzy9GN4o}0HzHk0b6 z40onN$>HQt^$_ zn-bnAyJ5}B{`{;Mb!L)3Y$mHRr<>L?@tBDh=Jp8DufYnWHV3bVq zzWb=n57j_CC%x_XiY6T2yhY_(2*pE?Kma7bS91k$ApD5vvaUC3ffQFByczI%m}p<8 z)w#mZlL|C8E8-b4d*^W#PjbUYr@Xu1&&TvCZwUY!!P>T6;g|brL@D5Wm>MnUvi~q= zZZ4H?oC4+_OJGB88RT z1O#ERm9nEWm3sVa+ijBxWB=)>f?IfFqd|T9AtF<%l_#(SA&8>WYI}GF(oV&}CD}SH zSq-Ib-(b#f9_7)p^ldGw^g?E9zE9jGatP;Wvf-!;3u$5443Sq9J?Vc#qaH2CilT`> z=6Jc7m&vzwQ0o}7;fp#`HN;6uYo@zLMdt*xG}_CsyWeb;V{sfiK$o2DPu59d1s(_yxvT|$hCUnA@>l(ZgMIEO0tgFBQ z{r}ObK;sS5q>YE4ynTqWEsCDX6SGnNT4<5t8eGzqsi#_EeL*x1o;3rmpJE>ahH=;} zUbi#Owb-ij-S1BoDVpKRqwWe;O&;01GCrB=90sc zK{A5_QZ<)ujwz@GwbAlF6nQK{3y!TrIeHYYNSxdQ&Wu21rl;<5W~#BHRdJ<2#!I#6 zA#WD#iphFnK!59sG@2vFf!=@BdP!MLj@@MwmA?ij>l9Vc85#BdgbBz+h{H&MrD?|iF_4<4nfxT5(ZQ|H zy)pzN%};1<)C6klID?qd3Fok`20FgoX(QAHqW=7CUcC$d9V7GwH^BK<#UM_v<)V$P ziLChq-!+m|Xi!9+MJEz*7%QyjEC$*9%Gg>>VjK210lG8-0E~dbDWF$${lV$RQ2;(~ zCd>CKU@{qrtxBb9#0JgAAAn99ABvc05vIr5bxv{7v{b$4{p1S=0eTM(OnSz#&4Rz? zf2UKJj z?@1KtI#)MDgbG6cv*drft$t9q00Z8Lpv&6{oB^L5&{9U&J3Y!+MR@&!0#ctTB1qpK zdA`{objfD5Xg8g2M5Yz+3)Opyt1yFe9^2xKQ*qa3EOhDW`?$@a40S=Czz+(O7h_bO zSo<-+4uZY)-MxgT=3E>YfotbCo39O94lN@Ho}DQAX&MM_xqih6xjCmmWL+a2`lv%PoscuJkeh^{}Z17?b%p^ z@;&Kii;7qCl7MhYQf`w#vu2)SlC+scF3|^#xQjx)Vp*4upAbLHgR8g@m_geTkfEM0 zWZ%%o!TrH~RSCsGxDo+Qmrr1Q9$2s{H^bqGZU+qsvCA_|<>$HF1hzh5^{OMx{0ylx`xTP!6)Id7dL zKnD>@hqz#0l-HV6cn6(`gd{Eguz3&X7!M7nh(0{Z%sI_}$mbBdj<;0H-}{uH`qzIx z$LiNG2W@3KzTynj{D1K#%W}Eju+`q-fID`8c139k3LbFxf#VZfafWz)(ehEa{AK%%;Y%rdq z!P2ss->9moIF1K^O0z7!(n|dd1PD~^19u7H?g@S~;nPg-@e)qO@m7I37%;cVhSBxB zf7`Kdum^!T)t3|ae|NJh87gMhgcrGscQu6xD|1%U6*CJtlIb6O8{b5*{UQ{q zb&|5X0r5S5uIo8KHH~)v2L`U19Gkhs075twK4N&n-16}d=pwE$U}T{#7BL=vt|}cm z+N{I$;=Ex}@EzU?3k24~jv^eqvsnF`z^M3Sc#JI&$JG?f)O;XEP6k!sGGchy`$hzW z>rM$>gdODH&Xgi_gg|6#F2GN;c!=2!jUO1Hi8b)o(Jc!=q| z97LT=@7Jv9dXP|)k@>{E#%jh)^FDfM;~9mKYYuJ|MjN`sw^faEDHYl&8|%5@^}5LB zZ~FGQyum7`G(K)KQx0nHdHV|A%_x^18VebgD8vd@e3vfq9)JXWg05Sud8y-Rb$7T3 zFq1QGsc>eKZW+klya1E#jv31R-<7h5ZD0K>v_K8Pj*m;BQDuD` ziR6zTr%We|HV__O_v3O7*{}`9|MHOtCrYJN0}s^xoM3lFS<3r+b2JkNOW4sMmg@A{ zrRg|h=6RY_PoNEQV+Ox~Upc6ld76+J*7 zAil><8aagtUz}{@2USl*Nb@elH$0+3H*AWqCD%vQ6Pu|&knh33+z&N~J@enN(+ztse)pDI7>{yLK7{^~osA1bqLPQ{&iHIU9I@;)?kF3UISuk=k5%#6KQvEqOtyl8(@2Q>@ntg0VNJS35&y z+pT}Ead#+x7IRO+?m26NEjQrdBRL!%ILv&Kn>6Pv6|NCQo*+-9UO!mRO>piBos9gA zXHK-gBe$*6y`n!Qj&C=C2yJEkqCCI$|CmMQpwKQ&@;O)(85Ha9B+z)zYiuW_z4s3; zp@@dGduFm(?5P{;^#%+SM9&(Bi2y-A-lQ_3bDMsLd&2;E4IzY)OTt&k{wC&SV=MR9%Qjqmp>eyz44Dl(V(4u}B@Pw0 z9!C6_jWd7N)$u_P0r1@M4bGC}+fF+`16pk|dB~h&v+p4*0OnrzZFq=fp}DiN1+P&N z;rlOJ)e<`-rc^R#A%=RQL$VFz|HImm$qZps@A+3#2n4xpwKk3>^69*<%f=TYC;lHu z)f*`xInUByv%{ZPAix)B!A7RJ$F?BE!T?}+!>pnph2!2-<|_t^&qrqNPp>>I+UhnG-XG1IOT}$Os8v>#1>LjZ{}^Q zsTg+^2C#c1xca<&6`lY<999A%S_w|7apBlhjN?8vSZZSPLK+t!>T+s1>=kN}OTehX z)5+!}P5liJba705AP@XjpAf{99}|$e0(g)uBO|x!Kul<*YIDF6N?G+ow+`MosNVsw zRXMoQ5MY?Qmt+r?YA~gvtmmkq2OA->F+!t3=`5W@AuSE(XsCr2uH(E=g*CKt!dIsI za7iMHod5t6&q&8VXyFW~YTs0_ah=z*QyY*Bf`cwq?><+?8#w-ZvO@JiF{;G{Pt`<>(2!!a-VC=yMhra^8R6P4z3F zRY{!sY*jMKR1kfyjtg&!=}TPhPKxw-oyYu;GmhrAj!*7d zQPDA>PCWJu!Q0fj1C4Y5eF~&$#I%5*F-|Ur+0&$$$N{lTI|5=c(GnAe)0@Qp9Z@w( z1fZT+5u_{!`7Y^Qxe!J9a-c57_guVtr637wr==(o=ueh*RkCPKzBU}X)QjDDz3;88NRP0H*LEkPsk!hi{5*3Z= z&>IODD^M>*n=h$}TmXdL;D-pQ;wQ_e)>M^;vzl*G5Inz0(viUjvD_9%xO+^|q9%8d zqJUOT6$!PHR*UC&kGNk}Jv@yN8{u)1P7Fa3!#yewwx3B!EU6qh&i#C0eVayAp(#*E za+x;KR_w?AmSBq;J`@bNu(#06Usw$4JxF$Ns$U$225oX8YEPiZpv-0o{b_V8Z+VqH z&Hw-a0(?qbVT|tDK>osp9N+Dj3DVH% zenNYjVb`{F!5FJ#^?+*hO8_j6#r_)?7Ppq&dyJekVX)a1+@xTMrke5X;741H?k6h=dv5jSw!j+!t=7ZBCY zl6AZaAD^zV*y|PLLPrpn9-DA-reB33`haC`40#TLV%l~2X1;4!nr_XPJPY}g#H~lT z{kt_za|PNNX{^yw)6tX0G3pX2uo$MrSd*d{ z@EmCv8=f{3X*&{~KNwMNSVtfww2?32^E}iv6VHahtA6b_k7`zghKcL38r$axkteJk zm=@!1t&p!LO-gx!ogVyvNt?5yJOPex(s_kv2d3le0*64yoIRnf)#~F|&ymLqyYW`$ zNPtHqwOVy8;7x7!-amAO6ap?4$d`LiM!a51`4#|j)*vc!(7|#7;XpYEk$_PChLVj6 z+ApdLB7QEeh^rDYp1)Zh2LeM&&|Wj!nlxF)Jzr93?Js+@WMWpirm#=_ZL9r`=8cm7 zA|E2~n)68LH~FTLMv##ZWuY$K>l7zB?hy-_Dw2KlOe-z1Y7z_!tajI5l9v0?1ztj_ z?MKtza9AF;^TC%`6#BK;4kDhTx)y(V(O^{txEi&FaJJ4Ul9~=cSA^jFQccmzI1QN9 zri9pMOH{RNIG_gEf%Ot*4HPKNl)r2Yge`<4u|}VuvS`FfRK_nlx&DcbKSS!@K{B=e zt!|EYf#$p468NgNPddQ-)hYV~ONjQqD=keT0~MriYk;W8RL6<`3Ec4K1!?271o zRP(iebu|>`t`tf3|Z^mIZJt&w=mu3h(6;w;f&nKG|}78Lj8v^ zH;#*H1?FNVZhS!$&u{w7^Y1|zA~ieh`%ezGx;p5W$+ryIQHK7XSv(7Lcijfegxa+g zRhNT2&4k{bsgK$xmR0XMIt}Nn!Mq1A7*ZX?c_#GLFbO8H(S;^DM$2G#X1^NerGwIn zqprfL53HXPEL!!L=Nsy%5C3LwD*fQDg(G;4QWXGC^a7|(0W>b(6VAez7cTgaI5fd> zW&c|GMZ3#Ao4;&NqddIDWj8k9*&C?jSAQM9Bx%`$5@|SGU^oZM(L0_Dzo#3lnrNz@ zbaTkm?FRs}MJ7~Mj2}QxG+i0{r zE3RNsAk!~<$z**rTb#GU144^;#fLZ-OTwa(2#Oi4!8pR4{P4xDl8T>-Fn^%4u#W{R z9+-rCVT1k1TqIYSh)E@p#?v1*vKL=^8^Nus6$_&2N?^q(SO5S30A@GMth;QYrm(+b zOf<2#Jsq0fWwe+JS@YP9sK%O+k~b10hbvh>k6(>2Z`%AR{zg0#@V-XQuc&uvON_n& zwCe(SX!%JKN#Lk)1ufFm?`|-a$+gelfT&^1ftd2%&$g}FJw-%Gsu#@po*X7U7o8bx zr}V_4e^sYmfDOB@%Nj!A6k#Qe0>IT1pef{5D`+0c=(X`?eLqM3G9oHtUPObp_Lbh8 zl$sT0At_Cf;E+y>SlXvwTWlZW?#i>?XGqcBY>!G220^F_1d)-?eRr^3lhKPBvtsxeuC`M81n9DYpg#8wZI$ntd36TlN%wLJ1!kznv*q9U6z$$bzBW>D1;$SrqaR0zS-zcMK?fX z9S6CAspEBx$p&^dEwk_!lSKkfLN1MJMFJPY3DQ=e#lkU*p(Alz1UNJ89*EtUc0|eVfd|JjqK@FHgaD}oK~A(A3jmR;(CVu*8v-DMqcH`CeY!=Hv`i681g{sU z3MC{YAg1fER(_ty>nF7B)I@N?vc;v5gh3@FNQQeG<`+9PAGk_iQ9SSd7q%#W7-Y?` zi8kiOIv1WUo`<i%Fy^`xwz7OLgjIL)7*XTzvz7B+(Pe874*# z@=qdn|6UZf^yThb?LKLBZ4$+WY;}#ATkr}4aG_Fk@w+3)gMXA#9SJq@w#t5lV>N94 zNPPmYfR~p7qgk^`ze|BRgt?s?140NfvNcW6D-n%1iHV$qE$6~xVSv6orM8hP%#RQ12Wr-+hesewI5Wkv~^NoNp0b-4L} z$fwzZU8cZj1ZaEyk2na%cF7eGTfVaY9Qw`GcF~VM$pAV@>FgqlrDxMki@R~5QsF^a zzkhVijs;x#6jcBTyv+U8kEgi;z=AgqUaG2T@lW2^RoN;veSQ7Y8ep;|z~ zq8cnmi0hDR)F;HqUq=u?>%nEN@1If?IL|QW-N@yV6CvDZBj`)t<%$20>$d3XN=Jj( z3=5D#XzmSEyBSjHZ_>0K1y^iQ=$WJD_FYVfxCxHVR;7#?Al77I!8Fx)BdK7Dxm=*m zn*SYs2~*?l$Vbdf+A>WFr+U#|&x;yuxDXcD-^|nA5t9Kp{>aCr3czeenulHZZqbdG z#$eMP&iC7babqANoGiB!^EVRT=~rLt(j}ivoamrii&X3FB8FdSB#&?w%y_RT$Jd79 zXY^A^+*46qD`V&$4&CZ80q3T7$wf%=I6|UyfmcpRFE33yeeU-3h!DH$RrGviNvLb> zR;E#7&=K78Jh||UiN^-`JnykM6qxt3W4zCfM8aD_8N3I-LAMQ-IvJ*ypEc{V|AaWL zCJF%t^(owrex_@hCycbpe|buWff-n#EoXnhcG>p!@z zVuPcJr3ugIgG+q?bu?q~yJiJ_%o4%jkV#?vq5I z$MOWc0vGV&k_d{gZH>z42cD}S0dP1I)JQeHp4g>DgzCnkk@t)kWSkknUZttVt-nXL z=Gg~G)az;A$6wN3063j6am}%3w8*deEFI{@g`~D!6Uw-k^HjOj@xM={07knZ8+m_H z>&>$p)thX#aJ50#dcm+gQ9VJ|1brZW1)l{1%Lgn9++*AinvEN^t&6mv0~hmngBFsR z^c4$+I$L9s`W3J1SZClfvey>LTifrN*Fd>r=MDAeESddQQ^F36d)>9@2v|u@j1!3w zG*LUxTOwy5;E7Al;XD4X3XKL-z$tRnwH-Wa3MR9$|F_PfX;)6X(ZJYsq_*#B#-zq2 z=>Mjdi~n289KTclNi5k4r1VA?m5XCIc?;$(cU(N_izr8Y>?$ta{1(7jv~9n;CmDEZ z>Frg~WK~H%58jW-Mi43JEk=tJ0)B^HrabPNRs))1&FAZbggnFrUS;>hoCHmjybfTI ziySslfg`;zdOe{TolB+3UT#jN-tOU>6b+G;n_G19tv%r639ZK3)OZ$&ehL=aMF(Z+ ze&>piiwN){oT9n*9v9zagv=jqF$N}wSmWlp^aNay4ebed`J5K(%pd6O|&nd}NZ z;mm1`t`~I#mV+9#D0{M=xba=1<)-tfkfSUi7sbb&=X5uMdo0p~SRPf+`nUx3;jL}` z;R7)fNba4-6UTrjuvZ;EoFW?kS@xC`bR_U-F<&G?@2>&mQIw4-DmfKx;gE(D9Nz!{ zfB*mzdOx=ai~zZ5ffj%P2y&D2bzbkjT-6%BB36vsB38^S703jXrB)u#D}Tdcv(mRy zcthG6U5GLWHW0u0b7mmvg7sx$I#>{nyPtTx^=Nb z1ToU{)3z7-f>jYcyou5YiuNa2TpQ_t+qnGGx6`xmp}GB1pTK=2yx#?C&wJlCU}xlg z=7e0(w*%yp#S?e*G}X$q;tBofYu&SScZw+eU$&?fPeA1Jz+_Z z@%SmYcu!57!NlLrzt7%HqQvr_P%8%GIaFn`@A_D#YANM2e)Yk{n^MZF=a3eLn^^#> zgM$F?72^vzzElWfR<&Qd+csY`Vn|Gq!s7`ZDMoQe_VWV7(V;=rcIOmNIr#%lry=a~ z$}tQLTDUPw5b`3}!}Vtt{MjNp{!uVVV}6u|qWSD~HFhW)`6BtM$<)!H{#C4HVpzT# zb&c-*kHf*NG0omYMsPi0;t66BFoE1|RJYgmlTV{Pvp(sy9>P6I?1i9LS6>GkU!#kz zRY0Ime=AMQL3zU`+RbYlNE$kENJgLw3(u!;OamQ=B}WLc2Q=Iy?gH_H8$EPs*Pn^l zWC&uq%J3y;SS3D)7mtiK*kYJJs|PLu3W$eNhV-MK_d~GhmnvOj8{V0Xc4G2A)x!!0 zzUX=AW%jvs%7q1TCw}o5k_^qT#$>q`&)au$k zXuw$mX{)4w1P!0^?Pz%Hi6wRytdZ7Saf1t~qG_G`peDvIb{FH?%aOrK3M7iKA~cNi zQS(Z5h+a@6Nlzu0Lr${6w_Y9k7z?o@79?MM5ppN*YZ`jMzrz6vn!h=hRr(20jWuWC zM{+co!e;JW5w5x=zaVt2KjcgR$qq<#jisJ4{rKTS!{b31azWEuNf|}sIV_Ius68HJ zdkBKus=*nyF;hNXzzMC%`MTlu+cu{vi_POEBMJdJCa4#hS6_Dto=vDG^RMf{?OzNv zTf$hUe{1RE9>@C(K$l(W_nKH6Sd1*)H7+Ci0~~Ljg^uvd#z-%Ud@!)Tn>m_{qtV?8P)y zds?N*IGko)A(w0(xnJil2z4t)%>Bl+8BoI50C;src93^7;&@URGx#_`xR`FyL`U6p zH_=i;DZm4fFl)2A)HFSD%HNRP5>^_PXSTvUvwWnu+xC2iXfU!YK#k#prDc-#Jr=hu zm>`?Hr(ZeM4M|*0<5&$-^oL{59Y?~R-<_eE*besTRf%X_$pChnl;>|tKt<)uo zRPWq@&#%Bn4A6`%Z2zH3i<%d~(r>bdQ00IJJ!k*`0KU_h3QY@;Ho`mky|TEbGTc32 z6AXY!^2*ke?6*DOcce606R%&QhE&KS;Q{kTffgxSykKN*E~+Ejj5RFcH;W7D!Va${ z$~g8QB9}3*j=i?!v6aR%8Po0-54w8`e>~4wFnjmETvblqgieoGn}3<3)6Rs>uYRnA zjc`Mqvj#wE)ermXdUsmzn(;MB8fLyWUd*yAw17`(2bqQG)EaWTred zNR?>~yyAVpC>$rFjfm?rj(g{xA~(-8nNcfZ6}S} zVy#dv(L9pj5zZf<#IIA)4MK0yl;DsEm>0Sa7u~J+$n0dlI!L8eN5u2TIH-L2Z^xG% zRhU+ONo+t)fq2lEy|pJK2?{8$%MPXY#g2DyWqF5d>b@Jy3pWfZ=wD7yCkqmzIf90y5QUf{YgoZu$k7$xr}8W#t80jq;B$ID3&D4V_l} zAT*dc1c(h_(Gwo}=_LUL!OFJR4IJ8$#IYAhqbAG^YD68$g9_5OVTZX=d#>ob71>Y+$|Y%mLc?{o&&u3Y z-3~OjMWi9;oivSIWvAhhLTRmXo}04k4DHc=wwxnc%JNidhp8pc(x9S1+k-(E!8Rj^ z7=lkVZ>~}U3Y%JYD#p)3A*)3(6Q^LYt+8B14d-jrLTBqbvFNN<(fmCoe>dOQcw&Li zl`|&p_mHvR*0;FhZNX;*T?6s(a;tr<|2eI*n!(e^GMmE~4OjpK3=OkZO3@y$53bks z53_1OU!3&W#Cp!qKRz?kld3`L0;E?aMJ0yjl0}sv$ym_@QyO1lIphPuGC*<^h?MQd z2-phYr5DPB73z`81gdB|Q;VkB)T2YODx%ZyC~GBAvbZcQO}>O_%Kv^N!D8`a)iDxtXuOF$ML>PGW>dI7O`Ruho*@`csT3o5h_ITzr}^v;K>S_ z4DRG$MIk!C6RVtOxs}IJm;hoY@s4A1*~72T!&?R7Z_V_1Mg7NR8md zgPZZ!Q~^gEbR}q9lMOLb$(gY`A&)(9>{xxZ?7|e*rh)H*%c{v!yj+X7dPFDBs8(J5g+dJLD zDpY+TL`HUn9#UxHpIeZEy3*1x2N~eZLF?`efkMq(k2H|>$!`upHyBE41 z8DBlmEkS^(=wo8bzZMC*61UZ1Y-hy6 zRz;Xa$R21RN$@?Z*>jl%aH`@sTlhC{2N0a&)Y?V4w*r8wQ$Sc*LjQU7E7gu2AMxWB zc85~_Zk=w)#nt)LsrG1o@SF5IskC{9Trk92IXl`*uURDTt6~Lk78NggQXG=Xb!lDvtoaKD)YJ;JAHzyh??kx0rr(pd+rjOH0vT`UDnWy% zcZ~YounApiqXZa>MsIUqC9xQs=0GWP^~LE%FTGP2=(<44_PMIZP@2xf16jv|G7Z;0 zW~+eb3Oa*X&Ycz@FSi0WGb+J3sKjij4O+ro;>N^=zYZ4!~1g*+XbX+)yA$9S;2X#fTE$=hg zhf`zZoKnWepY47g00Lo2*EO{b9rKLrXrD$6Ihd>o6oTAu%NVp+hATRtYVYJsU2=r) z*|y_;bYrrJ`+8_(4{ozPW^5g`nox?egq= zdR@aVSlJ^Dx0zzSRF;i;PV-z>`!;Ro-;-;8uv9^h2l%P zx}?>)fyEhKeQL^KvEKI(1p5LcNiDt?1sOs5I@x7DVAjw?Pm%X)|Dy?y`$hMhakS|? zpSH3TU*p3_!_o!{ZVln?B3jTTR8WN98V-0jIR@`byq#O7qVZMnEI?5#VkocV;3>B7 zQNzBL?37MzgU_Yg>${Xq=F=i_9wDx+f3(D+n|qj{(yF(;TPrU)(D3%HKT-F(zY7|>XXq|Ue;wR5QCc%Rh7ws=epq^2(#iUoOlNz; zKJ#t%0FU?z_(|_>=pJQd;-GB~h!}F#pZy&A6yXk}zcvy04g{|!kzGadGIK_R|J?GR zsUyZ?!2;as(hVKRe?<3MSnW!%xmqq?>1^aOq2|OoMLk5VXF^1A#5({Ef zz&rK6ykK`1#!*d{?Z<;o!tv*P$lESxyQYI8JXfR#cvS<5?4$<1 zIka#30}@!FyHy?Hkv}Eo3>D&~xqoDsfgraSZ#SAKW3>0rFxnD*BbBa_;H~hL?o)^j zp4N@*(5n2m?k--Nh3IEzNtj^xP;CJzL2*AB0_uCT8~$0ByB=nArc#Dm>?1s+KsScJ zGK<0lXr5%jZy2rJn^Kx*q|)jMO8D}AUtSg>MK*(sD z)yc7&eHM&T_8Gr&MG2*VrTbZ8Ns8wh=P78<5_(R*Fb5x?$51SgW2{k*>DHt#Nu>j z|8_i!xVk=Afyf8P)eA<@@?%`#|04Hc1JOA)87AkM-nK;NY1x`?i8~eGyHo}~Ou)H2 zBD2AIJ;wkB3q?bcj2!l?jp!X0k|k%(>#XX%WCG-S@9R91Uo0UG8Wj)y&i9D+#bYJR zOtX?6_~&LPoep*YMx#NRw34$OI`&s{6+q7WeVOybP7wzYF8Hw6Qn zTdLkLeZuKp)aFlqBPoUzGcQau;TQ^oZksfw&dk}O`FQ>^TM4p|jE4LBI(j~cIGpit z0nO3}VFehOEeU^EadyB7r*aB0=}?(z4AtXjlCN!;{S8+>opQ``2I_(YLmLQNY)dM> z8xTsaLBG=8oO7*NE9BEV9*fh#%eXSKRNgvO9zfv&zu+L~el552F~~?->L%W)pB4h( z&q7Yz7cgXb{X+8R%o)LdCQtF~f(APg5bW^gOC%d6EL-aw0NZ1!jhrjvTEQ2+xIBI( za@i?cKMe%=7ds;#_DBH$QE&hZSf)}W5m~X5)lKJqoDBh=Wq4m*+CEEoQ<=@+2%p}K zfBI*Y?eZ10kE6dUOoYhOdkmbC3h19B#UMp_5N0)0+bgsPAop7VIlw@t=cj*Jkm6y- zdP7?8;%6de=^cK=bHN6oouM@Izv~+x%jk@|r1BKS5|Mvz9(?fv?(Z})8oU%0nnuRG z9N!A_S2+ai`1I73aOz)`N6?4;F&1N8I@|&O&NOG6!hDidS?O7bgLGcJt!)RuLy1d}}&nuukW)u{3_b;h9e#bPS)+pl7MrTF>AAa zCzXhE_(<9zQ?3G{`<|(RCC6}D7@><(D{~dlFS!U1f*na;R(}x}1W@@$P2Aosa*6vv zbpQ1MfWRXy(ym&1T^ZjGv>5&pl9bs)5pktOm360kcL-mKBOz({Rz>WnIQKkBVjJr_36iZdrehS!nt~gNA3G$D*sYsj!4n|_(Ug*bat2P^l`mEgLT4L8_Wei1MLMP@yjVn)IYv*Tk@%na^W)%)3k?=g&zs#En@>3&c<8V9!<$_ z0tg9C{+u%TE_u(%G|lG1L6&;se9rSQ{njk5%mitU?#6inU!F{ivY|9?6FW!K$N7_< zlqFp|pxBEp{%hts;X1flq`ZXdL2CTRgF$i|px46EW~mUuaff2@ZgXu28brP6S?8HO zNCyX9`&xF%8()JF_6-ZMohdeifG$^r2YoWz82jv6E@)CDR4OGF>*uTOA^3NE0;nD> z%I)UIW{e~O_9G|iPW99i@v}*B4r-tM3%{*hw$1W_fg^)yEa0nVE#=B;vi`yn$WnL} zH^%-}^6WUCgE2FOq|bH$3Icb5`UBzfnXdPv@lRY0+#4OAz49?Vm^>myQGt}0w(3y& z&M=$Mn}WtuXP=sYg5}jiAYkP2I71}hrb6B;ke*o+!k$aTjmq0wb ze2gz7vV2-NRklBGM)MHeQCS zKZkUf3_GSfM_cq7V2P_(=tI7fS&{NUM>xd0g=Rz@q|;!Fac)x>AaQFYe4J5Dyj#Kj zVA9EWYV@?Bv`v43@gm6gClIGoUX!KU1blhG<_S82wLZX5LSHpw^unHp>d1r%OM+u- zZf7`jPmz?Szob;WF|vqumO!agQF@Um$Npg1wE5zssck9(#l$>Qb1ZiH|JyROE^5$N z+a16+~NAI@m6# z28X6HtgZ>0wKhAEY$tz}TQ1?>@dq)jyBOcq;NG2y^C*E1FfSN>Xo7%@dACpbneoCaEWT-%K_ zkrOq~Q+l0mT($j~XEpzBjl=Yyf^>_0$gGCQT=w#6?9H52VG}E1i5VxeaEcAOF5W&nFTecG1e@m0wGPm2kEVe-B5o02R$gDB-gTdP8xa z3m^p(p|w#X01?H{GEAQGC zvMkLR?Su)AKgzIDc+IttDLk6iS2IF4b{wA$J?I(^Fle7JcO@ypP|ajs->)8V4Tn}3 z%?A2=P9ki2Spp2oDbxI9i17l)?sVYT4xUHq#!8E5tQWZx69U4%uO&%3_X`&!-AG$) z5rS9ybl>LL^+>+?lQPUMJgZJKr{QajJvbCk4*|J%5UU@#Z>~_lq#2j|1-BLN6J_1+ znIU1_n$r77oi+#exXT%n3;fCR5;_Onp|b+&TCkfz1ivqhQKOXKDm~U%S@HChsW-oDxMH2N?3I(muwT7O*T~X&3Mh0Zv_g7s0 zlaJE=JENtZ!F8;?mpC#0q@UVS1lTy_03DS(;;^Ket+V#8d-bUq%_->-$u0N675v-7Deg=5K1dEG7uQ{xj`6RV(kv0B*c@*@S01C-;~nzJtrHJMjWq8F-AZ=Kg?; zF7xEtQu8SceNEoP6WrGbzKhjD8ME6E3=e#Fl>B<-_eqBN767fS!L4t{lvt1FZbKMq z=$G5TKA2jyw=79Za~r23LE=9`gJtWZJGt#pi*6zdl>Z)+Pz#7RjKoHx@`!k_lE!N* zH^f>uf;bul@#qwKkKMz5D5TMGDZ(&VJ~Z74t9nO?pDzl@JZf(*`l~zoRDUi}JQ{!8 z=ZCo*?CA@+Rni-*2Y@&z(cx?Ok8PiQgcMsO{yk?h&Tfr@{v+TAKI{`Z7PopZJ?Jr% z_JfU&z@tECH|w@Kqe@u@ey{({LPFVP6B=?bY{rrD7{G+=mda1>IWKL7;z zs+D$VqdOZCoS5hc?>OT_7$s&LtumDN7eWGSjJBlUXT&NIR%id$Uvr73ka4uw+{iGu zEX!p0yxQ}vgausTjc*$z?8N3v53(BIS(*@M>umSPAbi^QXXE`~*;_`8EE)-qu8d%kLdgiA#TUqOM*whAd_J%)uk2 ze~;crH6#~TfJ1${H0YlTk?xGZAt)m2C2tSgF*-P+~$G7QM)tN z8y#Obj%j>NoAflP5R2L(qdPx>n;IJi zQ;O?XgR3)O?LEqDYQ2~vaO|>%+M@OQTGtAA$cYl9m?JI|QhQTQnc{5hoG@3t0>NJZ zaX~1X$7lIIk`1?k$OIc_DmH%l3n;JlV1!oVwd9>~)mEGH)BGZKb?t8%;0XmGCABjt zxs9mpzFLHIuQjn~^|H$Xkktuc#-c7qOXKIVpFv8jleurkXjpeKCa^*>!rkGZIkT-I zB}AKs0c?UyHWSJ5YbhPWf(=*Mv^VzXoS^~qQVnAM0w0~xVv0})FG%8*uht;DrN|f| z%qjQtj&zW*dXLusz06Ly=EjV8wUl zCu%&DET1gr62eK?jxD?2PuNiAIL4OEL%j#$Xaki_&_Nui7(^`%q}G++!%Nqg?0fv4 zLAD;e_K^U-b)JQY1yy2U0R1br_8x5jqHPC zTM1G9@J0R~nHVIYrruFpW(+x_^xGdUF4T*r++t7jzEN5cOIInB6@pgq4~Zxo3k?2Cd~jhN&o2f;wsKsNr}8)v2z@4ls4<=L&hD`v?=05IWwI zMXHhDQ?*E!&%p}b?c8S*%90K)zbNuZ4i8-W8b_J(*d?v)}6-g(KK zg45S{EZ-lk+^e-NO-FwoRDOJK=Yfr(1%axkenvXr^5eam;5M+J$5jX3*4J>3KH=#- z()z=XI$syP@Vp@%c01DNFMijSrs>(O%mP0+EzSc=~!!|mG zy0L_?WIP--Mj-c{y^8fj7of|1*K%Td2?$Vv@#*$(p>oQ-Mk?o0FpvpYEUp8nHOy;~ zPyhf}6YrxLNm%UH0n;8ecx)DQt+aD4mPxsR7NPaRerIgV8O3Oc0P|^b+!-7wgcV2> zM`UcYqrd%mvBSvyd1=Q@@LF=!83h7TRpyD3M4J0iC@#jpiZD5yv+T4G{2nRNXbe*0 zkc+WMpCO^&HD$pW+Fo^@C6@Ze=6F`i#~-n-B`m`W@lt40*2xgFJe~l1z6l6Px^00P z+dS`#EGW63kd%}hJuSxd8cf~i~!eOuhunx zbzw9Hp!|ku`Sm}{er<>w5YrzquZGvt@f9vYmk?Dj&p*q zY*_#4n{YQk!{ZuN1n0~it1qO<+)*YNJcxeX9H!O5xw9vLVpV?oeTE!5bLE0{Agp3| zm48Gkt{iMYyLd=i$uVoM^yL8y_6Ovj9vrrG83LUsZZ-uk=Yi&!mZ6Gw^3uytK@1yC zXl{dFpIt>ua~aUB+hV$Gu>Sk!i-*PM(=j4FHT|r7=^{tO_$^mDv~mKs{9V85jdD1^ z?CZ*Aada?o{CDbj{+{%WR@*6u;#4)%5-p%`H8^E?$K4-;uGH<~yfod`GUm%bA|(hw z5eF>LlFyOMP6`oTY*m^OJp3ysp53G4T;n?*T^;O7_odXF=hwXG?itPX|_{3lt?XTWhPVka!MCS%}_# z*eQeko3&N`w$t}o8luQo`|Z6;$n4^U>aRY}U3zFNb=s1tENKkh>u6O9A8rAd+ogR* z>SULtMJ;t^*%|hEOJR&4z7;?i=D~*r8ZEI#Gr>{KCr>aD@esjd`G~Ne{A>YP{^rA$ zppoVg(u@+Ff&M7O_wn)m|HkPCENfedMQUb@BJ#s_iqM#R$NysI0o5(^S?fYth`b66 zMw=~byK4})tk)J!*iSQDoYG&Pmf;Lsd0j$}W~NYD-rSJ;wHgL1|LGGkNDE}g?Hsh$ zszIX}h4IkYvpT9gMcDwo+*vGjlqDkwsH;Y@dN(AX+m=t*k7Lk6#(cKi2lFR)lX9Qb zcvnY?FT^9PbbocM9GI#iF;qd1!!e8aP*P?`;F+}ER_OZ(K>Q19Ka__VI1)V*4*vPd zauA@(aaIA0X5b+ALvlT5Kykt|#{ds&Fi9V!-=Ou+p?VtlXW+{bJ*07!mE?s)x)?}X zVM}LaKcA3wn%#`y-?6=gmN33KG1;e~8c7)HbNu?Z-5KU~GWAaP+s6H5 zWv6ued@H4cR(H)+Xi`$&iWTG=Zt^^vMMwwfs2wQ9{*jftb0rDJUCPtPWJ?3fa}P79 z9~J+a$3ICP+SwtlAUFkiQ6HY44M*q&x(ZcHzm~CUxwIVF$Kcj-ijjm25Gjsw_ zXcn8t=BI``I24s%L(0UjpWb@M6D9c{3M#+CE&%Z6R)N$(@Eb_eM(IOA?u=RLS7>L$W$ z+n|%{e4-5W0O`gI25KNR84Me$i|QLItTkR-pnqAxteorJ#7;9xmNL$6ICjCMe^Y8F zyr6gqi<6dfd`rp{w$x9{homUrPzSwN-^v@?f0u??0bv}26-Eqx_vezH|3Mq7R}=G) zVQ7WUVb7IqdcgTx*+a?41;D9)nzVtt(u8B4_u(ao;&@i^vPJ^1n#zqAU{mt%Q&< zYS--Y=075UEo6haY-4BGhWP|@U-w)t(0T2gdRlZ&tiKF)$T&(81d=0v3_{?_#>rg% zaZkJm@?cJ63R#EK(T1a7q99pz`%(L>Z8Olena)LBu>l2Ri%+r(?X8cIZqoa|d(@{S zQ}m)j4agqqh$lB8f@U<4w~xvXT}xQ`&h6QP0_=QvQxq<{JR{1K>!Go|#Qqg`r7Uyy>^Q2fmCa-imE*f|}7ryWk}^Aa20S&4)A_(YIj zyGpCJ0Z;FzVw91W;FYg29+g#?@Qu*XUanZ2H~>F~cVhvB|ZA)Jlgc`iYjG)k$sT{tYk)Uw0CvUeW~o%K(p&5wBU8NVyMH-IDX~ zv;Nffk)sj~`de%T`{`1_kg1Y6W3>whTNi-J-iTTWf$Q$mERM)z;Q2qZcqdl580~XWzU6|f6mVyRj*@@g~~5_FPpXX^RFG(W3sXPNtWQcGd!fN-d2 z%zqFQxQzV#D%*@ZTRv5YWRvwvc=Q&y^-mMc73Q-Iy$xe@cm9#%avOfgPo#xwU9(z9 z)G4bO&Rv2E+EJJ&@~vs*@-kQGHUpqpO9a-g7FSm4>q92wxj+M(6g{cw%aJ}m2)-H1 zPV@oa8ap&%pC4qXNL?@wp9TvQNk_T_{I_7zeh@jCE`Kh#f2<`rb~z9*)dxPr;!4SL z*^S>BfZ!!rs1t>`jXeGN;uiH%HMx1bVgZgIr}{o+L^NdV_N6~DP|=idKKm{p^fa5) zyUmB%BT2v#k*lw-i?#jM5IOKOch+`b%gZ{D!1MEcG>s;bYY6YP3ospgAfokwfHtE- z_QQEF*iBZMURWGn#P(qCGxyWUKv=zrBvdQ#0<~d>R)K%!W2>|OCxgMU!6Lz9={kv7jVtB9C%IQIx zD2&)z$3(CiOG-9Z+zTT2B^9$~6D??@r|B;+Pa%yn5)Fj^4%LqU?#Dg#Y)8#AP2Flt zB%sUn@Nj!sX8cRS*PouL8KWr4O8zZEiGfF$Gm{gF=aUOmqdrQGZh8&xn*E&Ajlh?w zIpYl1)Waqe@ORL~;BADv$4cFq;Cd0>x(N=<7X}L6VW^zHUNG6B!}5)BIqV}}(5V>_ z&0=B;6ngX$*xb|T&rY~4&K_(7-#(VX{7kOnol|A*cxJ}kTB4&?Ov_StAODy1&LFC} zr(8d#{WVw#L-*XjDm0m@QNINx8c^y!f;JwjVK76M!w0U6pmYf1|_t#BW z0}IqZNHf+@meMBMAbnDhUNs%SIX}ATm%&Ioa7M+8^K2diwzLMfCl={sK6e!O6V*`J z_|6d6HqO!uXumQ6leMOl-yk?rJakre?qpiJ0Qg8S5dsZZ7n;*}0mJ z=e6%w=_cHNm3d5k9qJtVGJvY#574L`C~=-@`~Uy|02rbqY{lE*FU3Va=pRvsoe8iGM=8h&RWfAD3z2R zylq-$nMb^~S5O7#NK9o0ZK7rkKU;v3Jxz@f6cOy6D)^`!8G}k=Y9AUDiCOB~Y0Y-O zI{%WkoCEME6R20=-^a~_OMLfDw!DQ<=D670stu_A(eK{6tJWq#I{1r)oRZeA;_VN9 z0U84s+4y7*^9s+Hlv9xNeu4arfs}n8!4^g>-eF`m7l7Fy#NFo=_QY)`s_r~1Fo*-& zxuAwfMMcgixyP$6p|ntzJ)kTd`FI!{F#5nzK(_uIlLtcXUYFTwkla#Oil4um;0BZQQ$Scc^ z?(MUT3?O3prc?*6wVax>0knSq36HVpf5y+ffYP5>Wv-&~CyrX?Iyd1izFPW5d0-$h z4dNR}A=60Z)l-u!t+MifM|D$Ngkm}|teC@}oAwS&EkEqJN-*;7_`SgSLMLJQNq9VA z2U#p^cLpJ4M*r!OW|;lLgHjxRhk9>i5(2c_$DiaNZJ<-oMzgP(ULntn>0?vj;BEg%Ah>q zK(DgSvkswZ-_GAPsgyr};9c-G1Y2w!Uir9*ghpL-@r%jK0&F2?(J1;rpK6hBbTmx3 zqyXJPuf-1*rCKpfMgnM*VuRm;5?{!R8?lhu3jHmrcU{cX80lVxN3cj&!ksf8yrYGlVd*tXLZahBaG$r0J*XU=m}wwiZUfQ>5_<23m&xZv$*C z{nrl;Z4!g6h@>S#19~j>)99hniMSRmv9$92Wkz*R{=b_zmCWtoXJ1{^hX!DyQK(Ud zsq2%x%9gJx`=`nKF8^F>;bK{&na*~g4Xq9Z#gGcdJvIm-7yPw-c?OvTIO)tg=hGpyikc4_vz#ivfB zNw!unH5hlL0eGh^x8VTkc!_dN7q0N0N~La)DzA|p2VNq_F$(%%CdCn3h{CvjAu=?4 zaZPt3u`=>PSM&v~vJGxy4O_xzdsrm~rE`>|rR-`YHrn%S4gRohaU@|0uIE2yZOBx; z77Y3i2}poA`N=kmTvI;}+X%jt00000l@2nZxy7!;aSre~-r^uQ8+g7`jF`<|^r~vY zVc3ReBY~Zck(#GL-oKOLfn&}xPyJCWChgokODjEe!;d~L^jxe=z zIO(5A!%1NMW|B}T)&xvQV=4s_sk9VKBEp=sC>kg^l=3Y0@0U+PVt9%i@U2iKMB?R# zr)pC2!I0eQobgX1TSEm&mSvRE&Gs~O|IBiXAo`8rK?Q(9t=_l5g!(p7rfbf}#qF*v z6&}N{swlZWr2#ndk5oIDR6mP=`xI`q3|Yu`D8=1sAG*fh2{yzx(qDS4)zaBA{g z>I)En<%1#|+ls0bBH^R{z4r~mV51v09VACs4+QUAucaDe^iIZl5< zjFzXFeawF0Fsui+ui_znm!k>Km4X>xoDC{7uZdjSeyb%eYVmY%4dNE5cG)3temB+eeZq1!v=oDkTq$ndzSUWx&_?O9 zD(Xh&G2JJ-_QW`z*J2#8VZCq1SgbJADQWhsjWZ8FPhKYJUzL^m{!v`>aY`?X zp@8t83aCuN4Zeqzdfr2QkhtjdjN51gvpq5IffO~dUHQK`6h2oS=Du`-FFtYjT&45Y zO1Sy6N-hc3DB(5~+P3sV&I8xM@x$)z8!C`J3OcOyWwfveH1P|nJh=ck6a-J+$Fpf< z#Hv{iBNcHDG0Y+Kma)=Bi8XQKv6bla=2blNj(FXT%Z?Cn$hqVo000005ws04`}v36 z-6LdnG8J#BChW7WL^RuYm0V*>ai$6@B&6lX z{j)JVEWAyWG!8UjCo262_u+$aij7`C@t&Qt}_Qzm`Fk( zf(0Sjy#*@nwik77d_e%7I~~OhTb^$$wPBRrcyra~Q(qK*a$scGJlh50@7bC!L9u-5 zR$>_LW}h`mxnBY*Tx(t?S86)A6Sn&TzSqxZZGNWINdBJm>(Kp~-koPiUx)RXvy94P zF&=qj&2XKuRtqY6A_lxC4`G-lb8IWGC4qcYMGVN6)n=m4pBIQr5;X8bPUZB$L+=J} z&f>4#S3~?BKq Date: Thu, 22 Sep 2022 23:40:32 +0200 Subject: [PATCH 3/5] allow PCM chadmins to add or remove channels (#365) * testing on devrama * fix for devrama * fix * fix * fix * fix * fix * fix * test * fix * test * test * commit --- files/classes/__init__.py | 3 +- files/classes/streamers.py | 13 +++++++ files/routes/static.py | 66 ++++++++++++++++++-------------- files/templates/live.html | 41 ++++++++++++++++++-- files/templates/sub/exilees.html | 2 +- files/templates/sub/mods.html | 4 +- 6 files changed, 92 insertions(+), 37 deletions(-) create mode 100644 files/classes/streamers.py diff --git a/files/classes/__init__.py b/files/classes/__init__.py index 7e8f93c054..23647e7abe 100644 --- a/files/classes/__init__.py +++ b/files/classes/__init__.py @@ -24,4 +24,5 @@ from .lottery import * from .casino_game import * from .hats import * from .marsey import * -from .transactions import * \ No newline at end of file +from .transactions import * +from .streamers import * \ No newline at end of file diff --git a/files/classes/streamers.py b/files/classes/streamers.py new file mode 100644 index 0000000000..5754817855 --- /dev/null +++ b/files/classes/streamers.py @@ -0,0 +1,13 @@ +from files.helpers.const import SITE + +if SITE == 'pcmemes.net': + from sqlalchemy import * + from files.__main__ import Base + + class Streamer(Base): + + __tablename__ = "streamers" + id = Column(String, primary_key=True) + + def __repr__(self): + return f"" \ No newline at end of file diff --git a/files/routes/static.py b/files/routes/static.py index 260ab55db2..3996f165c8 100644 --- a/files/routes/static.py +++ b/files/routes/static.py @@ -436,31 +436,8 @@ def donate(v): return render_template(f'donate_{SITE_NAME}.html', v=v) -if SITE_NAME == 'PCM': - streamers = ( - 'UCJrqlqe8DBZsfdMu7gGrVRA', - 'UCDDrY00FPYwLp9VqRhWiDgg', - 'UCdBzv8yzRgvnxV1M95qOsNA', - 'UCvRP7CKUHWTJamANqg8NCTQ', - 'UCPtDuLhreIEcjJr7WWaNaUw', - 'UCS8gM5S889oBPyN6K07ZC6A', - 'UCUn24NHjc8asGiYet1P9h5Q', - 'UCqdJpVkTPem_iKcoVqoZtAg', - 'UCtcVe3ucfS-AZVcNc2GabPw', - 'UCDk0PdOMRfknGhVE8R-S_DQ', - 'UC0UFeYG5aSGZT2e8lOjQ7oA', - 'UC1yC2i8t5ivhh5RsRpGWMlw', - 'UCP_YnD-BO8ctnKgUW89Si6Q', - 'UCoxFxZirbfLvy9tres71eSA', - 'UClf1Wfw54YBjJNlX3NjSOPA', - 'UC8X10knH1xD3PTeds8glyNw', - 'UCgKTJAN-IrVyX-jIJ5INEhA', - 'UCgjAbjJZgBCF3OVGkJV5kCw', - 'UC7xWZT4HPMFYzFoijmH8POg', - 'UCoBfUpZXvWjS995ZXCPxxVQ', - 'UCoOh1fOZBN7uCc3qu-TTAJQ', - 'UCo8wWQvRSoKL57vjv4vyXQw' - ) +if SITE == 'pcmemes.net': + from files.classes.streamers import * live_regex = re.compile('playerOverlayVideoDetailsRenderer":\{"title":\{"simpleText":"(.*?)"\},"subtitle":\{"runs":\[\{"text":"(.*?)"\},\{"text":" • "\},\{"text":"(.*?)"\}', flags=re.A) live_thumb_regex = re.compile('\{"thumbnail":\{"thumbnails":\[\{"url":"(.*?)"', flags=re.A) @@ -470,6 +447,9 @@ if SITE_NAME == 'PCM': def live_cached(): live = [] offline = [] + db = db_session() + streamers = [x[0] for x in db.query(Streamer.id).all()] + db.close() for x in streamers: url = f'https://www.youtube.com/channel/{x}/live' req = requests.get(url, cookies={'CONSENT': 'YES+1'}, proxies=proxies) @@ -479,12 +459,12 @@ if SITE_NAME == 'PCM': y = live_regex.search(txt) try: count = int(y.group(3)) - live.append((req.url, t.group(1), y.group(2), y.group(1), count)) + live.append((x, req.url, t.group(1), y.group(2), y.group(1), count)) except: - offline.append((req.url.rstrip('/live'), t.group(1), y.group(2))) + offline.append((x, req.url.rstrip('/live'), t.group(1), y.group(2))) else: y = offline_regex.search(txt) - try: offline.append((req.url.rstrip('/live'), y.group(2), y.group(1))) + try: offline.append((x, req.url.rstrip('/live'), y.group(2), y.group(1))) except: print(x) live = sorted(live, key=lambda x: x[4], reverse=True) @@ -495,4 +475,32 @@ if SITE_NAME == 'PCM': @app.get('/logged_out/live') @auth_desired_with_logingate def live(v): - return render_template(f'live.html', v=v, live=live_cached()[0], offline=live_cached()[1]) \ No newline at end of file + return render_template(f'live.html', v=v, live=live_cached()[0], offline=live_cached()[1]) + + @app.post('/live/add') + @admin_level_required(2) + def live_add(v): + id = request.values.get('id') + if not id: abort(400) + existing = g.db.get(Streamer, id) + if not existing: + streamer = Streamer(id=id) + g.db.add(streamer) + g.db.flush() + if v.id != KIPPY_ID: + send_repeatable_notification(KIPPY_ID, f"@{v.username} has added a [new YouTube channel](https://www.youtube.com/channel/{streamer.id})") + cache.delete_memoized(live_cached) + return redirect(f'/live') + + @app.post('/live/remove') + @admin_level_required(2) + def live_remove(v): + id = request.values.get('id') + if not id: abort(400) + streamer = g.db.get(Streamer, id) + if streamer: + if v.id != KIPPY_ID: + send_repeatable_notification(KIPPY_ID, f"@{v.username} has removed a [YouTube channel](https://www.youtube.com/channel/{streamer.id})") + g.db.delete(streamer) + cache.delete_memoized(live_cached) + return redirect(f'/live') \ No newline at end of file diff --git a/files/templates/live.html b/files/templates/live.html index 3578b37980..4e22d71080 100644 --- a/files/templates/live.html +++ b/files/templates/live.html @@ -13,17 +13,32 @@ border-radius: 4px; } +

Live

- {% for link, thumb, name, title, viewers in live %} - + {% for id, link, thumb, name, title, viewers in live %} + + {% if v and v.admin_level > 1 %} + + {% endif %} {% endfor %} @@ -34,16 +49,34 @@
{{name}} thumbnail {{name}} {{title}} {{viewers}} +
+ + + +
+
- {% for link, thumb, name in offline %} - + {% for id, link, thumb, name in offline %} + + {% if v and v.admin_level > 1 %} + + {% endif %} {% endfor %}
{{name}} thumbnail {{name}} +
+ + + +
+
+ + {% if v and v.admin_level > 1 %} +
+ + + +
+

you can get the channel id using this site https://streamweasels.com/tools/youtube-channel-id-and-user-id-convertor

+ {% endif %}
{% endblock %} \ No newline at end of file diff --git a/files/templates/sub/exilees.html b/files/templates/sub/exilees.html index 8e4e1f1344..c5f7ea8c6f 100644 --- a/files/templates/sub/exilees.html +++ b/files/templates/sub/exilees.html @@ -28,7 +28,7 @@ {% if v.mods(sub.name) %}
- +
{% endif %} diff --git a/files/templates/sub/mods.html b/files/templates/sub/mods.html index 08f1fb7a4c..6ad60d96d4 100644 --- a/files/templates/sub/mods.html +++ b/files/templates/sub/mods.html @@ -25,7 +25,7 @@
- +
{% endif %} @@ -38,7 +38,7 @@
- +
{% endif %} From ada5ab61a6e967208b08f612e6773b8d36543f31 Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Fri, 23 Sep 2022 00:02:15 +0200 Subject: [PATCH 4/5] validate inputted channel id --- files/routes/static.py | 11 +++++++---- files/templates/live.html | 15 ++++++++++++++- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/files/routes/static.py b/files/routes/static.py index 3996f165c8..1b9c3656e5 100644 --- a/files/routes/static.py +++ b/files/routes/static.py @@ -475,13 +475,16 @@ if SITE == 'pcmemes.net': @app.get('/logged_out/live') @auth_desired_with_logingate def live(v): - return render_template(f'live.html', v=v, live=live_cached()[0], offline=live_cached()[1]) + return render_template('live.html', v=v, live=live_cached()[0], offline=live_cached()[1]) @app.post('/live/add') @admin_level_required(2) def live_add(v): id = request.values.get('id') - if not id: abort(400) + + if not id or len(id) != 24: + return render_template('live.html', v=v, live=live_cached()[0], offline=live_cached()[1], error="Invalid ID") + existing = g.db.get(Streamer, id) if not existing: streamer = Streamer(id=id) @@ -490,7 +493,7 @@ if SITE == 'pcmemes.net': if v.id != KIPPY_ID: send_repeatable_notification(KIPPY_ID, f"@{v.username} has added a [new YouTube channel](https://www.youtube.com/channel/{streamer.id})") cache.delete_memoized(live_cached) - return redirect(f'/live') + return redirect('/live') @app.post('/live/remove') @admin_level_required(2) @@ -503,4 +506,4 @@ if SITE == 'pcmemes.net': send_repeatable_notification(KIPPY_ID, f"@{v.username} has removed a [YouTube channel](https://www.youtube.com/channel/{streamer.id})") g.db.delete(streamer) cache.delete_memoized(live_cached) - return redirect(f'/live') \ No newline at end of file + return redirect('/live') \ No newline at end of file diff --git a/files/templates/live.html b/files/templates/live.html index 4e22d71080..ec5a1831a4 100644 --- a/files/templates/live.html +++ b/files/templates/live.html @@ -19,6 +19,19 @@ window.open('{{link}}', '_blank'); } + + {% if error %} + + {% endif %} +

Live

@@ -73,7 +86,7 @@ {% if v and v.admin_level > 1 %}
- +

you can get the channel id using this site https://streamweasels.com/tools/youtube-channel-id-and-user-id-convertor

From 495cc60a26ded6a8f817d5a8b0df5afed28c97fa Mon Sep 17 00:00:00 2001 From: Aevann1 Date: Fri, 23 Sep 2022 00:27:38 +0200 Subject: [PATCH 5/5] fix /live --- files/routes/static.py | 8 ++++---- files/templates/live.html | 29 ++++++++++++++++++++--------- 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/files/routes/static.py b/files/routes/static.py index 1b9c3656e5..f52d07bee9 100644 --- a/files/routes/static.py +++ b/files/routes/static.py @@ -492,8 +492,8 @@ if SITE == 'pcmemes.net': g.db.flush() if v.id != KIPPY_ID: send_repeatable_notification(KIPPY_ID, f"@{v.username} has added a [new YouTube channel](https://www.youtube.com/channel/{streamer.id})") - cache.delete_memoized(live_cached) - return redirect('/live') + + return render_template('live.html', v=v, live=live_cached()[0], offline=live_cached()[1], msg="Channel added successfuly!") @app.post('/live/remove') @admin_level_required(2) @@ -505,5 +505,5 @@ if SITE == 'pcmemes.net': if v.id != KIPPY_ID: send_repeatable_notification(KIPPY_ID, f"@{v.username} has removed a [YouTube channel](https://www.youtube.com/channel/{streamer.id})") g.db.delete(streamer) - cache.delete_memoized(live_cached) - return redirect('/live') \ No newline at end of file + + return render_template('live.html', v=v, live=live_cached()[0], offline=live_cached()[1], msg="Channel removed successfuly!") \ No newline at end of file diff --git a/files/templates/live.html b/files/templates/live.html index ec5a1831a4..16438324a4 100644 --- a/files/templates/live.html +++ b/files/templates/live.html @@ -21,15 +21,26 @@ {% if error %} - + + {% endif %} + {% if msg %} + {% endif %}