From 4bdc352556d6f0db754c5396a4d870f808a3bd76 Mon Sep 17 00:00:00 2001 From: zakhodyaeva Date: Mon, 2 May 2022 17:20:01 +0400 Subject: [PATCH 01/10] update readme --- Readme.md | 16 ++++++++++++---- images/custom-field-values.png | Bin 0 -> 43283 bytes 2 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 images/custom-field-values.png diff --git a/Readme.md b/Readme.md index c5f8a09..6ceecef 100644 --- a/Readme.md +++ b/Readme.md @@ -4,17 +4,25 @@ [![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) -*Files to look at*: +## Files to Look at * [DateDataSourceWrapper.cs](./CS/WpfApplication1/DateDataSourceWrapper.cs) (VB: [DateDataSourceWrapper.vb](./VB/WpfApplication1/DateDataSourceWrapper.vb)) * [MainWindow.xaml](./CS/WpfApplication1/MainWindow.xaml) (VB: [MainWindow.xaml](./VB/WpfApplication1/MainWindow.xaml)) * [MainWindow.xaml.cs](./CS/WpfApplication1/MainWindow.xaml.cs) (VB: [MainWindow.xaml.vb](./VB/WpfApplication1/MainWindow.xaml.vb)) -# How to add custom Field Values (Rows/Columns) that are not present in a DataSource +# How to Add Custom Field Values (Rows/Columns) that Are Not Present in a Data Source -This is a WPF version of the How to add custom Field Values (Rows/Columns) that are not present in a DataSource example.

PivotGridControl does not display field values in row and column areas if these values are not represented in the underlying datasource. As a workaround, add all required values to the original datasource or create a datasource wrapper that contains all required values on its level, and there is no need to modify original datasource. 
This example illustrates how to create such a datasource wrapper. It is based on the How to create a data source wrapper that adds an empty item to the lookup list example.

In this example, the CustomDates collection is filled with DateTime values based on the actual Start/End DateTime range and the specified interval (e.g., Month). This collection is passed to the DateDataSourceWrapper class instance along with the original data source collection (Table.DefaultView). The main idea of creating a custom wrapper class is to merge the CustomDates collection with the original data table without modifying the latter one. So, when PivotGridControl requests data using the common IList and ITypedList interface methods, wrapper returns data from the original collection or generates EmptyObjectPropertyDescriptor objects to return rows with null "Date" field values. For instance, check the DateDataSourceWrapper.this[int index] and DateDataSourceWrapper.GetItemProperties method implementations.

You can also check the following example that illustrates the ITypedList interface concept: How to: Implement the ITypedList Interface. +Pivot Grid does not display field values in row and column areas if these values are not represented in the underlying data source. This example demonstrates how to create a data source wrapper that contains all required values on its level, and there is no need to modify original data source. In the example, the `CustomDates` collection is filled with DateTime values based on the actual Start/End DateTime range and the specified interval (for example, `Month`). This collection is passed to the `DateDataSourceWrapper` class instance along with the original data source collection (`Table.DefaultView`). `CustomDates` collection is merged with the original data table and you do not need to modify the data source. When Pivot Grid requests data with the common [IList](https://msdn.microsoft.com/en-us/library/system.collections.ilist(v=vs.110).aspx) and [ITypedList](https://msdn.microsoft.com/en-us/library/system.componentmodel.itypedlist(v=vs.110).aspx) interfaces methods, the `DateDataSourceWrapper` object returns data from the original collection or generates `EmptyObjectPropertyDescriptor` objects to return rows with null "Date" field values. -
+![Pivot Grid - Custom Field Values](./images/custom-field-values.png) +## Documentation + +[Fields](https://docs.devexpress.com/WPF/8024/controls-and-libraries/pivot-grid/fundamentals/fields) +## More Examples + +- [Pivot Grid for WinForms - How to Add Custom Field Values (Rows/Columns) that Are Not Present in a Data Source](https://github.com/DevExpress-Examples/how-to-add-custom-field-values-rows-columns-that-are-not-present-in-a-datasource-e4493). + +- [How to create a data source wrapper that adds an empty item to the lookup list](https://github.com/DevExpress-Examples/how-to-create-a-data-source-wrapper-that-adds-an-empty-item-to-the-lookup-list-e1180). diff --git a/images/custom-field-values.png b/images/custom-field-values.png new file mode 100644 index 0000000000000000000000000000000000000000..390ac26bae5c0f318df6e7ba8af6623514391cfb GIT binary patch literal 43283 zcmbTd1yo#3v^5C9g9ZpL!Cev@f_rdJaM#A&2|e=BA%#?!CUsxkTpj;otb zb#9Kcn2$&2HE_Q!heHs=DM4c%Y2s~o?Z1i;k{cJ76Bd8do;OC`_ie+crTMzS69KV| zKxMcMFWWLPMw+_E%RmjKjT{P^tOp}0xwx<@jK?jq!t>_F19$7o^3D^{w@+YWKLyH6 zqb7qlwiu%zP2L^vb=DH8*QY$EdBV7qKATO4XM{Ud-LFPb2pj)=v`_xbc>Qa!yVS6# zXQJng_!O<)@8(jw<@M5Of>K9?r!GY$tpSIOZM@jeBCjn%qQOFMIX;Js|BNvt7rjS9 ze=gckh?Ak#cpFZHTqGK}dDHp4>RNAVK@Xu0#1vZXtrP6~y2?CeGkG#8Wb-k%%z_ViujrA-~CTLU2Csm{vwj~S9_114qOJ9HZsH{3_ z0^yyc4$}%0LU4yzO4SVi^3uw}Lc1C7<0Dixg+u4p#mzQgTHp<3B*mbfUw*P%3*&$m zBs-}uj!;m{6feKfZux>PKqG>aw46A?Hry)|E-nSXy)>W+-%0$llc=q=wTX=rl&FJ= zfs={xJ68)Q^LLWca*7&X(Qu)l-a$!=39GuzA1--ntIo7OKPT0-_sJY7DXBO^DWL>k z)X0?;6;aTm(Gal8=6yGhg`TuEMC+%Oj!X78{@q&xz40S;(qAzmM2t;BQVvhaJ`Ast z(^{D}bWlw$JjZ%Je~;qq-srfI6$McOHEHzxboJEk%4E0!r~2BbdRn(x>&urfqWb#p zptiQQ5Xk~CL=eH?xeD8(nTGNT@tInuJ>|BAMV9YC`^!I_IG6HYzgz^o!Sws*g~+Su zfBr26h57e&h)6>Jya1DUY5WxW`@`ZmVdC^Zu-FJ9tdWH>Zc~Jgyqk{8Z$45hSd)+D z$MPl^0pA#6dqDohY1!_6sodqwm=ZHo^EljR8EbOf9OXiX@Ru7kC0Z}kdFMWw4W~}6 zd*HvK`MV$H8X}^iwwCQ(U0sAW6mjqV9t~L&${zGTy{chAMMbSI1N}#X6aK%0Fwcoc z$;}iSfr zVIzN2(C8KA8;HX%Fw3%R#6#+0dK2-(nGe5$&HZBc;6~}AxZ{D%@@Z{*!1qf|}XIbdubixVlI=?(6`L4l0kJ}-}lMq5F?9gK*BxV zXC*6h<>To|7)?D{j3gqNm?TELzOd4G@^VGWgJWKLG1$P(q9S-VhzpIs{C4Mt%;Qfu zSrHfPFvlC?6}#xjHU9L4Nl7uRZMfC2_q_fp!DtT9df^2KM8_K?gxg+O?_l8Xzh~Ra zwyKLS)sEo%xg5=l+uPg6ov3JQ|0&mLwy}lk!U*qF_b*d=qVtc|r+i*Cg{C%qsG7}D z^AVS4PB>~=Mn*=~;&^L7sDflQt*yUYQ2Xc7p7{yvKl2%)CX_kexG`v5tODf|vXZ3E zNqRfZ@nrWf=8A{)L2+LmSbKJTq>=FmA0WCM-_uL@dOI(E7l=+yns=Xy^5gLjlvupq z+2@|p>pxkx#DCNgoqR{!eQ?0NHJz)XqanUx!0W*-XM9K~@J7LQ0zaHoFjJ@5#s22R zpueg+7`@tRhPf|_bY=T&-VHtatNu4sGa5xW%O@no;3l3RN_P@WjTo#2b3BcWnYWug zyus`PMLY_(6Mjrw!LLD}fisG}ygt&jxi7XOcQppnT=k2x^75eSBPWK##m2aY2d}g9 z^SMUHoic`-E(?0^3)vG359s5Kds_k8+vKpUBQm{i-cs(cAgV?6gGkvrQe{P*qlF4cu=%M$8cF4Y4GGwyOo( zaE^*-Mtm!&T(@;P}P01+3{P_`b}a9icBdC0xQDW*^!?>{#BQg!}B>|C^H zj^3FUAD)EHwJ&bjOL*>U+wli)2ZPVKD3ioHGx85RMF!n-!`1$u=LVGC_^QA>@h?!D6NVfh5vc=9w#^*Bieyfrx zk0EAW!II)_WwwKspu5v=go!5Nn9yUNy9BWQjDaP$J%&=3Dyt1?i?vYG#jL+ zANb;d)p*O0ay~P5Z(_Ytk9)Fpw*tfjmoMt9JLzqFt>ftrqp9L0KZG14`jK2A8S?(9 z`1hSh9bR5XET7M$*|m-~(swe*s0Q$LM{E{;o1wQx-RsE0I?bRSF`(C|9-7STxC!)7sf z(4rVFR{&jS+Z5B^qyED^CFT`~7@Wu+&K$_orQt-3yhx+AYkWv%ehpbVTy9-><6|SS zkOgCm*r(6jnF#7A%tI8(oC-2fi^gj9E5(|3c@j_+VhA>$QgmF0t%LKZA{u%)weW`4 z5rZng6TC2$Qh(+5T3*9{xS-$E#Uh8GcA4J6@XIO)Bk7Kv+at>6y0_p!oJL4YtcQ#K zIar|W;<13tQUMcLSD<4B8c$5@Qhajq%qS=4^5Q(brKs)V4Z`-`mxIqYMvzBLiB~Wb z+YasM#8vVc67OvW89>|@Jk@=IriXyDe5xOlAPP9<%TP zcmO1)AyXUJvhh`{|I&uY=gi5N9w|Zu{BFr^|3KazpM~RdBT7_B9c8RCZiI=WV)Zrt zoA{2iIf*kg-463ZqDP@j561$9EXZfb-SGmcA1elkRmCu^dyibuunLA~t&mzm_&wBH zo}O}$XXC)95Ae5^wSW2%e0{Y&@E<})LGy7cF<3+Xsd(76!jmL*eDBD~*ROO{Jy3fq zOlf*K98WE9f)5Z;?pf~a^R`Z^&vmEii*HWwJ!3OBa;Mv_I}ml3Z)7fPkoKzE zT~2tNBZSyUsaY)8rhT*4_|`(h9ft*p$1+O!fIUs;-7^uLnWd9kpgD2nL=>mt9q_#k zo(PS6K(I<`THNS1JCxS!7{cuenZEu;dbfIij81#|xmj{YA^3JeaFU57y?nFWfVVbl zty<82wrxG=_~6@dyKB{LtGvKmoeee?LR)`{Rh!{OPxF#S4xx+xjGjH3d&xpff8-C3 zR1iG?Xq?(^Cd|)ZB#Wd`92W_jOZVUSq+y8JM#Yh)=Rzih$0>A3HVk}yqAFsZy@{4X zCUa*-X?$m8k|T5#btI=ky%Lv>o1%Cpt;YmcjLN;|9=w8Djr(RpZC*8Hj6&Z*dZu4G$kV;J15rs)Pu;wryEgkL}xedUlxgzX~9q^y{CvYX45FiYo@Q2-%Xt?2sy$ z)=5irEEUnkvhff%L$xj+nui%v;diIIIpCUK?%8&%uDCyq3TmF<*rLlBcFOV(5z8RF zIX!#S9G#6q%yMNxP8>C+VWpkzKs?&cCJh|jScV%)DK76|&ADw3^0}!#-JNDM+a4jU zcAL<|X{k%kgF7Ev=|YMWVmL__d?%BKibEGeSfm* z8@U2r%JTAjL&*rEK?a$S@g24Ut`ynWigMubLVHKsDH6@U|M~3Z&+2?G41gNSpp4>5 zYhV_BN%>6BM#IMFD@mDew|YfbVB@7RQkD&fL=+y0mpCynFjyg?pn$4!T3Uz{hWMHy zPoDQnomZxxZPWJGs`)9I+)`kCNyU1GQXZ67Dr9^sZKX3lEg_Kw>~8kEg!TG^Y3XuW z=jyB%y4ZBs0IAN+HxD$p@^eik%1b2y2OEUaY8Gj+hBw4?A&_!=j z;Pw_MoLMg4IlrtbM0-!CB>Mk*v`z*s^$%>OgaStJSC>5BjY3-n8>brn{hkuaneKy* z{r&5_aT1`%n-Ad11rbEP|A67qP?Ue;@&8wX;G`3n7qkmLn99O^UCvbvflDt*T`2TV zZ;+1MDmZi?$ny_;=>X6Zu+NzS)3Pmzm=ZQNRUm|=H%4bUJ1_;e;mPaG_nc^az2UH8 zIBi?|EZ(3I{?*R{l!I27}{EoGUWyZ$FwhRyGRNlvNo1i3JdB*LM$_J3ICE6}*-TXh!BjTty{Y zo44g2(5*Y{;mwE)%`#@;f%1c*<`C6=382Yf76j;{B++Ki;3cjs{UcONB7w`JlabY43VH z10l%ZqWCGlL3Fy!J6V?EO@Ks2#}n>N8(I>|woLbImu#ON#M*qTP$}*fx!Kz|Wq%{c_>R)?h#r`_j>SBtgZP z>d>H_xKuPXWJFWtdeE8m4DrHT0X$ooC-Ob^{4btyc{rXlkSuB@wVn+S&Kx!Qxb{OI zrho=C1-?&rp1dF4!clp17M?jyjVYye#_gTlxHx}a__QQ>$nP6xdt^mfCPYYbJ^f)e zMrLp89VX-69}?CelZCgOG_c@ib{M0~t1sAr^`;t?F0DA>Vrkw0OASfGee*_GOiV28 zx}=0Zl!*aW>!;&fNQ1L+KfIv_b!0;z*{;ghH}<7NXt|y;_u+!W+XEhdP??7|so%YH zF(K#!-(x)`?4^sAK#<8$gxlA7D@UfNCM(vW^6#EWO#MD3(G~AgLr~qVJ%>8G$1WA0 zzoZ%%e|d86_mppehmhtsm46?SJP(~LZ1!pi)usqp9`^$n>Mo*4+;>DdOH&iS&`Sh4 z>sgwyjVs{E2xzz*naWsCg=}9})NNK)?}!l^lb(Ku=v8CG@-%Ee@?in^aVn9xlvQC(I$8rw%F%oazK|lK zm~pC>_GJ+!T;G0SXQ)FpmqsXf@Z8G*_9}X&U-B{^=Jt%KDNpXI#Be0`D{(nY=dQE_ zOk6dL1WUQ=;mN~?9EG&}qV)LTFIMW3KY62T-6Pb1BMOXjHE;_*|U$JuD4h{|F zWB%3jk|#K%>Kid~D54Dnjw<*AFpi>tYhD6{A@aXS6aP!H3xItG*8HDYX{C^rqo-2) zSp<5<_QYp|bmpvm?U|ON=ja)%md2S7t@XJAxJ%PGPwRhXug!Gk0NCsi`_j_h`{8f2 z07uUod(7vq8X~NLSwYtJZ9^1S`W;@e-K)wp#@?(zR=aHLps1vX9T*Q`c{8)=hyO`A zCMSUh^SQx!{)z#yxzkowT%M?s1ihnc18GkY=EoTmwg@6m;mRaWYvd0{bne8c-|h+N z4%ckI(kB9=p(fu1rn17hOz7^OkoxpqPLEF~=!=UJ8pweG$rnb>$93Zo zjG^vZ^6-FYp(7d0iI*vUa_fM{9t0p(mI@z0=0b!lU4*WM3(boR4(p$jFX?EeSqx*R zYnRO%GU(FIwRy-FuZ6^qHqrp3C||K4UD_vSZ`j+4@gwT-yDd*h@$+bbBD_CS~|vOb6g z!Ly0v&Tz=j303y&K)hNlFOX3E_BFU`^hf2rQkRY6QyFk80}e345ax*N{Q8P~dT{u{_ z;sud2>!>R7Qogr5X}{zmwr?R!hbl4M1wlIlEpsPWs}XtzuZuSdDuF8$g-56fRdTaz zJ${t|`ffkY%16CkY}keNHZJ@>aMjDNObh51^~!|vWuZaZsifQ zR1LawEls6KpuUVVGvS;1$irD7+0mXi^{lYo^sMBO&U5>E-lj3NXT`Z_LF z!Cir|HRaQ{nO6?Axeh`nlub<9J$aWCQuN=cT_!|uSEo!BzP#l$e)ydi7P zdzsb;9`6SWPK9YB8*>i<8)BZqdZ!phUfYHvb#?XW)#Ad!mKJRfzmE-Am*mbXm-E^H zP;sL=B7=BoeP+Z#5;__K@K_u8=|8X-Jpjf2$`c`1RP5{*1y@$X=XfSK+%IXJffm@2 zJu}00oJY($xqWnLR}*EOv|~iIOFwc+Ac6({&W+&4IP_vNI&4`E_UD!qV9yna^Ly>E zu0DQp;bExdY*gg!QdKA5D}hL+IXz}~|71Ac*R2M}Q|WPGnzrCTxIIfmpH~JXst_0I z_&jnrlimP%t~U|D(-EGw3w_q#J{~@2`fl#sTiPagcjiQ(S0%qgjSQv>=S5ixV^nMW ze?c@y$DL^r=VWXad8>>@Pjc!|(yP;?PcVsPI1+mT^GI7?``NhgrXUGl*i^~Ab_Tao zeZ9m>+H%y@+OW7EN1pL@=Sfhl06^$yXzuXTMe0p zpY3b*^2;_KxK~7~(tmg%3y^%*RP}}oejzRnSY}G<%$!9cdKBtcywX$)w#iL%gymv8 z)YUgN6|D3}WJhGFwowb1K4`nQOP!bd8>GkSPuImD_3?BA z+PSW6b_(5{w$aD5x06vRU*CK4Zyc@_#ldB-uNzX!Ca>BzCr)$hY)c&8C5N028Ja{E z3fs=J^4z1wN3J;l5?f!a(GZzB0NSFc3SWUt@9RuK!|`C_o+YL_AQ1s_+Q8_j8KC%_ zwc-M+jNQ2w<34=gwzOevuE$02cT776J7F^Q-sSEk9kzDGrc>Y_uXntu?@-`b`rG^E zS|!w$Y9+MdNnXe@-c?!9ZqS4_q)5OggoMoqaUWIKQEtTVgH-(ePz$2Ns%=$(F|{z)sf2Jb&;q<)8j%`Qhd4Gj(8s-PfvK=PWa zwbIBnsb_(L4%#$+s8Szihk?@{R96JB;{avbhZ&PJEaR=N>hJ!shmzB;_^CSg>jvNn z8+qPp-h4qCogb2dueRcDx?JnGtmW0!DpN-i2FBVWSM;(>o!Jo%XP_udPSSRFKk-!A za%0iBbLgs*{BH1^qID>TU?WUWObITI4rgCD>Q8ZG4!_O{&PzngXy*H;D3);(E z$#5e=4h~3nOq{Xxd4AV$I_0 z4miZGMkxfghA-gyXp3S1>QR8#F|b)VS@7DrtxXa2ne_##Z|v)gNGB7ORmO*!kzR>k;br@>c}n4T+D zwxXbueq*a!RwpwQ*X}1rR`Gn-b1O6(7hmvvf+^mYMBg?rzi39FmF-A4J{uHKD?e1T z>#^y>%_*Q(<_=#YdskchLUjxo)$yB4T;zV(yo)ZTh0R8@XJ|~Z%cpc~-uWC75)vH^ zY#$;u?>cHS-`0{brq<|ceTc{-XF_>1cw=Fzd>HrcPo&92m$)pDa9Q4JYGne!Gl^>&|*QnKEB{wJVJMk;IG3xmt9)tV2%-vm%lOY9-7i>oG@Zgm5K^ z)e7Xu=fS73RApd(fyfiJ)UQfezbR}C%GfG{vzMA(VYs_Shi`&Lpc5U=$p$!!y-Yx?s#9*L&nwolQJW?+1DIr+x&Pbct4qI0aCOb)C)OoufH)n)j5PQaf-WP42^jaF#V!L>M zedOm0R5-vov>jtUQ@!IGCt+~|1&An%rfRujt#nOBYpEwGIIui@YPVTRyb+8 z;cqoNzvok-+>b7l>GPufAqr;tXy!)n3qdDWr9C0_N0&Bi62T07hu+Cx>Ql5_Dx}@~nsZbDcq@V;O?W(d*t{*&vh2-OR_Z`iC5E?@0p=B65qWO`S*E;h^EAbvalz5W>wUr7G2?@A;@KeavowjX zlp(NTA|lncX%cbu*4x!ks}`PM`j=v5!&~~_p=p~${+A-q``JX+$>~f97}gm^4e|!` zWRXXUy3MG2mMsc(ce(|i4QWz-yWsb$B@_75H51{_iRbcG&g6P7O+I!$wO}UkP6zdG z%(}te; zvOp{LyOs)^<;eYG;ycHVFF<~d$MVr~1$pP(M7!O{=4i~k5!mYowd4C_%8m??KIvPF zAYUJb5L()VEJXMK+{V5iR$tS1?DnB#fB2!(-nltxvfF5`f|i!f;Be@%JA%avMz&P2 zh##4OEpvaE`Tme8XKjx>J{^=9aR71n`sMdpt4gRldo(l8>%&bCoH@~49Ol<5qTK8* z?YTPC4DHnYx-m2})x~QT-w&N141b=t{fIj#CTS)W|04W3Ea8QYJf@h?h5sJt-)^{D zmQm`Sz^3Cd79^Cs{wDcLkgMwCM7N;t z_9fT_n6c{*2j?~O@QAR<63VeIl{mba7TcoS>b0M>5$Pfs&MZc}3wlqAT(*cXK8D&b zM4fP{y!(2OR_$uZI_f$lXvN-$P~?wJPdKZE(Y36)V>)3;*rBoXgdc~410(x~Ex^v) z7Smw9X)b75%@~**5O~eu$X$S6OV4{tBc;NlTN~=hA)^P2lr07d<<`StA&? z{6h8H+evk_ewt4r00?!01CVl4*%lX}AHZVruL8~A=M$M$9DmL{hJRa|zRDNA;#8qhrrko63Ap9k`C{QD((28!-qK8N~lT}zG z!x4XX@AZp%u>08l+Rpz7a!+G>#UyL!L?OC!cQ;d=rTg4*(;7t_YKi>n$Iz_c+A zLvsX%-^XaIyw_lNgl0Jc+h~4Di#HIbv83hEmG(rmK({~!$1v(NsoLOT zaiZe@c{3#`VhTLmwYXQN6!jMAt z>XBQv=cz|8=t+>A6SHp@hj!x;*RvWyYrZ!_(qopL_eNN6DQ9hqZK3NH9=;VmuG{nOqhdevP~aM(rR<;Pj`z$V$H{(Q!3{(8Zq8yl|q=fU?Mwk_|2 znQ~K>^7%j31$z_DIBRexzSo!+bt2Iaq;v#(O%u%uJGfy>PtW(^uG3wecXpTZ*{o2- zi8Jpc1RpUFSRd;q$`pGle>}8$W}JUgl4h@Nt_iLQ-u(=X*g^XIiB0aqScX1ZbvA8) zthlgJ?CFqZsByMSmJjW6bbqa+UJpA@kQ!l@A&7J)yDB|yZ4RhQmrir^ggY(G1Q)TF z)Qxxwg)&r*M6t$fHr%yp`%+7Dk_AFngvJ&e^ld>NlEKx&)Xvdd*Bla{O zb&3zs@*5H9vg0Jsn=`AwIofOU5_WR z6Kjrl9B6w~ljS>$b?MX{y?Q%T9PWWEuH@!=>Uy)ZZ|y~PWZ!*dci3!!EJ*;D_Li|C zJoXAB0}!pzxlEM!&u2cqcc8<&J!cZR*;S z;fZgvwAw*;UKE(jAShU}_ou4c%PAyT61RmtL1cYmfVFJ9M^q`4GW+UCW@K8sUu#Cs zd+u0(I*Ozy5Cd8K+j^*@0?n{^u_5p}hc#Ta8yw!K^6Plc>=*i@HrLZvuBNZU!Btg8 zG>G9JSTVC#V8hq=X_+6fEhCj3tl`luvIb}_$o%&sm6!4{$2j&a_fIdUi&;D$VY?~y zjm@6ZVOq(6X&|r2%c8BeOhymwV~o`%OqF#&v=~1*}+xin5HQGgxSZ& z+CYLLYH>Du$7tm@u`TTkO zVugr8H-FLd{C)^70Q0;*2LZ`0=!7pIPmCXF?G(wu7ahCN;aJaZ*y!9ZqP` zM{Xq*in6KlOM_pdCNAwNf2gj_ovz4vv*JoGxWk84%y}eFL`TLZ8cGSuJr5?G^)mCf zM;jSY(P>%+qWNYNw;78^^+}s%rtNdC*!6Bv3M#zC1#N?TDuTk2nw8Tog?1*wblmy4 zXS&oi20w8x+rG;6)|%hNu634U*;SbKhOE6>`J#xPf&N%xRm`n6bo+)EQdhCdL39jF z(`Y9>ztMN3G!02gLAKISpJQzg!#XGw(f*_i?LG z;v>=dugA>z64i|IZ3SC_Ww+ZYdig914`Ds$ZDe%Zn~|`aX840$Ezck(8QRAZY;KN(7C_O3B3q%LJuT$4e=y^dYq3kMmq#P$MPYUy5~4sUFg(=_g}SjT^Fq!W9BE+Xq%ZaGRs^71zi=s4ta2K z1h$+HL?IIFSuClm+medK3v2CRiKlwcF3wAhPg)`6}fFHb1bD$In&- zC=CW~my2-K%9>z6J*RyYlMd({IOtq3JRa^i(a!6zBk}|=0|W3J)Toy*q9_GW9PFr< z)wU{~d!J@V-d%qX>qikbm5rm>xbDx7pe8!WIE{Akl^28%Ke7SK!@VUddwaJZr3(Fv zRlGMQlJ6x0$+=xt6hV-P`|q)gd0zb7iK{RO2PFZ@Lklx_i~2@4Tz)njF!n|9bXRk= zAhqGI03r5GspIzS&?v|4P&Jj#+W zw9+`fE{p74KE4Dd6Yi$Q;R33Vp8?t_1dDw3&#t3)P3UXvnwANPryjF;pb)eL%Q{(M zj{&Ivq3s9B+~5(^wN5H(5A38fy2lfe{i(r6OYS>+g}#TG4(hd?sS1+rChDLV>pLQE zyu%4@?785vTTk>YPY$z;?n~xrhdTz+yGzJV>nqa5XKnK9Lk5cvj}8^!Q%cT8-=2xu zdvi=qtCcN(J@EBJ6d`JbatY%-&4C@t*m#hg`(?tFc^m(e zNN1v#e0N6=Q30DC(n?`eFRzWGb9Pxer|b% zAXH)ptQp94rG5sdzrGc@H^cL^xmyBnPYFw{S$fjZGp|-Z)iK!(I^lPXDf}JM({gqD zyDrwdXQBDr>iS^VxN;mn#20NNp|Mf5DFE{!$P(-AEUm>k$lh}7bh6qQkyGDMwoTti z1}6X(LCUJuisNv(WyK!qu6c-`Q^3f7ukxPQI(3iW^$MLh*LHjA@`j3Id@Rc%HAlne z@GS+woq=RRv8+^)WxA>2wLQc4C0M#9&$y2bt~G*NTGspglDJ`&pDW&znN!|`lQs0) zEQ2A0Kk2-Jm6!0mnkSJ;GnaT4e(62wIxb$@2e!|m@g}P1btGmyCXcPl3E5ED`UckO z35smuP41rU$N^c65=v2wVfTx9hGc)G+CIsk#5lA zUn1@!vT3XR?03N&x^ah~I1LtPjvKmQZ>w^pEnw|9djxULaenF3ujFaT#-q;+Rf9EChZ~P$U ziT_R5R>GDI1|EeA3}Y-cvgvgA>cXSi8|lRgCHi52$^&P&y5QK9se^^66@CTSQg&2!? zlQ-#dDz0H4A98QZA){Amp`vq#S#24?`w^1kIN^guVz5@3KmX(nrYRpUSiK^%l%@;~ zGeXi3#4eeZ{bBV8U4iheZE?^Gu(b?{3V*!4hxPh;H^k?z_}o&bAg zF}Xm#XOV4J+UIz!?T2pehIBg4sPdzFHjS{tQ|86{eNQog`s8(lom^kyT~hJ+=4w3J zBm0RXu;3XF4z6HP!cLV!E0FL*Ach@V#2-nX3hvH+kGg@TURh87+WUB3GQsHnF`etH z58E&ZyF(8YW!`S`1>fv07 z^6p_S&x{(wX<1~w%PCS94zIiF$O5l*GBc;;m>+SWikodR3wcK3R2fk8TcH6z#rBUO zS)<8LF`NR@E&7OS+TTF3Rulb8^xFflcf^GPBF$%>H znu6NU?vbX?vBW~7X$Ih%pmPR4s3U7dUcaed9M6|o7=xh{E4jhARFyr*83#w*df0`i z&efL-#tg{h5#;d)>_Xjrcq|rIMja=q2P>MggsF(i9V^K`oTBZ^>%gxAI8kP)SoUF+F^U+r`r){J! zIY4BDlz8ib>GK{ujv% zJ{N-&+K5;5<&`-uwdZ@=e1^O*(#fs0b3GuV>--unC!#Qde9N1wi!DMonya%k11Mh2 z#vD9)xxhR-JO5E#iw~cI)xrTlGn-Pxra+AvkumQz76d`~%%tLoWUKqZ#>}assW5y} zXi?+?ng=Z?D{<@GBZ4guw~4R|?D{Prt>##hl02~v(OTUY)#@A8)m!Njd*`@ZVvwN)bB8Ux=OteJtm{BQF?uUpjw-ZFJv26C<)*nPE%K zS4QprJo?3?)^O>D=o%Zaa+hc`>JE=De*I`$Ygnu4evm?k($Xow#atg$#?sbVD_LEs zSymeHQF8k3@gdhLpY*?xLzoPM?Sxvr^G&VSgZCxLE}K-6*-9|7jJ|tp<@UdL9764F z=>UhtnGK_JyCs2PInmH+D2UkNyJzDiNUt(|u&5sJRk-5%2CtMY_u-!PVu}=LGGXso*Z&Neejr``FIud_F#bp(*cyQ@k+B*Uw*Y>g>>mg%ZNhyXy8o5*b&`-G02;i1EDn`!-mtIr2OM zD{=p-6+-3a<@?iWihV-xjEi=#`C(LnAZgk+DD+F)d>9F@R}d$vwh2`~{(}^y5tK)S z>2kW~tcC;jKDzS50F0Ow+y#1?Xiu-9ywod95vUWEk!hW-g(umJ%1Nd!Pom7PEsmn`c^pAC16Y*+ODBg~Ga~O}2}|I~B#-8l9TC{< z1*;i%mvR|Zr_?%|g31?~P=8dXWSI19t4f7AeFjjaW6IJow&Oted{{5x?`F;j3jwA; z8Z-TUw%K4vt+SVXW#Rg{6-{#`2pvo7S5 z^)yU|0*lMm(Q5ias&02H{)zqj{-0kNOyY@-`vbsj*1y%ACnxXMj}GYUcyO=AZpYf2 z62Gg|rj!2Iu-QTA@a&Lg){eDJ#CWyJ41eIEtUoug={Ds!tJpFqxH?+fG4(p~v602d zcYi6!>b81P=gc&uz7W}Kr|Z9vGenpSQokR%YLm}^h5)Dtkx;OBv2lQcBRv7a^rO=v zgya}w>ZKf1MW8xLv;Jj;4E@rMnK@NQ5yr%6c0-5clK4h>bI)6>e=G_~M*Y++>Uz%S zUDC`Fq;@XaH6nPuV0CKRu>GUVa8?-+!A;9NM;m9X z3vFpmuy3|f;6IU2&MyQp35mq_|C3Cu(03dqQ;URPIeTZw4D)=AUx3mwV0gbD`oSD# z)vFJ~%N5lu-)t2pDEnVp^`1`n@v0DDlU<(xDXi+$yZICrY1l05=wn$_{v9q{-soAv z{#%j7^)QIudC%s+!-Z_s2K9}Mr?Q*d0=jgSW~C&Uv1^+X@zqLZv)5p}Z*4JGN#Ct|46FDs&UE#|Zu zV&J4tU^mRN%b;&Y|K{DKqP6qE?FfWA)9Q?J$cC5YlewG=EYr$}_G`s94aaF7?PEix z!uGQtddKDSrq7*^qf`!~ZJ3eDqn+ytZtpyB=81U%hC^2kPv8Hv#r82QxeYvHmig%N zcpTm)?+4KacM|RG zDy2c6T@9a5GLgGrlE4jHEmza5e340kGey`(7mmeV{fzVFw|>4EWgD^A7!Sdyy(RnM zjt!T9;-H5o@l5)n@P>@M{ZBGvDf3e3T~T~B$u1_HW)_C5U$lZW$}f`x^V8tkbmwBy zcLq{S+YunQ@FNb&W*Eq;_3davz80 zELAqfdkvANt*{UY=DGxM!@gvk(BHS48xUr_hrOO1=9~ZAl-lJ=I~CDcFGI|FFqct1 z{Km4J2hv@+LTIe#8dw$E4e-YaudI=`k=7ohOXo7FXr3i2BNOQ5+qA6>TyEHATp*1s z9;Yq5v^uY@$<_B`zL;2$Iq}TtAyvI!ffmka))GcP*WeE^WnR}#XqIH_`Ii&or z@8H>7#GrA?G&aV+9<|K4GIqoN70Sr<=CVws<(NGa*)DGEZ6qo^wKGkD8{NrA=1YNd4{%s8K+SDU{OQo^j2>&lcrxj?!85 zKR62XN&p9=&z*38Q>L)O+5JT#WVca5XSg3UJX1YYS^76Ap&Kdlh=`=I*Ze4Rsg-fi z4|PFv*4T?J$W8iqAoL7K!5M*@q+|j6%<$UFof~VmKUtz4!u!>kItWj6PpsBew)v(n zZ|00jKUwdg#roRUm8TOgbkD6he0-QQDv`?AUHrM@eg2uKDnKvr*sh!uZY*g}q3^u& zp&!W?YnKb_yw47Zq|@)K29Ha6;H>7^+k-rh%l$2T_x~UcKmH~TSH)C(=>&CcE+JV0 zTLRX#g>v<0^FOlARR8>Tc@*Sz+(yZ`=TjbaIhP2cWZA=r!--EyqUdJ?_$~e@X_-Bc z;I_NV`nAdWTE?h;tLbMtKlXi2dwx28PAoVKV8oHB zJ^&1pwk-7G`6uD3e;p$Tu&V}+$fhm3PM3aRDo^^?k#Ft_oRD2;Q7|xAL#>a2j{3*( z#=Oy-z06KGp9Ih$DXJQZGvb&ljByf&C*Y6B;+J}>ptj>zAHFH@wIuH@R`)rz#3gx2 z&d*%`wI%(&&CN|0%;TpF`F&nNBptOVe?k030IA`ycqe z1_cFiKL2aR%^40_*Ygek1_{lZ7g;`SyScvU3k^mwBFB;bScWDPj7EHh=k|1#)c)@W z*3$^qU1NwFffKpIg8k@VBW=XTd=H2l)O@WKZf|dIM56ZvSQ0c>CI0W3iIquo-}1ue zQ;K*VOhr0A&W_zRJ%|0&p&-B<_E#au<5By=r&{8lOq6}5zpNa|4I-u!VhywT?g{$nwblU=Dx9a;03DEtI4-s^t|^XgtXeFH3d<@1?HMDteN+@@(4IgId+a z9s+aty7D{c)3@e~-@CMif_|}8_#p#lQ>4wV{N6Jzl>g!(3t5JeoN!l23eBO-8x;_5 z(>hks*qpD%A|*XW6ke#ab_~e6xw+Arf>9NgFC}T6+pb#-;^7SbzVNhCYv4j@!7nEe zWS+&0Q$1gkoDKs>*;%6{_w9Boe(O`z+wDzREU6ILQ%kJ>gP&~u9O~X_|87;up@qeN zEXq)4@ndnso>-@6FqmXpPKz__f=!z4X3?ba@qVjnk)PN4&NuRSHTPhMpLs@bpH6#9 zrRI#xv;h0Wop8|lqS3Tq>`(vx;(up092opZA4%qYyArK)=PR|~9n%=wyDGyQ=dZ4+ zK0c&^eCL(6zm-HadE*>Cb|r%UKtvXo&w~%_=QrH*gUUkJB8^%e`|UFu*X-N!&y{fn ze5E|OVI$H8UyN`<9EmL(u#wFgs0^w5P4p0*I-=a9x{etsrye@AIa?9}-ZT??%Z^iG zju_IJ8T+4&s%)nCL$&_?eR5lxYQ!^?P&_^!*AO{vZ6X*1v`xTRcCkMd*3iHWkAi2% z5ZrOQp=a^r(iMEfE|8)bs~+1)BqI-(<4wv$_up%5*AyCL$Fn0`SjxJa2?|}G|C1zn zfSRRFgI3O^P0&Q%{Objnr7u-yu%Z}^snz9Y)n(LuDXw|W_FpE?E^_`;S4&+gTJ&|w zybuL95tZ}TeeXx9EcN6{K@uFB_EH`Aom6u?(;Rx?cAiwq;yNnN@I{?9(HY=MkT6(H z4a)`9)3tW9N;ReH6}&6x(FTN!pZuGUyPOo+X|Kk#Oqq>&BdsZio%F4GTWq`H|Am=B z-(lSn-k&N8D=kymYx|OfWCm8?_^hi`RI6&~MVB*IthD)WB`CGz)6yO@Z}YWlEm8Jp z|F_B=rX~DOv-|H`suHb%IkYX!H+&B^mz-_UFc}TqJ5gaK94Nla-=|(GiuN84WW7h+ z$D*pKb<38$mO5c{9ZC4;at8XyfMS!L)C76aY3yI64p1DvbDc3jyG)jrRkXbw^a*Qw zemus)#SPBN%A!D73dafV2<+)mN%5rd@LI%^O@5WGM@{N$adLJ1cO|ZH31{}NO5E&? zpXDtU#SZ@N&YHfK=N-d^61>E#i!{IYEeO5&S(aN@rT`MTtT&Klb)8Ay!o;QHbMY67 zy5}CUc1cUkjn_`=6jhlV-Nm}Y5O$USGuCni0H-XD6(eIMSe^=K9n`sJ#> z?&7-FQ-9**LP;7pq&;=)SO$G!JXIlnS1!mDZEcPH>Xv$shw2>l1YS78h;( z&*X12tf{DpUWX(zjCZes7j~`SI=zd4G|!<}VYLjZD2Ry!s{qpfpE8 z2^I|Jd4o$QpuR+FmykeYc0v)e-_|O@W;?=v$iVaZ5`pe%6FSGN_;^JSg!TqEjE4+K zYH{scvK`4W6tCENdNl2aE?0vSOPwM+?dxtSO>W;BNXw-2C?LK>+ekszGvmYc>B!%#o1c`RrR(}-yo!1g#m04!cu+|-2IA7r%Zk3jnL}iiy@)5) zv!ApM&2a)f!lud!v_Qe1n{9v6mv9{SCw?9DBpS{1d6(oE*$571R>b*1ac1BojKO%@ zIwC%=s-v;5j}v(FtZwgK!GC{|e|o3rdM0fBM%h|2mt&$#)k4K7_B42)+v(SOdn6)j zegL7O(#M;17xFP?;p)!5^E9?bV%i2tH^O|Dj4P=5dCX@H$jt$0I&<;#`ujYkA6Nw~ zvyE95F*R06_X|2N$=@lWTcbkPvn(!)ENGPdN*q@as%!Esz^`qss|!wrqD@RR9OQ~8 z`epm*g^UH&02Sloq!pmH-gE)cn3OFasEGP0+B)_iE6Q<{%`lY@yB)+ZX`}c_e>c1l z{%+Yc6(spgKuIQqFG<|W4M?a|IQY~+>e}K%F#;R;8I3M~K@{b1@)c&LkFW`>g*S}! zCUd}h6hgWarWL=?``icLi(wE$3D5H5h*bsVB3t%Ecn8Fb%9`dm9ObTz(Mfw-_G0R0 z42}26DdjSOWsRC>yt4?ls8wZ?G%zNzbL3)aXFWz?tD@l(7S|ubmA^owngy(zeDYLl z_f2O7VVNK=%3UA(2oRjQxeZ^ZUvm2_rH|a6@??!{dh6(Swj|4p3V=U)Z&dKr@yonc zKtN~I9SPAj)lN-D9gG8qIXTnhKVY zd*w~+^J52ZGoMa>c?R>{csCrA=Q^=CSD|F%@abz%6J}Bu;ZLNM{!{Hp2=5Bbe4v5G zI@D{%?1T=YK)6<=9V^P^#=Kt+BcpGR9=_@ESJD(}nWP~FwZCfpXk;(gy( z7ZZo=AxrQeS4&9hDp%F4{{~Z@f_s^69s9~+k7=&NRS`2TusRY!wgK}#F<}qnK&hV! zxo0T=sU#ilev_QxnC5+5A`xo5+J$Se(MTr%$@Uh;D@rClJ%StKGjbFNEsGRx86eWLL6 zlB;Bit;v3ndw*&c!=89>hMt}`E23h7cCpH-kDHvYcTo8{DACk`r`Es!jO*u9z3^1p z@it4iTalkIxN~ZEV}j-}yu9;j1eR7fE~)12k7Eqt7XDZEUTj(D?YVgkF7egdWiF_z zhVj0K?Fp2v;*tKSSw`WL8O2ufVa=iGcWmUi8`S=^?BP|b+A|0WKcf7UIZ7KVa9vWb zi1u7MZr=vae~lt>wb*qzbmod`ok9G7vXg?TeYRM}(tEZQmREo2$lY-qk zJ=coW_9X=}wXNxg0W44u(nnRNATJH&&D=?x3{R$a2znKr${)K8oRT7C z2a<~I_*03s=9}KXX-#cA@k<S1_or^DVZ~mfRPnnv}-=G;*-ltM{-z{U3>`y&YWWl0Pk=8GX7tiV4Q?3>_bN;FMEP0~VDtS!0?wGZpB2z;4=dGKzIKPsIWX-LIc6RZ0; zv}-X%m4`V@KD;+ojrdw=ZX_>7Dx&!e-k`&9*Ns^oMZBEq?j0c6jDL|QF=BqdbtCgaSiv7 z_Lr2>3EqW)ti4PXp32``{2Yl@^7_lUga(=NWY}R)K~Hx*1C;B6eQ-k)A;~kz1_wDy zWsHG59FM3ssi)7>l@a`jB=3;B2!#nv{ocGMg7N?LMdAl7g#7#K221U&np#$p#oynv z#C{fo0F%L-yd10ET2%MCA!y}=(^~ctcv|9xeoEMe68;2duEGh~k*NIm=Q5CFe=hA$ z^i1;4rJ%EuNR}Z{|NJ}T&bnSh%MU*CG&x{YR*z&Dq7?_dLZeB69(p+nX`0-mA0H5Kb1$9i#OdqxmPogZtB{Osd@gZXJ)-hvI>7(|JYi9cf+z1Aw^hOYY zJAy8a4R4R!h=C>t!;dM}aXK1reX`GlA*ZM=w^4siw(8*?O_k4f#VDAxByyL(yqD?n zyd~`@Ru-eUrxT#`t1S(i_lV=MDb4VNg_qXDZ;q8UUf6O#CAuab&G6`?zn-!O1uOuP z2%8P~w6}(wM$0JjGiP)}<+MPSTeR$sq6=uou@>gJ_{kfDyt z(vg^&h#?5BPRSY{?r>Ij+jD^{lpy#qY2nOj$D&ZWjuS?>0=fB~x%kuK59)Hh5nPd- zIfTJeWu44Tu$1<|3scCE+w+D@BCV;b6`pj79@>4riQr!HW ze=E~X^{uaEl}NB_3FSERq2HGgyyaN>7Z?qf(Jf;vg^duPJ3JG&GtSPht1w)gIdo~!{J2wDm5zG z(gxy@vUa~8gtq1SQ0Z!l-ganV>?o@@4+(ZCBI&cK$n;NDFW6y2@TL^Xyvee1 z4U2h!cxR14ZsFNzzmxSY@okTN($)2A36lh>&3C-OmhH{~PFn2O0OG23ue*|~)pc_- zoB4t-KJ+)@ni8%eRm9s%tg2SFPFxzP#a?_PxUzHh0tQjRTaYo~i$wO@jYq*n&J+HyeurzwqX#51&mO#;)D zFN)&2(~T$<v&<{ z5R^Dxg2h~eS=Ly%I6mBF1aJoQ{-EpK)t$t~9 zO5IRGD?oAe6}$gU^ViD36mQZ)wKq4ln$xD}qtk5DSt4j2tw7c?{D8xmi<~Nkvi{wy zjpSNWxvW+xam_f4EElVC!OsPLHnI-mPNlZcOMl;Qxjw5uqoC*7bb$XeI4Be?R|_9F z+An4XoUy~h@wC*y-20dJ-m+1XNuWn-ugN@{RE{qZD}C!*o=pNLUWO9hT|~fYa7>pr zr=+MJVS`)TR&H4QB_~{hvTbJtp7`A<0&m?+lb6hbsw+g1>OBNAmzcIB`x ztSvP#6)4gxR3k zIh1yL50bnKI{5*8J05Sd6tEh5rowto__|84RID^ZTy@qS)V;%92y0As zu5Jvetgxq$$`LLvn-~TDGpEx0OxJ7(vVZzZ{|*@ZcOyx@F^TdG4#&B;i`I|FP`nAR z_sL{Kc33#lqp!vo?}>BCS)NV6W_%SC72?RKm13j*u;T=8DPVq10cOF7czq0{+fT-K zm@TSTq-yb=Th%pmD~PqsiyJiF@-XPXK{>2Nl-f#xj*ZS7$b~#qZtCr_Q0e95tZP9B zN&_+%k=>sM)eN_+&|E9mkC0N3CmV@tt?5k_7re(> z*vAaG^yGYngJP$upf|7Aj+TZlwcYrma^pAQM6Rrx@|3q^kwXI5n0WBu~)Hel#`vj$@!9X^8o9Mkm0!L-rNa!we+WVW%KV)4BM`DUv<0& z6JoxvxYB1NRslN5y5D9$EbS^hKMo$%-R=ov#D5_I{XET^?uA3-$zb8fa>VAvQ#`R6 zQE(K5c2#N@QR*1VFiUOCgl80lb4@mD(N}>sVSF)E4~blJGUK13Bm(_#j}Nd4gWBJ0Kq_f_3Bgz^cs~z5+LshtM7ko_H($>8$*6a_F;P27K$j7# z6s{(2$QF2pePn&x;`9hFn_J~g!MY{r`I^!AV7+cxhN7`tY&4v1V!L5Q0nTkpxm)ro zgKU`}!gJgnY5x>v&h(+*aGsZf28-3Ot_i;jyt;~|XZy2(OL*(;@hZv9eA~}picq|2 z>}q#xDBVfjSnXqp<;&oR#6Fm4LIk!nw!=Ue3{s7_Ag}YXwS0u{qOpmGc#tQC5~g21 zRx1*}D#BzA+uo*zp1D|Eta(ns*Vl=bTFkd5136pF#}>jxc)B`QQfhX;5*USGo)*d1 zDbUk))HJeZ+t2g>k;;dGmmy%XsbvNelbwrg2HGH4QY##N?$h3Wv#0T3=uW}erYn@M za!1F(Ow&A=agTt-M-dN9S1ztOliT*w4~Hg8pXNt)8vEfQx48*_QhhVpSL?rClWN0kJrEjVae3XFic8 zJ5lOsp}9kBP?L&ys|+puXPi@~Be=B)XHs|S8lY<+h|0jX-E$e5zVBzJtdE59ELk{p z+i#w!0(H6OnpNce6s020K%@>Q40h4_5#XKl;UeXfN5Rt)m@ACPn-!oPRIJF@$uaU* zY^p0KKMiwFb)gV`4xryrjQ5_#xCrh-;iv&!4+4W$y`cH!yWmx-dFfVx*3+8$kGzr% z$M_tr`RVIa^Mmv6VP!Rrgo81$=UHq?si=diFilZ5{%goe>ZAERVO`ha&YBjmaVToM z*+6yEb+4#wq*CE!_D1g6UlsSyO_#g1UH|5u(N2S&Y4;K`KTRnSj{Woa8Kiza*f0+m z=O^g;qh21bUYQ9{`$(V|L^*J@PRbj2!3R>>NeEJ>P1cGd@XC21yYQ}b=H;U?nBFyD zp$Ys9_D1rIYFG`iE={=zgcThVv--7;*-Mea(&V^e-#}95wo4OdJ+5MhX%?7&YmQXlS6_o^Q7j1IL$Vr1#BOGNkyBYd@4(r-@ zEDvGX)Yd}4R|~;$gOiy;ua}Z%3JRt$({(mPZ!3H%H-XVk%eZW$o^qM!ZB~AwO4|yn zc>~QGRd$DI$9{>axl|3VQtaK_n75dqCH9s8DhmtqFB!9)2v(^k%QFcMrJa0-nvwXM16&eZPj^}RPS|L zq+?b0mEXv1Y&#$9S+|{=bI4YaSKRp zBpMcuI~f;42}K@01iauceN)|8ld@K#l7HV5#1Tq(KSsE?&E)CmbqtSQj7J^6klDpzn&|yc?a;>+n+8MH!_Cn$#Pa~h!@99pwO=>BwsJK{vqDZOr zVo0gJ9nYFkf3nSTqIW;>^I8P0`9L>-fdUw#7pj zhM|`)UywWVuc?SJ>S-#%AE;2jfXuq1IUxZBdc^OaW(H&G8fX|IuKE&o-##DL@;}rY zb}KOAgk;)xrR9FSp#EOZH{2j(=XA?gV{UuOeiX1yJJxEmx^W4&^(hN6meuD~SPJ3i zyH=J1OD$OqZ5~Ym!d@bD&GP*K?ue||NM$eX!vwjFR_M)Z;9C!sF0Q!d_{x#Sskm}< zZatr-UK-!2fQETG!n_ zSwDL1c~Y?5hLgk{1VSBDIvi{)4H}uxla%u6)jB&XfuhK4w0JdVIpXNEXA}!s5^v-g z`eZ!MXJV5PkYAZFHKm%E?jBmNz&oPZy=bm>{8N8@rU3V%GW*-~x#kRqEyd&rUO{aw z@E2Q+A`pJux%0?zIwp)%GxdHiieFCqI^$Q#_Ym{Jn0UMow9vm4QOQ*|Byy_@TBAQ- z(x7MN%N?;-5S!2J>FLw1sUskI^m?Jx&ec&NV4Z(1D4=BNqoAI4c)P&UD{N>8zGhJKo!33|R>hGB#D z5uLkC@l-av1}|ErDFVNutCCbxIE z*vtmdq~Z&MclDs0rsIl;SIwcTvpk7bkDI2U$bX0ZGff5?=q;5cTAPcl&tSp&s+9ft z0dwAEVUhD~c`1nWX*2#4)3$TRPn{L#FunxdP^l1vurH2U`7e&aTt0V6c-Px7;%2%| zkvmSGE3BNPJNy{ub&S22Ol6?@eW$1S@rg|D7#l6Tp?blDn{Kl#!bgT+s!TeSf#P=O zORa(HO7Q8}@#@`4p8__s@Id&>VL*5MK^$7DC{AWb-5_;|eN5e>54&nT6(F7Nn}E)c z42;16Ms=?IM9@{wq1!E^G>Ly@T->$Wqz7Wj&$X?KDHnt+BVXti7H-A0hM# zSjNxnP{@52??8aP(1P~bNz&%W-Sb`+`YU6dDz3v*BHOzI>-Eeij+4i>wiw)wcyr5_ z%d`cv=7f_=*QeK?mRzJ4eoLV}z@3T%2?F^@ zf#v6p_*ewl_e}d3O3k@+?{QwGL!ltS!8*9rFeUa5LB<7NU%#h%%}R#sW|`o{k4)35 zG2PsPYTR3{-NIfLb^~&Vv4JXgqOOfq8bkNHedj@i2yte#p{lA!V#B?AKD30QOu`{X z<(|^%>G)PH!GndV%YL~f^jmC20BJogF#brJe^ftOH$U-@|x zb*uNF9$L8kiJ>ZDrFRUW+Z7qr{{^SoDBu41Se&Vquf62{KpPMN0s9+;`H$L0qY(Y3 zVcEJ4L+$CCz6zP-S2)|K1}U$A2MPRsMnE_OYM@My{I?SCh~16p+~?W8W51E#2C+F5 zv=AWYR{L2EM&HuS%#j=%1VrFDjXf($%$c}G7sdLF<3w;vkENoSteq@;X58c+t`v@P zc#G^oX3cTJlG*EkI#Ug0ZBl+>Y~~4@5*}9coG4;#ft^gkoxLh0oT_Bs%qE#5ZoxPX z>%iPK8Nk5CZa#KRLy5n*&RXrVaVuGzSjq9{HLWQwMjyy#|09KNCHafHLbpw5J!<2V z@!h^uo~l)!XN$M|V&kMpM;6W!j_>2LOth!oh;Vo(s1HonOY~ zF7imw_rE!jAx{p+cUqn7`|J)xmv#(^SIdz%*+*#)rxYP&WB+Q&h8d(=Y6YkZ`o6w(kOdZUq;lEUZyi&zo_z4a>bz+Y{6^jQ`!?0 z2}b=)EMwi-j0WJ^UJ73v>`(%mbU3varI(!JJvUqSG;Nwt<(7>~kcvO5O7c2h z3hXP=vuC#S`0HtIjBbdoy$}c-7j+|gbpX@xF=eUe^!f626&bx$q!n5S6h&#{mr<~a zFE(5Fx;7%iv7QB=kt*iamB&s(Cp zLt>1S#lzz~UW&j>d38q7*D)-k*1uI#!bI%_2i^LfzR{kPz8jQ+zx-@DU(o_rrKUQX z$&{UT8j}&(aBCpq&kk>9QBYp|p*mGBXk{!Ksb>5l(oOk_0ZUr4%UqiC@atH9lX>2@ z74)!AF!-65#_{vHSru$pE}S$jTonIOH$|*$s9p1mrjXU~R~DT%rVEm~IfJc^W|GiQ zdvX&umAC7vf0NDpVF!(|I!6fX8045ox z#=g#*Oylc+$E4b2SgY|(p|rPXD2Q^>0sZsrPYlrOV;kJi_2J!jOgLYOc6~fh-jn5R zo|t`Ujz3_oZ0byQ!~J(iLT%%vx7?lB2{ICnFVrTD6X+MLm_AJ#IWr<3IC+;{k0Sar z?%L>u)ux;b@$9apS6JFft^0(T>8-Bi_-8bgp?5!<6NJ7BxnIcEXwXwP_r_)9hfoM@ zX&-lzMzz#Mbsn?cSL|=0gPQhQT|o??z!EI{h$i^4Q!nJBUNyLzt6VAb8hv6?zuq%5 zHza9m4CSK?1-S-_TrO$4v4wf@B_5>1Tv0yNWFW<|UtiYJj2Vtp3Rg@BnC0D`1sjx< zBx8pa$LaTW-wrfKwW|3Mbgo}!b8v%@_GWc#HQdm_DW+>CE*(s(2y|7v-n3fGKGP-BXchX1W zu)ELB(4Se|^1>#334H19Cd`@;>{V;!LW6`rGHkfeT-FrUgth5G1Os^1-hPqyi^_t) zrxyO>H$#%+Z9|vg4?)P-JgM)8Yej$H^dsH1xhY(g!>()&V4^DOWRsEG#m8kdrX5#U zUG_grNj>QC9(mhbCih~XWAuNyF}bYa0jX^Hqhdz;c#;z0oxKqhfepp-TQt-kogO+* z9}h&`?>%sy4!Qj0j9IN=Uoc;Mm~O3#)aLSmzA@iyEws9hl6l%f{b7i5q}*8|J>o(= zoE5BP_(daB$MrRf8n&#g$0DMNcKNFESe=kXRRiQ_U9nYc;gb9T$WSyp>sO)W=rGUq zxv;;M@Rp%&4{3Xp%Aakt26XT3?H(+o(9sVf_B z4$3xM$g}+^qOSb#t(0_`XI-uJeI@bqMY`iUT!oSkHohaJ?B-d#w(`*+|V*FV0kkI*G35T}ex zlxd2xB<S)SW-bA5dr$*(=m(4VScPnEazpeEPZXEm1g}vQ#Zo#+clU!AsKrC zTPOx>@QR{|68?c7yPoH%4Vu2ML*C>JiN|(p+Yfs{VX(b3>zw-TS4;KUGOF3>odbjA zfmN&B-O>24EB+|>9Vz4Z#{scNKhht)X8ehcMF7Dig3J(eDD@gf?UT7& zzd_2I0HUizX-6F*nGzwuXbk~DuVh92OXmH%Em>jz*4g>oz4*l+*~dsKg$%72OXQ{S zK;!|~o#6`0A}qaUEt?{D#J^12#3$31yA2tdlI6MlUw0El@Q;Edg84T;RrDWWNfZKs zdh^;vS~Z1>TZAwhyNivN!Ql|8N6L~uR{aN`|~U<%fv=Ua^7(Ca*j#PFi~ zVOyEjwyA4Y0~FnJuP29yF2@WU3V*MqdLXcZA(jFhp>xjZN?tCKA-fjy)4OFzTqo?& z(K~aM8Yok1PwQCme76R)+AOz9x6GviWv{YufeQ_|eR7LWa8l;7d9G{QU0^LHH=eR) z{9CEh+_9C&eby$GcgLl@0SuQRQ`UH;Vt#5LSTmC1+;{0&(q2PZd@9g*+*(hOg{ zGVsAwafZ=0q27M4JTC!rarmkH{@{uC!npYN@dg{Qr-lrwJC*BATVa;NhXKm2~c% zvpzJNcO(wakcLA}ziTp9HZXMsYro7NxeL0)izJs1{?h-^=Uza#uhQXPo zU+B_hav`kx;-+|IRI9Ya7WNx5rw%1QdOi<*+vv2%>pSp1w(Jcz=gY;xyIKoA<&hMW zV>FXx?xj-StdR=2T(24a?%@Pl;6kqe({y^gyuhq1CGID1GmK(FBa=}SD%m#Skpj<5 zNqP}^RfuVyYIxxo7z9n7_MVfKc}ip*9)aA*4YTkiMYN95#(DnnlfU$)X1QDTEweer zh>@@(d9b{beN-@2=`UwbBHknNw<0{YtXD#hw(B-4oIN0-V-tPNY&f=v@*;f&NG8d; z*}bqYX-Hwc6-|hg+KNNs&sY)f!XFvaX5;x%{n{TyH39X zlbyR6>sxU?YAtHO6@cH!kefH(CyUVFNqDHMgf&)84fwtZhi$*iCVrI&+FN|Ql+Oj( zd|g)+gCxfB$4M)?ZwZa#3}pK5u6KkbT=5ves1TYINZZ|xipLUCRmR(z32t}zbp38~ zGk2S+pRNd46s!%dT3v741>}{EkC%BPIU0Dc4s@>CUj#FK+NN?wp!dQSc%^29jXu1! zi(}^n1WJ5iyhR`&c>>;t_*?N<0*ZYQ>c2D*N&0Jtm4i2 zxW6dlR!=6A@h5U)PM#ruerMX%Y*iC~lx`WNiR?-iu^L_0PwsXxC*U-Y2KbQh*Yw-= zZDpCoG$!-)uw6k?2ym?_LJNE#aAAkb>9S{C+-|B0d&HHdujo(~ViV8IYu^$F*Fx9w z9yXeQ=d0eD_ZNb&ymPk3T169|fh8VtLg|@4lc?h7*mY3TzGt2>t|3eOZ0-J&W7MURXV zcAaEBc+7jrSihwQwW)#6>bsvr79oxqhxrmL3Y~Zj5RBZBj9iJWLVr@1m5P_K`!M|B zPkBh;`A?{2{vd__ym(A*lk1iw4%oH*X&O+_G+{{E+34 zBjpaxZ1#s-@bt4q!LaK$BdOd6-<7h)olahq<5Fazcsvui-Zl(x{Hl>(pi9t`p*}2j zW;y2L811J7xkpW(|1dHfb)_}+rnYkNM@-q?yhe#dZpis8;iH%yNL|+wfPqsZSa(4MOVQ7dPWZ^%0{hFpk&LURB=#jT^t-TCQ54&5*Dsg zh&Hqp!m~^&lR1H*U$qs2sXx(KS-l#$SpH&*_K=;U+~CR73Tz-mILuU+!#jrLoyjT3 ztva0Rc!=g|;%gleUy4oG6F~VBR75A9GBGS|%m{>4^4SlP3ZT|v#@nOvfGfl^ztjm{ zogjJpe67Wm^>PSjmpJUn;_Yjp56Mes(RmYxnOy7;{&?Ld(Pq#bul4oZ`_3f?Np)=ud+u?fy z9fn8d%N^U3t-v(qG+k4BE28lTa=ucA#K*e2umDIM4*7ku-S@R#gG4!oz4l(G^7$%{ z`;gLgK0zEVeDL9$Q@H&zB`ymJ`_${cL5tE?=f8Fg%`2VD^RQUtukW&oY$$TaamF+v z{16w(VbC*(vl1t+&1%Ir3E)+sc*4g>i-pO|uRp}TXzpeGtzFf|%kcp1${V^uRb0fH zSzkm=-6=V&otyX7=5N|iwW{V?Rgf%ygve2e<_3?5E@go|Zp#Kl$Fw3uP~J}@V*4y8 zduWiHyT4s~4AhZ8>W5M&lU%A@W_6JE#c($fIViTAhkjKq71BSpZ#Ge0i<6Fql&AhC zM2%{F|yMAL^cUtuD*7&qD>ob$9KsNAz zlkqH?bt=IhY!SGaOl`Or2`GWbK82bHP40-{sN?R^?f5W1DB&F4UHHB*9eB}2f`+`& z?@Na*cN%qmsT71?(Km2tXiVys5Mb~y^`~f5P3!*-rR_^kaD^v+wpiv$q>wn@dK??e zm54FTGvz1ro+tbr>f6ffLjhJ`N*||SVDUbuAWd?qP+3HK(xwKDqt$(VeGMT1Tin9H ziA|(%RiJrG@bmC%sIsyD=zAg)tnc|a&|fJ#8yvTv6~6$4@SO-C7|YY&NdFeIzw&f; z*w{pW*(D6He*8`C1q$^1(%--(e*IBkTLhU9@)uIz91fu~x*H#itfdb|QQPh#z<=eA zSn_U*{#fL0%+ZS&M&9UE`u~Ul{-Bz^2L|IP6}S8SHjKRh#2kF-HmThA zY@e;FKgtt-*kq%IuEm8mXB%a+dh(eZt zh8*~S4VtrZ&%3fJY&8hJaqNa_-}k~~mUw!9wobi99~=t{X_L3jS^tzc*zu%NCzH#6r_&U0q5ulJ z{AqazoG54D#<^EFd&0EW_Cd=LQR#{Dsv4$#4qBsHcCl6G2+j5uxmRqf3%U5vNOyOH z*7N8+3XzVmn9k$lSjsa3=? zGg#7);zzP&WDJgztIOhVE5sR}y3Lk-s(pyTlHi^_tyU*&fA7xRw%=ncXPnHZmyW2w6Z3`l30x zxGp618*9p_*0*f5#maf{-%v6K;u%_l8lj){BTBmqZucm{d3>P%O5+DZiD3B?AOHvO(;e}i8I*eS8!I19iPt)kYYH3aSwpAV=B0O?%#Tv_-F#IvZ(3Wlby%@NK zUL5`vmBrq#RM;No<_%|%Qu{`C$2{Td>)C7VRMGYbp2NT!p9%8z$~*U#SEIPr7yV(6 z!{Eg_+nX>@5GtyD>h~c}yE_pVAjS3{oKZOX)b2NEbb-+2RC!b)h68Rafr5obu@p^W z1cXpMzt&IrFm{sNy1f1Km2=!)!?jTQs9;+4uNRiM(S`u``9<$&MZiYW6w!>H6@@P}F;EPt>d>UT$XwjbKkm&xz;**Pz3<@N{D zIln!I1pLkb0h8N0cFl&7e$#0Gz`@LZJ#@^Kkw6OMy!*Ja^I)MTjYp~>EZNGmP!$m zYK~f6-{7j^Ze(|V0a^aHBGfK3Xn}6NSN;bkel+ZOf3QP159trIVHkprc%|ArAucGs z84dl z%q!uy;KG(Fc`RFDf<8X30`qylu)prLqcv#(JUQIn_)IK}o-HMn-~_CuexGPuaxUTUjRNn?HjN z3(1+)-kw`$M$iqdv%JkaVIHwzee0(bu(PNcE45bK-eXy`H>T!AFcm`KAK14EHUAs- z)h|wdSp3@?A>!;7S5`4l!a4ZWC;_5{CzhO_M)D%eKh{XfX(D*7xAqihQUHs=xwHjx z<`;a(d@I%IO8^fZ3(f3DoXUFvpRn{A-!6O`^>^`It9#k4GsGpOH z03Ta&YAJt#6>g6t#5}*6r!D4MsSR0D;C;+p(eA^ZeqkoZk9qm=&v|6VwaQKRF;Z##<-WD?i)^R9CP+0Z`6G*TMu zfp4E8H_{|f?OgreIDC4}CQn1YrX1T39X^@mI}t>kGyRnc|41Q8HDdCha#$qf z2w!Z;Nwxi%zlsT(oPns-Kme}hgCG$QGVg7{dUO$cgaLe1xNb02I^15bM=kaPuuHTj zk5fFY9%nDhOUlay2+`0;*~bF@EiCiogKDOFt+==UfqiR51i;A*9%odom)PbXXRZWR z5l$Ieq6)LIR&Q6C2gA3IM}lkA|0xh4g{}*akdTt*HUk}k>}E5`9eKmhD#4S(uP0HD z%|L%-5d}mAi!}TJS}FlBYM<|QqoXxT3>Z>z;GDq1F&;N&lgAnxJyup(=%hm;?V?rpYGD<7V%lsZbntT!l zCn9GDZ>elr`Gg zta7-7two^!6)T<2oo4KD>QWF%+osEv0J)MMjI%D@V%}Or%zs|bXL4P)k-w_ivwtuc z39p~+liBua_32Kb(P{GK;Z8(lsa0{mD-*A$^5|H-PP^f|fE4JzZQ{~rgYw_P)XaQ~6f1fEZ)Jkvm0=NJ{&jc;ZY>uGHfCg@g@4ie?m+7G z-z)&b3PS1awHN0lrl`DIG`78~^LxiVGIfq?LFV`)@&2*Cogtcib>#-%V=9J9xtoR2IrmqE>v)#BACb!fr zfiv9d{IMMCXiRXZbTUP5J5YgZ{A~~{ko)*_$EcH+v~w^q2Fd5_9#?5LTVKYrId!Z@ z5l*`F+^I&w{VG-@W+j=m83^Il0S6@mC(8u8JOoMvyMK#nMa4urp4DqbnSrCeFy zCwnLI(N(1Nd_;6;3}q|#PoY2pT~P1Y^7 zJn*M)uuRvjJUTJEFm94tK0@`e!n_<5OmXI6%u0o^Xl)_)ocv@BgLWPvRBN*^6E|&` z#eI0Ot7!c&?X{r07y{eO%)CIrtjcT66;}#J&()WBe27seaxIv5G6Wes-zy#k%8HEl z#Ad9YDg*~tF?OI!(cC!Hl|R^e_m(O3{S5@sFh?YBnZ^440kY6HmD9ef zPt(TcGZ?v7-%y?#VP3}y>ZnX=iHKoDXpmxrEAg9j{Z#*lTdwjXhIwG$Z@>N@MS>Fy zow> zW`+A{4{Oyx*EGQ0blgRQ*F4u`FIc*7!eY!N8E13WcWL0Ey)+l}C1oV-%Inc$!$UqC zXlg8!&=84=C>o;G0)>O`Dtrh8B3tKK$HrOPc1Yx8KiTrrE`KzT9iJI*ntodnwKhaE zB^8EoIDmge>ZHd%gm~3-Ez{9q$;>ss72GmSzzt|tq9@HNi1{Q~Yn-0k@qSrIgs+`m zcqiC!=*@Na{m36$tNfp0xZ3eBTi{>Yk1Hhf7W@m6S5@1eNA?XL?dReS808BNbFal>7v=xP%8H5 zl(iGE>&B2mgqk%-$*RX|tMTfajxV!0a)(p{X)+kZwUs(&GOy|V-Vu+D11MV3>#~$~ z0muADzGmJCZz(4_3%puEkpLd0uyU2MbGC)pY7MF+iVk%84 z1>NeR6048BpEb+BiD%Dc#4%ne?a6j`l-Cb8aSD`K992H#ezs-}WkK5?Dk(2?reJHq z7MUlTF4-l4O#p}fAD%m=#>b+RLD@whV!!ciR)%G)f^R?=Tq{IQD+~WPSv4G4VHZPU zhLFO8U(aUhA}jr4r&+=Hg3;g1>O_&%w4}JGZI<1*EN*g!dywD~d#K88N#;M4HJsE( z?tv8VJ@wcpQeeu3;>&5smaVm=;5!&GOI1Dd)Ck4{k`y5_flIGJiqpY=O6SF$3u1JD zoJy+tl>xY_epi(m3cLo*=AWIbrB3BT^q6zl&HL1ruW%U56Ey(Dl?jW)w?Cn*L?F~M z=(GDF!ob7h6=dCg22R~SUVT%0L#IycxBhB4<_akngoOIpI)ifSuJ~*tZ}%VWaOYEa z%Dij^fMxH5t~^Zb^i(z2O80~ZTIGNaSIg2K@TD7B>$#+DN{l7jBtVtJj2ro)68`$i0)>zqV=Vj<}NR`LEYaIMjN zI6yiDVo%OS>de`Zf0Hd+^tRG-k^OrUY!bH*&}?MgGu(r#s2=Q{FE2L`dh7h!nOTa9 z5&@cGAza`~&x6f*1NoCDiXtc)cVYx&kI>HL-M>Fo!zahE;a+2A&@%vC6z4XHLe;oddp@Ft=`dg8ZTP4g4))5wKj=G0y41!aS0rX^`*XP)uK0Da6 z&O=g@f?h5~QSx8-RSV%#)v>t>LIq92>kDFCk%-cTw&n~Ws>ICb!y4;L-ms+(YKghl z>6M1Cgv#rEK~#f`Tz+Ym03l-SJl-N2lhc(fRKk~B((VQx1PSmP1y{#-o@H-P)c+}I z3ytEFEnFd{O>jF#RSmV^Ckq;7VJ}*KtSK5KKWaPCF?3|sq1BbqiBy$R{5w22zTx~c zJmA8vz`7zUHmS?$E`E_8e;K$a5ET>UP^D5$#Y+G*UvjVWuJFY|xcg_%RCz;>nE`~1 z6bF={(vP9`n(1mr(l=f6+DqRd;{wor3YBgcu?`?1t8LSt+|GVHz4C!RUoM*})ZznS zdTvCWS+O&wLZ%F$owgYC^TbX23dx-XG|I*rUj|J2A%3wbWFXNgXg|jZva{ZOp?q%9 zKLDk{;+Rk?u$<`?@Wwk)gW)M4D7`vsLTdY#)RjMJ@Vt(XC9~e{dvnBM3f|YXwh1Qs zl*Yxh8;s;5A|y5AqD>@`w3P6ie7654xVrns|5eN;h9}o{*62xNgF=4lUoTWIP8hwY zcS(QPpz`(ysxmaV0Tf3wO_;oq$Out#q>j=!*mJ0Q$Y=zbz2Wx#>?U-&fz~%#HKp%A zk~!23AzzA(YS0@V1)=C82F)kX}B+&NCOJS4WGBczOh;}xVg zI6D6J04~%wnI~zo1}aG%h^@@C1-&dw<_GqW-pf5^X53<;m+ zdK>b;VGi#Z{H+9p6M_G|5)kbZqcT^%a60CB|0f8V{;Z%hryFaT5Uj5gaU}v2Ny4AD z{{I1jE6mIIx|Rdb^8aaaYhiSx7$#5i7aQ?@X^f@@2yqwE(FaVzfbP^`FXaFR{C?|=8*ncWYYPno%QGRg1e$aBu~oGTKxoZ6j# zOp^%mTs}t@`+Shd#8VE*OT3^kcFFC9oNGUn>j$O@l|NBt=#2Bb0gS~1H`XYuMb{}E^tsenoCN@|&2mTHD+7Sq=h zXuh2$|LfL6vP6)LStp%_yMSJA5l`g3!Q0-)d9`$E?Ahj(yCLPMCVRw_H_CsgZd+x) zhC{{b-tw6jx$nYvH?)z7jpF8M9a+nBW!S`nyw^QDnMiHwXdbvNUu5&U z>)yIEH`0e7=Y0Z2%FnV!4wr;ITUOt%}_kS=QS_Xa?Em~c&w<1Md#)7-~*jMJW|AIAmNR{9q zK$ls&ExG(I;Wo3#5E~|A-8V%aeSXApL~*p_#sNA{9;Omru)Gt;_@n4{ArC8q(|Rc8 zI_7;%m`K~y3(^qOzkFTY(F~iBW8=W0>9y**5 zZ0AHm*uq>bP90E&!7W6c8(c+2-<%53r5PVW_KK$Do`eoPKZmYX^TX4`5U%WqL<-Ca z!|`G6-+Vy5Vzj2;e3@yX^HBuRhO*xjUS+7DvcI-uY&4rGAjQP6k+0(*@_!UWU6$lm zIG*cjeFeQrrT&S9!$5}gDuQY2L*SLW)?eGASIfsOqb=tfO>QSi(_dkSu&%`CQ|5Km zwzf16&}pU{vlOHYYaS%E+zC*b^O>`nIsaAJV0Q;?y)|}Zk+@FO=?Cp6%?G$oZ-;Nf zB@Sr9Egzv(b5~myHw&?fK5priDi*~QLGk={Q95U1Trxhaqd3QbPx_(+f_2Nm42TEYvLH^*3oVrQCnM23n&T%LiQ&jEYR^CA{rW=GfTt9v1 z8X?j@DY)#SIxRbWznuyMnP!={Pyaf3p++S`|H80Cp2%E&y(LI$$1D97gj?}JL%!V! z;9gOlrkSoH=95)?_&TXCc`7S86h5N7*;ZYpZGj+7U1fSL@z%t_Kd5i4-9V9^*P7$9 zoKgC{)4JiB#`Jr=%g4WVq+%ahGXocifnq6Vui12WM&Uu(WBQ|a4}~U7EMbLL=8jsu zPkw}<;!7DJ#^=2rr7prdd(sv_L!aVg4nEwaa4q?Shy-wP_>P%GlYWx=vbagiD?dWz zxu(rhWjK*op)J41OF%UH!~fk58^h9=GJix6iQHo%-ZqS|G`bcNYiB?xbCT0RNh!5= ze0_P$(Q~pqv_@;2RN6KfHJI$Q(ax|FaFiVEAKQAUcd55%U)0?*;||Q z6Z5F0+@MS1ADL$#|I)5X1inbZY*vF=D>lTi1`jY+G1$iH2jk8mhnxlA1Tkk1|tkr7t86pEUcTu~e2 z8kIbMC6<27jHV!`*+3R)#7^H-Izb3wiht1JITywr1isnWLT5=o!SCERtFV$0io z@BnAw1_c*T*Q&!}YMpD7=WW*}Lm@`R#SB++D}KQ>wo4VX+e93z|gf_bRyv zISbKJ0wKu3ExY-Hu4w0xVH@?&q2%Xi0M_zYJ%quzoSY!KJ%tM^(^Z@1kjkeZvgNIg zsqXtGvMn<&fIq=#J!XvcN{`dDn)ba|%BP1DT}dF&6T(4bjM8p?hl?F5lX>5I8UpGl zsT8LSPZ9ZY=w^l!a4(NJ?CGGy+VxVZr2E(!Bj4iulnpa*y z$-DKn&X2Y6j8Qtd;*h-0z49i{mu$;e#YW!hvV`xbKQgV^6900vKOaV?CzWmanw36q zXJxB?KBM06ab25OKOX&h;^=;u$6Eat7m1@vmFm`SQRyY5(ckfZg=XM8!aQ47;) zVDsjVtz3sra{$bno0=rJ^gJi*(t~hm6fwk-&?3G#)7n0asIn{gj*mvY59HZpl@ZYh z88`fC=$sqfE|77psQ!V;-%$8Z2HI^KpZmI%iM5rpsdI zYO?B1O{cs7iUu7_IBHM`2C4+Us5(c^;nJ<*hV78CZS0#;?kv0tM`x{ehutuU_J`Bg zmZ$x`fBXyHp^0m3im%4AE->aoW-Kuk`kI`WHvinAG_aQFxs-J#z+(g-E=(VE6ptf1 z$fdkn5=&ys$i!0FOAH=x6XlBb=^AzQ17z?F?5Vc$8I~*{2{09W3DrFq%S!O5J^vPG z$|;rgZ^p>B#IqHBnXExyQ5RbdSPur7Ru4fYW?L8FK6DK2+}r#K9m_yb+n|*F6s3jz z4F*5u@hTl2`e(SB5b%x&@Yt)eg!X!Eq1XL%8=K-2nY7-q_cO;U?)5kWgLrMrl}jcd z;+&-9{pDgZaPtD{5-Z&56?{?4p}*LyK7Zb6@;a-xvhJL&iy2q*-40PkgiwUR zN8*-@fXTv4kCjBG(qztsTU-?E-9WR6xN$*P_YK4w{7OE_k74Kf>21mlM{({1(&3>Q z^bD>%n)nu%pzzU@-qtm7VhLk>&0_kCd1r{0#g72#x<(xxvfGy2_IKe@v@>MWb8|QG z=K_PHpNt)C!E6`#?38(xSiffyxhP62ncDcrv_^59fc==vImAWz$b#zk;Wsh45wEK) zSVznBr32?Z4u@+zvs@Zt6HHjJFTQTigBR3VD+h*R5Q(3FoEm!BY>Hb~r91!Wf|Cogc<%O679Y&6O%d(5E%>7}33SB}-G^qUkklT^ z?lN$UnF{QxwQ})Mwx@(TZG5)9Ym?q| zP-(ehnum~vg5P*AxT)NT6S^tj1};CS^Dc=mXJ}-v>Uc~w&Yc{>aPa`!mR5XkG|&

z={-L}W(nyM7?3R_eNp`z&)slz6gn^$`rc^I;CjN!F#&?_(4 zNB0NqZ&fs+JDO%a6uCWTp`Nx+w%{iC#=*PfIS4%PQ;?s%XR2y3MTntQa<2E#`*J{L z^>-AJgld88(Koq^^;oGRCWs)2HGJ$CcB5VW!?;vsn9fe1hBRATB=QzS*&tbsnF+l; zaxHl&rAO?L#T~}ffFSH97y6E{VW{kfo+t%7_Hn7Be%WyhBN5L@k@kDLRZQb$%F>`j z!bOOxl1LagWM)&70RIK44We%(j)OkI*M{9b%L;0t4*?SHauzaz4ALvU&hoQZzaua! z%jmjRBieEP38O3VOpOR#ZQS?i7_xCZ9%PW#0&rrt=ahN*-J;8lwLC@3SG&G^N4?O* zotS~}h;vRA$`RlR&NoPxV`@1#emjz;H93DC4uG-u%+95Fenp*hAZo6U9eY4$1Mg9~ zh&ev*ndM{kD_rsxc-J78o8CED4ko@Odb{6SVxyh6Ox=}|Zy-Ics;1M-=P!+*p0I_oL`3Ae7J8v- z?io`7nLVi;Kct>56Iqxy^MsP#Typ+c`)1d9v5a+=&=V?xwhJs<`;)eLHE=fe_4kvu zKZ|Ht?g&QX2n)eEmz`YImhSlc{n_|;*+2>h z$>!O_Lo39~4zs=^q+VHH5bc&epa~J_qVk)Q*xB8Ueuqc#;pzX2%JUDd`!_25zkiAU z0rxtl^C|!#!=LYzj6An4g~FuCYvXUt)i>jP}F(V-6j>Ouo7-oO{kY6o_zj zy>_CO+>Q{3lgB~L{_6Sz6wYK}xdzvOd%f#ENH zQ|HaUjj@ug4=%ZXN*rVxMvUFumL1v5!)ws#8T4Z^f}YLs>VZCe=|g{((OJvPZgIZA zJ|@eh#y605$2nLDmr$zVvdv2{&W`X~DZ{MM=%$q)G9#}#;N!z;UEx)F97I0~SdH%7 z*oUmF9k;|kNVLd)(qF)%CRql?g0cJum)2-Ir$Mt|>g@YI^iwG7a3Thusfg4~D~ls` z7_<9vjvA4z!C}P;!N(;xA*#s~OT(BYAQAEEx6;wO-V@mM;C1ld|7OXV0#u8Q!I`12 zPItTsVqW!Vq4+vzfo-5vXK&qwhfb$|7VNhFVe+|tO?-2ebeN?r9pY4y2$(Y0g(!+x zHfXJmT-aRcf#U3)IWjGH@hc5KS3a8Oj+QPS9(rz(V>13`F1`X2)SSL}Z+!)M1kfX^ z;mwtY{2)7TMiJUO>tkLRUQ!yS^_7w(N}PL{{%+v?DBz1WJcD9D!Td7Na~BmKt0i3G~fEXEfH` zWhc8YVQs7Tw5H#Wv2(5OtY%`{dc&K+m=`XHdJ_?<5nx8832j@tmRKoQ8o}RyD&F1s zEDAja^Q`m+YYgWW@`3=A8ng5xIOs)bZHP)gGh|W8^5UCXYef12iudt|Wy*o2nwhzx z>!c{{m!`)k_%dUunN4?Zju!c=UmoHfcaFndF2+c!qNe6$CCKBFdQxZ=CPh%u!(xY!x$!l`e^ffuy3K|{DM=q@xLmT?kXyayq z%yK7PDd|=*NzjtcnRnup(cly}M3y~c=AI>yYrUm7J1uS8BF`%8OYr)`PYDsx&m(C^ zDvn#|?vSO*eQK?*Z+0pl;zCZy&cuyo?Hi6totyXQ z{_i&A_x#xzHW5TI4~gs}ZezP+^90XmX?ao#sSj5ZdJ){ee&7e=rh$SM`k1fgB;{xo zX58_Qa6St+Rae?`;QCnK|HSa@%WmAUY+4<@AQDNX2?!QG4|^82;q1omQ^|iHDOsT0 zk)M`xHHEkd$zYr?~YOHmru$v(laN1oHbz+ zLD3-iN#{X@yXUe=))5N>OXA&8&}dyvb@KBh=8^e>j1L_THW#Vql8BS4NKXnh$iQ0{ zzL&VL`usywN|97~=-wtN__`qZB>wM{4-K#!skRP|6RqoDno8uB@8oZ66x@|eni;W! zmtZ>GN*mIx`Iu+VZa+MJvvf%3?NZs0M80B*zuKEzo~8)d1O?tw)3_+}ZYy^BWbPt%*B7Q) z>`m$|Z!kaV?Dut#Ry_={)D(Ga_{+?XW{+wu%ca|Q>!t+~vFmJJI_H|yX$-Wc57My2 z`DIa$ofRWYR^%ifuiH?9UDC4cWikN)jL4^m-fye(L%Oy4J1Pb~%}IX@dVLyE$;64V4W>LUk~x`3^!LVE=d5^pi}k@vp4)~OkI zrOey2@b$OZ^0&?L-NS{~2Jt^kDCuvcGalsG8NBTNm>Y9b1?S50Jm>-9CjdurbS>K+ixY0ph2_F0`+HB$ZXsibD^=XQoJ&o1Ny@a!~_s7FQqO> zDHsG#`g6*f+{DyXF18k)E%md7K#@h1B>Cg_QK2QVgjqhx0Ob7`1vi#^qN%U!Qg2!^ zi-i-WfWs6*aT`x{$om0T~mn=*Uu!Cd)NGb8CC@Q>LrB)78a<`&@t=?0EPy> zooIZ`fRU)F)^D!sL4zqjAl6!Z+&@BtZ>4GJ!~Ps_95)xBF780CMEg%7(m_HbX2H{? zO?D#sVaQKLE3~H-e|=agGv02YY|FrkE3nL-qjh7G08mYS`3+uvYmC@I$a1GsD_8W|^}M1$C+u%fqhb0<{Lncl zB;+j6zUI%**~tr;k`TcOyQJlTu&j3jTczM>PqauAPs9n><>}ALPkByeJNuOQldnQ%`ohKN$24CRhhZO8Z2mQ3o#4@9| zTxvEZe;-`@WKPE-id`&0dcE9zkn7XrZg~G;f%yux9!?IAmV=oT>g0W_lr?xsKX}#B zrV4*Y=%>?50i@~N-zBhs16nv27S;Yvl&9BsfB){bU{8pfZ&ka%D!&U;f>1&6k_4n<2`$7& zPrPvsHUp0I5;3O)yP<~4g>2&T66Gq1Oo|=ak2q=hX$mfTN&Af{ z?3alw-f+H+?h{+N!iB=-$PpFC4wb;_bQJFY>81^#~Ukr6;8c>y2HULWaI~T zPDgs;Fh}}YeutZLw!uM~&Xb9s)|4(A8v3J?*4r;QhuBm<>Eq;D`Fm`Cwc50>wU^Nw ziBSmalUqEh_wi_^zSJo47bGRoM}1ACTG5{nIh4|cozDm2f#gB%wWaN%J#~{AQuC?a zF!Wkv;DrpZWtr5nsPj2p43JLNjJ7U7wOc)6!1L|uVVk8!~e74_D>%U2{iu&7RCQ-9@A65&o3Lw8X9iw nRk8lH?+q<5fW`Mrq5y&W)IdKw6G2RXf_%wHD!wm!XXy7I)eGZM literal 0 HcmV?d00001 From 2df30f5f48bed729f960abcf8707f665a0fad34d Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Mon, 2 May 2022 17:22:10 +0400 Subject: [PATCH 02/10] README auto update [skip ci] --- Readme.md | 55 +++++++++++++++++++++++++++---------------------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/Readme.md b/Readme.md index 6ceecef..acbcfc6 100644 --- a/Readme.md +++ b/Readme.md @@ -1,28 +1,27 @@ - -![](https://img.shields.io/endpoint?url=https://codecentral.devexpress.com/api/v1/VersionRange/128578327/21.1.5%2B) -[![](https://img.shields.io/badge/Open_in_DevExpress_Support_Center-FF7200?style=flat-square&logo=DevExpress&logoColor=white)](https://supportcenter.devexpress.com/ticket/details/T615806) -[![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) - - -## Files to Look at - -* [DateDataSourceWrapper.cs](./CS/WpfApplication1/DateDataSourceWrapper.cs) (VB: [DateDataSourceWrapper.vb](./VB/WpfApplication1/DateDataSourceWrapper.vb)) -* [MainWindow.xaml](./CS/WpfApplication1/MainWindow.xaml) (VB: [MainWindow.xaml](./VB/WpfApplication1/MainWindow.xaml)) -* [MainWindow.xaml.cs](./CS/WpfApplication1/MainWindow.xaml.cs) (VB: [MainWindow.xaml.vb](./VB/WpfApplication1/MainWindow.xaml.vb)) - -# How to Add Custom Field Values (Rows/Columns) that Are Not Present in a Data Source - - -Pivot Grid does not display field values in row and column areas if these values are not represented in the underlying data source. This example demonstrates how to create a data source wrapper that contains all required values on its level, and there is no need to modify original data source. In the example, the `CustomDates` collection is filled with DateTime values based on the actual Start/End DateTime range and the specified interval (for example, `Month`). This collection is passed to the `DateDataSourceWrapper` class instance along with the original data source collection (`Table.DefaultView`). `CustomDates` collection is merged with the original data table and you do not need to modify the data source. When Pivot Grid requests data with the common [IList](https://msdn.microsoft.com/en-us/library/system.collections.ilist(v=vs.110).aspx) and [ITypedList](https://msdn.microsoft.com/en-us/library/system.componentmodel.itypedlist(v=vs.110).aspx) interfaces methods, the `DateDataSourceWrapper` object returns data from the original collection or generates `EmptyObjectPropertyDescriptor` objects to return rows with null "Date" field values. - -![Pivot Grid - Custom Field Values](./images/custom-field-values.png) -## Documentation - -[Fields](https://docs.devexpress.com/WPF/8024/controls-and-libraries/pivot-grid/fundamentals/fields) -## More Examples - -- [Pivot Grid for WinForms - How to Add Custom Field Values (Rows/Columns) that Are Not Present in a Data Source](https://github.com/DevExpress-Examples/how-to-add-custom-field-values-rows-columns-that-are-not-present-in-a-datasource-e4493). - -- [How to create a data source wrapper that adds an empty item to the lookup list](https://github.com/DevExpress-Examples/how-to-create-a-data-source-wrapper-that-adds-an-empty-item-to-the-lookup-list-e1180). - - + +[![](https://img.shields.io/badge/Open_in_DevExpress_Support_Center-FF7200?style=flat-square&logo=DevExpress&logoColor=white)](https://supportcenter.devexpress.com/ticket/details/T615806) +[![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) + + +## Files to Look at + +* [DateDataSourceWrapper.cs](./CS/WpfApplication1/DateDataSourceWrapper.cs) (VB: [DateDataSourceWrapper.vb](./VB/WpfApplication1/DateDataSourceWrapper.vb)) +* [MainWindow.xaml](./CS/WpfApplication1/MainWindow.xaml) (VB: [MainWindow.xaml](./VB/WpfApplication1/MainWindow.xaml)) +* [MainWindow.xaml.cs](./CS/WpfApplication1/MainWindow.xaml.cs) (VB: [MainWindow.xaml.vb](./VB/WpfApplication1/MainWindow.xaml.vb)) + +# How to Add Custom Field Values (Rows/Columns) that Are Not Present in a Data Source + + +Pivot Grid does not display field values in row and column areas if these values are not represented in the underlying data source. This example demonstrates how to create a data source wrapper that contains all required values on its level, and there is no need to modify original data source. In the example, the `CustomDates` collection is filled with DateTime values based on the actual Start/End DateTime range and the specified interval (for example, `Month`). This collection is passed to the `DateDataSourceWrapper` class instance along with the original data source collection (`Table.DefaultView`). `CustomDates` collection is merged with the original data table and you do not need to modify the data source. When Pivot Grid requests data with the common [IList](https://msdn.microsoft.com/en-us/library/system.collections.ilist(v=vs.110).aspx) and [ITypedList](https://msdn.microsoft.com/en-us/library/system.componentmodel.itypedlist(v=vs.110).aspx) interfaces methods, the `DateDataSourceWrapper` object returns data from the original collection or generates `EmptyObjectPropertyDescriptor` objects to return rows with null "Date" field values. + +![Pivot Grid - Custom Field Values](./images/custom-field-values.png) +## Documentation + +[Fields](https://docs.devexpress.com/WPF/8024/controls-and-libraries/pivot-grid/fundamentals/fields) +## More Examples + +- [Pivot Grid for WinForms - How to Add Custom Field Values (Rows/Columns) that Are Not Present in a Data Source](https://github.com/DevExpress-Examples/how-to-add-custom-field-values-rows-columns-that-are-not-present-in-a-datasource-e4493). + +- [How to create a data source wrapper that adds an empty item to the lookup list](https://github.com/DevExpress-Examples/how-to-create-a-data-source-wrapper-that-adds-an-empty-item-to-the-lookup-list-e1180). + + From 46da39e17ca52f86f3d707072968bf5bcbae20f4 Mon Sep 17 00:00:00 2001 From: ritazakhodyaeva <57389482+ritazakhodyaeva@users.noreply.github.com> Date: Mon, 2 May 2022 17:26:32 +0400 Subject: [PATCH 03/10] Update Readme.md --- Readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Readme.md b/Readme.md index acbcfc6..2fab3c8 100644 --- a/Readme.md +++ b/Readme.md @@ -14,6 +14,8 @@ Pivot Grid does not display field values in row and column areas if these values are not represented in the underlying data source. This example demonstrates how to create a data source wrapper that contains all required values on its level, and there is no need to modify original data source. In the example, the `CustomDates` collection is filled with DateTime values based on the actual Start/End DateTime range and the specified interval (for example, `Month`). This collection is passed to the `DateDataSourceWrapper` class instance along with the original data source collection (`Table.DefaultView`). `CustomDates` collection is merged with the original data table and you do not need to modify the data source. When Pivot Grid requests data with the common [IList](https://msdn.microsoft.com/en-us/library/system.collections.ilist(v=vs.110).aspx) and [ITypedList](https://msdn.microsoft.com/en-us/library/system.componentmodel.itypedlist(v=vs.110).aspx) interfaces methods, the `DateDataSourceWrapper` object returns data from the original collection or generates `EmptyObjectPropertyDescriptor` objects to return rows with null "Date" field values. +The following image illustrates Pivot Grid that displays the custom `March` field value from the `CustomDates` collection along with field values from the data source: + ![Pivot Grid - Custom Field Values](./images/custom-field-values.png) ## Documentation From 7e22ed5126dbd9f8436a47777170e6133cfe74eb Mon Sep 17 00:00:00 2001 From: ritazakhodyaeva <57389482+ritazakhodyaeva@users.noreply.github.com> Date: Mon, 2 May 2022 20:27:01 +0400 Subject: [PATCH 04/10] Update Readme.md --- Readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Readme.md b/Readme.md index 2fab3c8..fb52674 100644 --- a/Readme.md +++ b/Readme.md @@ -22,8 +22,8 @@ The following image illustrates Pivot Grid that displays the custom `March` fiel [Fields](https://docs.devexpress.com/WPF/8024/controls-and-libraries/pivot-grid/fundamentals/fields) ## More Examples -- [Pivot Grid for WinForms - How to Add Custom Field Values (Rows/Columns) that Are Not Present in a Data Source](https://github.com/DevExpress-Examples/how-to-add-custom-field-values-rows-columns-that-are-not-present-in-a-datasource-e4493). +- [Pivot Grid for WinForms - How to Add Custom Field Values (Rows/Columns) that Are Not Present in a Data Source](https://github.com/DevExpress-Examples/how-to-add-custom-field-values-rows-columns-that-are-not-present-in-a-datasource-e4493) -- [How to create a data source wrapper that adds an empty item to the lookup list](https://github.com/DevExpress-Examples/how-to-create-a-data-source-wrapper-that-adds-an-empty-item-to-the-lookup-list-e1180). +- [How to create a data source wrapper that adds an empty item to the lookup list](https://github.com/DevExpress-Examples/how-to-create-a-data-source-wrapper-that-adds-an-empty-item-to-the-lookup-list-e1180) From be5e1ed0ecc177f663f6f4aa79c32a1b9fbc072b Mon Sep 17 00:00:00 2001 From: ritazakhodyaeva <57389482+ritazakhodyaeva@users.noreply.github.com> Date: Mon, 2 May 2022 20:28:02 +0400 Subject: [PATCH 05/10] Update Readme.md --- Readme.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Readme.md b/Readme.md index fb52674..6ec611f 100644 --- a/Readme.md +++ b/Readme.md @@ -2,21 +2,22 @@ [![](https://img.shields.io/badge/Open_in_DevExpress_Support_Center-FF7200?style=flat-square&logo=DevExpress&logoColor=white)](https://supportcenter.devexpress.com/ticket/details/T615806) [![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) - -## Files to Look at -* [DateDataSourceWrapper.cs](./CS/WpfApplication1/DateDataSourceWrapper.cs) (VB: [DateDataSourceWrapper.vb](./VB/WpfApplication1/DateDataSourceWrapper.vb)) -* [MainWindow.xaml](./CS/WpfApplication1/MainWindow.xaml) (VB: [MainWindow.xaml](./VB/WpfApplication1/MainWindow.xaml)) -* [MainWindow.xaml.cs](./CS/WpfApplication1/MainWindow.xaml.cs) (VB: [MainWindow.xaml.vb](./VB/WpfApplication1/MainWindow.xaml.vb)) - # How to Add Custom Field Values (Rows/Columns) that Are Not Present in a Data Source - Pivot Grid does not display field values in row and column areas if these values are not represented in the underlying data source. This example demonstrates how to create a data source wrapper that contains all required values on its level, and there is no need to modify original data source. In the example, the `CustomDates` collection is filled with DateTime values based on the actual Start/End DateTime range and the specified interval (for example, `Month`). This collection is passed to the `DateDataSourceWrapper` class instance along with the original data source collection (`Table.DefaultView`). `CustomDates` collection is merged with the original data table and you do not need to modify the data source. When Pivot Grid requests data with the common [IList](https://msdn.microsoft.com/en-us/library/system.collections.ilist(v=vs.110).aspx) and [ITypedList](https://msdn.microsoft.com/en-us/library/system.componentmodel.itypedlist(v=vs.110).aspx) interfaces methods, the `DateDataSourceWrapper` object returns data from the original collection or generates `EmptyObjectPropertyDescriptor` objects to return rows with null "Date" field values. The following image illustrates Pivot Grid that displays the custom `March` field value from the `CustomDates` collection along with field values from the data source: ![Pivot Grid - Custom Field Values](./images/custom-field-values.png) + + +## Files to Look at + +* [DateDataSourceWrapper.cs](./CS/WpfApplication1/DateDataSourceWrapper.cs) (VB: [DateDataSourceWrapper.vb](./VB/WpfApplication1/DateDataSourceWrapper.vb)) +* [MainWindow.xaml](./CS/WpfApplication1/MainWindow.xaml) (VB: [MainWindow.xaml](./VB/WpfApplication1/MainWindow.xaml)) +* [MainWindow.xaml.cs](./CS/WpfApplication1/MainWindow.xaml.cs) (VB: [MainWindow.xaml.vb](./VB/WpfApplication1/MainWindow.xaml.vb)) + ## Documentation [Fields](https://docs.devexpress.com/WPF/8024/controls-and-libraries/pivot-grid/fundamentals/fields) From 8e22dbc459be86f7247621244fb4bd39acd0fdb7 Mon Sep 17 00:00:00 2001 From: ritazakhodyaeva <57389482+ritazakhodyaeva@users.noreply.github.com> Date: Mon, 2 May 2022 20:38:05 +0400 Subject: [PATCH 06/10] Update Readme.md --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 6ec611f..a23955c 100644 --- a/Readme.md +++ b/Readme.md @@ -3,7 +3,7 @@ [![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) -# How to Add Custom Field Values (Rows/Columns) that Are Not Present in a Data Source +# How to Add Custom Field Values (Rows/Columns) that are not Present in a Data Source Pivot Grid does not display field values in row and column areas if these values are not represented in the underlying data source. This example demonstrates how to create a data source wrapper that contains all required values on its level, and there is no need to modify original data source. In the example, the `CustomDates` collection is filled with DateTime values based on the actual Start/End DateTime range and the specified interval (for example, `Month`). This collection is passed to the `DateDataSourceWrapper` class instance along with the original data source collection (`Table.DefaultView`). `CustomDates` collection is merged with the original data table and you do not need to modify the data source. When Pivot Grid requests data with the common [IList](https://msdn.microsoft.com/en-us/library/system.collections.ilist(v=vs.110).aspx) and [ITypedList](https://msdn.microsoft.com/en-us/library/system.componentmodel.itypedlist(v=vs.110).aspx) interfaces methods, the `DateDataSourceWrapper` object returns data from the original collection or generates `EmptyObjectPropertyDescriptor` objects to return rows with null "Date" field values. From dc3b2e8d12924a2e2615ba2a5ec3d036d6eb27ab Mon Sep 17 00:00:00 2001 From: ritazakhodyaeva <57389482+ritazakhodyaeva@users.noreply.github.com> Date: Wed, 4 May 2022 20:37:24 +0400 Subject: [PATCH 07/10] Update Readme.md --- Readme.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/Readme.md b/Readme.md index a23955c..938d6fe 100644 --- a/Readme.md +++ b/Readme.md @@ -5,9 +5,7 @@ # How to Add Custom Field Values (Rows/Columns) that are not Present in a Data Source -Pivot Grid does not display field values in row and column areas if these values are not represented in the underlying data source. This example demonstrates how to create a data source wrapper that contains all required values on its level, and there is no need to modify original data source. In the example, the `CustomDates` collection is filled with DateTime values based on the actual Start/End DateTime range and the specified interval (for example, `Month`). This collection is passed to the `DateDataSourceWrapper` class instance along with the original data source collection (`Table.DefaultView`). `CustomDates` collection is merged with the original data table and you do not need to modify the data source. When Pivot Grid requests data with the common [IList](https://msdn.microsoft.com/en-us/library/system.collections.ilist(v=vs.110).aspx) and [ITypedList](https://msdn.microsoft.com/en-us/library/system.componentmodel.itypedlist(v=vs.110).aspx) interfaces methods, the `DateDataSourceWrapper` object returns data from the original collection or generates `EmptyObjectPropertyDescriptor` objects to return rows with null "Date" field values. -The following image illustrates Pivot Grid that displays the custom `March` field value from the `CustomDates` collection along with field values from the data source: ![Pivot Grid - Custom Field Values](./images/custom-field-values.png) From f74e3c070638f775fb30ebfa666e1a760b9d450d Mon Sep 17 00:00:00 2001 From: ritazakhodyaeva <57389482+ritazakhodyaeva@users.noreply.github.com> Date: Wed, 4 May 2022 20:37:45 +0400 Subject: [PATCH 08/10] Update Readme.md --- Readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Readme.md b/Readme.md index 938d6fe..a23955c 100644 --- a/Readme.md +++ b/Readme.md @@ -5,7 +5,9 @@ # How to Add Custom Field Values (Rows/Columns) that are not Present in a Data Source +Pivot Grid does not display field values in row and column areas if these values are not represented in the underlying data source. This example demonstrates how to create a data source wrapper that contains all required values on its level, and there is no need to modify original data source. In the example, the `CustomDates` collection is filled with DateTime values based on the actual Start/End DateTime range and the specified interval (for example, `Month`). This collection is passed to the `DateDataSourceWrapper` class instance along with the original data source collection (`Table.DefaultView`). `CustomDates` collection is merged with the original data table and you do not need to modify the data source. When Pivot Grid requests data with the common [IList](https://msdn.microsoft.com/en-us/library/system.collections.ilist(v=vs.110).aspx) and [ITypedList](https://msdn.microsoft.com/en-us/library/system.componentmodel.itypedlist(v=vs.110).aspx) interfaces methods, the `DateDataSourceWrapper` object returns data from the original collection or generates `EmptyObjectPropertyDescriptor` objects to return rows with null "Date" field values. +The following image illustrates Pivot Grid that displays the custom `March` field value from the `CustomDates` collection along with field values from the data source: ![Pivot Grid - Custom Field Values](./images/custom-field-values.png) From b62b5718de62ecda2eb47892a624acc603d2eaf9 Mon Sep 17 00:00:00 2001 From: ritazakhodyaeva <57389482+ritazakhodyaeva@users.noreply.github.com> Date: Fri, 6 May 2022 17:40:38 +0400 Subject: [PATCH 09/10] Update Readme.md Co-authored-by: Albert Totten <49917542+albertov05@users.noreply.github.com> --- Readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index a23955c..2c44b41 100644 --- a/Readme.md +++ b/Readme.md @@ -7,7 +7,8 @@ Pivot Grid does not display field values in row and column areas if these values are not represented in the underlying data source. This example demonstrates how to create a data source wrapper that contains all required values on its level, and there is no need to modify original data source. In the example, the `CustomDates` collection is filled with DateTime values based on the actual Start/End DateTime range and the specified interval (for example, `Month`). This collection is passed to the `DateDataSourceWrapper` class instance along with the original data source collection (`Table.DefaultView`). `CustomDates` collection is merged with the original data table and you do not need to modify the data source. When Pivot Grid requests data with the common [IList](https://msdn.microsoft.com/en-us/library/system.collections.ilist(v=vs.110).aspx) and [ITypedList](https://msdn.microsoft.com/en-us/library/system.componentmodel.itypedlist(v=vs.110).aspx) interfaces methods, the `DateDataSourceWrapper` object returns data from the original collection or generates `EmptyObjectPropertyDescriptor` objects to return rows with null "Date" field values. -The following image illustrates Pivot Grid that displays the custom `March` field value from the `CustomDates` collection along with field values from the data source: +The following image illustrates a Pivot Grid that displays the custom `March` field value from the `CustomDates` collection along with field values from the data source: + ![Pivot Grid - Custom Field Values](./images/custom-field-values.png) From b474c92378b5e824c126d2e14dde89ee503c16e6 Mon Sep 17 00:00:00 2001 From: ritazakhodyaeva <57389482+ritazakhodyaeva@users.noreply.github.com> Date: Thu, 12 May 2022 09:47:19 +0400 Subject: [PATCH 10/10] Update Readme.md Co-authored-by: Albert Totten <49917542+albertov05@users.noreply.github.com> --- Readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 2c44b41..955c267 100644 --- a/Readme.md +++ b/Readme.md @@ -5,7 +5,8 @@ # How to Add Custom Field Values (Rows/Columns) that are not Present in a Data Source -Pivot Grid does not display field values in row and column areas if these values are not represented in the underlying data source. This example demonstrates how to create a data source wrapper that contains all required values on its level, and there is no need to modify original data source. In the example, the `CustomDates` collection is filled with DateTime values based on the actual Start/End DateTime range and the specified interval (for example, `Month`). This collection is passed to the `DateDataSourceWrapper` class instance along with the original data source collection (`Table.DefaultView`). `CustomDates` collection is merged with the original data table and you do not need to modify the data source. When Pivot Grid requests data with the common [IList](https://msdn.microsoft.com/en-us/library/system.collections.ilist(v=vs.110).aspx) and [ITypedList](https://msdn.microsoft.com/en-us/library/system.componentmodel.itypedlist(v=vs.110).aspx) interfaces methods, the `DateDataSourceWrapper` object returns data from the original collection or generates `EmptyObjectPropertyDescriptor` objects to return rows with null "Date" field values. +Pivot Grid does not display field values in row and column areas if these values are not represented in the underlying data source. This example demonstrates how to create a data source wrapper that contains merged values ​​from a data source and a custom collection. In the example, the `CustomDates` collection is filled with DateTime values based on the actual Start/End DateTime range and the specified interval (for example, `Month`). This collection is passed to the `DateDataSourceWrapper` class instance along with the original data source collection (`Table.DefaultView`). The `CustomDates` collection is merged with the original data table and you do not need to modify the data source. When Pivot Grid requests data with the common [IList](https://msdn.microsoft.com/en-us/library/system.collections.ilist(v=vs.110).aspx) and [ITypedList](https://msdn.microsoft.com/en-us/library/system.componentmodel.itypedlist(v=vs.110).aspx) interface methods, the `DateDataSourceWrapper` object returns data from the original collection or generates `EmptyObjectPropertyDescriptor` objects to return rows with null "Date" field values. + The following image illustrates a Pivot Grid that displays the custom `March` field value from the `CustomDates` collection along with field values from the data source: