From 0a3615fc643df69f452da0524354068cbfa6b3ad Mon Sep 17 00:00:00 2001 From: Astul-Betizagasti <66637541+Astul-Betizagasti@users.noreply.github.com> Date: Wed, 8 Jul 2020 10:40:42 -0300 Subject: [PATCH 1/7] Annotation fix (#10853) * UpdateBoundaryFromSelection Fix * Fix * Comment spelling correction Co-authored-by: Astul B --- .../Graph/Annotations/AnnotationModel.cs | 64 ++++--------------- 1 file changed, 13 insertions(+), 51 deletions(-) diff --git a/src/DynamoCore/Graph/Annotations/AnnotationModel.cs b/src/DynamoCore/Graph/Annotations/AnnotationModel.cs index b42312d5c7c..c51fd63817d 100644 --- a/src/DynamoCore/Graph/Annotations/AnnotationModel.cs +++ b/src/DynamoCore/Graph/Annotations/AnnotationModel.cs @@ -290,58 +290,33 @@ internal void UpdateBoundaryFromSelection() var regionY = groupModels.Min(y => y.Y) - ExtendSize - (TextBlockHeight == 0.0 ? MinTextHeight : TextBlockHeight); //calculates the distance between the nodes - var xDistance = groupModels.Max(x => x.X) - regionX; - var yDistance = groupModels.Max(x => x.Y) - regionY; - - var widthandheight = CalculateWidthAndHeight(); - - var maxWidth = widthandheight.Item1; - var maxHeight = widthandheight.Item2; + var xDistance = groupModels.Max(x => (x.X + x.Width)) - regionX; + var yDistance = groupModels.Max(x => (x.Y + x.Height)) - regionY; // InitialTop is to store the Y value without the Textblock height this.InitialTop = groupModels.Min(y => y.Y); + var region = new Rect2D { X = regionX, Y = regionY, - Width = xDistance + maxWidth + ExtendSize, - Height = yDistance + maxHeight + ExtendSize + Width = xDistance + ExtendSize, + Height = yDistance + ExtendSize }; - + + //gets the element that reaches the lowest point inside the annotation + var lowestElement = groupModels.Aggregate((element1, element2) => (element1.Y + element1.Height) > (element2.Y + element2.Height) ? element1 : element2); + + //If the last model is Node, then increase the height so that + //node border does not overlap with the group + if (lowestElement is NodeModel) region.Height += ExtendYHeight; + this.X = region.X; this.Y = region.Y; this.Width = Math.Max(region.Width, TextMaxWidth + ExtendSize); this.Height = region.Height; - //Calculate the boundary if there is any overlap - ModelBase overlap = null; - foreach (var nodesList in Nodes) - { - if (!region.Contains(nodesList.Rect)) - { - overlap = nodesList; - if (overlap.Rect.Top < this.X || - overlap.Rect.Bottom > region.Bottom) //Overlap in height - increase the region height - { - if (overlap.Rect.Bottom - region.Bottom > 0) - { - this.Height += overlap.Rect.Bottom - region.Bottom + ExtendSize + ExtendYHeight; - } - region.Height = this.Height; - } - if (overlap.Rect.Left < this.Y || - overlap.Rect.Right > region.Right) //Overlap in width - increase the region width - { - if (overlap.Rect.Right - region.Right > 0) - { - this.Width += overlap.Rect.Right - region.Right + ExtendSize; - } - region.Width = this.Width; - } - } - } - //Initial Height is to store the Actual height of the group. //that is the height should be the initial height without the textblock height. if (this.InitialHeight <= 0.0) @@ -358,20 +333,7 @@ internal void UpdateBoundaryFromSelection() /// Group the Models based on Height and Width /// /// the width and height of the last model - private Tuple CalculateWidthAndHeight() - { - var xgroup = Nodes.OrderBy(x => x.X).ToList(); - var ygroup = Nodes.OrderBy(x => x.Y).ToList(); - double yheight = ygroup.Last().Height; - - //If the last model is Node, then increase the height so that - //node border does not overlap with the group - if (ygroup.Last() is NodeModel) - yheight = yheight + ExtendYHeight; - return Tuple.Create(xgroup.Last().Width, yheight); - } - #region Serialization/Deserialization Methods protected override bool UpdateValueCore(UpdateValueParams updateValueParams) From a9da2d293f8771207e24ec0fe378cd859bee346f Mon Sep 17 00:00:00 2001 From: Martin Misol Monzo Date: Wed, 8 Jul 2020 10:33:32 -0400 Subject: [PATCH 2/7] Python.NET binaries update (PR5) (#10864) Updates Python.NET binaries to PR5 --- extern/Python/Python.Runtime.dll | Bin 181248 -> 182272 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/extern/Python/Python.Runtime.dll b/extern/Python/Python.Runtime.dll index b814fb2414b13dd02ffbeac007717549e89044e1..9faea9945f336f138f4cd7faaaa2556a2a19d42d 100644 GIT binary patch delta 77031 zcmceUs< zojO&w@8Uq;6@e=*ZtIKn=QQWvyINaIKp(AXKQlDVs}eta>&op*%jH{!b_gZBYiL39 z%GT^-I1^-KHC-Y04b`8JzyiC-pHtc74q2QfzP`v z7;<}!O&7{1U8D48<=}xgGMXNZ1=c&=vBQkT(=|i@Q$0P)>D^1}&$$C+V|y+~R&%_f~+leoK5V zkMoT5eT24^Rk=j}j_-T^rt6o;O}_W_m*rajN`znXXZ0`SA%WlMU+#znU(#!?=c-2U zpLNa5pr=f0mvw_IFCV6Fm5K7B^qb`+i+a8XjUFG>xqP+w zN^Y%a300#=&kVqdrT)T&Ft1eK+ZGDh|$!kJmyezZc^nUWCP;^Kszl%`HFGKA!_EeqZ3XGw~*;fQLY`B-cm#EYlN?1b+C6TT zRVy%J`~j8h;HAY^?e9f>%&}$`3KN&}9gk>34xB?7^V@kOJP2*FM}pz!zT> z^4aYGx$b00UDzM;g#7j)lobdCQip;=_LLp_MaJkyGRU6}1z8!YR3Jm4P#)y*gFse= zDnnHYWH=N~ZDNo>kQj;BeH@c7M$gu-+HqiQjjrD+SJq8JN5oNj=+%&Ivj_SM2U|0#M34KKoA~ zDDylIJQU;*=Y>rVP*ASVg}}aq)a`+IQWE}*MuMt$JrWYdhx> z^48%|Js}?(-l{K=1H*BsB^Yu4tT7x4I^5V`m)cs-SDGUEwU2_xH>Bgj_ zy29)7*)zb?fd*f~^4Tq5>f7FgM)MWkvjRWAU0H$ zep7xgIY)m}zLi{{KO{$t%;*=%J4Yt5{=PBt8hx2OeN>x%l)PfpO#M;$@~E1XJnsXR zQL=2%yl?Rm8SvOmy5>(-dHQ({r!lOC?aYE|P{!poIQ%$8q_jvdSq^et!*`-7|w#UUD%YQ1)eJuL63egINy zyxoebSm>b(oiS!qmf=D4M!U2O_yu({WQh5I#-nf@^iJ@h2Y<{&nfhx7!Q8yAR_-0# z#y}+KXi4?Xsupmu(0d}?F14yfgCLav8XmiXV3iH{A*CL4zZlz@{qMNT2zN;7iR1IQ zp@jXf@OoHxb(-O^s{o6Y6VhnIZmgTj!d4=L6>J%=$6*g?avh$$CKvXFl;VQb$J>qY zf8-Zq8%`n}l$IfGCM`_ezGaB<3Lf%DmtnQ?cZb|#UnU7h*^pJHmb;M0XR2ZjKQQ4| zf~J8`2+Tl9#T5kJ7SGEKajED$}S3z~q$@hwFNHoN72wnhb0(Cs%W=)gd8Q-q|V#l51O&t^a-4hm7Zyns2 zi6(kXR!wZ5yc42c9X8(q5g-*byUR_n3V;HhsaP#FkVz_3*loB%Znrpwa-jZ1 zuQ~%U7MYNxw6hf(L$H^LBBKmq1-s21Vu5uQgp}HQ#a_1q%U+Z`7svjP9qs){Q-$m z?%Oqd1K1MuCZIKy6gAd20?3p*AtlE8JLNn3*6C&PU;8Elq`vU5w?lH&v~fYI!_a;9 zXnDr8>r|s(0>5L%ZQR5)DojKrDl^X&G#(1YGCK=#3Zc$+BHpQU358!&^_hE4I`gVW zr4ysVzA9e^>$)i>W@(P6&g)QW|Ah#KmEIr1F6=gDFaxVxteCU&bd%&y4yYGbs@AhXUYIa>n?w0+*nHgH1Em zL(1NtF`svgrooEHq9{!`a@Ndg*xqJm9;lxzpP4y%<{A=Oms;`sG=#-kPRX=TbAJu2 zQ$V_Ah@XJGM7fb6QA4TIsgxmXIb&8$@(d@B1g)62-bp2SE2eIg=gq2_M3ZLF@VZQK zE&wGABJO4?A2#}j<&`c}V)E1$jM^bznDs~_t<<#dABV1pj;mHHW0~P2VDgsz&c%Mb zW&irDM&K42qMJ~81yd7HJvI4bQ`1W4#!5>(1E^E(M*8IEDU%HtWvaO8+eDJa96Xhw zslMlFwMM*vnoj-Gss1LeUwuAGhASM=sHo{4=f{Ha!v0-Z2bO7wV^Jis%e9GQm!M~! zU}?p4o)~V3pCUKfJrh$X*#9`;HN9dVGN|mp80>lIEyf@8iY}PdO$;#2Ekt2_D^H4ZOc4V;KevY>{PsXn#;dHyohe5 z(HpMxhAJabu`k$SA|y9aY6)-Zip-gM32GPlA-B%1n=qtwv2Y^K$(g7$`Ix~qKbzf} z-Im9*n?&Sm{t>pg$v&>hvH(j9P2M4|k_AZ3)K5^v40$)*k_Wce4!wbZJ%%5r0WJWO zSI!xhrHO^xyH`36rmEfeLEZB}fS3kmh5ZA;PDRi=3z6p-235*ruu}{9i*rCzA6U~NL zNB|vm_8LDnJRz581Iu{Z5J8!W%rT%c^*-{PG)=DrF4)HR6 z{oFpK9@hu7HC72YrQo@>cCc?Ic($^854SrS<@Z23~>)|!CbW*f69FF)w#7kt6J%w^W`UV>$8?8Sst=TJM^!k)i>S< zwR$tO8@(gq#nuCXZ31Q{m5aq@fhXxnTS$m|ysOi*5J2MOYS@C@R!1_>*-v#@#i;T` z#i{7OB=mJ|Z6p>lp*in|I-O2Z)+bz;**d~*HOj6>1Cu+Hu?$uZa6dfS)TV=tvq;l* zRcUTv6HGVSius;7G8nC8?+*k5c5>*jo`?+{(QkSHiL_=@I|{J&Bc_Tu$Y^DrSOC!>nsH+WP|h!W@MrNDzo_wQNAC2 zA+p!c1De4(UZ*$BVsB18>zi-BQKQ-PfrrN#M$%PHqRDoR)o3oOA~Ec24Q(QN=K$(y z=;`N!$!W|}{tdO61i0>x1gt7u`~%J9xM5!`Z=cr|$=93h)Vqr7$xG)o=zS;)wJ z*j51O${X-f+Y4!#ByhN@cUe6|(tO~x7vKk2<6+CQ#jwwkwFkGf9tdE2CP#c1k}Ujk z`N8q*TtZp0aKJ!NK;#;f{&XSTED-ftA&rVc4%2thZthDgejUkZXXXn8c3BS~Esbf~ z-_b`o_8~;AyLyq8G`b)`hTHxDNVC+F4D!l_~*y7co&!IZS<`09BW$ygB z)`JA?PI=Azk@`IOKl4X49|~}c-d;o@>H+%_6w1UYbe=3*a6t2gi1$%EeL01wOnNa& z_Yp7ChsiYy+D|(i@eNHbu>^l(R;*rNFYAvr8Dc6rlBqK_FjYGk)VbDQ1QCWg$Jxwf z#sH3$+68`yBT(Ev0(Ao(9DXcAAn1vBDZCuv0Us8wC08vJ+4)0QZ&X8##FCDKl+D`# zJz#humRNy03>^{sNJKEvxHRnBv<0XifepTPg*Xc7NfV)%6@9}W|D-!}I~bkx7-A*W z$Y44)4I8YrVoUQ`wc=>XGsMM|jAmZI+38L4@rA?mh4P(+?b(Nk*Vy@@=XL?02w;K; z(2)+YW`(DA#WK}CZy`+_i=46urrP-#?D$!U%YO;p^MH3K_x;O+k4zmnp`*?Sq+$T!5ho&SWL_%d8kx^1EbA6EdQL)KP%M@E zE{YNDx;PmLArnR+EJI$Pd^QEJYZ#pqlA9N`G3_imCjtE;LeDn2%qw{;;uHX)Nn~7w zCRQWt>0XwG;^h~o;wP9on@Hnz*1M^I*u!17Ea0*BfEU%!In?B1urg?ifixOT!!qQL z*r(&yZ`rV;_-zmUU^4TkV0>8PBvM>po$v>QP5BZ*I=fthNHBFRi1B*3?Wso)HkfBI zATzXm(ZIu~feF*N9MkjD$QN;Dzd`M*wLDh_Q?C&O-iwH}0O^TRBf!4ji@|Io^DX zy-vP**qQozIq&er`kC^E!`JI)$?%dffwNI0R2g0NihYheWXZ6K4HPf4A4Mxeo=lJI zS#p@(BVSt5pr0#0Su$y5mp64E8R~igFLs8S zyI?MrCoi3)e=2WyqgnoPX{{cSzgrp|ouM*d7OhKIvo&x#B>J&$$I=g6w*gmRz+;J* zk+cDSq&T7lw)=yQXx9HNS0B+BJ`(`=xE_76_Bbr+2G_gz>9DOBgh?V}3 zAbI<*lD|5lZ7J!^sp>LxgTS!%r(sU9HmI=_GGqHiHN|qaj4*i&z^->!ZL1 z1csxIfpai4+0GG=rSgzv(JUL>E6_)ND}hrcn7z#Ps{k!l9rH(c6dZ~6E+d{Qqcoa7 z$PwWKDvBZ2l$fbNt@ycw|bOwp715n`>Z^6MRdWB zP%FRuLNg{B^(y27+$Qhkv0gI)auBT>p^gt`lTPHz9tQ%aB-#fBp%F(D+?RPYx z>mgy70+h&*c(G*pjUFg&rhPup1y~|HroB~udgO5ZJ2G_Ccn{I&O+O~*A0?)3M4?Wo z_@wG+x`vtY+u@snAOv85x&Nrz@Ux%~T2n_d*y$ktj(q#5cG$)Al{J{KqAT}3nXwGG zItQ?lTK0v&8I57Pgu{psPVpKLAG=*`5N>DoGf1@yd{V1?MRU>Kh$ilHz`0e5bFg@? z$8b|;SV}(SBP(08_o8y|Y%sv;q2Jw4k4$ki$d8U1B-O4o)l=t7DU&(6o_ZpIolWW$ zA_@x=Im0MH>Ka7HI;JD#ufS>{R~%hg!ySsrU)P}H?LI0mslYIr}28hnJ&(#hxG;8{IB0mSd0U%ChNJk%aN59ltjyTxW27KuvfQ zL}Xlos5ldVaqO4s_tCP)Nfs-DypFqLSBLl+4-3S8;{G(YZ6t-v4QC#@EW zshOc4@jqx+>a;?}Jj$RS&gkz1pLyf!x0-A1OJ!nJZIZk}NP|$*H4A#B56T-aG4|g< zRXpTV%I>BM=>X#@9>hl27gZkX`&He5~mEsfVSc^E#B$zZn12bH~hC<0Qo9& z)&@rA_?;9Kr`J?NXpLaXQyFT_p@?>>mMoww9^Iz{Ig}bq2~KzFF~w%Z--O~MJ&8q`JYr+{Ea zP#2v7N=_z9*01G(l9*!IA7h13=OgwXi@{HdK`LNzo@FC>fhC~Kl6CrU5EAgDHd4c> zdpbOfiY*jsagFUKMxt!7&#-CXZXsfR0Afy&YmbX&k3nTxx2`2fJggK8=^#ll_pv+< zzse!rS}ZJe>J%(s@Ua0-VyTkJM-XL2CVHazqgYREH%>88rV|>;k@(vovLua`GLsQt zhxSgx6%{WcD>l){q#&Fw6>Br1qMwrIu+hmVIq#-sL37qtb8o}ek>8x}2QK(6=U@@E z(z##|nu|aYZy6m7`uW7rBU+_AzEy9Q4;{bH{xp-;01cEyGc~;u%uy+0)yklb#HJRG z#4s0{G18TO2@<-QgxPZ32@^Um1GfC>^=Wx9+$k~5Q_TYJu{X)fPpFL%0?r8z9H5mf zB<$CsoWN*&Q1Si~>M^H(a>5wTsSd8;Cw7ie6k0t*3|z!E6Kb#5z8rrOj@7R`RA`CU zzD#a7G2vIW;NY`K-gjaRj`E&9aUy_!ed2J>X%6tNliFiEjS`bbpoJJ#A)}`Uc>EAU zm-sGFtTUi3290xjXrR( z>M_2GAr)o&$>Xz_t3mbogE7Fb&H&Yv3Jm3Y!Z5TRW7u20CZp#&fJLLfmjm}0>8rqk z-t6&6Hlm!UbZ-drd+2kcg@i`@j^rBC`kzbxzGxUdeW({*)=Pg3@q6Uru!<86@h)Pc z^q3KGa{nl&p3;zg0TQ2LWCll>rp=g1 z<#%i73=I>v)5#r4S7&^&k$wb#J5){k8dS7@f&@E4=tYFMO0&O@X!56!0Hs^RHSahr-j3+V^hc=NM**H%}@I8<;OJ$(pGl&ItLHa%B2C)bGRUV#W}bTUS@>Yvn_$ z+q2grz0*oY(>RLo`!iI+urY|S2fdL{ss-PZT2+Oe#2BOmy)|Qeu-n)-Arh!AvpiKU zdn>}7zGQj&W(1Jrv$rAOQ?+eOP0CK>qW!0aISs0#LNy-Da7ciehpR&gxCNE%Tk#W& zS5z6|HUbKm1P9UE<)-dQ`}_xd;#p^ZfJ{?&xx_A{*>|9{KOU{p1WX~&8Q8>r`D$~V z=?M-rAo&M!SNG(Ds4S_QE^P|{tSg~u5J|3L%LAU8F@9IX!!57WtAm!S%78+fJ+*hj z`n}b!4xp5-801O7+hhS65gFr!U3bn?mRVYKj9$3gsu^0=B_y?`3tQRyLOJ)F+P%l{n%lXIijHC*R@39Bxp^8>N{JUc@0^VqD1Qc=7BqGK_ z94d$3=B%|dDhNjWG#-F(epn&DySBE=3vv?CP^H=sLbwfHmv~*ULY1-1avD?5$QReP z_+CK$kQ*oI@?UF5Wy$6gQ+Ux)9`QOg8vRp3!C}6{2(NHZ`1Xv#amVvvyPOD?v@nLA z^hCCZHyp662Zwwy_MbpM%iB`TGiY>#JmF9zTs8UokUzMFS8WN0LxE7(5t!;w^?GVm zvXNVoidW-=Hq2&Zm{nZq5tC>D0au_024NF_X3*@Wy245fLyqO-aiu~5d3+k@pu{~- zsD?*jsKyaXd1E><{u~;^Fm0Q(!B(fOxN$>aXwBQuD0SMKS^$E$r*ZBpKT5aFz-frp z3sHmv3kNsRSf6h6P!gSTU~gnloYD(%o|^Un2R6uq*0mpvGY|{sgE;cWX{9Rau_-aO zPyuqOeW&soT&zlzrgdVYXOJaHgU*>BKMu~LxIp|vF1a>kispyIDRvq|3}uQ+o= z|_}LRb()4!Kq@kvh=Swkq!RK z;p%(zS&w}1pLP#D9tSDn6XT=s{6OO+LON^vwh6}NXjR9Y1IaX&Gek(Jdpw?jW zNj6xS$7$$L1VX2B!idBou_&QHOWFDzmc3_tlH7P0^ml7~b4lX`QMwFmzyIt=8Mj@f zh<5qf+3j6@#K7r!81_lTK5i`;KWZ%RmTIqO1!^~+(~;z|Gxk!p!6}>RC;p+v+H)Gl zp9kpTA;2{Fa1qjuOq^IOi>gC7LQ?H<{KB@OabB?Z=jTM~k3}6ipQF=9Pv%b4@^D>o zto+M4)&3t*GBISyj`9r=y%H);sDDBhL7CXsy`=tH#Wl~_lAvQJ7~!_l(uQG zJMwBOSh6(qLW1O-7j)@I%Ek+7vjU{@!5mII>0CucN*Cq?)Oe5hDH;%jBJwl*T{j1m z;(*~KWj*LfR;Y1y-Y^Mi}1T(_aen0;Hq^r1m&#G7cD<8l!pm4s@>MDXj}DaLPtG`vY(h9z4F( zCHYvQ!t!~=fwJNkPLi)*Bx=d8 zoJ5%}oiV#j?Ym(2DYE9`Hgzw7oYQF{9;9VKQb*Ek;7Q#^O(J7kkPT_hXkw*iB>8*t z$(C{wDLvT=Dw~#qqK>dUG;^C8WpZXeLZ=8JxAU_9R5h;4+Or>X4dbU$HDa1WVXG zu+S-qMNjd9blv103U;WqGGy|SX`_XH5rWACF#H}|7qMH=(ziqMN0&y!i>SG5qT~={ zYOZ|u(i3n`cJ^iCagw{?vZ-yCf(Nc7CIZ*xtNjMezr$hS2H`&kC zetlWHpVMsIS$jgpH+6Ng+JHsJpPT}X4!#i4<>OjICf`)#qPVevqGxY9*jfux>?h^3 zoAy}_B`ajG+JaT!DPT#uB5`-ij{}-UZW%$3VgJHO)p4L5DZ`3j`L@`M4GN{TEZ~bS z!>!M;A3;8qa6E^Hh)FK#5~q;uN=l`>wS*Y`MkT2!uUu@ecjklh~DD93|Arc9g00qdEt1I6GtiB%Jh&ghh@KjJnSQuVLuTLRl!r?Hvsk`5|i5p z%B$q(-wjPY4&_4bBK>6pOG0J>_uw*cUQ)|j_8*&uc!-I#Zo z!O#R5O22_5KmP_?%&TBLjb)Wsh2fNE)C72NrhkPrb;V*MS{n`HZoDTR_k}!se}_1Q z^}vm5zRWML{jxme%I48;qE_4k+ZqJ`nfbO6d^2`MCPALn(0AFtMz+hce_H(hGsr6G^fG(LZ1BViRAa$e z0MRSs?Wa%Pe^m{9I-a>|g2zdfE;)nER&iGp0`9fZU<-0?qk9;#oBTjEDB)nf?3T^p zQ;`9;ad=*Z%=Ed4*l)_~W$nE0F>;b$|Kw{>1%^fH7EI{WEx||`@g25Nav8D`XJKr4 z)y$MAJv48o%Z9sT(|#o88Qcvil|~GrpF&|az_^<-|QB9TZnu zf;v?~>q6ybc@`kJH0!Qa}f8uxY ziK}CIA^YpqHRZoYjYPQIJk;gcBGR(@no-%3(v<0r`q4ZqKY80WP!%R`6$2tV!or%a z!9r2kN~d1K5wx8Ikj_YVAimz^+1;o#*Q;c%Xi^#HPmK48Q^43EN5?hftxIMn1=8`o z9q>RklAmAGuD>Vib4}%2K!93V%H7zE%*ie6I0F>3+6+-eA1kkQrB)d|v!MlG6Zne! zNv=WPC|}RDdtZf$01xe*Qoptidw_;(o8h>%&$ScaptSbdhT(h=sTPk&I2fOgkrq^| zVYp0%-<9`XEA;=!H?QsN#5i+|vb=q1#8pdYh!*Z*l2xSr`{VWNmM#;;0QJ%m5K9#}fOz4NHv z4E*F(i_PPJ^oHG#@*s5_irA`2yCc=fE_j)(x^7bTGJ?p>a_Dg|J%MzE0v4VIrRDQd z@(C8`8;4-BdWa&&?zBk7SU*Y}po}M-IDw`W92fk?I@v&ggPpD-53of!5=cqF9Y|id zMQ~fwAIfRhw`MmXJGn$bBnKOqbsN;yuZP%GXdE7WiG#|#k%r99+(LT3;158H4I4Hx zG)-0N9v3GuQ#w(O+{mn+1!xYd!Ba4HF#)m(Q@(S3Gd2)kU%yW+ZCvPXaLE>ngg0>Xt{oG&Ndw7BhNM#j3-pMV912`m|(B1Bq;h45!``%NPn zXb92FBQ8d2?9BWTKPAY|ZmOs2QJ9%}VWKoK#tx%D?p_)ZjuCVTf^IU64Tp6I7EOwK z*`lcyKaAyQ?@}Zd+)95%{v*(+$*5+ut>f{Az|XcW zt*u85$I+N|cc^|h8hG(QCT?yy@>a!N6rm}GhBS|^(&GY*DKL^>Mi8rLb||y#lJQj> zNVH!CXSCa#9=qe_E`6PR>E@a?vY)77ht25j-dwb}Ticcknr&1u3s(V(F}7iL0kT7_ zyl7kV0Y#rJvh@sYht&hyvhv8YdJabrx(WYf_$(#l*7e72ZPinOwHNBYX(*Td72Tpu zw%jsIKS)l$B~o)BXzzt?ZpNk>d{&4i%$2KeiDmN#WGb0qCWO%gJ6Wk46dX_~MRd|0 zoJUqK#baNprAu4{^zKY3uhLW^u*<3>mFCZoyN*7}5fNxJm_J{}gph{7`ZvI+*}=ni z-J$3aFeiU*r|HX0miQzV{eVW$>|q z^3_p~V&MFTI1MFG-D4qF8Qf{_q0*@@TFLvCPZyk&K%2J4Hz=j_MGdDAxg=rs;d-m=4k6St-8zsiqqo9547Z?DzAFVDO^QCjpa6s;~6tu7QD{e8gm#>_<0=vhUG z#5WlEG)X5KjF1%(*CL-3a9D`(`WLXa-Vq(<@PjEc?Z2bD)B$=odgljn$sMtdzakCZ z1g)xF-XW&3q|fk1#kKO*J0|PfM5W7Px<_vjoBY6=|I_ai%Q1*o>x_id)vilVtFGb+qAH^ zq@nG>@d(WkL2qgp`d`fwRjL*jP{A0yAe@uWWZ6Ku*qL9p@mdtTB0_As@)j4oSpHyC ze(wij)m=j+v*d5GhA2zgRqz{`q{9;dJimhlc1_`;_ zL-$pdH9l1oIoY^9-g*I4rjAJF9+bUKgs4eY<_p-o)PoVQ(#cb{Pp_j#(Mr}xPqYtv ze-meU^6~9A=>L){f7sl5H^>!Hw2*A)n=b-f+66Ql32Xwe6|ny;Z$POaP{ih_^&@ow z8kGJETCsr#@m3Ick9_BcN8?$weeY`2@0H8%8in6W?&^dA>At&G=x58o-JKO*LYQz< z@>i$`P2ejz^X}^Ge@N&iX0TU;>$m+7wR*Y}Gu`&XL*hT8c>YLZtkHw5n3-+^?Xhcc z_Zpe-XN2j-nGxcvTNuP;|}x<{3>8)P^tCni@2VnO8`KD?-MQYowFRBGLN`NTcp zldvPO))Cwu$|_yeQjT{wWp;2Cp5K)^v9zE=&}IxSTF+4nP{q+Ko~Kk;Md*(ktIX7U zGl#y4NCK{fJMou6p?vX$rHJi9kBM5^xz^!lNai<#Gq;glSxF!#+gl;Bv8Ul9g}*NGTXX_i_-CM0FPOP{&PD@yt};}(mlAM^ zlWPC~LE<#NJB=-}szKTkd-2kkh;28-NE#db*bGW{(27cc)NFAX1iauH3}UFPOS~s% z?1(PpBc@W+c?_=*hNTLOL*`pZB9~&d7axXUg;U^=EByfA;XfW=^`+zYXF=aR<^X8c>X_S?yGJ5E*U0PfX1G?6qKb7O*MNTnv<#^@8wb{Yb zP6eQ2+PR_Q+oqidoM{JVs~`Ng769G`j0{#6=HV|?IT&boj-w+bD_c?@yUiFZe@rxP zbFoBo#Dl90e*~7oz*C#fv9A;u{ys50KT-S`kv&ZmbWBI9cN~8m?tezTSpZA>WX|k1 z73cmmC>M(=<%&P=G4(HlQmMNKkA_zH&X1$J4~BxwcZ)Ltp=6vEa?TiTLHfhKs(qP>*wKP37oB! z3|T0iv=A1g?R5F@Bh4`{$_#!$;IA}n4u*b%i<{h$$|L=gs~#P;kV;qRq6JF;w#i=< zOCqrqiTn&eX(gmV$6{u2vLOhB15uv(XacuguYGiE7Y&o*^P$eI8s{Ac8h57F1TOqU z{`JxNDjbFRH{@5U)to%+u~oWHW*&>2&WHHS#*#@$k14;~KtP%%j6b**@$R0~_ zTU1932F(21Ih5X>v*)0X`B{~{GLTM-;^5ySPUjVY6!cYlfBDYi@rp;OM4Ge;tXxQo z{(Mvg%i`cBA8^E=CX;IF(k24~DO}X5B8Fl`nl%deOnZ*J@8_cFF;o~@#6eF*{`vF7 zyxqsbvfZ#7eBEhx>;-)GK^Td$@70Jr|B0#!!dh(RLGqR-Mr41AG-vD{5BPKyZIqYg zC(@0lM6lf12hbD=hZ561kV2HSe<5j3K52F#X)cBGYc{Dtd+nhnV?r9!JWX7zNMOsW z{mkLztA#GdOEUFjgtXE@nx$Onf6KlnBkVS9@wC2I_${}7-nY<1hH`SGqkkkbiaeQls+C)`*S1i-S*Y{4!=K`ONP<*sB+hzDDTBH~ z?^}16_7ePYmccx~#}0y*&CkGt0Tv-F9R%V3PSCVH6O=^@2UE0Hf*c4#2{P%~ssA&F zvTpl`AuTlN_1A9&Sm2P`URDZ#Ch*ayzrg9Ty{vI`DuHn~DvPB9D+g}K(}MNCtV}m# zsq&z@aB8RJjh}rWSa}`n5ELelch0117L*CiVm+v?-Zfk=jM~-6+mj>)#Nv@F5kN*bQCuco{xd{^V&AR9TJbJQEdrgUwh_pml*wNHg(DEB=Ueh<)AQoHzDKZYV}H>mazk44|+XbmPGifGRW=Bbo$ej8o27e==-oiE4vC z5y0+ZWOdAPNM;Q}I!oNtF%C%<^M zWn?{Sn-MnV<)^YYT$=U^>R)bo5^e-(DB6{vxIrHH+-v&9vTwoelaX`JbH) zQ*vDHH~OB+ZRWh6?J@6KdFbwUqqJq&V%Ov06%pDq&(QnTyk061KkqWz9|(4T`)cFej(kd zH>^Eka**f31TD-9GBo2U#B({e%VW&)VLBD(nrFHF}=X91hoNEKltrgphhLkHW4 z8K^-|DXQ(E61fF(=F2sU&qn19&JL7slPWmso@{Z_E`Vog9SoibhI5GqUozsD9Q8^~ z7H@F^a30ov=$iodm`8m$gl&M37uuiWj)&TR5}e_H^UDI~F*S<|0SC{=_^b3?HDrzU z;NcON6XNQc#vGJ?wou-LQx-Q)?(<4r?JNKfGFBJ`$l_iGi#r+IPkW`IojR7lUyQ#F zJYv16bvayeS|We`ihtkBP)Ok;^Zs+dm-!)>4KG$K9fU?T4vWuMD4BGW2w>BJ&3d&7 zN0HN>iOzIcEC|lgmfDmRt>8paemlgyXsH=h6!voR+*cD_%4EKm!lJPAk}thFqWPf$ zXZ8SCyd|TrC96nFr>9iKl|=f)hRqkrrLT?1eu6QYX5rwL8~mAxo&Oyk7?C*G>2oDx zONlonS8ekLJEdX(=Lr%6Oit0@z%XZelDl3TJF`>}#1$ZK&vL-sMv4nJg@>$akX-Y6 zJKUkJetqn;VslI-Mo}ENalfBOLKTheS5Vyu5wy1HSdc4e^%k3?`9?d=kw?5Stez-U zb6`i(=!6>~JoJ_6NUnNgUw-|qRlh|({zfEgVyfDMW@@C*1p@3%tHpH`AgMnZ#6J(- zy3|ZlYC>}1y%;<)X7=#WEK3v1J+o%wxP>%M{ zL~9R6QYVcRouBD_f#ikr?RMk{usUwTe#$;$xE|h#pq&Gu5Wg@xUI+6^el{nzZQ1 z??q-d&CmT<`HDw=HnhvqBfpYzB>H?2l}`MqT(;A?jS~5+Xz;nr4s;XN;%`3=hNHu6 zBzrEGeK<}HyTx;8K*^y(ev8Ma!my`LMIrGFYGBB*EnP6XD&bm(t`w*a`NzWQ7W|V~YEeTI62~RJC z>%|nZ+LC@Y6N#}lFzc7Ztcjup!wa(kvrerpKZj!d667KSZ%uP5TwJs?T!pPZVx1{` zs2}a4EWY9(rlBYBMuaSW}A2rzGHF){)1Ad^xpZ*=z;6Unmut@~b1l)!sjU#Nb?nbwQSd+^;z0up4 z{?z*@Z6`qoIh3WbsliPT+}aw20PavgOT;@)7@?MWCxKAQ?e90pHE(;$-UQj5>YH@< z=-S4&CyYixf1(o?qtqAU{CG-&E7LbIP*ePhY9K;8Lu5^mAHUs!Z-Q04b86&yBqFL)nWXRJ8YO|^y7w2N7(5S_JyBS?vOpT0w5>K6Vf+ZwtUG%qJV6o!p82UTM;5YHq z2^MWCaB8L)89=|5B-0v~6=(&YPNZ^4ZB2^~VHEoVjGqfat(}9&kV-X9%S{*(EG}JA zU@G*t7K6aNMYzdxGj9W<97aGnaO%OVSYayF^Lj`XsUh;J-zKtL5zCcH#$0*n4;!0p$Asod+DLOxk;^hZL5*?`eYQ8GM6T#h~yOfB( z!kFg(!_Gp36BMpw5_T$GVelVTF4dO{aQlaJShxY!BKQb`Z{rq@Qye~b7ri@s&Scc= zBk_sN6F)}FlWv|^({1QjJWhpuo!aX_$S7>sHxT305`xjD!4)Z#?vPc#8>5ew2mG!* zOQXW@Y*}{^78K>fny5{Eh3?BIs#j&-0#7#>I1=BYY#Q{L1vKANi}!ww%U91h2d}=f z*w6+E_?Y9Q`O-f!?f5(KWH--Woda5wJpnr+sh3ya@vLo}AEgt@xM-uF_Z=YWy(>-g zdNtp9AP`c@S#;Jx8>m;&8u1PaV|ZX+5vNxuJP}dOvI&Qhxc-_v{rBzJ>39pIju@$}sl(R~;Sv{7 zrT}`FpBMFQ9kpH+uo|(gmGZ;)#syU-)q#^m$NRI#5$D5D2pNFNr65-gd*G*= zx&VYn9l}HSlE89#!}}xfrJQHpU+cVTyzGOrTA~RLe4wh)!z3w)qh;?09VmRu2T5Gt zeffh1>kZ<5zx>+=^A;3|aXczYh$zqx4}V225I_$t5@)8?f->G)hu!IYGytkuKyBn%0J-23p{edA9h3<(IJuPaKzO3jCkt#Bw_t>*B=^jd9UH4F8uEQQCBDH z@jRq^nV6TUS$qzRO9fYhKz`Rl)m6DQhQR&*Niwap6 z8XiVOO{Jfs0tU6;Dth+Pg;5rO$F{V%9x{*FG%5@jfq zy<61^kIL7=#;CN`2(HDIC`VO#UR7!>RKnJ&v{I~CiE>mWxVD16Y${%;h3!;nt$48( z<)~Ua6{-n^O4xOkR>CJ=(JH2oa#SVw0h{U*X5^NT!5*woB@0d@i*+bV)qxq;S^T&T zHfe=As4}uxg>qDt$Ega{49Ig^_uT0I#H^rabfx4Eej16CDWw@2+ zn?*TXS(!xChm)}ZQN8TXK3D|ODMx))m&Jy$v_kfN6o6nHl*gNa!&51)u|-^z;}FV= zQ)&rSdK66bXW`qOCl(vfQUK$M0FaX{MV>mI0KCKipjqbuU;|JJV0;k(<&?BGm8SZS zas4NX^<#tUPbk)p8QDPqocY6_eYjW~YI`a6iN)HKQ-a;`n)7FWT&xTguC(%`Vr9xf z<;Aor($vY?jXw*8B;RbP=%sZh7wb|^DPn%t)}Mt2Lv`iNpM|qiilw394=SzPyZqTl zi>RRcm!g_ltV}s2sK}Ve|JeW3pM@`do?Iw4MHqFvtbK|=C@T*{&j0i9tRD?liak$+ z;y7CTy{Rm^&prm>fY+0{k|L`R>3b4Lkg&6ma1Rn36Bz5B9id^3V zC?cMusEMeUj;XRNwFAnJz%7a_o^2*E#l3u}KRC@3pCN_^2UJf~AdOTix~_2x{{9A& zaOw{vTJ&CZUPd}nUr-WFo*mA$4E8ACD=F%mT@0=xe#(@>XlU(d-COdDzf8^komOktZ!0T_ghuaActeFt(=A4@JC*?M%D-oDDh@`$GqsW!|~$%e0)ZC2}o9&n(|>h4fTFIxZW|U zo|oz^KRk~5sJMKIH7_}vbCMpbY1#aD<9Gq2e%ZnA29PM%{=GfB9}pYrt_|&Mar!ZY zqH(yo8&e=$*8G??uN%iG&NFr50MM%Lc-Dy76sEqT-SNAFs2iu`C>ABOU`n~=d9`T; z$Vm?){4qr9SAeQC$0n+Gp&%`C%s(3Rqve8sj2cJVZF)}VDAf1YSmSUJBg(&qt9EE2 zT$x?<;wX9VKN_+)i?C|QOY{U(WKRJ^GBno-b`V5_R`7fz{XL8hk)o!IHPnY-I0Aia zJ`yuD>#@Qa+v2b_vlU6WNyne)6K7FPL+p=MiL(*T?p`j7Wd2Ma%JotBUTl>};bR0e zB`O4Xe?}2-3&8}>IcAF6C|bz8gJKKwnX1AMC=CxlAa*3|<(%jiKiosfyD1IKxfg#G za|(cWP!?k1M}<5R5E5B38h~6m{GV<7nduBI*NW)rwT9tX8Gq@({#l_uczr89#dIvx z&teOna1bflpQ2cv8MKNkxFm9_z_V1KvlfIAf-F)0JOYaPsRit07UL%~eDK-FpC` zNXfT>mh*hJYQcv@O@YrJQ>@s#pA3$EO3@+R`!`Bc-K%8_-TMzp1qJ`a-@z1+HZquk zFQ{yRg0Co6q~L3c4ng@1r2)8(DNO+fjQ-kPdLNDb^jt(bQa!*HA*V@%FGD!$gujn)ErbgE@R}N%$uv z;U^X%617#KmrBBKm4x3b3I7@4TBrQi2-i7b-xzI8y?wAe@k@Mv4Ji9al+!cN+CEyM zTQnV8a)~2!(NCV3@vh)B^S)!)6n7qWYNX3 zQYTK54n-&cgWMuRYjhr0(8XdTs%LKP!w^KV!=?DDv2h6^q+pOS$D#$!+vNb7UG|^KmOVBS zn&^L{q;rpz?kQF(;@C6%3yVbu_ebSW$a3wjn(X#`@&DE_+wz6-P0YuOEbe;+ve;bP z_Yz5JAH*aLOO(H_pCom^p$W(){REDphwvJfp<)JHM^>Otr=x}QmcXDz`~VCPzbb=| z5Tb}$LtJdsrZtfB$QNXV-1SZ5nAwH$IN){4(^=rP!22GJ3w~~2EI_di5rc;9@8H*C zEgpLUt@U@%mqJxM(2@BY7E6yxH^iY=r}cIZJr>y^>T)kxdd)tx2`Nj}VRSo>7j)qJ zDJTFf%+#P!YVQMUY9pSmcG<01bJcqqR&(4w>gvz*$h4!-CVuzcf^o{m_6FYwfT_nH zRFB9KiDmumd8WJg?Z8AJ169lvvD_?OAJOtpfOWoD3%4qYiT$zS@>2*w>?U)U>Uv{2 zY0)7!H`XU6~qkVSn2ve`rC*)2s_2vWVmN`GN$@iE8 zsgF@qJ+=x?tH&fwFP}qr_%}6cEDGSfhacl%DZnc{`{!OX_2}$(!Hv$UvQRK}7L|Gf zQPGB?Rb`@uD2ay3@I1tLbYf?|%x|blC=f0mD0eP==VESsV)i)5n86PWn=C$t^R}{E ztOWOrI`z^r9CNp!ck+*;D3z19PBP%4CBEmdJSPm+OjrrJbKiLMdc8YW@73!YyOC>UU`=o)Qz|$y zU+_?`-Z=YLK%i{u^yS3p^5}$MdJ*QJSo&c4O?^%*CY$@FKI$iI_x;Y37qp_dwZ$NE zLGFI99+|fg^ojjY%ib41xX;>Q*|QPqdl?vu8IcUdEqtR>1(S<48mR`ibqeGlQ2D>5H!50F})FR<}egTDxp^o??5(g~UHb^o4Pe2T0{ffX#oA;3K|cX|NK`V`%qUIO~DCFzCz3oks- zub~z;JZYC9Z9*m5tH88GeQCRI5sPko0Ppw;h;4n`zaK%Vw1AmxL<5ZLK_Pn6c`fG6Sc@MqldOkEX*6)(sz!0tZ| z8?F<9vdmX4P9i?d@Y(^;l7U@ES$Cn8;Dlp2G3CvAghm)(fJq;GO+{=O#bsrcI4 z(YcWo`dEEy?$`=F(y9*Ws#P=xjV1laf&ngWh=rU2LiOv~)WE+1#-R2XCVC=x9jbp#ZJ zIL{y$%-Ua3kFMPP0CeQ9bMuSc>XD8E?|?9ii@5bkpX1Sr+gPxLcM_O64l!#0c++9n zF7F`)8{DcAC`SmwZ&*FBTVQH~;li}nk;;V^yp7ly)TWz?ZR+_WGcZj&0|Wo4<64%-NwT}%Pn&O&xCB|8)E3S6N$AvZUyH+m1o z?6bio#^g>5>vj6sxeLSkh5F~YvTD8a$a7GQ*kJX;a-rNVoliKV|3zo;mh*8j=VOo_ z{xoDHXz@20_zV1>ht0aFle ze3JumX=-1AMgQDQz8oP^wZ*@3e+9|KV4B1#p=2eJ()xtVVB9Q0R;$ z7mesm`U|;<5q*MwZtk=Q#IhIki?ab(aOfO_)F3+rjiG<(3`+FDU)^8iuCrohvPj)! z_2E~on&|hqlXxB_o{t{^sfg2smv|rCv;7(RiEOEk@K?ZX3#zHVuO}Cb>W%tMxe-x) zO4BXiN8jHe1%(B;$;FS##^`UZFRE8Z;MWk!kQon$Jr*odkW9a5%x#Zijp)oh7u6eL zBe2M_V!Ed#Egf>rgRj^;&&n?!sDqV#^oQo$EJa8BJ8U zZlk}rmLl!}h3NE=>HBkU*Xqr!y~MS=wm^~qe^2d8s>&}vq!YQuI=wA|xkZO7t-2hH z$2GSs0*D{w4zJTk)n5R%07Q?5kw^|Ny&M3{3vxHq=_B+Da?jN1@n-T~f;#XE5MYR> z@XPNP7w%l!%leM3E)HpaiX%66955!7(d+y8=0=6?5fgiwCPeN*7=K9Pq3n(J9=wS z%qTkJ^hT)~O_~j~yfy9HqNgNcnndS8)(3Q{7>%d2EEgQ(gV+{+=xbf zQB^IF<5{3O)QP|a%Mg*=rbfL*|2lVfqaHi?GLW$W!V)1oq*&|=cI{$D6Po5-`qLcVyq$(X z|7RF`bSn$KOS%1;^{%51B*Y|aCSGXAKOIBIZnPo4&At z%0N0`Z3kwU-%Yy}a+usm)$VS?@_1(MnKsNBC+7azrk}KbURrQsprmCk(BUuu!;*+n z(n916krt*H-yMix4c;zU0?O^O+p`KWYgNsfOY!pCz`M*;hUlq zyWNSMshx-OigTAd(R3p6&er-sbyX+DMkA~t_Q0Gcnod9ryBfqE=h#^Kln7#yW8<}} zI5u($)tjhY!?7;pQS62+q#GzWIt|GGA6;i2S4H*z|8vgVnR~gH9WHQXyBE0Z;);Tx zg18aliYN+-fD5^#xum5IgrTJ-go2uxe$>*e)UtA`B$wRMEKAHK$t5*QEz(@7-}}7h zIMU<$_}xEVbDr~lpZ7U)=FFM(&Tv}WwLYYpr1N*<0u35oA7TgEgtWbNeaI@(jlWqL zY;O6Sy7O1=@qE2_(B5PZ(jmx~M4lp_V$45qA)X@jxDb!R>O%tPEO>MmE--i!7jRug zX2C;-y!eHgJk0a(pa!QCSebeJP#GxO&MWg0KVF1i7%tOG{4fV>{z*I^KfmMj0!CR# z;6xFA;kXcsi4R=^^d>|h@HHbpx(3Q8X+ty&K;r?cMmD7FW13Tp@U&5C_awHM`j7$$ zW1|Gf8O^DR1R?pxY7~sLM^FfoDPFUM(lR&_Ci{o-dRGxUAdDhNHN;6xP_>^6xUH5% zAst0pL0Tf6MOs5zBke}oK-%Kc(?LAnHUbx<;Mchur$Z!(nxH?)&`t;7-;JrX(#jgXU5A zTQSf(ynE3Cx)iA$dKS<+AovPWP<=>uI*P&}8F+TaPCACdbE5EDgnecVeV?ucTBriT zN6_hZY?}A|dDE2A9az&)tm)JAGYqo>*YDGGFVcDF>#NAqv>xd`R(k?HK=}rHAcrr+ zRQf&IGO+lmw1M*O9N)G+WGkIP&mlGDs}Kh8BI4vY-Z5s--;lh9)rTyl&(T{*O(Qk> z6KOcK#VWALFmig5H%fTWnQ-lk)7$O2=S*rv3drD|GielC3(Nar3%?1dk;c_VY{bn0X@%nJ8gq)OC3!X0rGlRWATgVRitZyJj_!1C*z$a3|GZc z`Vei0LU_=n^luoXJ;|odoQ_j?JPdyRShW*04ak#phmARjeoKcMc$9Xy?!TqOk-8U0 z=8aa#DLTTi1~Sgc_#%Y>jYQ*IpwU3^5Fmt^BB&TC7pZ|xLMlc&M`s!M5^i#QkwV#d zT88vP7^llfo@7Y3HvLAE>p*|E^gS-Ah ztI)I5pizy1k8~ksLPnF{=qiK6+X?23Cbu{_JV`EGl^;!R)78!B5Bfj!T!Ef{Fyn-GPN4y=bPsbF-2LohfP zV7+7s$br;}^=THS3mb@)=>geBlQcHCnJt|SL7N+PsP1ey(meF+$qJfz_GTlSc|OI8 zfK*S?fK8LdN}9Rmut~BH1pL^Acf`T$S=ozp?f-L-7unS7PtXr~-REhKe?Ywl7=wMt z=0wk62l=4)cDNi}kr@C_l#X@=2YZq1TnA{ET=?EEId1C=+7jj~=%bJhYHn|E?cF0A zGP7xZ z90NrrMDVJNhB#hil7lPM3UpVP$|pxcxqghg7xh*+pK}s390k`lWJKd-K@Y@n=B;JsW}}3B@wKGq1p$Lq4lv#di0; z0S!{s<`!s3$#&vJ1{F&oUL-8Z1UfH>&pFtNm-%`3wNU;sP>IaS9tHk4`v$8JD8KJ8 z)`2)(8=xxJ@*AL~;#)mdKk{H?L$DwDC4%ddwC3YS9)iCgNzCC|(1B~#Xs*9Sa_t7` z$DU8}`Vkk1??)mN8-i6ovNnms2rQ<03{M+Nx%LX-y4a1Y7iI|Rk7*CCJFtL{y76?8 zjq67APY&nl1_#&SW4XT5j%%)&>&vNJKgS6ELm{n_saT{-Yi_uY#Y`E-(wZm!6GYr^K=JTm$1%o6|~Fc=?t_cV6NNP z4>Ak*{Bfw^XdR8KwE^RYVM~|d${G*74JtiQ<&!g5qoZhu9mwarU&3`i_Ka*?HBAY8 z&Nf_{fFhn|82VMLTuZE64X)R0Tz#v?ai2(B%H39;9+k>P z*ELw{J*b;~`JBpZuIDlHol!jfl_ysl7PAtI%)|6XEV3OI`84{!gK-X`et^*yW3)?X z9TB!cfN_ItH~ zQ^1bCe7y7bjfC_(pRVAvHT}bYCu3ZM?RHg(2-OQ<#RkBoyL4Y9mF?OAx*99q2c61=+WV16&$Fj+$jRgP8I{^ zYj8xOkXL(jz|5Us{wC5jl#&NNd`s)%(;L!--n?hM?UN1ZiP+0FK|Ap{L%=_Y=40Mc zNWV`ffj*FCfd(mDf1(wj-i9jBljQYKMJ2%l-hzU2T(@DikHIjU?8fv#NWTEf;YZHF zGEuTKidW*`s9|t4-OarLD%vTh7`o#yIVi+Ijz#fmjfSHSUX`Pe>z>Qkpp+HZZUFIpEdExR#Y#{&=2)n)LWSOP0aicX3oQGIq3fy>K~|W(El}1O8mUP109G5 zNaH~}kQ2r;ut?WUXF>;*b+=pqJ!0m%RmDjG>NC*A29$k{+6Q$#C|{aJsNz9r35C#Z z!8qqC%o$F2+l+#?QQ#=G82Z5wI96?*=6QcXpWEQ09qm4D#RpKuZtiisNnh>p0L(9g zYKO!MX@o$$VgG?SpDX|1>S(Atn+~`8GV8p$!RJ~z1b(TGpbZyBqRKkMI0qTuZ0hH-uCnJ#dN&AQ7!`3$msg{f$>1%h8X-EfY zLGg?B2+|;IYn=1#PBN_(k6BA9ds{8hq(M+fqSX>ZJoy!Vuubc0RV}e(w!n9?t(G`a z*hVwna?3KulLJWAyuOx}lho`r_GI!`l13w~@7hyIceo|IG(7mfZZ-C^%W zO42mio3YQ{gWN`{C9&3{_FiOpH*TvXt-Vg$vxvRBM&_p*?fu9(K|xR7un%ZKs`xoA zxZcQWvgZ)jo*Mm<@ONG39yCVHunZ*)VkTegq2wk~4VgAXattN$cq&~@`UB;W20`{n zvtt-(4_8rm?TgdB9r?tN%}Hyn0%C7QBgkxx$PaC1*+-HFq*?+^nGCp>KkNW+W#p^5 zh^+6&N!wnENm_r6`1S%<#0F@zDcNYR3+YK)B-4ZO60`(@V9bFwW2)~N+cqwL*9l|zgbZ^Hj zvR|iuj@hL9VD8C#b)KV)Ohc+AnFU6B1=%QwZ}gSKHa{U$kT z$WlRW{iZpVk{)=wm-p4@9q?)7d>!K*wWOgy%NQ}Tontv^67;D@xnl+K9HH6f#+N(Z zAlnN$Rg;x1%N=XUxG@^}WG!@TAZw6n$dZ!R9B-4a$7;44W6B+yNzgcr9;B2zwy0zt zBGk0>4abM%gHmp+g}QBWe8Q9PJ1CzD*y`A!0nmkjosL~Pb+NTJ^4l@|cTnza+wb_4 z91~G$dmMFqM(l8(jK?hKankWQnTAwDdfQGr_7e3RVl^3?d(rU);jg#l&2}N+nqwc? zgH%oC_W0fLB^ftCv+-@@Fu9GSHTPlCWg@p-rCU87Iu7$B{0_>)T9U9Mq=&G5XPIL^ zO0orQw6wMzBmGo?qZ5vhuShP^JRJYOB85l?2@mrX*^g8UeOwMZPL2uk=&;Oug1AoN z1=f;J6OERyNh?8jv#ZP}$y0)sw^?TXh7=<4E=%Fo)VN9f<`B`A;#*RNMyfF2U0kN+iJ+Jk}UICa!Syb?a!Idk+f&EeESFbgq4*QAlw;951 zEb>bNh5v?3L%K@efg7%u$-9~-dDy;V*ky84&^@3lWZ!c<-&Ok5fG%NI$tfhQYFEiQ zPAU!`p5!XIf<|rd{FxYL@{H9aI4UFT8fl5NkMUjPbG z6&f`6NfAam2#FUlGR#Cvk+haE(`iUGuE}TdcYXnhNAeMUXIYqyy1mE?tR-8zWms&~SJ39Pd0;!N z)55SI`mLbfQ>(*5XroT&%yxPMsfMh7s>um`4Z^|3rnPD1dZ}N0{3mC%CLkKSrt`h54Lr2wU~g{b8vzZ~-r{g4`W;0;nyLcCg-=rXiJ+ZpjqxG#^9K z#?HOagSZ8`sBWUh(K;&f%3Y6)SMqQA!?LM7`3gX*+cbbT#EkrNc8A&Um z7tIu&e8<&`4n?XVCwu=K){CmQg>eiV^!KKPukZqE$-CjdhGo)ef~1f?!?NfpLA%5M z4(m&=3GxbY3GYYOEY$K14c3jdN9j(DZq0$swkWYrvvzpP=1?i?nP zul)ddLOyBvK-IO}lP{qs&>D?QpS3BVC3K^pV{PD$E8V7h!Z|D5`5&qWg5}p5YBW9k zALA(`t)`=CTpcg4nrtmFT1L|(B-oJvjiEgS{RK3Z=4fQ7`}glmVtcE9lFXp*2J`=qd$bPgjCTpnvK}4 zdLaBQ`mUfQX(z+q zrZcy3TQyNz{~ErTw*Nq*mm)~SR%-fCqen%?2zc+4{xhaS#7??M zkau3!h)?M?L7fW+M0`QhKGHmYE*ciGpDG`7+9x&HCPy5mJ~}-Yag0VFEhTJVdBoTB zoNjwL;v1Dd+QBn6(x;vM$Z0xjCnv4vpP}VQe8tp7oS_?$YRT33|3#dq{1aoE=cb4Y zw7*UtL^RSuB<%{qC3;HG#dLT36*_r0&!?SV|4h|YpK8dDdvDN)&otu4Fu%}RLA-n2 zq@N-2s_lySm0s1z)acvVa-05!RBpQIJ1+b-y(es*WAn)!`meA>jI{!pKIbJ=ng)~{ zi1?j)s)*&Ll9HovMz71H~h0Cml_6wq}FMT#sm?i*;&>fJa)8 z%87OO^@xYmw3kOYNcoEShx+RDTm)tDdsS|%z^gJc`x%WD1Is0(`$6cEu zyx1NzYHP;IP6^^g1TfQn3)Ejc2&mCY5*UP&knX7N$ZFX7IH+($Pb|$tP4^Fx$aJh zgH0EQ(!n`j$=N8UN^RcuLFb&sxu}!+pu;>TFWFdo{Jx} zz*G75CsbgF5AUGc>WrP8Njkl5?BPshDOya`WEq+5Ok=&Zpv0D+>r7{p1o0E>bXKLg zk~ezigYA8!8q#lQv9lZ7FX->&@y-nPz3}9=?(BjfZtKCWB5Bp`$$k?A`@at&dNSAJ zd?~a6qc@u)h=E_4>L`8vU|En6cpW`(`xEMf2IwmJ6E>|>oM8N(WNTId|Ze7@BROpbWXIhNUx zD#^^TE1ct4l1`;mEoIXLKA)HCe44EgbYmc=y@D?0aB@AxgH{q&x(29?poftQfwBc{ z=|;(TmMzvLW=;Udc!F;}d zT;Kucb1Yt`BhHyDQKu8mS*(jrr<~8TUOJs|zQFqH1W)0!XOL=15mb8)d~HeKZzC@_ z=dv2jl{A`ucB*WRpu6%BqO$h{^)R_wRJKba-i7Qc+o#h)XBlfk+E3nzw32cbaGEc~ zRT?llpS;M%3R+q~fl5!~{_m>Gu2B;Jr=Su0rTsnfhD?zFxhkO@0=d&_F+lwDL7qHb0+WwDx598b`Y`ZYthSR-Q z*b$9z314B~>a@_gkjZCwfxMzJS;Rth+Us1*l6CU5yvhdZbilcUjo0ajvx>b01k2CE zoN!jNH+ADF=WA@IPG_7o>|32aa4uyxb@C+3nB@m;>0g9Rw3Y=3TGQSTS;tx-RpJU= z&Qb;O6}p^da)Rrhgs;)%EMFKW^mL0{&fY-crxJ7Q%h_8xQL=))j|8^}!(Vf*(042R z66;E~8*LS)WPhK?mFy6bwnA4j!&zQYel!^n`8pejq-tj?tJq{j?F#QIwgaisbgRWI z`zp2|OzUo>)=+bJS)7i$tUztdBZyV*awEiv*_X8Z|@ zaGBp}VB}}aOVHd-`H_2B3*DwZa@Mm5#7g3lo$K7kGLf#*U46>QK9(bFO}665eQc*r z6C?MtzjT@rd4P?(#0#t>O}2{2FWDYJvDPJ#hneeT%@%828F`fT(P_OJ`4wBGCIQP8a+E1V7NvLF*&8$H9C1Pwx>SG6eJT5_A0 zpyxvK34G!tNZ{(shR8FlyPyr(1@sJ?fOL?^?KmwJ^i~c7x+!Q~z!CBT^ZFT!FnJfd zT7F<5NC(O9-7ZA_z}gG?x7*K==h#f7a`N4vTag!37IBSd)i7o`Keol?{&6b&>h>WzBifY4bAplu{G)zixw2uIV9>1GyleI)nsC5 zbW{_IKsrclom)ly$yDntE#vb8lA`W0ClVhpJjp$lpc5s3u_TR5HIeC2f3eAe)&kvU z8-PUPgl#68lU5m0RsV>SQ&HG(_ zjBBIZq*cN=#&vU)hx9d4IT_>nVU(8?^oQozqhME*uha*rob)Kz8|5dh5w?F@dXfO? zwxD}CrPL;+Hfj0d3L+v~NQ(qT7aWWVl%oF>`@gt?6H&p^&_6ZT=z{N~LZoX*S{JfQ z_XY7T6ehXc<(}o_{f?AGNC`;VFdHG|3*y6UgftmR8`dMFJxFjr98TjRq(eZk{1xQQ z&>y2Bq(9JDNsLj0qny$soqhxwb5E-pU#3WDnxMFXAETnA{eq$ku0};m-wOJ-<&>yc z>6##ZR2V09{|lo)FX1$V6Wsp>oMVrZ3el+Tj^d?pNVO!v@tQMUnyzIePy5}9YALN2 z^s3*zs8-Tvf)f1*e0``v(2HY~==PFy|8ccfI1{CCLI2B3jO-xwMN%ut*LnGo9i^GV zxTM4_I!Rii)4R?j>6k`X(In|RofbNiCF6s~%j8KqNl{4f&=4F8q)6>`8{99E(slBV zPL&2|q(abu=+4q8L~R{*k;Wm_n$E!8u`bdxNHwPLo?+2lqy@q@JNTBdi}Z$|MZxFH zU8K(heI0Vk*j4&g(2pVK%w44>LH!bM8Pg<}hrHUgCUr#OIdhtnD)30^En~XWThQq= zPC0^pNa0i{s9^-B34(U_;xtnu(zbPmC0$Yl1+{(KFI}21h~L`iCRIHqH6bdxo3!RJ zCbWb%Lx24@uUj=4j5XvF9YONlf=r@hf?i8M{egVCd2Z>`pu5Rg=28jXgNC+4 z>F1-Lmf9j|$He0$HATmT&I!^)o#3HWX@O3^I44SHk>GX$3`vuuYl1EY{uKR;^sk`j zLdQENOI~KJz~@4LiJl@wXk-eq^fx~%MG3kLTiUZyf+{dJlVc)Mjp^=)van~RG-3M+ zw)AJELO~3vOwbD{ci^St^O34eOH%FuEfKapq5nirm1>1;Xs97(s_GGo;>v=EG&S8PWoz zY66ZiGo&{KMZktPOWKT7Ybpt~#>|pF75Tb)a$AEJ|8q11{VFgJjQzZ|BKD67i+MpB zs#8qNYzf}UgPs@Qrqf($hM+C2tQJ)&6ZAdU%A~&p`4#u|Eten@DI+!Z4Pbjwr`Lfh zkW_9w3}ezf-55XSeDo9g#k0TpCEa!!JfG0C-nrpVsHk^VGtU!nC#h1;M+$Po=j&u? zX|)Jap?E`KfAa#}7}he-{)9rhSuL;VwiC|W@P#^cfQL1n(2}U!@I}H_YmZKC6Z4pA z?2GzkSYFlhJ%UAgOlpmNd&lO+FaJYB+_QAo8hbg=5(!ar{;z) z)#>My=5%#Lb5alWYK~XZnv)Ccxt@gC)+Q-tnI3dYfYH7}a`FqqxwlgbW8k|r0-f!~#C)bxYP$(B zdv$ubZ=ijjPAmJm+YjipudlEDOP#KEa@DxVs%*P%CWKPE%t}OUJ}gEO7?f;We+q*5nsxKc~~xA%XS_Ivwv|v|Q9F zxuwz4s8eXM(W3qYuT0X`Vf%!>zL$it+TJd~YPqbtdcxhYD>|)$tGHKn>ett5`B|r1 z0agotJ&-o+EX%Z7;643<8b`uCHl4m}2lv?En-0SGAkS*KsZ)5zNnyWAiK1%5fPRy@ z3GxHFCG`_@RUT!&E#(VJG(8`4M?|T%&uMS9{I17b+1_aRL#H!s)tDwpEfpDEAm}~a zII;cnG4Mq*QMFpRG6vrKFX+5+Vax;R1(EMkyLOI;x@~KVs+dPQ^@1pW>*UpbVaz`| zt%c&@;{bg8=R@!!s2ejpE@G>^EJo7lo^fT2!SFv(;KO!r#>l#Dc>BJ-icT%tuZ%Go z4hzq&ut+A|_61bUMW=&p-Rr!rr6yH%$>neKLY>8!{%r<=PS-e4&8^b7^>6# z?(TMnPR~Hq!gXp7Rdec80ac6A$t%F!9;4G@s9Ky(hoOX)NVxxd8S2(bHx@x<+UWE$ zP&=KnAY-CVu07oC9d()ld$nYpJ_dqszKP}CU2L_a==5HPNnxpmvwStd{*UbIv?)e= zvqKrFw(o=CqpRV%Scle>EivgLW3}B1gGqP8U&2<^>EoDQx~&R^mP~`9#I@MtfgF3t^k;w=ZUZu&LGdseXyh!G>1C80&X5CQr{8>*s6FH)IH#5k`oSx(z4^h7rOwtmvDV@w%&{ z$lX5iv8#Pgpw;q>PU$69%VYz*QxBTB22MC9g-tQ66!ZWZ_*uidf)=-}GEdd>eF!wo zut(U`NLZ%ndVx+@rWuCA!uUPxR-Q9_FKB5(L(EJ)OijYDnCA_bh3&b7O)>DEPF&m7 z_U97Z?Q?a{au=(m%<#ML{0ypAuG?Nxhg&T#>bP_m{B^)!@Yj}Ux8*`ir5<#*nG6W0S3JdY7?zsgPVu>Cz%x1Mz=~S9D%3N)T75QeiRjbUe8IlG5+~#IX zjiI+r%gjp+%LHY^V6sdP(+DS{wL0B{W4&es9k@=n^=&&QW`$0f(1BmqskrR~HD3Wus1Ka`K&YI#SerpQ41W}P;6 z%QCC)8QvC4m;sFlFB-&kSYz)7jkv|IUD(FJ(r+~!6m)a+^D*0mXSMw%Ed2+1zBABC zKQw$RJe8C`Vz%p^O3H(nj}48&HWW7P9ja~|3Qe=ya9bGPE2goZ>9+TZU1IC?BI=$}|3mn&Gap8Q zZw%4Gmw8d#dqOko4J-ETpOVG#A7H4$NkD)DoFysi^_b{-X)otHHzc_Cw z61Heq`XAwwaH9BVSo)s~Q-pCK)ccB_aUj(Dn&Bm33xKNqqTBqTYBvo_g{>{DreB4v z#_kH0`Aw%UMpv0{>GV4s72XCC`@gUAt(H5waYV>6^Y1z>Rjx~a==3Lyc}L-R3NjsC-d))^;qBBw2xXb@36AfDK-Zg6&&lH^OnYQEnk@E8RB5n9&CN zziRtRH+Q?M?wT{!XmQu6H|!hX&5a_=W;pKk(&-c&_xkAM(bsD6)9Dpxe1Dy`CuNxf zbei8G%WTt#pZ~1@YyqF35Tl;k^D%+Kwc5Vh&1wmf6NRl2>K&}x8ll?op>I*OA@J;= zL#KjvQ^Ue^`gQmrbA(PGrCTkLg5dmbZfKS{N;iJd-)M=}=}iAXdyGy+UE^cn`=_G7 z)}FcH@WoL^g)3vA>sdn#z&aqF7?FzhN;X|3i^(vg- z!?!C1o$qY5BGHI2j@2Z-I5##!UXD~lV(dnHPkB3B zUgJTZYBe%8Q*P2}Tx?(22^GY?o@})YlG6k!_GykBxqp;q3$jm%9W4JPC=Ir>q4J(+ z&Gw*|Ix805sUD-@6kCQRPc9UclDE*2Cw~#kZPlcoY_trQ4+sj8jFx=)kf8WtHMT&0 zB*?S>LPw#zCr*o*Qd}8ZB%c$sp~W>eTF#2+He3}d87mLc@p{Bqd4x_)5l_n#kPgC4 z#mNzqpV5e~^`$lZ}@$vOB(*i7st{2{H&?u%n* z>2#~}Yq9F{Iu_XG*k{W_;2%zWjm8x$kDVhgMY>9P#<_BnAnvKkq!stPN_m(vIS;9v z49tQDE94SE1z833MbSxX?IEdaV;@ts-8FSg%sdDKKRyT*M;a}aI{lOd7mVaZ7)I-} z^W~*TTGyK|Z$;9oHedE^tyP9sZGjvlh*#}pc{-9-wS{t-AYQeFve^G=bz7(x&+E2W zCtkHBI`OJi$r~|@R<$a5E0R{VD)|VKR<$bmPeHsg)v}|_lZw{J`u?v~X_a}YUPOnX zV`7%+lu|k=tWJ)_j9P)q<+d8Z2K#pGa=EV{ew%59oG*&t|C(GOFBQc9HTk;ygP>h~ z-iv)hzS#z^e>T$B;a>L}@;_P_+|u8WecNh1VQ!C4!1Z+`K0@q^T_b-Yh!?n4-j8&Z z^1ouPmH!gN|BCrPxul)8yu11wj$J3uK+?)vCogD+*FUvoS|`7b##;C*=C|Pbfyl_i zY>*Ej9mFEul8+*3`QDblMbiHJ^0s^ysn*oscQD{>`7)ALwYTN`_F83l%#AWjq`dvF zQr=LTWIG@y-cXz6=nkB!Nn^k}0q@D@k!s;jGZ~gGa+7Ame>H58$93eMT4lD#laVUO zLDm?%MV^bK^^2|YE6qH&%CB)!;r8Q~QfuQ@d4tGUN?RMZ$vc{5{6OB{EaM0AG2xlX zuEl;JpAr;DuEl;RpKIp1UA`=AZ^2EC?bx3rtf-SdCY3)Jd^`4IVLV8$*zU#d(CMtr z5VuEuH|g;bwhsGD-h*_I@caII03E&aeHOgWbS#8@FxW7F1&}PPca-n7mQU)2zswb25M-Q?@Rfju&L&!K9;_euL<;hDmd;-`A##}L-KuLcsP1X`WA| zS9K%b$6eFuicO9CMJJx|cJqw%j&5tREsFa?CtlGeozB{-<@-(R||$+kRBeW2qN z+v>PSI`IPGy-4tTyva~Oe2aM}PSWX$ZCjk86VGS)Pd-=O)@1uE&RwS~wgYiqs*b#- ze*eknuiKhz-^AH;x?=kwE?6g?FZ@6GB6M4m?OI%Y_i>o zYoilihwXIY89NH%TeFiU>9!`={dUrcuL^iGG?s9Xp0)iM*X2L?x+=K;lkndOkK)pG z*DE$DzPnDmz|8+-d`h=9**xR>=*08&(}}N&9A#y*?O?F-Rgr@d&*>#;+u;5zeYM94xEdWK7jm>IQ&7`BIOZMIT;7{ zwTl#Z6&1I+$fF8qks`p+s9q~f}# zq(on9S8TcQPl$J#G0Gwgqy0f^tnwz3b{~AKvL8u%!e^{<8%b;YvC3aaT8oZV3|;s_ zJhr(asqohjGbLk{0K^J-?GC31L4Dx<|5&B9pmJ!7u}Z3-s|u&yf_51>HBm;#A zTUU6#w^WG~wk)^`QL3~?sx>WXIX?brB~SAV2vy<1il>zlL~T7ijXi;%tvs|%0aqv+ zeh1}|t~27tBk{9^_uXd4Pt>U_e_s3)<$a8DmGXSkl|zDfz8T8Z#|1)pGnLy&<)#RW zdIXRcz=QgBTO9v{-pZdEGgoPq#+P0TTCVgL#Dl)56e4LIYMwFURH()+ehq;c=csv5~5b%E6VfDTwhUM6t1(Sy7*U=1erz!qx*$EEX%C-L)e4Km!FLX^XU2i9pg?X0Z~FR6$n2 zNV-^Y?;>!CbS>ajrFI#7&&#!nhJ12&F>R3Qp0B1Mb!FAm`;+6_8{(BR{AYy`p94DG@_1eqVu3K zjNKt+rEZ{$K2*FkXt#gGNE(L|ri?Iwl*swK@S# z{UUy1^^o}*+YaHJG|!NiPozB}y~PQW+&GVsQz zCp0x5w4?o5=`fseERvGz{)QcSyBILb(DZyc9rRAukEME2Wj!Koql-#UN>kWt5OoS` zvYnMm4H12>OEHE;b-i|iYiV8SPCC*^4QZ{vG9=fX*a;=BFg##)4fko@$cKg%hV{u> zn#nw*tGuGlvI}0JwZiazd(Dt5bJr2_6gI5OIQb0C%AO=|GF<3$8$$F+Dw9_jUg)cN zE`W5l=`I94n61sJf;qoKVJi$bK8m6#`!}1AVbMMOAXl(ca zuo_@~eFs<**Vs0C&v(1L0=kYTIfb3#6q(zp5h`)L)Tp?y#a2IMg<-JauEB-94e9#2 z>$~WnHix0LJfRt{bgNN#!@}#a*<0~9l{1FA-hYF>JknrnG~|@J7`?#iq}S^v?uJiI zE~;Cxn~tYtb@CqgTEd;WtUWY1Ioa?>p2>8Qe&m*D8i0Lx0R1$`liW9SN`-F;($$VE z6W75e7x{|c4AaZFslfl0>efQ`@Uqf(O}u*?GOb|c>1R#QJp!mpJ?Ul7Cz*1>(=INK zx<+tROAVdkJGhh@SZRt&xqL|O?h+$!FU@qxGi)7M=)z-9bjgI+GHHZuVY%cm@NMKI zx#Bn5#bMZ&HqV6`CWlplMtatPem;CPMUBVBOhx5QNlB?84X$>_82B3y8rklF!_B3Jc5vH`S9c8RbeKP=-CRhY zHoXGcrb88|1779S2aCxw+)ddE5gvBF4qdcW-$UR()8)7st{#P+163WNznbgG!+w9@ ztOwwlIMQf|G4OxV@ZRrf;XT`GSpmxt4!R>G#&VxkSzBA~8#cOku(ZK3pj!SW>Q{`A zVWCoP!35}A*R9W4Rv2=WyM{Y-KK8KO4!r+$uxNdB4p=XCDdw}1yJ1%ych^8A_o&5| zweqC|gVBL4!PS#csjRf#lE&^v>~7bs{fzpk$%aKRtT-rt?vXD`XIBS1 z4O^yz85{>dUrplaqH*~Ureo+wuG{3@wt818{oC>**BmS)Uo_T|l2&dxv?#s{&7pif z`@+@I{%%32Idn+;5I0_(5pE@ztAwtMk1|e35Wq*QWW$VhZ@5iBLkSMF6DXfQfzHS~ z;5H5Z338!s)aTSGml|$6`_wJ`oZ1HMl;xJY+;_tNB2T)fOZh_%z>)JJ=)a|glkzS1 zMt0479M)+@yzEg=zJUR3DVA4HPTGHByuD&PmQp@Uml~dmYVUE9CXVb;ckgo=Ot;oq z_tH@4j*Bz=t zv%Sm?`Mv?^q=Co0>d7nZzNz~eLMnXZi1Ds-t)~%v`IhpDw=d(1Sr4xzkbLS%^Z+-| zQ_%XeAhIVJK%ar9P|v_uhcbOu7!>FS_bKZz*5?ep=0C$H&(NXdHPBaKi>sSk4__WT z;8QL)nr?yiFg0QNKImQfAD?pRgGkA@8uxG~aoakBnrFC|)7qDBZLn{HKHS%Lmdr0J zt&sSRXD#X`X~lp7-yp`<>?Y|`&>+T#wQXqKCi$h$fynTmkPzRU0{CA->ZMzu2gqT` z(s_;V8LoA0zM!r8wXnuBzDI1&_`bD0<0m^2xT|)-u`kbXx-`Rj2WsS`HkRNq*?Nbh zb$ZTvAL>5WdS71a%Xf%x@xL~(t{#)?wtN8}faO&mWlqH~cMP?IwpsI_sXw-Mhu+?W z@-&cW5!2w$799j_a*4|cZ?{JiSs?4yaJlMP*9FUvy}_|F4p zC#6!O?;HNp7~g?UgBBdbPT@|w)L=I?_?H@DO&9#@iRaTz{sY*e(ue*wh4%pmY7A-{ zQ24_;=m|fkG9TXwek#`#@r8xG4R#yzz$*qZEd@Z)|*(-Hin&P-@-16@3{GDf>>s2QlE~LRk0$s>C zlMH&%^bqD;HkkuW|fUFp(wzZ*t$lm)^yds{=I#wGC=AYC0$*E^Z!y zjJUb=1hrz?25EPa=|+f&WV@|{2!q{toIKP~sH0IQqD}#2MEwr3nMe=o9dOOG-n2!L z*U24Q0jOrngVZ+OduKL1JEp-Gl(36^l2Evj8}0V+f3%Px`Zl8JY5JnCE;ad5CtFQEQxEq3Df%^-M;lDRLRKG;h<{g*2OLu z$jpn`XXeH1Gc$K6(#+>emb1_X#TK3}wrnOnTVH}X6I)+$eMpwJ&Tu>8bH`Tbj#gC3 zgQrJ%@P#QyU5i?e8t%!fnC{7~8J^&&!i3Kng|mt=U5@DrZnjn6oOP)CP%oiX^5P-F zQ8Q4BQTL%Cg)c9D9qK;ROQ@0+tB$%(#Yu)ApH+-nfw~TLAL=Dk$seR!}~s3eHbx1*+^7NVA+u0h=!q;jW=2=?I3WOIT&gwLsu;o68w zV|m(vTHcbU*P_;=Hlor5^g&HWEll96Z%r#ce=q7q)J9a&n$Nel#{Qp%P>5QFn%4dX z3=!$=xloO+$Fv>OX_!vKbRnk8Q1^D^Rk^5X5|2rev3OARjx7zL z5VZ_-4eDOhi>Ra%WK zMxl}n%!XQqx>wU4o5{TdM^BzD9d#6{p*J57x}%n$&O=>~n%0l|7owI8;v4E3)U+I) zE*Z*ukJ>$tPxhmx4c|;6S{07uOH+nAZ)64xBZY-LP#NkP)V-(|QOPK7oi~=p={|w$ zJk-k*vgqp8hDlh(XZZXz3wh*=Rhsh6{-RoqP|cy_HSSvW8V^V6xY|(*QOi*GqFzKL z%h3n55VZ_-&HqxM(tAv%d1wGg!ob&ZyO8~gv7w|Stws25SmMhuNw_AU>x2G#x^ zhC?kxEkj*{8fcsw6lYu?^rvZkkk#d2(4Q`IgG_K6rgtEGX2N(akP;ublC+z=Pd*`+ z;fudU+P&_pV|2PY-DRQ62A3~gj=Oy4VlexdTbt9&Ip$}~mFAV^Q|3l9wY0FLT6$St zvea2tS>Ca1v+T4SwVbs4U}>}vS8vw@GA3~@3qWpy;r^0cV3NN*Wjon z!n>7shIe1@BJXkDFM2QVUhjR(`;51*kKHHIr?pQ%pE93HpAA0SeZKPf*5?PGOFq|q z%)aiv{=RnKNZ(lB?!M|%zJq)x`cCs*;ro{F`@W}q&--5Sz3qF?_g`NRYZq%@>r2+< z)=kzE*3;Hst;{df&*>NE*TFB>Z@6EH-*mq+za@Sv{Z9J%`-k|)`?vKk@t@>B&Hn}e zb^e?D5BVSWzvAx};0QV>nl`}8<{ zS=|y3U$OT65Hzj@Pmd|$`cjKeKph1<-3|48n@=IVKcQY%*J7UQJ?jC`=&{^$T**<; z7Y3aKRr{R-y^bokya?&j@!aQH_GQqGVb?%kvR_kSa-%&ryy4IFvr*i2oByw%m4V!~ zDCKw5`>3oXA%4X!puc(Y0-}1lL3(?zH>e!SwJ4G6xm2#dq;dT8>k!g0Bu3Nz#0h3;5v&BXe70Q z4x#>_bEplhb3x(wk_JM$43v>_8Vue>7VE#@}Ms^!!L3$4;RNe3btT6I9OrY+DIbf&%1!$oB5@@PCAFQ208R;Uw4C$_*jHJm6A)OA&NH=*gXdihAXsKKcI$o|Jp#-eBHn_Ht|CHpZ>W?WEfcH`#rwsGUDYh)wTG}WZ_+xRbovOT!iA3cve`t?&RN}|* zX|nQ*C!eM$r*VE~Wm<2}U6mr7rYk2#bIwrU`;aj0p;%h-X)nc4$fub~7;=^p0+&Du z%T`V}`Lv(XA(BrAC`+RFR2`&5^E=3Fu(GHhpAJzTVZnLIcK%Qj8?Jnb(*k9PJLi!~ zIZj6@wKy$SCg60m;yRey$12a}@M)>C7^mZvRl%GmD(~a;8RfSS&Qp|s`BY_7m0A3O zE;e16htubj@3BI&l%M%saQ1?7bp)TzQ4aOuQ&qW=#;4_q3x9x(RVdr|<8bUHWeb14 znk`fk2Jz`)rEd_QE>Zemi&iTW_ya<$MtK`sZkaL@rqIvpl$AJRt>VrfLSyR`Cr&pg zsW^RGdATp2ze!n%)6L30oW7@Avb`mM4olh6N7`3@_5T1?L<5Ayi@vr0Iw!Yj%|{#+gVSy_bB>k9n2jnDX17;Y(- zFu)x#{ZrZ6g4^#Yy)eUl#S5noAtRsvw+QsF@(}Y;qc)X|!_m)ZY>88g@e7ROW;}@b zJdEEVdl`#V4<5+J7&eSgt;Q+i_|)I{w?CiSjAg!j8fe^uOBigNgS|QQ|CMz$z)c-T z_}xB9dy*v~J=<6W$;c2x48z~VficE_3m%}5Q1cUTffC_T#_3?j6PShuke{#vCU(Hs z^uljV3z&pBhDjWS5GFW*rZhuKCV`Y8q;+R#N&}N74P{(P+r5OSEVlp)S?&nj#BxVskaJ`-@?EDe7USo*Y$cv$tit7-y{mBWa^1cf-x{c~21|daaUH(O zF5Q4bS3FGE8HlXd+d`(!-Nw^JL*&{7@GDFkjyYLuy*n{*8dm`+^Dt)COv||s? ziWl)V<59fLBk91$SYap5de;<>_(OED!jEwg;}xWPZ%E)(?B*Q#1OATX z^x$=-U&Bgv@patHcoQpF?%(lsmU|m7k-;?o@8Cl$@IN@08BG~tMwDJ=bjx=bGvrsi zg8AfyC0cPmsb4y0Kv1^2G-k?MtTH5QRKD+c0IfFelULJi+(~IOsjK#7aV~O0#22Yl+ zaVSgW=5d;Ds@%mmU7lolvt*Bt=l`Q}A;*4>T*~vfT;61Z=E*L7eE=+w8wY7zDBt;> z#tM0vaj{%JS=X1!F?`HeCLO#`#bh@Rpi=H-Lsv*IC+|vW@xiJ}(l5T$@5l1b@zJ`l zN?t9|xLT?rjWzN(B?-U>GIt`K)WV0-OGqo6tQ@NGWBDh#X%gTwYIhP|r*^s`5I(1N zjW?;?X-pBla)orpVf+#))i5_e@W)eW)D^NLSnv!{RU5?$Ei$@&i6@+0O8&<`Ws3r8A9J z(zw!*qW5#AFf)z$X&jcuWoblrif=68E9Mw5#Xu89ndzhLWv)+lo)r^ZaVRreX!8lb zryI`1J$dGDy?N%>v}O2AG1OOJmijIjKke6S76sbPV*yhv3Hn53u-RO1T{FwfJ7!zv zUD|RSld|&6b6F2M&v<_1&|6z(fjKmL0hL?ejAt#OPn@BLA(WZTW;pa$qb<`EWua?S zZZ`d%3r1xSg>Suu&a44GvEJ&2vSjb4BCkr$oK{u2rfPL{vi}U&F)rY{^gzk(Bu+_O zDVSJ2xBZvujg2roze)rXg)-Z+8-$gZ)>oL}iV6|552c_(VH_rkuH>{hw3>9;#pML7 z4VU<%4y*R2KWLX)v4|DRh?-WS)NjRti8A%%CWwwt2uD=-rGviE#ez|%WxI))#MU#v zGiq41cO9-^qMX$v%H2^QYsyvkCYV=TF4I-3_Df==UVg1$K}rHigh&{pWORiUqqocH zj((XIFsBaIiKXgX9W-K9I1(kGRL z)3R-qvlT{W*lwDNRMUhxTOl{c4qJA9B-}6R42Oeu#7a~}!dBv4u+`g5@QgU2il2veUl%bI(i>s)*t*mg z&%-=l&wWy&Cpl*uxP-Wte0)3X5svbp-JxzZL!lbC1E$hVPg)7xwklkbb{@TR(Zd3S z^pLWk-K|=8!1v={3coAcN@zd_*(N0=iT!KKewyQZ(GxYPemN2jgj2< zv#(RMrLLu1udP0!E&e8^T+bwyf5fu)qE@6*$^Kc|V<6Wcw+UfWF`E&}H7Qlb5@K)93D`{9(x z@fZ#oRV-lD(9dV-qFn)ML>t70tfI@?LHHvfr$H7w$*np!wUcSVpjApIYG)e^6t;T5 zjZ)lJ*V~|M2+!G!RKDsmFT+-1zDG|S9S53I8WB5$FuYLIKjhg7gCDQcTso2*vRjEpM|m zojgf~ktelFXc3}`MOE@KHxbg&h}6Y&#;*u_^|6P_T%kjf3{ihcBwCF_A(>_+g6?e+ zMW%bmKAK)~ywMpfMzR=;@>~!3qLg1T>cUj&E=do`B_JhaUMxlH6B*JX)w3_bY)6br z$xAQ6cOAk==5|80r~mBZNBOawbk1a~rtQHi^xuM~)GtoJ;6Qk1>FLf>XG=G4{Kvo} zVq=f`=madbP7+7o=b|o0oAdg^dsmVbZ$g()$KHg!N&j2$Pbd7PI2k+*e-q7PT>k|> CJ1YSI delta 75770 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 From 96bb7efce584b999471dff04387149a56f694ebf Mon Sep 17 00:00:00 2001 From: Astul-Betizagasti <66637541+Astul-Betizagasti@users.noreply.github.com> Date: Wed, 8 Jul 2020 12:49:50 -0300 Subject: [PATCH 3/7] [DYN-2870] Increase the code coverage: DynamoCore/Graph Folder (#10860) * Removal of unused code * Revert "Removal of unused code" This reverts commit c78dfe9afbdd95d1d326c0d36bac7c65a69f25b8. * Added Obsolete Tag * Message change --- src/DynamoCore/Graph/Workspaces/CustomNodeWorkspaceModel.cs | 1 + src/DynamoCore/Graph/Workspaces/HomeWorkspaceModel.cs | 1 + src/DynamoCore/Graph/Workspaces/WorkspaceModel.cs | 2 ++ 3 files changed, 4 insertions(+) diff --git a/src/DynamoCore/Graph/Workspaces/CustomNodeWorkspaceModel.cs b/src/DynamoCore/Graph/Workspaces/CustomNodeWorkspaceModel.cs index bebc8909cca..e6750887167 100644 --- a/src/DynamoCore/Graph/Workspaces/CustomNodeWorkspaceModel.cs +++ b/src/DynamoCore/Graph/Workspaces/CustomNodeWorkspaceModel.cs @@ -316,6 +316,7 @@ public override void Save(string newPath, bool isBackup = false, EngineControlle base.Save(newPath, isBackup, engine); } + [Obsolete("Method will be deprecated in Dynamo 3.0.")] protected override bool PopulateXmlDocument(XmlDocument document) { if (!base.PopulateXmlDocument(document)) diff --git a/src/DynamoCore/Graph/Workspaces/HomeWorkspaceModel.cs b/src/DynamoCore/Graph/Workspaces/HomeWorkspaceModel.cs index bd26515b1cf..7892de768eb 100644 --- a/src/DynamoCore/Graph/Workspaces/HomeWorkspaceModel.cs +++ b/src/DynamoCore/Graph/Workspaces/HomeWorkspaceModel.cs @@ -460,6 +460,7 @@ internal void StopPeriodicEvaluation() #endregion + [Obsolete("Method will be deprecated in Dynamo 3.0.")] protected override bool PopulateXmlDocument(XmlDocument document) { if (!base.PopulateXmlDocument(document)) diff --git a/src/DynamoCore/Graph/Workspaces/WorkspaceModel.cs b/src/DynamoCore/Graph/Workspaces/WorkspaceModel.cs index 48359b05d76..cd3fed1ca26 100644 --- a/src/DynamoCore/Graph/Workspaces/WorkspaceModel.cs +++ b/src/DynamoCore/Graph/Workspaces/WorkspaceModel.cs @@ -1499,6 +1499,7 @@ internal bool containsInvalidInputSymbols() return this.Nodes.OfType().Any(node => !node.Parameter.NameIsValid); } + [Obsolete("Method will be deprecated in Dynamo 3.0.")] private void SerializeElementResolver(XmlDocument xmlDoc) { Debug.Assert(xmlDoc != null); @@ -1520,6 +1521,7 @@ private void SerializeElementResolver(XmlDocument xmlDoc) root.AppendChild(mapElement); } + [Obsolete("Method will be deprecated in Dynamo 3.0.")] protected virtual bool PopulateXmlDocument(XmlDocument xmlDoc) { try From 001662b2e8b4239329bcd353a61f1298ccbb713e Mon Sep 17 00:00:00 2001 From: Martin Misol Monzo Date: Wed, 8 Jul 2020 15:10:48 -0400 Subject: [PATCH 4/7] Decode Python list into IList in function calls (#10865) Implements a decoder for Python sequence to transform them into generic or non-generic IList. This relies on Python.NET 'PySequence.ToList'. Also implements an encoder to perform a 'no-op'. This allows to treat returned lists from function calls like .NET lists, which is the behavior of Iron Python. --- src/Libraries/DSCPython/CPythonEvaluator.cs | 2 +- src/Libraries/DSCPython/DSCPython.csproj | 1 + .../DSCPython/Encoders/ListEncoder.cs | 60 +++++++++++++++++ .../PythonEvalTestsWithLibraries.cs | 64 ++++++++++--------- 4 files changed, 97 insertions(+), 30 deletions(-) create mode 100644 src/Libraries/DSCPython/Encoders/ListEncoder.cs diff --git a/src/Libraries/DSCPython/CPythonEvaluator.cs b/src/Libraries/DSCPython/CPythonEvaluator.cs index 6b15e02210f..80251e173bf 100644 --- a/src/Libraries/DSCPython/CPythonEvaluator.cs +++ b/src/Libraries/DSCPython/CPythonEvaluator.cs @@ -111,7 +111,7 @@ public static object EvaluatePythonScript( /// private static void InitializeEncoders() { - var encoders = new IPyObjectEncoder[] { new BigIntegerEncoder() }; + var encoders = new IPyObjectEncoder[] { new BigIntegerEncoder(), new ListEncoder() }; var decoders = encoders.Cast().ToArray(); Array.ForEach(encoders, e => PyObjectConversions.RegisterEncoder(e)); Array.ForEach(decoders, d => PyObjectConversions.RegisterDecoder(d)); diff --git a/src/Libraries/DSCPython/DSCPython.csproj b/src/Libraries/DSCPython/DSCPython.csproj index e193614d4fd..8dc4a442c4d 100644 --- a/src/Libraries/DSCPython/DSCPython.csproj +++ b/src/Libraries/DSCPython/DSCPython.csproj @@ -63,6 +63,7 @@ + True diff --git a/src/Libraries/DSCPython/Encoders/ListEncoder.cs b/src/Libraries/DSCPython/Encoders/ListEncoder.cs new file mode 100644 index 00000000000..9c42e4cf472 --- /dev/null +++ b/src/Libraries/DSCPython/Encoders/ListEncoder.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Dynamo.Utilities; +using Python.Runtime; + +namespace DSCPython.Encoders +{ + internal class ListEncoder : IPyObjectEncoder, IPyObjectDecoder + { + private static readonly Type[] decodableTypes = new Type[] + { + typeof(IList), typeof(ArrayList), + typeof(IList<>), typeof(List<>) + }; + + public bool CanDecode(PyObject objectType, Type targetType) + { + if (targetType.IsGenericType) + { + targetType = targetType.GetGenericTypeDefinition(); + } + return decodableTypes.IndexOf(targetType) >= 0; + } + + public bool CanEncode(Type type) + { + return typeof(IList).IsAssignableFrom(type); + } + + public bool TryDecode(PyObject pyObj, out T value) + { + if (!PySequence.IsSequenceType(pyObj)) + { + value = default; + return false; + } + + using (var pyList = PyList.AsList(pyObj)) + { + if (typeof(T).IsGenericType) + { + value = pyList.ToList(); + } + else + { + value = (T)pyList.ToList(); + } + return true; + } + } + + public PyObject TryEncode(object value) + { + // This is a no-op to prevent Python.NET from encoding generic lists + // https://github.com/pythonnet/pythonnet/pull/963#issuecomment-642938541 + return PyObject.FromManagedObject(value); + } + } +} diff --git a/test/Libraries/DynamoPythonTests/PythonEvalTestsWithLibraries.cs b/test/Libraries/DynamoPythonTests/PythonEvalTestsWithLibraries.cs index 31fbb1475f2..5e95c813b23 100644 --- a/test/Libraries/DynamoPythonTests/PythonEvalTestsWithLibraries.cs +++ b/test/Libraries/DynamoPythonTests/PythonEvalTestsWithLibraries.cs @@ -21,7 +21,7 @@ protected override void GetLibrariesToPreload(List libraries) }; [Test] - public void TestBigIntegerEncoding() + public void TestBigIntegerEncodingDecoding() { string code = @" import sys @@ -46,8 +46,7 @@ from FFITarget import DummyMath } [Test] - [Category("Failure")] - public void TestListEncoding() + public void TestListDecoding() { string code = @" import sys @@ -56,16 +55,32 @@ import clr from DSCore import List l = ['a'] -# Python list => .NET IList - Does not work in CPython -l = List.AddItemToEnd('b',l) -# .NET IList => Python list - Does not work in IronPython. Couldn't test CPython because of previous bug -# l.append('c') -l.Add(c) +# Python list => .NET IList +untypedList = List.AddItemToEnd('b', l) +untypedList.Add('c') + +l2 = ['a','b'] +# Python list => .NET IList<> +typedList = List.SetDifference(l2, l) +typedList.Add('b') + +l3 = [[1,2],[3,4]] +# Python list (nested) => .NET IList> +flatennedList = List.Flatten(l3) + +l4 = [] +# Python list (empty) => .NET IList +elementCount = List.Count(l4) -OUT = l +sum = 0 +# Python-wrapped .NET List can be iterated over +for i in flatennedList: + sum = sum + i + +OUT = untypedList, typedList, flatennedList, elementCount, sum "; var empty = new ArrayList(); - var expected = new ArrayList { "a", "b", "c" }; + var expected = new ArrayList { new ArrayList { "a", "b", "c" }, new ArrayList { "b", "b" }, new ArrayList { 1, 2, 3, 4 }, 0, 10 }; foreach (var pythonEvaluator in Evaluators) { var result = pythonEvaluator(code, empty, empty); @@ -86,11 +101,7 @@ from FFITarget import DummyCollection from DSCore import List from array import array -# Python array => .NET IList - array is in a builtin library. This does not work in either engine -# native = array('l', [1,2]) -# native = List.AddItemToEnd(3, native) - -# .NET array => Python list - Works in both engines +# .NET array => Python list a = DummyCollection.MakeArray(1,2) a[0] = a[1] + 1 b = len(a) @@ -110,8 +121,7 @@ from array import array } [Test] - [Category("Failure")] - public void TestTupleEncoding() + public void TestTupleDecoding() { string code = @" import sys @@ -122,9 +132,9 @@ from FFITarget import DummyCollection from DSCore import List t = (1,2,3) -# Python tuple => .NET array - Works in both +# Python tuple => .NET array a = DummyCollection.MakeArray(t) -# Python tuple => .NET IList - Does not work in CPython +# Python tuple => .NET IList l = List.AddItemToEnd(4, t) OUT = a, l @@ -140,8 +150,7 @@ from DSCore import List } [Test] - [Category("Failure")] - public void TestRangeEncoding() + public void TestRangeDecodingCPython() { string code = @" import sys @@ -154,19 +163,16 @@ from DSCore import List r = range(0, 10, 2) # Python range => .NET array - Works in both a = DummyCollection.MakeArray(r) -# Python range => .NET IList - Does not work in CPython -l = List.AddItemToEnd(10, r) +# Python range => .NET IList - Does not work in IronPython +l = List.AddItemToEnd(10, range(0, 10, 2)) OUT = a, l "; var empty = new ArrayList(); var expected = new ArrayList { new ArrayList { 0, 2, 4, 6, 8 }, new ArrayList { 0, 2, 4, 6, 8, 10 } }; - foreach (var pythonEvaluator in Evaluators) - { - var result = pythonEvaluator(code, empty, empty); - Assert.IsTrue(result is IEnumerable); - CollectionAssert.AreEqual(expected, result as IEnumerable); - } + var result = DSCPython.CPythonEvaluator.EvaluatePythonScript(code, empty, empty); + Assert.IsTrue(result is IEnumerable); + CollectionAssert.AreEqual(expected, result as IEnumerable); } [Test] From 6256f0bc8e04b7d0fbc2324b5d690d501603122e Mon Sep 17 00:00:00 2001 From: Ashish Aggarwal Date: Thu, 9 Jul 2020 13:34:39 -0400 Subject: [PATCH 5/7] [DYN-2755] Preview disabled nodes can be renamed with double click (#10854) * Add Rename event to double click on nodes with preview disabled * Added new block over NameBlock part of the node to catch double click event --- src/DynamoCoreWpf/Views/Core/NodeView.xaml | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/DynamoCoreWpf/Views/Core/NodeView.xaml b/src/DynamoCoreWpf/Views/Core/NodeView.xaml index 88d2b116be0..561ae25f3fa 100644 --- a/src/DynamoCoreWpf/Views/Core/NodeView.xaml +++ b/src/DynamoCoreWpf/Views/Core/NodeView.xaml @@ -274,10 +274,28 @@ - + + + + + + Date: Thu, 9 Jul 2020 14:28:45 -0400 Subject: [PATCH 6/7] Revert "Annotation fix (#10853)" (#10871) This reverts commit 0a3615fc643df69f452da0524354068cbfa6b3ad. --- .../Graph/Annotations/AnnotationModel.cs | 64 +++++++++++++++---- 1 file changed, 51 insertions(+), 13 deletions(-) diff --git a/src/DynamoCore/Graph/Annotations/AnnotationModel.cs b/src/DynamoCore/Graph/Annotations/AnnotationModel.cs index c51fd63817d..b42312d5c7c 100644 --- a/src/DynamoCore/Graph/Annotations/AnnotationModel.cs +++ b/src/DynamoCore/Graph/Annotations/AnnotationModel.cs @@ -290,33 +290,58 @@ internal void UpdateBoundaryFromSelection() var regionY = groupModels.Min(y => y.Y) - ExtendSize - (TextBlockHeight == 0.0 ? MinTextHeight : TextBlockHeight); //calculates the distance between the nodes - var xDistance = groupModels.Max(x => (x.X + x.Width)) - regionX; - var yDistance = groupModels.Max(x => (x.Y + x.Height)) - regionY; + var xDistance = groupModels.Max(x => x.X) - regionX; + var yDistance = groupModels.Max(x => x.Y) - regionY; + + var widthandheight = CalculateWidthAndHeight(); + + var maxWidth = widthandheight.Item1; + var maxHeight = widthandheight.Item2; // InitialTop is to store the Y value without the Textblock height this.InitialTop = groupModels.Min(y => y.Y); - var region = new Rect2D { X = regionX, Y = regionY, - Width = xDistance + ExtendSize, - Height = yDistance + ExtendSize + Width = xDistance + maxWidth + ExtendSize, + Height = yDistance + maxHeight + ExtendSize }; - - //gets the element that reaches the lowest point inside the annotation - var lowestElement = groupModels.Aggregate((element1, element2) => (element1.Y + element1.Height) > (element2.Y + element2.Height) ? element1 : element2); - - //If the last model is Node, then increase the height so that - //node border does not overlap with the group - if (lowestElement is NodeModel) region.Height += ExtendYHeight; - + this.X = region.X; this.Y = region.Y; this.Width = Math.Max(region.Width, TextMaxWidth + ExtendSize); this.Height = region.Height; + //Calculate the boundary if there is any overlap + ModelBase overlap = null; + foreach (var nodesList in Nodes) + { + if (!region.Contains(nodesList.Rect)) + { + overlap = nodesList; + if (overlap.Rect.Top < this.X || + overlap.Rect.Bottom > region.Bottom) //Overlap in height - increase the region height + { + if (overlap.Rect.Bottom - region.Bottom > 0) + { + this.Height += overlap.Rect.Bottom - region.Bottom + ExtendSize + ExtendYHeight; + } + region.Height = this.Height; + } + if (overlap.Rect.Left < this.Y || + overlap.Rect.Right > region.Right) //Overlap in width - increase the region width + { + if (overlap.Rect.Right - region.Right > 0) + { + this.Width += overlap.Rect.Right - region.Right + ExtendSize; + } + region.Width = this.Width; + } + } + } + //Initial Height is to store the Actual height of the group. //that is the height should be the initial height without the textblock height. if (this.InitialHeight <= 0.0) @@ -333,7 +358,20 @@ internal void UpdateBoundaryFromSelection() /// Group the Models based on Height and Width /// /// the width and height of the last model + private Tuple CalculateWidthAndHeight() + { + var xgroup = Nodes.OrderBy(x => x.X).ToList(); + var ygroup = Nodes.OrderBy(x => x.Y).ToList(); + double yheight = ygroup.Last().Height; + + //If the last model is Node, then increase the height so that + //node border does not overlap with the group + if (ygroup.Last() is NodeModel) + yheight = yheight + ExtendYHeight; + return Tuple.Create(xgroup.Last().Width, yheight); + } + #region Serialization/Deserialization Methods protected override bool UpdateValueCore(UpdateValueParams updateValueParams) From 555a01c163865aab07a08b8f9842cfb1d20ec9f0 Mon Sep 17 00:00:00 2001 From: Michael Kirschner Date: Thu, 9 Jul 2020 15:58:37 -0400 Subject: [PATCH 7/7] Update PerformanceTestHelper.cs (#10872) remove DSIronPython from default load as extension now loads it. --- .../Performance/DynamoPerformanceTests/PerformanceTestHelper.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/Performance/DynamoPerformanceTests/PerformanceTestHelper.cs b/tools/Performance/DynamoPerformanceTests/PerformanceTestHelper.cs index 40d732e44f0..defeabb8154 100644 --- a/tools/Performance/DynamoPerformanceTests/PerformanceTestHelper.cs +++ b/tools/Performance/DynamoPerformanceTests/PerformanceTestHelper.cs @@ -25,7 +25,6 @@ public static List getDynamoDefaultLibs() "DesignScriptBuiltin.dll", "DSCoreNodes.dll", "DSOffice.dll", - "DSIronPython.dll", "FunctionObject.ds", "BuiltIn.ds", "DynamoConversions.dll",