From 706660a50370b5db722f055b988d4decabf1defb Mon Sep 17 00:00:00 2001 From: James Cherry Date: Fri, 10 Jun 2022 09:39:49 -0700 Subject: [PATCH] write_timing_model setup/hold search Signed-off-by: James Cherry --- doc/OpenSTA.odt | Bin 76852 -> 76963 bytes include/sta/Search.hh | 4 + search/MakeTimingModel.cc | 208 +++++++++++++++++++++++++++----------- search/Search.cc | 44 +++++--- tcl/Search.tcl | 17 +++- 5 files changed, 193 insertions(+), 80 deletions(-) diff --git a/doc/OpenSTA.odt b/doc/OpenSTA.odt index 0b0f31741a424bb964eaf12e93b950726aeedc01..b453fa0f44ac775974854e46e00586b9d4364419 100644 GIT binary patch delta 50814 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 BreOd8 delta 50775 zcmZ5{1ymhN(=86c-QC^Y-Q6J&ELd=NCb&BUhv4q+?(QzZo!}0S``z#V*L&}*wa@h0 zySk=kx_he5%$&Rxi27v+1Z6pJ2y_q-7!Z)3h$C?bvf%%0bn$>S+YDx8pGz&`Rjq12 z(-wmpp26G!lsUl}~H^I#yHQ4wHYK@^sud-j`>Phe{4#X8&+bFrQ_PzN{fBqFD% z5MtJiPi(cUYK+;r)?uh^Ln%dLq0Q?AoC;I=wKriWero_*#EdO}#NE}wS!A&;+nh6Q z1T5Z~MVUmQNSUpYlB9@Aeip(waQ0^NKsi^mWOfixYkx;}=f1UX9}ppAa*C8X_+nvr z7tVQ_8Y+X08*BN>^>Qe8H!D z$1G0II++OYpQvj!>+UWS_P=;>9B{*}eDV9;AM-kmwB=2F>v^+(adtNMwD0&QL-^uH zMJE`CMO@M!#^t1a(tL^nzF)s&(q@kN{5DRs)Z=v3v`hK*2;R;qOYQn2U z+g4eSHA$w3-sl-e%1@hcXD`)H9&xhr@t4P}Q%R5o5 z@Lvwn>|%*9qHloMaB#(#I6jEiZ>J8eddlU5Iz)7ZdRacTwt-DNWevkF!_BzKej(<3 zi4TPW-t~4%;efAp3qktFAIN}M*iWa5lMj@&Nqp;@50ZL6F$U{>MZo69Z{6PNjM3As z?(2eX|Ek6{nzvmJOF~gsh}A>hEHtTi;keQD8Aqa3)0*JzT!94B+d?>zvK%yw-q30E z3K$3o8Z-#VziR*n2IikNpbqlSC&3XM2T;+%gw%llbBiURq+Cm8>@hYuFhI( zs^$~^!MT#~UE=*M^9$TkM7hQ<57l31@~o*(ovAY1AJ>V+0aDe9xIQX8@Am3EAOxw} zC&v=|w(~r%dQXl|OD(DL-yx!w#dW||iFp4KhBSkF>$gdMzZKtsOI<)9%Wy_uKn3g( zh&be7J@0gPpN=Gz8@;dd^L?9($J>?g7EZhcKbVD{4A1I4^{ST2{;Vx1n~ZxBk9?b? zhp!|c$ka^EUdrn$YEq;(Fip{Z|6rTTP-oO~)n@p(<~JC-p31q6jkQ6%9?Cz<^;fgy zmrbdv&|JCS{MdR5+fB#pAI?u&-~xQ(cDP25EcdUQ-&lXDQ+#xbom;uLBw9LYc($DlVPhi_j?98OPn}k?$HN^Qq(*LaJhp*q zJ3c!3#o+|aMHx(bjFz*WK0riCDv-z5T@`+e5P_&u0bIJ6~pAyCV zC~6D)FqLN&HA?s8Vp~l1FSM#*PPM~JqVQyEf1v0v9q-%Rc`4B6CA}WB&3?JMimtnC zC7}-G?!*hUGkge-ozT zeOC7tbK1Q}3^_s5*U8PV}~VZ2&q`%a!|FU=z* zg+W*~6294~B1c-7Xl02Bx$fIGa#mHzH+0%jbz%mn4x4JZz3?{nL6GOKD&rzeIZ>AmB!MVjF$tav2{|P zwGuAlNA@{H;j7ZB{sSXY^_&seBTFMl zeuOj_3+nr-@{|zLG{5vDd9~0N*6Y-L5;N1l2lT`y$}hx&Is1w+451;v%_I`=J^jUy zun@bp9Z&K9mVD_CqVlV5{?RMsaeA?X0#$<#))wBKbrA&sWP?trmZ4+Hf17ZeEMWf5 zV3wQ)L{;YtxAOAsR;Q{KLx`%1^T4XDJ`;$yPoC)t6UhJJPhc$#haR;4Wt78OnVm6z z!gqh(SGh~uZO%ly>vj*lI*i#|R`w0IR-M$jM`RwaKWG%K&-F;5b@T^z2IR``<5jlx zhEQGz4})i5b4NL%92eFu+OV0mY0!ij`3s7#p z+d9rr(cO;R_{|UopZT1=DPktZwN7WC@}iYWJbi%!)KYJCICwL391o)Fqu0~Oe366G za-KTRmU6ku*Dxw0!kTxF&6%dqir;z@ga!YIl0HH%di(V5houz#Snq~-=3`Hda<$7f zd6Hqs{kYCetZA9WqEYqZ7}1PhACfHBycsXydFF;yOROdxzg!iS>Q;V7tgE4-l{j&x zW3>qelwOvSxC%FC5@`$IOd!fJPmugnWrviize$R+5K%=Ur{3rR9(AO`E^{i+JwdDb zZVZFfio)7$WMp*tx#j%zuPr}8>G{~{k(d|f8}qX(56&VEQ$nJvFGkO{7Q9l6<_fIb zA?}ojx$i0b7+h@ET!fgP#g>}0kB80m%%z@y@0Ml9wRHO@f8tepqB>JECJ`C9;Z4$} zC!eDH{Zi+Wh!FkZN~i`#VB*zl@HJhkxeF5-E5DJh4#y$^46d8C3@p7kkV@qpKI8D7 zw37lmQ1)XHc0GwAIB%itbE1F03zg_@Fylm4wkV>`Sp0I7Zw%ahiZhx+>Zpb<+EuUB z{?OYrxjb%Ujn1poc@P**MG==?+q83F%uGSsTKeK__loBe@cTV^I4!jU8^(SgDzY{Nr9{|{LK$MsL~nIHm3 zl8^$22>suDoS+A<{vVzQp7Vcg58*ie!+knRxP?Xk-+uIPsQ+y<{ZIe8Q+R&Rf5iby20io>4s(CnpV2%PrZ! zc+F+`G2aq0{ZyNS}@^54k;nQ787)_?A(<Hd`Zw zWgs{g@jW+mLgM({I@ETx)44C{81NMuf2fbxvF177#{Ey=d!W1NS1U+lBw@oMkLI)L0UUBD%Q?iKH1D#$1`{|k9)nMk@Z&}ZIJ?`!JZJq4E z+a0?=Z%s{5AF@RdwBc^^!fHFiX#O`|v_(;i*27bzWGQupR5=Ci|-@@uFa~ zxp+E~0(TwV;fp+%jy}-we}iJ3jZOXnvzYEA@&sgHR%gOT$fyr$Wtrh<9ZI@rA;@2Q zsFr6(Tb7iqZm~rIr0-DtUe_|R!bLz|a1;_vIGvH5v8mv~ZiKvQ@4wwG2k(PIS8Xzs!Vy65yImHZXgObqovo>i!;%LK zs{tWvQ9ifr4^-c*co+#Gy;Vmnn8%(A%H80jkWSC~awB@aC(=IagFJNKG4$q8PIB>} z@b>?yr0xYlFQ}ed-A1P5(4Pqcu({~qiwV&;B4!4x&|?Y3@KLA8mRtDsc&_fO=o-PC z>D8mN(Vs7}kqOITY>ev3yrA>#vdXl}W2;gfl$?aOZ36taPBc_-^tO>_jZfVzF>ram4q}MZhw)|nJ6RzrNB(H=eNbR zjs%&z4(whf!AGy~JTxme?FKNa&CG>I+ zl@F>>q}uIMP>^M`f3f7X6F230S#jHrfXYjkyQ6lQ^t5#rJw+!XR}jk?!)~W>Js7tY z?TlFY-NZ8cw}1*Kbm-bLR_=CCfqRr=Y|cT$t@XQ4t7r4bbK*5&oL+fhmYpw?Mg+upjFlJ&2{0F-Nvnl zmx4hemyg3~A=9eWb8Y+a*jFx}m2Y!e`w9jdt;c2eX@Z2AfR0oQqoubWY3C0Df!6#h z4Dg#7LroyHhb@VTectHG_`ZVPDeaqG<~3au>6l5b`ax~6bpCi+e)}Z-SApg*?P@i> zCMfsG0FGm&;^`~fy!hwHW*C_`*~tl z1DLXG;X&IxU_?33xFdHw>gfPB|A)TKoRc47-q7iA9_3TN zb#amqMB`#eSL2R!Wmk33O0uYP$$pNI-!khm>?cec0`bCLtXEUoS=S?ZfL+O~-$<y zYl?bzgK06ImG0^6Y0p`yRso*4iRcf@EHxc(J-g3yf8QzHkTtbHXJj}x}uDW+MU}YROMABun`Wtfz04_lhjdOMvuyYIfgD11iqS}tF#GhO= z*7`bznHxAJ%#~ zg>=->`T3RhGpUK`ZN1Jc>3CYj+pq@f(#@g^dn@TvSG=fjU9$*h1l+N2ot|E@NK|k@ zkhKyGPx)Ax3fo+mzxFW!(i2&^APfZ`UIQ0Z8{c_b`II|-l`%hh3)6T0@OS6DI#q?2 zQ;BbCNqe5n+p6kUx*%40o-ewN``7F*16c9HHEB2IBBApdQX;sWo#I=~dVKAfoNcic z*1JTuE_n@cr)3F}mzD3xUWDj{Mg-?Tocnk_6q^~vjslaDdkev3t(;wLv1GkWX2tS{ zC+PR$S)32E=RTKvEbB}N_>nPoB~Iyd&t$WKZL`aaE$B7AC2Kzps9XJw-DiP&z;@67 z`Ft`p^~Hm(F6zss(0Bor zvnb{!tu2q@t9aQfF=>gPYmbP)Y)c!Wc*S?vVW8kRUy)J6V2r#-c8NUGsywYLzqAMs zl_Fb%cc$zwZ)Jo~bs|Q-wJvRrh2HzZ>_X9(Z4a2I{kM3yjY>Jq3(S!ao^XNOxTzrY zR$&J&wc8qF-OYhoq=;gHlk!1?E?gInnLF|U91~Z8k~l7}hEBn+^W5Bk_Fb^*Io%Jg zE{R0aQf}IDWShN)uNBaByS!BWTcG*jWL@yHlHaHnIrG_GhlFW`OWjp)1M1_J@*5D2 zU-w+nF7Z_dEUlp|$*KS=yxINw=9v3Q5{-;fvslh+-L^&&eFjP>6;PFdKNi6jWOk=k zSTih7^ywn%!s=JJqQMr@WK1O1cr$5V-Q8f109HCQX+Z8w()Tq~E=g?M=~neBi#pwx z7xq`zBFlqu%T(11$2GdSYF*PPMt`a19UBk)nb@l2J*1~jodcc@430=y?xiON2*}D0 z(Er{=`foK`w@XH#_@Am1+!6Rs`I!*pBn3za!y~6A<>97oir5uXJ-y<)!N3rAgF+(> zH)Lv>g81@b2|e6|e7spUEo6lru2tULCHZ;*1t>#~T8%f4cMI7<-T+(I^OoIvmr(O* zgH2qOW~IwA3RQEB9@Xy;tvmz1cdcKSG5%FmoFdg9Cl?n_PfzzA&ZnL+ZbZH<0f0Fd z=o9+7{#6rE$HI^FyG92<07Cm_%;gGfZvH zCGfjXYE>Suy=z6ckiBd9-6geADFW`V1_N8~uzrKSekEhR2$zFh8>u~%hmnVFKrYgi z5b(_6y~T4z7^>yU2~tYbZY^Wn!nsoU2y=@T{oNY-+ER%hPm;OGprz8Q?uKR=Y^UX= z%GiL)RT!-9%yWC=vFU4aF7?NC{g8T*3 z?dOH9e-D}!T=Ohse{%pDcigW- zE2iYfA)RmD_jl$~h5UQNOk-e230)mJZMU0i=f{3o(*)JCO8bx4f4$ur1Wiq;+Lr-O z`Y0Zy7@jiYG3uDdW{cOX4?arF$jZ$?R**KA*S4b&jwDFi#X<>NO`w1E+3vkNmgiZ= z1nAo{Fz6_NX`xun)*I@WJzDKsa=pLbKP}rz^;-JyIU~65OZtV4y4m4DjwqlNp3CPZ z!B2HHx`{~dnOt$M^xefptD1Od#Ui>JRBgCGzSDdeJZ; zE0ZreAhz^FvjGM}k3c(S_hs&^uKMiZwj(8<<~;z{gqY8_3lN6q2|?p0)*jnuC65_Cz9N1?Q772uUEpQ^;T zV@2m?>*mo*_OZba;Vd{>YHOb%UE2SV1(J$bB6V}Mz$U=)3j5KzqUM+G?x(=j@9W#B zWq6aaIayQ()F>c1pZhkjbx5tXti*F@6kj9=L0t&mtp(sg81D9Dr%Kw|o=eek^dbML z6+ZvHdWjGUb{pn~#=lL|)0x7L*EmEZeuU+tvWIO;2Znes8oWxI}h^W@K{=S%}w zd(-T$jaUnoR3};wZ@FLGjPM>YT}ddz_>zBDGJ2K<{1LEg$It7Yb|L~O%poyXY?WgC z-<@lNJ6enz7m+In^OWkNK9pj*&`D{1 z=^IBJE=#P+5nZAdaw;8`<~az#TogQ&^wC_3t#T1v6j}=_N05uHR=rNrO2zcmKG{_c z7X<)XM8C-n;Y)gX{V$J88lOtUf~kd^TaTqgK_ak%DU94(iBC2Mv4Ckl=T>4Vu@f7t zfC)X<*=OEMbxG=EnpZ!9wO?^*w!y}Y9l|k0zf|n+Hb|uXvD00H{aM8>M`M_+s zfcJJ2*lntez5A*){955=`>_aZ1hVvE2Y@bNu=;)4ci&A$Z9fy2Z$FoRkaMbq_M5@R zEtfl?rXvLOqsQyMC|$s+w2Ag_@>C%C&ue@JunttQZshUKBSxqMZyK@aZ(Zz)xFvJkya;?5^V@OXXxT+-2N!tSP=nq%=1PFxmgV6JhP;2?VTqmV~dmTX{yRp7y@vMS$s@fIj&*Ont zFO_|-)*3P1>KO6G=JZO6yw7_-{2hfpDuPFo7{GbL4{gI9iqGCUhVKYeQSZgr4yoze zDGx()7x%?IXB#rBQui6=D~IlC@0~G<6@wPVBKzh&~gQfYS_XDm9ArFYPGOHsq7CbmyAZu0B`|0u|Yk`!@Y*iwnofQMn=r) zvs+Q`$?GiWv@Iso>W;wBQTtvrOK3b_ux!%dox_KIuyf3bGC#c}PJGCKGXX9)Vc;5a zQwj3IgF#f0mwMO8IGN`Aob0!slielo{0;etz_kRi<6%pLOLbW269QZ(>wH|e zfljvbAH?@@q9SKxLH^59nb0*cP$>O^Ah2qo-RQYhlOtBh^98Z(r4I%|3mCJ2l1tF7 zT8Gn{I#Hl+DP2MKy^yhYzHW0dzrDk&KQ-^(WY8<(nMvv}LUMk7@ceD8xJ}Y(@w?%0Rx5egqUYjvEmNfj{6kXf9l%Xv0@9LM$sKuTD$AatzFli09-dgo(;fB}^tLQU*x#rWUIsM>9%ZY5q!hFKSUjmvzdf zPCO7i=4Z5E4Q>7%ChH)Q@IC~ofF2H)Mvace{=b5%g9x}i$r0@nvU5@fjOW8Q2;dED z119xSW4RHY@i%7G9JFE2yaub$3GE8=-9=Q&Gjn-LtE$z0kOOsdCDddJglh<)P8woJb&!(#s`I2JPOzaJ|6EKcEQ=S--A98nC)sCko_&|ODAeriTLGP%w9Gv z`iPJQbv&@@LH^;49QUf0MEX?p_7I?e;rNMbe+51_e+B42;OV7%VClD80|KfO^ zTo5Nv#yeMaAECqdB>K95%Q?x>&DnB<4

}Xv6&S2DjXOKonL#_~m9$zSxDL0oVB0Wczlz*)A0WNJ03mH3!4ojTr zLMY6OCk}EfUjQ$`PAJ=y?K)l$t)9rG{vP*mHE@a^vE1G z^%F@s*)F!fvk`g)k=n*-2$n!QmJq*bWp7eIR%x}WnL<`6nf<#uFPf6 zw~RC?4X7Psux1samzmIYlTaw*ynq@_iVNqZP{(JgduS286}-&YJPi2#&?0;L?em$Q zkEa$jj}0XqPeu6qribIIHS&lhTT=X-nM*|b)Wu=xTw6ZrC0s{uCT-cU7l!9$`|yi3 zvc#r2Erv(-5@MCwyKnZ`m#Xyj2!l%}o*9=snSugm`STkQh@}Y)*vj-J1fbG{#7tJL zt$h1wKs{rS9CAvlhJ2h4sWKgjwAr>&)qbP>qsPT5$p7>J7IJCg{}Ej6GoNoOl}mPY-A%mL^_^^trUCTWu?qoj2P5SD@&c`j1e|ex|4Ctp6D>z~5>s z7<$y|@j#(Qn z^AM^gUx=7^lhK%T!@BnZBQ!~?C-Wo@141z~mk^d)LBJBwsx>~9ek+YnrLW;20A@+| zR!H;*NePHf5_eEgIoNj$R)7#Qb4Z#23WcmenMU%5N*hS(KLaIM`Z-Xv%(_9Fd@*sl z@T8JIa#SPdb3e|Vv0w+J8PGo;Cm-=k{$L5kE|K`K@?}7WmD8o3?{S^+(4I9$Hj;^W zmjYuz4~NjDM*mWO#E)vh5-R;WNH$LR{}+J&DlUzfZ%Cg$)I&^ilnJ6G4*g^zL?9>` z)M4d6gJ!nOQBF7tDsT1t=QK~}4-ktcVA3uue7zM?{5+n@Zxo)%8d_Db9d3j)4cOxO z^P&ZunQ}?&VU*1FFW&}#buBriSQ)xoXIhVSV z7m>jDKb#o3&+pI)pPKkxZSM%JiqGNIcbE(kWuFf?{eRfcx!>wP;H+pK0JGO?L+jjj z-?fghkteHOrQAcOEq|yk6uQj%*7?z6>KsEmlPdbhv^r(-*cutstXUz*cIiDN!%0V4fhJ|z9W9Wwsq12g_`F64OnfNav}Q(Pui#=FU0 zZt@i%_3;&ysb2~&L2uK|X{&fUig?kGkcr1s&=yafON9z$5)lh>XT_lvIa#N z{*%H#HK0}Y&B)mYB#Tc!{;(2vVeEQcBlr12!0nlt->p?Oi|;=Y#Z+cx{GsCIrc)78 zpHmUtehc1%P(kE{3P~vuU7|Wv#BtimP=GXDpG~RQ-80DRU90T7r#=PHvDwk}jVQS5 zo7Sj76;iiBRoPzElE(GY>B8IH8Om!jNhA<|yEXu$l+P2*3~wN~VTLGX5%W-rp~&1e z;mTU?NxXtNrI{RS<7?^iWkuDfOm4U{SNCgg{Rc);A*_aa8m+pD<*J87!7(u{Z4aYU zaeKsR(FcUmLown&pK&6I$LENo{Ur`1Y$}PJ<^d^ds*GRwsx@*_;bwQY7-Dp{m;}^% z;(-?zniZ=nOemM6rOo(oaF}2(%)=Lymf(O7Yq9L@l|`D@c|eLLBvi5LuE)?a6grg> zNp^;_{Deml(+m#%2H8Mi8mcU;t}B1&%o+JfmcXN!fZ&h@=flUX_+W@8B$CvoXvCGY zO(C-c$B`IQCy^M#6N~l7CXldZ0rF)QvyQCdgRPZXpAOW8{%;4epH4m@`G7+@$jmAZ zU%)CJ{ClxX{DwBp`vF}D-d`(p^OSGI%w*tLpMofr9c#r~)s%r??u8lud-YgG%HjR7 zkNVdntP8Lg!WF^Z&NDs^eRuJ_=+s4{?XwB*ng@a_vn#PhOvEI`ADp)C9XyM={7Bx9`zk+RDIYIZ8E-bzB4o=C9%VYlA= z5tKd%#Gi0#$+Sxfep5~i4B#uPpNRzTc#S>CAnR4w1R3fi%0GE z=7Y2vS*iD1yq}qT)r^*IwNTclW%B$6m=jq(bjfp-;o2u#JtABnVf|blEHnu*2oz_rOa{|#9FOYcJOlzo+f_Y50E7a_L0>Z6)wO7 zr%w7o?L5_IJfGv4cau)&#|Bc$HQ#y)txW5ZtBgxcFG*0E?VJS@-i-sYpp*#ECV2|| zY-QFxf+}@-I^@Tb+vX3$3=gDx~Ivn`E%9k+|T9pzZ>{b#X z{6>C~mL$0zb*9Wi_Auo=?L>aEzz!Og0;g8vj*ml^IJVA>fM)G6{yx2;mmMyp(D!-G zsT0|gIDQ7%lhmhZQPBcqZ0FmO@$USFqu!=KbG_7$1ry>R)t>}U`4M0~W9P*~+7`r< z`}`3%v!XreqZu_hxUprv>$h(H7UQ>6keHG0%vm`Lt{^)hBWo_1bYZ`Nl{p`x;-dN) zT*GH@_}->1D*ySedEtJXA>P@(Q~9u}o&M)i%34~h4iwf+j@1&|2Me2nhbrQXgesQE zo3rMs(az~S%+TZ+i5EpeZx<2DU8`x;1q@%QY1IcfUltJ}^(yIq6`<2fNx!@ZzS#Rl zv_v9u@4tnQF{-ios1{>w7jGANFjsT+uw#`ZmKRZH#Zh=OP~5BAc5%vrJW=)0!G1)D z(Mlu53bb0P|B~jjEAs2c0n0=nzHuifyJ=?492w@XlsDfnCyWV>^U!P48i$-tO*CUk z;t)zYDt~chd1ihdIFhu9>7i~rAzQdIoAZ8~nogSiIN}-3892Uef9K+IR>_22q@{Xv zY~-#2nY?vK8gNw@9c0cxZNRJ6>rEh)L3nrQ>wL~@^9=ii?Gr0GQgI%e zj^Ibu$pQ`wIw#emV-Oh>Z@5_yT{@s48Tw`oosJjc4cpK1qA$C|ROfdonA+wOdFk37 z0;rQaqzZV8sWiDb%Y=oUXSqHF6{^oM{^cF0j>~lKe|5hRUaXWd)QKULr$`c87;j7y z-bu8`LnU#{QUU~4?pG1CZts!^l*5L@8&L#WSbWx;a}W1p$T5x=cpIGSE}dmEn)I}fi)f|PWaN*2HJhv*0$7D!f30`ItlQ%4uLPMhla4FC=Zd4Hmyx^F z|GZE*tBB8t2g`^|(m<8xm7u|RRHA4plGC%O}+AK$R4g^baYJWXD#?U;n0!U zG9lEuemJvo#RZ|LpfSSmF`XufpBE3WCA&b4a)|RD{?e3*kqI4b?s&_R8q(b%1Mq)K z|7swf%u4&!;@9Atqm7rZvSL}OZIhR|I%@l99FzX$foT^>G|n<3WJn9xT>3sCKKt5+ z^?4>iMv`pb)N!Jpo1t0fV=UoHDth7KVB{c&D$_aA`@wBeg&dV!yTp=7s#h0SA|EGm z63Kq+QeI9e^^yP;*NJxd&&fYPB+wV@-J|U1Bg^VuV8TWT2H&RQs=syb0?X;v(a5mV zYHNL&Wmk1H`gy;k(LE)iyed9F$tQDI--6&zA-fEF>z=cXL8|(zyyy}J*&OQEu!L*2 z!-SUlNrPg=vt!iq3Nd@uRC!3fzROu2s0t~ka4@9#@Ma~4hhFJCn-qImIv(i-@Ek;6|MU8LD zEMv2T^5xPswe19L8=4cGzeTJk*!4c#lVoZwt>mT$O06X9gx}uyB zrBZD&bnGVX@=r%bw3QN|#*uIYxFD2s^1UPsd5j;_b~g!)WMzkT8`=!7&?;TPgW-4w zHlW?wP*){U>(sKdcQ`tUt7U4e>SVl;+YS`90snn2AiY3rGu*I?BXcO=Nm}R|+dd2# zIREqhLszIgz4xDtOh8)@54BV0dwG*eEmmiGpzFNf_YA~{QgKUCHqJbL4yC2z<@|6s zHIP!{rG&qliONBlTm<%H zjlTf$H7eBQUo?Tv#$2l{G7HKBtgB{l*2SDC=FVuCGv98+-2oX?U&(@Tr?Ls*>pS>S z$}i*8u56}y><|6uVGYl*GfUF;l08S2NI03ckmmRm6J98baWki)pX6f^63zw^q&Ygg z!E>xiiq1cFd7pL&5T6v`XV+83Pii?E2}fi9)9N;}ok}w{ZLUaY^`gf2%Lm^?@yO_) zD1c?uuJi~>XSu@$30Ic>ciZcY_I@pI#3a(VOku*gHIA>*Jo0fP^|sVR6xt_7$lYFx zX@7vKyd zn~V3bGDA4L=+h~%Vm2sy-G?DJS@q^wN3!;2cl#lTGAgSF{eIl+OwIQg73E(P?CkVF zxxT!C_saO1pkO?s2HA<|HT{<*1M%rQv^n$+TG3D|(h%$xH3zDE!sBdt$mHhZeAr{c~Ns3;Gve~K#y>? z9}YSL#a`&L4GkEUd7|uSSBP;e?i1Y87i1-nM>P_!xnC#fRGgWa`x$HP1Xz7wRIwpw zszo9RE-ZM|Z%%=FguFs67=rYRJ}3)Gx7C}=K?WKui? zIx$mn0MfqgDvhrhtvw9(a|8UUqsrsJjCW5zp3xh+a z4vdG~%#~4x=cFY20xRsz z33LcSIE$!T%-b$o0L+MQ>#okS_L75cXTOurevaW&5C1?%^p;991!FIcbrnuy{5|CL zoAPzKD`Jwoy79{neVADyt~M>i!e;UKNH<(F+78-wCJ`g@Ollp~Pdr16X$J7EihIl! z+2@gl`}eg=4qAV({ij5quVEx|O!w}F8MNMGbq}Bv+??4`(txz(Eyh$1DX#4S(S_~p zOV=DV#=4(+9qDh_8KyuP60Ju4IF5l3Q|{xs0!SvW^PW+W!`N8cW$3@Yc4L%NHQbmpoQgklxegzY2w7*MDKHw_D$d}c1}u)yq2n_7F}{S+;s@C3p1-%u+f zbCsfn8Km&>eF2&DUj066vv^~+)hXpOl8hcD1wa1o`%sML+frJAKRlY68g)=K`yqMl z>gB3+&L;pV(^O?s`0?y*aLir{0VK^v)syhl%Shp4W9vevTON2zWsj;N^3L`$z!ST3 zwOk5%0`M#=9sK%veZZpfgh!am99uUJ@xY%s^$B za2UZ9>9&OEXO_K7ut=n=jsXY+KCYHsap1UnQFg`FMkZrhQj~m393#iw#z+_yz@x-a z6AvN53qV`2-WmojoJ1x>e#ah-Ld@zT_oQuBpo`Zc&nlh$9TaC9nz~PDSw4C?MNuxh zFUgF6Um60IBR1ZdWuzb?3|U`Z{MeXO91D%46-cR9#JWxUC5qkP>X;fB=a2}Q*we`^ zhHFgDGC>hmf-EC1A!AG{j;clypVFv^O6XCavnp{Tu42d3mnAy1yMXs<{e_9V zG4W6E3r6y#xu8y}U(5QM;=LND)P>0$;86ZL6p4JDorhX;8wMU+L>2#ps3Q2!t(~$fLd>=b?F+0FSg&lz( z&D$#OkasPuJ}=NFKn&lK@djf^;DZ@cIo_t)al_|+FQ&hzIT_=D%B;!A2R?bECchgVN4J~G8Wpc@Tt|lOv zd2LKV_r&-2&TB#kuQL7~)89~^cb*MC_SkN_W|U|ONnXa}i(UgAGr&F3ER?0pTHGBO zL5uU=b zJfllNPNJ9-?9VTngFtN~vgF?>Ry_(n=yTFPC37B|68sX7u|J_}6hfs@#%YfdBxiy$ z5>Fo6wu>d`U1Mxl{=zF5ikS}37b|3eYx$7>!sSApjKT|}7>eqz-IY9-)u=h!8EnaV z?NBa=IuwB$W%O@ELm5pANqNuTQ+sOE1(vHHV=@EeC_^;_cw{F3!L`) z`x_%ps&!G=xinTGoqeSyWCMR%`BeQ0ER=Rnv`(QzT>Kv60I2h?yJArC@7+d-h2m3w zJF&b&Ms3jZEDlhMB_54av{4m3+E~kctmwZ*V%KC9q90r#DORm*?GWi){;pFr6-&z9 zXL6%gXX#lz&H4dghSAa}0*G`|zNCm#8fAmRrnL1>Ckpu~tV&-ZLZkY1q!kWAz5nLv zwMWYDv6Xdr_O&BKbqndk##KbW>xpYCH9{-wp*a_HEIdwmXB3C7;ED~A3_b;IL^Yx< zGXCYK?#rtYTT8!niXnaw&_wa%Hk^^PpH34o)Wze(T%-l$L%v32?y{J(`e0vu%~)82 zNC)#l$T5GeK?~55FyjQJL#BBgtnCKjidSkXe@k+=b>{fPgy)2pz$of~3|>m+T$lIg za!}{brhsrUbm`SGoWGTc%$E3n+`|*9LFyara!0wiY?iw6T5IIh{N#J9FcP&b3dKgCg z0~uJuOIwb(^rJ4fOu6IM&+z*;+EtbSAB?oe_-m|2q^t@5P)sz6-w(%W@U)W$cw^`x z#6Db7_+ID-8T_<dKEtEB4|>a=IjHMqKVgiqT$^h%PL82tkEx+GD1JEy+)>FsR)HQ z6u3WFmLj_bPT&f|VSllYA1wWt9SG+*?p;W8u5nao)$X9|*zi}tH>M(?nScwLb#u{} znba`^q}jfwaoXk26BNm9rXsh6GA7LDH*j8^A`qo5NyYu>j#OG`S8$z@W#s@Ky|&n}gP#5gWS*QkG&F?}DzLKJ(cTzXAw!G2OTT9C0m1Yha5I$}oZ z8JqR2X{;6C8wyJk(qGHjvDZvM)ifElBUB*=cs=Yb0Fx?;zv%dl8i(pP?FGXG6hp97 zj6Qb*ZYn->Eu9ew)rLC1)EbO1(JIvgSJsB@{eR)lfs%yu#V`o4XE{k=+mOm5pVOsa zrS^V*sD8GGMXM)=vW4(V0i{>ZVIsnf>Ss+xuh;NrpQcCyE7ME*;<#ZapKZ||3cWV~ z^ur={?1aQ}=E3?iH%{=l#an6Rg9o#qw3eejI`$I_-R4qat1uy3I+S9&A|2SNKu>bp znbG-BpFGEvoZN${(m=L&8NP+leYkWdRXjX^8PkjjKOpy6{Zdw03~Q!>*64>DW$?*BNe= zTF)kq-mMOiN4FfP*Vv;_^@mPJu3@5fSLUd0#Nb~Jr7RHtYp56+Xd(XxXX>@4swSHg zKWK*8!k#(PL=QDaKP)%Fwt>k15$5wnvEH8og1G(6I*sN8#J+<<+UdnR0fXM2K)Zv* zDE%L}0d5Dk#|F$NGo$JJF(+t^d1B%hzmWC6!W8f)o)5b*DxE}d^G0{Nq9cgk0^NFZ z@>Fz|iN#aS*QrpgxF*hXzk23I->F&?F>HS4!NhHmr3-`^@cH${nZ_U&J=1Q)F3&ew zxysn>XYnLMJ!fMhbT(>AAlvX76cE!kCh3X1UlQ1SKWu;qQ;Ut!4>G!4=)-*iz4ALq z2b&%?NdUCUjz6?KhXlt+*iOOb^4fTL`r*85HpGK&%Ysnb# zh;RB=Z!6W|L0GonSnbbZ-e5J<=oX4r{+PJ04?6H9bUPBk`o%Cb(UXwxEIWO{~es@Q#8|L+&ZHa4Hdl9#W`YV@%XO3wIh59`{q~ zgo(UI52$!eBo)m1tAn)gHoN)Z@K`B{DNBGwm$R1Ois%X=tz`9Mq&)kiqeiB|2hu?B zg;QZTHYnwjLcKF>?y`MNI)HS6wgZV5n0S2rf?NGf(C}>o{*1$0Z&4CYcd#z{3dM}T zq~T9lyy(cTWq*Be(t#QR*J#wivD-%m%v{cJ)Hng&2K3KUtMFM?(oK_|=~m7UyojGe zMr_YD*`Xi&j<{2#iOC%ILoBVf5k!}=}jUcnRZW;tNP9!A|5aE@w z5|ca-^X2-cUrtcPxDLcIGz;TMM$u;s{>q?6Zs#ftYK~4%NYbc z={LL7aIUx76WQvQqckxt@+#W>9{`m=YQMJ?w{`G5Dm^V(#(eX)p!D5b)vTqJvGFpK z)+vrvh05-V2x68`5Hm4?mL>9j+1EUQ=MK!8hV*btaEdu*|J>*z#BlTx}~+Dt|8F zQNV^8`E(J<_eskheCxvwBge+xb1mZg^wZrQY-R_K+;Q^@-*Soef3sy5gRW0jET(uo zY`}(VqQF~1K_i>hroRbwk|lt*bYAZVgYsJpw}^eP_lQMS1nX3>5?D}{I*dZYt?)y` zsy1|7*V(>k=6(;o+g*6s1~*f87 ziC7I9u?9!Dq*gE8Es<9qyq(Pml(hf##@udyt7GQM$RaNH(|7rYEYC?v&5x3i%mRWamc zEsa}XGF9N)CX2;r#F1ENf*qM|u<9M`hL{4AeH+j!baYVLQ&TrC%g{wbl*7 zA;GijK}@S1#A}e33Kuv-C!Ak`aq_smD7hlt$>6L&e|JWm7u4p(m3cv3UQn6nM3a}% zPgnj|fF4BKLmwwwwcdQp0929Ly z99kU9f9lxwjznD_Kk9~Ku-^1XL}oQ1fU(H3q_%g~i$uHm&d&N0dd#;>0sDr!%r^v; zw%g3B2b9TGF?(%k9p4^#5mYpY_z_Pd4_XoSj*DQGAt>3p-m#J~ieI7AbMKSY(mOay$Te+V zI+MPit2B;dzBo1$Ph}{oOZM}8Ppe#a9^AUO~hR{=C zgr0^7jVF+@l$XTwsTiJ5+r{&>O@CmSWJ`$YYu;m0b3?!0lq&w79XOKGPr`BT-h94+ zfBf>Ltid5sy~f~~*`C41a}ST3!V&pnkdE)3xu+Pw+qf zHT{R!*K|7iQFbabh4y}Fxd$gGE-4Dzf5BG^&xSawy=yx`$&sVi1*SMS_FoQ!aZd`? zWjIDo?mfm_3#6nJ&hKwc>m!_NaaDB+Fnqi0m<4r#a7+r*l4DXac=_OV>Y zkg9MDfIhwM_VU@L;;>SmZDs@Pf0b`0pr}0GJOjm7#u;6I7r;ERf<+RV_**R@6en)c z`BNuc<n)EK8z82@K$f^SbcpgF|+`{F< zgIhJSZS=~3CFEjJ)t?YB(1eOFmUrXy%qQac(E4SK<#2e=-LoBRphXiDe;bD@>trZ+ z9Qy=Bt2^xZLC14^R=DT#fi0tIRTJR-8EO)78e{MPN`vx0yu4Gz>Q(ANV3Bq+sd)TI z4qG^QTq%%N313&1|EwP%JMrQv3$mT-5h0LexhF3lWDszf@TV#RxA#YYLFXfclt=%h z@&*Eo{erR{D`VX=*)Q#wf9@V8KZcz>qod{}^CH3TR(lJ>|36_ha|0At#q-+M?xij4=N%C z$xe6cgJXqFq)ZF1d;Xryialb)?};}nc19Wb_xahXhFG?$A)Kvhe~4wP8e;j2M!VUn z05e!l^Kp;zHv++t8=H8hXKifD+-AnqY<#P90nQ2~OvX?K6ne4+$tHY)Q|9!ySle4@ zQzkrEVVKvay@b_z+>&M!$ z@xBGI5)xDZ*qH%*CrKt%4vdZSd<9_t&4#Ygf(wMoUDyQF)%e1R7Dw76$u=0V5%(sn+>}Z{(v7a&RfR78e7X@xJKN<>n;tl7s z09v{)@V{~&U8#*y>R}pXVxxa{>`xlLkF6}U$F2JiLW=DPdvUY=&$k-PSZBHq-~0&e z!Vg_#%h|`IfI(&LHA>&9-#%z(;&4PlEf1tDSi4^xdDVT7*H6M@tLQeS> zJBrfgxHI)I1q)(|SHu)7i78k-8J(R;#un-JgOc~k(i*Uel;+KP?O?l;qU34l?{lD<@fd|T3219)(f zTBf|rf0bg(MM4)ZYYoEI#(aVXRa8V^O~_WSBGUjwrgMNTYOpYxoCh7oEQ-0!i?2G*Yr)+4iX+;Cw|vf9_9NUFB9N| zHSogd9%kZ`BpO!Wit4zy?kRf$mLk=O(FCf5;t{=nVZH2TMsP!@I0d&4Qss&B6Y8+x ze=|x2C%C|*pKvrB$aZ2lWd_)ZH8tQXJ{98A@g`Cpt9ZEu0Q=EunpLARi5;(y&xZV| zkfA*MdGIwN0YVv-I3V)aR)zxYVt03r;CC6I1@)~&z(dX+V{K(vUQ)6hbgvQP#MYE0 zre8eRGk3*GUiS;$G37}aprI`GJ9F>)f4^t?9Q!xsG_!wl{f_^Rv-nH~WLjXzw!t90 zvVD9Re+aV(Ly6C1AA`=o2BR7yAC(fm6aU!qPexF|R2c@~3;Ixscsm_*xz6S3WyU|X zyc{EmPOYcmf%>tYEX55{%d59>bu!W>A581xv*|%?=4dG~aX+jt7fFF-J))!hfA**& zvF@lN;pV6#vEHa7u}+qwb~~eT^BvXkn!i`-?W9~`X5T${l&{LP;YGzcUM+Y{TJXfl zqE!oC4qi1y7;W0{z<`r!#A6S%t!u8jvEiwW11i|?8bFm+ZFn$Iheo_hN2s=pcnzRc zB_ke1k5|xVgFY!{C=dR88=mZ9e`d--S|JOb48UHF1y41^Xw8DxA=taL;I#_x#w~aa ziFU6RJh>LU4D(1kMz(AXRM^Z05_x4in=#7IJQ#^(9*l%D4@P2{2P3gq;Zf^$wypgj zs~Cv%&0IBD!r{CuJU*8NS)OeBSFL22xgRQ0b%UsUDb$~z%XyN2s}?Sdf7&z|pCSGF z0Is-`NK}kfs{olVEL6b+6?!vyruV{fL_mbV)!<(RD!{qCnD{x!N)S>FCFG@sHGl)X zN)1yD@@=JtHGl_4W*!p$k>10F#|xH(uVLNEJ9roWrG#FWNFvLWu+QX?#kb!`-hP7R zVLnuXwL)^!0~BQ@d*ZB)e^&C;@w2R_qOy?XuOZC}+5ffnys_yHS7dD-w#->r>U<-2 z&N6d`(iwL-e&g3fyxt|^y{8i5%Jf!+$#}*%-^wr+voef@tqfx^E5lgq+8K9ZWdM6m z^EZ$5yJf5_9&8bF6$X=tiJ zzAX){0X#@+Xh(V%(9rJSD}{BnQ#qxCs>U2&jjL*W6gGtQ_0^clgix8kA@wU>8aB?^ zleV@9vgk3y@F|I0{=Ay@s*hc+K6X~u$}fCkh!s9DgbSY-Vueo(u?#Jv{lX`dj3wM3 z()TgkN^;^Db*aK=e*^h}y%I)MgM3@UXajhV7Df}&ijtybS+O!+MXp$$jF;wrm8xE) zsw0_A^QEe(m{c_tma3*)s=}>RE{s1FW02FP)nzZ%kL{A8d%46x+*D<+^3t}uOA5!9Znp`VaYOFF(C>ox3Y8Y83 zf2(~*wI6yuU?M2&rE!1t=GR1b*Rs~9oY@O!(;}YnTi)$_o{8tjoWnCQjw~E?4xflI zaj{@JTvFTic{%*Mg{X5i`F90~4}yO;6khqtzq{q%f0bFckzf1Q5Uc%b2-p5KW{vn- z#R?Z0?Uw|WlRzYWAN}{WuI(*&0cx!uv~2}EzZp*y^u@~cqW)R~Lx$k>6=#$e?)9y= z1694gs)4aJuW!Ab)bjdXOoE_l$RW?|+d##~Ub%f$gM5LQqzVqa)wmQG^U=g|0n;+f zv0i0Se{eHJ3D15w1WE77*I$4B&#%h{MyCak_)?xX#49S)nYRoZn41 zVfP6Imb(UriM!H578*d`WXJ+|opVAK(0zLvg}@qETz<%c+V~?cWT6rM7Yk}pJ!C;3 z#Th~tB4O@WQ~xz~q0Drzu?rz!j~Ja{JDum-e@^FOw$r(=?Q|}d{W}-qkn{G9q)>{W zc@8OkBUi6>#MhjTQ>nWP>z+7;U#jL`ed(QP{ya5SSpLNkD|^ONLy0y_0u3O?t4Tls zlYrW|E6pU(0Q#m(0w)@Nt|efYpp>VbH^Pb{?L1YoOhNVhRE96m&jWYQ+gUbNi0oBE ze}C1`k0hwy=d0-OOhn_R?+XW}-ivAJ@V-!(;(Z5tI=}xLXO}H(1}hZc&Ao(yMb+5? zr7sHI!@--5R%&*w#o?vpr)Vd@hpzYx>Pb|rD-mVaJyOdcVq-)rd$X{B&wJbXOoi0X zASrxCZTd3{D267IuUJrp#Jfg-qm=9Le~55URQSK(m0K;ru5D0T{&KKADi0J`YO;6F zHQe|NgTa;-S#7(xqeT{pDgdpl6!BSY;$zI;%3iMth60ARa@YtHk^PPP?69E0TkQ{p zD#<$tytmFnXnggCZYUcf`Qt8%08fW~pz=7&K1yBgpx5L)iBe8ek9cm#c~JpBe=T`1 z!1_zPJ1QWH599l*bL);T&-Ry(#32waxJtj7{XInv+s$|z@Wy=19*K3S^-G=vSv{6H zw9z;^h*LxIifql7<<9)HTvK&Cy&nGDcFsSi-+Q*7aR$flv!9H9qKvi#u2go=@ zs)}ZO5V-idAjwc2F^VGi;{19ke@Nbc`%OZr0Iu_885kKwlsRK!(0M#Pb6g%-=OKF0 zyp)20y<+^&dE;~8P%%0$4T01IHrXr3GaY z;j$_@Dtpx~aLQFC&?($LAPW1owZz*rgG`ezoH>*1H?xl9^v(Pe$$qowKnihz@*a;o z(o-hhl1Y52F~atgHD{{Me^p}4;>_DzQ334%{%1QYsw9wAu1r>uj~5huIlC8!lwlOc zd3mf*mJ?qb^UdtdV55EUj{f&MXH`O&$~|!6toAO&*Yw)MCwZure4Zn9Zq2MuDWC9y zoN15G@+QWIW%YrhbbFTHkBay`6?sj{!=LORgWJ$22Xo6o)c^m3W)PQqeUjBT%&PEdS`IRUrz zR$J@X`WcBY&KA247l@4MGTnVOH~Lnim)Dj_O<@ggSrMz3e+R)_?}ifai+O8@3&fTp z$R$AOm=o@LQQNv?Iyj0c5a|o|KT8MqyUPbx4fHkdW_9r5H8Dn7VvPLo{5)+aBT7F> z|GaW1eyDw6dY1pC7P!}}vo>W34SiWW2{HnZ zV5(9B_;i4kf9=Cb@=eEwDH}XKy3f_bnbWVdUOl=O)x_x+BAPgTU4-GmdfL>)J@>F* zf*rqcu2yp=H!;g>K2u=p&oRlxcJ%AbGqE2x=hH}FK=xYv(@Z_k^6UW0t1La!c`RNg zzEwCVvnQ0%2Ov|Ya5%K_H9RKT9UC4q*iaxo7B{5jfA0xwUdqVKIxS=5!s5lKO9*Vg zx$)ShD~=~ckgUL0yA~v4%u1#>S!1i2iKqjyz3^`;3zvMnQ1pNy;+Va7U@B=Jp@D|}w-=V-GjH5L14X>ABZ4rR=C ztGy>B#{#Pa6>+J|oLc%C3v{fAPgTBsXmz2|u=`BcD=bH3YDL%LEEG6$JEUS!Af*_3;ml%b6`S2NZQT z7wb!~qx0%gnOU-2%u<=<+pTS~%)?Ua1As3nf3Y9)s?eV&yiq>kjl>9VBuscCF~S>( z5#Fd(Q)mtxnxQ}GTY06wi2i=0fYiPqTl2w%w9soPTN4Dt`4VLd24Uv#6uu}kPee0) ze;oN(G6`N|&K5q~?%<=Z6>yA-4dxm=bsob!5Ta4ogR49A;6hfC9}clL!C`|~Q`93( zVAZytXp_QLTDmL~tPFSKX%^iGH0vO{eek0F?k@*7`27P&t=fb8iT%ku(#R8!4(kA& zQJ9)-5$)j6joMK5jJ^8|#gX8ZC)2Z$fAy8;rffya2Z-%l(nXy3)acGjjTLx@#F2?q zY-(~HD4Cu}d0|z|nD87nM1iTbwP|mCA!ydQtWs{uQiJKq(^wx@?;k9Skd#>Oq|e~&J(_=wiru2Zm#EksDt3jodV}uFk7OCrck_2>_x({}Z%jkP$Au|xf70U_ zg|VUQvNy*Ql(YQ(3+G#eC6iT-p>d&8%OTGZU{x}siNsJF#cVfu zL&Mt`GZmpUJ&nZa2(K^;56YK;JW~Zyun44h4M@Qfkb;Gy+P{1q2{qm2@1vO0IK1t8 z%1kN$imd?kHXYMNCsQBx&ABq5e+3pil;pE`PubbZ^j1;d>SBic4Od-RdoEBo0m4~?d4YrAI~A@Ex*9f z*lQ`HOlIuW&UUhYH$UZcl38w{)-;s~*2K%IS1Zb7GHc|>k%7fguPV3IfAuUd)JLDH z>!DcjXa6Xu0yElsu0?!btA|vD0;GoZVKmC@tOLay+l|bC{eUz?6Yt^`IMjhKT~_|- zU-*fepOidt^HWbxTs~WG31p|ir~I-{I7c9a1SEmh^!B*e5i@t2V5HW5)r7`cnIkv?O#)f};!jf8yJ-@385uudhZ| zu_7_rS9Im-_$)$0BVQ0}nD z8ZxkyvMc}F1?_O-ZdXliu;3wJ&v!Mj=gbOA%>2*QW_Axj`-uCk09Y>#={(yHlQ^Z} z+~3Nw=O2LOQpQdge~+Z>dGE3|KrBe%CTa`B7%p4_Ar~&+oGEnDm%51(S15KEiYuzg zs7vTH6h@2k3jr?*NLpun-LasD(htx`4cYyMhhdbw6a(U|O)E@7)lPl=$J_Cm&Y4(3 zbXVDI?-=b-?!;m;MUIW;dkFl1OCPhi!_550zuJ48+dKp=f0Z!6FtvT562tMu(&nlB zB32`@B32{eB32`@B32`@S^=YWi&!Bx`>XN|PSn{47^;Z1aqIUo>da0gjvCTi>cWXi zL53Qt)H@Gq?x9gT)L9+~)l!H?U@SAhhID}}{Z}<8wWa^o0~)j{2%&{4WE(o}FQALY zX7;thH1E=fe=2@Emey{wxNvlMe&FuoinEXXo-uNc3P$wuJb)Mgm+S^i3SmH|$t(;9 zXA8#HQp@lIb7{E_C8q;fy3P{ks1)p{*E=}r^20daVLujg*pG!B_G2-J{aDO(J8suu z&oOu1IQMC19|A@Gj$X0qapYn>vhqA3(&hv=N`5WFf5uNV%k6h?h;NyDs?o0OCwoOa zzev2h3{kHF6|2;)tqdwQMfJ4=#e}O7JtRID*|AQX8OREHykzJCC1#MFvS2n?H*IDY zVub)%VGj(-3C$Vrzx`fYxoBuXyFSGMw!prqCn9=RuARtk{gZ~;@m^Q+Slto!0=pSIuVsEn_m`jA>FIYHn7vXYZ zAN*VVi)+odApjE7g4mAe&gn_O-l@b$1tZ9eF*R$0Ri5Yp9go1~_BCjdJxtn=raskV zWvA{#K!w&_hFqQcp8J|{6I`V-V}3#K|Ffvve^22%F)|De`z<#*hH3L5JLb7;$fb)? zO+Oe$cn>9%3tRy`SPXMJJG=epxE?pR?hf0)28%Kqk-ZS+Zk=BS@XPc%qU<<-Pb_ggU;n042MB{R5&6jt7lP;QK`-HUhx);s~_?D8FzFio(aJumaJ-UZNu_-A1VQqAHvn3{t^MzzUEO< zqatOnp?t)0vCB6GC~e3tteZ#mf2~z)pk9D+b|ScS3$yQ;+)2-yn>$`o5JbNC@WM=> zC>ZIBr zXR_9w1=nFAF8cqUP0sT&MY3AhZSp!x&joy9pM(WbPi5q5%|ASV0V=Q& z-y-P=Hn<~H=7x-0H(>X0*yA0D*$+S-Pf~jM#MTT|9Tv+qL0hm+e?3LRT*pS@uuzdS zGh|0R4m>EKf}Sy#FK_~j0wVAZR*-b**YNiK{kPw}|Kb1qwEX_ZpZ`_+f`TXvB8ZLu zW!f$9_wO}-OP>9VC*Nu-&wj$Qhk9b^7k+>Y;;H(r^JTyan`zUWVS9AnXQXOHtFp<#GhD%TJyn8t?Z?fKwWX5_Ch$Vvylwh zlp~(%f@ubQq-4`akn>nc^l(?a*!ivY7O#A~G?I@{{P;0ZfAYg7p}1hK;zis~%BnvL z2|op;tV>_DVJNF{f3JhR??Ax@kyLb%))quvtS}SCS7Dm+0~EwCS1X99d+S6g+IFHY zMxC3PF9Rylf5FOA*p3c8gp6y=+J4mWzwF-2q>%2d~N%G`Oq0Q!Hv{C%tX#JNjv zGS0p9=p&IUe{3=qz4Yi8B9|V0U4%cvdRo2o_FKq@&nf6zk44JgOL34y=*wo6GE+Fu z_YZeP2Zg*V;6~R$C&}}aY0ay%+fil*JJb=M&3#t=hJk~%5jtoIvaBvwv|f-FDnV0r zG4F`Uo<00UArnqYSu88Xk8l`6tB!TOS$Kc^c=Utz zeIk6ZPnwAPrlSZE|D^5v9@-~HHdoe2v3Uxwu`9zUUCjh5nq>y3LM5>57U{%tsp|2P z^Kj?Vf5qn1*JYHK`S96Z<%Ejwsh;3wFJ)(bTKXT!bM8a#?^#OA<)C>1P;%L)@=_m-9I!-U8|x9+2DY2nU%?F*j- zOZ;)^I^Kcvt)9{LHt*_hr{JSd8nAlCc?{l$BM zTMFxJF$%%?VzA&XeuQJo&#>|Gi%x~Of0vm$^CGRd0Dk?3sR3d6GZr8Qn2C*tFox)O zWqX*G75$LY#V&?t8E(h?ic=G@f>RUWdQ+1|%1uqgl7uF07n?dEGpu3PJcq2Yt0K1} zFKqAzEF~IKIoYhhJ>m2)zjFfr%{|pf4kS| z<%a{+&D1~9=W#ApBvY2`d5Lh$?h>yq7_nKC!&`B`g7XxdRro4i8i@-@c`OKv-9ian z7SoRFe#L|aFd;5@TnZvkZGdMayyC%e5$zaj>p}G5jJ4|FfOKPRJqWjNtW_06l8v5S~gMKN(&`7s35`;Pb-*A^QG|8tFCOW z&6WGgPaPU+V|WR9C>}452Q3UiVuw^zmI=%b){eTYu%-jA#_leR-LrgS_e{*#Jrg!| z&%}~vXJYrptP88QoZQ)ZTS42V!(!zpN zpLgab_#gk8{zL3*I$d7ZH|VmlU!sAn5R|wbe6{dwh_l+eHdIzAHFEU2z!V3^{>y<$ zDLw`3G92S<`?_=M$nRmDIi$Zet&ec7g}cKP5qP`om{gi99FxMdSG;F7UTsI5Dfpf2>isd|n^6+t2=nuH-W}GnPhP_;hJ)UF&1)pG)$IPP@t>yR}WW zE58uf?6tyetn5cSC>V{N4129`G{?orv!%b^+L@@@fAfL3P*y{mIlboV3sn^t!%G;( zt8^hM``5>6UDw=ZOtk`;ihipA$dD&gfvnC}( zWx&AgiiyRs#sjz7A77xuxp~-TK9726N8YT9hf`_ac~X{_qOLat*d4ap3pUypP`2hv z$vM8pZOVbB7N}5Zx;%KHZICVOK(RhQ?FSf{RabQ=#ygvFXyR|}$fhl7 z+bPp^_h7(|D^czNQ{jRruz^Y}7{!2)LBlQ!P7D=5+t>77KqlY2pgM?v-64#^E%XsW z+*Fe7%~1wW{|Zg(cxOCv1Qf8caII(_@%O~C*LK(ef9BK^M)~;5u{kFUvZK6wWv|zO z0nYXX$P!D-Q#tDnt~!mZp!j|G4Hzl;E8J$oTOm?pVBxiF7iq0rPe-I^26NUwfFAzdbFrH)TlTH?$3qZN_Yp-*%X597 zMWQ7>e+aup^#y{9w6j!2@F8Vy0SvfOh*~e@WLVG(LagD0LFenS(Rmf#bnou2g@QWyrO%U{K$QF$D_ukIWaNy zR(reM#-1l{CCy$Zq!XSH70F4L4>+KwW3Y=de}Mbt$p2tnC^otdHjyNZAEF`QI@VCy z-Vu~&kFHG5;A^ZdO@g0Xw0C6e}>{8sC-OP4`Qkx6YA-_y@L{q@VXdST}Obr zj=<)-2hU=Zgg=?yBUQO@UtDSHC(xp>yq-f(zZ^ z=zs^IP;Z%g)3PxJ@3X%p&!4g2*b=OapCJzN^V)RW!+8R}l+#Z{Xm@w|qf?_l4=^{e zPdt;RQ5d>M#{vGPX2NPJ4>48In^|VK_hCf+R^*n{sQ{YWr5Huh?5DPK=4s_l%uKtcDkVLI zWqu3j#A~_zpqV2ouL(1{JkC7aAAp1BcYnrr@;g8`o=u1MEy@C!Q15>_ojBJ}ry7qA zg-Pt4zWl>J+GkWa>f>FQ5Y{NpAE2i3iENe<%8D#LB&JuuxKR*Q?vNJ@)ktVi0kBb_ z)i4wn!gEPjBoqUvLC)&)X0^-cxR~Xg0W^-hnp}++h1!`vDB?(n!*Ep#b3SlnX{kf4dn|5eeunKJgOM zk1$)Z$UM(bE_6>v?Oh=10Ndd_@H|Q8q7J{p@iF<~Av5zXb~+i}==*$c^u3rj`d-)@ zeJ|#Xz852h`%b*ksL!RY`3Bua^0xIsH?BgTtzWt=4_2wgPfC9Q^JIEYZO7UkRs_2u zvCQi>8bXWXRjqvBfB0F|$Ay~rA_w;I*1PyK#^n7pBB^lTKd@DWDc8w%x-7K6UT4)x zH({)+3*}qb9+YbX+!cdAtsy6iIMz#Hi->H75Tz)T2-!+~teM<>pUTxk2RJiPB@)l^ zCOz2>%5YTb+hP64hZl`}GT{|^CuanC@uW`@JQG51YVrsze^Na^EQNsee&Tfy*dplJ zgr7uJfl_bXYVQ(*vtkRdy|4`F$uG$EV2QDx){C`efsd>uAsA%PrxTXcgb(c%T}5eOLZ3`>r3rW@A{@~7Mdb(`>-Benzh`y_x$%3V_ltThzf^zIq}M-!P8$T@Ib z)$jL8H%gAbU0CHhgZPVi!ib-|WhdPi*>5#%wyK$BdqZZ}7Ce|^5me+^@0SS2nR{Z_<3)04$NKhJ(a z*SbjuuNFPW@oY#f(Dt~Ktnw@#vCwj_a} zMM#2!DZvn4kGIJ^H7kwPJYD6&T3U(2NL~Ape#4nA2Qwp@yRI6OXrK)Cl@x}9CT^iTAu?K&kA%p?^`U@ov1%}f?-cA755z%d9dr`jJ%O2T@+B%Gq;^Kz{&ED7sklCUnuTl7vOVcUnv ze^*QN5;lLw*4WfStst)alS=s$!dIiHEzg2bEU2Orl?9>Fqwk`o`GPDZ{N`5s4!jH* zL&VG5YbNtrM63zcd^!cH6Ff42H>6}vU^*CQDh%bckvHAX{`NyyC%U&l&{&ixAT_=X{bz+EJeLR)YOKp;jT!Ke;DNp5+gA|Vk9g`jKluq*F5w$j}7=aV%?75IDj~27=YK%z`oxHDfhO29)zros~}5ib?fbtXliP%#3t) z;sq~>RTSb_bh4Ek-T6V_Q?VHEsc;DRR4f8~Di$d`?Iix2N`cKIc+H6Ke;TUTuQzE= zLo+_%qCx0EzUp_?uzsNWU5%Y5RSk-IsN>1fEn0u3`O2Q>ry8 zdI@u_L`Azj$Sh(UP65c|D0~%;T8geW%@Cy2QU?#X1D$IL|ms>@3s?1qzS|Cb;DkAQ>2g z7pKk!91;zMPBxOEg`PJc|57zAGD%04+R!R&nv7|ckYIF?F|Blgf5dal?X~7V+W{3O zoJXkEVSc2dJ`d;$a3_F%$_~;YvWs=RspN#%W=RBR_pxBH zaJbT?X$AI^9lT`7e+`AVkMPU}ojQt7gvehKXnX-SVXe7Whu{S$=2%Y1#|kiD`#9;2 z2gn)!+9R>{z#8u`hqa&C&00jhp11)AXkC;aH~+=a~NE`p41b>j@)%^7~{_t|^QW+IFGTjTFikEV#_v+M`+ zTmA1!`dugaX%!Q(w2FyvTE#>xtzsgURx#-$ts+(_J);$EBhqrsjh%P1Hs07U*4{Yl zl@f;4*R0+On6FN!yc&yXxKkdEU%8)GdoXCY4thNRe<-J1s|PPxjofPiu51dOddIm) zaQ#k^Kdg#~Dlw?WtZHDZbrDOZD+<{pM1+;>OvlsSE9`SL#>DLhyqqKno?Y)FR`V5( z>^YSH&QWB$!TVxWr8-FtJ2Z1p{ER1T@e>$vyx3xMqP*^pGZq2xekt)s`5da)? z<#(*6V2XgGRibPiIt>+;Y8*OrVRu*nwg^i71WwasLhC_CIYUD^@$EeoLRO}?Dh$CJ z}18X*~X=jc6QWU5%J>ruHLZH^q-^d zfAybFTB?ggCJ3xNOX7m|3z?!Av}8D2pR`^;MagC77dn-DRE?BTg_2N>Em;f8be0x9 z8{9cmw{2=8tm*x zi`?wOkhhj&k4;@JbxYdE%8|1MqL72&e>iSn2ExTMl!P4K5h@(_TYjqX&TiGJ*sFQY zz?76b=dd|mUk(~Od!|H+&e;h3#i~%86p6j~1D`Z#jc5|F!=95kN?5G3mxtewp{~)x z=gms{e)z)TV78R60{FCT+%XSM=VP1HL4qnvkx>^=D>E>A0Vk%$sc_O!TW%~(e-U^l z_V#sU)g^5Cm{HGF;h2ATblhZbRnM&1rGN#uxeOoqF|74aPeq z&wC`s(khG16_~tq=MgMG3NvrY>UGlUEKh3d1H@wY#buno#L|*2pL}EPf4U}*z72O> z%jevfyROM|ZpB^K@@HsTjH{~{9Y&}mv^z66fIsFw>T8B%# z1!JB#W~yPJXg;2}Mid85QQ2wME(n^lT}TKumL5sd@?ke-zmO39dOT|^Nzs!7Z_1D% zA>y@<2QI93;DskcvZ$$;CFA%83?O0Iqb-uEW!7j>Rn3;5i^IE;f5@kO0hID3PYki0 zQw{a>^;}&wAE{q8&9a(iewDJBSdp@saE-E=Sc$TkScS4#y9LUCPAt=Oi}SOCLl9)1M`qSbGbJ|Z)_?|1ZzgQ-m*oNQXBiPs;LlpT269S2Y+@6s!%i)q`NNDw}Psvf8qek}Amy>SROHyMY+%ATAd>1=nP@u!i zV(vL1tH&slf8UBhrXSE~&S4@M8le-VF>v52D!aAXg%VuQsz8ZJq5SM2E`$Yyz!J4D zK<`02U=)GEZg#32ZC}3Z2gy*ONO4%u6%GOv!sd~DIkQtx9<3q>N&ouTd-OWlFGN8@ z$ywDj(=o7GaRHL<3b}nU`5QPsRQ2G7mE(tCf8ZySf3R+!+11sXAJ&@VMz{|~j$^Zr zAn($7+`13u7Rkrl@3+vV6c!%!1_|lT_N)Vx7Cz~43Ud;h{^Erh{e}iM8Hz$TKD-sZoA_#NTa2DsIYbm}M=4r{imH?yP{`BqLPxL?06s);yjAO!E zKmT&~)6c&g-zj$A96=Dfq(z~3yi)Rjcl0owJp|l@igur`_r;hTT@^ZzaB zA496y9kzkJ-!{$)e8jmIZXS)JQFK#b%`DsXe{9xMIM%cqz? z-t=$ySNQ3dC3c(J<|Hm!0t-%CLBiFhpG38Davr6BX8fkCWi`L?$V{y7$V|BH$V{y3 z$V{vP{jA-dBQc!C{^ZSz1=aV%$greU6@F;mL<#?D-a3hX5McgG^2ypBe9Ff%-`j6q zfBaG}n*NJpZ9La;51Cy-Z|E5A^Ai0n8P9JXS+nn^Pmjqdx#uTG`c{$Lj?#AyLUl%C za(v=PDTHAbJSx$ozSnqwB2J3#2ZRf#BCPE7nqY%6cHd|#7rPIJc{N&eM%u$6&@2;# z9PP*msboWZ_}pdch7WAt+SvPB?HziPf5UX382T|85?spmia-Pr2#AhrLn~bF4Sq$= z%*$r**lA%r9-<(}J2N=q9gE9@n1@mr*jUI9T~e*@3s2>hSPFq=ukye)lMFVAYEc{8%rM4>#$BZ7*6i=6wuvl5`ij^Pf9f6b zn&XOtjTw_FF<6k8)`l4dZ?$jAOQbO4KEdAT5IbaR@LtpsTZ1@yvz)2$fBx&gakiwb zl+y~bNL*};kCu)(oa9@^CSsPciLhmCB4!zzh>`B3Bg+`1SvZ!2Y7_M~^y`i99y}|w z2<7ve^TFp~@2pZ>EB;|o;9d0vf8_@0HJh5vN=~Fc6LpYQzq-WnU%sO_!vC|UH-~;+ zh<$Rev3gsEON0|Iy2FB)lZdTeRtUf>eN%8{UE6JJb~?6g+jcrmI!VX2wPV{(#~s_Y zo$T1Qt&{(IPt|2V6&04jp9*%J!;+i6SQr63UnZCEgzdpow2ET1xcOHnC_;Xn> zP4s3V8fzDNz18#>v$^n5zygyO2Z5uaHcmMLCsG9A&Ea`+5JQIheLbuX;G5-Zw1|C* z@5?PrRt2~0o1Xw4s;lTXrwSQb<=0ove-A|!xo^rFJjThqgJ8I4JxockxmH28Hb~f{ zLY(QBq$+U{y>8yQK5?Z8RPEee8)k{L1ncFW} zcpuogOp*S85JO5tVElNyEY+ovlx$R8P#M*YQQbKb;(yE{WK8Jfzf-Nqht3tnOlPy6 zae&)wYB*GxUgKazVY;3XUYn#PIYgg+0CILwDuZEG>n}AxgU*`?Sg6+}^_AVEaky6z z{jMR#)zH34|H(pf8Flra$zq^Jhp9YEx)8}@&aNXsiD=PMh%ZAMtSbsIrx*Q44O#yS zrcvit4L=M$i|ZzJR@aWBwYp2wxZowtYw=&}`5##di}GrBAn;@0rpFnSEpF;(?`N`k zKrQw3j3e4#PRu5j0EP;=$-$)3R;Wd%mj+T8hvFE2>gG5XYQ0a)NCa};w7AQ|=HQs6>o zk8!TVewcZ1L{x1UPC@lbJEjL*OeTUzqrM=p#t8&HFy*fIa9np4{BCe0rbs7?#Iy%a z)zH}px$V2+h11kS!yAlYv<6|6+hP;@VHA+_}K~t({_7 z0QkH~CQX>#+b;ayT=oVKw%ABHL_#*Ur^I$dsuwu<>23>iNMLWjF*EUYy&aBr@1{>k zOeomh9wy>s*AEGSF{1w1vI=2eoS1K^Sx^77`kw&Gf73TKjHVN;?M8Hy%@g$I73xA) z8;$TM!^TDY9p>GvPgP%U>~Df~WPPrn4t=QY&|*>bm_5B4=dTdq^YHmzO56AvAQ0V( zL?bO^yg>oIe^E9cA^qHW0Fg6B##e*Y3BE$~qBX|^mU%&{AdSsFB)LgJi~Lw=X__EG zM*;v)V%f2C0;KW;H_t)b-&K%D9i5L|nt6&D9x=hZQ%D_taH_cT9&!|-O!FuU8AHMZ znqXJoOt7(gq6B@Lfrg`WhNgC&#~(bvjUv0+2>ff-1># zqdwpOdOcW}rX=^LsissoK-m<(b$!@&zw&zi%{hk*d^Sj^+|Ldj)R81TX9|Lg0`Du1V~_b;J2p1A6aSYWT1y@8HMT{j z=}Rv%3aPzW+ZgNxlinw52epR!yS4Owc5x%KW%PJ&Iy2i8M1#( zCI+V^xF51=W(XHQUUG)Pv{3<0@nY9&3lYb8%Ujx8 zwqaQT2dUJrqS)(Y>pfO0n*pS#fka$-I4rfvSY_r(j|`9wKg+EIBJdS`&i|c*ciQoE zS8pWB<*%4zk^1T`GS6M!P@GiP?;QwqwEX;W#gF)czNEYFhi*_eSlwZAwPANXkKa+4 zaIEZXXWTSrV0Wj7**nC~XR9eboCut9M%-?C6ykKzGel$qRyFftR0G0Jf1ihgyJ;=g z(VvU@IOomZWTF_$w%=@l;V?t8)vmaoh|p0@DHsnL!e(fau!#f=Uz;l zys!W0vc=w+?4MRs_~I{^H@;av`0%(KDg<8b`F27Sj}6v8x>eR1@jKZPOdUYS@JT+A zGrtKJSJ2j(#2R7B3G|4Tp`pYnUOCR}`wQia9C5|Rh9Qyhw(nm8D#P=w}(IEJ+>ZtAq_)ZpjNKfcqPui01D zsmP%Zl+3$QJ`6&ki(T@J&zCk@533^@)riawt0?OK0UCAmXWD< z{2y%ikW706NO%PfBR`n#;8nist$ z4(Qz^$$m)O9M)Wr(+BgtyENpk&aUg&6r!X2iZp;V5XIoND3ONV!+QnMv!9(^X%wkq zG}X?*D=$>~ve@Ak)TDptO~{Iiq6V(r7s69SzBK#lGBngrFOHUQ%f@%dA_}@rWM!Z0 zXArS)5F;e^uh3&C3o=KfO=7@AIVxOp5%|XSP`wrq$Uyb$Za~Y5n?O=S-?{}gS5eo0nkX{Hh zNV&I$1H0e%Y=HycF%|Zzocq|3%#n=R=^CV{(Yn2p)XkYS_>1d|I{37=mu$vo`<4hOb|{)9<- zR6SiZcFJDJ`M{nx?~Ue!0v|>bT5Kj2m8c|Y--*N7q0tzscU=%~v&Wu8=Y}c`GYP0_ghYiIlF|yszo!@=c$5WS@F?dWn1= zIb=Z`!&s!Ho~@ z!8RA&`2h~oN7Qa(S=q0d@EL<*BneJ%2in*A$kCuNAm>L#)$Jkwlq64QM^B)Hn?DUkN6pnl0(Pj813;85}qH-^Jb-GS?TN_8z2K$knm~F<_ z>-2*av#ax`dd(1tJs$z_4I^hko`+~R-U;^=%wy)zTo$C_lEw}Rc{Fgi%@~@7zSw%5 z$)ID>h2n(iwjpZX33lkYVOoQfed;&Tr0O@}%O?CMJv5gsp$4rklWKUYle*7y&A*h? z5Y7i$1Z&+_Xlm=fU8}WNOp-i}mb3WV`}nOS7Y5+Bt$!Qf|29AvvrXS$z<(UQEM@XD ze8LTNm3#7JU5Tfb;aq-e6|Yp7#V#4qcE@dWRH&#x%N<#AX;{QAbIB49#bq0tgK7lK z{#9j443CO`QjkhjVdB}}tR8Zz5B&;FOkiy#)1^_b9{`At?spAgMJ!RV8%n;9=V&XrL_*)O;uIVH>bd?U)+tp;8oG-mc6ep); zy9`>=1WO*eEs}YHpE5R>=+f@iEAVEOWWd@>Kx!ZdzZHb&6Pf1A-9I!W*N&{rGBrY8RjPa3S3Mwjyz;VT&~PmFg3=!_17{VDn~mMjBx6oH$vHWREopBxDe0O{_=N0@ zzY83sKxlC>4Xot8PQ#x9EjP%>2Up)(KPRtjU6FNks!w%V1ubyVa<}M;Oy5>J1i&c+ zh8n7+&l*$4Q^l_@ce1)IbIP~_?p~XaoV0a9xmzpyvw*-q3gwT2oLfL)GSh<3!uNYb z-I$yoW^LNDqqP`~zhvM3HWpuMjDdZ+m#BVHEr-10tMu=`yL4P6s1+C=(63w!KRQxB zO2^8a8UobXv0w5LiVmN+q6xiZQP1f&8g;i2@{vxk6Iem6O^{T4t+%mAdlEUB|Gnqa;zcX`pGlN?m z8P&r$HAcM0!YUSlCZH{;o$(w2xk9B}Iq6##!b1AQ`$3lZ%dTBzhil3%8gRk_h0)zv zds+;={us!$R86+m=su7TtEu=~(2zL5cZS3>1V1BH7FFoyZ*ZbG|9M`d9AJ8y(I3l= z_c2{@O^Y!tC4-*%1+K1gp4@QW?Y#5+ zQ4Nt01n@Q9M&Db04DlcW-u5|FInn!Zf2~5!8RdX`n?EQoo?Jl3vW2nEA1Ki>OxHQnh`Xl6qZ$V5iwLcHapJNV&DT zxb~8wO%-x}mvxV3x>89=-=TaXb}X1GY40l9$O6vUD%e_ZmNYhG&YxOOPc}Eu=3G8= zd<(8T7xwK{`dDPgJpJAte3ZF^O=a}p+v1;g^P#@wuKf9ur5oWbP>^k>P2JG?lCh^f zR)(M(8eW)a?u9RU1LDuNE%xsWfT8tu(1}~uW~bAC{5a&QJDbvSe|`Ov)o0BK?^6!a z<+VoHa0pT?M8u*zi_nR1vKFykEZgW8p)4Gdd}U`N0-An0?JvTMN%mw`c`r3v`RE2t z;IApB3t6`-bFLfVDLD`sM>c-R{|*NObyA_Tw1!Wcq*<-GLY z{r5TEcSzIxNqk+6SIaR$EOBa}cXlFp#QU5h9(40Eft!JTdoIwvm+Mig+uK#f3`CHS zaO}%Nr0I&`aUM81+FRs_jkh$QJ&D`5BB1bzq<4}CkAYrQvwh(Su*E>+MAtigu=bS1 zrMrKK&yS5Rdxn%6%0&KJPl-|Yf>^`jCB$zlGd!}cupL%Gaeh!MEhXi4j_Qef_W~@1r)*1R{VObKBT-2~R*^IiaAvBxG_>4*4ns8-sV?Cm%Wl@YfD{FP zKwH@iPtmUfnPh#PoCfg^Jp%yM&3flN$T1qvOtqc|xmApx4a=CJ((in2axwmaGCG7* zI~&8gJ9|ETz#zhY`s`oV&M);AN)~^6E2SXbcqyK z4y&WGX3(*rNlJ-Y%(8z-MNoq!Plcc*T09bvHX~%JF{7ZYO~U`{NJ`nGxo z%^Il*e{1 zj?QPODaF-#97va@7p9iZp}Y8S5LQQPMz*F#zWf zWF~}*87lx|{V$)+Gb?2a18Kj*U>~hmji0m8tJS4S+hFmkBP+!mXWJ?;7y0)G+xUQR%eR=wCoOH)0{(^j)!Yqpi|>ki6VRUy~-*OH$?U zHk=odl=cxw_pj#hiddCqHSH-D8KU~&uk65c z^s7NcdlgB&fAOs=?p0L1Fz7g_kSB-zv*QLfiL0qjWv0zKy|QHBPsD-z6R}G4OY;=B zO7pCU5t2y+rza0OkoZIsAd9l6Yw%=5q;jXGTMs*U%eg_~y&gx`rydF6bBirH1S+S6 z%SnJK8fPC1?&p|d9ij{(;= zYyJ&T(fx!Rd=7)tnH}ox2? zo-xH%MHKLd6$yN}p9#xIdt-JjK94Ym?hsB%us0>3P6&a&dyGT?V?7r$oisxr7bT$! z_&-#HK#LSKX<(mA!hEx`uBj~|chV@hMm}oiaDP_}i`%+Lkv#0DJQMFoFNPa4%R9Re zkvxbg{uLdTbWsH#7JUSSS=|v6zQ^rAV6=f!$TV$sKaXeNK5IS?CEv$8%I{JUw5q$* zQVkjYGuZrN#4P6sP~zWIf&6-mES>+^oNBwf{Cl?<9XOyXu}`=R*RG)~tZOYN(J_bU-< zZm$KY#%Pd1-K_`eC(Il54@^fI#0uxY?QBR~bO!Kcz5Lf%)EYl{j3lCh?H+yXr7nD4 zLrS0z${0W=d>QB8g#ZbLLC5@4nTR1Q4e!X^ezKTJDg|Fb+ShI zklo45&1*a4qmCd6un9KJjf#phg7O|&{V08<7>#H6d zKpqYt4v!#F5ZxY5yI7F@;KfkCV6go{DF3AeM=7q2Fx(eR6V9ffFaR2{EEYPkUkKX~ zXi=pa_ITq&K6@NbE1@Ll#YH#l(!W4MCfQ#XFbVicSN`j5DD`pU5OqRBdLT(h2%e-v zp9FKe3$oeO5%lh+r4V#W5F_kgiu8)6>@x$Pfc1E3W9JKTvXNroP#ewDsd7{ZJtnZ*(j_!v|8cc6_&g+d!fn}bewVQ- zYWRA1rx&ONlckwp)GamlP764ze-?ldbbG7q)QyOqYk$@|VW!*Y?v3okvY2xLedGef zllo5~T}Y?A5Y;#&T!f3DNGk^D5_j!~3|z{ts-pI1DTS3RPK0~^=_)XW#GEbI6H6FP zI~tjtSyM9^q$zZpW4atU=4U*Gd!yju%HnjzvJ*`Ke)I+jiOp@x#rmJtjI$nCy*Dtz zd(?q>l3D-CgN#kvdSW1X>#2xAYsdxEa2Y3puJo~}8zSM2=8PajE89P!gRl$h9xme= z1c1ElN*sU0HDe9w>9F#i%H=|3#^;}x(-4ALTGQsn}tZtS*Bwp20oo+JJlIgmYGn%67!I4yXHwOc(_g0W} zT&pmoPwF+UlNTqPQ;i=l$;xfF2DU-&xy~~UHN;Mkc^fx-Y~ccLv3`)zG@{&f5w0 z8!rE)f%&rpqry|xW^lEy;o|rJgXqYJ9c9cAH`?5GD;!ucF=jirRkKOkc8`s|X_UlW zCWByvc$~fDD>Y9D(k;y~1&Ny?b7$5D6&b=F)WfsWC=cKI3IZIA-rfQB^kQ8}Q1bmF zbu5FW%Kcfo{1z}$YS1+_QY4?1uBNGqU8q_AU>6sT{k26o_+4wH@mtgXnn8Y*SCxhI zr@W&ws&9J+T!}1MS7kLBc})RDy=yss9bd0xg|H(9PR@aUjU0;56vz1*?c;xC1<&{j zvoM!>ZVeyuW4N9;Di+Mvmz}QyYeF$0DVn|?J9FZvvx@7|YZAT~+H->LN zS^QFFoE7&{6?79MhL{8lgcv|1Z+@cmp|WMYrfqZOB$ydbY6VpZ_Iz2{PmCE|Dc~BD z6Gne0(D=nwr2LM+;NsfF)uWIduO2ByDC$ypVmyTCkeoTpLmJso??+%-su<&bk%y#G z1iDs|;Y-AOyaYxvZ0xJAZuTIRz_OrM9rTjCj0TN=6rHiQ8mOz%iU#20x}~^2v9YwP z@dI6`2<_c@B&|o}<_2;M=8;!6sqqx1t&@F1TQt**wqVz@T+)oF;K1Zdz@qleMdjTto!^+AFZTX`v7HnU%;;M#Zc(7SM2 zuW^9)ytc22^imM`Iu#|(VJvp>&?gfB8|fNh)B2Aie|!Jn1?+E36Vl@m%bY=nkE__( z442QVydYH;YNS|I#NV%nv5LO_5Kt>Hr-pm?flt}b=##80;nXu2o@P^NGZwQdbiSck z=PXKuU;kMoOH&~slbY=B^NY873?cuS>1yeB7LMh+U3?5#?7DOtX^rK=rFT)Fbt|HH z$}AF+va5DnDF8*G4ELO?tL>4r#aqh?;ij4@Wb#0^jCvsVucpZR(N9sBL!)J+h%`d< zBtvquz6lYSo=wGP&p$a|P-+up7k@zlklhv+%eLOF{Wjz+(baBQ1uR%+R%*5H)$i1rP#UMb(tF1wc#+6oogB>5WySKvZgljscU!zuJ5Bg1bRLmsKPUU3t202W}va6 zDsUzl3@9|o#XFE*gTy!BkC0z&>l*sSRORDf(o~m_^Ly3}wa8OuuRlD=RT+K47N0Kh zR=U*+*@}`Jr=}w7UKB-ERmuqgt4jGE#Q(|+vmew&D*pn?4^Qc?NMt(X?=*j@!W3cm zSIOA&g`RvcvXaT6L0@pm=Tbug;$IKontLRZ;^W{=6KXC!5GmjOA429>nQ<=?dMJ1r zDKbKsX{xyN;$Lr%zg!Jhn#*$v^gbT6=LN)s@hym!VK7$CO@BrPX-fXw@VO32ErvpF z^8#?T!||~EB+ap?S2sd_vEbpN&^Ke|Lx({%EYzSsSkU#J&y=5fU!QOb!Jgr7ET-qX z{DH_FY~;rfAeLY48Y))oG*N-50QFt4<(B71uO|}U0ECPHZSs1 zz2UkyTwC!a+_xAz-|?F7p=@yDSQGAU9}m#j&F9z0;nh;E-T;#0q5)IS+8B?6{e33jJ>75_<-?F%K8LnHGp8_ zoiH}yW3mehc*YnpNEnWx6y(Ow>aw)p^CTT8!BD!s0I27FE7Zm3>l^eHLET%nxb>xW zj><67zgIk(?GAK4<4eNck*#!0u2uLRREh-^;er#@^675WdWndIP3|tnr1=0Shc}bquGMkGB7yd5D4F*)wPU3SkdI zlmm{mXm<}nFa9pU6>~%iq4c4vIIWY5nL3syT1`R959d?TOE?PQY7%39F#ns7Il*zK5uFfIP6zu^h<_jW}FeOeVIvfw4i zI05jCmobr;=o$Sm?(xS$^d0Ulx*b#&%B0&tGmtvZ_FJ*YonZd#pn#pJn_eK3QsRpy zu9&qt>k9+T4jmIk@YM<;lj$C~hy@zU=NFKFp=)FLPtY^;O&|=o32~q|{Iez$-Mo;# zW5j??%H<>?A=QP!w>Va?RwRo?lZ#!bKnI$PVGz@-N%KOnv$0txT_QK35gL0ad^qd# z+Z6s4pwC3~n(6Go1|Yh#wYp)whf9YgRye#5pbn`ceGyCb=-}->-|uq2ofNDXb^AK2 zvqtg>nJzh)UV6VfLeI6^xr=b{e)iV;^ajsWoEq0(-^RpT98zZ8(0{>rGpy#!as(yb z)%Cc%HKT7sy!1KCaM*Rr|Im_LEn#d5I_f?88d;;w@JpDz_r;T{ccKZ)CmG}S2aX}e7m5uA?6f#wsGYtJXVtKAFesDZr6@>@>y@U9 zfK7|N?BKhO?KJgAU-l2ib!rD(#V79_b@o_%Ppqg4KzI`I(ARITUKM>a;uQ=o(@|G^ zHpep&0e(e;>oIjw=mp-ZSB$w2J(Gmp=w*~#dju-$WIgnh{tZ%B zc~oMbsZ<@1ZqeThC1W+8ob*T|ISwDZzALp^8qb~rG8gq}4eG0U(@U~X%f%+}Ctg8z zKlm8Hg`G)9hoH>iwEQ%+DE_qw0fy({Cb@H7W|-l;p(q(icLbRoX^Y>m+6=MDrc_5e zGLNTVt%)_?hL_Z~V}-zGEzH9kv(3L-Gq~5a;14H`)<%H?mnm&ThE}O%UQ5x_p1(UA zo?7I{9+OxIeUNpS9DHa`5V2uOJse{EA2ez}S>H)z8?w;=8*~yjsVDc}9wKZ?=n&mV zBQ*Qd>L!ikOfYF8rJz`iT;h7?Ws#`NA|KK|L<}_nE(D=Jehs#JT`1*|P~|NPBW;5N zoqu%(F~!QC16r;aC$tB9ITn;FguYmMx(ugml(K2Z`_4dUTFV(Y7Mnm&WCOv8TMxs!LSqcDUul;o9F&qMB%-#FV%gsn4WXQ!L~*sm4U!Hpfp)4!+LRjv&NT zkhkwpC}vEruME$=0;}qp^U`o?Q*b(yaB359YJ2>4cq~;O4Sx`-<~`y+Fw=g>THftW z^$Zd_rw|KYr!2{pcc49NDn(NOUXLGjp`rMzUH(QJQu^)__Kda;-Mg{NeiF%Ih^1(@ zS41&P=RK&tk5=Pi7*2o&Doi5`<9ePKod`V5HBf`)xzaxTK5AH>e1lkoQ)LvI#tQb0 zpKCuz_@|Byr<1;!-#U-mUIst!`M#9|^_7`03;2ceY$p?WDL*Olb<0Z(K(ZlxmB4)C zpyk$m)mUT@8)#*twen)pZ|+tnO_!sq7g>nWXj0Gp2X&Ld&m`5y(cN4gm%aGbZ^{N( zjygxqoPGbpn(@oH2@`--XL`n~`%?c~P~9#SQ5RTpv|aXz_&xtTAeh(ql)vbYI4XZ# zAYS@1Q*9H=USO}2X(l)g_~Jp@U*93*y5lm(?TH9n)w=q*OwlZOB)4Tt)7^^LQDi%p zc1F9ocm0t3c^47Q@jek%oD!-fb7}n{$@4ha9$>!Ai)v!P=GINdr4eP>t{Ip>uVJzL z)1#WY#U>4uC_r)wByAVf3FNAcx#sVMcExPBpIXlk-B4?_%(oK<02Ay&4Cyv1-Cj%D zU7h8mm&vRZn`9^ow&VrwK8F{RL|_=yf{q1O+C;6&m3?o{e7`5K!2OHp;(DHE z+YkWxlykg5G`mr^TdZ^~>e??-T)k1EwR&ZHimF6lm0E1N2(P*hdD2Q_XUCBf8O?>1 z`yL^`4ay42Zr>W@i)}u7`1Ixwr z%{l-AF~f8!nM+Kg9=dr~nIBp*un{#_N%t&G*>oqPpeoZYz%}ZfN!_3N9$NEJ>x$Ni zX(#x9*{xz#m5VR%VX^%!p>fZ}QC`9B2h8{x{#y=;$P!SIua?;?{ zN#LHDY>8?DD62S$+noY!N)XuQ*q{~b>Ql?Q1O}qi2@EBwkeCb5L(^sxjLb}BMSpUp zD19vue*Lk^cQ5OauNZln|MQPv1YQ0K&LhKt{gc0qL)A*bNhI|2+}&^Ca=I(#JqjI(t;qYHR~3gRR_&iOj2HkP8( zz^n$IABNOJ)oZvl#GBS?H=yfm5x4-U7|z%uWHTfjq`$WoID_OD2){3d3+z88Q|_Sa z`WDL3`Y{%uL1fEsc!?ZUIDz@5mNwNrWUlDxpQ}xWT-y=g6aiEG=AIP0EUs8>-XQQ^ z-(0|c7&k%3x3w82fjl$$rW~rmn6Y8VWv7s|#-b|e9MdtR#7+5gJv8C;@XUmmwMQ}q zT%x6&q*}UK=(JEA=HkMc8yo3!%#L-b!8}@LJWwI=zd!z>YM2%BJ(9tV?z|U@ z&YRzMd19$BGZSq-q|c6CEBD-cj4)l-i;o7Z(PlV!iSu%N&l}nX+EmQ8;Wy<=o;Afv z5gy_e+pRcYb%Il{NE9s5;Vzs=WULshAG41`n@CjiaHO$$BBJRe&z8q6Lq+R34X9h) zBNaVvM(NeJ>om@mN1yMpdq%TZTT5Iq`4Yy>>X?BPsb4W!HQTy7E-He&S8f8JGP{>0>qr}Nb!r%q)<8^k`Jr>J#2S|=@h8$_ z!L*&E6v04ob87&78_xq)aZ?=x=fePC>PK=+5OAy`;M9Wt!*4kY<2;!(uZ4wInST)N z>^eby>#eaoWPV1j#X5$wSWEv#!-cjn6Y$XG(|zP@LK7`m@x5TOl$PGu zO}tCp`UxrxI+RL{4oU*x<#qmpaf&WNIzATgY6b=A+ zI&U}Q<-l-cW2bZ-BRB0uC8o}MO+Axujd5vrfk8ONL7w_FPWWLD<_Bk1KKG$j?XqA_ zE<3JXX=k)x-`tnG>>J$>R;mCdC@iw&$Ir&jIt6Yq%B2wQOZilFOi&6~M19u!Y#rSj z>C|9MP(nas&5GC`4BI3^{F9GlOuz+0xAvfZt^{sYaaw*bM%J3)0+_#R2=#<;l(=i1 z_pgk$3Ic7(a-cQTUp3P^41d|DW`-jjSK%f`?pBWimfqBJq~hpi7l%1R{)D!Zx;FdP zRRsyKWxa)_`*m;lJ~VKflYGTWH*@2DB$NP*K@C8V9V+z9#cHZj)?fnnW&{e_bn>9L zt0gUG<341MgzjODS1LR%)9VFOe24l^YthfJ`wYX4K-+rm->kf=A>w_KwfL-Q$TB>9 z4}N^LC^I2@BK7}9jGi|7Zyp?EpJOm|C?y$oP_?;o4hM#*v7c}xWF zU|_-eOiaWxFC4^?+m^$bcQ9d-vBJWJQ2~JCEvOX2!YAGmfxf_P&)r;9-wMk!o?Wtcz@)_*!u?*QwlpT^dsf;bKIJ1w?EtV=&K30aQu|Y zW%%Zi{%HrcB#DoT4l~6?-urBu5)*(n(;I%HE|;^q8KmqrXw+%(P%`)G8nZ;XRrH*m zUuT4CR8VO<8jloVUB1Mh;IM|f`X#r5l6@WP!OU<_UGf)1!e*cU_Cb)6S48dT1lFNc zW&Oe_#Q(H5G>IqoG#X#6ekSm`$K$upP6nbw>Y99|2UlTMRE+$#6Smup+~24k;o^*>`8>cMIC*(tMXd!iC4)4 z#aMjfyv)$q@=YhE4~6ZV{Hz5PzgAf9YhNQ4G<<~tCkj_j8_gTG@neHG*5h#S315lw zp*b>yVwI#f=X1(^z>56sb_bdC;|N$4b4PsQ$pzh2F>Y7pABV!2GSYK+2f?H2nV*yl z6H)YJrfVm9@h}cI7e)|7!xeRNf|joCsucgjtf`^;<2ouMP*cr;5a zhWcyOdRoVbX;5EIALRPXI);ORR_?^P$Y~@X4vGcfVM)<(h$N7VG+X`ohTQKE;}+vD z2lV4YNDF24s!=)JVOc@+Eci^hMl<41E!JzZCu&*|gswrhS?oRT(_u`TtUOUqQ80V_ zq=uPOkDz;YRNL5F(6&>!`10b--}sWSs$k2ye;uQ>5L{&#;xrDC0t)#-3qaZ}r4M@}4* z%W>U8O@cvXCBlM1q~>(jdQY(%C&9fj<(i#3y81^cfG=RTds<5@-u@!s9lbP;7HaZn z-&s+KGNs7vW(lU53)Ex=0|Wi^EzQ&A%2Re2DOIwcy{KtXsTjMi^7Uv>{aEC{SofuX zO}I+d(YTSYi{GaCltQGxl~rkY9979X?0VhuJhEV5W$g@)5J%&_S) zi66lu&;tNz=Ek$zzHY3YX_B) zjOBgaU6_Hi@!t4no0#@#kfR%m`pl^}1fbY}TuiGsRvlfhraKP@eD6P}@Zm_>$r#j* zk88%c(66aFKwU9^Ja}KN{_)jw6kkKi4ceEz<-Y#km7~Jk8t%=5KwMkV_nWt`Z8AE6 za6#WMz?=+-nM?7ElzUYLjiH0A;-k(GA#yxRqHn@MzHpr`3i&wX@Bcu#P8ZAcA;^(| zvFf+-k;%^Z(68Bm@^f#N4Ozt)YY%7&!@nkyoKa}GcD^B$EM)=3qJ0vmwjQUi>p$Ho zye@S6i4|8-McsHB5>jk~tOXiJ=F^N9by66&qf{#5$%xnbw7@k@xsC?dom4qMfQCMrkl{LeQXg$YD?B2F2ZW< zKz-L=2@LGpD*xJqKB$UB!RMT)1#&ovFPK&xuTG#VXSR}9vT6)9VpFaMh5eZQ+kvHp zD7+1V<!vlmHLeS{fn?Uxo>JUW-;3jrHQ*Nk3q_x4-!Gorb82|1y zCeLyv;Go&)wP)7Vn_KMKrXFSD&#hDNm##4dAb5;H&cO1K>*HoCmG|QWgY&BZMis8e zjm;2OH=_P+OdkISVXGSx)*EOZPYjp|iSWG6Y}!$#>TX=xdYh`eywb710!a5eP(XhR zg8WMe(D180K%c8%Q^~C#Pkh zhADNsKVT(^qQ1uPaQ!~6XW@)=VlKb~uxW({nx+G62Gk;Tj(Jl72y~Is+uex)Kd@D_ zas1l%C&CO2ZH7vl&o={5`>qn%){`Q&}b0}6ItX4^RgmcsQK*(mtFGIUc>Q2t9 zq~%OEne$0r_O(m^rt$8rKj4Z7o)Lxvp3UW111G2;J{dp8{@htCs91Hla9^p*4+~eL zFk%Hxuf`D{o`9-tEbp-Gx%pbxBqA0j$-x4XnYd_sXP|!5;zuId`7u326TMLKs1R%! zHH^`9tQ$He?26vjYMwnxiV2$9ZPtUAhoHa93Q-M1IM^8=f#H9cKvlyK4Nuqd?TU6J znItkt(`3gV;1?{M`X`(s2oYTc=+z%n=fA=fPL2J#QKM85){|B;cWJ`@0bRuSSuen4 zVGjHlFc*DXPDD{7gi?&pP@`tF3)R0-C>(}!X#^M%X>eD4 zl~Mr%xbaT+7rJlLSZHrbvK7FJJ|X$#>xR*%&M{!>!N~^N%c~#M0guA#$oL7J%^OElVF>~fSj|vOTM!l(FB^{Z?hsCRp%e2JyruYAG zGE|eUb-p8IoQTzAxt<0~q_c+i82sDn`ULeiz|%RFU^Y+k{^+7NyBRi%*Ct?ZHe4eK z_gESFUTCEI;HN#27ZwyYhgn8zmk|@uVhA8&710mcBj~!F-RQS*W_eL5|su_~m zW;-D$VTh?wcBWv|pPp3HVe3C$IZ8b)WSv-A%R5TAK=p(Z;?oG42hmAsI)xn- zz^!TSc66q|1mi|Cr_!+W=Wd1rX(;itY86B>L@N&Fc@|Y5Wlbio@3@X@sElA^QA|(Q zXfY{ zxy?fJ%@bN@JjA($5in%QjKhogQRxs@fViF%bi=lI1L^#nbM{ZMc=xh;Fj}I=A41|R zI6b@lJ>b&M)$}Ft<1Q43%(IzU(_~Y@`0S&%3b^vSvTtcoSu*De6=wB_8wR)+hu8sMWNzUGu*49sir`81ILQ`ua1!4fYtmA zT`+w6_qq~a7ejL66l@Kt(}*6ELww$jkpmBKko_ze5bhFip{a0?I42U2eQywvd^5vh z5Y!@v%5Q!XQLpzH#5d5J0JUlDeK<5WS$WGWz9>!oKN1zyOsx9)pei(20I|4q{8NP#54vh5IyN1$3(ATMtN|MaJ!56u5t-lJ;2HsSi$Yu~>) zx96Fa@PfYv5v^uU-|`oTr>L<1(toXZBZ>Fhgu>po{O7NAuNb+D?cs3Jh~vMkLR3-Ge=o8ZaSTvrKUe&apJ23!S&W{oW-8~tT*Q`G{3a@@td9VTuxrw=X2`b zJ+|3P)YEmc{&X09HIIIO!}e?ALaAk9$?A zd#k_xtABj^x_#~cS9`y{TmJoh-JcJ4f$P>cnswb*IDSD_`t~~U(j~|2f68_IShIKO zhn^zQ89OI*WkvJd?~9Fi%lc=Emxi}n)R(0{9BYys4}A=e`|~wdCV$cYs*jKU{rgw) zG~d6u;OimbW*7Z^QAdx~ZQ03u^8XYj3A?lZc0Jpq`8!+ELQBJCe)HkB|KDf-=MV5^ z=U92P{xj#*>jF6b)ulsH?F)#>E&jDU6 zWD64dwddSTeRc*079$1*9tLC(!_2@?oLW+nnU`LySCN~8ZmNPdqcqb|uIaYgj4JFf ztKI+?(KG$!n!JZwffv;g2|yV}^XZ2)8I{>NI5@x#JFNv&oy$Ern@1Dq2~_oUAh{#l zll6F%r|;8ZWP@7)wwIA-@;7cdG%LU|mORtnYcOgsgFFthlc|trvJ|%rno_XLa-PWn z+%m}!d!cR$+44Q(5-TGELo?9(r~z^p$jwd6%S=lxF3~GWNrSlGe8{ Ma%}6=fsSJU01>9D2><{9 diff --git a/include/sta/Search.hh b/include/sta/Search.hh index 510f418d..ba51608d 100644 --- a/include/sta/Search.hh +++ b/include/sta/Search.hh @@ -348,6 +348,10 @@ public: GatedClk *gatedClk() { return gated_clk_; } Genclks *genclks() { return genclks_; } void findClkVertexPins(PinSet &clk_pins); + void findFilteredArrivals(ExceptionFrom *from, + ExceptionThruSeq *thrus, + ExceptionTo *to, + bool unconstrained); protected: void init(StaState *sta); diff --git a/search/MakeTimingModel.cc b/search/MakeTimingModel.cc index f2c73411..ca3545d1 100644 --- a/search/MakeTimingModel.cc +++ b/search/MakeTimingModel.cc @@ -16,6 +16,8 @@ #include "MakeTimingModel.hh" +#include + #include "Debug.hh" #include "Units.hh" #include "Transition.hh" @@ -30,8 +32,11 @@ #include "dcalc/GraphDelayCalc1.hh" #include "Sdc.hh" #include "StaState.hh" +#include "Graph.hh" #include "PathEnd.hh" +#include "Search.hh" #include "Sta.hh" +#include "VisitPathEnds.hh" namespace sta { @@ -61,8 +66,12 @@ MakeTimingModel::makeTimingModel(const char *cell_name, for (Clock *clk : *sdc_->clocks()) sta_->setPropagatedClock(clk); +#if 0 //findInputToOutputPaths(); findInputSetupHolds(); +#endif + sta_->searchPreamble(); + findInputSetupHolds(); findClkedOutputPaths(); cell_->finish(false, report_, debug_); @@ -142,7 +151,10 @@ MakeTimingModel::makePorts() delete port_iter; } +//////////////////////////////////////////////////////////////// + // input -> output combinational paths +// too slow to use void MakeTimingModel::findInputToOutputPaths() { @@ -183,75 +195,150 @@ MakeTimingModel::findInputToOutputPaths() } } +//////////////////////////////////////////////////////////////// + +typedef std::map ClockMargins; + +class MakeEndTimingArcs : public PathEndVisitor +{ +public: + MakeEndTimingArcs(Sta *sta); + MakeEndTimingArcs(const MakeEndTimingArcs&) = default; + virtual ~MakeEndTimingArcs() {} + virtual PathEndVisitor *copy() const; + virtual void visit(PathEnd *path_end); + void setInputPin(const Pin *input_pin); + void setInputRf(const RiseFall *input_rf); + const ClockMargins &margins() const { return margins_; } + +private: + Sta *sta_; + const Pin *input_pin_; + const RiseFall *input_rf_; + ClockMargins margins_; +}; + +MakeEndTimingArcs::MakeEndTimingArcs(Sta *sta) : + sta_(sta) +{ +} + +PathEndVisitor * +MakeEndTimingArcs::copy() const +{ + return new MakeEndTimingArcs(*this); +} + +void +MakeEndTimingArcs::setInputPin(const Pin *input_pin) +{ + input_pin_ = input_pin; + margins_.clear(); +} + +void +MakeEndTimingArcs::setInputRf(const RiseFall *input_rf) +{ + input_rf_ = input_rf; +} + +void +MakeEndTimingArcs::visit(PathEnd *path_end) +{ + ClockEdge *tgt_clk_edge = path_end->targetClkEdge(sta_); + Debug *debug = sta_->debug(); + const MinMax *min_max = path_end->minMax(sta_); + debugPrint(debug, "make_timing_model", 2, "%s %s %s %s -> clock %s", + path_end->typeName(), + min_max->asString(), + sta_->network()->pathName(input_pin_), + input_rf_->shortName(), + tgt_clk_edge->name()); + if (debug->check("make_timing_model", 3)) + sta_->reportPathEnd(path_end); + Arrival data_arrival = path_end->path()->arrival(sta_); + Delay clk_latency = path_end->targetClkDelay(sta_); + ArcDelay check_setup = path_end->margin(sta_); + float margin = data_arrival - clk_latency + check_setup; + RiseFallMinMax &margins = margins_[tgt_clk_edge]; + margins.setValue(input_rf_, min_max, margin); +} + // input -> register setup/hold +// Use default input arrival (set_input_delay with no clock) from inputs +// to find downstream register checks and output ports. void MakeTimingModel::findInputSetupHolds() { + Debug *debug = sta_->debug(); + VisitPathEnds visit_ends(sta_); + MakeEndTimingArcs end_visitor(sta_); InstancePinIterator *input_iter = network_->pinIterator(network_->topInstance()); while (input_iter->hasNext()) { Pin *input_pin = input_iter->next(); if (network_->direction(input_pin)->isInput() && !sta_->isClockSrc(input_pin)) { - LibertyPort *input_port = modelPort(input_pin); - for (Clock *clk : *sdc_->clocks()) { - for (const Pin *clk_pin : clk->pins()) { - LibertyPort *clk_port = modelPort(clk_pin); - for (RiseFall *clk_rf : RiseFall::range()) { - for (MinMax *min_max : MinMax::range()) { - MinMaxAll *min_max1 = min_max->asMinMaxAll(); - bool setup = min_max == MinMax::max(); - bool hold = !setup; + end_visitor.setInputPin(input_pin); + for (RiseFall *input_rf : RiseFall::range()) { + RiseFallBoth *input_rf1 = input_rf->asRiseFallBoth(); + sta_->setInputDelay(input_pin, input_rf1, + sdc_->defaultArrivalClock(), + sdc_->defaultArrivalClockEdge()->transition(), + nullptr, false, false, MinMaxAll::all(), false, 0.0); + + PinSet *from_pins = new PinSet; + from_pins->insert(input_pin); + ExceptionFrom *from = sta_->makeExceptionFrom(from_pins, nullptr, nullptr, + input_rf1); + search_->deleteFilteredArrivals(); + search_->findFilteredArrivals(from, nullptr, nullptr, false); + + end_visitor.setInputRf(input_rf); + for (Vertex *end : *search_->endpoints()) + visit_ends.visitPathEnds(end, corner_, MinMaxAll::all(), true, &end_visitor); + + sta_->removeInputDelay(input_pin, input_rf1, + sdc_->defaultArrivalClock(), + sdc_->defaultArrivalClockEdge()->transition(), + MinMaxAll::all()); + } + + const ClockMargins &clk_margins = end_visitor.margins(); + for (auto clk_edge_margins : clk_margins) { + ClockEdge *clk_edge = clk_edge_margins.first; + RiseFallMinMax &margins = clk_edge_margins.second; + for (MinMax *min_max : MinMax::range()) { + bool setup = (min_max == MinMax::max()); + TimingArcAttrs *attrs = nullptr; + for (RiseFall *input_rf : RiseFall::range()) { + float margin; + bool exists; + margins.value(input_rf, min_max, margin, exists); + if (exists) { + debugPrint(debug, "make_timing_model", 1, "%s %s %s -> clock %s %s", + sta_->network()->pathName(input_pin), + input_rf->shortName(), + min_max == MinMax::max() ? "setup" : "hold", + clk_edge->name(), + delayAsString(margin, sta_)); + ScaleFactorType scale_type = setup + ? ScaleFactorType::setup + : ScaleFactorType::hold; + TimingModel *check_model = makeScalarCheckModel(margin, scale_type, input_rf); + if (attrs == nullptr) + attrs = new TimingArcAttrs(); + attrs->setModel(input_rf, check_model); + } + } + if (attrs) { + LibertyPort *input_port = modelPort(input_pin); + for (const Pin *clk_pin : clk_edge->clock()->pins()) { + LibertyPort *clk_port = modelPort(clk_pin); + RiseFall *clk_rf = clk_edge->transition(); TimingRole *role = setup ? TimingRole::setup() : TimingRole::hold(); - TimingArcAttrs *attrs = nullptr; - for (RiseFall *input_rf : RiseFall::range()) { - RiseFallBoth *input_rf1 = input_rf->asRiseFallBoth(); - sta_->setInputDelay(input_pin, input_rf1, clk, clk_rf, - nullptr, false, false, min_max1, false, 0.0); - - PinSet *from_pins = new PinSet; - from_pins->insert(input_pin); - ExceptionFrom *from = sta_->makeExceptionFrom(from_pins, nullptr, nullptr, - input_rf1); - - ClockSet *to_clks = new ClockSet; - to_clks->insert(clk); - ExceptionTo *to = sta_->makeExceptionTo(nullptr, to_clks, nullptr, - clk_rf->asRiseFallBoth(), - RiseFallBoth::riseFall()); - PathEndSeq *ends = sta_->findPathEnds(from, nullptr, to, false, corner_, - min_max1, - 1, 1, false, - -INF, INF, false, nullptr, - setup, hold, setup, hold, setup, hold); - if (!ends->empty()) { - PathEnd *end = (*ends)[0]; - debugPrint(debug_, "make_timing_model", 1, "%s %s %s -> clock %s %s", - setup ? "setup" : "hold", - network_->pathName(input_pin), - input_rf->asString(), - clk->name(), - clk_rf->asString()); - if (debug_->check("make_timing_model", 2)) - sta_->reportPathEnd(end); - Arrival data_arrival = end->path()->arrival(sta_); - Delay clk_latency = end->targetClkDelay(sta_); - ArcDelay check_setup = end->margin(sta_); - float margin = data_arrival - clk_latency + check_setup; - - ScaleFactorType scale_type = setup - ? ScaleFactorType::setup - : ScaleFactorType::hold; - TimingModel *check_model = makeScalarCheckModel(margin, scale_type, input_rf); - if (attrs == nullptr) - attrs = new TimingArcAttrs(); - attrs->setModel(input_rf, check_model); - } - sta_->removeInputDelay(input_pin, input_rf1, clk, clk_rf, min_max1); - } - if (attrs) - lib_builder_->makeFromTransitionArcs(cell_, clk_port, - input_port, nullptr, - clk_rf, role, attrs); + lib_builder_->makeFromTransitionArcs(cell_, clk_port, + input_port, nullptr, + clk_rf, role, attrs); } } } @@ -260,6 +347,9 @@ MakeTimingModel::findInputSetupHolds() } } +//////////////////////////////////////////////////////////////// + +// Rewrite to use non-filtered arrivals at outputs from each clock. void MakeTimingModel::findClkedOutputPaths() { diff --git a/search/Search.cc b/search/Search.cc index 9b6c81d4..047de99b 100644 --- a/search/Search.cc +++ b/search/Search.cc @@ -442,6 +442,30 @@ Search::findPathEnds(ExceptionFrom *from, bool removal, bool clk_gating_setup, bool clk_gating_hold) +{ + findFilteredArrivals(from, thrus, to, unconstrained); + if (!sdc_->recoveryRemovalChecksEnabled()) + recovery = removal = false; + if (!sdc_->gatedClkChecksEnabled()) + clk_gating_setup = clk_gating_hold = false; + path_groups_ = makePathGroups(group_count, endpoint_count, unique_pins, + slack_min, slack_max, + group_names, setup, hold, + recovery, removal, + clk_gating_setup, clk_gating_hold); + ensureDownstreamClkPins(); + PathEndSeq *path_ends = path_groups_->makePathEnds(to, unconstrained_paths_, + corner, min_max, + sort_by_slack); + sdc_->reportClkToClkMaxCycleWarnings(); + return path_ends; +} + +void +Search::findFilteredArrivals(ExceptionFrom *from, + ExceptionThruSeq *thrus, + ExceptionTo *to, + bool unconstrained) { unconstrained_paths_ = unconstrained; // Delete results from last findPathEnds. @@ -462,21 +486,6 @@ Search::findPathEnds(ExceptionFrom *from, // -from clocks // -to findAllArrivals(); - if (!sdc_->recoveryRemovalChecksEnabled()) - recovery = removal = false; - if (!sdc_->gatedClkChecksEnabled()) - clk_gating_setup = clk_gating_hold = false; - path_groups_ = makePathGroups(group_count, endpoint_count, unique_pins, - slack_min, slack_max, - group_names, setup, hold, - recovery, removal, - clk_gating_setup, clk_gating_hold); - ensureDownstreamClkPins(); - PathEndSeq *path_ends = path_groups_->makePathEnds(to, unconstrained_paths_, - corner, min_max, - sort_by_slack); - sdc_->reportClkToClkMaxCycleWarnings(); - return path_ends; } // From/thrus/to are used to make a filter exception. If the last @@ -3981,7 +3990,10 @@ Search::deletePathGroups() PathGroup * Search::pathGroup(const PathEnd *path_end) const { - return path_groups_->pathGroup(path_end); + if (path_groups_) + return path_groups_->pathGroup(path_end); + else + return nullptr; } bool diff --git a/tcl/Search.tcl b/tcl/Search.tcl index 6f4443f3..b90ec6dd 100644 --- a/tcl/Search.tcl +++ b/tcl/Search.tcl @@ -1032,14 +1032,21 @@ proc worst_clock_skew { args } { ################################################################ -define_cmd_args "write_timing_model" {[-corner corner] cell_name filename} +define_cmd_args "write_timing_model" {[-corner corner] \ + [-cell_name cell_name]\ + filename} proc write_timing_model { args } { - parse_key_args "write_timing_model" args keys {corner} flags {} - check_argc_eq2 "write_timing_model" $args + parse_key_args "write_timing_model" args \ + keys {-cell_name -corner} flags {} + check_argc_eq1 "write_timing_model" $args - set cell_name [lindex $args 0] - set filename [lindex $args 1] + set filename [lindex $args 0] + if { [info exists keys(-cell_name)] } { + set cell_name $keys(-cell_name) + } else { + set cell_name [get_name [[top_instance] cell]] + } set corner [parse_corner keys] write_timing_model_cmd $cell_name [file nativename $filename] $corner }