From aa904d90d4d6c342a580a897319c8e75492bb27d Mon Sep 17 00:00:00 2001 From: Sparsh Date: Wed, 3 Dec 2025 21:38:02 +0530 Subject: [PATCH 1/4] Introducing Kubemodel blog post Signed-off-by: Sparsh --- .../2025-12-03-introducing-kubemodel/index.md | 121 ++++++++++++++++++ blog/authors.yml | 6 + 2 files changed, 127 insertions(+) create mode 100644 blog/2025-12-03-introducing-kubemodel/index.md diff --git a/blog/2025-12-03-introducing-kubemodel/index.md b/blog/2025-12-03-introducing-kubemodel/index.md new file mode 100644 index 0000000..132cc4d --- /dev/null +++ b/blog/2025-12-03-introducing-kubemodel/index.md @@ -0,0 +1,121 @@ +--- +slug: introducing-kubemodel +title: "Introducing KubeModel: OpenCost's Next-Generation Data Model" +authors: [sparshraj] +tags: [kubemodel, Data Model 2.0, Kubernetes, UID, mentorship, OpenCost] +--- + +OpenCost is evolving. As Kubernetes environments grow in complexity with pods being recreated, names being reused, and resources constantly shifting, the need for a more robust, scalable data model has become clear. Today, we're excited to introduce **KubeModel**, the foundation of OpenCost's Data Model 2.0, designed to bring precision, efficiency, and reliability to Kubernetes cost tracking. + + + +## The Challenge: Tracking Resources in a Dynamic Environment + +Kubernetes is inherently dynamic. Pods come and go, deployments scale up and down, and resource names can be reused across recreation cycles. Traditional metric tracking that relies solely on resource names struggles in this environment: + +- **Name reuse**: When a pod is recreated with the same name, historical cost data can become ambiguous +- **Resource correlation**: Linking metrics across different time windows becomes unreliable +- **Debugging complexity**: Without stable identifiers, tracing cost anomalies back to specific resource instances is challenging + +KubeModel addresses these challenges head-on with a comprehensive approach to resource identification and tracking. + +## What is KubeModel? + +KubeModel is a new internal data model for Kubernetes resource tracking in OpenCost. It introduces a **flat architecture** with core resource types that mirror Kubernetes primitives: + +- **Cluster** - The top-level container +- **Namespace** - Logical resource groupings +- **Node** - Compute instances with CPU, RAM, and GPU details +- **Pod** - The fundamental deployment unit +- **Container** - Individual workload containers +- **Owner/Controller** - Deployments, StatefulSets, ReplicaSets, DaemonSets, Jobs +- **Service** - Network service abstractions +- **Volume & PVC** - Persistent storage resources +- **ResourceQuota** - Namespace resource limits and requests + +### Flat Architecture for Performance + +Unlike nested hierarchies, KubeModel maintains a **flat map-based structure** enabling O(1) lookups while preserving resource relationships through UIDs and references. This design choice prioritizes: + +- **Fast access**: Constant-time lookups regardless of cluster size +- **Clean relationships**: Resources reference each other via stable identifiers +- **Efficient serialization**: The flat structure translates well to binary formats + +## UID Support: The Heart of Data Model 2.0 + +The cornerstone of KubeModel is comprehensive **UID (Unique Identifier) support** across all Kubernetes resources. Every resource in Kubernetes has a UID - a stable, unique identifier that persists for the lifetime of that specific resource instance. + +### Enhanced Metric Tracking + +With UID support integrated into OpenCost's metrics, we now have: + +- **Stable resource identification** across queries, even when names are reused +- **Improved cost attribution** to specific resource instances rather than just names +- **Better multi-cluster support** by preventing resource name conflicts +- **Enhanced debugging** through stable identifiers throughout the resource lifecycle + +### Implementation Scope + +The UID implementation spans the entire OpenCost stack: + +- **61+ metric result types** enhanced with UID fields +- **30+ Prometheus queries** updated to include UID in aggregation +- **9 resource types** with comprehensive UID validation +- **31 metrics** covered by integration tests + +Resources enhanced include Pods, Deployments, StatefulSets, Services, Namespaces, Nodes, PersistentVolumes, PersistentVolumeClaims, Jobs, and ReplicaSets. + +## Binary Serialization with Bingen + +KubeModel introduces **bingen-annotated Go structs** enabling efficient binary serialization. Bingen is IBM Kubecost's internal tool for generating binary serialization code from annotated Go structs. This provides: + +- **Compact storage**: Binary formats are significantly smaller than JSON/YAML +- **Fast serialization/deserialization**: Critical for high-frequency metric collection +- **FinOps-agent integration**: Compatible with date-based storage hierarchies (YYYY/MM/DD) + +## Metric Hydration: Bridging Data Sources + +The **metric hydration** system populates KubeModelSet instances with data from various sources: + +- Prometheus metrics from the costmodel datasource +- Cluster cache transformations for real-time resource state +- Computed values like PublicIPSeconds per node for cloud cost attribution + +This creates a unified view of resource metrics that can be serialized, stored, and analyzed efficiently. + +## Integration Testing: Ensuring Reliability + +A robust data model needs comprehensive testing. The KubeModel work includes extensive integration tests validating: + +- **UID format compliance** against RFC 4122 UUID standards +- **Cross-window consistency** for stable infrastructure resources +- **Ephemeral resource handling** - recognizing that pods may be recreated between time windows +- **Metric emission verification** across 31 metrics and 9 resource types + +These tests run across multiple time windows (1h, 6h, 24h) to ensure consistency and catch edge cases in real-world scenarios. + +## The Road Ahead + +KubeModel represents a significant step forward for OpenCost. The foundation is being laid through several contributions: + +1. **Core resource types and KubeModelSet** - The fundamental data structures +2. **UID support across all metrics** - Stable resource identification +3. **Binary serialization pipeline** - Efficient storage and transmission +4. **ResourceQuota integration** - Tracking namespace-level resource constraints +5. **Comprehensive integration tests** - Ensuring reliability at scale +6. **S3 storage support** - Storing compressed KubeModel entries in S3 for scalable, durable, and cost-effective long-term data retention + +This work is part of a broader effort to modernize OpenCost's architecture, making it more capable of handling the demands of enterprise Kubernetes environments. + +## Get Involved + +KubeModel is being developed in the open, and we welcome contributions. Check out the ongoing work: + +- [Core KubeModel Introduction](https://github.com/opencost/opencost/pull/3472) +- [Flat Architecture with Binary Serialization](https://github.com/opencost/opencost/pull/3443) +- [UID Support for K8s Resource Metrics](https://github.com/opencost/opencost/pull/3366) +- [ResourceQuotas Support](https://github.com/opencost/opencost/pull/3435) + +--- + +*KubeModel is the next evolution of OpenCost's data infrastructure. As we continue building out Data Model 2.0, we're excited to deliver more accurate, efficient, and reliable Kubernetes cost tracking for the community.* \ No newline at end of file diff --git a/blog/authors.yml b/blog/authors.yml index a1b26c3..0659092 100644 --- a/blog/authors.yml +++ b/blog/authors.yml @@ -45,3 +45,9 @@ mewzherder: title: Kubecost Team url: https://github.com/mewzherder image_url: https://avatars.githubusercontent.com/u/7811869?v=4 + +sparshraj: + name: Sparsh Raj + title: LFX Fall 2025 Mentee @ OpenCost + url: https://github.com/spa-raj + image_url: https://avatars.githubusercontent.com/u/49100336?v=4 From 0e9d44fd90f233196433f7fa3334c78ee6472d27 Mon Sep 17 00:00:00 2001 From: Sparsh Date: Wed, 3 Dec 2025 21:47:23 +0530 Subject: [PATCH 2/4] Added Acknowledgements Signed-off-by: Sparsh --- blog/2025-12-03-introducing-kubemodel/index.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/blog/2025-12-03-introducing-kubemodel/index.md b/blog/2025-12-03-introducing-kubemodel/index.md index 132cc4d..10d8473 100644 --- a/blog/2025-12-03-introducing-kubemodel/index.md +++ b/blog/2025-12-03-introducing-kubemodel/index.md @@ -5,6 +5,8 @@ authors: [sparshraj] tags: [kubemodel, Data Model 2.0, Kubernetes, UID, mentorship, OpenCost] --- +*This project was initiated as part of the LFX Fall 2025 mentorship program at OpenCost and development is ongoing.* + OpenCost is evolving. As Kubernetes environments grow in complexity with pods being recreated, names being reused, and resources constantly shifting, the need for a more robust, scalable data model has become clear. Today, we're excited to introduce **KubeModel**, the foundation of OpenCost's Data Model 2.0, designed to bring precision, efficiency, and reliability to Kubernetes cost tracking. @@ -118,4 +120,8 @@ KubeModel is being developed in the open, and we welcome contributions. Check ou --- -*KubeModel is the next evolution of OpenCost's data infrastructure. As we continue building out Data Model 2.0, we're excited to deliver more accurate, efficient, and reliable Kubernetes cost tracking for the community.* \ No newline at end of file +*KubeModel is the next evolution of OpenCost's data infrastructure. As we continue building out Data Model 2.0, we're excited to deliver more accurate, efficient, and reliable Kubernetes cost tracking for the community.* + +## Acknowledgments + +A special thanks to my mentors for their guidance and support throughout this project: [Alex Meijer](https://github.com/ameijer), [Sean Holcomb](https://github.com/Sean-Holcomb), and [Niko Kovacevic](https://github.com/nikovacevic). \ No newline at end of file From df9bd9fb70d076a1d1d6faa127c2fc29ee60039d Mon Sep 17 00:00:00 2001 From: Sparsh Date: Tue, 9 Dec 2025 12:50:14 +0530 Subject: [PATCH 3/4] Update Introducing KubeModel blog post Signed-off-by: Sparsh --- .../img/uid_tracking_metrics.jpg | Bin 0 -> 179441 bytes .../index.md | 117 +++++++++++++----- 2 files changed, 88 insertions(+), 29 deletions(-) create mode 100644 blog/2025-12-09-introducing-kubemodel/img/uid_tracking_metrics.jpg rename blog/{2025-12-03-introducing-kubemodel => 2025-12-09-introducing-kubemodel}/index.md (63%) diff --git a/blog/2025-12-09-introducing-kubemodel/img/uid_tracking_metrics.jpg b/blog/2025-12-09-introducing-kubemodel/img/uid_tracking_metrics.jpg new file mode 100644 index 0000000000000000000000000000000000000000..919d04b928b4a4a272c2cc21ef3d5a573a425b15 GIT binary patch literal 179441 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%0A|T zQuK}tCA9YvN{j=!2V@8EU`JQ4O!_7S`4~xu5B|`N^N7P;Qr2B_pzLi#1J7q3%V#(# z$t1>x&wbz)so$Owv{bmPU?8LZcbJ7 zZ>J8k>91^z%;>H(AzU*y39_zr-hDN@Vt2qYe4^sL;t(l?{-_dj)O$}sRQj#ErqS=q z0PalekV5@jckel?$0?59{TMcTf8$bt2oYrt(TgXuP%cY8H4aSq3&9e%HApHKx8w7c zil#fZ;gf}T`ni<7iVRjZlY)gm2fRwWA@Xgp&5d~}#4_@8Et%hZ#O z=d&N4QRUBvA8x)+T{YV5B|H%VvjV9JRNE_grDh%%`vhe-4~N+H=XR7{ypJ^Ef}&kk zZl}2{-}*D28`g{ums1VV#O>gf@(~a+{zy=7{>H4t{lO!a&3RbSteHC?qr|O8BiGRG z84rVUVO5mLY-E!9tMbh6(Mz`e9kkdXuuYY8)cijn_OqYorno>w#&qEa1WJ2HJ5lN- zoi+CLbPH^lEhl2?yz~EXB=7$~N&aUh@ny}f)bT$cci3|o{1WN;XQp$VUBJOkp7^Fi zD5fpaM$%W?o(zE!T#kN8%D@5o_o}rgs&G39ezRMz4qCX0 zBGK~m-=(sQl||Y3etwc-r#v+#kP`gv&ne)#xKX#MSkV!Q8Y;c!Q2PKtxD%;OYW@jy|Ujc9-Nhqee0KU-pv!>6f}LlL?mRC+Vx zMp5knf-&+SyV?EQ=qw0J4PWoCew4Y=4<#Ac5q|sX-DG-qTGyWQ9+&U-At_O5x`O8| zQ6$lr?_f@#;5L%mBP?R#_K?Hy)mC`KBKym}W%fX;sjN8z)(5;e*eXrinqHzh)?xtD zl)y0;v}~;*crnh2xwd}``{$9S?ykD*I<4xW37RwWvqJtamioe3rl~Y^5bg-joD>K0 zoeNtNS`Kardw1|V9vM^WaJp{=bzczR(9>thFQO0X-W4oMkoO9s)qRRyuVTx_?>-5r zdlqlmC?C(FO&m@#%-(|LU={S+o?4CA-qZQ!F{h?nbA7Zov3jX*(jriydLSoINXrny z!*WGa40ET6J+aqI-`ifQRJ%l2n2G10uFh zi+n*@Ag|!U6mAX#2kE;PWCm`h#?~KPwv<|DOZZ~n72|S9iBN}AI`s*L$%8!Hu74`t zOBTvO1-M+RhOeF?ev)ETuzMyg>`&%f^{uNIh~Ir(LHHyXl?^n{P9x>d*%f%Nb+k#* zie1*ZboS;Bwj1!Dh&X3zf+EF8+i#>-MT&VOG)hbjl`yUz*Q#R-$L2_6yDztYXd}@( zSI4T6VwpCdGPrTnF0}oOXTZYV52Aj%fgQ;48sA_>`4>;}{6)c(p!^d7JEABCqj>)> zk|L|GSi63^I~|sa+IsMkJ@thg5m<~DX%K5`uC))Pu~7(zr>GGv0`LbH=%?D z9E=g5B{ia@r9C06OWTc_&@F4LP_ii5{vk4TK6`(g9wZDG8KSP3h7qqyjof`mkSzDZ58E&>+9&{IzJyZ}p>Pi;{B z1BCtWEMlJ?#;0shIiOFpIekC+@?nLay7C(NvF?h0c41D5d*9Esmw6s*V#%jhZ9^Nd zwW4O-QaLA54%csAguwi-qu69&8maQ*0h9 zV6W-dsAG+$tivJTTA@qb{O6;qkr8WZMSpE3bfH@eQBeFMAOAe((DWjnMhM7G6Jq%3 zd?57+$}fS;C)bXr-z6~i@={^qmYjpo^lJcuyHnqWiZ2_+V=tU=kkCUs4UPNQz=)ZK z43($J^QoFMk-7{a)rHNdb@1!uCPfDNd;!RO>Xh}A6tZ{E%62m@k*1h}3B$}~ccL25 z0aUmf`I!WsKOezmXNjWuFXz1ej*j%B>tioX=*`YMeGJF9GgCHIJA zpDMCa+07HLQaUvrOsvq+;+jq6KNE5Bbx0q&RUgUOMIzwLD3JS5p#HejfDPS#vc~|C zQS%BcpjrVdvddPY;mq#7dPV#~P%xvYhs|Ac>0Y(X_O)i0A zPATK4Hw6q4_0#ev?VJ>GeFPWJw+tv*xHtHp$ur}eRQnzyOv98FZqMlwsBvhP|@#}(N(d5|s4(H;hD<@0S0 z2?ujy>An8E(W!kDyUN9o#?TTP7vpyYYy%&nMUVm*7b5Cd{`+Ep;lRisn)>NF&4U5~ z@1>J-6x0q=de^0?V$@FP3JVsV*jh&&bUEr3d|}a+%5@gG=KzeY(jVqgysYHq!>=Nd z<+E^qq60-J)crbg|HJ!?huX7!A=BSYe@bH$TWuBcz^{mm&M!6*ka|teEg0UA7^}c1 zX1QEsaGjtz$y2s7S!O_S$ZYLBC&yv6lf)3w2iU*O$%}HgpIyZxzDHhY!>ZcOS@ONu zTRJu;h2f6S7quxGmNYkKIP!Symy1{~2YLb;6CK-siKNDp7myMDVe$!{6t+i-c~Mqi z^l81P5SuqAOj)E0_F{14>{`_L+rE%U2L?=S8obQThBP*GowII(jDy^HWicPVS9TcA zIg~iR^@=cKkol(Mke7~ePZF1?eC&8b@P1|nozw?-e3b|3`@h~(k>sQ@T3`;=)x z!q|c9tH9nzU(O$JhiA?|$9qTSE!#W68w`-MM{)uMjszbRE>>;6zu{VNfBA^>ZPebQ zK>j1OrW5XBKL}S%wL&p3mL=(9>bGE(Eg7zBB;Y>OJ^Lz{nk#P@KGfSpY#l_UWh%4j z_+X!nJnD_VwR~G{KWYl;E!B?Eq=<~%Kvw_Ge&TDqJBctfY}cb;(Y=uw!(NGqICS&y zk?f%0>mQ4G_kBu09V=?IrPz4r1Lu|a@_;sUw1*nB`^#;z)!ynvp_;CoyC`L}EHGn8RuRMnDejK93We zODuX1`3}52_aoxHd9BF-JJ0tAcm`TlI$)`M#U7n0gyE9KpC!{pfit4W?;z}K^gyX3 z)d`ZPwIxl2VE%Key>2)Ow=)KCRs z2!SLKJ?EnEjvKbRVAmsV3$YrPdB!yDl%w2Z7~1o@r^Ae*pFdM+r##=N=0u^=(l!}+ zWd^2TWE^J_@YzR%v%t`SofEVEf}_9m5Ke5lxkP4{7^ocUDk^aS=lEaSYAHM0Bjqof zjrH+9ihPPasUf(0{$Y>G0E3fzucB!Ds!1NF3KKn0C@9h_(nTNGmy-+2?Wt-smb&3AOK{vSYu>Z2o|h-t2y``|<@8V6PO#+(e9K?G=i9D!wMGvVBAVl3llX5J=sf%G2IYMRJW z$sF_y^@y9(_Yb5c#D=>DP);5?diW_P*2S$xeBfa)!4fS?=xy{s<+|B&aanz1QeZAx zB?e#XXu_JoN#Wn=_|l;IFWjzL`DYL~WsLQ$OJtoG@w`+Za2<`u9{cx3R55QQkLO&a zdTo!kR?N>0RZ;Dq|}CCQQWpygr(yskE>k9 z^4-R1RKoUGrQp2m$4u_J;J$YykJ!iV85>s~&{t5mrYE@o9N!5QbOcmG;klmNHtxAd zlOAn7m$^MGeDO0a-9&nUgxU&(pY0Ne4f3-jJy7nZiY~!(UV4}L&c?NmRGI1!b%G0e z0mOekzc&J)$k+gIc;?;?{Q05_h~wY`-IiZZY{xj?j?nLz`qF(gFXR74b@Hysld}Nl zD!ca;ypE$UUu*K>Ku#rC?|Hm%u+H+h8u4IATT3W*mM?%l#z}4fF3Scwf|1Z^Y*nbHt{I^fu|LW8Ec8L(sC|{}5q5Dw(;Q{mM zPK>yztw?{LT%WJ9@=9Q!@1nv&QlF(kS4ZQ{{Vjkas4Yebv>k^+vd;F}t}bA` z(cV{t@U?$H8UDXRnzc)+MM=89FeZA(FY{8P&v4XX+{L9Ouk;!mz<(~tc@V!Q`&JJqt6oPy5!rbC5Pk}$^|Q&t}@XfEuL|K z0l_7EVlAlBalwm@Z#l-{Z-YWcUE1N&*RLUZ+_?TsF36TCD8fiLB0v1xrX5rx1!(E*G>0>IL@<)omVW);A>q9 zU@l1DurW5+(P};&4idKWoe4FM3rHi?5C#}ms#i*a>C%9Qvvxu3)?iLH>kKX^zooTd z%2DF3SYp8Qr{g>}?kh1r+y!7dFzKT{dp%3= zgmdh0N1hy2#YY=TJOZ$!nAT4BZQEs3%WnKJ;;3IIWHxXT~*o$jt-ohg8w%{c!98jV~q zeY%(Itc;<{(8U?5uc?TXW%8|Eb-SMS2WvG?JCZ{NntQcz0@<{+X+autZW;~$~;&p4p*9Bz`c$fDqS}$In*c++2_fuvrV~{zi0dD=K2tJF=%@$XA@Jf_OWXXKuU68)suuu9|3pDtlQlw zUOk(sSOEk*BDVL9YK~RmRHn%j$f3}besx=^{v<$PpNDjx%KxX~!V)MhxU%|94z0R z{@2k9Ev|zq#NO$;2^taiOYDo?`Pv&HB%h|9g0N4p5CA!28n&}OhPrb?y@-F>Gw4 z@Zo&rUIo3KD#fqFbfm2_#*S|N7DatC9^fg1KUd8emw zWU0AA&E*N0J;|Ai5#!V0Ge+R`n6ALaw%RsV*1-21cPlp!b@x$p6Ovtba`^W-oRHHU@r-QG9ozuo!se`0O_|52Y`v+5{_96TWe4n= z|7rsMuOAJvp`re(#lO4#w{HJE!TxOy|DRYB#JHYyUr`CB8)Vld^Yw%tv`0Q*+QB;g z+<>FaWm`J1_PMxgiOBDb4@eNuxw{R#U)YW&&F)l zpL^lc0GkhhgK)5Oe_ZnqsP8x6ypeQ~KzObZ^YH z>V@>79&DvSy0?Mq@6)9J)y4^ElXc}FeYBXhp#(e`S-1-b5U_F&Nyv$@q3gK76Fy}E z9PiKjTIZF3r|9&T=KFmwvsU`*;2%(L!`pueuF(Z!6sz9Ic#rIdEeHdrWwmQnLDM6B z*h*cQPJ}4aEbLz`ayR^S?=E3i2gTBB!hj=|pY?EOzg3hQFZpRt1hxr&4+v2EpYG$N zCae<*IDCd`cjwbX<6ve#?5PSM{}-Kw0@AW5KOm5}k_*0n(b#r>_1A?}Xoz@u3a;>1 zCcOW8C6o^K8+5<@nn^{n-T+ z7;?-t@WcK#|bepkRL; ze$xm0?ce_zf;Vi_)CFJ=TLSv}>vHS^e*0gYh5|08^e;f(xW9CB(f{6U42lFFf`Y99 z{V)MO=wIe`8?aqwe>T0^1i0^`f5%O@mkM<3Dn_#Y06_&45#Cw+i&4*wZ2Qeb|8PTp zui`cZ45{Pdo%AVB11P6WsPrOatI7~@@B z8z7$b-*4aix90!j10*J?E4TtxA_u4|>gf9IMcXYd&%>=L>cyvZxWhl7VGY<3Ft&9F zR)nbKtki$BTe*JgQGSa{cy|tnN*Eys2*axZ=(rESg6e5$3<1I#(D%1)I>I_N;ILo1 zK$+K=zYe+5Mb<5lx z-BI=AMC)DB|7TlZGCY0(OjTLn?C|$XwQI$TnA<19fK4Gw?O&djbzJyL1J8EIBHG7B zS&RYiI)wf>&K{s}lf!22IjAB;bVBd=DPQ=5kiw(~Op zm{N)F-}c5uTENN7|Cj4I?!O(Re|w4lc9s8qUI0!-|8K~SoQOS#^IbuDOv5e+j^8&y zzU);SIujqszy_VR%;#8x`yNje{oRl$}Kplvqzb+afQm7j_IZBV7DBz!|YaBz6& zDn=tv5@Km|e7n3)E>tmwr*mxQG9uakzJ>vtD`{0b@TN+D*XaE8oLDy2M9Q+qPvv_q=sIcgECWIR2gVL_@OzMKZcmd-1bpSB?}zC~#h^L`*350|~?pxLu7UJifQi?{g3 zI`S!nKfd(4$--#_8z=PgrdsHi-YTJ{f8Y;$!q@r0$a8nc4O9f95oE)$uXH06o0A>B zf8bMHyP-lr*3voV0{Wov9_}0qKAd=BON(bN8ZUe|<^x3=Ievt7A(eCV_fl>vYooW8 z9&uI11-*|s!izZ@0lTct{y~IQH%(=S&Y6?s4`_buW@56xV7^tyA|q?@SZjy=addAQ ztL^gPty3AN_-3^c%;)dBoqQ)Vc@Tdn;?e)1r3QOAWSzIFh4OE!l z=cDr)Th0_OZ(ZL-kyWT?|6EONiH@OY5G%xLQu3F?ID1Vm1=qT;|+!9D;>wY+nDqnCC*oT^_6dQ8X#X|>6 z4mJblBsOZLsX$w{aKi)YKT7$+^TH3UMBGA_LqkN-&F7az9&q71CcVbV`xW7S|4i$p zrZ&9q>X^9f%ijvsO6=A377os=q1lz~ba{7Z2Eqm`VR1}$^TS?lV8-5G5+?7ZRQbNK zI*>qw_dcf=d&C5}`r%kl47O*pF?2Buo&EI8*YGKaufNT3fI{dj|1JeqI^-?t} z%?|dHl?Dm-Qn+|0p=AEU*2B&mS82g3Maz%^i>~rP-o6%)n}DuO_O*>-{RtGFm{uc< z9L==H$u-|58c^8T6xl8wT6=h5?56%jaKR5kZK332`Mf&el#wL44-Rr8)iprj0G@Ge zf)jaO)!d%F0d?GC3^SWV*4^bi*dqnYsoYv*cIIt6|BwTt`Dx5$b>s#B3Z~2^5CfLg zk4%p9DrG-PAiQ?P-aXKyAAHZQM3`)^3g*3qlrHdJzx1HCs;W@qg8&Bu?dBr4`Z%BwwjhT9m`~DQ0xzu0pO%(i;flX zyKvgwYjQh6oK!!pmqPnKgd)k1bMA`vHVtrEi5FrXnY7eq&}c4<;HHP&fBb&(9xGz6OD@;jRJo~c63V^R;v=!^Xny9bwaPHIw2>(aH@%jJZ=8^w z$LVqOk;NO!+c25Gi3ue8!nB3WnlK+Ifr|KjFYn}DD^$I>EA-0IBImFtwvPd|i}Q9f z0IS+v>CeFhhF=q}S3gnj!RJNAtuU7Z6^yy_Qo z9~(ZxS~Us#VR~s1=I=%51soB`_z5n@OL4;MbNy6#)S+Dq?Pr88+qkiD%q6rh_~OG? z)hI`<336e+kEi53pMaw_&Lw@6beE9AhD=L}>Lk1zVY{uaxrQDR9{m&EA(~rH6Gevf z{;E2;fvman%OyzRSO{%Bwcw6Z8k5J~Z7i31*y^r>qAR&PjkA#9lX~CI zIyL?f5a>Fk8*oeZ*^8rO$SkhsA<-#qc#}0fBimARA)bIkYs;lnY+Yb@(I3 zzvlI;f#(asxsjiize1e${V;*kg`v@=ZP_7j!J>Do8b0j9JXiE(oe~DD6%VcJXipWa zn)EGCi8Z+~ASqkc|6_FTwqf|2Iipn&A+Ds_{_82aFdli2#+KeN^WweBV}myx-Hflo zX)T>)V_!;QYxI~wgoWySN0xdL8L9P|U$Avz;k5dk_47K_(WD^)f918pc!h=~|7s}Ktr(Y##;@Tn_t%H5gAsUi&(o{`eX-cD^WQj5NH#$hP2nIsh!L zZ0IRDjnps#Lwr(u-_Qc+QzOA91qME$RcuuSzgtVvtK)Z>{Zoou7Jo1^G&Xu&&6sX&+io70GIokpT9A=rcS{iW zbA&T~@CrOEhqV=_RkpQN8OT2>I%aPnD#l@>J0-B+#I{k5(93_uuQ<%8J;+Oq1um5E zEVWlOm-hq`dGp=#W{opBpYC3>*vc8k_w?V@V;3^TgAIzER{fHv5F$K0j0nVJL+0;d z^I*PLEo!7_gX6~BKh{XdLdt&R+dnSWUwp?vz{FeCAOb2bE9?p&u9%Q8b#f9ack=M3 zahRA(cLibk@%D@KZ$#KV&a{;G(73i1ufL!*xP1_Kkm4x#VmipjFLW3rOJ=HmT(vv@ zUFU4Cb^s#5=*_*P#~I-t$V`X{o@i9VSf}msar4W(C4IYJ^H`a-DARAV+`J8qm4!<~ zkhOj2izR^t@zDBO<*zCA;o?FYSF+OXAaRR8QFac~9x8V+-S9FvH0bFgs#mJcrD*6E z@S(oSUkH5hw^Sd#pGfcuE+&8*!8`+99!BWBynjuOQr-@7>uYE5a1r??buICyP1*8F zz5`GX(t6RGM@O&bH*$UHxuqNH*mH|(akb+Z^Xm!Ky^Y#h(YGAc$6F;akBvEeW&}c<&WiyR(6rKDLn4viwkd_^UKGi2X&xFyBJWp8SXKz``k<0K-Z?f zwAb^ZF+LUP&d{%pX7iV;?9ebK_*SeCYoKR0&w`l#6a8_f;qyDIfmJqXcZ+iS>fgTB z@Dc;C9myvFEXg7o1+7nv!M+4JS?Z#=?As-hEl9YRWZr8II~MCNk3w)8R?VE*k3t3L zf#{192wrwQO`qX@9 zrzFH-MX*jm>pJItC$2L(uI>QMRg(H>!{~Fg9u1R>Y;V}R$rMvXK}Err&uiS{@Ehbv z0)1^5&Ltw&;qHdiU-h;UOe=uO0Nwj9wk}1C)UgD~TBz;Pv~(}WSX#4BOBEvX7Ig-YUIn?kVTxGARzV|8QISIq`o@+qR!AtBsKlY6=(r*6*< zcV!a4f)2~l=3$8v@6R9B`!Hjj3A{<&>uHk67L@X5?UtWTL+Nlfrx_GKWLjjW>Zd;# zWX{t1kGR-sDdu;)jH^cvmZx=~lPLn^sQf1{Y4+?v5Fq0g88v$pWO#a&kq>&ZIVs-49~x^Vqk(AD32zx3~|=j;JX(bORRd0&kPjO zQt(5(S*l-ui8(Bn&C)>D9a;z4x6)4*OrBpKrLBvWskBt})$meViqIUp2GmTnd_Hdg z3@jjjtx3E^S0{Q%ONl3&?;Z3F=6lfQ&sHA>KV1%cw5HEQaoap+`SiYBzC;?v+bwHN z)c=6UR}2jI;`)jdm3!>DM#q|Bo6b7=5H?vHZ;nS(+_2K^JOnrTS>w0qg)t4$umX@mTRv09mT`##KxAJ*;SMHw{_!rND5}L~w&sMGQMyV4xqzdju+5 zFt4)Sg85<+n$wg#x7A#&*OyF`4=%g^dlc=i;FZk(ROb2BJN6(7r zruDKZE4a0DeoiXMq?>SnyWjNwaH5&H@_es?tC)R5^fR6s`})i7AIaTw2eCXCQeCGU zgCY7)IgN;liGob!K8555#&-2w&@-ksbJYoeB`Bd>Y-sQ4nal^|aTJB}*yD=Yy8@f( zjUwo>W|BJoGEk`^7Mp*;brt>9RHvdgpAIr+82k-I;0%ajlfkr5qxHw~Ej`H@WR=Pr zPumY zLp50`ZZ?q*_{LM^=U)k*E_ZoY(u7LtyRDR7(B_)R8hF zppjK=k{$Hfo|5R(#|CtfU85e*|6i`o`R`ZWkp34POQlfhD(o)z1{VbNXyl2|eRDi$ z*gn8~;A;T!ig~`qhDOPRE-4~f_BH~vznUc{k95B?mNiFAF-EQW}wfy_`1G2KXqxfrRV}#zp zLANT+GfBO;K)dkx`Cn$z~}EDUPwxJ`${Ld`O}6B z3&)S2BX!#t+{X;gZrM&zwG}Ya zsL?E=Y3l@Kp(^h$h-dLK25c4_6dJ$c+ll=H%Pa~IjcJ2h+ze(_KL+D}R9@3@=%R=Z zoKOKdKviE`06Yeo{8c_Nh$Lj{&Y9<~6Y^3QFEsHCq*R5WtNJ~VU#ZO;Fl2CAW^S?8 zf}<)18&;v%wBBR`z_o4s&8HQ1G=~--N@>|1u-p`R*pHrdLu%zEsr3azTY-L^SM%;f zVy!aNbu=IaA68bu6fckbMO%Z6c>6e?;QQs*?=;calcd>hyhTN}8*tftfrHbGnE@>j z)gZZUob2Ye|5@Zj56Rba@IxE$mvCkrCX>uH*&nuqn$y$CpRD5t z1^Ho2Zwqi%71T*YU#JX<_EC^c_pN_@0`+jjYVA{EDAjrOdXG`F{-zhyemNkxJ@uFG z;5k#PLvk$*4mH-H@Emj58XoVrjPt@fH*P=QWA`}0N_qizhaO>8_gK=xqt1WDqnQ*^ zu(*whtk*X<9okgZRmB@4FSjCl_NimLwD$(EwjO__uq34JOJE zEi!_qJ($bM$tB_n3)-FK7?zT>hDA_11J;m2^5GOB6J~$*_UJ;clb$-Ht#&nn2bIBP_2`VOwH^hyru97pW z!d4m7sncqc4OEhU6mp8CER-8uN>Gp`Gplr!ZDCYiuId1&1=Xna14A9L*m!wZpA=f?m)QuPn_EY|C;s#Z@RM06I)C z@RVYhs@ZpOf`~E8Bz(dZW?c-nUAaAcbnW&&20U}XQ=mDn&@EyDP^UJI1wHlLp)co8 z@!ucJaEP_kIOnqAQZo-U_-;hv=K7cK8AP?s9TtLP7*=0@9h(9{_`Y5|p>5W^<&heyPfp(Qrdg_aeEtNdzVtceNeP@MjHlbY8 ziP(x7*}c>Y2n8NwdmiV>TL8yrnu0;&!R%3L%&PH$cu{s;x1uRo$1b-aDos=t#gq7o zbv9zFC|gYLNLQm~n)_l%oJFl-z|7i>#zfC27O$RGhPCp(L`>4U<0G0=0d>rIcN>X- zANA*pQQq4bQS%~WyOh`4qn4!EMBg9bNXlXdOGe2FluL{Wq{v|52P?6dG-HjBnp~ zvuuIEby&C8`z2`T=}R4~)7c}=IU2OM>ls3M`eWGBe?URkwDnUpJWsv7lq#n#$R~Fu ztKg~n-Nk(>ErjTBmF(*j`3W8m2(@ULLn-&v6Te#H1L{D9b!=ew1L`E*1kHGVGEy*P zo6%1(wEaH7K1MLh{|h8yiL6@bX8S$#5SGWSz{lVabMISeoBgPXTHu$(@yK!-it)3u z8>i;Zp9FKE9fteni!!kYF+GAb%JUJhOpH?FR5H?#&(o%cYS-_y=&g7{b%ZXe%wVB zP!ufgYh6pu^E|$J(s^daf3eRGl;$PgQggFyXI1ZjG|24)4-8BWhq-^PNlKwR0!eQ8 zTvXae0QOxme*K&k_|c{yl(-{i5uR@$X)u;9+Uu`hHkS3iwr#$Fz9?R+{-9OVB7r^G z3?sU-%h_2 z6mE;bDCIamGZe^Z#}n| zLcME&sANz0Nfpc1uz}L@eFkUX=qFoG%+IN{j?PjT2jj-m3I~rK&vF;`sKp>BPr25@ z->GD(@*`tvM|^9GX~$*pvc;6`!i*NLty27AqeW(MMDfcz}89Q57Jf{*)|9ob}e zT!*L4a9Ttvn{Ta07>%X7=K!DjOGkHfWj2_i>~63XO4*J5i&JnB+UEq}>*4a6eVG1H zWT~fzYK!fA!YWQ43T-z!4>2^MhS5FmqvE{VwWS3GhusqGmu2xHcOc=HlNL<9@Xe zS8K{@jUn2+tm4l5R<(H(RQ0^Ax~C?SQZ5lxD~CbgP`dKPp|byQFoPL*7zQ{ygqA%z z%9KHs(L{?@wO2gt{Rob>fi(9bO<~sfsV@d*!1cI7ORD?DKcid|$?7Wo zrkgpYm*p~mh&+gEL`8&rAf`-5n+aJ7r{YdoW!L)J{rBN)l1gx=7<$Dhyq)j5=c6e8 zjHqDYSY_ixg&bpC)N8iE=1Q9giky08>-kc@QeB;4w$S%+%0sU^mNP6-z*27LjcsXw z`#xuOv;iKYO)lJ4>gSRly0%_BO3>*54!OWS3ayPda_E6s2Ih$T|DK>hk(~Q{**z>avS6v;!_o_ne5vQ zXrNR3qU=$&Dl~o(fh+tff`)ao)3lq!11y29Zpc0V4mUhlD`<8vOTjA?PY+vk`a#pC zMdB*uvHX1sTdNoNn1E`3MA1=XOM|<)>NBifRm#<^X(Q6&{-(M$Mz!pt$lU^~1WGg5 z4O}>0*TWgjj@wINrd(})M?RPOk|u#l=507}pyk`x`~{RWb3F9ltSO=iy##5l{#4q-SQv{b?T-mX3Zn=k=iAA?i4G@*2%Jn z=}f73(4017!G!(AIhNcrfuCfWI1&KYx@GGYsc#OP_spUWm8=B{$7J%6WVS<;A5r6N z1V6xgPi)JtRun91K=0lnPAMtm{dxd&fJ?zsgwx$CXvQ|i-0M?EdLPa{7P02Z^wQf}U3jlZKw`JxUdeP8bOR*MCJW}Gzz-Y671ae9pU zt*=n`-d$zemUAs%myvLv5q~*z%&($u{zL|i+<0W4x$arO8JT5HstMauC&C*ETE={$ zNZPGe6}QY^vJoPh-d(Wxrp?iqkD8@SaD;3>3{&LWdi+$$2iKGHG5h-KPOtyDz_78& z_$7b&`v?v4QJw{ptIY|-WpppV%Y9$nzlmmkGVB-^Mj9HUpCa4r{85%5LgF|BSrmU_ zS^@nCE!-|(opGkXXUV*_I&{;vSv^wrH>rzhLa>5443Wc-@~yMh!9gOiTCe^@_OyWC8CwD~e{-VmW;!IfrODb{4fIIaq7*O;Z`Sy7a1ErsqaMgQHmup@`^}Uweh} z3ph4v!**lYzph_mFgavzpu`I$L414)`*UH|ntT~)xr8R#v|m4-nGU?nb%I{*MQmB+ zV0H9gC}FoBUUpQo>PXXst*#imnKqfSNF!o7-}K$(!QpTjCKsKqA&nPQ`o-2mXaL+# zmlfXhD0S7Re)YBc5W+k6Y_e;D2^7TNxJ%;;KF`1&E!G)osF`Lxq>fkkV!a>=p8#ns zO;vg_)W10l4j}183{d2urhMnAe>O+!D{iPbhU_orUzu7#36q6tG3p=(lA>}amUldP z8oqD7u4H9;Ymnp7S^N-G2hH$55-QDe>D#=LSG1H#UR@MhzZQ}jj|+V6XN&F`shT{G z@#3h?l9X=cVU_1I}RCw{W5s_$>>K2R!h(B-Mh_)U?>C~G{dzGtpZ?o10}EmWrJbIf#IFTcnJwQAq(WkWBH2;FYtv+dEa%~7UX0? zYf^xXuMN1Exw*4DQ*D*YsKw$ItG8!BF~d5urV^>v+@>CFqNQ)Dj!DYggn2RWOl!8y z+=08)!=q#m=Bp|Pr1JV6AKzDrZ0gk|$cNq2)IyJ9KffRW1*dL93FX_)Wz0O6*6F?N zx@d5I$y5eYzP1`IyM5(Gw`eqz)^G2d-=ZPdb4l(w?wF{u{pgM@e9%10HIQC(V{)Jn zq5?Yd+1s?R+HkC)+D&Le$?|^Lw3kDP!ICH-^CHeZdf+cWtwJ#OCZ#)~c)f$5qe3a= zzr1CaZLF;YgAr*&r~HHpOV2){(=}p!@Y6Z&y_@{r@WS9qOI3RFo_2l!7FC9X)ih~m zrb#IQaNjhjnRz$8{xro`aRuqL@=DUh8H~bHU8Gx>Nw?(=EnKzbVXUC}3t-on$~^rp zfjZ!=kY)%x>IuJJMI4GXVB1cqmMsZA;^KnXYMDfAEcR^=i+Af`zLqK_s$j)g=?>Ts z6gyga7@|$hBtpFG zvrxBJV}1Pbo<^bB^ou(2B@JfHHE-D$H?05Z=C*$r^8PoI+dq75u%rU>w}4JpH)S7X z)Gule^A}2g0MZn;-gJN9(SgJg!s8AI{X2pbt+E5j3-|+{MoRqq`~Du6zu$wu>*MeF z;O}|z@4oPNzx;cB@b|ju|Ce zX^K$eT+_IT`^kWJVtFT!<5wPdFPXV?KY5;hox}^(`1=rXuFW&q54ztK+M(6BFQP|q z`G0QY<=T)w!$Sle{@bGwR$eHSIA3;Fk!=N$3#vCoYDL8A{o9wmoGvZPS#rT7;&R zzdc)IGd#XCg$2^9NZ&oZ4PfZ90ft zH0PzOMt{mT1UUouO1G8&6RmR`7qrlKhVKwSkyVVGuY_>p?3fFPnmcJVWS+gNJ#< zJZsN84ltkA(E&xXWTI*!@6YV7s(z6JzW+(&hWZ*^I8>r=PgAFTZRt?m`T4E~;*x2< z?*flmq)@_Y*(xRZ?i}&^ESRXg#>paX5AWA+Iw^!|EU1b57`xAhxbg$qm=0#tEEow*yhyUKykt9d2qJ`Q zyX?k*g=8`s{Q$dc!eJ~uG8o@hsWJHI^j%XMXod>QB2ErzFlVQHs4Tvv{F|~gCLhj$ z$g8}{JwBIxSVKdwbWQ!yYktfig*hft`8gIl{oZ<9qEVzkClP%5ysE{2M)ashh;$qN z2~SJ?|5-Kdz=D+(zvv`R$?AwVlqF~U5&08_krh=}+p5h+zd&gliDIT=}$tyxUUm+Z?I zW^tpuM9f%0TLf0Tm#4*76PqShW=k=aeLySOLcbUBBLODUI(Lw;<9c0E+w$I*kGZLz zW$!c52gKdcvQmp-H#Ykl^Q#-W<@}-uS2o3-6U%%`h9lq;@sT4v3PD8L(Yz07Gtl0Y zZTt z6OI8qDEqIv0BZ?jODAB79Q{bTBvYrDG|^s~K*-p5UVQ_YU{kCW1l!S~v8K`%7rReE zEB^GPPLNW#ynh{F*@%v=dUVD;Cqb^2)f32|qD$C8-dta+yJ!z&1x5u^(^iBwHvd9@ zOW~hncf(h;qZNDMurW=7Q-#tc-P`$6=PJjs@~|fgq@CpRo^#mV zs2@Ro@#^PubUa<@vHnS8L`H6?gsZA2-z|xi##xWPuMm`YJ&r$S#d0a4}$$T$rzC z9oNkvgLyT(JCcRA91Y5kMW>z$5+R1FA2P}`&$Aeix{!RI8m5VFghorLDivx$U0?iW zQoUsXvK$gWbn?N(x^;=WQIW9(OHkfNFxt%a^6+pw>WzAsTR~_d-I`Nu$S_Y6 zf<%bwHQEs+v)kGRNf~aqCw%Z7cDz>=a%7iu$yywjDzow+(R;1OIe*O!A;y`szmNOA z&kG1aITP*ra%B${jyhP12%mqMA>sd@3d3BDX+_wf>!Xb)D%q4?!=-;Q%nF1(ks zbaaO4k|ShRSN!cvi_zKzeK|_VpX(bxlz=y1c9Wk{mwv(|oE4m)N1=$AnXQ+LmW1h6 zA&gHm?_ZuT3(YNiBL&I`i>laot4}2GNjcRdf5w%d0XEa9O@)Zyl@#~mC5**=4&8Ep zS%yZFHCN-ct{^+97a~Q)V81KjhSMQ}CMbhagk^<-8v$=Q>F*Vsc{>}1Pe zN}KcjNOdgNFZhwTd>IQ z7o12T61G}aZ&qO#%`8Bs!=;D%_XzM*MKOh7Ry5hXRfSK3cgEl(2!6b^UvDHAX1 z{T@tt4`#AO-T3O90-OqNs_v!nn?+x8dUi#jbt&^B!N67#qs5*g)zt2V?}(4s8^(&m zFU?zg!kT1g;&D*3%;C-_z3brRF2H}H+G*J#M8F%r$CSgU0HIMnGt{dDS=`}Q?~BDVM$ml~vQ zwug z6G`Y?19-e%^)T!g68j;VBN}yv(`2C`os1A}J7Ks;pNp=)||a;dEXHdko0*dp&|W zOZKj6b;X&0m@zweX?TffPbbS**zLS+G8IC_Sa}PT_Uob~!}XR9xkTM$*ZIYlus>oF z?#usg0DQxL1s)+02%F*hE}3F%{JfAQ+BtPuXU&)AGvwL#U3jd70`ow5k*8rFL9No( zIQbbh6PgVG4ta)>!!+&|Jd*@r#5pgA`&sejmYaRle-$iW@%3K>TcA?VHnub_*b|&|&2lfSA%{w# zA`>C)^Om+z+CJNjsCd^b5l^-C+dfK!2IVG5UIkdumeNw$@~*}GHU!=p&+j)KC|Fvj ztF^Ze(eZDo)0gayQ(gW1cDIDaG=d<+JNd{B?4aG)Qs4B|;4_V3X70}7QP)dJ?vPou zh=Yq=glqixigvz;4g+J5JM&pA!QR)WQ~R9jL7jEh2bnUPk3TF@@rnCD??S21i2~jL zQRoiTgd;BpliuH(RE&tS7tmMS{Iq{--bpq+(>=e_2LnGP{Pe^5O>0G5ltHYF`IBd5 zviL?Lbfr$JYP?K}wmq41vA88OXVo;Wi}*8TpVB#3v~Wa0OfSrpdsb|Lk!jKiLnl{6 z4!PJ`zoVT`L*AceF2A#>{a!PbYvgzOc(lHmp;&<_WhmvsPs)W2w`(@o0RaVN+Wx-o z`uhSS+tQyn{DXrdjtHx2g4SIlq(TponPCmlO_yGRiWrT+KQyASECUCtlynB0P6^80 z?5@uB!a_4XDKP*f$zK}zW}lFKNy$P4?t%+~eZIo!ku9WED3tjejM&%0|GW-?)R6eQ z{aK9#p-CqiU016DQe7gW@{r4|c?odU1FZ&$AaqPejyJmfAge=pG)y?qSnv0L2k#;7 zy>_<}3|pHYP=u5;g2DO*S*W$-A=6SXg_$%`Lf%E_+h|j8#Y;1rr{NjLnyC+Mc2=!_ z0lPkaur-U{)B~-mUFUJnaIf`Ys%8JaTG$)al1QQjBN`)UR_mDn)ax)#Aa+;A&C)Czn)DLic@ z`mI0*S-V4CJ9?D4EM%n&RYx)bz6S7Tf1INv2^iWe3s^9H2o-hM(AStBVbm%XiQW1< zfM*#+k*gII(*+Fzx`oqp&T;jHooUj}fiuIeZzUPp4cBgh;YZ{@@3mM3)Qw+_FvStl znYx-Fy`}7X*~AsCsq4kmfc`XVef9O6#;Uo2wC1dOV9ML*RJ#toxYx~6|LCaXLK-F^ zO~H;`DLsgn_U-$npzKOcQyLp-<1GQbsxVt;8(d`Bzy7#d>$eG%mG1Onl`@g_O7S}6 zw+~u!P3Wh$rXgLt6|L}FMEp6bwK7Z^$1-_`#}SE^2a98o?5e_a1FY9Iou0TleJdG2 zE3lEha?aLD8ErWl;362^o)~`wfiRgU2zPlrka_%ohA+|m$s`Bu`*}#jX2I!uFiRap<+WF56rlFj zx@&;XlpMQI#&QE}F(CIX>^F|fyLdCtxws#f{L)5E^ zPR}0ekeq<%F_X$KMzQsNo@(FO-9=qLyAr@yE$wQavtSCT$#S2_ULC00H4x5Svf^7^vx(Tfi_naChZ|k-g0wCwUWr%m z;2R>GZL*Ij(mij&IChj&K)PRRmyX7=d9zRra{9c~+QZB3+5B)7ezN-+^cd6G6M+;d z_#=Zf+`b{NfLt38p9Fl{n#TQjUC_|$B^m`D9B~#LdiXFOgidHcHOE?EGIL2}qMa!FEwnAs`E}my2q8&yPU5*vHX$lB@V{~{#z$SyNez=<^VEwje)pO9 zLCBzCY#(-22(Gty+8U~fk_-|ndjtS9fYPJPB?baOQoRwCe65J&PxQs_`~&B=BROs` zw3uXsZ9?Mx(wfWGVg}MKl+kgIa9#s|_cWhA?PVvV`4PFjhdMtYO-BVdu~=%eErHM{ z*QFwbboHO}`~}c!adto}L5&xd9j`sbDlAUzZ`-SNU!!rrkj^7S-7bP+y*6T^kPlrD3ZXCMELDA9ba?Z=FAO zEvS1iXLu*q7cCXBS)GIhWn*?3C7JNifUi|U|`SYyqU zOO)@wwgHw5y1i{Rk(2de&T5`S^&z3?T!>{BuHrCwg7w_@M3%!BX`}l*3@y#V7YhO_ zol$T_DRp}4EC^!*rJqX-p;b{;+K@aImfj-oxGf=4Rt8D(7%pKsn6n$FEMTmBrxNBK z(()*;cut%~r{9_=Cq>^_*%WKN7NF}_j$%v!o*C}tEv!p))0cAm=*5k5 z{zC&B+8{)XPKwH`wb0Lb=IijwXi2TY=GNz0*<&));nYT}&C0KY4*I?Ow<{XYmL&;{ z!_z+Dkf=P((xXBPtrp7dfS?CT0bk#l(^;18Y;f{dxB@*MD+ zd==1!F=vMp(@#_0-D3OtdnJ6EdH1PqvT45Vr`)0-8mrC~3)F}LE*}JD;quie`)aH` z4?zA0FIimNWFb#^XG!w>1vjUL#YxKdQCuf7lmxh+)=WWT-HAjWEUBiwKJ9`@nfk|w zG$Ab{YBMCtr0(#+yb`7Zt|wGsdM9>x&m{HMbwV?HAg2KVzp=Tdr466iz8=Smr5+eR zsE@+#dP%9w-6mS1WXTd*z6ZS0QmAA${y@|lERK?KG$AvtUe{97aniZS#cR)us;R)F z$=1C?O+Z#kOm>_C?%(j3o~OIg0J$L zXyZXDiO49Oqyi4WUB`51&*B>Dac}c`$E&3Q&aLM|5a6LY&w9YxJMJHC;q>$})3dC%D3mJDmMNFR_VNx0F2mY3Ie{EPe>G4qUHrqQ=~d zJCn`DVOyr2jOWv&%B>n@zYa9nVy=oknlf>6yCg2*zVNguW*~p|L8^4Gu?I$+@8bwh zX2_FK|96m-jLvAap#6QC5KG$CnqJ~#$t{m#Kh+21kkKysLT7K&`R1kFn}g9Q{VMIpqy|j@nz4V37v|Jis)-rPOoKaGKTl`(7}QDP?>P zmLySzSwhCvLfYhpg2Ar(H?_3O)gzQ28D;B2kx|$q6_cAvua{v8K$g4#-t(Q;5yU}< zO_-aoZwtFO!G8g$m6V#G)YYNy+E4cT%0mf}DL-Og)pBHmO>KD~!+syy=W@?+#2*7o zq62w};X$#s6bPSZg+pb<1GQHLd~6M-X2_(voMrX}p7mlc;i23|+SH@$##F6I!uH^Y zJ?eNp3ca#e0;rhGqUn{eM%%1FH<0SqIglnodj7McpnA~rMpq?V-cyCf{IV4wh-d|` z!c%LY2cWLfHT)Y9QHA8nx@beFa}{1GUN*ebYZp#Kn}|&d2@1W~q{eR!2rw=54746E zO4zk!X@J8v4BMBDon7Tt~i1Ed92jScd?+*h(N7J8}(C*+T^|0 z%?i`S$q7WtBc;D6Nx$uijMtSZ6x_V$Br0!>DCfN2ZX48cK(eQM{NJq3?*coCA-Yf_Ui7i z5lokf${jBs1VzFqC3QbNyEAEqj|ZrvisFvxx~TAM)2`?z`LHZ$z_pmbi9VBeheqvjp#B`<&zUky zqVA*Nd~d*IQsEujXJ$!JFO<`QU)0vz6h$*TOoe8Nl>U~(O;}A?y`AM^4+aMRWWvNP zf5@>6IqsM6;B9Hk`WZ!RW;s}-XoUiGW47OwYdgu%D93%wTct^beH{Dc$h~zzmX&y2 z51DcB)i2f3mAE=k4nwM@WONSJ!mdJzRYel&il#BI z79C*cds1(9C^w7=x0JvcXt8^}^XcmcfttEwlqis*Aa51poPcPVEi-XPt2L_O{gjN@C(h$X->+^kt;Shj#?pPKRZ`MoC~!?xkuQ08Q!Z2{kPJ)DF?y~fN9eO=i!FJ_hzzuZXK zsEDCmXem({EV-W}M~>`57u9{9x^K8E^6Sge@QjRVBDDQy>czc`-Rug)NYfzGm4B^4S*M-g;7 zJ5{d`P$;)57*$sGB>Lv3kG07G~-N3(C@=`aRgT+>E}jBEAppq z9D;D-{7L-^QN|k*m6@(f%8hHOQ}>eTSj|b}xP!IJaveqvPq{wx@J}G5;lqv^Q)m@c zT}!=8OoFR=kt!04=+M^rd_DM|cieal4N?yeO5<`2R?PPLJNj0LPcGFY5B=%a zC>O{Go8z3>oMa*GkWZn0#3U|z+1)d0E6Pxws>?0f+}us<%R8mVkhf2gHT9$X?P9mg zOy@hJvHo^|_Fp`e;p=a(B#6Ew&jFfuc^3bIIM3QRMP&wr$i#RP=Z#u!}MEEk8G@?6``93*`9 z{lSs__T#`U_I0(V;Y1xvn@ag=U(KWdt$J^CV-3R)FIgzQi4v*pSsiDJV=Is9ykmU8 z=?EWEDeZXZw=ho5c_va7c86s0_#bU0qs|3UM_ZPSA5x-NSee_T+#-w5jx-p8tA;~i zFOfOsY=tKKS~8={;54zrFWEe2JaI)yDGr**{PDAWd|XQOhuu679KUZ&htR2OR4L9G zJ^6F_-)H;;7N!WVwQbdnDWW;K^QU_W7rM;D@^ycCw73&RrbM?I0Vjo;%kKPhJqlL` zz05hp1p?d_9xT z)(yh`A-p;?;ol$`Kz0+cZl(zp(xzq`LZwGRSrBl$u5^zl<>pF`&c(&wc9p zBH2Y2b=Wn8kcS5lKD>qSc({+2D7w8hdn4UtR*VUkrt9?H{BV_CzPiWyu09a~U5z8h zpYGaAG7>GG={ayIC83CM@+w$^BpBN|*)8D0Mji1u7>z#EWkvZZ$wTkP+vl!BU-hrd zMY2KV;$A`R%F+QZn*?I{v7Gem3(E{_t_`g_evH1K$`3>iLb!QR_Egdj5{fZU=%{t?!EJ?Zc;_{=FH?~OYL8``lH7MBXR%EN&xlUC*WmkwZXtamS zl$KKX!gtHC_qTxzh^?dRfb)*MI=l2jjpIrAgfN!mxd&28~V+Ap%C*f~I08!lOV zYC6K1-G^s_xcu!x2LpW3nT3(vWkd1(R~uWEC&eya0lgU%yTp~6J@eCrE32iBxf`?Z zI1UBE5GW}cYq zSN8gkRb>8oW|@IC&vPG!DEkqWAmxz}?_ey%225X0vwf~0`uP3YcID!cK{Ez=#sKEvSt4!J#CmoBEz_^VYbinN^ z`wOtz6ExXQxv=T@)QQpzNws(268y0Fg(s4{p!@e`?F$Et4~WEe=D3hGvV~9Q)@hYV z1i$V zT27~9?yHO&m6vibRRsM!r~GA4337@E_XUtuIz~Nyol94)37n5BnS!btZa#@|9@n*R ztE*C-b~V^LS+W9C=sj6Vk*-Gy#n_o`ZUp>=-5Uk_z$Cji+I;rj%^(l&DmM5iAksTEmw86br>{f zi?r8E+R+2pzK(saLk~7BH`yA5hu-!$MV=3(7-C;#J3wqYVT0>93}*m(#VK z0lz3Q%DIldkxu_6pYf{iHE$)q{JcYbSS(By-y9%An%DA)oV^0Q7t0bVJ^3&<0Pw)Glj%c#e+EFQx&y2h)WU)35|HrzNqGZ--sJCUyfKG z8`YXDZQ<4e$q>sRL7#bWXH)}RPQ5XBpY|)gey92OEv(d$^PA~qegc}&2i|X^ztR%C znhq05UGC=E#a1W$FnVKcc-Bm)<~3K1t+6m3@=>yNdK*r$iY=X7I5~27=v;@Usi`w| z6R92c)EzEK+f{!pua21~2C|C)kp4`hi^_iis#*~DR&;WCS}<)XA3xJFt#S8n!*v{E zvG_x`g|ICOj-calxs6PgC%H$)-<1i=r07uQw*4d7QktJ+o8)&S8~f+BBq926eZSIq zA2Y4>IDl$dI~ty#$gleAy6m320zP>cot43ta_;Bk8xpGQcu~OJ45LTeyhdo1y|3DO zNl{b06$0E>6)|+V5fOK|Za0 zXmV!k7tbup6)96*RzRnW<$l`=z~1&4kP1NPkp583uExRdGX+wNX3#f2v*S!5SaFnKZ6zXG z8Im9;;-ojDx*^EK>fS~|JpT14+)SYp;f13DcTKYo2hBLwkX+nx2Z~#qZO;iBzkp=dPXzBj1t0?TN=TolC5yp)6!LeP6l2 z4S9dscCQY{YbErg2(3w`802(?TsD03b9i)c$vFur;KPTe2#CO8fX;2Zqv-g1=v#q?ArwR=PHXBz+5#q7y8a#ISl0 zcG?gx%2npPDF*Qhx!{;!VR;`;cwJO-C?Jjt3;ImzGe7G>zQ)tWG6r}e0CUSKXx}e= ze9Fs9j`fs0Vg#4eBcpc7Kv`>{0M{VhzEzUhow;LbkZ}pov#l)#9J^&v(*?95o5%io zNZR{mJRTBn?Lj;?oq?2^kJ0$&=dTx0FLz71diP1@u1d++^hUDedCxW?Xrl=QrPToz zIbnA@t1~m+vPo2Tf1?b@D$~+! z9pdUYcJ31Cd4t3<*Mt|zsBw9d*K)`b z=5kC4V`n43&v==}25AzOr!GC7HGpDd)LTwK^(kszI4?{R6?@(HgzVm<@$w2>9qWzT zKUR*wyU(;~7cxEE9OLV4qEKaXqHrZ&@E)f1h+_)~QaKai0{EIm5v z69H-k_q~tP524(JW~!p>^tV!ILfNu_h=~78b`!zO%l^+~H)Rz1;{Qx`1B@{I6Z8py z{qG+e`u89pm^yzC!rz1N?-0qq--N&4gumZ}|EsV5T@HVj!{6obe^@z40Jxs+{j3=b zj}cLgfiM3<(p)tAA4_up_doU6(dQul{rUgn$Kct&Sw%JfxJGl3GwD_-k7BkM>i>~N zE%K_eXi_mjUa3A!&Y;mvb0pPc6h}Rs;hJ>RAh__hQxu6k6h;ajDhrnJZ{j0iv1${P|@Do&hRe zsF7~oCLa@j0;xN^Cj35F(M?UeWeP1QYXRNR^F1l7)^I)oS9Ogn;nY;ckU3Xd^ap+i z{M$sW)iwyOm*R6QERg}}N6)>_9-3z_fRFABYo7Kq8wctHd}ZTawjI{Y55eX2ls_1E zGyI;3Wf9j${&w6aX@RY-?z7n1GFrrK!8y6}Xg)Y{a)XC>G z01lrF4>09RL%4MZ6{Mv#VKfN8mwU!3>8&I0zBRZ3uPxm2XpA8l5VVidp(t$3??zj1Ct(t}~PZLOp9LV}eEHf9tYlkHx;H3WFjo{`B z(C-}MLqyslNW41^^>Su2>8i7CC|(X^!3-f?CT4WG1B#-9dWhJ$yPa~*H0_3jK82FD zc;snu9IYPE*JMD#?`JM}VGjN4_tF<|{&Bf4+`%Vr(B(|u0?5qMsVPO%YJhor!Y5Jt zDG94}lMa0SWO1LheKsjS4%xX;$9QLpb;>bn3B=$=TD2@Mt%w|DdcgqZybrHR@K6eIK zY5IxGG0ck)$F_o5HpQU76TU=_5$>Gfn#8{NQhF;j+C4nTDb%^}1*7K0->rDG5aqq0H!aUeBGtX@j6+rX`)b|qA1=4s5 zTb04&VOt(3-cI`{Vtm2*$f2060nMp_z<0*rqNag@GFQmpn|~!UJdfJ{^8!pL6Te_q z>p(?s80DE~LFBN-@PHc45oKJtMh9_id&+Nj*s|*Wd+N90@7{C2^T5ZotQ0IGEoXi{ zPMc_B@g$ifkJA;E^WIrLJ<$d9k+D3cpMU_izx>J%6fde(VH67eT*zbdBC%ACKBiY|vH z?CJ9SH#5f($JN*eryp6`KD}y>o=EY!T6B2Nz1KqhhAG2QQmIOBX3dJkuU3B$s~Hp0 z7b|ybrbf>7y5v_{7e~l?=6@5cEtomO`oDS` zfSpXq2VtnMs)q=znD|Z;rnXdn-F;~p$Z4z@s)?>RlYYd(GfTKpr*n^&j2mX^i&t{C zHSHxy>PRoEX=7?!cs=aESTZcqOIovr#~c&`#8yfLM~Bss_l!DL^R*f1g*QF^3>RZCV8bZK{C-qfsVtKWQ|+#ZHGhby})>@hd=Qr@Y27Wf6giR^cUa;(0Ct_ zW|1ibE)_L(fQ+X$1`h(f5tEwLid8bj=jdWvwv}qlO?lkaBkdx54`y{ER z)9-_zF{P#iFXWyVCk2HTHTB@eq%5FE*n#ld&pG=BR+V4lj8f{KJ#P$ zjr{atsGl6;x|~_dpWcM~r#Ce|iT>Y+R`r~dEvLO1Lz@(^HSRK3HBOf~@L)k85N%VR zc`bbY&a-O$ltZh_)R22hMCXg+N3n;dx0|KZV3R$*Nc!XrY~1$H<=Q$0@-e&V5$sdn z+#sPowS96Fkp@WJJQrPr6|2VlfOc;B=*Ur5H>|g0(*NSRuC?Wa$zx_!(j@IKfOX{W z(N?D?=GzIu8Xd+Gm`#fJc4mC>qFFTuFNl>%VCcCXR?eHnC-qE)GuGjgBlL#s-^Hh>j2<*TKcnD{W}6v5*L|+(KuJl(o}#<; zoo$_M_p}X(11~Tg>&LX*ZY4imgVQH*t=S*s>*r>UxpDHsQbzr;X8246l?ug+Y&GI+ zybH&RzZcC~rtM|&beRQzq1j}N3c1V;$ljqmL3gFZ+#{r5Zm3Pr2)kRF9T&y36X@Zk zUw-&THplBLTrgT`gY&-C0cdI`!^&jF?d<T7`RF3`fJkc(H0cZ$-T)TB`%9S` zz0;Dzw!}n#_VZ%Hbyt{L^)XA88+ndDVAcDL29SMF*-RBL`;C**L=EL>W!@6mWtR zkn(^V8uJwhmuY}<0WFxhSc$;3_3y==c2R*87jUKL!$P?w5-j<4$r>+q6uc;p39X5V zP)e`BNTpT=Z%>XAOiTBfizkcCbwAdHtAWzJDbRG%MNe5G3k>$>xn1;@wDd~|uI*Z3 zJb>svEJv3w*Cx8uZ?n&_BPDU7Tqx0;#4|9ipw~#areeVhLq#C z5HR_M+>KXG#CG}m7W%+E7n*VbexpedzWuLXX2)CstR$T)RJE~dptVvuu*fz zW7Oj}wX)Gr#}{bS0ulCLkHUS({8g#%l-AgPE?*sc36nIqkWgo)%okSIlD%*R#U&9pg$QA1}{7{^csKe)|Fn-;3!%#HWI*n7*U zxW28;w}K{UaF^f&3j}vUun^px;7}A2973=JcLD@=r|_b1g1dVa5PX_G$KC`N3B=hvM2YZGBY z>bUPy4KB>I&z47!v0`h8b_eR7yIgB)*E$yg$qOrs3kIOc^3WW8?B_+X-+_)0^HcmCQFi$L?9H)Lkb<*H-1_S%-bYC4!)Nt)>m138V~%nw!UAJ#a=RijyYCDgk9cb|47w1{u=->uXk%ci}yeX zHZUUrPR~epd05+WjnJ?EEmZ2H9U^Ku{BcE8@4tg+xs{4Z^#X(#0PUUu;~JtOUR2=L zZl~*DBhJ-)8ZWZkI5AI@;M>Wg2R9nWy_~v#kFQ!jwC3{+;$D}u<;6Q&#n0iot60tK z92?#412xnlDAxTY{9144YRK0`Y}iGCPPRX^_+#D{AYO?Nc;nac8$i2*5Qrk*kFfNn zIj`M_@;xNm)QiBD81NpiU!mi+mk3b_Yg@%JWa{tSY6qZRoQhDSIJ_XRbnyp>vRp`j zO~`}4qKD?6@Op=NfTkE@;ya~SsW8nQo(PQsUk-}B+?^y#&;`9#*ESdWCZvP1LBxV1 z9vpvm6LiY4dqqwaTvP_{uq8l$9@;Node^J&?{jEgf&u|l2MHIN@%9_2)S0Y$->g;K;x0IYO<>BuqbKC2^I4;l=&0dXB>S0K4 zh73QU)O-#c!eS$vIB%5SW2maOy3Lr8z1=rn^y-{lo;StiTzXeIhmy)wOp#zaOAhHR zD8Jb&vc(kd5A0}+png+|gs$v8m3)OOi;C^6CQ!Q!>dcVo9RRKy*6oGdDt^xdXC8;4 z6KULbT-Xb503l?f%Z&%&!DpI*+nuT~vY}<)Hie~k=?9jS+oXF2Y-`xuhdI#rpWwP% z;rWqQQ8C{hTp}&}ohK2`QojMO9@}Y7x%)y)TN`R4` zR!-=uchO%KPbu@Q0rK)F5*U0x_5WFup1!_9B%a}%?+H||YK}gEV17w#IYWvg@0EQe z08n(vdgogQ(+&ZZjyaa}`7kbGJ310NH`N4-)*b?|aDJpx|A4X$tv0jqL8E^IbcyG5 zo|pF*E~LI9wXi(94=7_TvPu0Mly6t7$WYTdarV5U(L#%@(aYWx>nz#@R$+5nP!Ruv z;e>pw0F~N3%fn%GNl1&7?VL7zxV3qz@)JD@o)H59%y4keez&`(k+cJu(kB(c+}cy) z@OZ3a-MtOY@UWzGcP}H%-LfV7@~%;q-n9RGJ9;KcyKYajZ5j-=_}-ZyUu^Nz#6kIW zz-(UA7XxD@fbW_R8S*+sm2;|g)fHlC1R%A3-=MT`?y(s9x4;#A55Ao~ zenz8q5?Fm6)OlqlCWTo=J+2dMH?p!;OXDnbWxLeGMj{&F%f8wR9M)e{P~l~$aVk|P zK?b)H;RibMZIg&0%wlp&z>%+Yt=mXXVe~0wc<&tFuQcs&`NL=^rJDVUA2EsZu9oam z8vVpvlR1?$*2CX`iUNv%jX$i#1_p70GV$_lW0OeF=)MMVjUSfxt1+bDE1<{^BMYH? zrEZ{{!kgOr4KPjXOjVjm%D~RH-HO?~$p~DhNGl`vU94}TuAc-=Db+RrBP<#keL{n3 z9VA={t|XD`S+9n&2Ua7LgeCCaPQnJ*8}HbEi0_-?CPya{jOFbmr5Zw;zSm@q5(Rp~ zNL=Vxf99ylIync0`+hdtxq7rR3FrOgT8U?*4@aU!;WbTP)kQ+zGf0jx&#@zS|HeBc zwB~6BY-EaYjW$UL-fcjSG^^qBfs1))PG695MnM6vPBV5(WDLT%&g0h!`te3KsXe0^ z2qP0e%cNzN$*slC{ZS2n)qrS8D)}Ck{R)A(+c{};lc}k9b4TT741HJy8e;C34{TO_ zcl_%e-Zec%vQXk3Oo|k7FHDjSnBNy4+}@fCwlt90p5_cw(3SwnfP`tEhU_Oe zB;GY=v}BE|Ui!T{IDLID;^*w<1}f+(vgK?PDQc*Zvy>XJVy-~5Q*3pVNj+1ym@<`L z)|IJJbOX={4EsWHl_7Gn?U1RuR+~DwBa^?B<5$tZ6$!!hfaR)RZ8_tOh@RN3%xKK^ zc{of#FIO_>O@${ZB}VgV6#65+n87}c?VZFSOzF}1F{3(83v_VTPO&Rfcx?Z$EhdrTqH;VqsYeEhpGl^}-hjFV9J}Quz)I*;c zYzi-|QZGTZxwyr296Onl&ndP(tH97r+oZwyF4xjX3`@yFG(X&Te^!w;IxcP=zm6bx z-CCtL-Aa{8l_+56<%fa>Nz;+1gwS&~bclet^Nad@?5Pi5aJrb7^#r)8JJ*`_IOMv> zMQ``V_n6$LO%n!@mVPKLh$!?KW)%_j834l^?PC!nr|;Q)DeUZeZAEU3+wl9|`*wsy ze|<`UjGz6f!7lF0?hl!QHH0BUxZjZk!D8e`GA$?7Yz1=c0v_+GZi=})V0-S>TJ>C64y#(X;UtyQz5W)Gg!giPfG-oiu}YHcgjru&~TtYbYz zkR%Iu_PX_bd*gC{BqccwVC|oV#;Yu1|GaNBPY)O~=}h-9&P9xC5#Dpb<&`aJCHk=4 zP(GwFI{k=`1Od$s_ZNNjY{b||lVbd^E3N6rZqBe%dPNsDB6QRkdSnUxCE=v6j%#~k zcs-?I8a$%f%Zg!S{j_eR@KFTJH^p|1tL_&u@$p_+frXc6wY*uO zO^2r&iK^O_HTXR;gGByuHr0=36$A$7zEy~}=eS__AX0{BYaBDaXrl&nL{7Us&L#AZMn?C>qbo>NOcG^{N zT@zeVEvD(z#d;LnQyIAV?6<+CBGKQR{Yw}W6UxcaUN^aWxcux(6<@Vh{~MfHhHdnD zEmm?W5`_uzkpg{V-zEtjTjr2qPIz^-%JDip6$h@KG!@mm%uVy!gI(9AMF0c^y2B1BrtPC0eK;eq|JfJQS?8+}GwMzED2@ z$)va(ioYZS^uEG-YB)k>$m9}GRcU?Av>8|{q9 z+%m|(IUk?WOCMXVeQ=9Jk&-ov1&bcRf#j3Nx}QgTqui11xyz$lG&nYeU5XP0@oNIs zKGPvS^=JM9u_{DZ`k7&lYnU+vOvQQ|I&tiuk`Yi+b&RCmMI;1vh{N>(?G(1GGpiKY zC1D$FlX5er32Wt^KT|NNyl7a7y#ppeW-84a$5)fJ62CYZe3wfm*v?uy7hfv%Ba$K% zc2Aun=D!qf4iR|%BLHpqKEHTXVJp9_eS+`6S~b-ttUM)&vU`T#gU=~PxCu6H^C#O)B{T{a*1SzY}2>~B!#gLu(ZdvW0Sc>5&g%ptd3a{ zZGBhmteuZC4G7ENuavcJ%vl8{)e~DaL~@l!6ES(U&euhs0AVY=tdb4~v^VU1Ch|UuSgnr3W@kZMb&y zh*xgjpug3Oe>9@dZVk1Wb*>f1hAbjEvMngOZ{KK*5id$p66^cu&Ug8d-#}GB4%Hxb zL1p2eZdbf2<+e>RF(0O_t(1fq-q)5O9NGY}JYIc!x>I&@67X8P*r70(Rh*%}cf$Pi zx%BQx7P6EjQ;{3r)S5hpMLeGkO6gOR)AC_uWZTM)BreOexpFMqJ`q`V_xJv z9%3-nA_gqf*EjOB;U!rCW@<*3R#LcE>=X2QbV78pf`$@Y=f^W<~W7h9MUDp>hlYS0Db&`M5V{k5Dw1 z2^EjkgE!lXz7i^p8J6>(C+us|&nXnBupO8A69vNSqF!E(_DawmwD{P(eRm2yrfLoN zalc3LZiYi*l~+kcttnm}Up8SRg=bh&goi|Qn+QGR!n3?ZgSg<6UTkx+6VIS7UV~4d z%bOi1Uwc>m!ZcBRoH9;G?)*HjeVN7O$;;Q`hgqyQ!6K=>;-q!{T_7K@G_Y9ddE$q7 z`ppViP2QBwc(H12^E9Q2^Hw9jdirULwwR%4mOSUt{UhHW0J$} zync9gVW?4GiXEu5I60DJBuRg=h)G~no39nmf_N}9cz(e3no8w|Ubq@9aGbVbdW;Gc zSMX8s-}UbKyp+btx&)7&!Y}CKXN9Hvag+@uO3Agv?=N`As^)v99HhmQa*_{WKBirazWP^WqiIX+_Sj~ zT6P`&d1oCnMdV}H4#`rQ*e~B)p@Kkp(fYWRqgKe2G7k|^JcJ=&ekK4n%lFq87;plLh5{@e(21!25m>au z=+@$$`YlX_IC^GxazcmC<>ghlM(UPjT1s#b%5TvDoU&pBc$7<8*UL5lxHqTyP>|gIOOHV zF?`f!tJ_=;7!XrNm5~7u6`8MLD=I^YFKct(J`;SE_tCeXsg@-hTjan`eH!#Q<|Zua zg^omM{5cz0@7v!21!|JS_I#LNo?nIw!)D)*Ui(X-7tHK;A@V zNea?@<@p~h{{L?E|1bPz?U;Wd*=H-nmier3LXuqAxVhw4o5!Wwl)=p|@te~8Sn<4= z&f0|tZYzfPj|xW$|M*^sta=}}m6{F86hs@pJ*Th{?Cm&J!0=cJQ3?9LrziY>`#RD-46=V~ukSM~K0x50 zJ3}PvtANbzJ8GBskDUCkY9svj>;9h_yn0<^K7iyfx)j$g{J#}ZvOM|pPf(K-8NmMn z`C$E~iu}*exWA4=zW*yO5}kkL!C!gs2O{}b9{iODf91h{z*GMk7yjxG{y=p9%7g!V z9uN+)Jo%d>Eb)&zj0I4na20ZwcY^^ER%ww~qUl#f21@QI^PBagGqu1pQ`2cqL_*!1X) zLE8vnlwFds*;s>R1m*q04q`9JWX|vOZ+q`6TV4f3K6?B`dM*4f2kb1($!iW?zD8Jo z===zw=Bi^rLK^7!^;xzMqC+sg%~COlt$bu~+}qUjC07f2nhDT+g2xpEr9uyeG~ER?o?^}ihQ0tIQFjmgg%S6- z1Qhl%`VA)oL7JS3X8G9{^+i-b7-r;b7(#o?O2j$fLCWbawOj~jS&K+9}U7~DwXU+$4l9ZN2;57qa z8OVLr5exe@$oH5<(@FA$KXqPeTE}ITv1e%~#Wy`VPUYTT-AIxWp@bY#zdlSD5sgB? zd;D|S$&|8&&bGfR-Y^zi!OUc*%D<0xmtNJAFBh>BuC6q~*x>IJEyY4|=(Q*LG z=YDt+!{Z2tG4s)1m2VrP=X9%%@8@*XSDx|FBO9pz!j{FwH3C1rUQF$qfwY>fo#{*| zH7&wqM{|+Uv=_9h$lTW*#Js&H9zL6F(ac?3kuodU7AD#=lGtL2yT-r#h5?{xuyLVn$Ra-&V|)O+`K*U``vM6C|T~S^^LKDS=~x3JZBYXAxSoB!BTNL^wE#) zUon9}%Y7m;Zv6VQ;IhSe#7$^L=b&G{g5c{5wh`%GSbdZ`yl$2t z82XYw8xY$yzKt$^E+#?q18?hGM+eO6dH=E)lfcIR$>L3L@%7ZB9F@jnGtCBz-}W{7 zJ#KerE>!e?$KudIt1jJhWK7DTfq}%wGcBS>`19PwwMk*P@2Oc~2QN%Yh9-=oh;zIo zVhWG%bNp&NT4>DYMIn)_h^i>+CnJ{2D+o3Q{kz~v$p}#>ceDR9)&}RyAKMU)nZDUR z3K{RO7Z*t}dx{exw;Y3MRT zOt$Rfix~ThY#bN4$t;~_Pi>o@^0~J8Ns{uKY6CwuCY3C0Qhf~NN@N&v)dO)kf`|}u zjY6@q$~(%-Wc`bg?#nBZk)rrGcwtWxGxAky2y*dWs)fYqy90@R7M7Lc`+Wp_r=ECO@BtwT(haegPyXhF#yiOHv$C4COlb zju~O|_OrLYvaa_wdidCs^|W>S30k9zFUXOqHq8$*1l$@TMe)az0=QA8Pap^k2m%05 z#s_uSxjpor#3h+sk~4dw;2+QiADqUNNo>Oare>BN>m|f5A7u?nwYwaK&nE{AMAPm8#t1Et>tl zi@&g2ep;9C*S0TiUiZbTg8>8*M^7E1pjG16rP%*hKmCwezuBKnenwb(*cd*0{H;C_ zKt;(%-PBEll=5|*DZa|8)&&R8wnFnA-()c;XC@BHR`TmdboT6MUh*+cr1@Q#i||17 zu#>DGhN#{t>=$?Y?dDX1rGGyo3jC& zUkDPBd-|w>%#=8CH5)>SW1Ia$v#p&S(ws+u?^OzS#VHWtCbEkCjXGOm=IE7Sz3KE= zAyQLdX>-!3n4-Rh{S;}Pr?li)u<5IJ)s*M(bX7z@9{_ytN=M7fQ!J7q`q5O^1pStX z4_9bFqmueVA5*jS)|##Kxb)F73}{?JRL0*{i=hHn;JPNBYHmJ0DAf(od;9xwB80I- zqmpLw^n1G6_MNBCp8@(C0T&w@;VtFemyLGoZ(E>qX|hk4n(;&ZBacV+m0uq8edWxp zZ%U1ou8!ld7K2q>{Gyntf%dP)=1@MPG%5u}2qSF+v&BwAb3`A7G{l1HYO(GR(N&y8}NjqZB?gBIAGjzmS!+~`BgdI z3chfHe~0hu#kIUCR|NM#$Pv2-T#&DfSJe2iRQK#}8KE!yKUx2l+o~JrUDK_B-pwz= zl)Q;q@P;iJFyrC9&KUIdP2WVGi96=KUN2Y&ktp%?sOt^PPi?vYIPt#A7oO3={hNyc3hsL$K- zGRWE5COK{l>* zN~l*QD^6FiTUpqeevC9{C=p*kf{GgP9keyF-l?5BtcJhUL`6^bS9`Z{-UoK69YgFg zh@SGsH!hC$F=Tm5Diy({JUn9;jpc0d&|k|J_^*$U8e1c*gTLp?PwoUcZnG*hiu3SZ+D+!m> zJL*Q%w|W*uq+UcKEFg(?EI1D4g4}$*Pw=s&IKO_0$^#H&!0kFK;}^IRPL6bYz`rDo z{!Z`Cee)8q@gb~NL1d=#2~aTSirk7m`~)3c3Wfc&-ZXip06mZg1gSW zHt^fi2E#L9Hb~VpC***@Fhnb1BzOT|UXg`b(GeMQr&pHk7Kg!FB~C!5ncc5VuFStxx>$*dvnMKAj}S28qg1j%+XU+X)B-j?ka3c_w& z8JpErDMunn`rfaniv9+GE2vFoFGZKb4|pktR`7Oj^?}5DZb-^-hy2jZc~&}}rKkPq z=&42$nr(9j7jTfiittkqLke;+5{Wwh!TRQT53Zzsx|VVMq{Crb?_hYG(a44jeI}-J zX8ILXSxxnHZ!Y^j@6y{HC=yY~o$%H?Dbpvn{>Q63=~nd_K8|-&9m4M=?2`BmQsNR# z0QMj1KBE_ieQg}G6K3p9u}daU#AF*|0K8y0ln(Slj`l2vWdeuNLOYd2<7wTU$ZC)U zG%om18D8bKnyAknx;BqJ>#?imf^n=VWaMFuh9EnrNDb_$_$c}^UG=~czt)*JK%SaX zJUNB3F#6waJQ9j=o!vhHUVmnepUnz6x8-{<;}B*|Vv6O)>7q5YzSVL1w+!ctK%fVZ zvsgtt*xvJ?n`wDV_Zdp><}<2eXEmMT9W%JnaYa!{pQpV;ma6AQv!e6s+{0DpIDbE| z6;PncaBnu*8>rvq!dStatXi*Y{_W)KD?;rIdAIZ6+K6yTa1*5Ek-Pw>{RUty@0=Kl z#!E5B2}=%9s!AG@b!$OFrG%7)>J4vE!B7y{+ZAy-rkL>-*rtP9>x8LmNE`X1)~)>EI6uT zB&7gndz$R!4tx}K5J>32>vOff>4bToISmGce=Wvzdrdj4Q;?HBewA8-D;4L>YBYBc zoT#siXWN#Z9vvM*C7qL3_6thRpIfgnfECZf7W_4W6?-ZjW4z@!L05rYM|dkX;VsXE z*I2XQD0eMbX{}SXwTMWX-ZvWlR2Vua2!49V-lDcvV(;ks#F}pcGD`|cn957-A`ps->MIz0v3Y{cZ=82dwa1c9Y?qOA)WO@^DCQ+- z8IZenJQJ1nV^P>CDfnB;*)XT)sS)Y(>y&nwb4)6xDDrHz_(>A$jWtx_(e#H_l0g^-_)vPqEF4B%& z&yt<1&x~$}ISlehnH3GT(TFwG;D`ghq8_I|`@+)@6xY2Sqi0Psul%O&*{+{TT&Hf} z~(P=VI*&<>f z3mw)dnQBd`Z|JS|NdO6Zll2TU;3F>HW)A5tX{SIo-$_Nf{-JRmbAa2J^hF70&J>s( zLW65;XxQZl{A`Tb9Wt!$92oh8a{YGv_K$Xzan^cdV3HQdGc%vi1jIdy9v0yfZTs3Mto zC}gS3r8~$K$zymJS&yWV-s$0O-Sab;S3%TN85nL~VDe90P^1Ys9iT*!eHj0_&iBdF zTccpX=-EUCS2`F{TEck^%HJlXyqhy?%Gkfy8i9^T3b+_?nvoF#x`F2JjgyMOlyqV zoEQ)<-cSfZsAyhZG^kR@5Rb@PvNd&ov|=&6H9NRr!|17qSd!$22X@)nqj zVoB4`rtsnlUm91c)Q$4Q^yL_Y@xgbFY@oEZN(-f05a7XwSfjL7n>;GtFVyr&tJ97a zoR5Dd2=k=eg4Bs%i%)JH-p*;(G$t)RvEpPf@SViF8f>KG+I2P<05OQu9w+vUjMRZQ zZtS&J4Qt~!UUh6(Tc|*?|dk*#SaR!4d!7oszQeR zLf|F-)AjeqTC+vwFQRV^Hp3Nu43&aLU&EQoul@T<7Cb*HsqgFE)JKoK`ckia*sL>G zxh{8cZHVBl^bu(2>nr(s5P@q*QnjCkizFC{M*yjUc6I8#>l7@J=qT20^ku9>QQmlp z;-x~@SgfYcN07EA6^^)yY~vir@d#_a(vtx))6Y@?Jq^bN)7o z`#wqmD18XD5H1}14=+a#fekHtkTZIymRSdn?3#1*5}U_c{#sk|f`Ts^aJ$@z)HPcK zx=kIkc&94M2`GE$tAVg@?kR56lZJ70fk%yb1`XJURsd=bi1Kfmxy?uG%*j9BH0t+s z06N2*pNk81*{TvKOCwE#cv++O6!!GXdjpymi^@+A0t^!mGSfgn%6k1iSP_Fms6m~N z*cEllI7%vl&t7Lh0W9mnc*se4`|d8|X|J?9dS*%q=o6QV7`X1tcwX^uIJ8JKpI z=Wmmdm%X_P$JCJu0|Gi^%#X1qu71&LD@P?FQO&>QG#b8;!lZ!)diGQXqjvR;$=Pv+k#1wHRQ| z5w(VJskPH*wH|Nw6r@Adj24V#kWs(G26ektkZA*YeImnamI*v_0uJ3Wm=+4dtaP^$ zyHG#G#Xg^H%Rq|*=6XgevNcEK167*~LWVRMgJ*U>F5J2nn`l6$AyMLeYR9v4o@@2y z3^mW3{fUyZsatV;ZB|tFioFn{1CF@N0zIuIC_idw{4Tt)&{jaWyrvwDS6+31y{3LT z%2%PH^jL9K2}vV=tlp(W(UD^?pxq8P(FH#HJ(jBza#T0rfckT_^8o329a0d+eXYorU8ch<&#AwYrayU3_F4>BR zs&{OLN>K(22?+^OYIvL6{`#I&|JXFYej&zs-d$szXmX&v=hQ$7!|{|zRLcLwvpWkF zcyl^BiD{OzytyE2AlOTItD{x|OwCMoT>Wlu!Of7QMhwfoX<4_upkBTpuJu5R@Ty#3 z3gs*>XqH_b-XnBCbI)ivR3W2c@iy7M37p|d-f;Q&tGWl#Da`Wr;Rn9oq5nQb_5EOM zM|x@KXV?vU+z1(8ftnU0DNNy&^iPz1JLFX}q*d8CK_KT_5H`4H9W#veJFt{^i z*B-ZCY`7oR81!1l>vr}JV|<_ENXM8u{u$V19K51Y*Q{jPpS!FhlEfnk(-UMSL&yZG z4i7IVu-^dPTM~w$sZ!ruqWXgA_oPucw&E^9ba3_HU7?>T!xk?SZ59FYv=83l!xc#^ zlYRh&?S9(l#!3Eh&7)>PtbOlIDbFkHLYk$6KwBit*wQ$hf&_94gZA)Q@x7;W=X8ekRe{-X`l)Z z;RiaLfB;g*lC3nZFo;({eca*cY>iiy83PjkdUh}OkM#lzL=oc^HS^3Ns4&nV5iZz0 zT9w-pH1QoP?t*vEk#Ki5sS4gFYH3RPbt8akjXJy=pN%{mFbDk?i16ARgioxn-|WI> zw_vR9U9Nx>_n-#EGLGQ(WF`E%NT)u4K6>?8lxRbNr&>XjFH!#@`nvA9Dq61c zWkEIunQiNOg1IWzAhkHUq2SKkblt#{a)J5hKF9#B;b^KTKw zE!8B+ld0)u9Ke~&z}WHHkY}5;PrGv7<0d>JhsU4wkV7u&VpW{dECKHaFz5%-mG;pL zPWWPE06=L3w3vdM-Tn>@C#vQ1U*3}+`bc!;w4E{u48VL>t8_5G4cCu zdTUmLC={Olcd*+ouBvE|_AoaC0~WAZ29k6f0jXN%EAOvnJQB$2sE}EP_}>TxJ3hsL zVX}6;JM+pWX}LZNvc8WGl_2A6R>iYJbEp0ih#zy3osB5YFBkc?a z=MiUi(*oaG&FHdz#%i<*is@&fG#P;X&gYl2bw1{fmfq@=hfn(}2ydehO{N&sB3-6$ z7jLJ!@{V)!H$d-2m*XX(_8VfQCik6OzrM8u2qJ55o1w?6zY%cxbUK*@BMxHEGprXBFi-@MU~ePUQ-qaZSuecWYMWJ*n|-wnEIqpYOCr+TwC;w!aF~XJ%D1y0|62%ov^$8LY`*F zy(G^$A3vF?XkFpbLET$|XhYt??Im`fB^xu`C0z)edyB(;-HVZVuUiz$q>C5rFr9*T z*QqU{P(bNEL_hA?m=HZ~+lhE}@em_gsC4U12B zOgBEt%84hw3kNJgPm-E#?dr#k-d26Zgzi^U222SV`;iCEb$e%&Eq+U4R!m;uRhNvR z5U7}ZB?0(zT{HhG?^o}eDq6_pR?$P{L)qnk_)_{!i}e)gPNZ}6x2B}#V!P@-qUk}i z$RyqMD04{_jjsUfuW#%aEFO10AwW092&6pTt~aQvKGj)k*GIJWDc&fXUH!y$>5Uhs>$(vs3Ml6Eg<`v3E5rCWcy14Ug*S7e*JQ1uzVXy6 zd#OJy_eRJc{P69rgv*7~=PIt8D7!axo}C+-e%7+`Blis6ngrUq5p$1az51d$j0^f< zO+6DNL&Z-00U;kjUHVtav}`H4{(O%A8evwqP8BtInlpcDvZG+6M&42rCiwA{viHol zxeLJ~P{ri0u!G#^-5ok#C_(h3^qDv1FcxIxGm~jYV>GYsH%rhrv2@+V%h@c*;^%km z_`AvVHE=~&v1`L4^FNGnl@*#m{MXRTg1uU1233$U8W2CqQo97pzOwiMgp z-j=J7xAd}n^RmURNB81IX#c1fP&^y}Em+PF(So#~1_WyPeZxBTy)LfU7SKsp#0z4N zygnZok(L42EbhS)7wgr>Tw3=NwHNo*s&F#U#YDCWRS1FHyQjNhpZ2_1kmNA31(8YF zqKb+NEdDgAqEJ31%RGTO5N*VRKFiaRa}2;eP}1|PJDjdJU;6DUn!z{S-rV$Ay^Vt` z$U4dhSa^YwXi~DJ_;^o&tc-=ru4bebNKvbGmUCq0p-Y9Ebl?ZT`wx{+^H(-f7FH$7 z0IvnQELOh1tX%caDa2TF^U1nW#U8ZL9F|KPm1XheNoK>1XXz|8(@Y&gLSNsghL1lH z5=PmpqFxZdcCD>M_~fIQ_ANt;R)f89q#^N>$RMGOOz&H*A;fJF^M`>P-BFwa={WFT z%Vjp}2I?ID895DN)LX(wcPE&{l_s=Pm}N!ya}NpNId?wm$T&vQ;=)Nr* zEkq{ytPt$pel3F=8X;4D=h+W?J`kN2?r(6C?U|)xAP?>t48XUKR$&$GF*ywB-T%xN zhZqox!rd$z8`DP!AcJ2sjF)-h&2uc_fxaiHWyO2?!R4_92Ysnk7H|1qenl@PMUHWp zc@qw(HurHZGM4eMWlk2AW4V*+xTSu{o2h$<+9^Nu3bZ=?GkDZRZ36L3@W?y^VUvY4 zHkh!&T>}NBIKyaz~ z>|SwEu% zOvv;Vj&mv)(O=lYW-b#6PYe{uf}KSB3&Jd9`=lWOWQ0p{y6rP9Sx`f=mRN0xMA>m= z=O2_>1O%M?kbGP#OfHAB5cIah51hSQ&>Wv5)CuG=Mh zsiTN7n5Kuk)~l2`%q$T@l+BSeGHBq2e_i}~#8Ud7xX6eO>9Yyh-V~g|i*wB;l-_#b z1;DyO+?X}?y2}6x35JOjw-l=~*v(e+kBeB8@F5zLZOe!+9r zsMc1NrW3RhFF(|Cs6BHK5&`K`dgQxo0IJoWCKeNVp`<=-U^tqoe6UFuW{$NCuER=2 z)JVXVz)jLbuow=}hK*M_aU|nHWHcEc5P6_YewkC4KhgD4RO6KweI{d~B2H8=dX_gq zH+i{t-mao2!kjo3oA%|Z{yC7u*7bvW0bbJx4|vf8QEMA^c^s2J(1Cbd5RP<#Zz z1i#xpAo+L`f1tTk#|1FOda|QcoQ*yI=>xa}gKp`C&6LH*7M4jm1ZZ3W{Gs-BqZMOH zv;uRyEutmD@0wZeIV=m|OPFEzmkr-adCI+1kxtQ6s2a*&vgCog`u{7hEd2Ae|BovT zFSTVD2) zjOyj#naYd|T(2f<{S|31=}#ht^vFAmsy0H1Vgv79#)l6x%vx;d3qy3ZSf#bwfgeRE zRnfU+5Im=UgF^KmB`M=;Ea0*O`~}{^>AEG!WrIH2aMNSblxM%36Jnj`_#z}xiP}j* z4(O-skN7xLVVFPOzu<`U2RJ9$NBW}K_0&foEVeseml~^hkBPPH5&l2yy=73`?Yi#S zNRZ$J_u#?ZHKcKOhXj|#-66pp0tA9ffZ*;H+^uP(ahKq(?{xN=UHisCVDy;U6$#&{Tc!|2#XTa@34XxqC^ad2mR(I&izreCu73C)UthnF;!$@#u{( z$l;y)8=Qm>3CX0`ZBdcj^AupX@o6J;F^XCv+)2%@x!8J7wtXB>Ow8-dKri#aY+K=Y z%t4EC(X7=XM7~j!EH?S%-M7S~I;9LVK^!F&M^%^zj%Kb!tNx9o!?CRn5q+Z!WH`x3 z^E^#UNICXt&b^gVtjD=x=Il7Jx}QUEBJU%vy2oKpW;8U#vI};nn>)>rX_`$kx2^~Y zeWio^x|hxcN%)#~(!`qn)hum&<_fTc{RBF?Aa$~&8IvtTnMH0-&So~P(-4hv)uF#R zARJ$hLi#a*ZA#aDiy?2QX!@$uJysHAmS{$*x1IPv%{a_(mS>CgJ`}%oi6V#FfE2@0 zI5c&`)ZMGS<&EzwX7K8tj&qcGNuao;O$kgBlhS|sU*eoLb@=lugmSXSPlHX-QUG)Dmx5`oZhydwJKQqWcI)Q3vzC zQit7%rZhn#(D_Pl0MmHK0>;n7TSXQ&tJvPh z?5FIfV#6Q{&JZawR&E0F05w=oLP*bV6GiS70uDxl>t&QDThDoJ8!*Mp0{oZ~3kBXELz6?eAUQl=RvNQ-H zdE&~~GTO5TFC|yd3ce1g}WB-!0G~m#`WC8P2)P4gNTE7iO=r&0? zw@p)wmP0nZ3TwFP=rBI%zK~A=$2nVOA9^S%o63u@1QCx8P^_$=GlxfQA%6_Q@vCZ^ zvG3=iLXa-4~{!xV&iWG$EB3NU)dLmT`kUATv#OX z)K$WR=VwzH$&E8Kt8~=}^w?@_{9_=#I%dlks#+Z z)UHoWwDYW42pr5G`^A3isIItLNLG8TO|J7lSiTp?*FWGo-twH#2#$-B3$E9?67J#r`-ilHk+ZY{>kytm0X zZc)lUjN;0#xW-Lqo~U_c?JKI-=-RAF6e7Mv7%ohqkkF)}tl zjAQ>@;0LjKE3$lyKs>RW;H(F^nes~ekZNWF0(m>Sqx&A`#DCvm~+pJ3U50ZnnG4L1?VhXXp?Xli8P)VK5K(Sm~V#Iua#uf z;|6}Ag+)w!WHY*4do^zRnLRS}3%&Yf*dJJIERU{%xI_xZ7iIF-=z%;`ww1HS zRXE<&Kax zAFYzsRK2xn(9io53dMB&x^eo+C3^B(_3Do>^taR@e%G`0p*iM~Fwjr@TP-+*Vo{qZ zFR5ew#vDha+$yU;(sn{)HA*+KFm*3Mq9X~ie*7->@Cu7rhm-mhmE$D6t;vXPSOVw3 zjv#DgO)>Y9UvxB^*@58jdgFas8=^zNNeKHhs!EV`z+{qlE(_KL8em>->yV9#B~G}+ zCV-F&_u4E`ao3kjSf8;p*dPDaKp6Hr4Cn5N^NQ(C*Kz{b&xcHczE*;@pAju@Dp->|{j9&Tkd; zGdyh|)R|Xov?xQK^|PO`B}4inZlzkp0+*=ZR)d+k)N5wg>FXCv2>t9UNCzI}5)Siw zlI2u3nU!u)L9!&FIfX!k<;J4Y9&c~_ips39Tc83uPGabxS1zV@)PXw|%C~Y>cMN7# zCHaZXj{s-l*p%V!S4!?;q-QB%iJOnU-VMIKW&2x}sbkOt0P|v;hR zUe1-llEeA=gW`j8BOdt|wZ!x$x7R2?AHqY^l);-#Ia-YhdK+(gJPv!zHGacUfq!Vo z2m?Vz)(}3(DUZ)}Y;Q3&BSdNZH&=6+P-R*Eij+qxgc&FGkUyr7Dbx%#3=o$tviU8} zCF&6NjMYjTO7w@L%3)JHmogVm6Fttc<8!fMCk7^11~z;LKNgpH`)dsiJNhISnu(HX%2 zWzwJP6r548J|{53tnjaK3X(i^$Qx=#)Qob%Sq;794=+{+m9n>vqbbt^5|2MXlSdPf z1&V6xyq`=kIva`>rDzOln!*_8-lm_)zo`pDydCH7=&Gn>OA}~iuAgVI2>*2f%h2UZ zCHxCut=aG>qCo84vy#w`EwI~CL4Ptaa$ekCM`&BJYN!}s^c)SNU%^%&MwWToMqbja z?;n*L>RWts8+Vu9qGqu8tud|#4+@lJ09WE_{9Unb$iI@%a&XJNi||eav~#AFehPfn z^h5~HZ{4%zF+z~ZfGXCv*&QGAG-2O=NmxMXTG^V-NY)LPKYJ-E(GyL0J~9}GZ~r)^ zkTuaF60hPT6g)7k!>f0E(qPweOpRk8$IK&($EY=lfDo+X$C(S8gk;M6KOc)*JwxTX zM%QK=xfu0xeTcx?C*Lzx`BZ{T3;$pVIs9r|(EaMO=4bUJQW-gH=vPhw5lToP*3_6rMIr zP3!p0>OjWis3T}^ze=I2dS)UIPejS4*e1vBk$o|h*R0yK4k2||kmkCaRQFf}n7=YE zT2xWgUpV!0v-FmTvkgQQ+%sr+o&U#q+cUFA2lRQpWMFjHxz)=6Y=|3|Ds-XMP2p(4 zB|LO-o{zI-MtgVs^sZRWs@VEciDed*u2Z(wshjcD&}6_@R*Cif%830YpVXQFccS%~ znQ4*Hq=aMLK>!GNsABJ4WQ3&>Sdn9LbaecmzdNt1iDqY!w*mcXyelr{ zw?5L=`TJrrLDC9GK`^AwksZ0%=H`ja3hN_%pO(Puydh!+n8GBwreDp7Cj-IwNI!mQ z-H2dyMx1X$f(xamn^f9+Sj08nr-LmP@ddl~vtqMBQw#WpHkL58`|ALNY-_%>p!j+p znGon`V(sJK&TnEl|2BIUyeVr;gB{@H*T}Hja~!N|9ZU0*I@MADfGL+}i(p;3bfh>7 z6AvNVYG;2?Khz#aGc+{Cjp^Iv6|F`V+nxjQ_ojMeq$Z^;}Il z@n%ZQZK!R`nJM`D+1fca$Wf<=t4hC&?j=L>hj-ptZn*efiE^H*%Hda}b`{IU*19N(DEOc7sI*&^$Qm+^94F3K+D{L!GE@0INsP;GAa!s*Vk^c>*qmFG zm8Anxgzoeqf*|`-_s}M=gPI=Iqo9S+nj80Ch}Umt39@l~*17sdPgeuQHjBs+fh(%@ zd7bqYwsD7J_6Av8>k})2o5l;khnRrN1fQSrkU!-j7Il0jEMl{CJ>C(QBQkA7E$xUa z&c-`xmDWx6DQRXxA)eSq)lQqhqoxG|yRK0Re^A7{w1?tpYbLZz;;N-@+Q{go!2(oj zi$Pu}6uLEn`_6$?OP!Yt9|t|e2Oa#-7{<%0AP2h^U+q=RUKsTyVFO1K3&UKPs7u^Y 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 SA4~s#t!MxLpXc+R3;zd7DIh`s literal 0 HcmV?d00001 diff --git a/blog/2025-12-03-introducing-kubemodel/index.md b/blog/2025-12-09-introducing-kubemodel/index.md similarity index 63% rename from blog/2025-12-03-introducing-kubemodel/index.md rename to blog/2025-12-09-introducing-kubemodel/index.md index 10d8473..eb9b041 100644 --- a/blog/2025-12-03-introducing-kubemodel/index.md +++ b/blog/2025-12-09-introducing-kubemodel/index.md @@ -2,7 +2,7 @@ slug: introducing-kubemodel title: "Introducing KubeModel: OpenCost's Next-Generation Data Model" authors: [sparshraj] -tags: [kubemodel, Data Model 2.0, Kubernetes, UID, mentorship, OpenCost] +tags: [kubemodel, Data Model 2.0, Kubernetes, UID, LFX mentorship, OpenCost] --- *This project was initiated as part of the LFX Fall 2025 mentorship program at OpenCost and development is ongoing.* @@ -13,17 +13,17 @@ OpenCost is evolving. As Kubernetes environments grow in complexity with pods be ## The Challenge: Tracking Resources in a Dynamic Environment -Kubernetes is inherently dynamic. Pods come and go, deployments scale up and down, and resource names can be reused across recreation cycles. Traditional metric tracking that relies solely on resource names struggles in this environment: +Kubernetes is inherently dynamic. Pods come and go, deployments scale up and down, and resource names can be reused across recreation cycles. Traditional metric tracking that relies solely on resource names struggles in this environment for a number of reasons including: -- **Name reuse**: When a pod is recreated with the same name, historical cost data can become ambiguous -- **Resource correlation**: Linking metrics across different time windows becomes unreliable -- **Debugging complexity**: Without stable identifiers, tracing cost anomalies back to specific resource instances is challenging +- **Name reuse**: When a pod is recreated with the same name, historical cost data can become ambiguous. This is particularly problematic in stateful set pods. +- **Resource correlation**: Linking metrics across different time windows becomes unreliable. +- **Debugging complexity**: Without stable identifiers, tracing cost anomalies back to specific resource instances is challenging. KubeModel addresses these challenges head-on with a comprehensive approach to resource identification and tracking. ## What is KubeModel? -KubeModel is a new internal data model for Kubernetes resource tracking in OpenCost. It introduces a **flat architecture** with core resource types that mirror Kubernetes primitives: +KubeModel is a new data model for Kubernetes resource tracking in OpenCost. It introduces a **flat architecture** with core resource types that mirror Kubernetes primitives: - **Cluster** - The top-level container - **Namespace** - Logical resource groupings @@ -34,27 +34,96 @@ KubeModel is a new internal data model for Kubernetes resource tracking in OpenC - **Service** - Network service abstractions - **Volume & PVC** - Persistent storage resources - **ResourceQuota** - Namespace resource limits and requests +- **KubeModelSet** - A collection of KubeModel resources for a specific time window +- **GPU** - GPU resource tracking *(Coming soon)* ### Flat Architecture for Performance Unlike nested hierarchies, KubeModel maintains a **flat map-based structure** enabling O(1) lookups while preserving resource relationships through UIDs and references. This design choice prioritizes: -- **Fast access**: Constant-time lookups regardless of cluster size -- **Clean relationships**: Resources reference each other via stable identifiers -- **Efficient serialization**: The flat structure translates well to binary formats +- **Fast access**: Constant-time lookups regardless of cluster size. +- **Clean relationships**: Resources reference each other via stable identifiers. +- **Efficient serialization**: The flat structure translates well to binary formats. +- **Use case agnostic**: Flexible design supports diverse consumption patterns and applications. + +Here's the core KubeModelSet structure that holds all resources for a time window: + +`core/pkg/model/kubemodel/kubemodel.go` +```go +type KubeModelSet struct { + Metadata *Metadata `json:"meta"` + Window Window `json:"window"` + Cluster *Cluster `json:"cluster"` + Namespaces map[string]*Namespace `json:"namespaces"` + Containers map[string]*Container `json:"containers,omitempty"` + Owners map[string]*Owner `json:"owners,omitempty"` + Nodes map[string]*Node `json:"nodes,omitempty"` + Pods map[string]*Pod `json:"pods,omitempty"` + Services map[string]*Service `json:"services,omitempty"` +} +``` + +Each resource type is stored in a flat map keyed by UID, enabling O(1) lookups while maintaining relationships through UID references between resources. ## UID Support: The Heart of Data Model 2.0 The cornerstone of KubeModel is comprehensive **UID (Unique Identifier) support** across all Kubernetes resources. Every resource in Kubernetes has a UID - a stable, unique identifier that persists for the lifetime of that specific resource instance. +

+ UID Tracking Metrics +
Figure 1: Prometheus metrics showing UID labels for precise resource identification across queries.
+
+ ### Enhanced Metric Tracking With UID support integrated into OpenCost's metrics, we now have: -- **Stable resource identification** across queries, even when names are reused -- **Improved cost attribution** to specific resource instances rather than just names -- **Better multi-cluster support** by preventing resource name conflicts -- **Enhanced debugging** through stable identifiers throughout the resource lifecycle +- **Stable resource identification** across queries, even when names are reused. +- **Improved cost attribution** to specific resource instances rather than just names. +- **Better multi-cluster support** by preventing resource name conflicts. +- **Enhanced debugging** through stable identifiers throughout the resource lifecycle. + +Here's an example of how we track node CPU capacity with UID support: + +`pkg/metrics/nodemetrics.go` +```go +type KubeNodeStatusCapacityCPUCoresMetric struct { + fqName string + help string + cores float64 + node string + uid string // <-- UID field for unique resource identification +} + +func newKubeNodeStatusCapacityCPUCoresMetric(fqname string, node string, uid string, cores float64) KubeNodeStatusCapacityCPUCoresMetric { + return KubeNodeStatusCapacityCPUCoresMetric{ + fqName: fqname, + help: "kube_node_status_capacity_cpu_cores Node Capacity CPU Cores", + cores: cores, + node: node, + uid: uid, + } +} + +func (nam KubeNodeStatusCapacityCPUCoresMetric) Write(m *dto.Metric) error { + m.Gauge = &dto.Gauge{ + Value: &nam.cores, + } + m.Label = []*dto.LabelPair{ + { + Name: toStringPtr("node"), + Value: &nam.node, + }, + { + Name: toStringPtr("uid"), + Value: &nam.uid, + }, + } + return nil +} +``` + +The `uid` field is now a first-class citizen in every metric struct. The `Write` method serializes it as a Prometheus label, ensuring every emitted metric carries its resource's unique identifier for precise tracking. ### Implementation Scope @@ -69,7 +138,7 @@ Resources enhanced include Pods, Deployments, StatefulSets, Services, Namespaces ## Binary Serialization with Bingen -KubeModel introduces **bingen-annotated Go structs** enabling efficient binary serialization. Bingen is IBM Kubecost's internal tool for generating binary serialization code from annotated Go structs. This provides: +KubeModel introduces **bingen-annotated Go structs** enabling efficient binary serialization. Bingen is OpenCost specific tooling for generating binary serialization code from annotated Go structs. This provides: - **Compact storage**: Binary formats are significantly smaller than JSON/YAML - **Fast serialization/deserialization**: Critical for high-frequency metric collection @@ -85,17 +154,6 @@ The **metric hydration** system populates KubeModelSet instances with data from This creates a unified view of resource metrics that can be serialized, stored, and analyzed efficiently. -## Integration Testing: Ensuring Reliability - -A robust data model needs comprehensive testing. The KubeModel work includes extensive integration tests validating: - -- **UID format compliance** against RFC 4122 UUID standards -- **Cross-window consistency** for stable infrastructure resources -- **Ephemeral resource handling** - recognizing that pods may be recreated between time windows -- **Metric emission verification** across 31 metrics and 9 resource types - -These tests run across multiple time windows (1h, 6h, 24h) to ensure consistency and catch edge cases in real-world scenarios. - ## The Road Ahead KubeModel represents a significant step forward for OpenCost. The foundation is being laid through several contributions: @@ -117,11 +175,12 @@ KubeModel is being developed in the open, and we welcome contributions. Check ou - [Flat Architecture with Binary Serialization](https://github.com/opencost/opencost/pull/3443) - [UID Support for K8s Resource Metrics](https://github.com/opencost/opencost/pull/3366) - [ResourceQuotas Support](https://github.com/opencost/opencost/pull/3435) +- [Initial KubeModel Proposal](https://github.com/opencost/opencost/pull/3485) ---- +## Acknowledgments -*KubeModel is the next evolution of OpenCost's data infrastructure. As we continue building out Data Model 2.0, we're excited to deliver more accurate, efficient, and reliable Kubernetes cost tracking for the community.* +A special thanks to my mentors for their guidance and support throughout this project: [Alex Meijer](https://github.com/ameijer), [Sean Holcomb](https://github.com/Sean-Holcomb), and [Niko Kovacevic](https://github.com/nikovacevic). -## Acknowledgments +--- -A special thanks to my mentors for their guidance and support throughout this project: [Alex Meijer](https://github.com/ameijer), [Sean Holcomb](https://github.com/Sean-Holcomb), and [Niko Kovacevic](https://github.com/nikovacevic). \ No newline at end of file +*KubeModel is the next evolution of OpenCost's data infrastructure. As we continue building out Data Model 2.0, we're excited to deliver more accurate, efficient, and reliable Kubernetes cost tracking for the community.* \ No newline at end of file From cd201c03babe859221119017cef3e1136f8d7bef Mon Sep 17 00:00:00 2001 From: Sparsh Date: Tue, 9 Dec 2025 12:54:26 +0530 Subject: [PATCH 4/4] Fix image rendering Signed-off-by: Sparsh --- blog/2025-12-09-introducing-kubemodel/index.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/blog/2025-12-09-introducing-kubemodel/index.md b/blog/2025-12-09-introducing-kubemodel/index.md index eb9b041..2bca054 100644 --- a/blog/2025-12-09-introducing-kubemodel/index.md +++ b/blog/2025-12-09-introducing-kubemodel/index.md @@ -69,10 +69,8 @@ Each resource type is stored in a flat map keyed by UID, enabling O(1) lookups w The cornerstone of KubeModel is comprehensive **UID (Unique Identifier) support** across all Kubernetes resources. Every resource in Kubernetes has a UID - a stable, unique identifier that persists for the lifetime of that specific resource instance. -
- UID Tracking Metrics -
Figure 1: Prometheus metrics showing UID labels for precise resource identification across queries.
-
+![UID Tracking Metrics](./img/uid_tracking_metrics.jpg) +*Figure 1: Prometheus metrics showing UID labels for precise resource identification across queries.* ### Enhanced Metric Tracking