From 18a95d96d837f4a9d01d996ba2039c54412b9ff7 Mon Sep 17 00:00:00 2001 From: mhjensen Date: Tue, 31 Dec 2019 18:11:32 +0100 Subject: [PATCH] added more to pca code example --- doc/pub/DimRed/html/._DimRed-bs000.html | 2 +- doc/pub/DimRed/html/._DimRed-bs018.html | 23 ++++++++++++----- doc/pub/DimRed/html/DimRed-bs.html | 2 +- doc/pub/DimRed/html/DimRed-reveal.html | 25 +++++++++++++------ doc/pub/DimRed/html/DimRed-solarized.html | 25 +++++++++++++------ doc/pub/DimRed/html/DimRed.html | 25 +++++++++++++------ doc/pub/DimRed/ipynb/DimRed.ipynb | 25 ++++++++++++++----- doc/pub/DimRed/ipynb/ipynb-DimRed-src.tar.gz | Bin 191 -> 191 bytes doc/pub/DimRed/pdf/DimRed-minted.pdf | Bin 262342 -> 262893 bytes doc/src/DimRed/DimRed.do.txt | 22 ++++++++++------ 10 files changed, 107 insertions(+), 42 deletions(-) diff --git a/doc/pub/DimRed/html/._DimRed-bs000.html b/doc/pub/DimRed/html/._DimRed-bs000.html index db2c29bdc..f4b4f0e52 100644 --- a/doc/pub/DimRed/html/._DimRed-bs000.html +++ b/doc/pub/DimRed/html/._DimRed-bs000.html @@ -224,7 +224,7 @@ MathJax.Hub.Config({
[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

-

Dec 30, 2019

+

Dec 31, 2019


diff --git a/doc/pub/DimRed/html/._DimRed-bs018.html b/doc/pub/DimRed/html/._DimRed-bs018.html index 2df856349..e7381a724 100644 --- a/doc/pub/DimRed/html/._DimRed-bs018.html +++ b/doc/pub/DimRed/html/._DimRed-bs018.html @@ -221,8 +221,8 @@ We will generate \( n = 1000 \) points \( X = \{ x_1, \ldots, x_N \} \) from this distribution, and store them in the \( 1000 \times 2 \) matrix \( \boldsymbol{X} \).

-The following Python code aids in setting up the data - +The following Python code aids in setting up the data and writing out the design matrix. +Note that the function multivariate returns also the covariance discussed above and that it is defined by dividing by \( n-1 \) instead of \( n \).

@@ -237,7 +237,7 @@ X = np.r print(X)

-Make thereafter a small Python code which writes out the data. Note that the function multivariate returns also the covariance discussed above and that it is defined by dividing by \( n-1 \) instead of \( n \). +Try to add to this code your own calculation of the covariance matrix.

Now we are going to implement the PCA algorithm. We will break it down into various substeps. @@ -258,7 +258,7 @@ $$ When you are done with these steps, print out \( \mu_n \) to verify it is close to \( \mu \) and plot your mean centered data to verify it is centered at the origin! Compare your code with the functionality from Scikit-Learn discussed above. - +The following code elements perform these operations using pandas or your own functionality for doing so.

@@ -272,6 +272,12 @@ X_centered = X # test that we get the same as Pandas print(X_centered-df) +

+Alternatively, you could also have used the functions we discussed earlier for scaling the data set. +That is, we could have used the StandardScaler function in Scikit-Learn, a function which +ensures that for each feature/predictor we study the mean value is +zero and the variance is one (every column in the design/feature +matrix).

Compute the sample covariance

@@ -312,9 +318,14 @@ where \( v_0 \) is the first principal component. What do you observe?

Finally, collect all these steps and write your own PCA function and -compare this with the functionality included in Scikit-Learn. -Have the input be the data and have the output be the principal components and their associated eigenvalues, sorted in descending order. Can you think of a way to make it more efficient than the algorithm outlined above? +compare this with the functionality included in Scikit-Learn. Have +the input be the data and have the output be the principal components +and their associated eigenvalues, sorted in descending order. Can you +think of a way to make it more efficient than the algorithm outlined +above? +

+The code here outlines some of the elements you could include in this analysis.

diff --git a/doc/pub/DimRed/html/DimRed-bs.html b/doc/pub/DimRed/html/DimRed-bs.html index db2c29bdc..f4b4f0e52 100644 --- a/doc/pub/DimRed/html/DimRed-bs.html +++ b/doc/pub/DimRed/html/DimRed-bs.html @@ -224,7 +224,7 @@ MathJax.Hub.Config({

[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

-

Dec 30, 2019

+

Dec 31, 2019


diff --git a/doc/pub/DimRed/html/DimRed-reveal.html b/doc/pub/DimRed/html/DimRed-reveal.html index 7024e385a..4c8a61a41 100644 --- a/doc/pub/DimRed/html/DimRed-reveal.html +++ b/doc/pub/DimRed/html/DimRed-reveal.html @@ -148,7 +148,7 @@ MathJax.Hub.Config({

[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

 
-

Dec 30, 2019

+

Dec 31, 2019


@@ -1027,8 +1027,8 @@ We will generate \( n = 1000 \) points \( X = \{ x_1, \ldots, x_N \} \) from this distribution, and store them in the \( 1000 \times 2 \) matrix \( \boldsymbol{X} \).

-The following Python code aids in setting up the data - +The following Python code aids in setting up the data and writing out the design matrix. +Note that the function multivariate returns also the covariance discussed above and that it is defined by dividing by \( n-1 \) instead of \( n \).

@@ -1043,7 +1043,7 @@ X = np.random.multivariate_normal(mean, cov, n) print(X)

-Make thereafter a small Python code which writes out the data. Note that the function multivariate returns also the covariance discussed above and that it is defined by dividing by \( n-1 \) instead of \( n \). +Try to add to this code your own calculation of the covariance matrix.

Now we are going to implement the PCA algorithm. We will break it down into various substeps. @@ -1068,7 +1068,7 @@ $$ When you are done with these steps, print out \( \mu_n \) to verify it is close to \( \mu \) and plot your mean centered data to verify it is centered at the origin! Compare your code with the functionality from Scikit-Learn discussed above. - +The following code elements perform these operations using pandas or your own functionality for doing so.

@@ -1082,6 +1082,12 @@ X_centered = X - X.mean(axis=0) # test that we get the same as Pandas print(X_centered-df) +

+Alternatively, you could also have used the functions we discussed earlier for scaling the data set. +That is, we could have used the StandardScaler function in Scikit-Learn, a function which +ensures that for each feature/predictor we study the mean value is +zero and the variance is one (every column in the design/feature +matrix).

Compute the sample covariance

@@ -1125,9 +1131,14 @@ where \( v_0 \) is the first principal component. What do you observe?

Finally, collect all these steps and write your own PCA function and -compare this with the functionality included in Scikit-Learn. -Have the input be the data and have the output be the principal components and their associated eigenvalues, sorted in descending order. Can you think of a way to make it more efficient than the algorithm outlined above? +compare this with the functionality included in Scikit-Learn. Have +the input be the data and have the output be the principal components +and their associated eigenvalues, sorted in descending order. Can you +think of a way to make it more efficient than the algorithm outlined +above? +

+The code here outlines some of the elements you could include in this analysis.

diff --git a/doc/pub/DimRed/html/DimRed-solarized.html b/doc/pub/DimRed/html/DimRed-solarized.html index 0edd74866..b46a53c3d 100644 --- a/doc/pub/DimRed/html/DimRed-solarized.html +++ b/doc/pub/DimRed/html/DimRed-solarized.html @@ -179,7 +179,7 @@ MathJax.Hub.Config({

[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

-

Dec 30, 2019

+

Dec 31, 2019












@@ -1007,8 +1007,8 @@ We will generate \( n = 1000 \) points \( X = \{ x_1, \ldots, x_N \} \) from this distribution, and store them in the \( 1000 \times 2 \) matrix \( \boldsymbol{X} \).

-The following Python code aids in setting up the data - +The following Python code aids in setting up the data and writing out the design matrix. +Note that the function multivariate returns also the covariance discussed above and that it is defined by dividing by \( n-1 \) instead of \( n \).

@@ -1023,7 +1023,7 @@ X = np.random.multivariate_normal(mean, cov, n) print(X)

-Make thereafter a small Python code which writes out the data. Note that the function multivariate returns also the covariance discussed above and that it is defined by dividing by \( n-1 \) instead of \( n \). +Try to add to this code your own calculation of the covariance matrix.

Now we are going to implement the PCA algorithm. We will break it down into various substeps. @@ -1044,7 +1044,7 @@ $$ When you are done with these steps, print out \( \mu_n \) to verify it is close to \( \mu \) and plot your mean centered data to verify it is centered at the origin! Compare your code with the functionality from Scikit-Learn discussed above. - +The following code elements perform these operations using pandas or your own functionality for doing so.

@@ -1058,6 +1058,12 @@ X_centered = X - X.mean(axis=0) # test that we get the same as Pandas print(X_centered-df) +

+Alternatively, you could also have used the functions we discussed earlier for scaling the data set. +That is, we could have used the StandardScaler function in Scikit-Learn, a function which +ensures that for each feature/predictor we study the mean value is +zero and the variance is one (every column in the design/feature +matrix).

Compute the sample covariance

@@ -1098,9 +1104,14 @@ where \( v_0 \) is the first principal component. What do you observe?

Finally, collect all these steps and write your own PCA function and -compare this with the functionality included in Scikit-Learn. -Have the input be the data and have the output be the principal components and their associated eigenvalues, sorted in descending order. Can you think of a way to make it more efficient than the algorithm outlined above? +compare this with the functionality included in Scikit-Learn. Have +the input be the data and have the output be the principal components +and their associated eigenvalues, sorted in descending order. Can you +think of a way to make it more efficient than the algorithm outlined +above? +

+The code here outlines some of the elements you could include in this analysis.

diff --git a/doc/pub/DimRed/html/DimRed.html b/doc/pub/DimRed/html/DimRed.html index c0500aa5f..3d025d9fe 100644 --- a/doc/pub/DimRed/html/DimRed.html +++ b/doc/pub/DimRed/html/DimRed.html @@ -184,7 +184,7 @@ MathJax.Hub.Config({

[2] Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University

-

Dec 30, 2019

+

Dec 31, 2019












@@ -1012,8 +1012,8 @@ We will generate \( n = 1000 \) points \( X = \{ x_1, \ldots, x_N \} \) from this distribution, and store them in the \( 1000 \times 2 \) matrix \( \boldsymbol{X} \).

-The following Python code aids in setting up the data - +The following Python code aids in setting up the data and writing out the design matrix. +Note that the function multivariate returns also the covariance discussed above and that it is defined by dividing by \( n-1 \) instead of \( n \).

@@ -1028,7 +1028,7 @@ X = np.r print(X)

-Make thereafter a small Python code which writes out the data. Note that the function multivariate returns also the covariance discussed above and that it is defined by dividing by \( n-1 \) instead of \( n \). +Try to add to this code your own calculation of the covariance matrix.

Now we are going to implement the PCA algorithm. We will break it down into various substeps. @@ -1049,7 +1049,7 @@ $$ When you are done with these steps, print out \( \mu_n \) to verify it is close to \( \mu \) and plot your mean centered data to verify it is centered at the origin! Compare your code with the functionality from Scikit-Learn discussed above. - +The following code elements perform these operations using pandas or your own functionality for doing so.

@@ -1063,6 +1063,12 @@ X_centered = X # test that we get the same as Pandas print(X_centered-df) +

+Alternatively, you could also have used the functions we discussed earlier for scaling the data set. +That is, we could have used the StandardScaler function in Scikit-Learn, a function which +ensures that for each feature/predictor we study the mean value is +zero and the variance is one (every column in the design/feature +matrix).

Compute the sample covariance

@@ -1103,9 +1109,14 @@ where \( v_0 \) is the first principal component. What do you observe?

Finally, collect all these steps and write your own PCA function and -compare this with the functionality included in Scikit-Learn. -Have the input be the data and have the output be the principal components and their associated eigenvalues, sorted in descending order. Can you think of a way to make it more efficient than the algorithm outlined above? +compare this with the functionality included in Scikit-Learn. Have +the input be the data and have the output be the principal components +and their associated eigenvalues, sorted in descending order. Can you +think of a way to make it more efficient than the algorithm outlined +above? +

+The code here outlines some of the elements you could include in this analysis.

diff --git a/doc/pub/DimRed/ipynb/DimRed.ipynb b/doc/pub/DimRed/ipynb/DimRed.ipynb index 97b75d4b2..5707585db 100644 --- a/doc/pub/DimRed/ipynb/DimRed.ipynb +++ b/doc/pub/DimRed/ipynb/DimRed.ipynb @@ -10,7 +10,7 @@ " \n", "**Morten Hjorth-Jensen**, Department of Physics, University of Oslo and Department of Physics and Astronomy and National Superconducting Cyclotron Laboratory, Michigan State University\n", "\n", - "Date: **Dec 30, 2019**\n", + "Date: **Dec 31, 2019**\n", "\n", "Copyright 1999-2019, Morten Hjorth-Jensen. Released under CC Attribution-NonCommercial 4.0 license\n", "\n", @@ -1093,7 +1093,8 @@ "We will generate $n = 1000$ points $X = \\{ x_1, \\ldots, x_N \\}$ from\n", "this distribution, and store them in the $1000 \\times 2$ matrix $\\boldsymbol{X}$.\n", "\n", - "The following Python code aids in setting up the data" + "The following Python code aids in setting up the data and writing out the design matrix.\n", + "Note that the function **multivariate** returns also the covariance discussed above and that it is defined by dividing by $n-1$ instead of $n$." ] }, { @@ -1119,7 +1120,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Make thereafter a small Python code which writes out the data. Note that the function **multivariate** returns also the covariance discussed above and that it is defined by dividing by $n-1$ instead of $n$.\n", + "Try to add to this code your own calculation of the covariance matrix.\n", "\n", "Now we are going to implement the PCA algorithm. We will break it down into various substeps.\n", "\n", @@ -1159,7 +1160,8 @@ "source": [ "When you are done with these steps, print out $\\mu_n$ to verify it is\n", "close to $\\mu$ and plot your mean centered data to verify it is\n", - "centered at the origin! Compare your code with the functionality from **Scikit-Learn** discussed above." + "centered at the origin! Compare your code with the functionality from **Scikit-Learn** discussed above.\n", + "The following code elements perform these operations using **pandas** or your own functionality for doing so." ] }, { @@ -1185,6 +1187,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "Alternatively, you could also have used the functions we discussed earlier for scaling the data set. \n", + "That is, we could have used the **StandardScaler** function in **Scikit-Learn**, a function which \n", + "ensures that for each feature/predictor we study the mean value is\n", + "zero and the variance is one (every column in the design/feature\n", + "matrix).\n", + "\n", "### Compute the sample covariance\n", "\n", "Now we are going to use the mean centered data to compute the sample covariance of the data. Recall it is given by:" @@ -1240,8 +1248,13 @@ "where $v_0$ is the first principal component. What do you observe?\n", "\n", "Finally, collect all these steps and write your own PCA function and\n", - "compare this with the functionality included in **Scikit-Learn**.\n", - "Have the input be the data and have the output be the principal components and their associated eigenvalues, sorted in descending order. Can you think of a way to make it more efficient than the algorithm outlined above?" + "compare this with the functionality included in **Scikit-Learn**. Have\n", + "the input be the data and have the output be the principal components\n", + "and their associated eigenvalues, sorted in descending order. Can you\n", + "think of a way to make it more efficient than the algorithm outlined\n", + "above?\n", + "\n", + "The code here outlines some of the elements you could include in this analysis." ] }, { diff --git a/doc/pub/DimRed/ipynb/ipynb-DimRed-src.tar.gz b/doc/pub/DimRed/ipynb/ipynb-DimRed-src.tar.gz index 9652539851cd353f902cd2b775b030c1c2435581..ed525379a1fc44e21e2e3d5de22501be1c94bdb1 100644 GIT binary patch delta 177 zcmV;i08anE0lxu%ABzY8F@XzS00ZsM%?iRW3Y~ zooxs1?cE3HN%1m7=8)dCJf%4cWrcb>H;&cyhds+H@XSAPY@~&ee-|m#0wZp{Gy<3!fN?IJ f)QVlh&ghe2t&PH8KjV3x=Y8z~Vz!kc00;m8YmZUd delta 177 zcmV;i08anE0lxu%ABzY8`vnSK00ZsMOA5j;5C-6`dx|+hnKXT@g}QJdNbv$GNo~|7 zHA%tV-abHAikl)rzRk}h!!T2BH^qJ%xw{KigNRv@z?6BG&WZ6-&j?9@&}@9eIL|2{ zp)`#H!1Y#o>8)dCT%|b+Wrcd%H@4OFhdIkB@XSAPY@~&ee-|nA1xDO@X#_Ae0OMRb fsTI41ozW-5S{sGGKF0Gr&->Z~j*4ru00;m80t!$9 diff --git a/doc/pub/DimRed/pdf/DimRed-minted.pdf b/doc/pub/DimRed/pdf/DimRed-minted.pdf index 0cea4334decca2da650fc7c25664f16a351b72ca..243dbec69a8d99eba0c83c5c19a57289554c1012 100644 GIT binary patch delta 11570 zcmai%Lv)ypqD5odwrw}IjmEakFLq}(Ac)^-hc4s@2quZd$6Z_GzjG?45fh$ z3{d-(RH9>trY{E~(rTk|(xC%RQF&pd8yNQYlLlXUtA_5t+cB|XA2rzum#Z>L#Prqi zN4;>u!=CtV+2oMH?iP~j&P@V5q29YYUtT4ZhyCar%ys3H7JV%LE z3X8%rAsE<8JM*~vYb<^XN$)9@3U6VF0NRg97*fIOSI33fzBW4rV+CdqjQS3hRHsX6 z^?rqZ?b^HZrHm;3Er1P#F|-@G-i~ZA(8`E?Mu$t2ae#qOGF^&jirDO@08+Ow0>MZ| zaWrtk(4T#!wGf1`)v@r)j|D0*XT=9dq6HmSGEeZD`=wAIzDf5DKMtYxdxq)s5kR;9 zAbzCWDX08ks9IHMPt_XFGjJLHg+k3dlc70Wd4ZT^lk4>J+0- zPtX`*tS4|64`5fBPazM_!5vEU1e*KwB_M`h(}(s}IDyxYZoTy@9F5UmGV0s{!k0NQ zI%?)s3>OLRnv@K=!uoA&(KIkkOj^m)<8?aQ)m`&!-KezhtYdh?L}nW3YjHj+8SYC8{i*vmilJk=G%Auv)qp$PwpT~>$0yZNmMLqGU2n4uwKbrLf*iV&$3C;x_T zh0z^01f59uNmUhPf)Se+z?V-(E8uc33wQa-_6aS8wZ2BwO{)(pSu*BXfG-A%V&;8W z2B~~6w7BKi07T|lhobu+A8UN~5vM!csTQeZtoWZrv6rweaayGF99Y8lr#Uo0fGwUM)#YUlQwYfVl zbV}f+1FnWJ$py=%~{@;T8Cz&5Q1|krF1_Y;BVaNPvqCUqnTs7Qv-3J478(QQtjS;?vRRpST%vVv#hk!y^NxY*w zEs~95d>LvA&0GU-C^RYTeOyPWQ!whY!Bvyh#vcq#ES1%I?eVB_CE9TPn}nRs_cfD9 zm}AMgrV-TWqQU6Q6&3`EiDFJfI}`z{xu^4*v8* zbTv3KWf0`?soFn{U$wR~=-aK!TU|Ru#`n==yrVXqYtggZ<~v>9uVk+le$<=#p-O z&6!0^-L(5S>B6FaD`0p?o-R8^{W0I07})Lf`Fc`Zaqk%+HlC{>d3(1doulr}D`z8v(&c@1{e3wQ8^!${IKNv;ry{T7rz-Tx(7m`_D z4KZB>P3m`U1YhmHCTd6HBx8s|SG~VHTsf%@P_|Q)Yf{Y7liZpKP}f*Fs6L;-eu?qB zE7y9ve2Mq0-}YmED>6w%wQz3JchYDKjtQF&KPuDPw8y$>Lgr;oBfj|-sPldJ!AuoX zL3uX-D1Nu{3*;!xxKNf(D|Q|8v{n>0y0>ANKVPV3*IaMBw>xatboDwuKUH3R9*X&& zZ_K(;jMGz7!`9)BMG9T;b4!d*U<}2g84vo(J$riAf4@bWG8o>5F;JpI@^C~)Rq53r z*KY&U*!X^*4`h~TV(}j5#sjWYJXbA--M&wNCpBX!mE|vAh0-V2{b^Y?jme#p>4udi zcG5_=OD#wUaji2CHhH`&i!I6#O1LI%1q*+-rXqZ-8Wsr@y6iL25@C8!BG+cEZnG?) z5Xw32L_}LJeHz2Z*ld8qiqGil<;wYB(Q>i4tj949*?j}KZpWT*E3siPPt=szFY_9B zvk#u7B^*?*8LzgQG4)+nhboXhBrDDtSEHRLmGSTi4=Tt*a}?bTFCbR@d&AL}Gc{??z4wda$4`dvX$ zLo0G>V$>|mdn0c{M@}$|cnO~GM+gA3=p|y+BRmm(PV~|AWfMhIF5j=gE;NbkYNN70 zp$T(Op}sjTFzs8t%63HA_1{{`>y&7b6(=6p?k(66vD@FA2NTp0Rs0ierkU>ER5Dyq z&s&NQ(@*78;p=JSgUy3*lxJWo9nkKD)JiNjKhv+1PjWD2Ke=8qo2qhbwG4oUZkimA zui71sFBi(H$u}h%FUnd!n(h3(zRz;xjz6_*NV6x z@y8XD<&eb2jzZJ*g#NPFI-3z@Ec~9;SSu2Sz)Sm(y$YZ9K7@{+Gr_)(q5`ONqA&lK z++Tq}0+<5+>wG--=_4Z%gvYR~(0{(D5+fxUOhv`wqqC1% zgg^Sc*mmjK((1Xr!Q!AS&%>Ynvh!=ypWx_i{fXPY9UD%Q-I$~kUxWAOa!ZeU4I4&A zdeQiwWSR^N2`HNo|RPb`!@O#hl|)R)_+J;B5Nbh_T)%S|+m6<>V5UUAof?)D76 zmUS>vBWa8jgcH-j8V~`ODy0oI>X0M}=Dlod-d1|W9){u1w;*XR0VWR}f&!OcDaak_ zUrsKB@kJ~r;w}LcBWIe~&vOLO%s*DKK>kRc>d;s>nywIE7FvnDCHngDMVOhDU@-#mKNMQ8o=q-HMzcdY=|0c8kbr!GCq&h2$wmeW7l+ zcW8ss`S2?X!!-kaPCr2+l)_B~K>x-!k@IGWb`i7ZRn~hQS$0Z%i+gRo7dCa8`P=%# zF$x`OfUj?GZ>X|9D029>>Af3+20y?I*DYgH?5Lh#6OVOP=$SSJO9NZ({wgc2C^O)F*NFz7r6N zeo8fbe?OD_0 zg~_uH-$j7qM2tFAR6>plQarf9_ES-N*y!p=xn7w z?BFd8X9E?@kasUpxyw+>GsHIJ?EZl=>OM+%fFIu#AM!WN{=q@nop!^P*UsN}Sa8ym zWGR%>d}6W{jWCp0QqMMwd&zN;a6duF;Wa(@!A2lh^~gXy+rsLmmMq1Gc{&r%iaohFAM=^XnowT z{0|_C%gd#S>#F|BV!H4%{UlCCSc9IOZlBfIhVmfQ4^&V*)hG|eeZovo({kg$$;O5` zi0RCOv$-!v1=GG_YfE7onzqciJAnu$wq;h;q6a(rR}aOOLV^Q!)uLk6!kXfl9rRXt z>C*G|3Lc}~)5y7dk70iKk}ZClV|sVFxdVWOaALx{eM(6Q+X#a)WNcounEolA^po4+ zw)f$M;B{U{4(4+gZB$KN7%>XezM=2NXt4`CvxpAHtYTW}o+Kot%JJOrvo4@oAwf)a z1C&Ufm+Ec`#JdEKaz3}GA>x7BYH+9@4GKw^x+0Gq(5DFroW~I@3u=|pH5yn$3I~=^ zKnMmV%Etb>Bk7b9in8`%gCrl{!UPWuL{>tlmCo4G@Zxq)k#XgyIsH`r$!hoz>wUDq zOHY;*Hkq4%5wQTFXzg@@PhM{2tH`>N$C-Ql#U;o~YBX+cYqh#Dgzc&9P%4&gTFSmN z>|>ewRji}-C%e;9g;WFi#qUnF_#QwXA*C1RK9pGoDChEBxVpgT(vKihvmsza9a6?{ zPBY{ayh7Wz`Itg~b@jKYHFNp4h``wi=hC>A6(VyR*mq-Rb+3u*{o=8|0p~j8_|c3rD`Y@fSo^+4u<(m3V5SZ-U5(uRHc7a zJSR^xqf=8P6)nnK;GOi2?~@FvL1^4UvRO>C<+Xn?o^4T3M--?3d-){0+XWHOi~JY4 zzLAw6ijhT2@Ga_tMjDPTiULUV8kaF_)Cp0v>)>X9C?hTfPUsn$$@-J3@wJw{if~Ga z@@77A>38H<%{cPeQHd~?Tk6xMNH$!WJ64%OYf#lsE4`mjie*MkMFrDqhVz{$efNQR z1!~kC1R+4z@vLhKE^qVbKkW+XR@|<)5WhczIkeA6IrNm1!PugrKLENRQyPk;9-dfN z*Cfa<8NH5eN_9Iv!GxRQ%{w355My?p)hWec3MlnX&Z&atAV!C=zV}@ZssPL-?_dl9 z<-7k$^$t3P-KbOCa@GRMO;v6_lDlKGz+o$OQldPiQYEQI`U(d(n<#dG>|^SiCu%h(2`mk!45phUM{5(`=fmoWod_7{I9SXHW1 zm}l4V`mg(FrE4wJ)27ouG>kF}GkuWS9q9xq9u=^|Bm`9N|Q@CRAxgJya;%oVz=dsvgVyr@-D( z%3s&&NKc#?>DIaJZ3Zgb7fm#^+oG?y6FIXQG+EqQ0Jws;zW$`;OxUZ_PcHHJR@mjq zISZoizA_-fY{j5@FMxPsPn0qG+N=)p*KzU%qkn7r!;Oq2)%F;0(<`8Ot}t{a|5Q>A zV>kgas!!dG{c$q$8-ub5m{;DBD5ZB^JMxAcX2igS{N(Atm?rslnG9`4U{yT%gc6-mcCh z!7)Su ztxVp~zaKiEvH%30j(o^#^`4OHNHz6;3oZA$Zq$@&_vl&zHX6+u&Z}v5Uk6uO`F+P0 z-8^!C3Ahx|^Ts($`7lp@JvYo7X0-J)28UBnPzF;+hGRwBJDUgE!doPTl` zA>e(u%xH}S8MGc5hcxeA4>}4uRdS%GJzr0?ZVseu)_F)6DoMgy|ir-`f8p_AC^)FH`SgrG55mFO0W^-7zQ?u zPP>2M(b^NpgKTH)sFD$9Gn;Vg9fOgj>>BJf6C5y>+rF%bo(8LW)e+3+4F zRj5@hoEQ&$d7rmGzn_oGvxVDtZ*j$Q2h=9ay87OLy)llpfwuaj6wrf-V*C!JP%{E) z*<`-A=VM0$iL1zP<4O!GMR)OljOB|P4mhjo}F!(YBFffeeQQgXUHvExT zj0wqx&0~(skIWHaMK~#Es&-<{H{&&{45PG@pb9O&a62T?V5C2p^K>jUgB@|DEi$+? za@v=`7lKNbd51j4!DhYN1rnzMmr>#9uvuJGAmy%6CK%!e21cyAV?fv9dAwS$UQj%0 zzWCdqYQF5-A+@UDn~-{M%39_1ncMLpWs~F&&s&@8U2+whvORweD+hDlm+ZFE|bB7_hKo4yF3NnEGu=^;xqQMEW%@!uH@6SBJt<@&*(8@T* zE5hJeu$pWXj72*02=8KL%yjOj`?*Rei5JMmwZ1=B_zZ@3=||i@NdI1q&_H8xrcWke z)j<7&6w;|ob#u=%=`n*L-r92yQ345gU5dS>e-zUE8Zsku0$&v{Oub^@TB%61WEKg3H$}p|Jy$^*hr{CeZFnU zSLk=4#;@bQ( z5We9v=M*RXwA~Myl0(sLw}&xi3!Rg8KFF=OatDz&QGbiG_TTreuOz`PJrPS3e$+_N zR=qH331mz7=S+R)gSGm~w7JY_5if-d=?aWYrYZ|Mf`=c+>WS5WBoAKcG%q(EA>#8# zai+Uq5KJY{VH91N326jwPEI2*4L0`|B>C4Pnb36p--dW7qjd8-K_ek3m)|$adU^GX z$EmA4?)~2>7hQjiH?(GqB`cYyDN;cY1ni|WwMa&NH8o#W&JKBB)j+xr&J;zOg=ATF z>p%xNbI$U8-fy)#IM4-K%mEwZML8ev+y-lJ9^%A@VRNaFxu(u=VvI{5&9CW$?X@wC zJQN~G2i5g+8kTMdckHh;sCm|9h@x`P$zQHCgzP6}x)XU9U=*O#g8p*`+hMEtTBL~_ zc9JTu#`kX}HGh7E5esMiIchsgO$ecIR9|gHed_iIuH`)D+WsWzvG9{^09Ws~9&LJU zITZ-41C<(cJ+hsRq7G$w71QxfLGb$M#|_n8QvOq&qKr< zbY~*y?4RR_4$+fVo?t;^gn>5h_I0)9P$;Yto31>AI2L~=)%kgd^QM#_NuGV?uNBTS zdze{=cJpJs3oipd6WJh7p19EZ3#fQa#F0|J7G`~OnU2XM^n7N3Ktu_ox`P}46s*gm zEY#oqAjMc45s!i}A$rFmVCQvNVhbAn%JOs*5-|at%!IVC3 zh*`dOv*<Jkzni^lYk+AdYg??kb837r%T=Oh}-YWUr^CFQ`^7b)zNMQF?vvS@?u zEbt=~g_?H???%whrn~UIyhJrOKV*1wurKG$u_2$}5Az)sZj#%%Sc5e8Jd1uk6(0SUBo0a;c zp#RHl`>|(7vPRi=Q}}w^>%~swx_yfSbli%FP|Q| zJ+<#M`BO#yOmgES%VpjIgacegr9xPiZt^K8TX8^taY*Fc%P8SLtNtYAKxKR~x;N`o zx}?fr3WB>zTn{x;p)pnvsV$FHnYU**2wJMs(wO8`*UAjSnLB*C9KDv_`U{#@`)aU| z9nmn!LnGr#=$qn4P&tIBN;efvvxM4a43V&sBrE|>b7&A_sa@RdY!9v0SeF`Rc%f4} zQZT@~8p-i%m){5L(do>6udovToXr68>_k^<^j7z!w+%Ln&wLC_5Sg+D&F;sBCTO~k zknpZ#t_oO*8)C-X(02A+rIbK>HeYG*-0-UV0!1eHV z-P#8#(#{mfA7dk(^bb(#P9-H8Gz>a>rz*g6(TxiV51q^P2)#}H$P&vaO-Vn@$Ro)E zl8SBaK^X^+AVtr+c}b0ra`tQyosO)7;F3rWsXJi`6iJdv3TcUs08yaTQd=^ltC4sd z9C`qq?h*!DRrH-QwhOH&`v%XgXPxiGzIg`|&k3S{>cdjiU76q%LtAA|un?vcA_{mJ z*7schcs8biu}-OkhnmBa6`PA=+-4L;W=T8$7QS+pk*MT_u7EfYHW6QXnO&0Pn1YNy z5fD_@Ejc1pKB)qw^U7I34|Uq~#Xx={JdtxyGP=+EFtgBd-%wkbXK-Y;Sjrg*%uBym zx@ZZDTwI_rTuP`$n%S6=O;qdOwgG^e>MP!W{5pfdU*oFR4#2jG%tgK!F5)LRcSh@Th z3^=KUz^2YV#9nch7N|4a|t-L%^ZK>JwG+e9IS)mNwyDF+ky}Bx_Ec_o1b}Rbm z2uaF*9v+)>d1+|u{~T4J1gilnJ~aO z{!Sj4SHTB^Q=?mTQdifqb1eGz4nsFx<+FzVtMi`6DDw{t80Sr;@?ev^7{Z|i!R_fF z`8o=mB1_LI9vGuRg)HPIPuo~O^L7=DhcJS;bCU+)AfYX1zMy&wIkL&PZ&;Wqh=)#;2G*V{TJ`;a8wnA<#L#p*rs#1MPxu=KiEtFS?C#cdf}Dk>14AzX zeLaLP_2vLCc_o&()u?akGi7B5W&JN!Y{0e-lJ(OkfC=qXg1QWXv}@U*J%+TL12WUf z@bHIrQ5xu@+MwQGda6uxd6ip&m%_QmNhut34dOxpsf_-G#mS*f_zXU)Y5YJ)_=B`i z`dd1dUqjsmbP#w-_^Z*H%crQU2)jW`1jOFzXhFe*#+PC9bCR~$IC;xZp$!Q3%w>;Q zn5#&U0Ez}C;}Xb-l`*!d5fwBR?)uWeJ`_}p_V*yj1P%?j#|R7(?kX3R8z+mXd?4xz zZd16XF(xy{!4GN>B+8jR;kc3z9h^p1+R^=NP9Y*t2<+cd2-NdO(wAGG(S1AYF#x+avq}{ir4^Kb%*uX=~LH z9OBY_F=EEx-H9WlE9BSaha&Or^Evgp^vdhd5NC_z*QKJx6$)D2N{R?c51kx=kiD7# z%>z1Y(DUU1o_b(-qbU?OoBtyjbo8VxyX(oukMsNMNbB?85OVg+*FpZMa|hnH@5{l~ z4{X*NfY>0u8$TcT_qAp7b~E;oy>Ud$I?uJz)AD^c3!ui3&WpI=2-h!da68t`%J3z| zvLZqu`9 zC(?j#7$JZ(AV4tS8-iw>aj%R1a1$dV3!G; z=5-B3K_WZE82gVyUd@9K&F|?XPE-|OBO)I16XMc!dkK6Eb-!jMcP%NOK%w{t1poO| zf1E|YsJUW^9#O%tfE-slM~R-r1Y7ET!_Czu8t`dnTKM)o)6PL zS1Jz8VuDXE_g}%AyyGrW1#H7f>mt&v49AZH>2lCZ@{2Gd3s(q>4ut6%%Mf17Eg~a$ zqy~#LI~a>OcJo>#F`fkfbL*y!KYxytPC%|@TpfIKQ7XU#l2C5OooR2Ss22#BAp*Xm zIP&=t!3ylI7<4QLcagUB{b~e&3h0K}s6Tc==#E!E-sRao4_Wl$2A#a?S-Jsx&CBHN zY+Ry~#EpzoXa?jZQd2srw?dwm@0*!`&W%kW24Z4p_3$H4$1%s13u5B2daVstFy7}#69@6SKKJHF3sPrN)d#9aB@svH`lFycC4+8gD_LBCx&e>~kbrjMrOA9;3t26{&(^D7-}Je2Ou-b3HD@|S?#y=kDW`3_SAWdK~5EhKJbD&_C= zlnIGHVv|Nk){OkQ|0QMKC;qR}w<}6a_7ctKo}yxnxTzZ6wu1%jOsg)l-x~DJc1Hlv z^pAgvL3^4u+wX4=zL;cSqZ)Ma7iF2b&TM@8z2~M zOT9$5p*UHS!84+?P>B*=8TGYACbR*W!kA=@q+ZlD>ri~16oa4d3pi{kVM>u#%97CV znyxyd&M5lQOa0}fE|j2DwD*KulM!m-SK@CKsACOpW+DsD;h&+zjVBDOLNw2s-85>Y z3~LVs;7zxlFoP`3!CHm4)KD|ri9v>(%=3*1-_rw>WT_lwu=<}g)b{;jaza1=sOmga z9N{YmSvZJH>|nXwgl3xQD>@kBZ6twkOE4@$(iKx2 zW|U$x3~(jlE%=M^=gZMH9Vc*%reI_OFLNYLekvxHJSyl~CWu-*9;y2UTT<_$vX;c_ zGC7EPiqZ=)!|6*LWm}-@m4MtORniqop&e}o781<@!Z?TE6N5&4xZcBqL+g zdzB1qbAMIk3qqd-zJbMS_d~&+O&Kj%YT5$&qI$4}ANKO+3o$>a-*-XS@O}vs1IoW| z@xC>av$bni7@uj)m(-^0itSK8*sQ|uekxIpbB!Vjl5*cN5+2Ed)SFQ>OIal;wx;ib zx3PF}w37F#_hXGBluUBW6csM9D-CdRRunfomvZ=NZF7sS;rp64`_3D<-31^S5yoo@?C4ckcf! zy~TUB?{qxeV9)VEeffF>bb6I_@hC-9JlT|#r)VfKs?qMNek@oXpVU%X^F~NpoO^r8 z;OaIB#JE6=cUpj^xK>)cOZu?Kv?N)s*XFI)6SGPyi}aQCOv*$R7ZMD00cA9kzU<9D zkZNXBlEEg1$(WUQ4ZE>7d0Y>TGY_w-HxCX!eJ9>GZRz_6A3r%?5<02fL0gz8`!5=i zHr<(7cMtXoh>n^w#1hGg!6mpjRGba=t*}TazGho`78oY0A&3azMJ5&HwIrI&OcL$L z!wC|S|EO$APj%3HJ8yUMv+&^McAuWeaLFdkjA{EeC)wP{nI8U<=z6Uhj?`~n9bg$U z70s|h-%S~|RGZp5pG~eV!h<+`2XxX!7C_NMHj5%Qi$MQ7Sleb1c(Vc>D=QD{f1_t% zrDkEFriEixa5NJ)b~7iT5$9uLVdZ6IWB)&-t@9Q<3{izwj8l|HoP$GBoP$%8mz9Hy zOH0%^fV=tVlR`c+(TU!RdhxC3O{yvAYLfPbL<- z5Qg9)m?AQ8GA8i$pxx+T{1~$6=!H2PI(+*p2h$_sK&o|IbUAc;+Lr(1=2zjv2;YCq zQ1|hlY`<)0y3R~Yc4-JAK-U%wcK|jRF((AYL71F`TKV@hH5LTy z-R8?PXy({KoSdL0C!{|^8tpW`-=o~|LzL|Z=q#{Wr@x>MF!Yjpy!NT8z5sh3?gv{GVnOFc)Sul)TO30q-jH=jDIH>ZNwYD{3u+pV8%bVM?}nHkiGS z-gGp6hPUeFw;$Qmb)Ne_ONfk)qcW*2^4d`=iE%tlHlv)WM|0aztwA!}@Kj&bIF1-B b|ABx)8n~q9LJ+~Tv2yUhQBq1MNy7aPX7MZ2 delta 11018 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