From e01bdd4ab0f1aedc6f732a5276834deebdab8680 Mon Sep 17 00:00:00 2001 From: Jimmy Zelinskie Date: Tue, 2 Jun 2015 15:32:28 -0400 Subject: [PATCH] triggers: metadata.commit_sha -> metadata.commit This resolves an issue where the custom-git trigger's public facing schema was not the same as the internal metadata schema. Instead of breaking users, we rework the internal metadata schema to be the same as the custom-git JSON schema. This commit also updates everything that used `metadata.commit_sha` including the test database. --- buildman/component/buildcomponent.py | 2 +- endpoints/trigger.py | 10 +++++----- initdb.py | 2 +- .../triggered-build-description.html | 6 +++--- .../directives/repo-view/repo-panel-builds.js | 2 +- .../ui/triggered-build-description.js | 4 ++-- test/data/test.db | Bin 774144 -> 778240 bytes 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/buildman/component/buildcomponent.py b/buildman/component/buildcomponent.py index a59cb421a..96afc6821 100644 --- a/buildman/component/buildcomponent.py +++ b/buildman/component/buildcomponent.py @@ -139,7 +139,7 @@ class BuildComponent(BaseComponent): if build_job.repo_build.trigger.private_key is not None: build_arguments['git'] = { 'url': build_config['trigger_metadata'].get('git_url', ''), - 'sha': build_config['trigger_metadata'].get('commit_sha', ''), + 'sha': build_config['trigger_metadata'].get('commit', ''), 'private_key': build_job.repo_build.trigger.private_key, } diff --git a/endpoints/trigger.py b/endpoints/trigger.py index 692c23990..89a74cb2f 100644 --- a/endpoints/trigger.py +++ b/endpoints/trigger.py @@ -478,7 +478,7 @@ class BitbucketBuildTrigger(BuildTriggerHandler): } metadata = { - 'commit_sha': commit_sha, + 'commit': commit_sha, 'ref': ref, 'default_branch': default_branch, 'git_url': 'git@bitbucket.org:%s/%s.git' % (namespace, name), @@ -822,7 +822,7 @@ class GithubBuildTrigger(BuildTriggerHandler): # Build and set the metadata. metadata = { - 'commit_sha': commit_sha, + 'commit': commit_sha, 'ref': ref, 'default_branch': repo.default_branch, 'git_url': repo.ssh_url, @@ -936,7 +936,7 @@ class CustomBuildTrigger(BuildTriggerHandler): 'commit': { 'type': 'string', 'description': 'first 7 characters of the SHA-1 identifier for a git commit', - 'pattern': '^([A-Fa-f0-9]{7})$', + 'pattern': '^([A-Fa-f0-9]{7,})$', }, 'ref': { 'type': 'string', @@ -1057,7 +1057,7 @@ class CustomBuildTrigger(BuildTriggerHandler): config = self.config metadata = { - 'commit_sha': commit_sha, + 'commit': commit_sha, 'git_url': config['build_source'], } @@ -1307,7 +1307,7 @@ class GitLabBuildTrigger(BuildTriggerHandler): author = None metadata = { - 'commit_sha': commit['id'], + 'commit': commit['id'], 'ref': ref, 'default_branch': repo['default_branch'], 'git_url': repo['ssh_url_to_repo'], diff --git a/initdb.py b/initdb.py index b67d0440e..81d1fc978 100644 --- a/initdb.py +++ b/initdb.py @@ -439,7 +439,7 @@ def populate_database(): 'docker_tags': ['latest'], 'build_subdir': '', 'trigger_metadata': { - 'commit_sha': '3482adc5822c498e8f7db2e361e8d57b3d77ddd9', + 'commit': '3482adc5822c498e8f7db2e361e8d57b3d77ddd9', 'ref': 'refs/heads/master', 'default_branch': 'master' } diff --git a/static/directives/triggered-build-description.html b/static/directives/triggered-build-description.html index d645bb3e4..0ca5af364 100644 --- a/static/directives/triggered-build-description.html +++ b/static/directives/triggered-build-description.html @@ -21,14 +21,14 @@
Triggered by commit + commit-sha="build.trigger_metadata.commit">
+ target="_blank" href="{{ TriggerService.getFullLinkTemplate(build, 'commit').replace('{sha}', build.trigger_metadata.commit) }}"> {{ build.trigger_metadata.commit_info.message }}
@@ -46,7 +46,7 @@ ()Y~939DTRML-ftAb}WZW_F@1f^yDTV8iV0ED|UoBoHDZF(}J>^_>fd9vR}2!cEg|1bRAzGbEz{ph}h9vf{upn(H!Lio;p}UaS`v#O2e$Jx49f6?X&6L#$a#Ku9oM%SBFhl&Hn3GVOJRuZQDFc zTv*<2X}Z33!L1Lcdy}>oTEuk?_Y^$h`cf;sJ==ForUE}ZG$;JP&2ad-&V_mOzM~3y zv%r$Du=4W*(|y4S1o`yZ`~Xk9ZH#W1ckh81?>|9fnEXuY+2Rkc>_?Cn>4GagGpu73 z1oy3i*4VS7!5VjF>Jqu|#4iZ4Wiip{4cs};%H4PWiJYgsUm(b-2SZ%mwL1%~g8Y}C z@;={m96|2Vsla<`=MIax;J|J|-gsy8b6fX#*Y4`DFw%K8u*z zSX?mww-&AR9^Bn)N%~XQGo@1|X19Ox?0eptTjp7&E}a&_E#b?rn3EmiJ$g%_MfdCm zgZ|^`#=w`O5bvZtJ1qXD?Y~UA?X`tk>3w`phsAHFeqYG##z^(LZBB3M-abq4bTuHN zF*da9t1XXszuwzx3A_9GzfE7){Y&!knRj}3_7+D!>aoBW=x>3KhsxpOpadTWLUr(o z+FpZC)r%n;MkXMQVJLx}v#tQERiKxve%`tjv+h3b^z_DUHswmoY+hNp4EHz>9@7 z1z9CDQ<7brRbE_8R~A*%Y)Vm%oG;eaNEHp87$546kQ-tG#kOlNp?DkwI>K7 z%ZT)ZcEl4++K>u6;_<-{49Bn(z0BDi4v}?G&cQfT?J}issziybn-vtEm1WfhN^E-n z+Ps{6v8brJsJf~myPOj$^YdiUo>`ej7mBGFsl~O~WdhGvWu>PTl$LPzO1>toxRS1< z%ZjU{T#nDn9@6Y0#dtfz^T6|?&Oe%G6&L4{1j@m{_Bm08CZioH<&s31b}Aw#@L=Fa zoxN+k2%Z->N!0olgTuZ>dW_R?1cQGmdY7s&f+EWlFDOu=1b-=Nv9 zb9>vedY1~#AHym!3>zaaV_VzuD(zC!l7`0Yy2P^9g7h}EC84stLvhg^Wtm+|*sK*o zX#?Msv$C#zQHHdnxU{~hnVs8Kr!*~Dmf&n|yrip)kU-0<$g!H95g62S;ut+8yCA!u zqfic3;3>`_x?s;$H|5|s7tOduK@^o%RdK1UnvN1wGIMEX$I5)AEUTUjD>EIZJ<5=F+-n3k8t#{X}u3_sH)uc7J%1Ro< z#^o*LDOLG=LRy*FUhQBKnwPC;S1Xj{73C}|*0kl-G`3{dCery8)veHa{O?+iPv99A zdMY^cvo5g9CAwMG&Iy!DaoZ`*#Y>bV@CxN}@{#}-4w;sfR;9_++}OTs$YjuBHAR(+ zD~n5N+EeXqsU^#6Ya3JCiS2G7wYalI&dN$@T%1#%u+))Lo0(FdU{B93O{5DNo0_>x z^~xU&Eoea48A%YdVV!1#29(E!mf(;ik%kuI6dDezQ=}xj%PsAW zhI;3)KdD@$J*~52iPF^3!Y*%>8p>BTHMdtVTtzK3ZbwEQ^ze!-xl^d<%uj7zBsL@{ zwP|3tkX`(qEnkD-~=jjZa2mAcFCbIE?HF> zm%6-7aWts$uC~Exx~eo+EGSKpa&oxpQZAj&60$SJiX5&aFH;oLbJ8oSqymX6PpgCx zEy_hwxh&@Lb~v?{mXwvJuwwe9Lk4wZWl5C4+~0J8b*f8(D}-Bt&OCMyuB3 z>CFg=dVKsy{eN$&uJMa5l%^Y&X4L;ti$P)NurQteUzlt9m=O3k_B!9JCnL;DZPRU! zSWiFT7je?sm1TteM)iNx&kVzI{#)~PU7WM%hXwsn%jq(;j^Y2xXcuf23FnR9H(Gz6 z{^!EDn)E!eFx_5MA@YnQuu@ivTrNp9xrIVzT24iAO)ZmBl$Bdn0iHOcp9-?i=!@b? za@hhdBb6&GNXr$=vJ0!y>_yobC1N&R#FW}A)6240p3k<^1F*{3#1gmLDY@LLOxab3 z3npVQf0A4-I88VdnN@hzttfn}+R~h)xEkx5+SFxjZOu#6rZKY`%O){m5)G42L9|PB ze}v&3Tg-nV_Bz_oPaBV16{GSl-mSts2rguBizql{N}?TZN)c6=5gZ~f@hbS>CL`Td z-mcD!fC+DIdsBp_!f@ux2oV$w|Dt9_M71?9a4BtSR8mCLCEP5n<;f%5YsU0~;fF{G zc1dI}j42qjgCeU6%(f?~Fiqv098`@{6iTHPyW1^F5?n9AJvSTEh8M(9 zQFdA4`!^d;B-)22-cgFyh%QW@f?r;T!HP$X57-L+6XWP&^%eN2n*UnM{#T71wk}a% zVV0*lDOPnl;gZ8UDA`H7DOOf&ME43i8>5HD{weN5uBUmU2d0~l2k3f=3qtv zlQg)cmw8o!J0L~nC7nJI9jt&NDB*OY~kIF^Mw42h;G z$q75p!jzqHIl#?pOi?j#CnMMu(Lu3{0F4W2lms1!5+u05b1*Mbc^bUF#*{qI;j&9E zhbU3JLxM(vwJ6EKLkHtknA|$-PDK_3lNrGyQKVuK+&?N!ZS6{vjuQn*RAHXr;GG;y z@_3n&Av*=VP<8OMD#49h!&*~Hj3_CL=w@L0XXl}9?G7Gh6)Hywg5(g~3ZqCa7Mxsb zij8rIj7t%rs!xVbPbWEDcU6}nr-0_^CC-0aC%|fg5qQt0UYWw&5Ut6RgQPU zDF~*|a9~9kD~c+L6x_-3qQFRYRaN@CP4>;+2@%r35?}NFDR41aU@Nd)F%V9h%{DCq zWPB|~1jQoBk$7T!$w9<41|bF!-53NPM2w?|4KpG*7C8#|ng?0TV-V9ILR>&7K4TDc5YZ1K1HaBO=MDAG$EuG+M;R^SU&-;W#Q0Zy z{3|y8)ja;yH2&3S)z^$|*f5@~AOEWJ(MOIk0s%jq_}CsqY=5ym13x4_XnV_Z@BS~NbiEV|GofF12T)W^*26xl6 z!cmeoIlu`|aI*@ly4-G%V!?tgFQdqY1%hr1mT-CU4OT23d}YC=UY>lRwh_$r!De5c z2a1RThkgE)0)u3W6$=dDDOQdcTChj^IIaZ)D6?Xb8l!XxBa~BgdCC`7tXQLnm(+p6 z=U$$2yA2aAOBwjehV3gH-kc7u`y;wq!u2Vmjsrj6jVF`8PbPk!jE^ICT_PPDN56z@ z9wlGS%%*YVON?v0nA|nKYld<3OYE%wee#%m>2jl_#lOY60GC;tPezRCJpT)79x-0=_L+h{@KBWFr0GiWaPi^w>OzIXEv&=Scxf zD>m7GFvoAJZ&Vwa7pYBctt*l1!LcdkV9?l#`GBNl*krJ=6|=V$`hP{I7!0dJ`-n2fgG$W-PoNkA+Gh8%nYWlz=F}622xgF9vx~15v#ChKzG7U&)9<#;MbM#*TbFIG!2`B zVxXlH%La>9LEybkECt223R%E!H3T-Tf*b@mu?kBEM>OE6KDOdRazZab-b4Mv-02wig$| zlflA_410P`Wo;H+oxv5>+OrF)Si1T$F>6nN2Z@}W*Y$T}N2kpFqb>CJVY?Flqs4OI z@mH|yV(dP|db3YBc^~|+aXU#~y;u*wI-+>NHBN9S9$#UCrv#1lZQwl$r@-8q_!Qum zh))FFiMV6>m^~ppyWu&Rf!p5p`UV%(q%^8mH)-E5QM>|5ilp#W|BWQL%^D{O9g(y> z;ddpCTbZFwc3zT&f$tJ=qBubd)L`T~#Bj=3Wc|6$BS_ec&qJfZ`ptM5x_>YVK$pK6y69$HL8HKeEqDQVcQcNG8vyR7p}yet zEqE#xX%5brqw{2dEt{dWW^cvA!Tv3fO-j;RMM$6h55!v8Vp-~bprU=N5Llo*_3XfbrNCCc~L~vJ=p)@4^Vir4c zjmAFUIdq# zHP}C7q>1J5q&C|G!2u*M{}Azi_on{u-qin} zdsATN6U01eN~q(d_?x0X*Gerx3`PEm*yh`G*4;j5eNrt)EJ5TEvVz!$pT|3~H?Y;1 zzq!tI#3T*OJW6Dt)~I#UFuHX29SG_vHq-#mF=Cz-+12za@)malL9cr8y%O;GF{03l znkQ{STdEg8jA{0O%qNK*)+z5CdvWIO_J|ThVvkJV^ zLF-dQpEZ=SJQ>@XVMEY>BjR!pah&M28nPF+8PEURj37VUJmW!d;y7%VwO%!l84zwq zkaL+w=K|qrqA-;4>uXQHKMQ_Zcv4bs^h75P-;mSp3xd94 z2X8z_?64#sf8osv|Em`kzwzlz(D^)UKKl9!FZ0-n6CE%9d>c6bJZxUqQbg$&W33hG zciF(c7hv0c{91Qjn5^DIPi;Yn+GQ&qr(unKVGMWWDxzy9(%pW|PB zsg)q;C1OWtNMO{g$brN&2-1D$_uqN+QKQ!mG4ORg83Vq4iO39PKa$?gnjNYl$Z@6U zFP`|wF}Dvv;R#}^HSVjF*>ZkdG_=~3T0P# zy9_VciM$;iZqQ_*CHcw8{S~&Os_XiI&jG=ZJ1nusf8@ji^FP!|aF8K8tcJZe-e6j> zsTx5iJW?_da4gwpo%UVvr@}_!Jp{E*dUgx=kR^MqJ`djcjXyp4It2M7X8AqfW;;30 z8ffl7!dl*jPW!j!R|mikcCyeq-SGOOa$`Ka!g#!{dH|Gj{O)+=p|l{dV>!XT{i`hX^x?42AGp)3#o3HlXs zczt-^qO=h=fR}i4?~DQYN#u-4A+P0J7j?}2HGIw}F>tlO3TFS@clh@?zb9GlXl=<4$h z>K6(}wGy04f#!)6)r|?=$F4-s?o)nS!S$)oJd^H; z3i$Pf?FgFw%lZdFej2%B5{tZ_n~6%hV2X7VKV+4VI^qeUlT)*Z0nS=Se>VdHbymAA4rhjb2&?Oa{4iQqn=Cs5G_$ZV(TwLo?Jx zBQ9hBZ)cE27WUeYJ2D?#W^H}F_d6hELieSvU)4V6vHfq%EqZh<*qR9yoABIRd{W-V zziFjM?;24HUJ^gG2u^c#S!AX)$+0u8;i|gpnZY{VoIi*VBcKs*H8uA z*)V?QEWUGJ^>d!<7u05(fL{(dZ{n0Qx6PmV&_@MYS-o(?c?}qtSqEj`lS770_I>HT z)xqn2=uBDE`mQH(!RWFBr^A=~Vt_f9R4vxz#8&^W-Z9a;jwzrs7Y^9OiHj#iNB69c zx@yZAa6Xspn}lb?zHa$x@%LKknK6IVSVr)09=XLjM_0YBT3GcZyh*O^EdUkyFu+54 z|CtuGa^3e`&Wz{5k$h;OsObw@5?{Oa7WY%-*MXn{EuKC*{!8V70}Io4ej5Z17r?en zhv-T8mA)}r31%0y{SVgxHO{|3K-cA9Q7K91dPUT1y-dkOm%4>vA0vv?NX zjPJmY;h&p6ApFhqh-A|Mp%OO{1I8ZW0}>}$v+gj#l5ZnwN-Y_xo9eqGaYNJryD zpD&C@tpR4nu+%!s_?f1w5kPIjP8+gJR~W)}d%p;eeju}r z6b<0WT5`H~!QJuRvb|9Qw|0<|O#^>lOGf%7pB|gAJ#Lvq9wlptgM@|JedV&pM~7%Kw`zf2{DBOR~e6Hh5@IPD0l@{)J z>av{oHz#Q&=*VPkd$_z308O@4vnZ ztla^_BlsP2N#vqgOSKZbwF8C+_rdz)TyyMK6-E3>uzDv9kBFvww^558(`)7ST~ILV zUvhuuWb#KPSh^DI-vy_NMEyVRP5Dde8Lb3WyR}Fxzu|0@?VHbLzV6%)9^Va{3g|v{ zB=kYGQ7b{nEwHJm=N_Wy`@x*FU29Unkz2H;PCgeveY5sztps!Tz(}0(_8kjm?)*nM zOx&)}Uk$$AL-vLQKht!3WDc6UaKVCTb=jC%^3J``e8jwS%dFi;`by7z{69d~3tN_Z xQx_NC`;?Ns<7_vW-wRu|{&+Ab;QMJ`Xk~vNc`ng{|8VR*pKsq0Y-=Z`{67Ibsi*(| delta 13027 zcmeHtcX$*>wr}^uPBSARlnIg$APGk5Jl!HH=Y+BV!-O6rBqUG-5yW5|u}K3IX+eN- zAlU4hm2509_Ih{U;()P@&BZJ@t;5>J*lT+o;Z@HNM!v}0Z z*DB^QXa1&^-Z$3mj0%0aIef%iL?99KS`Wl~qrJnUr9E#YmK6Ny^*cVAzsD0BPWkG4hWmJ`AkQMN5+x_q zj4s7Ok!5o}YVe?8elfFrEIp8A#D?ss5#N7vV%*Fx4`)qUlj%tey(-44+Od4Y`e|7L$8v@`9z$8BFZ;5QRtt)`io{+`G;}eRDAD!dE<17>Ou;G+uX0l zS{<~P-&9Nu?X!O{>`LVswe+suv^hF-3kF6^+}n#Fo^uhb>4&-}WS!15E>GSCR4FZJV2@)K_Lq zomLTbyeXNl^@eVlZjKmY{vh^u@9ssAr;0xx@Gjd@Y?jJOPZgh;^d*AyPCS3cdv?oa zN?i5(i-j|p59fTk+UQ-jbs-fJ{lw*{<1_xSc=N;^7!nQjgjM#MW_@kae-GiA6k zxfFl#=pME79{bHg%J}}8StRKws}CD^!kfOMml}1tAc9TWUNM`qmU=Jl*hwLeF`px! zU0618=6jNN%g)kKM?4e^_}|ZmkHZ!4aZrMf1H&}%iCSKVPvog5sooP7wBI}Zk;D~; z?mmR}9n$3H_Rx|fC^nnR>U4@QmN|yEI-C*>U+ugiINgGsW*i-hnw#vcbChw-N>@wk zoYodcOFLUpnwwS3)mBMaWfGf_S6f(9Wh*IU8M!W}C_Ou;CeJ3;WeBx(mFa24`FXiQ zosd&jkW*-rDzj_F(rT7w1S?$x|JfLpNfr21)|M=a3`fgDIuOq&(t=cSh{uE>7>;3S zT3N91PPd)2Dv~T(d7cricF8SR8BVm>71<>Uk^_`kv>|o5jFfGwtzv63^Rk3&DPOKD zEGR1xnPR$lan^BIwQTDmU*VsmRna=Z4*jzxZ=X9oC?2XHyOrAq9g;) z_nMGVoK2Kz$>Fd%IkyYCjAN`a&2d&{grTVywL6h7*b%&MMHEvRmL;-tJ^uI@;SBTnco5JZq0<*!awf z0=v7D=NcL+*m)%~*VtLRsH8(wI^?pfuJrD%ww}_WrfOcScXcxj^>R*nQxlWZ(A>gK zZLhaCH?}1^Tjt%`R4!SRIgw*jJ7X|tXJmk#g2XxOG{;+2i>$m;jHU8T)=omowFT~$hbT1{bdiZi*Mubx*?Hm|7GrF3x}Qf^s8 zp0Z$WdVR6e*4Qy^0f_lgGjx#mxMZGTWYK3;yz#2{U}X5c=N8>?Hg;HLMsQepnpUiK zmUCNWMWA5>(~975bu@P>tqtx5#dXztExeOXV>8noWs54(+61McE4$07%;USWrnT0& z@=Mbv7Us;WXPTsJ%z{#I9VRe}`C20k=GCEJLDJU;0sGXKy zP*Xmw*p^o$3veI`bbfVRS$0M`%M=S)Of8#Tl*QZX(re_hqG~!zuDLbdRKqx$7r~UD zHK7f>-Og}!n*#kLLra_jTw~pe)9PeI7jJXh8HY=9w<>M*0S>FqEz4lU?AC_7YL_#k zxu`3XPB zz$IviTaleS=aL*&yNgxe60ay~II&jNDJkmm@8aCt{0>J`gY#-U6;)L#Ov|Fed}k4x z*^;g(tb4w#Ba^c?R(8yvTg>u&XKq6~n^h(hr?&_#b2}OrWwN00vS!4fKxdO#iRC!o zG!dhL{bUX3Cz-LkY)XG@G7PonD$D*A)~N zXXaJ$X_aZW>oV3R$btx_UeScsOANz7Pl;9z&X88#uFzJyO>$W!*2#+!>`;eWxMtK< zU$vD~HD=rCj+WAn^6c6yr?aEFs7zTnM{;JQ<+~k4%}jBAW5t}d(vr&b1=8H)V!o|( z9yoeMGk!>5k1@%zEYSTwUeTCijJwU8CDy#CKPX0mc%E6V@{cSa`dp> zsP@;!neM8b|E~LbZq8Y>R|WlA&uOyNhT;FpY1e!f3+Ihrc3NMr_Q&FcjNH7cv?{Ku zqOv4kkjsio#IowN+A_AJptdlrFk4^?tK_nbyh8Bo7uwMv_X}-FLWx+C%~VyFmlR~= zF*y}E>1kym&1Pri))nz3Ic#29K}K#(by`_Jta2%(%;}#f^`NYj2t5vbQU7sWEZ4a#bm87@MDzEW`EGX7lJ! z9H~Tck3J2936LP$IGCzNITT-d$y)7h8YXZeC-N|zwy_Ee9$TZ&@Gpn~q8Lu5`_}4T zPT_nLZvaJAq8YAD!*6ecui|n2la`|Y#5tO=+DiO}ng80#zE|}NEj@Opjb-eN-73S3 z+sfN$H|%qV%jyvAc7cJJ1I)y=niLI&pp`hBp$M1L#tXDfw2C&GSJMi~D)Rzk6=7D% zs)>b@acHzDsILNwpoGoEyIr*GvcjH&9#dqP5lJw)q!pUB>m|D=O8q}w&>OeMvoL3H z*jT~pfJ&h)ie#1Sa7~6ujg66=4%P|#e(Vy%#CVu>upH}PU{eP#DGIRhVk((T9G+8psdg{u)oxB zlwI&uf@eVr@8%TA#q}*WaBI;6@C?b;-xy>(Fw!{Ra)+hRlG;ClHX1Ez4#-$2J%VGg z*9R06MCuU~izNaO!iQ)A5Zs4Q0SM+p^Z|&`hZq77gAXxYLuzRzNbiHR*C2@Kd| zdb74RP_b?>Sv&YuW75V3G?0KtCnn2b#B#*)N6Y(`!?@e6c^K z)VS5+)@gB+(re*dL#j^=p*|^Ged;mwX)vl!qd|RY_39JTsZU(1K1~{(7R5=wveAe| zv{YLTSVmhGS?;%NvmCX&V#&5#vefs-%r*vJb*4oJ$5ntggLG&t8W1X^4+w}9!UqHd z3hn~};so;n0byeF0oS91W(+D&3iBS{;f)%!dLK(bjOctofCsfcARt0C7AOS279dc@ z!!$be;i+g)-*IDC!JsurRySpgD1%ibwmx2TaHpk< z?JM?gPp_{0*KDOmXwz;4-}UU{8kziMGV#k~d=RRQuugXp*TS^LZ6fQ;#Oz0|iHd&trw7Uhya*3JH6}Qn z1))zN=u?^m%{I-C+FAMu`o|2RhK)uo{w&c%4kJx}q2`&!m_M>CL~@Z0>(W9&>U_+l zyR*iF0B0LE3cbhMYl#HCZP+XQqZeS0pf{8HA?Y_Lih{`<*f_&|8Pl@TD!{uPaPY0{ zz{a8)aG(QAK<@`ksy5U+#X^E_I6nS1l z`>eKlJBXfwTfy=vxFa!ew*X^LmU)?TbTl-%tj+d$%8FL?WDCVBp@zgs_~QQ;8U!1| z25LaBYuGyZf23j146n9dvn>+m8lV?8AK;uNAm;Pg5?9g8uB=S|UgvcS5v_((8$Jw5{bq_Pc?5Ck4rkJIQ# zaCALB1$|VFvj|nP1;l&tceSk^3jB2gWY_@K?Z6|{QJ@FoHsWJZ6Ii?n9|l@B;=_Sy zBUAu?nZSiee+=V5Kin9k4e^-42OIGT-~q_7X%m!MvS zGzd@t7r|i_wF8_*gTV%XOCTLU;1Iwm@K1mzqC-IJW}F8vspzE5ususQ<6|O2jN#$o znw9f>N0|-t>~j>~1KHmH%w{MG9SSaP!DGQ&AA^R1ysa=J+Tn+mZN(GN zF!0D$d^DK56%Pd`xB1&+0AFv#qtI|**#?{4>*vnjhI42HShfup&|Us{DMqIUuWZAo zp^+eVJLKH$_hr#e+}K~g9dALgC}ViWSdC{Kcy|XL0+Mz>`EaH&qkB}}4g<$`UUQ&Y z2OQdfn{|nuo@g+82TlXi4(RBEJMi)7FmQGUZUbvoAbBUAiVZi07eTpM0dm*wgc^c( zLJlZ(D(NZnj4+1J8>?9n8Nftuz(=8v_^kIw)WA+W4BWQ?FY7ymlR@Y}KXn}c$U^mb zFc`E?)WFB%{Z~%n6pcRfdx~&c&?mus3z3KZ4s6p9*_(n05`DU#3L<7%(BFclkwgJ{ z2n-Jfm>nCU|7g*3Q_FRi;Xnl6*5oMDFubtT$5xSu_t5}`9xhM1ce*k&I? z$VeOs^^2b0+TwCi&~R_)2powF)aQpoh7aPMO{%V;_B-1&5Fzg1%_axIkkisxka-3e344z0PLZL_2 zg_sA`8R?@&n*4fo*Wx)!2P@qT|JR06H<=W!lGcWi*G&>6#?DH7kXFS*i0k52<$f>> z_cQmv@gngo=MW@|k2?&zF6C;&{CJ4*x)j(j*5ns$2n3m{pgs_!uY$VkplSrB@ijz? zPaYgVetd{VWyaO9tTOvrHx!;BM*1=T`1YZFH1S-D7B;f~g;~V*k-lHf9%6RTq@tSA z^6DCnV@oTGO1ZR(ai{@71uL$Z+vcoqX>FZ)?K_bA={ZxRGwX^=a+yL~saR20)VG#+ z+cNrQ5tUqq~+P=q#pu3HbXdqS&mH z@;=djJZBMtj{fp;49I?s*lbRmQJN!vv}Y57#y)-620nX@SZE&e=ac3dGYy@vx9F)8nH~7AgpGU;k;&6Pt4NB9?j+4fLKS?x)aI=u%ChCbV;1 zw*^RV!qGQ*AZCB{8`gmi!@~7o;7y{J8ouLkYhu^&y<&d#N1*;KVkZ?Mcbtp*J2_|O z_z^=u$QfdKv`ISfz>pQIk`M%piKOe2uHTB&W8Q+t;=#c)#BlSJA6{s#U7yWCb3Si+ z2)ucQ*i13mmzQMz^z%D;Up*>V#b0# z6zn?-4KR(m95Y1O^!@0QkDLXSZxhogwuf4C9 zAnY8mdDw*S-`rpR&shTq^5B5}bq^YM<7OKME-oVD!Nqe#b`<`^!;)#uisFWUY_xe2 zV*@U@fzrPc>nXG6*|&z4O!?F7jEh&mrN0t8BgwuazYB6p>&u=`NtiRzFBM)Fgl#wP zj|VTECz7I~$G*6AjPA|_2=Zjkq0G7wHyi}a7l?H8u(CCYWA{1?2(o$P2m8Q`3(z;h z^Y4-cnZ|RAU#ax;y+asgPdtQJrkP(dk1?Gv*{Q>nfm}|UBUTX6cr$h!n`qo@oNRc@ zFkZi0_k*qiUX@&{S0%NkP3{=8y%eAo9NJW$;FYBHQ3uzvyOo zcx1;(0yr?0ET$6DKR7GReE0-6>f9AzNFz5>#5>=OwxoW8s3q8!MlLk#Gw(WOoOSVj z1kH2bdj!zwWUqPDhlV+9I`%DsX2xkg0q4`no#w=kHhNR{?cfnKX2MS^z^V*#y4jri zZEwhDV?q$*+Y0v=;Oh*s*c>!@^owCf>xUu8$C2|(Kxrnq**qoA(O%=M+KnJ@y`8@j ze47dNPCRWduS|NT9eV7kkAuLHEV7qM+O}`rgomF|roVspQIL>L?u;BYpqt1V!SaGT4v<+a0`X z?&OHa|9mOwt$|V<4$o&%m^4z_KNa4dWFpvvdO~kfsHz%Kl6Un*IF{Tt2jBLUh99Y0vIBTK=a~-+|=?&>PfJohEqkYYm7dWQ14`42961 zh^NCx#chB3XGCMz#k#@aLf8u;8{1uQ;s10Y=;t3tX8?NMcD5(19MXcI{lEYI zFW^KG>;;W;!VYcq(|<+Kt$(bm1Y?R}FPID^pAMObFG0}FjuHLfrDAg7u!#7hkH)@? zuSC#Q(_eYXGfuuST=c;HDlr<|RYJ}yMTz(JpdEXDi=b_`;CTO3yHCv(J~K}?9WjN$ zskV~bM_eYl@i*{=crfNR9x;lB^#)0QQXjAD)PAKc)LhcsgPui`k$uP_7|f~uV0OVP zL9D|Czx7G*3nK4w!SiPs-iEU)@Kc(?vI5I+;L%dpVWH2TykkUHTxt30`1`>4G8itC zUaTBfb!X6NwFGC%pnHOT7hf7a>!tY!S|9r5ec-NX&^;5suL`c5IV2oGtDP^);Nmps z9&2vl6H^o^0YRhYb|rxPa&q&qN%!9~sw$!C1cH1Xm$b-(&h_`>EUi|Lf!}t)zK*LP zv#E%8zl}Tn72NEBJyoEyg6xeR|NfINOg`fn0)dHrHTpv01kEynU z{RpyRn`!%;IoCr7iam4>6sxHslgvYQZ77KfZI}SL+HxI0s)Aw69bU9G*BSIs%c;X5 zV0{(2IdbCg)I}8upLVLH2X$SwP+bl(s>wzws&9sIv~n1q`poR%V4xbhC_3c3hem(= ze9suYE)3MykUJ@D@~5({{k>0!FUeLAQcF&cFg_n66X(2ls%72m>(Q$Rch{2X!y}l^ ziLvL;96^wMU#;goqh{S$gkS^GR>KAu>qy1SOh4$&iu?zPAnTut{thgxgI#7zDsU7{ z5UcD;vjTpqgT6|dFiJaNB$%s~o`f0KJmtIeoVP0;ygi+4qC%*RRMdW3P-Du+ZJ=@n zIh~5p3_LUb)m^XEj4Gc424+Ct=n^)(pnt95f)umq00^522i5q0_K%tTwfhzBJM?34 zWF}N^MDm}A*4XA~pI{-K#iz-M>Bm`OPwXUow3WjTUu>zTg- zY?%f1NlOnU8iJJ>-!xvqx($kcBeusl-FOgt3Ht^gp-(g7 zcn;ozZ^oa)|8D3fLX0di(Xg6Oh}A^DzL9u`gr8>g&yv&0mE=M4P4WtrUIbkqT{eO( z!glK}VlQG}8yS4K@lHJZn#Dv2F;O2uC|D`6+IWEI$Hp2i5bx-lNZimzvVNU>8853g`z_X|o1WKyV*1orr`rlGAEH{WKMrkwR~J3s;L>GV2*ZPF3(QZc zZP2}7JZ+c&TM`^|K-)ijC27-n%XY-~pSYKdHh_wIVN3qDnv4yectK6)H0CX)i@tO& zf;>i669)(cUxJ;%mSN$>M#C|KtlyxQb*FTrwF@=>&=jNpKvy9bkUQWUGqT^=OO8M( z3%%VFnrSXpOYq<>at0;8pxs}30bZN-ys;O2vx_XDsH3m`5d7x-|5Qs*x|`fW1ux#^ ziCFYr^o02PUj*OmCKpkOkA9M$I_(`^EkXAlau+puarlDjMKPz^_WrI4jC}}>I3a24 z-}0N!oK;Kk`a@7xEJvJo9Mrr_bDC+pvSwhqjD1nOd6n^BW9#*?d-Ao5Wd zxJg}iuba>wcS3mi*mGd{qi~>*RT6Ev5Z$Sk;OwJtpd{`(|7dESZl&YGEE`z%7#t|_ zq~&W$<337OOQ6{YC7U1oW6IFkL(QpNGzuQy2j`7(dn;d?6t%xrEkW&msB2_FMBKQO z_olGkp>^Q+eyA%X=O-!ZvOQWYLDT`LD*@g+k?uQwz6jebgJTDvuK0&1VO&YvWVHn8 z2i0}%e8kAOSMMDMGl99ocY;d?;ks{2IJCM*`lq$$0sZnhZGls!Nu7ybdK^xflb8uy z<^E~!BFJ4E){X|6C!htR#;)pQY%|W}IxD^cGoFAJjGpk9C49{CZnf+?M1Gw@#cp~% OEyYmxHT~z7=l?I5URiel