diff --git a/Project1/project_1_maggioni_claudio.pdf b/Project1/project_1_maggioni_claudio.pdf index d3825c0..bc86944 100644 Binary files a/Project1/project_1_maggioni_claudio.pdf and b/Project1/project_1_maggioni_claudio.pdf differ diff --git a/Project1/project_1_maggioni_claudio.tex b/Project1/project_1_maggioni_claudio.tex index 1d4bcbe..9bf06c0 100644 --- a/Project1/project_1_maggioni_claudio.tex +++ b/Project1/project_1_maggioni_claudio.tex @@ -1,10 +1,15 @@ \documentclass[unicode,11pt,a4paper,oneside,numbers=endperiod,openany]{scrartcl} \input{assignment.sty} +\usepackage{float} +\usepackage{subcaption} +\usepackage{graphicx} \usepackage{fancyvrb} -\begin{document} +\usepackage{tikz} +\begin{document} + \setassignment \setduedate{12.10.2022 (midnight)} @@ -13,8 +18,8 @@ Maggioni}{Discussed with: ---}{Solution for Project 1}{} \newline \assignmentpolicy -In this project you will practice memory access optimization, performance-oriented programming, and OpenMP parallelizaton -on the ICS Cluster . +In this project you will practice memory access optimization, +performance-oriented programming, and OpenMP parallelizaton on the ICS Cluster. \section{Explaining Memory Hierarchies \punkte{25}} @@ -92,13 +97,26 @@ index $2^{10}-1$, and finally index $2^{20}-1$. \subsection{Analyzing Benchmark Results} -The \texttt{membench.c} benchmark results for my personal laptop (Macbook Pro -2018 with a Core i7-8750H CPU) and the cluster are shown below respectively: +\begin{figure}[t] + \begin{subfigure}{0.5\textwidth} +\includegraphics[width=\textwidth]{generic_macos.pdf} + \caption{Personal laptop} + \label{fig:mem:laptop} + \end{subfigure} + \begin{subfigure}{0.5\textwidth} +\includegraphics[width=\textwidth]{generic_cluster.pdf} + \caption{Cluster} + \label{fig:mem:cluster} + \end{subfigure} + \caption{Results of the \texttt{membench.c} benchmark for both my personal + laptop (in Figure \ref{fig:mem:laptop}) and the cluster (in Figure + \ref{fig:mem:cluster}).} + \label{fig:mem} +\end{figure} -\begin{center} -\includegraphics[width=12cm]{generic_macos.pdf} -\includegraphics[width=12cm]{generic_cluster.pdf} -\end{center} +The \texttt{membench.c} benchmark results for my personal laptop (Macbook Pro +2018 with a Core i7-8750H CPU) and the cluster are shown in figure +\ref{fig:mem}. The memory access graph for the cluster's benchmark results shows that temporal locality is best for small array sizes and for small \texttt{stride} values. @@ -112,8 +130,104 @@ for the largest strides of each size series shown in the graph). \section{Optimize Square Matrix-Matrix Multiplication \punkte{60}} +The file \texttt{matmult/dgemm-blocked.c} contains a C implementation of the +blocked matrix multiplication algorithm presented in the project. Other than +implementing the pseudocode, my implementation: -\section{Quality of the Report \punkte{15}} +\begin{figure}[t] +\begin{center} +\begin{tikzpicture} + \fill[blue!60!white] (4,0) rectangle (5,-2); + \fill[blue!40!white] (4,-2) rectangle (5,-4); + \fill[blue!60!white] (0,-4) rectangle (2,-5); + \fill[blue!40!white] (2,-4) rectangle (4,-5); + \fill[green!40!white] (4,-4) rectangle (5,-5); + \draw[step=1,gray,very thin] (0,0) grid (5,-5); + \draw[step=2] (0,0) grid (5,-5); + \draw[step=5] (0,0) grid (5,-5); +\end{tikzpicture} +\end{center} + \caption{Result of the block division process of a square matrix of size 5 + using a block size of 2. The 2-by-1 and 1-by-2 rectangular remainders are + shown in blue and the square matrix of remainder size (i.e. 1) is shown in + green.} + \label{fig:matrix} +\end{figure} +\begin{itemize} + \item Handles the edge cases related to the ``remainders'' in the matrix + block division, i.e. when the division between the size of the matrix + and the block size yields a remainder. Assuming only squared matrices + are multiplied through the algorithm (as in the test suite provided) the + block division could yield rectangular matrix blocks located in the last + rows and columns of each matrix, and the bottom-right corner of the + matrix will be contained in a square matrix block of the size of the + remainder. The result of this process is shown in Figure + \ref{fig:matrix}; + \item Converts matrix A into row major format. As shown in Figure + \ref{fig:iter}, by having A in row major format and B in column major + format, iterations across matrix block in the inner most loop of the + algorithm (the one calling \textit{naivemm}) cache hits are maximised by + achieving space locality between the blocks used; + \item Caches the result of each innermost iteration into a temporary matrix + of block size before storing it into matrix C. This achieves better + space locality when \textit{naivemm} needs to store values in matrix C. + The block size temporary matrix has virtually no stride and thus cache + hits are maximised. The copy operation is implemented with bulk copy + \texttt{memcpy} calls. +\end{itemize} + +\begin{figure}[t] +\begin{center} +\begin{tikzpicture} + \node[align=center] at (2.5,0.5) {Matrix A}; + \fill[orange!10!white] (0,0) rectangle (2,-2); + \fill[orange!25!white] (2,0) rectangle (4,-2); + \fill[orange!40!white] (4,0) rectangle (5,-2); + + \draw[step=1,gray,very thin] (0,0) grid (5,-5); + \draw[step=2,black,thick] (0,0) grid (5,-5); + \draw[step=5,black,thick] (0,0) grid (5,-5); + + \draw[-to,step=1,red,very thick] (0.5,-0.5) -- (4.5,-0.5); + \draw[-to,step=1,red,very thick] (0.5,-1.5) -- (4.5,-1.5); + \draw[-to,step=1,red,very thick] (0.5,-2.5) -- (4.5,-2.5); + \draw[-to,step=1,red,very thick] (0.5,-3.5) -- (4.5,-3.5); + \draw[-to,step=1,red,very thick] (0.5,-4.5) -- (4.5,-4.5); + + \node[align=center] at (8.5,0.5) {Matrix B}; + \fill[orange!10!white] (6,0) rectangle (8,-2); + \fill[orange!25!white] (6,-2) rectangle (8,-4); + \fill[orange!40!white] (6,-4) rectangle (8,-5); + + \draw[step=1,gray,very thin] (6,0) grid (11,-5); + \draw[step=2,black,thick] (6,0) grid (11,-5); + \draw[step=5,black,thick] (6,0) grid (11,-5); + \draw[black,thick] (11,0) -- (11,-5); + + \draw[-to,step=1,red,very thick] (6.5,-0.5) -- (6.5,-4.5); + \draw[-to,step=1,red,very thick] (7.5,-0.5) -- (7.5,-4.5); + \draw[-to,step=1,red,very thick] (8.5,-0.5) -- (8.5,-4.5); + \draw[-to,step=1,red,very thick] (9.5,-0.5) -- (9.5,-4.5); + \draw[-to,step=1,red,very thick] (10.5,-0.5) -- (10.5,-4.5); +\end{tikzpicture} +\end{center} + \caption{Inner most loop iteration of the blocked GEMM algorithm across + matrices A and B. The red lines represent the ``majorness'' of each matrix + (A is converted by the algorithm in row-major form, while B is given and + used in column-major form). The shades of orange represent the blocks used + in each iteration.} + \label{fig:iter} +\end{figure} + +The results of the matrix multiplication benchmark for the naive, blocked, and +BLAS implementations are shown in Figure \ref{fig:bench}. + +\begin{figure}[t] + \includegraphics[width=\textwidth]{timing.pdf} + \caption{Results of the matrix multiplication benchmark for the naive, + blocked, and BLAS implementations} + \label{fig:bench} +\end{figure} \end{document} diff --git a/Project1/timing.pdf b/Project1/timing.pdf new file mode 100644 index 0000000..ffcc0b6 --- /dev/null +++ b/Project1/timing.pdf @@ -0,0 +1,1059 @@ +%PDF-1.3 +%âãÏÓ +2 0 obj +<< +/Length 12476 +>> +stream +0 0 0 RG +0 J 0 j 0.125 w 3.8 M [1 2 ]0 d +/GS1 gs +1 i +509.2 143.8 m +509.2 744.7 l +S +0.5 w []0 d +509.2 143.8 m +509.2 150.1 l +509.2 744.7 m +509.2 738.4 l +509.2 135.4 m +S +BT +/TT2 1 Tf +0 14 -14 0 513.87 108.152 Tm +0 0 0 rg +0 Tc +0 Tw +( 100)Tj +ET +513.87 135.4 m +467.3 143.8 m +467.3 146.9 l +467.3 744.7 m +467.3 741.6 l +442.9 143.8 m +442.9 146.9 l +442.9 744.7 m +442.9 741.6 l +425.5 143.8 m +425.5 146.9 l +425.5 744.7 m +425.5 741.6 l +412 143.8 m +412 146.9 l +412 744.7 m +412 741.6 l +401 143.8 m +401 146.9 l +401 744.7 m +401 741.6 l +391.7 143.8 m +391.7 146.9 l +391.7 744.7 m +391.7 741.6 l +383.6 143.8 m +383.6 146.9 l +383.6 744.7 m +383.6 741.6 l +376.5 143.8 m +376.5 146.9 l +376.5 744.7 m +376.5 741.6 l +S +0.125 w [1 2 ]0 d +370.2 143.8 m +370.2 744.7 l +S +0.5 w []0 d +370.2 143.8 m +370.2 150.1 l +370.2 744.7 m +370.2 738.4 l +370.2 135.4 m +S +BT +0 14 -14 0 374.87 100.3658 Tm +( 1000)Tj +ET +374.87 135.4 m +328.3 143.8 m +328.3 146.9 l +328.3 744.7 m +328.3 741.6 l +303.8 143.8 m +303.8 146.9 l +303.8 744.7 m +303.8 741.6 l +286.5 143.8 m +286.5 146.9 l +286.5 744.7 m +286.5 741.6 l +273 143.8 m +273 146.9 l +273 744.7 m +273 741.6 l +262 143.8 m +262 146.9 l +262 744.7 m +262 741.6 l +252.7 143.8 m +252.7 146.9 l +252.7 744.7 m +252.7 741.6 l +244.6 143.8 m +244.6 146.9 l +244.6 744.7 m +244.6 741.6 l +237.5 143.8 m +237.5 146.9 l +237.5 744.7 m +237.5 741.6 l +S +0.125 w [1 2 ]0 d +231.1 143.8 m +231.1 744.7 l +S +0.5 w []0 d +231.1 143.8 m +231.1 150.1 l +231.1 744.7 m +231.1 738.4 l +231.1 135.4 m +S +BT +0 14 -14 0 235.77 92.5797 Tm +( 10000)Tj +ET +235.77 135.4 m +189.3 143.8 m +189.3 146.9 l +189.3 744.7 m +189.3 741.6 l +164.8 143.8 m +164.8 146.9 l +164.8 744.7 m +164.8 741.6 l +147.4 143.8 m +147.4 146.9 l +147.4 744.7 m +147.4 741.6 l +134 143.8 m +134 146.9 l +134 744.7 m +134 741.6 l +122.9 143.8 m +122.9 146.9 l +122.9 744.7 m +122.9 741.6 l +113.6 143.8 m +113.6 146.9 l +113.6 744.7 m +113.6 741.6 l +105.6 143.8 m +105.6 146.9 l +105.6 744.7 m +105.6 741.6 l +98.5 143.8 m +98.5 146.9 l +98.5 744.7 m +98.5 741.6 l +S +0.125 w [1 2 ]0 d +92.1 143.8 m +92.1 744.7 l +S +0.5 w []0 d +92.1 143.8 m +92.1 150.1 l +92.1 744.7 m +92.1 738.4 l +92.1 135.4 m +S +BT +0 14 -14 0 96.77 84.7936 Tm +( 100000)Tj +ET +96.77 135.4 m +S +0.125 w [1 2 ]0 d +509.2 143.8 m +92.1 143.8 l +S +0.5 w []0 d +509.2 143.8 m +502.9 143.8 l +92.1 143.8 m +98.4 143.8 l +523.2 143.8 m +S +BT +0 14 -14 0 527.87 137.9621 Tm +( 0)Tj +ET +527.87 149.638 m +S +0.125 w [1 2 ]0 d +509.2 218.9 m +92.1 218.9 l +S +0.5 w []0 d +509.2 218.9 m +502.9 218.9 l +92.1 218.9 m +98.4 218.9 l +523.2 218.9 m +S +BT +0 14 -14 0 527.87 205.276 Tm +( 100)Tj +ET +527.87 232.524 m +S +0.125 w [1 2 ]0 d +509.2 294 m +92.1 294 l +S +0.5 w []0 d +509.2 294 m +502.9 294 l +92.1 294 m +98.4 294 l +523.2 294 m +S +BT +0 14 -14 0 527.87 280.376 Tm +( 200)Tj +ET +527.87 307.624 m +S +0.125 w [1 2 ]0 d +509.2 369.1 m +92.1 369.1 l +S +0.5 w []0 d +509.2 369.1 m +502.9 369.1 l +92.1 369.1 m +98.4 369.1 l +523.2 369.1 m +S +BT +0 14 -14 0 527.87 355.476 Tm +( 300)Tj +ET +527.87 382.724 m +S +0.125 w [1 2 ]0 d +509.2 444.3 m +92.1 444.3 l +S +0.5 w []0 d +509.2 444.3 m +502.9 444.3 l +92.1 444.3 m +98.4 444.3 l +523.2 444.3 m +S +BT +0 14 -14 0 527.87 430.676 Tm +( 400)Tj +ET +527.87 457.924 m +S +0.125 w [1 2 ]0 d +509.2 519.4 m +92.1 519.4 l +S +0.5 w []0 d +509.2 519.4 m +502.9 519.4 l +92.1 519.4 m +98.4 519.4 l +523.2 519.4 m +S +BT +0 14 -14 0 527.87 505.776 Tm +( 500)Tj +ET +527.87 533.024 m +S +0.125 w [1 2 ]0 d +509.2 594.5 m +140.4 594.5 l +98.4 594.5 m +92.1 594.5 l +S +0.5 w []0 d +509.2 594.5 m +502.9 594.5 l +92.1 594.5 m +98.4 594.5 l +523.2 594.5 m +S +BT +0 14 -14 0 527.87 580.876 Tm +( 600)Tj +ET +527.87 608.124 m +S +0.125 w [1 2 ]0 d +509.2 669.6 m +140.4 669.6 l +98.4 669.6 m +92.1 669.6 l +S +0.5 w []0 d +509.2 669.6 m +502.9 669.6 l +92.1 669.6 m +98.4 669.6 l +523.2 669.6 m +S +BT +0 14 -14 0 527.87 655.976 Tm +( 700)Tj +ET +527.87 683.224 m +S +0.125 w [1 2 ]0 d +509.2 744.7 m +92.1 744.7 l +S +0.5 w []0 d +509.2 744.7 m +502.9 744.7 l +92.1 744.7 m +98.4 744.7 l +523.2 744.7 m +S +BT +0 14 -14 0 527.87 731.076 Tm +( 800)Tj +ET +527.87 758.324 m +S +1 w +92.1 143.8 417.1 600.9 re +S +0.5 w +300.7 63.3 m +S +BT +-14 0 0 -14 371.886 67.97 Tm +(Performance \(GFlop/s\))Tj +ET +300.7 63.3 m +544.2 444.2 m +S +BT +0 14 -14 0 548.87 399.0897 Tm +(Matrix size \(N\))Tj +ET +548.87 489.31 m +71.1 444.2 m +S +BT +0 14 -14 0 75.77 171.5008 Tm +(NxN matrix-matrix-multiplication on 4-Core Intel\(R\) Xeon\(R\) CPU E3-1585L v5 )Tj +35.0107 0 TD +(3.00GHz)Tj +ET +75.77 716.899 m +105.4 679.6 m +S +BT +0 14 -14 0 110.07 593.2348 Tm +(Naive dgemm)Tj +ET +110.07 679.6 m +S +0.58 0 0.83 RG +105.4 688 m +105.4 727.9 l +317.5 167.1 m +317.3 167.8 l +328.4 215.9 l +328.4 216.7 l +330.7 239.2 l +337 239.9 l +331.3 240.7 l +336.8 287.3 l +338.3 288 l +337.6 315.8 l +337.4 335.3 l +385.4 336.1 l +337.1 336.8 l +338 383.4 l +349.2 384.2 l +336.7 384.9 l +337 457 l +337 503.6 l +338.9 504.3 l +336.9 527.6 l +384.9 528.4 l +337.6 623.8 l +394.9 624.5 l +338.5 719.9 l +384.2 720.7 l +338.2 721.4 l +320.65 167.1 m +314.35 167.1 l +317.5 163.95 m +317.5 170.25 l +320.45 167.8 m +314.15 167.8 l +317.3 164.65 m +317.3 170.95 l +331.55 215.9 m +325.25 215.9 l +328.4 212.75 m +328.4 219.05 l +331.55 216.7 m +325.25 216.7 l +328.4 213.55 m +328.4 219.85 l +333.85 239.2 m +327.55 239.2 l +330.7 236.05 m +330.7 242.35 l +340.15 239.9 m +333.85 239.9 l +337 236.75 m +337 243.05 l +334.45 240.7 m +328.15 240.7 l +331.3 237.55 m +331.3 243.85 l +339.95 287.3 m +333.65 287.3 l +336.8 284.15 m +336.8 290.45 l +341.45 288 m +335.15 288 l +338.3 284.85 m +338.3 291.15 l +340.75 315.8 m +334.45 315.8 l +337.6 312.65 m +337.6 318.95 l +340.55 335.3 m +334.25 335.3 l +337.4 332.15 m +337.4 338.45 l +388.55 336.1 m +382.25 336.1 l +385.4 332.95 m +385.4 339.25 l +340.25 336.8 m +333.95 336.8 l +337.1 333.65 m +337.1 339.95 l +341.15 383.4 m +334.85 383.4 l +338 380.25 m +338 386.55 l +352.35 384.2 m +346.05 384.2 l +349.2 381.05 m +349.2 387.35 l +339.85 384.9 m +333.55 384.9 l +336.7 381.75 m +336.7 388.05 l +340.15 457 m +333.85 457 l +337 453.85 m +337 460.15 l +340.15 503.6 m +333.85 503.6 l +337 500.45 m +337 506.75 l +342.05 504.3 m +335.75 504.3 l +338.9 501.15 m +338.9 507.45 l +340.05 527.6 m +333.75 527.6 l +336.9 524.45 m +336.9 530.75 l +388.05 528.4 m +381.75 528.4 l +384.9 525.25 m +384.9 531.55 l +340.75 623.8 m +334.45 623.8 l +337.6 620.65 m +337.6 626.95 l +398.05 624.5 m +391.75 624.5 l +394.9 621.35 m +394.9 627.65 l +341.65 719.9 m +335.35 719.9 l +338.5 716.75 m +338.5 723.05 l +387.35 720.7 m +381.05 720.7 l +384.2 717.55 m +384.2 723.85 l +S +341.35 721.4 m +335.05 721.4 l +338.2 718.25 m +338.2 724.55 l +108.55 707.9 m +102.25 707.9 l +105.4 704.75 m +105.4 711.05 l +S +0 0 0 RG +119.4 679.6 m +S +BT +0 14 -14 0 124.07 579.2211 Tm +(Blocked dgemm)Tj +ET +124.07 679.6 m +S +0 0.62 0.45 RG +119.4 688 m +119.4 727.9 l +325 167.1 m +322.9 167.8 l +319.2 215.9 l +319.3 216.7 l +319.1 239.2 l +320.3 239.9 l +319 240.7 l +318.7 287.3 l +318.7 288 l +318.5 315.8 l +319 335.3 l +319.7 336.1 l +319.1 336.8 l +318.3 383.4 l +318.2 384.2 l +318.2 384.9 l +317.9 457 l +321.7 503.6 l +322.9 504.3 l +321.9 527.6 l +320.3 528.4 l +320.1 623.8 l +320.8 624.5 l +319.2 719.9 l +318.2 720.7 l +319.3 721.4 l +321.85 163.95 m +328.15 170.25 l +328.15 163.95 m +321.85 170.25 l +319.75 164.65 m +326.05 170.95 l +326.05 164.65 m +319.75 170.95 l +316.05 212.75 m +322.35 219.05 l +322.35 212.75 m +316.05 219.05 l +316.15 213.55 m +322.45 219.85 l +322.45 213.55 m +316.15 219.85 l +315.95 236.05 m +322.25 242.35 l +322.25 236.05 m +315.95 242.35 l +317.15 236.75 m +323.45 243.05 l +323.45 236.75 m +317.15 243.05 l +315.85 237.55 m +322.15 243.85 l +322.15 237.55 m +315.85 243.85 l +315.55 284.15 m +321.85 290.45 l +321.85 284.15 m +315.55 290.45 l +315.55 284.85 m +321.85 291.15 l +321.85 284.85 m +315.55 291.15 l +315.35 312.65 m +321.65 318.95 l +321.65 312.65 m +315.35 318.95 l +315.85 332.15 m +322.15 338.45 l +322.15 332.15 m +315.85 338.45 l +316.55 332.95 m +322.85 339.25 l +322.85 332.95 m +316.55 339.25 l +315.95 333.65 m +322.25 339.95 l +322.25 333.65 m +315.95 339.95 l +315.15 380.25 m +321.45 386.55 l +321.45 380.25 m +315.15 386.55 l +315.05 381.05 m +321.35 387.35 l +321.35 381.05 m +315.05 387.35 l +315.05 381.75 m +321.35 388.05 l +321.35 381.75 m +315.05 388.05 l +314.75 453.85 m +321.05 460.15 l +321.05 453.85 m +314.75 460.15 l +318.55 500.45 m +324.85 506.75 l +324.85 500.45 m +318.55 506.75 l +319.75 501.15 m +326.05 507.45 l +326.05 501.15 m +319.75 507.45 l +318.75 524.45 m +325.05 530.75 l +325.05 524.45 m +318.75 530.75 l +317.15 525.25 m +323.45 531.55 l +323.45 525.25 m +317.15 531.55 l +316.95 620.65 m +323.25 626.95 l +323.25 620.65 m +316.95 626.95 l +317.65 621.35 m +323.95 627.65 l +323.95 621.35 m +317.65 627.65 l +316.05 716.75 m +322.35 723.05 l +322.35 716.75 m +316.05 723.05 l +315.05 717.55 m +321.35 723.85 l +321.35 717.55 m +315.05 723.85 l +S +316.15 718.25 m +322.45 724.55 l +322.45 718.25 m +316.15 724.55 l +116.25 704.75 m +122.55 711.05 l +122.55 704.75 m +116.25 711.05 l +S +0 0 0 RG +133.4 679.6 m +S +BT +0 14 -14 0 138.07 570.6694 Tm +(MKL blas dgemm)Tj +ET +138.07 679.6 m +S +0.34 0.71 0.91 RG +133.4 688 m +133.4 727.9 l +179.7 167.1 m +168.5 167.8 l +159.9 215.9 l +165.2 216.7 l +167.8 239.2 l +159.7 239.9 l +162.4 240.7 l +160.4 287.3 l +159.4 288 l +156.6 315.8 l +158.2 335.3 l +158.2 336.1 l +157.8 336.8 l +156.6 383.4 l +153.1 384.2 l +154.7 384.9 l +153.6 457 l +159.1 503.6 l +151.7 504.3 l +157 527.6 l +152.9 528.4 l +155.1 623.8 l +152.9 624.5 l +154.3 719.9 l +160.7 720.7 l +159 721.4 l +182.85 167.1 m +176.55 167.1 l +179.7 163.95 m +179.7 170.25 l +176.55 163.95 m +182.85 170.25 l +182.85 163.95 m +176.55 170.25 l +171.65 167.8 m +165.35 167.8 l +168.5 164.65 m +168.5 170.95 l +165.35 164.65 m +171.65 170.95 l +171.65 164.65 m +165.35 170.95 l +163.05 215.9 m +156.75 215.9 l +159.9 212.75 m +159.9 219.05 l +156.75 212.75 m +163.05 219.05 l +163.05 212.75 m +156.75 219.05 l +168.35 216.7 m +162.05 216.7 l +165.2 213.55 m +165.2 219.85 l +162.05 213.55 m +168.35 219.85 l +168.35 213.55 m +162.05 219.85 l +170.95 239.2 m +164.65 239.2 l +167.8 236.05 m +167.8 242.35 l +164.65 236.05 m +170.95 242.35 l +170.95 236.05 m +164.65 242.35 l +162.85 239.9 m +156.55 239.9 l +159.7 236.75 m +159.7 243.05 l +156.55 236.75 m +162.85 243.05 l +162.85 236.75 m +156.55 243.05 l +165.55 240.7 m +159.25 240.7 l +162.4 237.55 m +162.4 243.85 l +159.25 237.55 m +165.55 243.85 l +165.55 237.55 m +159.25 243.85 l +163.55 287.3 m +157.25 287.3 l +160.4 284.15 m +160.4 290.45 l +157.25 284.15 m +163.55 290.45 l +163.55 284.15 m +157.25 290.45 l +162.55 288 m +156.25 288 l +159.4 284.85 m +159.4 291.15 l +156.25 284.85 m +162.55 291.15 l +162.55 284.85 m +156.25 291.15 l +159.75 315.8 m +153.45 315.8 l +156.6 312.65 m +156.6 318.95 l +153.45 312.65 m +159.75 318.95 l +159.75 312.65 m +153.45 318.95 l +161.35 335.3 m +155.05 335.3 l +158.2 332.15 m +158.2 338.45 l +155.05 332.15 m +161.35 338.45 l +161.35 332.15 m +155.05 338.45 l +161.35 336.1 m +155.05 336.1 l +158.2 332.95 m +158.2 339.25 l +155.05 332.95 m +161.35 339.25 l +161.35 332.95 m +155.05 339.25 l +160.95 336.8 m +154.65 336.8 l +157.8 333.65 m +157.8 339.95 l +S +154.65 333.65 m +160.95 339.95 l +160.95 333.65 m +154.65 339.95 l +159.75 383.4 m +153.45 383.4 l +156.6 380.25 m +156.6 386.55 l +153.45 380.25 m +159.75 386.55 l +159.75 380.25 m +153.45 386.55 l +156.25 384.2 m +149.95 384.2 l +153.1 381.05 m +153.1 387.35 l +149.95 381.05 m +156.25 387.35 l +156.25 381.05 m +149.95 387.35 l +157.85 384.9 m +151.55 384.9 l +154.7 381.75 m +154.7 388.05 l +151.55 381.75 m +157.85 388.05 l +157.85 381.75 m +151.55 388.05 l +156.75 457 m +150.45 457 l +153.6 453.85 m +153.6 460.15 l +150.45 453.85 m +156.75 460.15 l +156.75 453.85 m +150.45 460.15 l +162.25 503.6 m +155.95 503.6 l +159.1 500.45 m +159.1 506.75 l +155.95 500.45 m +162.25 506.75 l +162.25 500.45 m +155.95 506.75 l +154.85 504.3 m +148.55 504.3 l +151.7 501.15 m +151.7 507.45 l +148.55 501.15 m +154.85 507.45 l +154.85 501.15 m +148.55 507.45 l +160.15 527.6 m +153.85 527.6 l +157 524.45 m +157 530.75 l +153.85 524.45 m +160.15 530.75 l +160.15 524.45 m +153.85 530.75 l +156.05 528.4 m +149.75 528.4 l +152.9 525.25 m +152.9 531.55 l +149.75 525.25 m +156.05 531.55 l +156.05 525.25 m +149.75 531.55 l +158.25 623.8 m +151.95 623.8 l +155.1 620.65 m +155.1 626.95 l +151.95 620.65 m +158.25 626.95 l +158.25 620.65 m +151.95 626.95 l +156.05 624.5 m +149.75 624.5 l +152.9 621.35 m +152.9 627.65 l +149.75 621.35 m +156.05 627.65 l +156.05 621.35 m +149.75 627.65 l +157.45 719.9 m +151.15 719.9 l +154.3 716.75 m +154.3 723.05 l +151.15 716.75 m +157.45 723.05 l +157.45 716.75 m +151.15 723.05 l +163.85 720.7 m +157.55 720.7 l +160.7 717.55 m +160.7 723.85 l +157.55 717.55 m +163.85 723.85 l +163.85 717.55 m +157.55 723.85 l +162.15 721.4 m +155.85 721.4 l +159 718.25 m +159 724.55 l +155.85 718.25 m +162.15 724.55 l +162.15 718.25 m +155.85 724.55 l +136.55 707.9 m +130.25 707.9 l +133.4 704.75 m +133.4 711.05 l +130.25 704.75 m +136.55 711.05 l +136.55 704.75 m +130.25 711.05 l +S +0 0 0 RG +1 w +92.1 143.8 417.1 600.9 re +S +endstream +endobj +3 0 obj +<< +/ProcSet [/PDF /Text ] +/Font << +/TT2 4 0 R +>> +/ExtGState << +/GS1 5 0 R +>> +>> +endobj +5 0 obj +<< +/Type /ExtGState +/SA false +/SM 0.02 +/OP false +/op false +/OPM 1 +/BG2 /Default +/UCR2 /Default +/HT /Default +/TR2 /Default +>> +endobj +7 0 obj +<< +/Type /FontDescriptor +/Ascent 770 +/CapHeight 718 +/Descent -229 +/Flags 32 +/FontBBox [-166 -225 1000 931] +/FontName /Helvetica +/ItalicAngle 0 +/StemV 88 +/XHeight 523 +/StemH 88 +>> +endobj +4 0 obj +<< +/Type /Font +/Subtype /TrueType +/FirstChar 32 +/LastChar 122 +/Widths [278 0 0 0 0 0 0 0 333 333 0 0 0 333 278 278 +556 556 556 556 556 556 556 556 556 0 0 0 0 0 0 0 +0 0 667 722 0 667 611 778 722 278 0 667 556 833 722 0 +667 0 722 0 0 722 0 0 667 0 0 0 0 0 0 0 +0 556 556 500 556 556 278 556 0 222 0 500 222 833 556 556 +556 0 333 500 278 556 500 0 500 0 500 ] +/Encoding /WinAnsiEncoding +/BaseFont /Helvetica +/FontDescriptor 7 0 R +>> +endobj +1 0 obj +<< +/Type /Page +/Parent 6 0 R +/Resources 3 0 R +/Contents 2 0 R +>> +endobj +8 0 obj +<< +/S /D +>> +endobj +9 0 obj +<< +/Nums [0 8 0 R ] +>> +endobj +6 0 obj +<< +/Type /Pages +/Kids [1 0 R] +/Count 1 +/Rotate 90 +/MediaBox [0 0 612 792] +>> +endobj +10 0 obj +<< +/CreationDate (D:20221005095851+02'00') +/ModDate (D:20221005095851+02'00') +/Producer (PSNormalizer.framework) +>> +endobj +11 0 obj +<< +/Type /Catalog +/Pages 6 0 R +/PageLabels 9 0 R +>> +endobj +xref +0 12 +0000000000 65535 f +0000013424 00000 n +0000000016 00000 n +0000012545 00000 n +0000012974 00000 n +0000012640 00000 n +0000013569 00000 n +0000012780 00000 n +0000013504 00000 n +0000013531 00000 n +0000013661 00000 n +0000013793 00000 n +trailer +<< +/Size 12 +/Root 11 0 R +/Info 10 0 R +/ID [<963afae776c682a40505ca8923ba08a0><963afae776c682a40505ca8923ba08a0>] +>> +startxref +13861 +%%EOF +1 0 obj +<< /Resources 3 0 R /Type /Page /Contents 2 0 R /Rotate 90 /Parent 6 0 R >> +endobj +10 0 obj +<< /ModDate (D:20221005075912Z00'00') /Producer (macOS Version 12.5.1 \(Build 21G83\) Quartz PDFContext, AppendMode 1.1) +/CreationDate (D:20221005075851Z00'00') >> +endobj +xref +0 2 +0000000000 65535 f +0000014257 00000 n +10 1 +0000014348 00000 n +trailer +<< /ID [<963AFAE776C682A40505CA8923BA08A0> ] /Root 11 0 R /Size 12 /Prev 13861 /Info 10 0 R >> +startxref +14528 +%%EOF