From 27e5e4011b05552ab839cf4c5db890f6784f829c Mon Sep 17 00:00:00 2001 From: S34N <12197162+S34NW@users.noreply.github.com> Date: Wed, 28 Dec 2022 00:14:51 +0000 Subject: [PATCH] Allows admins to spawn a nuke with the DS (#19872) * Lets DS spawn with a nuke * OOO * removes this unused code --- _maps/map_files/generic/centcomm.dmm | 37 +++++---- code/game/gamemodes/nuclear/nuclear.dm | 10 ++- code/game/objects/effects/landmarks.dm | 12 ++- code/modules/admin/verbs/deathsquad.dm | 16 +++- code/modules/admin/verbs/one_click_antag.dm | 85 -------------------- icons/effects/spawner_icons.dmi | Bin 58210 -> 59106 bytes 6 files changed, 51 insertions(+), 109 deletions(-) diff --git a/_maps/map_files/generic/centcomm.dmm b/_maps/map_files/generic/centcomm.dmm index 39d7f903f6f..1e67761d0f6 100644 --- a/_maps/map_files/generic/centcomm.dmm +++ b/_maps/map_files/generic/centcomm.dmm @@ -5958,11 +5958,6 @@ }, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/syndicate) -"uI" = ( -/obj/effect/landmark/spawner/nuclear_bomb, -/obj/machinery/light/spot, -/turf/simulated/floor/mineral/plastitanium/red, -/area/shuttle/syndicate) "uJ" = ( /obj/machinery/optable, /turf/simulated/floor/mineral/plastitanium/red, @@ -9333,6 +9328,9 @@ }, /turf/simulated/floor/plasteel/dark, /area/centcom/specops) +"JT" = ( +/turf/simulated/wall/indestructible/opsglass/limited_smooth, +/area/syndicate_mothership) "JU" = ( /obj/structure/holowindow{ dir = 1 @@ -9691,6 +9689,11 @@ "Ln" = ( /turf/simulated/floor/carpet/black, /area/wizard_station) +"Lq" = ( +/obj/effect/landmark/spawner/nuclear_bomb/syndicate, +/obj/machinery/light/spot, +/turf/simulated/floor/mineral/plastitanium/red, +/area/shuttle/syndicate) "Ls" = ( /obj/machinery/door_control/no_emag{ id = "ASSAULT"; @@ -11971,9 +11974,6 @@ icon_state = "snow" }, /area/holodeck/source_snowfield) -"UO" = ( -/turf/simulated/wall/indestructible/opsglass/limited_smooth, -/area/syndicate_mothership) "UT" = ( /obj/machinery/economy/vending/cola/free, /turf/simulated/floor/plasteel{ @@ -13259,6 +13259,13 @@ icon_state = "darkred" }, /area/centcom/specops) +"ZK" = ( +/obj/effect/landmark/spawner/nuclear_bomb/death_squad, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "vault" + }, +/area/centcom/specops) "ZL" = ( /obj/structure/showcase, /turf/simulated/floor/wood, @@ -33024,7 +33031,7 @@ Ji Ra Xz Zr -Ji +ZK MG Ev Xu @@ -59698,7 +59705,7 @@ KX KX KX uq -uI +Lq uL uV ab @@ -60457,9 +60464,9 @@ KR mI KY nB -UO -UO -UO +JT +JT +JT KY rU sn @@ -60973,7 +60980,7 @@ ab ab BZ hG -UO +JT iT rU sx @@ -61230,7 +61237,7 @@ ab ab BZ BY -UO +JT lB KY KY diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index aea167d9dd6..1e7852cfe9d 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -99,17 +99,19 @@ qdel(S) continue - var/obj/effect/landmark/nuke_spawn = locate(/obj/effect/landmark/spawner/nuclear_bomb) - + var/obj/machinery/nuclearbomb/syndicate/the_bomb var/nuke_code = rand(10000, 99999) var/leader_selected = 0 var/agent_number = 1 var/spawnpos = 1 - var/obj/machinery/nuclearbomb/syndicate/the_bomb - if(nuke_spawn && length(synd_spawn)) + for(var/obj/effect/landmark/spawner/nuclear_bomb/syndicate/nuke_spawn in GLOB.landmarks_list) + if(!length(synd_spawn)) + break + the_bomb = new /obj/machinery/nuclearbomb/syndicate(get_turf(nuke_spawn)) the_bomb.r_code = nuke_code + break for(var/datum/mind/synd_mind in syndicates) if(spawnpos > synd_spawn.len) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 1f8e34bfb79..cf6c589179d 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -214,7 +214,13 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/awaystart) //Without this away mission name = "Holocarp Spawn" /obj/effect/landmark/spawner/nuclear_bomb - name = "Nuclear-Bomb" + icon_state = "Nuke_bomb" + +/obj/effect/landmark/spawner/nuclear_bomb/syndicate + name = "Syndicate Nuclear Bomb" + +/obj/effect/landmark/spawner/nuclear_bomb/death_squad + name = "Death Squad Nuclear Bomb" /obj/effect/landmark/spawner/teleport_scroll name = "Teleport-Scroll" @@ -222,7 +228,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/awaystart) //Without this away mission /obj/effect/landmark/spawner/nuke_code name = "nukecode" - /obj/effect/landmark/Destroy() GLOB.landmarks_list -= src ..() @@ -231,7 +236,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/awaystart) //Without this away mission /obj/effect/landmark/proc/set_tag() tag = text("landmark*[]", name) - /obj/effect/landmark/singularity_act() return @@ -597,7 +601,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/awaystart) //Without this away mission icon = 'icons/effects/spawner_icons.dmi' /obj/effect/landmark/mob_spawner/Initialize(mapload) - . = ..() + . = ..() new mobtype(loc) return INITIALIZE_HINT_QDEL diff --git a/code/modules/admin/verbs/deathsquad.dm b/code/modules/admin/verbs/deathsquad.dm index f7b95b7cf72..d595a0efea0 100644 --- a/code/modules/admin/verbs/deathsquad.dm +++ b/code/modules/admin/verbs/deathsquad.dm @@ -50,13 +50,21 @@ GLOBAL_VAR_INIT(deathsquad_sent, FALSE) // Find the nuclear auth code var/nuke_code + var/new_nuke = FALSE for(var/obj/machinery/nuclearbomb/N in GLOB.machines) + if(istype(N, /obj/machinery/nuclearbomb/syndicate) || !N.core) + continue var/temp_code = text2num(N.r_code) if(temp_code)//if it's actually a number. It won't convert any non-numericals. nuke_code = N.r_code break if(!nuke_code) - message_admins("No nuclear warheads have been detected, the Deathsquad will not be provided detonation codes.") + message_admins("No functional nuclear warheads have been detected, the Deathsquad will be issued a new warhead.") + new_nuke = TRUE + nuke_code = rand(10000, 99999) + + if(alert("Do you want a new nuclear warhead to be spawned with this team?",, "Yes", "No") == "Yes") + new_nuke = TRUE // Find ghosts willing to be Deathsquad var/list/commando_ghosts = list() @@ -74,6 +82,12 @@ GLOBAL_VAR_INIT(deathsquad_sent, FALSE) to_chat(src, "Nobody volunteered to join the DeathSquad.") return + // Spawns a nuclear warhead for the team + if(new_nuke) + for(var/obj/effect/landmark/spawner/nuclear_bomb/death_squad/nuke_spawn in GLOB.landmarks_list) + var/obj/machinery/nuclearbomb/undeployed/the_bomb = new (get_turf(nuke_spawn)) + the_bomb.r_code = nuke_code + // Equips the Deathsquad for(var/mob/ghost_mob in commando_ghosts) if(!ghost_mob || !ghost_mob.key || !ghost_mob.client) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 6aecd76cc5a..daa067876b4 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -182,91 +182,6 @@ return TRUE return FALSE - - -/datum/admins/proc/makeNukeTeam() - - var/list/mob/candidates = list() - var/mob/theghost = null - var/time_passed = world.time - - var/antnum = input(owner, "How many nuclear operative you want to create? Enter 0 to cancel.","Amount:", 0) as num - if(!antnum || antnum <= 0) - return - log_admin("[key_name(owner)] tried making a [antnum] person Nuke Op Team with One-Click-Antag") - message_admins("[key_name_admin(owner)] tried making a [antnum] person Nuke Op Team with One-Click-Antag") - - for(var/mob/G in GLOB.respawnable_list) - if(istype(G) && G.client && (ROLE_OPERATIVE in G.client.prefs.be_special)) - if(!jobban_isbanned(G, ROLE_OPERATIVE) && !jobban_isbanned(G, ROLE_SYNDICATE)) - if(player_old_enough_antag(G.client,ROLE_OPERATIVE)) - spawn(0) - switch(alert(G,"Do you wish to be considered for a nuke team being sent in?","Please answer in 30 seconds!","Yes","No")) - if("Yes") - if((world.time-time_passed)>300)//If more than 30 game seconds passed. - return - candidates += G - if("No") - return - else - return - - sleep(300) - - if(candidates.len) - var/agentcount = 0 - - for(var/i = 0, is|mgU2ycI#?Wys$;l z;O6f0yZ6QHB5ms3+yIQDQfDcSaJtUhaxnD;C{<+2*vP9Hbsm` zY|sW5)eovIRE_!z`ytceavi78O%XB`yycVpf#w$ng=j@~zJ+GS7YXg#2X_1d7cF-O zX!h683Z9rRkM%cyhz>?MV-?S;rz>QO4JN*wnxuHkMT`!E>2ucU`Iv*ooK&p_y#%bPM{LwIWK?m@ zII1#qg2zp_83tE*vsgg$UA&PA;Z#+W5qc#fK29phNoTcJhNM31pxKhq$oM<6jn|BE z_)$T!!*TD_oG8hrNs6vLrEk+qCFs-8~#+)Bj13iWj2XRo8b zCGTBXuid)Z6n_Eq|Nbg13X`X^@BvTJf84{Oy3RHJn*j!$05cF^xQang2_#xQEmlbx zueI^g0!9>U$T?|3@fLGZCANu4W73A&G{z+ISX*M^B}zncG-=YH1g#oKs>dia2r7aX z7_NhZh{I*~kIf7-+yt3{s`Eb2eui0V?|IkvvG%*yUVH8DJ7_%F4A5$|WFI_8e?&wC zQ86(T=I2{HBBE&<{Qdon9p1;+2M|vHe}8{t8{8Gn7UN#CW{og)>Qo{lBT=bT-P*5G zsfdh>Wa`wZtXZ?hqW1qYH&>W5cP^8{!^zCZFpK>HqWENHWH2c_oH=vn^3U8{i}Ls6 zdjmTA-qQd7!u)(8GBQ#as{Utce}BsEJTwjFKd)&JNZFk?DEvcVe^gYI5EK;5*s&pa zs#Mf>;;+|g@l>f88xlfLaB#oE(DW%Lbar-jw?8;-+B8XTb$x9_U(gdz$;C1r7}@z3 z=~3`L$@tWEJ9r16Uz5;^^Ir)80RcEWI~zk)ntqm+mRd9z(|;QOgu>N=L-1^dIeQsH z)tY`9!jM{vzh%S-f5G3ufxxS$y4ZigXFQjho3Sq|v%3G?X2jv`?M>Oof5stv9^T&G z6l{OP>i#!{L42-gyQb;(Rf^$I?*tLL*C(O-{S?g52^$+5X=-X>*sx*9JwI55o3ji%aKe=apQbN`on?g{@JFgIq7 z(4F`g;H#9|1n3SxzbB#VNBvMzT3U)+F2~KyZO}X4Q1crCwM(5m@g4Kxpo$NO_Md6b zx71WCzK3_FvU1Su-+JN_r|o^r{D0cshpi_r4F-L;@KwrHkM!he|#hb91;L_eENdbPK5tkog<9>g*SUYKEw!l2TfU{02~su#f@zE%kQkl z@9yp{gl!7Nv2-L)I(1C`{tpvH$)kV|j5+CRNp9 zXqLZk_`+)ZNl8h9hldBJKl%`Ta1bK`0w^mjMOJ){f6Gb*`}SuDyLard3V-ZxJKisv z%^1jZ)%gdYR8f4U7(elR+ zEH6Utf9~!=aZwQ~wth)fT>(|0BaL-w-xT5D8pDe(=cjl zYq5q1#r`%*cwm7z@vZtInCFv|xpMU?%Xd9Vf5YJxv$-H^&H)+3=N5BMeHJ0xEm$9r zo}Mlk5`9zwU;NCQ<7r}GsN-p8`CeQA)rg7mLfZGYWFs?I!NP+BZdjC_alH8iCrYj@NJK zf61wEwYdH1>FL76iQ?Z?K-uU8q~)fG{JCi?9v?>)qW?YIE${zb(J?}5YAX5p`PkV> zNx7lNK>`jAG921Zaj8^F@|6lA9(jaa(J_PeIKKI~^MJ)C`Q`ary4!l%zo)q;L;0StUFjk|^@~%n1q?AKA=w{ zAVW6H4I4Jlpwp2&Tt-5D4TldMf1#p1Manguj?<^VHQV1(sBA3fg7z%Ah5rEHm-axQwk2h44Yzc7jHYy5;_s;y3kwXMSt? z|K#F0^n!SzJ37i(NegcW2l7zJ!}$66(b(9COeUW6ZGynb#RE?X+!I2Se;)$ydP)l0 zw{J(#*Bgc4b|<0*0faUI2M0;}CdJXwjx#4~*zoofTflr&W8jKZcTLx9KwF!Di<1Hu zCxuOjdO@!OWVreQEMK;a$&)AZ*FV2Ud~7@?@=g*H8_lr^KcK$89v5e4{xos~$J&Ec zS>h_3xgtjhRF2_-R=nNwe{lC?dE#;w{OmE3o?6O>AMN6Glf3LNxruQ}E@;mZs2nrk zQBY_50p5CJ6Y;U}y!FN={&&r@q%`V{0m72yvM%-y#0S0kzcarz{J$$YM(}eGV;wiO zC;IkP`QfYb;{pFbE|gthU9}dyUXNa{CwaJxmi92^ehv;+8wEZ4f6hBR^QS-4Q1&t) z-uf7}+l53ThVvD-j`CCARFnMj{4K6ZR}vP!&L7rqFm8u)s=B@Xv$vPx;2=fjXorJ? z6os=Ag|iZy2zA9RM?e81N3wj`GCVy!nKEUHvHZC;&y#Yam*M55V*aB)W%;sY z7P|^J=*1YgQE!XEf5ywp%Na9f3|rH-8TnmYTv&k^F4ZsrZ8&bAFty(lo$XJSiz5I_ z+dtI)2WV((qwwZU!otE(DwQaeN=_FPl5#^79+^zWI;9hCZf=ZjkN(kT z+|$yh?I_5HFSB9(PioET?Cd4BQBXJNbsf+j7ELo|f5EIe|CMmr(cf67(^ir^T*kQ8 zn-s}q7&3z^&VMDmw;~pmN=1HtJ_AV!`0E#g&G@Cm#ViZ}wA>(hxC~#p3}}O5z5;gILrj>>laadH{E{&kwi!o~vPO6iZ6PeAVdFuIf5 z0JzA;-no5hM4$a`^h7r`qk zhBmP)a^ghS-?Ou~jecdGrzILD*o?`_m9*v;#X3(=T;a$t%2Nc{!SAo@Oku6p7`6}Aon%4P3p-1 z)%h08={|V#&5q-@ZnH|W?ke0;fDA7?f0mY(a_-ViO4}3A6%`c`6ckKRQ4tD-f(D(A zbLY+x>hDNEK*yu;fx?u(va*sxhYkTyTU$$D;3%$My-HKl4XzBA;qN_ysw&I!8(ucm z6@SjR72@sR`0?ZU`eYsvQzD3%5o`q4L$8y zVF;3f{i4NGRaIHk|E4I}Th4vWkC5+R$Bcks94u`jthv?f`|Y5&afu*6N%`koT(ydv z+;@2*x7kdDOmX@QOrHU+%5JNvf32${<>mdhmC`2YReF*bXUbnc>W31~OE-lvW5xhb zTA^V@>kaS`Cx^WNPfyP-#|(u3u9_vC*-qtT#HC@kv#meqe0Di*~u z)83xEQ>QrK>q%K@DQ#_Sw6(R-vU?Bp3o|U{e^cyvscWvOr*84RujuVj-M9a&#xGEu zDs5?QW7{MLp2%(Hh)jWReG8tQBz*gNBv9x-;Jc7~Rd z000DjNkl zUMsOAzfnZGvH#-5i;NsOvWxwed@m}q7nIYK!Q z3REp!idV)yXn*t`x9{!=PCx$p?x-g%qo}BevJ&wY_`M&vkoI*83{w)E{)*ZD-<*Bc zOnjeox!;Erlf?^9SJfo4z12GLplG4|7fL3JBEH)S|1i2kdOZ(+m0~K!)M{ zlqpl#w{IWG$;lBZDJe&zqoXl>L_8Qcd-g1^zWQp!3opEIf7EbWW^Ht~f8xZ6k`pIR z2!mz+Q2XEA&W>v`8BK`dK&9Xxo@f7t8eFYb(6||JARvI8 z1q*EJf4YHfR?LPz!G2LJdcB_3b?eN^*etG%XW@4 z@+!Wg%2;Mi45j@;$-i*nLdh1jT4?HAwt2Gvh;u@lHjy}p`O&P243jli-}?FjFz(8g zt~>tZe_23$lz-&2&w4%PmsV)!osND9kY2B6>(;GiWi>T5UCOM5^6Qr>dnvmc@XP(;dYz=Cq%AXN&LlK6l#LrVlA4-&%ekDSq@*pYR;{9-pn$Bb ztUeucucFTaR9jsw{MQ6=!GAh zKXn)yc#;=B*v|M!)AH>?1D3xE54HV6%^wvNCA2s@1L7+RTCJ8}0f(KPjo$%|MMVjj znO)cH+{p+H4K*%+?JEu)I>hwp)5*%pvQn$=4)kdfx-dUqh>D3JA|e8Re}7|VH{j^e zf1~*O`x6lnK~zi(h57jw4a4AsS}+xv-Y`B=+~1P?Lv8<1^G8KR3Bkd^goK2kQmKq$ zV}MqxMWs>^5)wjia4=C(QG*hUY%q|Tnwq$A<3`S$In(EnOloRs;+ZpN`aEK~m(iz~ z(AnA9-FB#H)22y!s~cF;I?$7#G>{|dLaokH{6lU3Q1dTYvZM>g_3PKk%*>R`n>SBT qC=^|e*|B5CT{Q}_7Vh&}b1CS(t!+KO$bVOxyV{&P5bZKvH004NLjn++Xn?Mi-;IsJ^tK?oa zZLdDy4<&93ak16(Rt+$QkzvQ3U4q+yuK&7U z6Nf13N3t`-mw|kQsxuh|#!RebgRCYqNpOQI4z1Ox9yp1PYKf3LN`y_1BNW3c*%UA$ zu|XSL)Ot{Dp=z|AxgHW7F4t-D-4q~G!CSt_Z)kq7SBTbRms@CIJd1Dtf1u)5xahVz zLUXwKR`A3;J(pj9AUYbQj8(X(p0AMQJ51_!YNFyT^AIG&loKS6qvGCJk<|%rx+070 zQ*yG>NL~^~Yo*p!l^1KA@o8D~NM9BTwQ_wv^5x8AC{cfaLiGh;9qe<$}^=fhU?AatFB%sx52en_T)sm2q z!0g$xS-pC-toHx?@L_Sm!i78-8%tq+exKYgAO)Yo{Cpmajb*{Yh5Y^SVOjOB=X*2# zeJ}U_zp|o2Oh`x&f9=)(tnJ_MaT!8;-#;(3i){F~Y)tg+VSiFmk{A&Y$&@M4_-nPa z_S0`Q81UC>nGzjML}cWM($EYmCv-7V!2}?>!#;oHx^zEa+ zam|y8q{q_5fAD+e^YPoO=(^g7vztGQS8Sx_htDb8b#v7*9sG0|(W@9Rc;_FgU2Yuu z_SN@vGSPT+4|8TGaOOf6b7m*dcyte*P6G=yI&g3!MihXoJ9%f>-agCz>utfUq%VH` zr#{QE*0-1aFTJ`J=ZSaYJn?RxdEqt7?=QW&cFcmHe}mhH5nqCtJG^UbBAsP>ElYEo zt+BVhIp8QBSdRGhpDasro2{|8{cG2*<--p@BrLc$0mJEY4LtG06E@fG&%%@i*9~}| z=6~k692^IXXcAg|@{kxB8j6>fmnBuD^|H3MR@P)px0?R+$}G_}az5@}0hUy?)=P65 zQd{X?f15N(3~_ZOy#BiZ_SXbW<4k8KE_HP__rGRt27!Tr)P3?EuCa*(1_p9;+eVxF z-x_o9IcFGHraRb2N{2d}Amo^Ywl5>T3uf+wMx&9Ajt<=2-BGDjW7hfXt#1xO-R+Gu zoO_qR;H5Zu`rADCm{FfRBsR}ZBgEAeca4UQf0h=`bapcF%bh<7|C?EuvOpXx_?QXy zQ8@z8IAFw+(5;hyrl_s0MWs@q(P+lJ^VwV9oT%N&)1Tm|-;QbU0m=R!dg?88v`Fva z{m|GrX7+FS_6+4NL4EvR?h?e7Z_kW{{GbH;s4Sx%2jhzo%>k{_9~S|9@2EjHzu3}# zfA;e*j#4B7Z2#=vZFVC3HLFCN@^m1(KPh68s#m7YC;~;I;e?Sl-v1Aq>HGTniZPp} z;#M2RQ=Yw(zkhCzgqD2qv6zcI{p8a&)7R%plf1e!O7=`lvb3LQE~M##l$zy#-uS|1 z`pcFr6aD=BDBtxFrpO2;g@#gBTZ{5Ue>G=))D-N=7eC&<(FK+ZQ+q~9|MeZWQ5UolZ~euC`w=jG*zGiFG?e>VYjcP%34 zaE_#ZIEVCU88jjJ-_KWm|K}#Bi0{1f4iyy@I6FJB;fe`Y1-QB@aqS5;PEJl_pF2 zRU-%jKVKTnvjm8F=ouq0ADwT?WfI##={2yN&qCx~ccGau0YMOWNb63_m;3nQPHzN3Kr>+iYPFiAXk@j&S6}4R zyi+_Iy;RZ%~l8l1|`e zHU1bG&OOohqSNUx8jUEG(n;SfiX2HFeM#W!5$*F40P8nwVB5BBh^AJ{B(&qwYy2@} z05X630<2iRoS8Fc^5^&dLS|Yf-gg$q}f zh~Yj_)EK18JwIQ6RxDk?qF+A7vS*&-qg}bIx2ntjsz%C7Qe!wyxKGrmM?wAV2Y74a zCNk49d28b)UR?caHW*Eo1Yy}K9e+vdoCKD!;iEIxg*Lu>F>s(!JHVXRn+i&y2AKs(A?stInERgxf!T92a zBcRZ*Fjg#Ij=#S@adB~$_EoF@jSW|NPyW>^B>@3i9)08&tXRHWwr}BflavED>5o#f z@rH&5qN1YMlJkK@-`m@pl}PDQ%@fe({YHzm{nqrie?MC#jR54f-`@TQXz%W(^6FJ$ zVq);|@xjN(hw`J9Y`7u?9;H&r8Xr$I8Vz?{bE3W5Ci&?5ux?R3uj~%8xsC(dGUQ#b z6DLma@Vt2dq^71SN=r*cbH~0mNI{N=66T`Q=@jeMtrN}rjfVQRI_lf{CLA|cz%+JB zl?hBHe^bxHaPIu$y$@V>znh`I{U@rbEJj~!mjc|SHmN>j%f*YNBqlRKqmj-2q5R)p zALRGH%i=VCo|;NtULF~#sfvPv0`bS5(#+0ouFwujr4p0L#8qcl@bChXlam#Bd3j=L z&wjSzmEA$CTU3uisV3Ox#@jo%H5oDh{paF2f0inkO(zeDXWc?9>)H&BWP2#Nuj?vR zDkbKd((03k#J{XeL#x$NQBlEYN&>$8+sHopP99Pf1^}*IA=^Vquu2JZLq`V+XG#Cf zO*3WD&rdPnHT|D3Hk8vr^AoPv+R{GZdZ*6TA*REYlY-}uh_UySyWr=5Igb?G=M#TK- zG@U#o?%TJIn3xyZa$v40sHpt<5%|uiZ9Qfj@F|M^^A~F`F|+PBcOGQ zKI4_$K{zQ*Y(3DzkA`$k?Ur{A(1Gn3f7T?lN~OZj&u>8chASr48%@09>S1Z~^YcTc zQXvR}YzJx9SM;lbZyA*w|RKTJ3;!gZW>p)e;*UOOp-!KTBw&qM`zW!GN2ak_}f(yx9e>e;L|o zX=!1W&}b9?_h;*Y7AF11iEW3^Tb5f7wAf6~f$g~AgNWvr9cycAsXlX++MWV*RaI3) zL_|_mRfSruroF9=>gsByhPV+L+Iwq!v{>smHa1dJR0KdvOAF!Qlc}$-r=#Nv=RA~z z1WuxuQ{;S{ zJpJh!rS`S1E)170QFHn`UERn3;o*}9_}|ORi?XsZG#bq))g`R`@3J_J^!x%o z0xq_-aQTXfo~kfJIDyOJbefu)Wc9x_r*=1RN9QamT%DO4>dyY!4q`gHfBJlOFuu6q z%c$y;heUv*ZXv|Q#St17M(&Os6qS~8{_JT20<@ezFAxzK!HX+jq_nh@saK`Ni^v26wzgI8ZIs_lzsOdA;JFC z)z;G8-A#9QH~&ywM@B)utp2w(j+asG%MC|BmQHl`Y@a!ZoXwj#c<>-IXU=5DjvZuV zW?H_TJ3C$w1mfc2EbGRKgsATGczr1`}gm+ z^!UuoOawtdr_+tu@Y`D7)(mF9HMX|@R`7pKMmpZ!-h;05fA;pKCL`Te(hhD@Mx2n$ z!A}#H#c7yKCc4(F>C@-olS9-pt$!G$- z)Yh$P;zyb+ZMMXo_S;iGH8oZ7u3j&8^l#g|Sp=jxp-r1uI)?Sp9E^WP6o5=76I-@y z>C@KS+&rMoe^xYHK10LhGdFCr7528@-ui7=O*{|L=D@*l8Fo_oCz56g00037Nkl7cNSI|z0;(G0J>)YFY zd+R49C5hLrNiY2R`1oKj7}&dauOcxqQ8a%BaB*>=f3UD{+>C-8&jHz&Va)+mR#b>d zDJjIq#}g6~(xaN-uByDf60<112isQzD!|Zp&~IcQB