diff options
Diffstat (limited to 'numpy/doc')
52 files changed, 0 insertions, 80126 deletions
diff --git a/numpy/doc/numpybook/Figures/contiguous.eps b/numpy/doc/numpybook/Figures/contiguous.eps deleted file mode 100644 index 006babe7a..000000000 --- a/numpy/doc/numpybook/Figures/contiguous.eps +++ /dev/null @@ -1,374 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: contiguous.fig -%%Creator: fig2dev Version 3.2 Patchlevel 4 -%%CreationDate: Thu Aug 18 12:08:29 2005 -%%For: oliphant@oliphant (Travis Oliphant) -%%BoundingBox: 0 0 434 215 -%%Magnification: 1.0000 -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save -newpath 0 215 moveto 0 0 lineto 434 0 lineto 434 215 lineto closepath clip newpath --197.3 306.7 translate -1 -1 scale - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06000 0.06000 sc -% -% Fig objects follow -% -% -% here starts figure with depth 50 -% Polyline -30.000 slw -n 5700 1575 m 6900 1575 l 6900 2175 l 5700 2175 l - cp gs col0 s gr -% Polyline -n 7500 1575 m 8700 1575 l 8700 2175 l 7500 2175 l - cp gs col0 s gr -% Polyline -7.500 slw -n 3300 1575 m 10500 1575 l 10500 2175 l 3300 2175 l - cp gs col0 s gr -% Polyline -n 3900 1575 m - 3900 2175 l gs col0 s gr -% Polyline -n 4500 1575 m - 4500 2175 l gs col0 s gr -% Polyline -n 5100 1575 m - 5100 2175 l gs col0 s gr -% Polyline -n 5700 1575 m - 5700 2175 l gs col0 s gr -% Polyline -n 6300 1575 m - 6300 2175 l gs col0 s gr -% Polyline -n 6900 1575 m - 6900 2175 l gs col0 s gr -% Polyline -n 7500 1575 m - 7500 2175 l gs col0 s gr -% Polyline -n 8100 1575 m - 8100 2175 l gs col0 s gr -% Polyline -n 8700 1575 m - 8700 2175 l gs col0 s gr -% Polyline -n 9300 1575 m - 9300 2175 l gs col0 s gr -% Polyline -n 9900 1575 m - 9900 2175 l gs col0 s gr -/Helvetica-Bold ff 180.00 scf sf -10125 1950 m -gs 1 -1 sc (11) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -9525 1950 m -gs 1 -1 sc (10) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -9000 1950 m -gs 1 -1 sc (9) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -8400 1950 m -gs 1 -1 sc (8) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -7800 1950 m -gs 1 -1 sc (7) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -7200 1950 m -gs 1 -1 sc (6) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -6600 1950 m -gs 1 -1 sc (5) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -6000 1950 m -gs 1 -1 sc (4) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -5400 1950 m -gs 1 -1 sc (3) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -4800 1950 m -gs 1 -1 sc (2) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -4200 1950 m -gs 1 -1 sc (1) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -3600 1950 m -gs 1 -1 sc (0) col0 sh gr -% Polyline -30.000 slw -n 4200 3300 m 5400 3300 l 5400 4500 l 4200 4500 l - cp gs col0 s gr -% Polyline -7.500 slw -n 4200 2700 m - 4200 5100 l gs col0 s gr -% Polyline -n 4800 2700 m - 4800 5100 l gs col0 s gr -% Polyline -n 3600 3300 m - 5400 3300 l gs col0 s gr -% Polyline -n 3600 3900 m - 5400 3900 l gs col0 s gr -% Polyline -n 3600 2700 m 5400 2700 l 5400 5100 l 3600 5100 l - cp gs col0 s gr -% Polyline -n 3600 4500 m - 5400 4500 l gs col0 s gr -/Helvetica-Bold ff 240.00 scf sf -5625 3975 m -gs 1 -1 sc (C) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -5175 4725 m -gs 1 -1 sc (11) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -4575 4725 m -gs 1 -1 sc (10) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -4050 4725 m -gs 1 -1 sc (9) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -5250 4125 m -gs 1 -1 sc (8) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -4650 4125 m -gs 1 -1 sc (7) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -4050 4125 m -gs 1 -1 sc (6) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -5250 3525 m -gs 1 -1 sc (5) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -4650 3525 m -gs 1 -1 sc (4) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -4050 3525 m -gs 1 -1 sc (3) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -5250 2925 m -gs 1 -1 sc (2) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -4650 2925 m -gs 1 -1 sc (1) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -4050 2925 m -gs 1 -1 sc (0) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -3675 3225 m -gs 1 -1 sc (\(0,0\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -4875 3225 m -gs 1 -1 sc (\(0,2\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -3675 3825 m -gs 1 -1 sc (\(1,0\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -4875 3825 m -gs 1 -1 sc (\(1,2\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -4275 3825 m -gs 1 -1 sc (\(1,1\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -4875 4425 m -gs 1 -1 sc (\(2,2\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -4875 5025 m -gs 1 -1 sc (\(3,2\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -4275 3225 m -gs 1 -1 sc (\(0,1\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -3675 4425 m -gs 1 -1 sc (\(2,0\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -3675 5025 m -gs 1 -1 sc (\(3,0\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -4275 4425 m -gs 1 -1 sc (\(2,1\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -4275 5025 m -gs 1 -1 sc (\(3,1\)) col0 sh gr -% Polyline -30.000 slw -n 7650 3375 m 8850 3375 l 8850 4575 l 7650 4575 l - cp gs col0 s gr -% Polyline -7.500 slw -n 7050 3975 m - 9450 3975 l gs col0 s gr -% Polyline -n 7050 3375 m - 9450 3375 l gs col0 s gr -% Polyline -n 7650 4575 m - 7650 2775 l gs col0 s gr -% Polyline -n 8250 4575 m - 8250 2775 l gs col0 s gr -% Polyline -n 8850 4575 m - 8850 2775 l gs col0 s gr -% Polyline -n 7050 4575 m 7050 2775 l 9450 2775 l 9450 4575 l - cp gs col0 s gr -/Helvetica-Bold ff 240.00 scf sf -9600 3750 m -gs 1 -1 sc (Fortran) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -9225 4200 m -gs 1 -1 sc (11) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -9225 3600 m -gs 1 -1 sc (10) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -9300 3000 m -gs 1 -1 sc (9) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -8625 4200 m -gs 1 -1 sc (8) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -8625 3600 m -gs 1 -1 sc (7) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -8625 3000 m -gs 1 -1 sc (6) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -8100 4200 m -gs 1 -1 sc (5) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -8100 3600 m -gs 1 -1 sc (4) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -8100 3000 m -gs 1 -1 sc (3) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -7500 4200 m -gs 1 -1 sc (2) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -7500 3600 m -gs 1 -1 sc (1) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -7500 3000 m -gs 1 -1 sc (0) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -7125 3300 m -gs 1 -1 sc (\(0,0\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -7725 3300 m -gs 1 -1 sc (\(0,1\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -8325 3300 m -gs 1 -1 sc (\(0,2\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -7125 3900 m -gs 1 -1 sc (\(1,0\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -7725 3900 m -gs 1 -1 sc (\(1,1\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -8325 3900 m -gs 1 -1 sc (\(1,2\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -7125 4500 m -gs 1 -1 sc (\(2,0\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -7725 4500 m -gs 1 -1 sc (\(2,1\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -8325 4500 m -gs 1 -1 sc (\(2,2\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -8925 3900 m -gs 1 -1 sc (\(1,3\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -8925 4500 m -gs 1 -1 sc (\(2,3\)) col0 sh gr -/Helvetica-Bold ff 180.00 scf sf -8925 3300 m -gs 1 -1 sc (\(0,3\)) col0 sh gr -% here ends figure; -$F2psEnd -rs -showpage diff --git a/numpy/doc/numpybook/Figures/contiguous.fig b/numpy/doc/numpybook/Figures/contiguous.fig deleted file mode 100644 index c2416dafa..000000000 --- a/numpy/doc/numpybook/Figures/contiguous.fig +++ /dev/null @@ -1,133 +0,0 @@ -#FIG 3.2 -Landscape -Center -Inches -Letter -100.00 -Single --2 -1200 2 -6 3300 1500 10500 2250 -2 2 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 5700 1575 6900 1575 6900 2175 5700 2175 5700 1575 -2 2 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 7500 1575 8700 1575 8700 2175 7500 2175 7500 1575 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 3300 1575 10500 1575 10500 2175 3300 2175 3300 1575 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 3900 1575 3900 2175 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 4500 1575 4500 2175 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 5100 1575 5100 2175 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 5700 1575 5700 2175 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 6300 1575 6300 2175 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 6900 1575 6900 2175 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 7500 1575 7500 2175 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 8100 1575 8100 2175 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 8700 1575 8700 2175 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 9300 1575 9300 2175 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 9900 1575 9900 2175 -4 0 0 50 -1 18 12 0.0000 4 135 210 10125 1950 11\001 -4 0 0 50 -1 18 12 0.0000 4 135 210 9525 1950 10\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 9000 1950 9\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 8400 1950 8\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 7800 1950 7\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 7200 1950 6\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 6600 1950 5\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 6000 1950 4\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 5400 1950 3\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 4800 1950 2\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 4200 1950 1\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 3600 1950 0\001 --6 -6 3600 2700 5850 5100 -2 2 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 4200 3300 5400 3300 5400 4500 4200 4500 4200 3300 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 4200 2700 4200 5100 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 4800 2700 4800 5100 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 3600 3300 5400 3300 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 3600 3900 5400 3900 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 3600 2700 5400 2700 5400 5100 3600 5100 3600 2700 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 3600 4500 5400 4500 -4 0 0 50 -1 18 16 0.0000 4 180 180 5625 3975 C\001 -4 0 0 50 -1 18 12 0.0000 4 135 210 5175 4725 11\001 -4 0 0 50 -1 18 12 0.0000 4 135 210 4575 4725 10\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 4050 4725 9\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 5250 4125 8\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 4650 4125 7\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 4050 4125 6\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 5250 3525 5\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 4650 3525 4\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 4050 3525 3\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 5250 2925 2\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 4650 2925 1\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 4050 2925 0\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 3675 3225 (0,0)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 4875 3225 (0,2)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 3675 3825 (1,0)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 4875 3825 (1,2)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 4275 3825 (1,1)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 4875 4425 (2,2)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 4875 5025 (3,2)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 4275 3225 (0,1)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 3675 4425 (2,0)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 3675 5025 (3,0)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 4275 4425 (2,1)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 4275 5025 (3,1)\001 --6 -6 7050 2775 10500 4650 -2 2 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 7650 3375 8850 3375 8850 4575 7650 4575 7650 3375 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 7050 3975 9450 3975 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 7050 3375 9450 3375 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 7650 4575 7650 2775 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 8250 4575 8250 2775 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 8850 4575 8850 2775 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 7050 4575 7050 2775 9450 2775 9450 4575 7050 4575 -4 0 0 50 -1 18 16 0.0000 4 180 840 9600 3750 Fortran\001 -4 0 0 50 -1 18 12 0.0000 4 135 210 9225 4200 11\001 -4 0 0 50 -1 18 12 0.0000 4 135 210 9225 3600 10\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 9300 3000 9\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 8625 4200 8\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 8625 3600 7\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 8625 3000 6\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 8100 4200 5\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 8100 3600 4\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 8100 3000 3\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 7500 4200 2\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 7500 3600 1\001 -4 0 0 50 -1 18 12 0.0000 4 135 105 7500 3000 0\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 7125 3300 (0,0)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 7725 3300 (0,1)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 8325 3300 (0,2)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 7125 3900 (1,0)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 7725 3900 (1,1)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 8325 3900 (1,2)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 7125 4500 (2,0)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 7725 4500 (2,1)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 8325 4500 (2,2)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 8925 3900 (1,3)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 8925 4500 (2,3)\001 -4 0 0 50 -1 18 12 0.0000 4 180 450 8925 3300 (0,3)\001 --6 diff --git a/numpy/doc/numpybook/Figures/contiguous.pdf b/numpy/doc/numpybook/Figures/contiguous.pdf Binary files differdeleted file mode 100644 index 3e3a55e64..000000000 --- a/numpy/doc/numpybook/Figures/contiguous.pdf +++ /dev/null diff --git a/numpy/doc/numpybook/Figures/fig1.eps b/numpy/doc/numpybook/Figures/fig1.eps deleted file mode 100644 index 6b77676c8..000000000 --- a/numpy/doc/numpybook/Figures/fig1.eps +++ /dev/null @@ -1,4577 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Title: fig1.eps -%%Creator: matplotlib version 0.85.1.cvs, http://matplotlib.sourceforge.net/ -%%CreationDate: Fri Jan 6 00:09:47 2006 -%%BoundingBox: 13 175 598 616 -%%EndComments -%%BeginProlog -/mpldict 7 dict def -mpldict begin -/m { moveto } bind def -/l { lineto } bind def -/r { rlineto } bind def -/box { -m -1 index 0 r -0 exch r -neg 0 r -closepath -} bind def -/clipbox { -box -clip -newpath -} bind def -/ellipse { -newpath -matrix currentmatrix 7 1 roll -translate -scale -0 0 1 5 3 roll arc -setmatrix -closepath -} bind def -%%BeginFont: Verdana -%!PS-TrueType-1.0-1.0 -8 dict begin -/FontName /Verdana def -/FontMatrix [1 0 0 1 0 0] def -/FontType 42 def -/Encoding StandardEncoding def -/FontBBox [-102 -423 2963 2049] def -/PaintType 0 def -/FontInfo 7 dict dup begin -/Notice (Typeface and data © 1996 Microsoft Corporation. All Rights Reserved) def -/FamilyName (Verdana) def -/FullName (Verdana) def -/version (Version 2.35) def -/isFixedPitch false def -/UnderlinePosition -180 def -/UnderlineThickness 120 def -end readonly def -/sfnts [ -<00010000001301000004003044534947CD5006A400020D64000014144C5453485694D82F -00001530000003814F532F32477590C3000001B80000005656444D5874F17C6D000018B4 -000005E0636D6170E84D8B8B000007A80000068C637674204CA740E3000022AC00000198 -6670676DEE371553000021740000013867617370001700090000021000000010676C7966 -01F195F700009EC000013BB668646D7809490ECD0000323800006C8868656164C748722C -0000013C0000003668686561133B09D00000017400000024686D7478C905723E00002444 -00000DF46B65726E75BF7E53000200CC00000C966C6F63616784B57700000E34000006FC -6D617870086A023E00000198000000206E616D65A93B95720000022000000587706F7374 -C58F55450001DA7800002651707265701240C02F00001E94000002E00001000000010000 -16FBFC3A5F0F3CF5001B080000000000AA7E442900000000B26DE2ABFF9AFE590B930801 -00000009000200000000000000010000080BFE5200000C2CFF9AFBD40B93000100000000 -00000000000000000000037D00010000037D00620007006B000500020010002F00380000 -0495013F0003000100010411019000050000059A053300000125059A0533000003A00078 -02A70800020B0604030504040204000002870000000000000000000000004D5320200040 -0020FB02061EFE5900CA080B01AE2000019F000000000000000000030008000200100001 -FFFF00030000002801E60001000000000000004300000001000000000001000700430001 -0000000000020007004A0001000000000003002F00510001000000000004000700800001 -000000000005000C00870001000000000006000700930001000000000007002F009A0003 -000104030002000C00C90003000104050002001000D50003000104060002000C00E50003 -000104070002001000F10003000104080002001001010003000104090000008601110003 -000104090001000E01970003000104090002000E01A50003000104090003005E01B30003 -000104090004000E021100030001040900050018021F0003000104090006000E02370003 -000104090007005E024500030001040A0002000C02A300030001040B0002001002AF0003 -0001040C0002000C02BF00030001040E0002000C02CB0003000104100002000E02D70003 -000104130002001202E50003000104140002000C02F70003000104150002001003030003 -000104160002000C03130003000104190002000E031F00030001041B00020010032D0003 -0001041D0002000C033D00030001041F0002000C03490003000104240002000E03550003 -0001042D0002000E036300030001080A0002000C03710003000108160002000C037D0003 -00010C0A0002000C0389000300010C0C0002000C0395547970656661636520616E642064 -61746120A92031393936204D6963726F736F667420436F72706F726174696F6E2E20416C -6C2052696768747320526573657276656456657264616E61526567756C61724D6963726F -736F66743A56657264616E6120526567756C61723A56657273696F6E203120284D696372 -6F736F66742956657264616E6156657273696F6E20322E333556657264616E6156657264 -616E6120697320612074726164656D61726B206F66204D6963726F736F667420436F7270 -6F726174696F6E004E006F0072006D0061006C006F00620079010D0065006A006E00E900 -6E006F0072006D0061006C005300740061006E0064006100720064039A03B103BD03BF03 -BD03B903BA03AC0054007900700065006600610063006500200061006E00640020006400 -6100740061002000A9002000310039003900360020004D006900630072006F0073006F00 -66007400200043006F00720070006F0072006100740069006F006E002E00200041006C00 -6C0020005200690067006800740073002000520065007300650072007600650064005600 -65007200640061006E00610052006500670075006C00610072004D006900630072006F00 -73006F00660074003A00560065007200640061006E006100200052006500670075006C00 -610072003A00560065007200730069006F006E0020003100200028004D00690063007200 -6F0073006F00660074002900560065007200640061006E00610056006500720073006900 -6F006E00200032002E0033003500560065007200640061006E0061005600650072006400 -61006E006100200069007300200061002000740072006100640065006D00610072006B00 -20006F00660020004D006900630072006F0073006F0066007400200043006F0072007000 -6F0072006100740069006F006E004E006F0072006D0061006C004E006F0072006D006100 -61006C0069004E006F0072006D0061006C004E006F0072006D00E1006C004E006F007200 -6D0061006C0065005300740061006E00640061006100720064004E006F0072006D006100 -6C004E006F0072006D0061006C006E0079004E006F0072006D0061006C041E0431044B04 -47043D044B0439004E006F0072006D00E1006C006E0065004E006F0072006D0061006C00 -4E006F0072006D0061006C004E0061007600610064006E006F0041007200720075006E00 -740061004E006F0072006D0061006C004E006F0072006D0061006C004E006F0072006D00 -61006C004E006F0072006D0061006C00000000020001000000000014000300010000011A -000001060000010000000000000001020000000200000000000000000000000000000001 -0000030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324 -25262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748 -494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60610062636465666768696A6B -6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F -909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAB03ACADAEAFB0B1B2 -B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD000D1D2D3D4D5 -D6D7D8D9DADBDCDDDEDF0004057200000084008000060004007E017F019201A101B001FF -02C702C902DD0301030303090323037E038A038C03A103CE040C044F045C045F04911E85 -1EF92015201E2022202620302033203A203C203E2044207F20A420A720AC210521132116 -21222126212E215E22022206220F22122215221A221E222B22482260226525A125AB25CA -25CF25E6F002F00DFB02FFFF0000002000A0019201A001AF01FA02C602C902D803000303 -03090323037E0384038C038E03A30401040E0451045E04901E801EA02013201720202026 -203020322039203C203E2044207F20A320A720AB21052113211621222126212E215B2202 -2206220F221122152219221E222B22482260226425A125AA25CA25CF25E6F001F004FB01 -FFFFFFE30000FF1400A60099FF8A0000FE0F0000FF4C0078FF41FF28FCA00000FE170000 -0000FDD9FDD8FDD7FDD6FDA6E30B0000000000000000E085E095E109E084E0F9E156E077 -E0B70000E0900000E038E02BE123DF6ADF79E068E03CDE96DEA2DE8B0000DEA60000DE74 -DE71DE5FDE2FDE30DB9EDB96DAEEDB73DB5D10BE000005BE000100000082000000000000 -000002380000023800000000000000000000023800000242026800000000000000000000 -000002B203640368037600000000000000000000000000000000036A0000036A00000000 -000000000000000000000000000000000358000003580000000000000000000000000000 -0000000000000000034400000000000300A300840085037C009600E60086008E008B009D -00A900A40010008A01000083009300F000F1008D00970088010100DC00EF009E00AA00F3 -00F200F400A200AC00C800C600AD006200630090006400CA006500C700C900CE00CB00CC -00CD00E7006600D100CF00D000AE006700EE009100D400D200D3006800E900EB0089006A -0069006B006D006C006E00A0006F0071007000720073007500740076007700E80078007A -0079007B007D007C00B700A1007F007E0080008100EA00EC00B901440145010201030104 -010500FB00FC014601470148014900FD00FE01060107010800FF014A014B014C014D014E -014F0109010A010B010C0150015100F600F701520153015401550156015701580159015A -015B015C015D015E015F0160016100F800D50138013901620163016401650166010D010E -01670168010F01100111011200E000E1011301140169016A01150116013A016B016C016D -016E016F01700117011800AF00B00119011A01710172011B011C011D011E0173017400F9 -00FA00E200E3011F01200121012201750176017701780179017A017B017C012301240125 -0126017D017E017F01800181018200BA012701280129012A00E400E5018300D600DF00D9 -00DA00DB00DE00D700DD019D019E019F018A01A001A101A201A401A501A601A701A8012B -01A901AA01AB01AC012C01AD01AE01AF01B001B101B201B301B401B501B601B701B8012D -01B901BA01BB01BC01BD01BE01BF01C001C101C2012E01C301C4012F013001C501C601C7 -01C801C901CA01CB01CC01CD01CE023A01CF01D00131013201D1013301D201D301D401D5 -01D601D701D801D9025D025E025F0260026102620263026402650266026702680269026A -026B026C026D026E026F0270027102720273027402750276027702780279027A027B027C -027D027E027F028002810282028302840285028602870288034C034D034E034F03500351 -03520353035403550356035703580359035A035B035C035D035E035F0360036103620363 -036403650366036703680369036A036B036C036D036E036F037003710191019203740375 -037603770378037900B100B20238013400B500B600C3019300B300B400C4008200C10087 -00F50195037A00BC009900ED00C200A5019B019C023B023C023D023E023F024002410242 -0000001F001F001F001F00470070010401C0025F033C035503A203F10461049604C004DE -04F50520057F05B9063806DB072D07A70830086B090B099309B509F10A350A640AAA0B13 -0BF80C600CDC0D4F0DA00DD60E060E7A0EAE0EDB0F180F860FA61000104C10B8111711AE -122012B812DF132C13881407148814DF15221544156F159015C815DE15FE168916E71747 -17A01803184F18D11912193D198C19E51A001A761AB61B011B5D1BB81BF51C8B1CDB1D1B -1D741DD91E641EC21F041F631F7E1FDC203B205520FE21AA21BD21D021E9220222142226 -2238225322652278230A231C232E234023562369237C23B423EE2400241224242436244C -245E24702482249424AB24E62520259A260826EB270B274327C928832929297B299C29C2 -2A2D2A912B412BCD2C0D2C5A2CA82D0C2D4C2DCB2E3D2E722E9F2EE92F5E2F9F301130E7 -316D31D831FF3223326032DF336433A233F33443346D3480349334A6350E35AD35C735DD -361C365B368036A736E33728373F37593777382D3858388438E139313986399E39C43A03 -3AD73AEA3AFD3B103B243B373B4A3B5D3B773B8A3B9D3BB03BC33BD63BE93BFC3C173C47 -3C8E3CA63CEC3D003D493D7D3DB53DEA3E1B3E5B3E923EA53EB73ECA3EDC3F043F6B3FFF -40124024408840E441014135416941BB4239425A427E42AA42F643024314432743F044AF -44C244D444E744F9456F4586459E45B145C3465F47144727479D47A54806489348A648B8 -48CB48F0492B4961499249BC49CF49E149F44A064A1A4A2D4A404A534A664A794A8C4A9E -4AEE4B6C4B7F4BEC4C354C484C5C4C6F4C824C954CA84CBA4CDA4D584DDD4E3C4EC24F58 -4FB24FE1505D5081509D50E951DF51EF52085268528B52CA538353FD5425543F54665491 -54EA54FC550D551F55345546555B556D557E559055A455B655C755D955EE5600561556B8 -575B576D578757DE583458A458FC593F596C59C05A035A595AB15AC85B225B335B495BA2 -5BEB5C305C465C5C5CD25D2E5D405D515D635D745D855DEA5DFC5E105E4E5EBA5ECC5EDD -5EEF5F005F125F235FA2600E6020603260446055608561656246625C626E6285629A62B1 -62C362D562E762F963166332634963606388639E6422648E64AA64D76504653065556589 -65A265DD65F36611662F664F666E668E66B16700670867106752675A6762676A6772677A -67C367CB67D36812681A6840684868DA68E268EA68F2695D69DC69F66A106A216A376A48 -6A5B6A6F6AFD6B4A6BBD6BFF6C866C8E6D226D7A6DC16DC96E726E7A6ECF6F3B6F7A6FEA -705A70F370FB7112712371347146715A71C571DD7255725D7265727F7287731C738773DE -73F3749074C174C97521752975497594759C765676F2773A77AE783B7892789A78A278AA -78D078D878E078E8795979DE79E67A167A5D7A907ACD7B297B907BE47C5F7CCD7D367D3E -7DCA7E4C7E6C7EBC7EC47F7D8015804D80B18126817B81D38203820B82308238829A82C9 -82D1836C837483AC83EF8425846784C3852B858085F4865386BD86D38757876887D587DD -87E587ED87F5888B88F9894F896489EE8A258A4E8A7B8A918B238B488B6C8BBD8C398C73 -8CD88D0C8D8E8D8E8D8E8D8E8D8E8E208E8D8EF48F598F9F8FB58FBD8FC59006904590BD -9126916491A19209927292C09334938093D1944E94D395479558956C9586959B95B195C7 -95DD95F3960B96219633964996659683969596AA96BC96D196E396F8970A971F973E9759 -976A977B979697AE97C497D597ED97FF98179829983F985598679879989898B198C998DB -98ED98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF9911 -9922994099549970998999A199B399CB99E499FC9A159A359A4E9A659A769A909AA59ABB -9ACC9AE29AF99B0B9B1C9B2D9B3E9B549B659B7C9B949BAF9BC79BDD9BEE9C009C119C22 -9C339C4E9C649C759C8B9CA49CB89CCE9CDF9D639D6B9DDB0000037D01011C1C300E0E0B -0E010A01010E0E010F01010B0B0B0B0B0B0B0B0B0B01010E0E0E0B0C320E101923150E0F -740A0E2D240E0D0D0D0E322C1D322E1C111C0101010101010D0D0E0D0D1C0D0BB4010EB4 -110B100D0D2A11110B0A100F0A11010E0101323210230E0D1D0D0D0D0D0D0D0E0D0D0D0D -B4B4B4B40B10101010100B0B0B0B0B010B0B01010B0101010101010E330D010E0E0E0B10 -010101010B0101010E100B300E010B010127270132320D011C0B01010101010E010A1101 -01010101010B010101013223322323747474740D0D0D1D1D1DB401010101010101010101 -0AD732111C110E1001110A0D0D0E01010101010101010E0D743211100E100E0D0101320D -320D190D10230D230D2DB42D322D010E0B0E0B0D100E2A0E2A32112C112C111D0B1D0B1C -111C11100D130D2612181110010D010A0A110E01240A121901011901320D100E100E230D -230D230D0E0D0E0D0E0D0F0B0F0B74B474B474B474B40A010E0E0E2DB40E0B0E0B0D100D -100E2A32112C111D0B1D0B1D491D182E10110A01320D330E0D10012E102E102E10110A01 -010B01010101012E010101320E1C10160C27B4320E01231C0F740E0A240E300D0F0D1E2C -111C111474110D120BB40B0B0F0D0B0DB40D0A130A011010010B0C1010B40B100B10230A -100D3274740A0C0E010E1111320E0E10012311010E0E0E12240F0D0F0D102C11131C2D22 -11111F2D0E0D01100D240A010D0D301210100B011D1010100D0F110A170F270D11320C11 -0C0E0D0A0D0B010E11B4B4010A0E0B0B0A10100A01011001010101010101010101012D10 -282001010101010101010101010101010101010101320D320D320D320D320D320D320D32 -0D320D320D320D320D230D230D230D230D230D230D230D230D74B474B401010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -01010101010101010D100D100D100D100D100D100D102D102D102D102D102D101D0B1D0B -28202820282028202820110A110A110A110A0D010B00000000000001000101010101000C -00F808FF00080008FFFE0009000AFFFE000A000AFFFE000B000BFFFE000C000CFFFE000D -000DFFFD000E000EFFFD000F000FFFFD0010000FFFFD00110011FFFD00120012FFFC0013 -0013FFFC00140015FFFC00150015FFFC00160016FFFC00170017FFFB00180018FFFB0019 -001AFFFB001A001BFFFB001B001BFFFB001C001CFFFA001D001DFFFA001E001EFFFA001F -0020FFFA00200020FFFA00210021FFF900220022FFF900230023FFF900240025FFF90025 -0026FFF900260026FFF800270027FFF800280028FFF800290029FFF8002A002BFFF8002B -002BFFF7002C002CFFF7002D002DFFF7002E002EFFF7002F0030FFF700300031FFF60031 -0031FFF600320032FFF600330033FFF600340034FFF600350036FFF500360036FFF50037 -0037FFF500380038FFF500390039FFF5003A003BFFF4003B003CFFF4003C003DFFF4003D -003DFFF4003E003EFFF4003F003FFFF300400041FFF300410041FFF300420042FFF30043 -0043FFF300440044FFF200450046FFF200460047FFF200470047FFF200480048FFF20049 -0049FFF1004A004AFFF1004B004CFFF1004C004DFFF1004D004DFFF1004E004EFFF0004F -004FFFF000500051FFF000510052FFF000520052FFEF00530053FFEF00540054FFEF0055 -0055FFEF00560057FFEF00570058FFEE00580058FFEE00590059FFEE005A005AFFEE005B -005CFFEE005C005DFFEC005D005DFFEC005E005EFFEC005F005FFFEC00600060FFEC0061 -0062FFEB00620062FFEB00630063FFEB00640064FFEB00650065FFEB00660067FFEA0067 -0068FFEA00680068FFEA00690069FFEA006A006AFFEA006B006BFFE9006C006DFFE9006D -006DFFE9006E006EFFE9006F006FFFE900700070FFE800710072FFE800720072FFE80073 -0073FFE800740074FFE800750075FFE700760076FFE700770078FFE700780078FFE70079 -0079FFE7007A007AFFE6007B007BFFE6007C007DFFE6007D007DFFE6007E007EFFE6007F -007FFFE500800080FFE500810082FFE500820083FFE500830083FFE500840084FFE40085 -0085FFE400860086FFE400870088FFE400880088FFE400890089FFE3008A008AFFE3008B -008BFFE3008C008DFFE3008D008EFFE3008E008EFFE2008F008FFFE200900090FFE20091 -0091FFE200920093FFE200930093FFE100940094FFE100950095FFE100960096FFE10097 -0098FFE100980099FFE000990099FFE0009A009BFFE0009B009BFFE0009C009CFFE0009D -009EFFDF009E009EFFDF009F00A0FFDF00A000A0FFDF00A100A1FFDF00A200A3FFDE00A3 -00A4FFDE00A400A4FFDE00A500A6FFDE00A600A6FFDE00A700A7FFDD00A800A9FFDD00A9 -00A9FFDD00AA00ABFFDD00AB00ABFFDD00AC00ACFFDC00AD00AEFFDC00AE00AFFFDC00AF -00B0FFDC00B000B0FFDC00B100B1FFDB00B200B2FFDB00B300B4FFDB00B400B5FFDB00B5 -00B6FFDB00B600B6FFDA00B700B7FFDA00B800B9FFDA00B900BAFFDA00BA00BBFFDA00BB -00BBFFD900BC00BCFFD900BD00BDFFD900BE00BFFFD900BF00C0FFD900C000C1FFD800C1 -00C1FFD800C200C2FFD800C300C4FFD800C400C5FFD800C500C5FFD700C600C6FFD700C7 -00C7FFD700C800C8FFD700C900CAFFD700CA00CBFFD600CB00CCFFD600CC00CCFFD600CD -00CDFFD600CE00CFFFD600CF00D0FFD500D000D0FFD500D100D1FFD500D200D2FFD500D3 -00D3FFD500D400D5FFD400D500D5FFD400D600D7FFD400D700D7FFD400D800D8FFD400D9 -00DAFFD300DA00DBFFD300DB00DCFFD300DC00DCFFD300DD00DDFFD300DE00DEFFD200DF -00E0FFD200E000E0FFD200E100E2FFD200E200E2FFD200E300E3FFD100E400E5FFD100E5 -00E6FFD100E600E7FFD100E700E7FFD100E800E8FFD000E900E9FFD000EA00EBFFD000EB -00EBFFD000EC00ECFFD000ED00EDFFCF00EE00EEFFCF00EF00F0FFCF00F000F1FFCF00F1 -00F2FFCF00F200F2FFCE00F300F3FFCE00F400F4FFCE00F500F6FFCE00F600F7FFCE00F7 -00F7FFCD00F800F8FFCD00F900F9FFCD00FA00FBFFCD00FB00FCFFCC00FC00FDFFCC00FD -00FEFFCC00FE00FEFFCC00FF00FFFFCCB8FFC0401EB229323610B220B240B250B270B280 -B2A0B2B0B2D0B2E0B20AC0B2F0B202B8FFC04070B51718361F44010F561F56024F555F55 -026F54019F54AF54025153170452531604535215044A4952044649370447493204484932 -04493539043C3F32043D3F3D043E3F2104433F1D04423F5204413F5204403F52043F3532 -0432336404333534043534540434351E04D034E034F03403B8FFEEB3B4254836B8FFE0B3 -B4102336B8FFEE400DB4090F36B41A480476B386B302B8FFF0B3B3254836B8FFFA40FFB3 -092436B314480489881304706C7078020F9CDF9E02409D161936409C161B364097171936 -4096171B368685131F0F840F850F8E0F8F0F901F841F8E1F8F2F8E808580888F91908590 -8790880F40820910360F721F72024071090C360F6D0120C80120C7013FC6EFC60220C540 -C50200620100621062024061A061020F5B012D1411042C1425042B1439042A1413042914 -15041F141E042120430420143C04C91A45041A1B47041B1A3C041A143204151439041314 -480412141A0411141A0470140140144143360F0E2A1F0006010DC34B1F0CC24B1F0AC04B -1F09C04B1F05BC4B1F04BD4B1F03B94B1F02BA4B1F01B64B1F00B74B1FC3C22A1FC0BF2A -1FBD4056BC211FBAB9211FB7B6211FC2C3C40DBFC0C10DBCBDBE0CB9BABB0CB6B7B80C10 -BC80BC0240B980B9020FB63FB64FB67FB6040FB62FB63FB66FB67FB6BFB6CFB6FFB6080A -0937040C0D02050402030202010002500501B801FF858D8D1DB0964B5258B0801D59B808 -004B5458B001B0018E59B0084B5358B001B0018E59002B2B2B2B2B737473732B2B2B2B2B -2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB00345B006456861B006234473B00345B00E456861 -B00E2344B00E45B00F456861B00F23442B01B0144568B01423442B732B2B2B2B2B2B2B2B -2B2B2B2B2B2B2B2B7373737373737373732B732B732B2B2B2B2B73732B2B2B2B732B2B2B -2B00752B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73747373742B73742B400C3736 -26251F13120D0C0504022C20B003254523452361688A204568208A234460442D2C4B5258 -45441B2121592D2C202045684420B001602045B0467668188A4560442D2CB0122BB00225 -45B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C -60B0022523442121212D2CB100032545685458B0032545B0032545606820B004252344B0 -042523441BB00325204568208A2344B00325456860B003252344592D2CB0032520456820 -8A2344B00325456860B0032523442D2C4B525845441B2121592D2C462346608A8A462320 -468A608A61B8FF8062232010238AB14B4B8A70456020B0005058B00161B8FFBA8B1BB046 -8C59B0106068013A2D2C2045B003254652583F1B2111592D2C4B53234B515A5820458A60 -441B2121592D2C4B53234B515A58381B2121592D061E061405F005D1047C045D03DD0010 -0000FFE7FFE1FE78FE64FE590394001FFFFF009600AA00B900C600CEFFFFFFFFFFFFFFFF -00BC00C2FFFFFFFF007600B200C000CBFFFFFFFFFFFFFFFFFFFFFFFF0081009400A600CC -00DA00EFFFFFFFFFFFFFFFFF0098009E00AB00B0FFFFFFFFFFFFFFFFFFFFFFFF00900098 -009E00A400A900AE00B300BA00C3FFFF00880091009800A500ACFFFFFFFFFFFFFFFFFFFF -006F0087008F009B00A000D3011DFFFFFFFFFFFF00C3021401C2FFFFFFFF00E9000C02D1 -0173018E001A002C0044005C0073007E008600B200C8014C001A003D00440050005C0072 -0078009200B200B900C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003D0056005D006A -006E00B100B900C1FFFFFFFF002A003D00540064006A00B100B9FFFFFFFFFFFF0071007A -008900A100A700BB006F007A00870091009AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -008102210221007400E500B900CA019502C600AC00A700850614000A000005D1001F0000 -045D001F00000000FFE10000FE64FFF50000036202F402A2029100AF026A004C08000100 -0000000002D0000002D000000326012303AC00A8068C00C30516009B089C009505D00073 -022600A403A200B503A20093051600A7068C00D202E9009303A2009902E900FD03A2FFE2 -0516008905160116051600A1051600A70516004D051600BB051600890516009A0516007A -0516007103A2015A03A200E6068C00FE068C00F5068C010C045D00A0080000B00578001A -057C00C805960073062A00C8050F00C8049900C806340073060300C8035E008903A3002C -058B00CD047400C806BE00C805FC00C8064C007304D300C8064C0073059000C805780086 -04EE000005DB00B20578001A07E9005C057B004404EC0006057B007E03A200EF03A20046 -03A200AB068C00BA0516FFFC0516015404CE006804FC00B9042B006904FC006C04C4006A -02D0004404FC006C051000B9023200AF02C1FFC204BC00C1023200BB07C800B9051000B9 -04DB006A04FC00B904FC006C036A00B9042B006E0327003E051000B104BC003D068C0056 -04BC003C04BC003D0434005D051400AD03A2017A051400BB068C00BB0578001A0578001A -05960073050F00C805FC00C8064C007005DB00B204CE006804CE006804CE006804CE0068 -04CE006804CE0068042B006904C4006A04C4006A04C4006A04C4006A023200A00232FFEB -0232FFF502320005051000B904DB006A04DB006A04DB006A04DB006A04DB006A051000B1 -051000B1051000B1051000B1051600BB0456009A0516009F05160089051600AC045D00B9 -0516008904F600B90800009F0800009F07D000AA0516021D0516015A068C00F507E0000E -064C0073080000A1068C00D7068C00FE068C010C0516006C052200BE0516009505D100BB -068C009005A900710516008A045D0097045D0079068C006B07A4006804DB005D045D0071 -03260123068C00D2068C00860516FFDC068C00F305D10032052800A6052800AE068C00B2 -0578001A0578001A064C0073088F007807DA006A051600990800009903ACFFED03AC0096 -0226FFED022600A0068C00D2068C00AC04BC003D04EC000602E4FF9A0516000003A200BA -03A200C20500004405020044051600BB02E900FD0226FFF603ACFFF60C2C00950578001A -050F00C80578001A050F00C8050F00C8035E0089035E005D035E007E035E0089064C0073 -064C0073064C007305DB00B205DB00B205DB00B2023200BB05160136051600ED05160118 -05160113051602210516012D05160161051601560516019F05160132047E001802460018 -05780086042B006E057B007E0434005D03A2017A0634000E04E5006A04EC000604BC003D -04D800C804FC00B9068C00DC068C012304560123045600CF045600CF080000AB080000AB -0800008C0516003C0634007304FC006C035E008905780086042B006E05960073042B0069 -05960073042B006904FC006C0516FFFC02E900FD0578001A04CE00680578001A04CE0068 -062A00C8052E006C0634000E050F00C804C4006A050F00C804C4006A047400C8023200AB -047400C8025E00BB047400C803AB00BB05FC00C8051000B905FC00C8051000B9064C0073 -04DB006A059000C8036A00B9059000C8036A009205780086042B006E04EE00000327003E -04EE00000327003E05DB00B2051000B105DB00B2051000B1057B007E0434005D057B007E -0434005D048800C8064C0073068D006904FC006C04DD006A041A006D050B006A03F8000A -065200680516FFFC04FF0123045D009A094F00C806F7008904E900AF05D8000002E400D5 -047500D5089C00950296000F04D5009202D6008302D6008304D500B102D600700578001A -04CE006805960073042B006905960073042B0069050F00C804C4006A050F00C804C4006A -050F00C804C4006A0634007304FC006C0634007304FC006C0634007304FC006C060300C8 -051000B90603002005100013035E002C0232FFF2035E005F0232FFFC035E008002320001 -035E00890232008E03A3002C02C1FFC2058B00CD04BC00C104BC00C1047400C802320005 -05FC00C8051000B905FC00C8051000B9064C007304DB006A064C007304DB006A059000C8 -036A001B05780086042B006E04EE00000327003E05DB00B2051000B105DB00B2051000B1 -05DB00B2050B00B105DB00B2050B00B107E9005C068C005604EC000604BC003D026700B9 -0578001A04CE006807E0000E07A40068064C007304DB005D03A2015A07E9005C068C0056 -07E9005C068C005607E9005C068C005604EC000604BC003D0226FFED0516FFD005160089 -05BE00B1080000AB0800008C0800008A0800009901B00061051601610516021205160100 -057800070602000006F6000004510000070C000006070000074300000232FFCB0578001A -057C00C805A0001A050F00C8057B007E060300C8035E0089058B00CD057C001A06BE00C8 -05FC00C805310072064C0073060300C804D300C80561007604EE000004EC0006057B0044 -06F700B3068C006C035E007E04EC000604FC006C041A006D051000B9023200A0050D00B1 -04F600B904BC003D03A9006C051000B904FE0089023200BB04BC00C104BC003D051E00B9 -04BC003D0406006804DB006A050000B904100069050D00B104B80030069300B006820071 -02320005050D00B104DB006A050D00B106820071050F00C80657FFFF048800C8059B0073 -05780086035E0089035E007E03A3002C08F2001208D300C8068BFFFF058B00CD04EC0006 -060300C80578001A057C00C8057C00C8048800C805F7000A050F00C807C9002004ED0051 -060100C8060100C8058B00CD05E0001206BE00C8060300C8064C0073060300C804D300C8 -0596007304EE000004EC0006068D0069057B0044061700C805B2008E083E00C8085C00C8 -06440000075D00C8057200C8059C0061084600C805A6002C04CE006804EA007404C200B9 -03C500B904F9000904C4006A0662003404320041051F00B9051F00B904BC00C104F7001D -059200B9051900B904DB006A051900B904FC00B90446006A03F8000A04BC003D06BA006F -04BC003C052800B904D8008E070200B9071A00B90520000A065B00B9049100B904600053 -06B600B904CC004304C4006A0510001303C500B90460006A042B006E023200AF02320005 -02C1FFC20750001D075000B90510001304BC00C104BC003D051900B9048800C803C500B9 -080000CB096000C8051900B904560119045600EF045600E6045600B3045600E6045600F3 -045600C5000000000000000000000000000000000674007304DB006A060D00B2054700B1 -0000020900000221000001540000021D0516013605160003051601360516012505160142 -051601420516014205160125051602090516013605160142051601420516014205160142 -051601360578001A04CE00680578001A04CE00680578001A04CE00680578001A04CEFFE3 -0578001A04CE00680578001A04CE00680578001A04CE00680578001A04CE00680578001A -04CE00680578001A04CE00680578001A04CE00680578001A04CE0068050F00C804C4006A -050F00C804C4006A050F00C804C4006A050F00C804C4006A050F002904C4FFFC050F00C8 -04C4006A050F00C804C4006A050F00C804C4006A035E008902320096035E0089023200AF -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000064C007304DB006A064C0073 -04DB006A064C007304DB006A064C007304DBFFE5064C007304DB006A064C007304DB006A -064C007304DB006A0674007304DB006A0674007304DB006A0674007304DB006A06740073 -04DB006A0674007304DB006A05DB00B2051000B105DB00B2051000B1060D00B2054700B1 -060D00B2054700B1060D00B2054700B1060D00B2054700B1060D00B2054700B104EC0006 -04BC003D04EC000604BC003D04EC000604BC003D04EC000604BC003D04FC006C000000ED -0516008A0000001F00000380090E09000303050507070B07030404070703050304070707 -070707070707070404070707060A08070808070608080505070609080907090707070808 -090707070404040706060606060606030606030306030906060606040604060607060605 -060506070808080708090806060606060606060606060303030306060606060606060606 -07050707060507060909090606070A090907070707060607070607050507090606050707 -0707070606070808090A0907090404020207070607030604040606070302040E08070807 -070505050509090908080803060606060606060606060603070607050508060706070607 -070505050909090608060507060806080606060308060806080608070607060603060306 -040806080609060704070407060704070408060806070507050609070606050605090606 -050B09060703050B03050303050308060806080607060706070608060806080608060806 -050305030503050305030706060603080608060906090607040706070408060806080608 -06090707060308060A090906040907090709070706020607060909090902060606080809 -060908090308070607070805070809080709080706070707090905070605060306060505 -060603060606060506060506050907030606060707080608070505050A0A070707070807 -070607070906080807070908090807080707070708070909080907080907060606040606 -070506060606070606060606050609060705090907080606080606060406060303030909 -060606060505090B06050505050505050000000009060806000000000606060606060606 -060606060606060806080608060806080608060806080608060806080608060706070607 -060706070607060706070605030503000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000090609060906 -090609060906090609060906090609060906080608060806080608060806080607060706 -07060706060007000A0F0A000404040508070B0703050507080405040507070707070707 -0707070505080808060A070708080606080805050706090709070908070708070B070707 -0505050806060707050707040707030307030B0707070704060407060707060606050608 -070708060709080707070707070507070707030303030707070707070707070707050707 -060507060A0A0A0606080A090A080808070706070807070505080A070604080807080706 -06080707090B0A070A0505030308080607040605050606070403050F0706070606050505 -050909090808080306060606060606060606060307060706050806070607070808050505 -0A0A0A060807050706080508050706040707070708070806070607060306030605070707 -0709070804080407060704070408070807070607060609090707050705090606050C0906 -0704060B0306040406040707080508050607060706070807080708070807080705030503 -0503050305030707070603070707070907090708040706070408070807080708070B0707 -060307070A0A0907050B070B070B070706030607070A0A0A0A0206060607070906090909 -030707070607080507070907070908070707070709090507070507030707070507070307 -0607060507070507060909030707070906080608070505050B0B08070708070707060706 -0906080807070908090807080707090709070B0B080907080A0707070605060707050707 -0706070707070705050609070706090A0708060608060707050606030303090907070607 -06050A0C0705050505050505000000000907080700000000060606060606060606060606 -060606070707070707070707070707070707070707070707070707060706070607060706 -070607060706070503050300000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000009070907090709070907 -090709070907090709070907090708070807080708070807080708070706070607060706 -070007000B110B000404040509070C080305050709040504050707070707070707070705 -05090909060A080809090706090805050806090809070908080708080B08070805050509 -07070707060707040707030407030B070707070506040707090707060705070908080907 -080908070707070707060707070703030303070707070707070707070706070707060707 -0B0B0B0707090B090B090909070707080908070606090B07060409090709080707090808 -090C0B070B05050303090907070407050507070704030511080708070705050505090909 -08080803070707070707070707070603080608060509070707070709090606060B0B0B07 -090705080609060906070704080708070907090707070706030603060508070807090708 -05080508060704070408070807080608060609090707060705090707060D0A070804060C -040704040704080709060906070707070707090709070907080708070503050305030503 -05040807070603080708070907090708050806070408070807080708070B090707030807 -0B0B0907050B090B090B090707030707080B0B0B0B02070707080809060A090903080808 -070808050808090807090807070707080909050707060703070707050707030707070706 -07070607070909030707070907090609080505050D0C090808080808080608070B070808 -08080908090807090708090809080B0C090A07090B080707070508070906070707070707 -07070706050709070807090A080907070A0707070507060303040A0B0707070706050B0D -070606060606060600000000090708070000000007070707070707070707070707070708 -070807080708070807080708070807080708070807080707070707070707070707070707 -070707050305030000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000907090709070907090709070907 -090709070907090709070807080708070807080708070807070707070707070707000700 -0C120C00040405060A080D09030505080904050405080808080808080808080505090909 -070C0808090908070909050508070A090A080A08080709080D0807080505050A08080808 -060808040808030407030B0808080805070508070B0707070805080A08080908090A0908 -08080808080608080808030303030808080808080808080808070808080708070C0C0C08 -08090C0A0C090909080808090A080807070A0B080705090A080A0908080A08080A0D0D08 -0C06060303090A070704080505080808040306120808080808050505050A0A0A09090903 -0808080808080808080807030807080705090707070808090A0707070C0C0C0809080508 -07090609060808040808080809090908080808070307040706090809080A080805080508 -07070507050908090808070807070A0B0808060807090808070E0A070904070D04070404 -070408080906090608080808080809080908090809080908050305030503050305040807 -070703090809080A080A0808050807070509080908090809080D0B07070408080C0B0A08 -050D0B0D0B0D0B0707030808090C0C0C0C0308080808090A060B090B0308080808080905 -08080A09080A0908080707080B0A05070806080308070706080803080708070608080608 -070B0B030808080B080A0709080505050D0D0A0808090808080709080D07090908090A09 -0A09080907080B0809090D0E090B08090C080808070608080B0608080707080808080806 -07070B0709080B0C080907080B0708080608070303040B0B0807070807060C0E08070707 -07070707000000000A080908000000000808080808080808080808080808080808080808 -080808080808080808080808080808080808080808080808080808080808080808080805 -030503000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000A080A080A080A080A080A080A080A080A08 -0A080A080A0809080908090809080908090809080707070707070707080008000D140D00 -050505050A080D09030606090905070506080808080808080808080606090909070D0908 -090908080909050608070B090A080A08090909090D0909090606060B0808080808080805 -0808030407030B0808080805070608080B0708070807080B09090908090A090808080808 -080808080808030303030808080808080808080808070808080708080D0D0D0808090C0A -0D090909080808090B090807070B0B080705090B080B0908080B09090A0E0D080D060603 -03090B080905080606080808050306140908090808050505050A0A0A0909090308080808 -08080808080807030907090707090809080808090B0707070D0D0D080908050907090809 -080808050908090809080908080808070307040706090809080A08080508050907090609 -060908090809070907070A0B08080708070B0808070F0B080A05070E0408050508050908 -090809080808080808080908090809080908090805030503050305030604080707070309 -0809080A080A0808050907090609080908090809080D0B09080409080C0B0A08060D0B0D -0B0D0B0908030808090D0D0D0D0308080809090A060B0A0C030908090809090508090B09 -080A0908090909090B0B05090807080308080906080803080808080708080708080B0B03 -0808080B080A0709090505060F0D0B080909090808070A080D080909080A0B090A090809 -09090B090A090D0E0A0C08090D080808080608080B070808080809080808080807080B07 -09080B0C080907080B0808080608070303040C0D0808080807060D0F0807070707070707 -000000000A08090900000000080808080808080808080808080808090809080908090809 -080908090809080908090809080908080808080808080808080808080808080503050300 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000A080A080A080A080A080A080A080A080A080A080A08 -0A0809080908090909090909090909090908090809080908080008000E150E0005050606 -0B090F0A040606090B050705060909090909090909090906060B0B0B080E0A0A0A0B0908 -0B0A05060A080B0A0B080B0A0A090A0A0F0A090A0606060B090908090709080509090305 -08030D0909090906080609080B0908080906090B0A0A0A090A0B0A080808080808070808 -0808030303030909090909090909090909080909090809090E0E0E09090B0E0B0E0B0B0B -0909090A0B0A0908080B0D0908060B0B090B0A09090B0A0A0B0F0E090E060604040B0B08 -0905090606090909050406150A090A0909050505050B0B0B0A0A0A030909090909090909 -090908030A080A08060B09090808090B0B0808080E0E0E090B09050A080A070A07090905 -0A080A080B090B090809080803080408060A090A090B090A060A060A08090609060A090A -090A080A08080B0B09090709070B090908100C080A05080F0508050508050A080A070A07 -0908090809080B090B090B090A090A09050305030503050306050A080808030A090A090B -090B090A060A0809060A090A090A090A090F0B0908040A080E0D0B09060F0B0F0B0F0B09 -080409090A0E0E0E0E030909090A0B0C070C0B0C030A0A0A090A0A050A0A0B0A090B0A08 -0909090A0B0B05090907090309090906090903080809080709090709080B0B030909090B -090B080A0A050506100F0B0A090B0A0A0A080A090F090B0B0A0A0B0A0B0A080A09090B0A -0B0A0D0E0B0D0A0A0E0A0809080709080B07090908090A090909090807080B090A080B0C -090B08080C0808090708080303050D0D0908080908070E10090808080808080800000000 -0B090B0A000000000909090909090909090909090909090A080A080A080A080A080A080A -080A080A080A080A080A0809080908090809080908090809080908050305030000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000B090B090B090B090B090B090B090B090B090B090B090B090A09 -0A090B0A0B0A0B0A0B0A0B0A0908090809080908090009000F170F00050506070C0A100B -0407070A0C050705070A0A0A0A0A0A0A0A0A0A07070C0C0C080F0A0A0B0B09090C0B0507 -0A080D0B0C090C0A0A090B0A0F0A090A0707070C0A0A0909080909050909030509030F09 -0A090906080609090D0909090A070A0C0A0A0B090B0C0B09090909090908090909090303 -0303090A0A0A0A0A090909090A080A0A0A080A090F0F0F0A0A0C0F0C0F0C0C0C0A090A0B -0C0B0A08080C0E0A08060C0C0A0C0B0A0A0C0A0A0C100F0A0F070704040C0C0909050A07 -0709090A050407170A090A0909050505050C0C0C0B0B0B030A0A0A0A0A0A0A0A0A0A0803 -0A080A09070B09090909090C0C0808080F0F0F0A0C09050A080B080B08090A050A090A09 -0B0A0B090909090803080408070B090B090C0A0A060A060A08090609060B090B090A090A -09090C0D090A080A070B0A0908110D080B0508100509050509050A090B080B0809090909 -09090C090C090C090B090B09050305030503050307050A090908030B090B090C0A0C0A0A -060A0809060B090B090B090B080F0D0909050A090F0E0C0A070F0D0F0D0F0D0909040A0A -0B0F0F0F0F030A0A0A0A0B0D070D0B0D030A0A0B090A0B050A0A0D0B0A0C0B090A09090A -0D0C0509090809030909090709090309090909080A0A0809090B0D03090A090D090C090B -0A05050711110C0A0A0B0A0A0A090B090F090B0B0A0B0D0B0C0B090B090A0D0A0B0B0F10 -0C0E0A0B100A0909090709090D08090909090A090A09090807090D090A090D0E0A0C0908 -0D0909090708080303050E0E0909090909070F120908080808080808000000000C0A0C0A -000000000A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A090A090A090A090A090A090A090A -090A090A090A090909090909090909090909090909090905030503000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B090B090C0A -0C0A0C0A0C0A0C0A090909090909090909000A0010181000060606070D0A110C0407070A -0D060706070A0A0A0A0A0A0A0A0A0A07070D0D0D09100B0B0B0C0A090C0C07070B090D0C -0D0A0D0B0A0A0C0B110B0B0B0707070D0A0A0A0A080A0A060A0A050609050F0A0A0A0A06 -09070A090D0909090A070A0D0B0B0B0A0C0D0C0A0A0A0A0A0A080A0A0A0A050505050A0A -0A0A0A0A0A0A0A0A0A090A0A0A090A0A1010100A0A0D100D100D0D0D0A0A0A0C0D0B0A09 -090D0F0A09060D0D0A0D0C0A0A0D0B0B0D11100A10070704040D0D090B060A07070A0A0A -060407180B0A0B0A0A070707070D0D0D0C0C0C050A0A0A0A0A0A0A0A0A0A09030A090B09 -070C0A0B090A0A0D0D0909091010100A0C0A070A090B080B080A0A060B0A0B0A0C0A0C0A -0A0A0A0905090509070C0A0C0A0D0A0B060B060A090A070A070C0A0C0A0B090B09090D0D -0A0A090A070D0A0A09130E0B0C060911050A06060A060B0A0B080B080A0A0A0A0A0A0C0A -0C0A0C0A0C0A0C0A070507050705070507060B090909050C0A0C0A0D0A0D0A0B060A090A -070C0A0C0A0C0A0C0A110D0B09050B0A100F0D0A07110D110D110D0B09040A0A0B101010 -10030A0A0A0B0C0E090E0C0E050B0B0B0A0B0C070B0B0D0C0A0D0C0A0B0A0B0B0D0D070B -0A090A050A0A09070A0A0509090A09080A0A080A090D0D050A0A0A0D0A0D090B0A070707 -12120D0B0B0B0B0B0B090C0A110A0C0C0B0C0D0C0D0C0A0B0A0B0D0B0C0B0F100D0E0B0B -110B0A0A0A080A0A0D090A0A090A0B0A0A0A0A0907090D090A0A0D0E0A0C09090D0A0A0A -0809090505060F0F0A09090A090810130A09090909090909000000000D0A0D0B00000000 -0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B -0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0705070500000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0A0C0A0D0B0D0B0D0B -0D0B0D0B0B090B090B090B090A000A00111A1100060607080E0B120C0508080B0E060806 -080B0B0B0B0B0B0B0B0B0B08080E0E0E09110C0C0C0D0B0A0D0D08080C090E0D0D0A0D0C -0C0A0C0C110C0A0C0808080E0B0B0A0B090B0A060B0B05060A05110B0A0B0B0709070B0A -0E0A0A090B080B0E0C0C0C0B0D0D0C0A0A0A0A0A0A090A0A0A0A050505050B0A0A0A0A0A -0B0B0B0B0B090B0B0B090B0B1111110B0B0E110D110E0E0E0B0B0B0C0E0C0B09090E100A -09070E0E0B0E0C0B0B0E0C0C0D12110B11080805050E0E0A0A060B08080B0B0B0605081A -0C0B0C0B0B080808080D0D0D0C0C0C050B0B0B0B0B0B0B0B0B0B0A050C090C09080D0A0A -0A0A0B0E0E0909091111110B0D0B080C090C090C090B0B060C0A0C0A0D0B0D0B0A0B0A09 -05090509080D0B0D0B0D0A0C070C070C090A070A070C0B0C0B0C090C090A0D0E0B0A080B -080D0B0B09140F0A0C060912060A06060A060C0A0C090C090B0A0B0A0B0A0D0B0D0B0D0B -0D0B0D0B080508050805080508060C0A0A09050D0B0D0B0D0A0D0A0C070C090A070C0B0C -0B0C0B0C0B110E0A0A050C0A11100D0A08110E110E110E0A0A050B0B0C11111111040B0B -0B0C0D0F090F0D10050C0C0C0B0C0D080C0C0E0D0B0D0D0A0B0A0A0C0F0E080A0B080B05 -0B0B0A080B0B050A0A0B0A090A0B090B0A0E0E050B0A0B0E0B0D0A0C0C08080813130E0C -0A0D0C0C0C0A0D0B110A0D0D0C0D0E0D0D0D0A0C0A0A0E0C0D0C12120D100C0C120C0A0A -0A080B0A0E080B0B0A0B0C0B0A0B0B09080A0D0A0C0A0F0F0B0E0A090E0A0A0B08090905 -050610100B0A0A0B0A0811140B09090909090909000000000D0A0D0B000000000B0B0B0B -0B0B0B0B0B0B0B0B0B0B0B0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B -0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A080508050000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000D0A -0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0B0C0B0D0B0D0B0D0B0D0B0D0B -0A0A0A0A0A0A0A0A0B000B00121B1200060607080F0B130D0508080B0F070807080B0B0B -0B0B0B0B0B0B0B08080F0F0F0A120C0C0D0E0B0A0E0E08080C0A0F0D0E0B0E0D0C0B0D0C -120C0B0C0808080F0B0B0B0B090B0B060B0B05060B05120B0B0B0B0809070B0B0F0B0B09 -0B080B0F0C0C0D0B0D0E0D0B0B0B0B0B0B090B0B0B0B050505050B0B0B0B0B0B0B0B0B0B -0B0A0B0B0B0A0B0B1212120B0B0F120E120F0F0F0B0C0B0D0F0D0B0A0A0F110B0A070F0F -0B0F0D0C0C0F0C0C0E13120B12080805050F0F0B0B070B08080B0B0B0705081B0C0B0C0B -0B080808080E0E0E0D0D0D050B0B0B0B0B0B0B0B0B0B0A050C090C09080E0B0B0B0B0B0F -0F0A0A0A1212120B0E0B080C090D090D090B0B070C0B0C0B0E0C0E0B0B0B0B0A050A050A -080D0B0D0B0E0B0D080D080C090B070B070D0B0D0B0C090C090A0E0E0B0B090B090E0B0B -0A15100B0D070A13060B06060B060C0B0D090D090B0B0B0B0B0B0E0B0E0B0E0B0E0B0E0B -080508050805080508060C0B0B0A050D0B0D0B0E0B0E0B0D080C090B070D0B0D0B0D0B0D -0B120F0B0B050C0B12110E0B08120F120F120F0B0B050B0B0D12121212040B0B0B0C0E10 -0A100E10050C0C0D0B0C0E080C0C0F0D0C0E0E0B0C0B0B0C100E080B0B090B050B0B0B08 -0B0B050B0B0B0B090B0B090B0B0F0F050B0B0B0F0B0E0A0D0C08080814140F0C0B0E0C0C -0C0A0D0B120B0E0E0C0D0F0E0E0E0B0D0B0B0E0C0E0D13130E110C0D130D0B0B0B080B0B -0E090C0C0B0B0D0B0B0B0B0A090B0F0B0C0B10100C0E0A0A0F0B0B0B080A090505061010 -0B0B0B0B0A0812150B0A0A0A0A0A0A0A000000000E0B0D0B000000000B0B0B0B0B0B0B0B -0B0B0B0B0B0B0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0B0B0B0B0B -0B0B0B0B0B0B0B0B0B0B0B08050805000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000E0B0E0B0E0B -0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0B0B0B0B -0B0B0B0B0B000B00131D130007070709100C140E0509090C10070907090C0C0C0C0C0C0C -0C0C0C09091010100A130D0D0D0F0C0B0F0E08090D0B100E0F0B0F0D0D0C0E0D130D0C0D -090909100C0C0B0C0A0C0B070C0C06070B06120C0C0C0C080A070C0B100B0B0A0C090C10 -0D0D0D0C0E0F0E0B0B0B0B0B0B0A0B0B0B0B060606060C0C0C0C0C0C0C0C0C0C0C0A0C0C -0C0A0C0C1313130C0C10130F131010100C0C0C0E100D0C0A0A10120C0A0710100C100E0C -0C100D0D0F14130C130909050510100B0C070C09090C0C0C0705091D0D0C0D0C0C080808 -080F0F0F0E0E0E060C0C0C0C0C0C0C0C0C0C0B060D0A0D0A090F0C0C0B0C0C10100A0A0A -1313130C0F0C080D0A0D0A0D0A0C0C070D0B0D0B0F0C0F0C0B0C0B0B060B060B090E0C0E -0C0F0C0D080D080D0A0C070C070E0C0E0C0D0A0D0A0B0F100C0C0A0C090F0C0C0A16110C -0E070B14060B07070B070D0B0D0A0D0A0C0B0C0B0C0B0F0C0F0C0F0C0E0C0E0C08060806 -0806080609070D0B0B0B060E0C0E0C0F0C0F0C0D080D0A0C070E0C0E0C0E0C0E0C13100C -0B060D0B13120F0C091310131013100C0B050C0C0E13131313040C0C0C0D0E110A110E11 -060D0D0D0C0D0E080D0D100E0C0F0E0B0D0C0C0D110F080C0C0A0C060C0C0B090C0C060B -0B0C0B0A0C0C0A0C0B100F060C0C0C0F0C0F0B0D0D0808091515100D0C0E0D0D0D0B0E0C -120C0E0E0D0E100E0F0E0B0D0C0C100D0E0E14140F110D0D140D0B0C0B090C0B0F0A0C0C -0B0C0D0C0C0C0C0A090B100B0D0C11110C0F0B0A100B0B0C090A0A06060711110C0B0B0C -0B0913160C0A0A0A0A0A0A0A000000000F0C0E0C000000000C0C0C0C0C0C0C0C0C0C0C0C -0C0C0C0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0C0B0C0B0C0B0C0B0C -0B0C0B0C0B0C0B0806080600000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000F0C0F0C0F0C0F0C0F0C -0F0C0F0C0F0C0F0C0F0C0F0C0F0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0C0B0C0B0C0B0C0B -0C000C00141E140007070809100D160F0509090D10070907090D0D0D0D0D0D0D0D0D0D09 -091010100B140E0E0E0F0D0C100F08090E0B110F100C100E0E0C0F0E140E0C0E09090910 -0D0D0C0C0A0C0C070C0D06070C06130D0C0C0C090A080D0C100C0C0B0D090D100E0E0E0D -0F100F0C0C0C0C0C0C0A0C0C0C0C060606060D0C0C0C0C0C0D0D0D0D0D0B0D0D0D0B0D0C -1414140D0D101310141010100D0D0D0F100E0D0B0B10130C0B0810100D100F0D0D100E0E -1015140D140909050510100C0C070D09090D0D0D0705091E0E0D0E0D0D08080808101010 -0F0F0F060D0D0D0D0D0D0D0D0D0D0B060E0A0E0B09100C0C0C0C0C10100B0B0B1414140D -100C080E0A0E0A0E0A0C0D070E0C0E0C0F0D100D0C0D0C0B060B060B090F0D0F0D100C0E -090E090E0A0C080C080F0D0F0D0E0B0E0B0B10100C0C0A0D0A100D0C0B17110C0F070B16 -060C07070C070E0C0E0A0E0A0D0C0D0C0D0C100C100C100C0F0D0F0D0806080608060806 -09070E0C0C0B060F0D0F0D100C100C0E090E0A0C080F0D0F0D0F0D0F0D14100C0C060E0C -1313100C091410141014100C0C050D0D0E14141414040D0D0D0E0F110B120F12060E0E0E -0D0E0F080E0E110F0D100F0C0D0C0C0E1110080C0C0A0D060D0C0C090D0C060C0C0D0C0A -0C0D0A0D0C1010060D0C0D100D100B0E0E0808091616100E0C0F0E0E0E0B0F0D130C0F0F -0E0F110F100F0C0E0C0C100E0F0E151510120E0E150E0C0C0C090C0C100A0D0D0C0C0E0D -0C0D0C0B0A0C110C0D0C12120D100B0B110C0C0D090B0A06060712120D0C0C0D0B091417 -0D0B0B0B0B0B0B0B00000000110C0F0D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E -0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0D0C0D0C0D0C0D0C0D0C0D0C0D -0C0D0C080608060000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000100C100C100C100C100C100C100C -110C110C110C110C110C0F0D0F0D0F0D0F0D0F0D0F0D0F0D0C0C0C0C0C0C0C0C0C000D00 -152015000707080A110D170F060A0A0D11080A080A0D0D0D0D0D0D0D0D0D0D0A0A111111 -0B150E0E0F100D0C1010080A0F0C1210110D110F0E0D0F0E150E0D0E0A0A0A110D0D0D0D -0B0D0D070D0D06070C06140D0D0D0D090B080D0C110C0C0B0D0A0D110E0E0F0D10110F0D -0D0D0D0D0D0B0D0D0D0D060606060D0D0D0D0D0D0D0D0D0D0D0B0D0D0D0B0D0D1515150D -0D111411151111110D0D0D0F110F0D0B0B11140D0B0811110D110F0E0E110E0E1116150D -150A0A060611110C0D080D0A0A0D0D0D08060A200E0D0E0D0D080808081111110F0F0F06 -0D0D0D0D0D0D0D0D0D0D0C060E0B0E0B0A100D0D0C0D0D11110B0B0B1515150D100D080E -0B0F0B0F0B0D0D080E0D0E0D100E100D0D0D0D0C060C060C0A100D100D110D0F090F090E -0B0D080D080F0D0F0D0E0B0E0B0C11110D0D0B0D0A110D0D0B18120D0F080C17070D0707 -0D070E0D0F0B0F0B0D0D0D0D0D0D100D100D100D100D100D08060806080608060A070F0C -0C0C06100D100D110D110D0F090E0B0D080F0D0F0D0F0D0F0D15110D0C060E0D1414110D -0A1511151115110D0C060D0D0F15151515040D0D0D0E10120B131013060E0E0F0D0E1008 -0F0E12100E11100D0E0D0D0E1211080D0D0B0D060D0D0C0A0D0D060C0C0D0C0B0D0D0B0D -0C1111060D0D0D110D110C0F0E08080A1717110F0D100E0E0E0C100D140D10100F0F1210 -11100D0F0D0D110E100F161610130E0F160F0D0D0C0A0D0D110B0D0D0C0D0F0D0D0D0D0B -0A0C120C0E0D12130D110C0B120D0D0D0A0B0B06060713130D0C0C0D0C0A15190D0B0B0B -0B0B0B0B00000000120D100D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0D0E0D0E -0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D08 -060806000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000110D110D110D110D110D110D110D120D120D -120D120D120D0F0D0F0D100D100D100D100D100D0D0C0D0C0D0C0D0C0D000D0016211600 -0808090A120E1810060A0A0E12080A080A0E0E0E0E0E0E0E0E0E0E0A0A1212120C160F0F -0F110E0D11110A0A0F0C1310110D110F0F0E100F160F0E0F0A0A0A120E0E0D0E0B0E0D08 -0E0E06080D06150E0D0E0E090B090E0D120D0D0C0E0A0E120F0F0F0E1011100D0D0D0D0D -0D0B0D0D0D0D060606060E0D0D0D0D0D0E0E0E0E0E0C0E0E0E0C0E0E1616150E0E121511 -161212120E0E0E1012100E0C0C12150D0C0912120E12100E0E120F0F1118160E160A0A06 -0612120D0E080E0A0A0E0E0E08060A210F0E0F0E0E0A0A0A0A111111101010060E0E0E0E -0E0E0E0E0E0E0C060F0B0F0C0A110D0E0D0D0E12120C0C0C1616160E110E0A0F0B0F0B0F -0B0E0E080F0D0F0D110E110E0D0E0D0C060C070C0A100E100E110D0F090F090F0B0E090E -09100E100E0F0C0F0C0C11120E0D0B0E0B110E0E0C1A130E10080C18070D08080D080F0D -0F0B0F0B0E0D0E0D0E0D110E110E110E110E110E0A060A060A060A060A080F0D0D0C0610 -0E100E110D110D0F090F0B0E09100E100E100E100E16120E0D070F0D1515110D0A161216 -1216120E0D060E0E1016161616050E0E0E0F11130C131114060F0F0F0E0F110A0F0F1310 -0E11110D0F0E0E0F13120A0E0E0B0E060E0E0D0A0E0E060D0D0E0D0B0D0E0B0E0D121206 -0E0D0E120E110C0F0F0A0A0A1918120F0E110F0F0F0C100E150E11110F10131111110D0F -0E0E120F1110171711140F0F17100D0E0D0A0E0D120C0E0E0D0E0F0E0D0E0E0C0B0D130D -0E0D13140E110D0C120D0D0E0A0C0B06060814140E0D0D0E0C0A161A0E0C0C0C0C0C0C0C -00000000120D110F000000000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0D0F0D0F0D0F0D0F -0D0F0D0F0D0F0D0F0D0F0D0F0D0F0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0A060A0600 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000110D110D110D110D110D110D110D120D120D120D120D -120D100E100E110F110F110F110F110F0E0D0E0D0E0D0E0D0E000E00172317000808090B -130F1911060A0A0F13080A080A0F0F0F0F0F0F0F0F0F0F0A0A1313130D17101010120F0D -12110A0A100D1311120E1210100E111017100E100A0A0A130F0F0E0E0C0E0E080E0F0608 -0E06160F0E0E0E0A0C090F0E130E0E0C0F0A0F131010100F1112110E0E0E0E0E0E0C0E0E -0E0E060606060F0E0E0E0E0E0F0F0F0F0F0C0F0F0F0D0F0E1717160F0F13161217131313 -0F0F0F1113100F0D0D13160E0D0913130F13110F0F1310101219170F170B0B060613130E -0E080F0A0A0E0E0F08060B23100F100F0F0A0A0A0A121212111111060F0F0F0F0F0F0F0F -0F0F0D06100C100C0A120E0E0E0E0E13130C0C0C1717170F120E0A100C100C100C0E0F08 -100E100E120F120F0E0F0E0D060D070D0B110F110F120E100A100A100C0E090E09110F11 -0F100C100C0D12130E0E0C0F0B120F0E0D1B140E11080D19070E08080E08100E100C100C -0F0E0F0E0F0E120E120E120E110F110F0A060A060A060A060A08100E0E0D06110F110F12 -0E120E100A100C0E09110F110F110F110F17130E0E07100E1616120E0A1713171317130E -0E060F0F1117171717050F0F0F1011140C141115061010100F10110A101013110F12110E -0F0E0E1014130A0E0E0C0F060F0E0E0B0F0E060E0E0F0E0C0E0E0C0F0E1313060F0E0F13 -0F120D10100A0A0A1A1913100E111010100D110F160E11111011131112110E100E0E1310 -121018181215101018100E0E0E0B0E0E120C0F0F0E0E100F0E0F0E0C0B0E130E0F0E1414 -0F120D0D130E0E0F0B0D0C06060815150F0E0E0F0D0B171B0F0C0C0C0C0C0C0C00000000 -130E1110000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E10 -0E100E100E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A060000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000120E120E120E120E120E120E120E130E130E130E130E130E110F -110F111011101110111011100E0E0E0E0E0E0E0E0E000F00182518000808090B140F1A11 -060B0B0F14090B090B0F0F0F0F0F0F0F0F0F0F0B0B1414140D18101011130F0E13120A0B -110D1412130E1311100F121018100F100B0B0B140F0F0E0F0D0F0E080F0F06080E06170F -0F0F0F0A0D090F0E140E0E0D0F0B0F141010110F1213120E0E0E0E0E0E0D0E0E0E0E0606 -06060F0F0F0F0F0F0F0F0F0F0F0D0F0F0F0D0F0F1818170F0F141713181414140F0F0F11 -14110F0D0D14170F0D0914140F14110F0F141010131A180F180B0B060614140E0F090F0B -0B0F0F0F09060B25100F100F0F0A0A0A0A131313121212060F0F0F0F0F0F0F0F0F0F0D06 -100D100D0B130F0F0E0F0F14140D0D0D1818180F130F0A100D110D110D0F0F09100E100E -1310130F0E0F0E0D060D070D0B120F120F130F110A110A100D0F090F09120F120F100D10 -0D0E13140F0F0C0F0C130F0F0D1C150F12090D1A080F09090F09100E110D110D0F0E0F0E -0F0E130F130F130F120F120F0A060A060A060A060B08110E0E0D06120F120F130F130F11 -0A100D0F09120F120F120F120F18140F0E07100E1717130F0B1814181418140F0E060F0F -1118181818050F0F0F1012150D151216061010110F10120A111014121013120E100F0F10 -15140A0F0F0C0F060F0F0E0B0F0F060E0E0F0E0C0F0F0C0F0E1414060F0F0F140F130E11 -100A0A0B1B1A14110F121010100E120F170F12121112141213120E110F0F141012111919 -1316101119110E0F0E0B0F0E130D0F0F0E0F110F0F0F0F0D0C0E140E0F0F15150F130E0D -140E0E0F0B0D0D06060816160F0E0E0F0E0B181C0F0D0D0D0D0D0D0D00000000130F1210 -000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E100E100E10 -0E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A06000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000130F130F130F130F130F130F130F130F130F130F130F130F120F120F1210 -12101210121012100F0E0F0E0F0E0F0E0F000F001B291B000A0A0B0C16111D14070C0C11 -160A0C0A0C111111111111111111110C0C1616160F1B12131315111015140B0C130F1714 -15101513121114121B1311130C0C0C16111110110E11100A1111070910071A111011110C -0E0B11101610100E110C1116121213111415141010101010100E10101010070707071110 -1010101011111111110F1111110F11111B1B1A1111161B151B161616111111141613110F -0F161A100F0B16161116141111161212151D1B111B0C0C0707161610110A110C0C111111 -0A070C2912111211110B0B0B0B15151514141407111111111111111111110F07120E130E -0C15111110101116160F0F0F1B1B1B1115110B120E130E130E11110A1210121015111511 -1011100F070F080F0C141114111510130C130C120E110B110B14111411130E130E0F1516 -11100E110D1511110F1F1811140A0F1D09100A0A100A1210130E130E1110111011101511 -15111511141114110B070B070B070B070C091310100F071411141115101510130C120E11 -0B14111411141114111B1611100812101B1A15100C1B161B161B161110071111131B1B1B -1B061111111214180F181419071213131113140B13131714121514101211111318160B11 -110E11071111100C111107101011100E10110E11101616071110111611150F13120B0B0C -1E1E161311141213130F14111A11141413141714151410131111161315131C1C15191213 -1C131011100D1110160E1111101113111011110E0D1017101110181811150F0F17101011 -0D0F0E0707091919111010110F0D1B20110F0F0F0F0F0F0F000000001610141200000000 -111111111111111111111111111111121012101210121012101210121012101210121012 -101210111011101110111011101110111011100B070B0700000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000015101510151015101510151015101610161016101610161014111411141214121412 -141214121110111011101110110011001D2C1D000A0A0B0D18121F15080D0D12180B0D0B -0D121212121212121212120D0D181818101D14141416121116160D0D1410181617111714 -141215141D1412140D0D0D18121211120F12110A1212090A11091C121212120C0F0B1211 -1811110F120D1218141414121617151111111111110F1111111109090909121212121212 -1212121212101212121012121D1D1C1212181D171D181818121312151815121010181C12 -100B18181218151313181414171F1C121D0D0D0808181811120A120D0D1212120B080D2C -14121412120D0D0D0D17171715151509121212121212121212121009140F140F0D161212 -11121218181010101D1D1D1216120D140F140F140F12120B141114111613161211121110 -091009100D161216121712140C140C140F120B120B15121512140F140F10171812120F12 -0E17121210221912150A101F09120A0A120A1411140F140F121112111211161216121612 -161216120D090D090D090D090D0A14111110091612161217121712140C140F120B151215 -12151215121D1812110914111D1C17120D1D181D181D181211081212151D1D1D1D061212 -12141619101A161A091414141214160D14141816131716111412121419180D12120F1209 -1212110D121209111113110F12120F12111818091212121812171014140D0D0D20201814 -12161414141016121C12161614151816171611141212181416151E1E171B14141E141112 -110E1211170F1313111214121212120F0E1118111312191A13171110181111120E100F09 -090A1B1B12111112100E1D22121010101010101000000000171216130000000012121212 -121212121212121212121214111411141114111411141114111411141114111411141112 -1112111211121112111211121112110D090D090000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000001712 -171217121712171217121712171217121712171217121512151216131613161316131613 -121112111211121112001200203120000B0B0D0F1A142217090F0F141A0C0F0C0F141414 -141414141414140F0F1A1A1A112016161619141219180D0F16121B181913191616141716 -201614160F0F0F1A141413141114130B1414090B13091F141314140E110D14131A131311 -140F141A1616161418191713131313131311131313130909090914131313131314141414 -141114141411141420201F14141A1F19201A1A1A141514171A171411111A1F13110D1A1A -141A1715151A161619221F14200F0F09091A1A13140C140F0F1414140C090F3116141614 -140D0D0D0D19191917171709141414141414141414141209161116110F1914141313141A -1A1111112020201419140D16111611161114140C16131613191519141314131209120912 -0F181418141913160E160E1611140D140D171417141611161112191A1413101410191414 -11251C14170C12220A130B0B130B16131611161114131413141319141914191418141814 -0D090D090D090D090F0B16131312091814181419131913160E1611140D17141714171417 -14201A14130A16131F1F19130F201A201A201A141309141417202020200714141416181C -111C181D091616171416180D16161B1815191813161414161C1A0D14141014091414130F -141409131314131013141014131A1A091413141A14191216160D0D0F24231A1614181616 -161218141F14181816181B181918131614141A1618172121191D161621171314130F1413 -1A111414131416141314141110131B1315131C1C151912121B1313140F121109090B1D1D -14131314120F20261411111111111111000000001A131815000000001414141414141414 -141414141414141613161316131613161316131613161316131613161316131413141314 -13141314131413141314130D090D09000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000191319131913 -19131913191319131A131A131A131A131A13171417141815181518151815181514131413 -1413141314001400213221000C0C0D0F1B152418090F0F151B0C0F0C0F15151515151515 -1515150F0F1B1B1B12211717171915131A190D0F17121C191A141A171714181721171417 -0F0F0F1B151514151115140C1515090B140920151415150E110D15141B141411150F151B -17171715191A181414141414141114141414090909091514141414141515151515121515 -1512151421212015151B201A211B1B1B151515181B171512121B2014120D1B1B151B1815 -151B17171A232015210F0F09091B1B14140C150F0F1515150C090F3217151715150D0D0D -0D1A1A1A18181809151515151515151515151309171117110F1A14141414151B1B121212 -212121151A150D17111711171115150C1714171419151A151415141209120A120F191519 -151A14170E170E1711140D140D1815181517111711131A1B15141115101A151512261D14 -180C12240B140C0C140C1714171117111514151415141A151A151A15191519150D090D09 -0D090D090F0B1714141209191519151A141A14170E1711140D1815181518151815211B14 -140A171420201A140F211B211B211B141409151518212121210715151517191D121D191E -091717171517190D17171C19151A1914161414171D1B0D14151115091514140F15150914 -1415141114151115131B1B091514151B151A1317170D0D0F25241B171419171717131915 -2014191917181C191A19141714141B17191822221A1E161722171414141015141A111515 -141417151415151210141C1415141D1D151A13121C14141510121109090B1E1E15141415 -131021271512121212121212000000001B14191600000000151515151515151515151515 -151515171417141714171417141714171417141714171417141714151415141514151415 -141514151415140D090D0900000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000001A141A141A141A141A14 -1A141A141B141B141B141B141B1418151815191619161916191619161414141414141414 -15001500253825000D0D0F111E18281B0A1111181E0D110D111818181818181818181811 -111E1E1E142519191A1D17151D1C10111A151F1C1D161D1A19171B19251917191111111E -181816171317160D17170A0D160A241716171710130F17161E1616131711171E19191A17 -1C1D1B16161616161613161616160A0A0A0A171616161616171717171814181818141817 -25252418181E241D251E1E1E1818181B1E1A1814141E2316140F1E1E181E1B18181E1919 -1D2824182511110A0A1E1E16170D1811111717180D0A11381917191717101010101D1D1D -1B1B1B0A18181818181818181818150A19131913111D17171616171E1E14141425252518 -1D171019131A131A1317180D191619161D181D17161716150A150B15111C171C171D161A -101A101913170F170F1B171B1719131913151D1E17171317121D1817142B20171B0D1528 -0C160D0D160D19161A131A131716171617161D171D171D171C171C17100A100A100A100A -110D1A1616150A1C171C171D161D161A101913170F1B171B171B171B17251E17160B1916 -24231D1611251E251E251E17160A18181B2525252508181818191C2014211C220A19191A -17191C101A191F1C181D1C1619171719201E10171713170A1717161117170A1616181613 -16171317161E1E0A1716171E171D151A1910101129291E1A171C191919151C1724171C1C -1A1B1F1C1D1C161A17171E191C1A26271D22191A261A1617161117161E13181816171A18 -1618171412161F1618162021181D15141F1616171114130A0A0D2222171616181511252B -1814141414141414000000001E161C180000000018181818181818181818181818181819 -161916191619161916191619161916191619161916191617161716171617161716171617 -161716100A100A0000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000001D161D161D161D161D161D161D16 -1E161E161E161E161E161B171B171C181C181C181C181C18171617161716171617001800 -2A402A000F0F1113221B2D1F0B13131B220F130F131B1B1B1B1B1B1B1B1B1B1313222222 -172A1D1D1D201B18212012131D17231F2119211D1D1A1F1D2A1D1A1D131313221B1B191A -161A190F1A1B0C0E190C291B191A1A1216111B19221919161B131B221D1D1D1B1F211F19 -191919191916191919190C0C0C0C1B19191919191B1B1B1B1B171B1B1B171B1A2A2A291B -1B222A212A2222221B1B1B1F221E1B1717222819171122221B221F1B1B221D1D212D291B -2A13130B0B2222191A0F1B13131A1A1B0F0B13401D1B1D1B1B121212122121211F1F1F0C -1B1B1B1B1B1B1B1B1B1B180C1D161D1613211A1A19191A22221717172A2A2A1B211A121D -161D161D161A1B0F1D191D19201B211B191B19170C170C17131F1B1F1B21191D121D121D -161A111A111F1B1F1B1D161D161821221A1A161A15211B1A1731251A1F0F172D0E190F0F -190F1D191D161D161B191B191B19211A211A211A201B201B120C120C120C120C130E1D19 -19170C1F1B1F1B211921191D121D161A111F1B1F1B1F1B1F1A2A221A190D1D192A282119 -132A222A222A221A190B1B1B1E2A2A2A2A091B1B1B1D2025172520260C1D1D1E1B1D2012 -1D1D231F1B2120191C1A1A1D2522121A1A161B0C1B1A19131B1A0C19191B1915191A151B -1923220C1B191B221B21181D1D1212132F2E221D1A201D1D1D181F1B291A20201D1F2320 -2120191D1A1A221D201E2B2C21271D1D2B1E191A19141A1922161B1B191A1D1B191B1A16 -151923191B1925251B2118172319191B1417160C0C0E26261B19191B18142A311B171717 -17171717000000002219201C000000001B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1D191D191D -191D191D191D191D191D191D191D191D191D191B191B191B191B191B191B191B191B1912 -0C120C000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000211921192119211921192119211922192219 -2219221922191F1B1F1B201C201C201C201C201C1A191A191A191A191A001B002E462E00 -10101215261D32210C15151D26111511151D1D1D1D1D1D1D1D1D1D1515262626192E1F20 -20231D1A24231215201A2722241C24201F1C221F2D201C20151515261D1D1C1D181D1B10 -1D1D0C101B0C2D1D1C1D1D1418121D1B261B1B181D151D261F1F201D2224221C1C1C1C1C -1C181B1B1B1B0C0C0C0C1D1C1C1C1C1C1D1D1D1D1D191D1D1D191D1D2E2E2D1D1D262E24 -2E2626261D1E1D2126211D1919262C1C191226261D26211E1E261F1F24312D1D2E15150C -0C26261B1C111D15151D1D1D110C15461F1D1F1D1D121212122424242222220C1D1D1D1D -1D1D1D1D1D1D1A0C1F18201815241C1C1B1C1D26261919192E2E2E1D241D121F18201820 -181D1D111F1C1F1C231E241D1B1D1B1A0C1A0E1A15221D221D241C201420141F181C121C -12221D221D201820181A24261D1C181D17241D1D1936281C22111A320F1C10101C101F1C -201820181D1B1D1B1D1B241D241D241D231D231D120C120C120C120C1510201B1B1A0C22 -1D221D241C241C20141F181C12221D221D221D221D2D261C1B0E1F1C2E2C241C152D262D -262D261C1B0C1D1D212E2E2E2E0A1D1D1D1F23281929232A0C1F20201D20231220202722 -1E24231C1F1C1C202826121C1D181D0C1D1D1B151D1D0C1B1B1D1B171C1D171D1B26250C -1D1C1D251D241A201F121215333326201C231F20201A221D2D1C23232022272324231C20 -1C1C262023212F30242A1F2030201C1C1B161D1B25181D1D1B1D201D1C1D1D19171B271B -1E1C28291D251A19271C1B1D1619180C0C102A2A1D1B1B1D1A162E361D19191919191919 -00000000251C231E000000001D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1F1C1F1C1F1C1F1C1F -1C1F1C1F1C1F1C1F1C1F1C1F1C1F1C1D1B1D1B1D1B1D1B1D1B1D1B1D1B1D1B120C120C00 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000241C241C241C241C241C241C241C251C251C251C251C -251C221D221D231E231E231E231E231E1C1B1C1B1C1B1C1B1D001D00324C320012121417 -292036240D17172029121712172020202020202020202017172929291B3222222327201D -27261517231C2A25271E2723221F252231221F221717172920201E1F1A1F1E121F200F11 -1E0F31201E1F1F151A14201E291E1E1A20172029222223202527251E1E1E1E1E1E1A1E1E -1E1E0F0F0F0F201E1E1E1E1E20202020201B2020201B201F323231202029322732292929 -202020242923201B1B29301E1B1429292029242020292222273531203217170D0D29291E -1F122017171F1F20120D174C2220222020151515152727272525250F2020202020202020 -20201C0F221A221A17271F1F1E1E1F29291B1B1B32323220271F15221A231A231A1F2012 -221E221E272027201E201E1C0F1C0F1C1725202520271E23152315221A1F141F14252025 -20221A221A1C27291F1E1A201928201F1B3A2C1F25121C36101E12121E12221E231A231A -201E201E201E271F271F271F26202620150F150F150F150F1711231E1E1C0F2520252027 -1E271E2315221A1F14252025202520252031291F1E0F221E3230271E173129312931291F -1E0D202024323232320B20202022262C1B2C262D0F2222232022261523222A252027261E -221F1F222C29151F1F1A200F201F1E17201F0F1E1E201E191E1F19201E29290F201E2029 -20281C2322151517383729231F262222221C2520311F262623252A2627261E231F1F2922 -26243434272E222334231E1F1E181F1E281A20201E1F23201E201F1B191E2A1E201E2C2C -20281D1B2A1E1E20181B1A0F0F112E2E201E1E201C18323B201B1B1B1B1B1B1B00000000 -281E262100000000202020202020202020202020202020221E221E221E221E221E221E22 -1E221E221E221E221E221E201E201E201E201E201E201E201E201E150F150F0000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000271E271E271E271E271E271E271E281E281E281E281E281E2520 -2520262126212621262126211F1E1F1E1F1E1F1E1F00200036523600131315192C223A27 -0F1919222C141914192222222222222222222219192C2C2C1D362525262A221F2A291719 -251E2E282B212B2625212825352521251919192C222220221C22201322220F13200F3522 -212222171C1522202C20201C2219222C25252622282B282020202020201C202020200F0F -0F0F22212121212122222222221D2222221D222136363522222C362B362C2C2C22232227 -2C26221D1D2C34211D152C2C222C2723232C25252B3A35223619190F0F2C2C2021142219 -19222222140F19522522252222171717172B2B2B2828280F222222222222222222221E0F -251C251C192A21212021222C2C1D1D1D363636222A2217251C261C261C22221425202520 -2A232A222022201E0F1E101E19282228222B2126172617251C2115211528222822251C25 -1C1F2B2C22211C221B2B22221D3F2F2127141E3A1121131321132520261C261C22202220 -22202A222A222A2229222922170F170F170F170F19132520201E0F282228222B212B2126 -17251C21152822282228222822352C212010252036342B2119352C352C352C21200F2222 -27363636360B22222225292F1D3029310F2525262225291725252E28232B292124212125 -2F2C1721221C220F2221201922220F202023201B21221B22202C2C0F2221222C222B1F26 -251717193C3C2C2521292525251F28223521292925282E292B29212621212C2529263838 -2A32252638262021201922202B1C2323202226222122221D1B202D2023212F30232B1F1E -2D202022191E1C0F0F133131222020221F19363F221D1D1D1D1D1D1D000000002C212924 -000000002222222222222222222222222222222520252025202520252025202520252025 -2025202520252022202220222022202220222022202220170F170F000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000002B212B212B212B212B212B212B212C212C212C212C212C21282228222924 -29242924292429242120212021202120220022003A583A001414171B2F253E2A101A1A25 -2F151A151A252525252525252525251A1A2F2F2F203A2828292D25212D2C181A2820312B -2E232E2828242A28392824281A1A1A2F252523241E24231424250F14220F382523242419 -1E1725222F22221E251A252F282829252B2E2A2323232323231E232323230F0F0F0F2523 -2323232325252525251F2525252025243A3A3925252F392E3A2F2F2F2525252A2F292520 -202F372320172F2F252F2A25252F28282E3E39253A1B1B10102F2F222415251A1A242425 -15101B582825282525181818182E2E2E2A2A2A0F25252525252525252525210F281E281E -1A2D23242223242F2F1F1F1F3A3A3A252D2418281E291E291E242515282328232D262D25 -232523200F2011201B2B252B252E2328192819281E241724172A252A25281E281E212E30 -24231E251D2E2524204333242A15203E1323151523152823291E291E2523252325232D24 -2D242D242C252C25180F180F180F180F1A14282222200F2B252B252E232E232819281E24 -172A252A252A252A25392F242211282339372E231A392F392F392F24221025252A3A3A3A -3A0C252525282C321F332C350F28282925282C182828312B262E2C2327242428332F1824 -241E250F2524221B25240F222225221D23241D2522302F0F2523252F252E21292818181A -41402F28242C282828212B2538242C2C282B312C2E2C2329242430282C293C3D2D352729 -3C292324231B24232E1E2525222428252325241F1D22312225233333252E212031232325 -1B201E0F0F14353525222225211B3A44251F1F1F1F1F1F1F000000002F232C2600000000 -252525252525252525252525252525282328232823282328232823282328232823282328 -23282325232523252325232523252325232523180F180F00000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00002E232E232E232E232E232E232E232F232F232F232F232F232A252A252C262C262C26 -2C262C262422242224222422240025004366430018181A1F372B4831121E1E2B37181E18 -1E2B2B2B2B2B2B2B2B2B2B1E1E37373725432E2E2F342A2734321D1E2E2538323528352F -2E29312E422E292E1E1E1E372B2B282A232A28182A2A12172812412A292A2A1D231A2A28 -372828232B1E2B372E2E2F2A3235312828282828282328282828121212122A2929292929 -2A2A2A2A2B242B2B2B252B2A4343412B2B374335433737372B2B2B31372F2B2525374029 -251A37372B37312B2B372E2E3548422B431F1F121237372829182B1E1E2A2A2B18121F66 -2E2A2E2A2A1D1D1D1D353535313131122B2B2B2B2B2B2B2B2B2B26122E232E231E342929 -28292A37372424244343432B342A1D2E232F232F232A2B182E282E28342B342A282A2825 -122514251F322A322A35292F1D2F1D2E23291A291A312A312A2E232E232635372A29222A -21352B2A254E3A29311825481628181828182E282F232F232A282A282A28342A342A342A -322A322A1D121D121D121D121E172E28282512322A322A352935292F1D2E23291A312A31 -2A312A312A42372928142E28434035291E4237423742372928122B2B30434343430E2B2B -2B2E323A243B323D122E2E2F2A2E321D2E2E38322B3532282D29292E3A371D292A222A12 -2A2A281F2A2A1228282B2822292A222A283737122A292A372A35262F2E1D1D1E4B4A372E -29322E2E2E26322A412932322E3138323532282F2929372E33304546343E2E2F452F2829 -28202A2835232B2B282A2F2B292B2A24212838282B293B3B2B3526253828282A20252312 -12173D3D2A28282B2620434F2B24242424242424000000003629332C000000002B2B2B2B -2B2B2B2B2B2B2B2B2B2B2B2E282E282E282E282E282E282E282E282E282E282E282E282A -282A282A282A282A282A282A282A281D121D120000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000003529 -35293529352935293529352936293629362936293629312A312A332C332C332C332C332C -29282928292829282A002B004B724B001A1A1E223D305137142222303D1B221B22303030 -3030303030303022223D3D3D294B3333343A2F2B3A381F22342A3F383B2D3B34332E3733 -4A332E332222223D30302D2F272F2D1A2F2F151A2C15492F2E2F2F20271E2F2C3D2C2C27 -3022303D3333342F383B372D2D2D2D2D2D272D2D2D2D151515152F2E2E2E2E2E2F2F2F2F -302930303029302F4B4B4930303D4A3B4B3D3D3D303030373D353029293D482E291E3D3D -303D3730303D33333B504A304B222214143D3D2C2E1B3022222F2F301B142272332F332F -2F1F1F1F1F3B3B3B37373715303030303030303030302A1533273327223A2E2E2C2D2F3D -3D2929294B4B4B303A2F1F3327342734272F301B332D332D3A313A2F2D2F2D2A152A162A -22382F382F3B2E3420342033272E1E2E1E372F372F332733272A3B3D2F2E262F253B302F -2957412E371B2A51182D1B1B2D1B332D342734272F2D2F2D2F2D3A2F3A2F3A2F382F382F -1F151F151F151F15221A342C2C2A15382F382F3B2E3B2E342033272E1E372F372F372F37 -2F4A3D2E2C17332D4A483B2E224A3D4A3D4A3D2E2C143030364B4B4B4B10303030333841 -28423944153333352F33381F34333F38313B382D322E2E33413D1F2E2F262F152F2F2C22 -2F2F152C2C302C262E2F262F2C3E3D152F2E2F3D2F3B2A35331F1F2254533D342E383333 -332A382F492E383834373F383B382D342E2E3D3339354D4E3B4533354E352D2E2D232F2D -3C2730302C2F34302E302F28252C3F2C302D4243303C2B293F2D2D2F23292715151A4545 -2F2C2C302A234B583029292929292929000000003D2E3931000000003030303030303030 -30303030303030332D332D332D332D332D332D332D332D332D332D332D332D2F2D2F2D2F -2D2F2D2F2D2F2D2F2D2F2D1F151F15000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000003B2E3B2E3B2E -3B2E3B2E3B2E3B2E3D2E3D2E3D2E3D2E3D2E372F372F393139313931393139312E2C2E2C -2E2C2E2C2F003000537E53001D1D21264435593C16262635441E261E2635353535353535 -35353526264444442D5339393A403430403E22263A2E463E4132413A39333D3952393339 -26262644353532342B34311D3435181D31185135323434232B2135314431312C35263544 -39393A343E413D3232323232322B313131311818181835323232323235353535352D3535 -352D35335353513535445241534444443535353C443B352D2D444F322D21444435443C36 -36443939415951355326261616444431331E3526263434351E16267E3934393434222222 -224141413D3D3D18353535353535353535352F18392B392C2640333331323444442D2D2D -53535335403422392B3A2B3A2B34351E39323932403640343134312E182E192E263E353E -3541323A233A23392B332133213D353D35392C392C2F414434322B34294235342D614833 -3D1E2E591B321D1D321D39323A2B3A2B3431343134314034403440343E353E3522182218 -22182218261D3A31312E183E353E35413241323A23392B33213D353D353D353D34524433 -31193932524F41322652445244524433311635353C5353535312353535393E482D493F4B -1839393A34393E223A39463E36413E323833333948442233342B35183433312635341831 -3135312A32342A34314444183432344434422F3A392222265D5C443A333E3939392F3E34 -51333E3E3A3D463E413E323A333344393F3B5657414C393A563B323331273431422C3535 -31343A353235342C293146313632494A35422F2D46323135272D2B18181D4C4C35313135 -2F275361352D2D2D2D2D2D2D0000000043323F3700000000353535353535353535353535 -353535393239323932393239323932393239323932393239323932343134313431343134 -313431343134312218221800000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000041324132413241324132 -41324132433243324332433243323D353D353F373F373F373F373F373331333133313331 -340035005C8C5C002020242A4B3A6343192A2A3A4B212A212A3A3A3A3A3A3A3A3A3A3A2A -2A4B4B4B325C3F3F40473A354745272A40334E45483748403F39433F5B3F393F2A2A2A4B -3A3A373930393720393A18203618593A3839392730243A364B3636303A2A3A4B3F3F403A -4548433737373737373037373737181818183A38383838383A3A3A3A3A323A3A3A323A39 -5C5C5A3A3A4B5B485C4B4B4B3A3B3A434B413A32324B583832244B4B3A4B433B3B4B3F3F -48625A3A5C2A2A19194B4B3639213A2A2A3A3A3A21192A8C3F3A3F3A3A27272727484848 -434343183A3A3A3A3A3A3A3A3A3A34183F303F302A4738393638394B4B3232325C5C5C3A -4739273F3040304030393A213F373F37473C473A373A373318331B332A453A453A483840 -2740273F3039243924433A433A3F303F3034484B39382F3A2E493A39326B503843213363 -1E38212138213F37403040303A373A373A37473947394739453A453A2718271827182718 -2A204036363318453A453A4838483840273F303924433A433A433A433A5B4B39361C3F37 -5B5848382A5B4B5B4B5B4B3936193A3A425C5C5C5C133A3A3A3F455032514554183F3F41 -3A3F4527403F4E453C4845373E39393F504B2739392F3A183A39362A3A391836363B362E -383A2F3A364C4B183A383A4B3A4934403F27272A67654B4039453F3F3F34453A5A394545 -40444E454845374039394B3F46425F6048553F415F413739372B393749303B3B3639403B -383B39312E364D363B3851523B4935324D37373A2B323018182054543A36363B342B5C6C -3B32323232323232000000004A38463D000000003A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3F -373F373F373F373F373F373F373F373F373F373F373F373A373A373A373A373A373A373A -373A37271827180000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000004838483848384838483848384838 -4A384A384A384A384A38433A433A463D463D463D463D463D393639363936393639003A00 -649864002323272E52406C491B2D2D4052242D242D404040404040404040402D2D525252 -37644445464D3F394E4B2A2D4538544B4F3C4F46443E494463453E452D2D2D5240403C3E -343E3C233E3F1B223B1B613F3D3E3E2B34273F3B523B3B353F2D3F524444463F4B4F493C -3C3C3C3C3C343C3C3C3C1B1B1B1B3F3D3D3D3D3D3F3F3F3F403640404037403E64646240 -4052634F6452525240404049524740373752603D3727525240524940405244444F6B6240 -642E2E1B1B52523B3E24402D2D3F3F40241B2E98443F443F3F2A2A2A2A4F4F4F4949491B -40404040404040404040381B443445352D4E3D3E3B3D3E5252363636646464404E3E2A44 -34463446343E4024443C443C4D414E3F3C3F3C381B381E382E4B3F4B3F4F3D462B462B44 -343E273E27493F493F45354535394F523E3D333F324F403E3774573D4924386C203C2323 -3C23443C463446343F3C3F3C3F3C4E3E4E3E4E3E4B3F4B3F2A1B2A1B2A1B2A1B2D22453B -3B381B4B3F4B3F4F3D4F3D462B44343E27493F493F493F493F63523E3B1E443C63604F3D -2D6352635263523E3B1B4040486464646415404040444B5736584B5B1B4445463F454B2A -4545544B414F4B3C433E3E4557522A3E3E333F1B3F3E3B2E3F3E1B3B3B403B323D3F333F -3B52511B3F3D3F513F4F3946442A2A2D706E52453E4B444545394B3F613E4B4B4549544B -4F4B3C463E3E52454C4767694E5C444667473C3D3B2F3E3C503440403B3E46403D403E35 -323B543B403D5859404F3937543C3C3F2F37341B1B225B5B3F3B3B40392F647540363636 -3636363600000000513D4C4200000000404040404040404040404040404040443C443C44 -3C443C443C443C443C443C443C443C443C443C3F3C3F3C3F3C3F3C3F3C3F3C3F3C3F3C2A -1B2A1B000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000004F3D4F3D4F3D4F3D4F3D4F3D4F3D513D513D -513D513D513D493F493F4C424C424C424C424C423E3B3E3B3E3B3E3B3E00400000020100 -000007000600000300070014B706020400060204002FCDDDCD002FCDDDCD313021112111 -2521112101000600FA800500FB000600FA0080050000000201230000020305D100030007 -0027401703030202075505080F0901005D042B035D0F051F0502052F5DE4FDE45D003FED -332F3F3130010323031323353302031AAA1CD6CCCC05D1FBC90437FA2FD3000200A803D1 -0304061400030007002640150206060307010F09400902032C0040000100042C072FED33 -5D2FED5D003F3C332F3C3130010323032303230303042B842BA82B842B0614FDBD0243FD -BD024300000200C3000005C905D1001B001F00B1407140215609740570097B137B167B17 -7B1A080A091E1D160F1501671501151E0C0F1013140B1407081F1C17001801681801181E -0502011A06190662191462700B010B03110B111903040D001B011B1B0D171A011D0410B5 -131E020509040CB50F070F1318040B00140114030F0B4F0B020B08003F5D3F5D1217392F -ED17392FED1739012F332F5D1217392F2F2F5DE42FE4313087C0C0C0C0FD5D71C0C0C0C0 -C08710C0C0C0C0FD5D71C0C0C0C0C0015D01210321152103231321032313213521132135 -2113330321133303210521032105C9FEB35C0134FEA9688168FEF2688168FED6014D5CFE -CC0157698169010E698169012AFE35FEEE5E011203A4FE8887FE5B01A5FE5B01A5870178 -8701A6FE5A01A6FE5A85FE840003009BFE9704880628002C0033003A00BC408D7D087E16 -70197620702C7A36060E16012B1B16122B230D350D3C163C24352B430D4A164C24432B5A -08532053335A356B0865206529632B6A30643A171D40090B371D382E11221D2226471B18 -312D1227373400030A067F1E011E050A11470A05060F3C1F3C0221210334207F00010031 -201818063F094F09020900112D1B1E263706031E0930064006700603062F5D33ED173932 -2F5D12392FED2F5DED12392F5D002F3333ED2F2F2F5D121739ED33332F1139392F2B3130 -5D5D011406071123112E012735331E01171E0117112E01272E01353436371133111E0117 -15232E0127111E01171E0125110E0115141601342627113E010488F2C47684E855101362 -2E348B4F28441DA38EE9D17665D4480E4BA3851E461A95A3FDD46B926C02007584788101 -7C9BCD13FE960165013127C60E351113210301B1080F0829A57994CC110110FEF2022C1D -C42E4709FE51051105209CE8019D08655A5B5CFE585E5719FE620C6200050095FFE30807 -05ED000B000F001B00270033009C40720908060A0918061A0F351808170A1818171A2908 -260A2918261A460D480F4035560D580F680E13791F7625792B76310425512F034F030203 -031F5109020F030E082B51201940190219193151130A4F0C400E020C0E2E2A0016011616 -282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D123939ED33 -2F5DED2F2F5D003FED332F5DED3F3F3FED332F5DED5D3130015D01140623222635343633 -321625012309011406232226353436333216013426232206151416333236013426232206 -1514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6BAFABB59 -64665858666459049359646658586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADC -DDE0DADA01B8AC8888ADAD8787FE17AC8888ADAD878700030073FFE1061305F0000B0018 -004500E1406F090F190F3C0C3015301D352D3E3D4F1A471D4F44791C0B6A25603F7B0576 -087B0F761D7A25703E703F090508062A06371408161D142A1437153F290C2A1D26373008 -300A4008400A490C41144F1C431D46204C21412D413C5108590D5B25690566086B0F601D -1E3F0C161D20231903B8FFC0403B12173703AA190D2C093E05233502163F230A1E082C0D -3E032F00143806142F3F0C4513201D2F38041A26001E011E1E45140D1A011A1A13152673 -4610F6ED332F5DED332F5D11121739111239392FED2FED121739003F3FED3F121739ED2B -2F12393912393931305D5D015D013426232206151416173E0113010E01070E0115141633 -323601151406070123270E01232224353436373E01372E01353436373E01333216151406 -070E0107013E0137362635031871585C744F836265C2FE221F3E1F1C24AB9D5DB7016B32 -3C017AF6E573F07FD0FEED34232368356E61353532A161ADD6181D20765E01730E0E0102 -0104A75F6D7B594B744F2387FD0001D20F312A276E4592B35B02AE6060F06DFE90E08E71 -F3C55C86312F531F48926F437932303CAF862C6F2C315A20FE96286034388A30000100A4 -03D10182061400030015400A020203010F0501002C032FED5D003F332F31300103230301 -822B882B0614FDBD0243000100B5FE64030F061400150048403709010907190119072803 -28054F01480348054F075F015F076F016F077F01780278067F07120701010C7A04010830 -000100000F1F04881610F4ED332F5D3C5D003F3F3130015D012326021110123733150E01 -070602151412171E0117030FE5B1C4C4B1E551933F3C4B493E3C9A4DFE64CB01E0012D01 -2D01E0CB0A49BF7F7BFED8A4ABFEE4807BC7450000010093FE6402ED06140015004E403D -060306131503151326012603261326154701400340134715500350136003601379007602 -700370137614151201040C750001123F040104040B1F00921710F6ED332F5D3C5D003F3F -3130015D0110020723353E01373612353402272E01273533161202EDC4B1E54D9B3B3E49 -4A3D3F9351E5B1C4023CFED3FE20CB0A45C77B80011CABA401287B7FBF490ACBFE200001 -00A70276047106140011009040094F1301114009103708B8FFC040580910375B025B0554 -0B540E6B026B05640B640E7B027B05730B730E0C01060F0A0B0E08110502060C064F0450 -0402040A0F0C01040C010F131F130200110D4010011008070C4F090109100E020304050B -060D2809700C010C2F5D33ED1739322F5D1239392F5D1239395D003F335D332F5D331217 -392F332F3331305D012B2B5D01072513231305272D013705033303251705047140FE9606 -8105FE9741017DFE8341016A068107016B40FE8403776ED5FE980168D66ECFCF6ED50167 -FE99D46ECD00000100D2001B05BA04FD000B0039402303AC01045408AC0A0F070107400D -01300D400D0200AB0A800101012A05AB07400401042F5D3CE4FD5D3CE45D5D002F5D3CE4 -FD3CE4313001211123112135211133112105BAFDDFA6FDDF0221A60221023CFDDF0221A0 -0221FDDF00010093FE8E023F011D0003003540261A012A012B0235003902450048025500 -590264007400C5030C0202035604000004021A0202022F5D332F0010F4322F3130015D09 -012313023FFEE692AE011DFD71028F00000100990231030902E600030020401401420F02 -01020F054F004F055F005F05050000022F332F5D002F5DED3130012135210309FD900270 -0231B500000100FD000001EC011D00030016400C02560108002D2F013F0102012F5DED00 -3FED31302123113301ECEFEF011D0001FFE2FED0035C0614000300364025030100050116 -01250138004900440156016701770186010A011202032F02010200010000022F332F003F -2F5D31300187ED5D87C009012301035CFD33AD02CA0614F8BC07440000020089FFE1048F -05EF000B0023004140303601390B340C3B123B18341E4501490B440C4B124B18441E0C15 -4909022149030A0F21009E250F251F25021B2106982410F6ED5D10F6ED003FED3FED3130 -5D011002212002111012212012013E01353426272E01232206070E01151416171E013332 -36048FFBFEF8FEF4F7FA0109010CF7FEF92319192423795F5E7B24221916242179645E7C -02E9FE6FFE89017C018A018D017BFE7FFCB551DB9A98E04E4D4E4E4F4AEE8E9CD2534E52 -4E00000101160000043C05D6000F003A4023054606060C030E034801080F111F11020502 -1F0F010F0F0C0E20023F036F03700303032F5D33ED39322F5D2F335D003FFD323F332FED -3130290135211121353236373E0137331121043CFCDA0136FECA3F90252E35049B013098 -03E6881514194D41FAC2000100A10000049105F000200097407B501F601F020503061116 -03151124113B05380D350E3F1D3F1E391F4B05480D450E4F1D4F1E491F5F035D045D055B -0956115F195E1B5D1C5F1D5F1E6A036406651162156F1E700274117F1A7F1C7F1E25000F -100F2D082F1C300F400F060F0F0B4A1302021F4A01081F0208211616209E220F221F2202 -101002992110F6322F5D10F6322FED1239003FFD323FED332F5D31305D015D2901353E01 -373E013534262322060723353E01333204151406070E01070E0107210491FC1069D35BC0 -8E99895BD4650A47ED6FE501042B2A27694B6BE4630321D15AB459BADB7F74834042D223 -3ADDBD5593423E784969C554000100A7FFE1047C05F0003D009540700B0B052F1A0B152F -290B262F293C3C0B35143122342F4A0B45144322432F56015905590B552F6A0B662F6A3C -780B762F74357B3C1A343A443A023B3A1E491F012D112D022D2D294A1F0931020F0D1F0D -020D0D114A090A2321371E2E1621032E1E3A37040C03A03F0F3F1F3F020C9A3E10E65D10 -E611173910ED2F2F2FED003FED332F5D3F1239ED332F5D2FFD39395D31305D011E011514 -06070E012322262735331E01333236373E01353426272E012B0135333236353426272E01 -2322060723353E01333216171E0115140607151E01040E303E4A434BCB797CF04D0F55E6 -6B3F8E2C2E2D332D2D804A5A4698B52E292B623E5FD65F0A47ED6F6DA643484AAF77307C -02CD2B826766AA3F46433B23D1384A2A292C6A5150691E1F17A67F7A36511A1A14443ED1 -233B282C30885B7CB9180E0833000002004D000004B305D1000A000D00684041040D140D -240D340D440D700D060C0D480606070C0607090D4901050503070303083F0A4F0A020A0F -0F1F0F02070C04200A090D064F060101010F061F063F0603062F5D332F5D12393333ED39 -395D2F5D003F3F12392F3CFD321239393130018710FD04C0015D01231123112135013311 -3321110104B3DDC0FD3702D1B8DDFE63FDBF01A3FE5D01A3E60348FC7202A0FD60000001 -00BBFFE1048505D1002A0070404E0A081A082B083D0835113D164B0844115A0854296A08 -7A080C1D1D1A490F251F2540250325214A25061E020F0A1F0A020A0A0E4A060A2022204F -1D011D142100201D09009F2C0F2C1F2C02099B2B10E65D10E611393910ED2F5DED2F003F -ED332F5D3F1239ED2F5DFD322F31305D011406070E012322262735331E01333236373E01 -353426272E012322060711211521113E01333216171E0104854C4248C7837AE24E0E52DC -6A4785342C2D352F34955C58A33B0380FD412B5A2179B64C505801D968BE41464B3324D3 -344928322B784F4D6A20261F180C02FFAFFE740404293437AE0000020089FFE104A705ED -0022003700644044060D160D3925333133374925423143375F01560D5020502165217531 -0E1A0329491D1313174A1D030F023549030A1A2C2F122321001209009C390F391F39022F -2109983810F6ED5D10E6113910ED2F123939003FED3F1239FD322F2FED123931305D0114 -002322262726023534123736243332161715232E01232200073E01333216171E01073426 -272E01232206070E01151416171E0133323604A7FED5D96EB445565D555D580116B93B50 -290A1C713BD7FF001554A36B5F914C5859CB373F2E703D55924D020241392E6B3F91A601 -E3E3FEE14443530112C1C6013277717F0A0DBF0F1BFEF3E5333523353DBA8D5D7A2D2014 -282A16291F9EB7352C29B1000001009A0000049505D10006004F403209010A0224014801 -4B0258027903070301000120020203000002034A050302080F081F087B02030300020204 -0F00010000042F332F5D12392F12395D003F3FFD11392F3130018710ED87C0015D090123 -012135210495FD5ED602CDFCB003FB04F2FB0E0522AF0003007AFFDE049C05F300190028 -0037009440702D2B3415332234273433441541224427453350155B195A1B5A1F54225F2B -592C5F31543354376008620E6212621960236027760E76127B2C86121DA926A62F022616 -0A2F04031D4710023548030A1A200013011313002F0A0D292100162620009D390F391F39 -0220210D0D322106973810F6ED332FED5D10E411393910ED11393911332F71ED003FED3F -ED1217395D31305D01140023222435343637352E0135342433320415140607151E010334 -26232206151416171E01173E01133426272E01270E01151416333236049CFED3E4F2FEE1 -908378730114D5DF010A7E7A8C94EDA5807EA15152258B42634C1F51762F705D5A6DBA8F -92AF019FC1FF00FAC37CC93B06409872A8E0D6A565C337063CB0024F6B7F786648692912 -3A13428EFD735C6F3816262231A86A87B09600020071FFE3048F05EF0022003700644045 -0804190429043C253C2B352E4C254C2B432E58045F175D18521B70017B250F111D324914 -294914061D020A0A0E4A060A351109232100091A009E390F391F39022C211A963810F6ED -5D10E6113910ED2F3939003FFD322F3F1239ED2FED123931305D01140207060423222627 -35331E01333212370E01232226272E01353400333216171612073426272E012322061514 -16171E01333236373E01048F595A5BFEEEB9345C240A1D6A41DDFB145DA4615C954B5859 -012CD86CB845555CCA40382F6C3F90A736402D6C424EA04601030342C3FEC270727C0B0C -BF0F1B0109E9383024343DBC83E4011E434353FEFBA49BBC342D27B4A35F782D1F152A28 -15290002015A00000249045D00030007001E4010015602050656050807002D0600010101 -2F5D3CFD3C003FED3FED313001231133112311330249EFEFEFEF0340011DFBA3011D0002 -00E6FE8E0292045D00030007004C40370A050A061A051A062A052B063504390645044806 -5504590664047404C5070F01560205060607560806063F044F04020404002D000101012F -5DFD322F5D332F0010F4322F3FED3130015D01231133130123130249EFEF49FEE692AE03 -40011DFCC0FD71028F00000100FE004D058004CB0006005E401073050105045403020306 -540001002C00B8FFE240260A1837031E0A1837031F002F0002030F000100400801300840 -080204050100004001500102012F5D332F1239395D5D002F5D335D2F2B2B31304B535887 -10FD8710FD05C059015D250135011509010580FB7E0482FC72038E4D02017C0201B4FE75 -FE75000200F5016A059703AE00030007003540200554060154060F020102400901300940 -09020405012F004000020000400101012F5D332F5D1239395D5D002F5D33ED2FED313001 -213521112135210597FB5E04A2FB5E04A2030EA0FDBCA0000001010C004D058E04CB0006 -006040107C030103045405050602540101002C01B8FFE240280A1837051E0A1837051F01 -2F0102050F010101400801300840080203050100002F013001400103012F5D332F123939 -5D5D002F5D335D2F2B2B31304B53588710FD8710FD05C059015D09013509013501058EFB -7E038EFC720482024EFDFFB4018B018BB4FDFF00000200A0000003ED05EF001C00200069 -40470F221F2224140335184F024F034F0544185C0554186904691064187418741C0C0870 -090109061A1E161612341A02081F551E08202B1F1F061F7F0901090F1509172000010000 -172F332F5D1239ED2F5DED332FED003FED333FFD322F111239395D2F31305D015D011406 -070E01071523113E01373E013534262322060723353E013332160123353303ED46393892 -52B34197303A4099796CC1380A46D760D7F9FE75CCCC047362993B39642FE1013125582D -346F56716F4423CC1B2BD1FAE2D3000200B0FF1E074E05EF0042004F00D640A206020F04 -0B050A090F1B0E1C0F3F0F4016021F041C051F1B1F1C142214271F3F1F4125022C042C05 -2F1B2F1C242220272F3F2F414740444856481D0A05052759496E09650D691A6821652766 -3F664174167B1B70277439743B0F120511081247520E1440151B371404044D53082D2D2A -510E083D311E51313D020F2D012D051143122D144A123F0B010B0F512051021829140B37 -0F0020007F000300002429376B5010F6ED332F5D123939ED5D2F5DED2F33FD32322F5D00 -3F33ED2F123939ED332F2FED332FCD2B2FED331239392F31305D015D0114020721270E01 -23222635341233321617353311333E013534022726242322040706021514121716043332 -3637150E0123222427260235341237362433320417161201112E01232206151416333236 -074E514BFE481B4A8858A8C9F6AB4970419FF32A2B5B5858FEFCA5A0FEF75F606D685F63 -010A9D56B75461A859BAFEC2727380867474013EB5C401346A6A71FD8F3F64398192747B -438602978BFEFC6B743C40FEE4E3010E212130FCB64BE159A4010C606067746262FEEF9A -A5FEEF61656716188E150F7F72730142C3B9013F7575867C7070FEC5FE4002061D19B4A6 -A3A73E000002001A0000055E05D10007000A009840694009014A0645070209090A080287 -01010114000700090A0387040104140505067C067307020334300A400A700A030A090A06 -03017A050105080F0C0106070903050C002400390042005A006A0074000700006E0C0F0C -010A052B0536054D05550565057B050705640B10E65D5D10F62F5D1217395D003F5D3C3F -39392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D005D2123032103230121 -130901055ED392FD7C92C9021E01087CFEFBFEFA019FFE6105D1FC7802DBFD25000300C8 -0000052B05D100150024003300524033050C150C270C550256157F190612112C341E1E07 -1D3408032D3407081615122C0F0F0725150071350F354035021E2C14076C3410F6FD325D -10F6ED12392F1239ED003FED3FED12392FED39393130015D011406070E01232111213216 -171E0115140607151E01013426272E012B0111213236373E01133426272E012321112132 -36373E01052B544754C99BFDF001B9A3A24A524A6C5A97AEFEB324282F8663EC01005D6E -2F2F277F3647308962FEC9010682A635383401CA6FAA37423805D118262B875E6A952D08 -1FCB0204364A171B0DFE52131E1E5FFD9A5A6A25190FFDD61B24276400010073FFE50546 -05EC002A0061404A05010D09061416011B0914152515361543145B08580A580E5B105B28 -600361147002760F70141316161A3412022A2A2634060A1600712C0F2C010F2C1F2C2F2C -3F2C6F2C0520150C682B10F6ED5D5D10F63C003FED332F3FED332F3130015D250E01070E -012322242726023534123736243332161715232E01232206070E01151416171E01333236 -373305463759483D8F56A2FEF762606C68625F010DA478EF920F7BF28A71B547454D5543 -46BB688FFA6D0E6C182A17131B5B615F0125C2B801226461663A49EB675E494D4BE5969D -E2474A476262000200C8000005B205D1000E001D003A4027391249126902680D04163408 -03173407087600010F1500741F0F1F2F1F401F601F041714076C1E10F6ED5D10F6ED5D00 -3FED3FED3130015D011402070E01232111213204171612073426272E012B011133323637 -3E0105B2B19366FBCDFE880174DA01015998AACF7A7958C68ABABA8FD5596F6F02E7CBFE -B65B3F3805D13F375FFEC4D6AFF0453227FB832A3947E800000100C80000049D05D1000B -003B402309350006100602060601053502030A350108040008010800730D0F0D01060914 -016C0C10F6FD325D10F63C5D3C003FED3FED12392F71ED31302901112115211121152111 -21049DFC2B03D5FCF1030FFCF1030F05D1B0FE68B0FDD700000100C80000047F05D10009 -0034401E053502020701350803070800034F0B02030300640B0F0B01020514076C0A10F6 -FD325D10F4322F5D003F3FED12392FED313001211121152111231121047FFD0F0287FD79 -C603B70521FE5CB0FD3305D100010073FFE305A205EC00240069404907010906060E1D06 -130E210E350E4901410E510E6506650B630E740E741C0F223540230123230C0310101734 -0C021D34030A7609012210220910216C0075260F264026021A1509682510F6ED5D10F6ED -3312392F2F5D003FED3FED332F1112392F5DED3130015D25060423222427260235100021 -32041715232E01272E01232200111000213236371121352105A27AFEDF87AEFEDE666770 -01A1016C7F010999121F763945AF6FFAFEDD0130010660BF48FE7102536E385360606101 -23C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAE00000100C80000053B -05D1000B003A4023033500081008020808050A070301050809021400780D0F0D400D500D -03080314056C0C10F6FD325D10F6FD32003F3C3F3C12392F71ED31302123112111231133 -11211133053BC6FD19C6C602E7C602D9FD2705D1FDB8024800010089000002D505D1000B -002E401909043206030A033201080D6D0A080B5A0A140305025A036D0C10F6F43210FDF4 -3210E6003FFD323FFD32313029013533112335211523113302D5FDB4C3C3024CC3C39804 -A19898FB5F000001002CFFEB02EA05D100150030401C6A017C01021233150307070B3403 -09131312140077170F170106651610E65D10F6ED332F003FFD322F3FED31305D01140623 -22262735331E01333236373E01351121352102EAEFC930A0360B29783F5C6D1A1B0FFEC5 -02010183C4D4110CB90E1E2A2728744C03659E00000100CD0000057505D1000B00A74075 -190956015C09030509280938094A0968098A09D809070F010A091E0119022A012B093901 -3909350B49014909450B5C01650B72007908100202038801C8010201B3000B000809B302 -0B0A030A840A010802050A07030105080B02030A0A0F0D20003000400004500001006E0D -400D01080314056C0C10F6FD325D10F65D5D322F123939003F3C3F3C1239393130015D87 -10C0C07AFD1804C00187107AFD5D1808C0015D71722901010711231133110133010575FE -FFFDB394C6C602D3F0FD6702979EFE0705D1FCF70309FD44000100C80000047605D10005 -002040110203043501080000070F07010414016C0610F6ED5D11332F003FED3F31302901 -113311210476FC52C602E805D1FADF00000100C8000005F605D1000C00794059560A0138 -023805360A6F0260036F05600A7F0270037F05700A0B5509560A5A0B0364037403750903 -050A020309000410043404440454046A04060404070B0903010708090A0B030502140078 -0E0F0E1F0E500E030513076C0D10F6ED5D10F6ED111739003F3C3F3C12392F5D12173931 -30015D72005D722123110123011123112109012105F6C6FE6276FE65B9010E018D018001 -130503FC970369FAFD05D1FCC3033D00000100C80000053805D10009006B404E0C071F07 -34074507510761077107077606010F0102061F0115063406440653066B0160067F017006 -0B0C010406025A01550602020701080603010408060102071300780B0F0B400B02021304 -6C0A10F6ED5D10F6FD113939003F3C3F3C12393931300172715D5D005D21230111231121 -0111330538F5FD3EB901330284B90534FACC05D1FB4004C000020073FFE105DA05F00017 -002300564042040004060B0C0B1217001706190C19125701570553075F0B580D58115F13 -53171076097915021B3415022134090A18150373250F25010F251F253F25031E150F6824 -10F6ED5D5D10F6ED003FED3FED5D3130015D011612151402070E01232224272602353412 -373624333216131000232200111000333200051E5B6163595CFBA19DFEFF5A5A61605C58 -01059AA0FF47FEFCE1E3FEFD0108DEDE0107052664FEDEB8B8FEDD6165666863630120B9 -B6012167626869FD610122013BFEC5FEDEFEDBFEC9013700000200C80000049605D10010 -001F0056403D3A143D1D4B144B1D500E540F650F071934000710070207070918340A0309 -080F211F21021115200030004000700004006F210F213F2102190714096C2010F6FD325D -10F45DED5D003F3FED12392F5DED3130015D011406070E012B01112311213216171E0107 -3426272E012B0111333236373E010496453E4DD2A0C6C6019486BA48555DCE3637307B5E -C4A778962F2F27040F63A93E4D4DFDD505D12D3039AA874D72241F1BFDAD2B2F306A0002 -0073FE7705F805F000250031008640610B0C0B120418041D190C19121518161D5C0B590D -59115C1353175719571D742010551F651F751D742D0425252135030B29341E0609760979 -150215022F34090A1E130600337326151B0009061D030F1B73330F33010F331F333F3303 -2C150F683210F6ED5D5D10E61117393210EDE62F2FED003FED3F5D123939ED3FFD322F31 -305D015D010E01232226270E01232224272602353412373624333216171612151002071E -01333236373303100023220011100033320005F83C753DAED309182D159DFEFF5A5A6160 -5C5801059AA0FF595B61DFBC0464842971181BECFEFCE1E3FEFD0108DEDE0107FE930F0D -BFB204036863630120B9B60121676268696164FEDEB8FEEFFE8A4B727E190A039F012201 -3BFEC5FEDEFEDBFEC9013700000200C80000059805D10010001F007A405408011D012D01 -3A01391D450F4814481D5A01560F59146F016902600A650B7E01750B110201B300100010 -071A34400201020205183407030105080F211F2140210311150F0D010D0D102000010019 -031400056C2010F632FD322F5D39392F5DED5D003F3C3FED12392F5DED12393130018710 -7AFD18C0015D29010121112311213216171E0115140607133426272E012B011133323637 -3E010598FEFFFE0EFEE9C601A187B448515BA28E612D342B7650E9C85E8C312D2B0250FD -B005D1232D339B77A1D93701A34063221D17FDCE212D2A6D00010086FFE5050205EC0030 -009A40790B09031F00231B08141F29082818241F242F390836103813351F362A4A084510 -4913451F4A27442A5802551B551F552D6B19661B651F662B602F7B16701F7020742A742D -86122309400E103708400E103700111A28041D06212125341D020A0A0E34060A2128151A -111500211A090074320F32703202096A3110E65D10E611393910ED2FED2F003FED332F3F -ED332F1112173931302B2B5D011406070E012322242735331604333236353426272E0127 -2E013534243332041715232624232206151416171E01171E010502514950D596A1FEFF85 -0E71012882B8CD61634BAF62C6BF013CF39D0106650E55FEEB919FC1607940EC52A6A801 -A957AA3B40483C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E28 -152CB20000010000000004EE05D1000700274018010435060303080F091F094F0903005B -0114045B4F0501052F5DF4FDE45D003F3FFD323130012111231121352104EEFDECC6FDEC -04EE0521FADF0521B000000100B2FFE1052905D1001D003A4029231223183D033D094C03 -4C0977137717081C0D031534060A1B1400761F0F1F1F1F401F030F140C6B1E10F6ED5D10 -F6ED003FED3F3C31305D011406070E01232226272E01351133111416171E01333236373E -01351133052947514DCE898CD0475147C621272C976A6B962D2721C60256A2F1504C464A -4852E8A9037BFC7B798C394142414239936D038A0001001A0000055E05D10006008C4066 -470148020205040507065706860603061400000105070457048604030414030203080144 -014B02580273017C02060005027503010303020845004A0302020103040024003A005A00 -6A00740006006E080F08010F08010B032B033503550365037B030603640710E65D5D5D10 -F65D1139395D003F3F5D1239393130015D8710FD5DC08710FD5D08C0015D090121013309 -01055EFDE2FEF8FDE2D401D301D305D1FA2F05D1FAE2051E0001005C0000078D05D1000C -00BB409E470367037903030D010B020404020505080C0B1701190318051908190B290329 -08290B3B023903320434083C09330A3A0B4B02440444084C09430A4B0B55015A0255045A -0557075909550A65016A0265046A056A09650A7F02700473087C09720A7C0B2E0C140001 -000714060506030301000300090205080B03090C0602060302083B0034064B0044067A00 -75060600720E1F0E3F0E5F0E7F0E0406670D10EE5D10E65D003F3F1217395D5D31300187 -10FD8710FD015D005D09012309012301330901330901078DFE7DDFFEC7FECEDAFE76CB01 -390134C90137013705D1FA2F04D4FB2C05D1FB2A04D6FB1E04E2000100440000053805D1 -000B00C2409775017A07020A04050A1A04150A2C04230A37094D04420A58035F04580557 -09500A570B68036D0468056709600A670B7B04730A170B14000100091408070803140201 -020514060607050407010A0B0602080302080F0D01060216022602360247020509081908 -290839084808050208070A04010406020D00160026003600470050000600660D08090619 -062906390648065F060606660C10F65D3210F65D321117392F2F5D5D5D003F3F12173931 -30018710ED8710ED8710ED8710ED005D015D09022309012309013309010538FDFE0201E5 -FE6AFE60D80207FE05E40191019A05D1FD20FD0F0265FD9B02E802E9FDA3025D00010006 -000004E605D10008007C405D2C012C04280735074001400440075007680470070A160619 -08270628085606590865066A08080814000100061405040502000D050200010004000703 -040107080402050302080F0A1F0A4F0A7F0A04005B01070114045B4F057F0502052F5DF4 -ED3910E45D003F3F1217395D3130015D8710ED8710ED015D005D09011123110133090104 -E6FDF4C6FDF2DB0197019B05D1FCBCFD7302780359FD66029A000001007E0000050805D1 -000900594036030708060813082608360846085608660876080808B30202030707033506 -03020208350108040803020707040209730B0F0B0102690A10E65D10E61139392F123939 -2F003FFD322F3FFD322F31300187107AED5D1887C0290135012135211501210508FB7603 -91FC910452FC6603B0B80469B0B3FB92000100EFFE7802F706140007001C400E05520201 -0652010B030000061F012FED332F3C003FED3FED3130012111211521112102F7FDF80208 -FEA6015AFE78079C8FF9820000010046FED003C006140003003A40280301020A0119012A -0138014B01590168017801890109011200032F000100030100006002700202022F5D332F -003F2F5D31300187ED5D87C00123013303C0ADFD33B0FED00744000100ABFE7802B30614 -0007001C400E045207010352010B031F000005012F3C332FED003FED3FED313001213521 -1121352102B3FDF8015AFEA60208FE788F067E8F000100BA02AA05D205D1000600474034 -3B0133034B0145035F0150036F0160037F0170030A69027B02020102050F031F033F035F -036F0305030305030000004F000200042F335D2F003F332F5D12393931305D015D012309 -0123013305D2C6FE39FE3AC5024D7E02AC0273FD8B0327000001FFFCFED4051AFF4C0003 -0011B6015002000005022F11332F002FED313001213521051AFAE2051EFED47800010154 -051602FA068C000300244016480159026902790204500360037003030303010000022F33 -2F002F332F5D3130015D0123013302FA95FEEFF30516017600020068FFE1041D04780026 -0033007A40540C0A0423190A152304590E511E5C2C690E601D6F2D7B0A7A14701D7B2C0A -0208283D3011401102111120084F1C011C1C183F20043141080A01080F1D011D1127021A -001D0B0091350F351F353F35032E1B0B853410F6ED5D10E6113910FD32322F5D003F3FED -3FED332F5D1112392F5DED123931305D015D2123350E01070E0123222635343637362437 -353426272E012322060723353E01333216171E011503110E01070E01151416333236041D -BB1955282F7A5297D26D6566011EA42D2A28703D4AB6610A37D06576AF403F42BB56E944 -5164747763A477113D12171FC89B7F9D2D2D20081D40541817102725BF0F24272F2E926C -FE1D013705141317615560614D00000200B9FFE10490061400130020005140393402350F -3B1530204402450F4B154020571267127F087B1C0C0E0906174211040C011E40060A0B08 -141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED3F3FED123939 -31305D011406070E012322262707231133113E0133321203342623220607111E01333236 -04904F4347AA665F8E450CB0BC4FB26FC6E5C2849352A8485073499CB102378CE04C4F4F -2D26340614FDD44153FED0FEE6C8CF4738FD80241CCD00010069FFE703F3047700210057 -40410F234F23022B01220E2A1624183A01350E3A16351849014F0A440E4F164118590155 -0E6901650E7A01730E131010143F0C0421211A3F03090F008D23171B09852210F6ED10F6 -3C003FED332F3FED332F31305D015D250E01232226272E013510003332161715232E0123 -2206151416333236373E01373303F35EA95F79CA484950012DF760B94D0A56B757A0B9B5 -A439762F2948150A462D32474848DC93011201383627D14348D7D0CAD91E18152F110002 -006CFFE10443061400130020004B40333C1A301C38204F1A421C48205806680670100912 -0102110518410E0401081E42050A1114021A0092221F223F22021B1B08852110F6ED5D10 -F6FD3232003FED3F3FED1239393F31305D2123350E01232202113436373E013332161711 -3303112E012322061514163332360443BC51B067C8EB514544B56158884BBCBC4C78479E -B0889650A475464E013401118EDE4E4C50252701E4FAFF0281221ADCCAC7CF470002006A -FFE60460047C0018001F005A404026042B0D30043B0D3C1E43044B0D4B1E5A0D50166A0D -6017780D7A1E0E013C1F1F0F1C3D15040B0B073F0F090C0C191A008F210F211F213F2103 -1F011B12852010F6FD325D10F4ED332F003FED332F3FED12392FED31305D01211416171E -013332363733150E0123200011100033321215272E01232206070460FCC93E36348F5672 -E7310A5FC66DFEEAFEC8012BF4E2F5B701939697B30C021B67993130305B2CCD2836012D -011501120142FEF8F32A94A2B2840001004400000312061E0018004B402D081439147505 -030000043F15000B0E3E0811050D080009400902090F090E00080B1A0F11000E400D1037 -0E891910F62B323232FD322F12392F2F5D003F3F33FD323FFD322F3130015D01232E0123 -22061D012115211123112335333534363332161703120A1F6426796D0153FEB3BC7F7FC6 -BB3F652A055E09136B8C269EFC4103BF9E25C7D50C080002006CFE590443047C00230030 -006E404E3D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C05 -702011220512211528401E0407070B40030D2E4115070F0601062124121A000618009232 -1F323F32022B1B18853110F4ED5D10E4113910FD32322F5D003FED3FED332F3FED123939 -3F31305D2510002122262735331E01333236373E013D010E01232202113436373E013332 -1617373303112E012322061514163332360443FEFEFEF459A9520A2EC864607E23231E55 -9B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A57FFEE4FEF61917C012352E29 -276E446644430121010790D14C474F272830FCD60261221DD0C6BCC23F00000100B90000 -045F061400160037402203151615751503100D084213040E01010D08021A0091181F1860 -1802100B1A0D881710F6FD325D10F6ED003F3C3F3FED123931305D2123113426272E0123 -22060711231133113E0133321615045FBC1218195E4B4DA84DBCBC58BC63B5BE027C4D87 -262A294C3BFCBE0614FDCD4952DACD00000200AF0000018305DB000300070030401E0144 -02400B0D370203060505087F090109920060041A01607F050105880810F65DE4FDE4E65D -003F3F3F2BED313001233533032311330183D4D40CBCBC0518C3FA25045D0002FFC2FE59 -021505DB000300190049402E0A051C0502014402400B0D370203163E19050B0B0F40070D -4F1701177F0A010A0160161A00600A1770190119921B10F65D3232E4FDE42F5D2F5D003F -FD322F3FED3F2BED31305D012335330314062322262735331E01333236373E0135112335 -210215D4D40CC8A828832C0A1C5F2D485816160DE901A50518C3FA0AC4C8100CB30B1C28 -2828715103849E00000100C1000004AF0614000B007D40512802D801DB090309010F0D1F -011D021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A -0802050A0507010105080B02600A700A020A0A00000D200D400D0208031A05890C10F6FD -325D11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0 -015D7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B0614FC -1A022FFDFC00000100BB0000017706140003001E4011020101087F05010592001A7F0101 -01880410F65DFDE65D003F3F3130212311330177BCBC0614000100B900000717047C002B -006A4048032403291324132944204426B72A07B62501251F1D1C0817422822041D050110 -1C08402D011F2D302D402D502D702D05001A016110250B1C0F1A101F1A1A1C611F104010 -801003102F5DF4FD3210FD11393910F4ED5D5D003F3C3C3F3F3CFD32111239395D31305D -2123113426272E01232206071E01151123113426272E012322060711231133153E013332 -16173E01333216150717BC0D151756514F9E4F0304BC0D151756514D9B4DBCBC58AF6372 -9F2772BC6BB8AF027C4886282B2C4F3D173D1EFD35027C4A85282B2B4C3BFCBE045D7C49 -5260556055DFC800000100B90000045F047C00160037402203151615751503100D084213 -040E05010D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3C3F3FED -123931305D2123113426272E012322060711231133153E0133321615045FBC1218195E4B -4DA84DBCBC58BC63B5BE027C4D87262A294C3BFCBE045D7C4952DACD0002006AFFE10471 -047C000B0017003E402C3B0E341034143B164B0E441044144B16080F3F0904153F030A0C -1B0090190F191F193F196F1904121B06851810F6ED5D10F6ED003FED3FED3130015D0110 -002322001110003332000334262322061514163332360471FEE8EBEDFEE90117EDEB0118 -C2AA9799A9AA9896AB022EFEEFFEC4013C01110111013DFEC3FEEFD9D3D3D9D2D9D70002 -00B9FE640490047C00130020004D4035320239153220430249154220561267127E087C1C -0A0E0906174211040C051E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD -32325D10F4ED003F3FED3F3FED12393931305D011406070E012322262711231133153E01 -33321203342623220607111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F -51A44B5073499DB0023C88E14E4A512628FE2C05F9753F55FECFFEECCAC84639FD87241A -D4000002006CFE640443047C00130020004B40333B033D1A301C3A204C034B1A461C4A20 -701009120502110418400E04010C1E4205091114021A0092221F223F22021B1B08852110 -F6ED5D10F4FD3232003FED3F3FED1239393F31305D0123110E01232202113436373E0133 -321617373303112E012322061514163332360443BC57AC64C7ED534442B2635A8B480CB0 -BC4E7846A3AA899352A4FE64021A4B490133010E90DD4B4950282730FCBF0278231CDDC2 -C4D34700000100B900000372045D001200384021000D100D200D030C090F000004430A0F -05090800001440147014020C071A09881310F6FD325D11332F003F3F3CFD322F11123931 -305D01232E012322060711231133153E013332161703720A2A4F3657A24BBCBC70AB5931 -2C2C03900A094D3DFCE7045DA55A4B0507000001006EFFE503D704780033009340710602 -091B1502191B26092A2432093C2442094C245E055D165321562F54326F056C166020642F -6532147A057F1174207928742B8A01880D851A872894019A1B0B000E1829041E03802201 -2222263E1E0407070B3E030921291B180E1B00211807008E350F351F353F355F357F3505 -07863410E65D10E611393910ED2FED2F003FED332F3FED332F5D1112173931305D015D01 -14062322262735331E0133323635342726272E01272E01353436373E013332161715232E -0123220615141716171E011716171603D7FDDB7CCF460A59DA647C8C26266C288135937B -393A38AD6B64CD440A48CE63678E2B2A5E34812B834747014299C43B23D3434F50564222 -221809180E27976E457A302F373123C935494F4E452323160C180A1E494A0001003EFFEA -02FD059E001B0048402C0C051A052B05030B10073E0D0B0A051B1B173F03094F1D7F1D02 -0E008C1D080D101A0A0807400D103707881C10F62B3232FD322F10F6325D003FFD322F3F -3333FD322F31305D250E012322263511233533113311211521111416171E013332363733 -02FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A0A0E12B8CB02529E0141FEBF9E -FE0358632B28251B0900000100B1FFE10457045D0016003740220B0619077A0703020515 -09051142050A010814021A0092181F186018020B1A08871710F6ED5D10F6FD32003F3FED -3F3C123931305D2123350E01232226351133111416171E013332363711330457BC5FAE69 -B0C4BC101A1B565249AD4BBC7C4B50D7D002D5FD8455792B2C284C3B03420001003D0000 -047F045D000600864041260429063604390646044906062905390540055105600505061A -000100041A03020328002703380037034A00470375017A02080005027503010305020802 -010300B8FFC0401E0910370C001C006A007A0004008D080F080103031303650375030403 -820710E65D5D10F45D2B113939003F3F5D1239393130015D8710FD8710FD005D015D0901 -2301330901047FFE3CBDFE3FCC015A0157045DFBA3045DFC870379000001005600000636 -045D000C0088406D0D031D032C012A0229032504260524082B0B34013B0544014B055701 -58045905570B6D02620464086A09640A6B0B79017D02720474087B09730A7A0B1E0C1A00 -0100071A060506000910090205080B03090C0602060502080F061F062F0603008E0E100E -3F0E6F0E030006830D10F6325D10E65D003F3F1217395D3130018710FD8710FD015D0901 -23090123013313013301130636FEDDAEFEE1FEE3ADFEDAC4CD01179B011EC2045DFBA303 -5DFCA3045DFC9F0361FC9F0361000001003C00000480045D000B00DA408C090B1B011403 -14071B09270327073C003B0134033404340634073B093D0A4C004B014403440444064407 -4B094D0A5A0155035A0555075A09550B6F016003690560076F09660B230F0200083F0230 -084F0240087D02700808091A0A0B0A071A060506011A000B00031A0405040102050B0809 -06047A047506020605040809060106020D010502080B04040A00B8FFC0401C0910370600 -01008D0D0F0D010F0D1F0D400D5F0D040602040104820C10F65D325D5D10F65D2B321117 -395D2F5D003F3F5D1217393130018710ED8710ED8710ED8710ED005D015D212309012309 -0133090133010480EDFEC3FEC1DB01B4FE50ED013B013CDCFE4901ADFE53022D0230FE5A -01A6FDDA0001003DFE64047F045D0007008C404104063406440650066006700606090307 -0519031705460149035800570179030902071A000100051A040304490046040200030204 -05020C02680101010203030400B8FFC040220910370C001C004A006A007A0005008D090F -0901030413044504650475040504820810E45D5D10F65D2B1117395D2F003F3F12393931 -30015D8710FD8710FDC0015D005D0901231301330901047FFD74C9D0FE43CC0157015A04 -5DFA0701D20427FCC4033C000001005D000003E3045D00090056403A15083A0335084A03 -45085C03540860087F0370080A0707033E06050202083E01080408030207070402098E0B -1F0B3F0B5F0B6F0B7F0B0502840A10E65D10E41139392F1239392F003FFD322F3FFD322F -3130015D2901350121352115012103E3FC7A028BFD830367FD72029F8B03359D86FCC800 -000100ADFE78045906140025005640382F1D3A074A07562367237523063A1D4A1D021D1C -09533F0A4F0A020A0A01145112012451010B140F00400002000919201F0E000940050105 -2F5D33333CFD3C2F2F5D3C003FED3FED12392F5DFD39395D3130015D012322263D013426 -2B01353332363D0134363B01152322061D01140607151E011D0114163B01045996B3DFA6 -AB3333ABA6DFB39672887B9A89899A7B8872FE78C7BC95A9BF9CBFA995BCC78A7E8CAF8B -BD371837BD8BAF8C7E000001017AFE78022806140003001B400F0F054F05020201010B00 -1F4F0101012F5DED003F3F3130015D012311330228AEAEFE78079C00000100BBFE780467 -0614002500544034211235023112400240127A0C06131200533F254F25022525091B511C -010A51090B1B0009010900170E1F050509004F200120202710D62F5D33333C10FD3C2F2F -5D3C003FED3FED12392F5DFD39393130015D012322061D0114062B01353332363D013436 -37352E013D0134262B01353332161D0114163B01046733ABA6DFB39672887B9A89899A7B -887296B3DFA6AB3301F8BFA995BCC78A7E8CAF8BBD371837BD8BAF8C7E8AC7BC95A9BF00 -000100BB018B05D1039F001F0056404206030609091309191908170A1518191A3B083418 -4B0844185A035A0A550D541B5B1D60056E14611875047A147518170F1C54060C54061F16 -1F2A000001000F2A00102F33ED2F5DED002F3333ED2FED333130015D010E01070E012322 -26272E0123220607233E01373E01333216171E013332363705D102292D2E82645E925466 -5C325E6409A702292C2B8A605D935550663D676103039F63C04B4D584F667D40AFC464BD -4D4A5B4D68625BCAA900FFFF001A0000055E07500236002400000117008E002F0175001A -40130320113011401170118011050200110E060725012B355D350003001A0000055E0801 -0012001E002100DF40442B2040205A18551A501E55206918651A651E09180B170D4A0646 -125906561278027703082020211F02870101011400120020210387040104140505067B06 -74120216510CB8FFC0405D0D10370C033470210121212006120405001C011C0301050813 -114F0F500F600F030F191140095F096F0903090F230106090F1204050C00240039004200 -5A006A0074000700006E230F23010A052B0536054D05550565057B050705642210E65D5D -10F62F5D1217395D2F5DED2F5DED003F3C3F5D1217392F5DED2F2BED3130015D8710FD5D -C0C0C08710FD5DC0C008C0015D005D212303210323012E01353436333216151406071334 -26232206151416333236130901055ED394FD8094C90207596BCC9293CB69592C72565672 -7355567236FEFEFEFD019FFE61057F2C9F668FC2C28F64A32A012F56737455567373FBF1 -02CBFD3500010073FE59054605EC00410097406F0A20032B1C20152B250B222B3402330B -342B4302430B452B5D1F582158255A275E3F6102602B70027626702B160B0B1B0B022D2D -313429021A061D41413D341D0A101014320C0D0F0F172A0009100920090309091D234371 -2C0071430F43010F431F432F433F436F4305371523684210F6ED5D5D10F43CE41239392F -5DED332F003FFD322F3FED332F1239393FED332F31305D015D250E01070E01071E011514 -062322262735331E01333236353426270E01232224272602353412373624333216171523 -2E01232206070E01151416171E01333236373305463759480B1A120203BB9326772D091A -5B326A620202132B12A2FEF762606C68625F010DA478EF920F7BF28A71B547454D554346 -BB688FFA6D0E6C182A17030903133317A2AC0E0CA20A1C5056132D1402025B615F0125C2 -B801226461663A49EB675E494D4BE5969DE2474A47626200FFFF00C80000049D08010236 -002800000117008D001E0175000BB601000D0D020325012B3500FFFF00C80000053807C8 -023600310000011700D7008C0175000BB60100170A050925012B3500FFFF0070FFE105D7 -075002360032FD000117008E009601750018401103002930295029702904020029240F03 -25012B355D35FFFF00B2FFE1052907500236003800000117008E00620175001840110210 -24202440246024040100241E0D1D25012B355D35FFFF0068FFE1041D068C023600440000 -0116008DE300000BB6020036371D2625012B3500FFFF0068FFE1041D068C023600440000 -01160043E800000BB6020035371D2325012B3500FFFF0068FFE1041D068C023600440000 -011600D6E000000BB6020038341D2625012B3500FFFF0068FFE1041D05DB023600440000 -0116008EE000001E4016030F39703902020039103920394039040039341D2625012B5D35 -5D35FFFF0068FFE1041D0653023600440000011600D7E200000BB6020041341D2525012B -3500FFFF0068FFE1041D07B1023600440000011600DBD300000DB70302003A341D262501 -2B35350000010069FE5903F3047700380080405B0F3A4F3A022A012A0726252A2D252F3B -01390735253B2D342F4B014F2140254F2D402F590153256C0166257A017525150B081B08 -0227272B3F230417031A3838313F1A090D0D113D090D0C0C142A06061A2026008D3A2E1B -20853910F6ED10F63C1139392FED332F003FFD322F3FED332F1239393FED332F31305D5D -015D250E01071E011514062322262735331E01333236353426270E01232226272E013510 -003332161715232E01232206151416333236373E01373303F3214D1D0305B79225742D09 -1A583268620302101D1979CA484950012DF760B94D0A56B757A0B9B5A439762F2948150A -460F1F0913391CA2AC0E0CA00A1A4E58162E140204474848DC93011201383627D14348D7 -D0CAD91E18152F11FFFF006AFFE60460068C0236004800000116008DFD00000BB6020022 -21121825012B3500FFFF006AFFE60460068C02360048000001160043FD00000BB6020021 -20121825012B3500FFFF006AFFE60460068C023600480000011600D6F900000BB6020024 -20120025012B3500FFFF006AFFE6046005DB0236004800000116008EF9000014400D0330 -2560250202002520120025012B355D35FFFF00A000000246068C023600D500000117008D -FE830000000BB601000505020325012B3500FFFFFFEB00000191068C023600D500000117 -0043FE970000000BB601000505020325012B35000002FFF50000023C068C0006000A003D -40247A0174037A057406040201030505030905080800047F0C01000C92071A047F080108 -880B10FD5D32FDE4335D2F2F003F3F2F332F1239393130015D01230B0123133303231133 -023C978F8E93B2E313BCBC0511010BFEF5017BF974045D00000300050000022D05DB0003 -0007000B0041402702010744600401040A050908011A7F000100041A700501057F0D0100 -0D92081A057F090109880C10F65D32FDE4335D2F5DED2F5DED003F3F2F5DED3939313001 -2335330523353313231133022DBDBDFE95BDBDB5BCBC0518C3C3C3FA25045D00FFFF00B9 -0000045F0653023600510000011600D70700000BB6010024170E1525012B3500FFFF006A -FFE10471068C0236005200000116008DE200000BB602001919060025012B3500FFFF006A -FFE10471068C02360052000001160043E200000BB602001919060025012B3500FFFF006A -FFE10471068C023600520000011600D6E200000BB602001C18060025012B3500FFFF006A -FFE1047105DB0236005200000116008EE2000014400D03301D501D0202001D1806002501 -2B355D35FFFF006AFFE104710653023600520000011600D7E200000BB602002518060025 -012B3500FFFF00B1FFE10457068C0236005800000116008DEE00000BB601001918101225 -012B3500FFFF00B1FFE10457068C023600580000011600430200000BB601001818091625 -012B3500FFFF00B1FFE10457068C023600580000011600D6F800000BB601001B17091625 -012B3500FFFF00B1FFE1045705DB0236005800000116008EFD000016400F02301C501C60 -1C0301001C17091625012B355D35000100BB0087045B0614000B003C4026070A0B000104 -0605AA0606080308010F0D1F0D02006302040708090A010602280563700301032F5DE6ED -173910E65D003F2F12392FED17393130012513231305350503330325045BFE6D058405FE -6D01930584050193040A05FC780388058105018EFE7205000002009A02CC03BC05EC000B -0017002840186A0F65157A0F751504155403030F5409020C2A0000122A062FED332FED00 -3FED332FED5D313001140623222635343633321607342623220615141633323603BCE8A9 -A9E8E8A9AAE7A58666668689636686045CA8E8E7A9A8E8E8A8668B8B6668898C0002009F -FE97046005C3001C0023007B40553C0A3F2030224B0A4F2040225A0153116C0164117901 -7611791F76230E1D1E180D3F134F130213130D1747060C030F0505201C301C401C031C18 -471C05030F251F2502130021202F090109001D0C0F1804031E09062F33ED1739322F5DED -2F3C5D002F3333ED2F5D2F3F123939ED33332F5D2F11393931305D250E01071123112600 -353400371133111E011715232E0127113E01373305110E01151416046047B46876E3FEFB -010BDD7668BA410B37AE7378AD330BFE2787A2984A1E2F03FE9D0167150120FAF2012B16 -0163FEA1032C1FCB2C5209FCB90A552985034214D2BDB5D2000100890000048B05EE0021 -00774050201D3415321D03031E151E251E410E530E5B16630E7302730E091B1805460F08 -1F084F0803081010144908010C0202204A01080F231F23021F02181B20080519060F0605 -190F040220004000020000022F332F5D1217392F2F2F2F33FD3211395D003FFD323F1239 -ED332F2F5DED393931305D015D2901353E01352335331134123332161715232E01232206 -1511211521151406071521048BFBFE7667B0B0FDCD6998400A3E98568C8B019FFE617C62 -0345CF20BDB98A0136C801012211CE2A30A590FEDD8A3D7EBB390B00000200ACFE7F0468 -05EF0043006100A9407F05050A2714051D273E2030424D104F20433240425C105E165132 -63096E106A2B63321152055F205F255F275B2D5B3950426B1F6A20653D654061427C097C -10742B7431107B50745F0218075F50293A062F0D3333373F2F021111153F0F0D1F0D020D -181B5F045607333A1B50262911471A1129330704221000010000561A222FED332F5D1217 -39ED2F2F3939ED2F2F123939ED002F5DFD322F3FFD322F111217395D31305D015D011406 -07151E01151406070E012322262735331E01333236353426272E01272627263534363735 -2E01353436373E013332161715232E01232206151416171E0117161716033E0135342627 -2E01272E01270E01070E01151416171E01171E01173E01046876636158424148C27C57A7 -5C0A4FB46C86A2272D299052D6525372666554404340C78057A85B0A3ABD797FA92B2B2B -845BC85A59F71C1E211D1C4E2C275D46123E1618261F1D1B512C266043144202596AA237 -072E915A4D8A3238361B1FC2253261573841191725143451518162A93907309259518334 -323A1C1DC21B3C5C573947171725152E4F4FFEAB21413A334617181F0C0B1514092D181A -563132461817200B0A18130B2F00000100B9012103A4040B000B0013B703030900000688 -0C10F6322F002F332F313001140623222635343633321603A4DC9A9ADBDB9A9ADC02969A -DBDB9A9ADBDB00010089FE95045205D1000D003B40245308610802010F0501054F060106 -0602AA0C030F0F1F0F020529040402290F0D010D0D092F332F5DED332FED5D003FED332F -5D2F5D3C31305D012311231123112E013534243321045294D695CEFC0104F301D2FE9506 -BAF94603BC05F8CCCFE8000100B9FFE8048D061E0036006D4048052E152E2E132C343913 -39343736490E4636532166217B1B0C3433143D151E3C15032D0007070B3D03092608181B -303400140C061C060206111B000614300325009038251A26883710F6ED10E611173910ED -2F5D2F12392FED003F3FFD322F3F1239ED2FED39393130015D0114002322262735331E01 -333236373E0135342623353236353426272E01232206070E01151123113436373E013332 -1615140607151E01048DFEF1DB2C73240A2A63384A6E21231FD3C69D9A161E1B583D395C -28252DBC48403CB35EB7E58E71A4BE01E1D6FEDD0F0DA518123A31347F4CA6A996778123 -421F1D231D2724845FFBC104387CB73E3A3BAE9770B2200925DF0004009FFF2E076105F0 -000B00170028003700AD407A7C0D7C11701370177A1A74277336070D1A04231E1A122314 -282C0E231022142C16211824233F1936234919472252186B0E641064146B166A19151A19 -2A182818292A25252818311B2A001D101D4F1D0318001D01901D011D0CAD1D06000012AD -06281AAA31311E19401D011D30AA1E15501D1E0903030F500902003FED332F123939ED2F -ED2F5D3C12392FED39012FED332F1239ED2F5D71335DFD3C2F39392FED8710FDC0313001 -5D005D011000212000111000212000031000212000111000212000072301231123112132 -16171E0115140607373426272E012B0111333236373E010761FE05FE9AFE9AFE0501FB01 -66016601FB74FE49FECAFECAFE4901B70136013601B7C0DFFEB5A2A501385E7A3B3F3B71 -63201C211F4635957F3E5A1D1F19028FFE9AFE0501FB0166016601FBFE05FE9A013601BC -FE44FECAFECAFE4401BC820163FE9D0393101F226149618126FD243812110AFECB131719 -3C000003009FFF2E076105F0000B001700330096406D7C0D7C117013701779197223062C -0E231022142C1633183324332A332E44184124442A442E54185424542A542E6B0E641064 -146B1662186A1D642417257F1801182C2A181E0CAD1E06000012AD06103320330233332F -521B1F252F2502252529522115501B210903030F500902003FED332F123939ED2FFD322F -5D2FFD322F5D012FED332F1239ED2F33ED2F5D3C3130015D005D01100021200011100021 -2000031000212000111000212000050E012322243534003332161715232E012322061514 -1633323637330761FE05FE9AFE9AFE0501FB0166016601FB74FE49FECAFECAFE4901B701 -36013601B7FE72569F4EE3FEF8010DDE59AC3E1036A9598E9F9994539D4810028FFE9AFE -0501FB0166016601FBFE05FE9A013601BCFE44FECAFECAFE4401BC572727F6EAE1010230 -1CB52846ABA59FAE3A34000200AA031106F105D1000E0016005240217B0478057A060379 -0C010B0C0D01030406080815121210135015030D280B0F370BB8FFC440110B0F37022800 -000728090FAE102814AE132FE4FDE42FED332FED2B2B003FFD3C332F1217395D3130005D -0123112303230323112311331B0133052311231123352106F17C14ED4FEF197BEEBFBFE3 -FC02E57FE5024903110269FE3D01CAFD9002C0FE82017E75FDB5024B75000001021D0516 -03C3068C000300244016470156006600760004500360037003030303010000022F332F00 -2F332F5D3130015D0901231303C3FEEF95B3068CFE8A01760002015A051803BE05DB0003 -000700264015020644016005010500140F010101041401000501052F5D33ED2F5DED002F -5D3CFD3C3130012335330523353303BEC7C7FE63C7C70518C3C3C300000100F5001B0597 -04FD0013008840541612010C0B080704030E111201020D80029002A002B0020402290303 -0C030D030112045307110E08530D070F0B010B40150130154015020407080B0112110E08 -030D0309030D1004062F004000020000400601062F5D332F5D1217392F2F1217395D5D00 -2F5D3333ED39392FED3939322F2F3130018710FD5D87C0C0C0C010C0C0C0C0C0015D0121 -0323132135211321352113330321152103210597FDA0689968FE5701DA54FDD2025E6999 -6901ABFE2453022F016AFEB1014F9C010C9C014FFEB19CFEF4000002000E0000076D05D1 -000F00130079404F04030B061B041B052A042B053B064A044A054D064D120B1213030414 -05050675057C06020A100E140115730601080B0440000100000F05010564140334130D35 -0A0A13050835123406030E35010508003F3CED3FEDED1239392FED2FED300110F65D322F -5D1739E62FED393931305D8710FDC0C0C0015D2901112103230121152111211521112101 -112303076DFC50FDF4D4CF0252050DFD1302EDFD1302EDFC50DBEF022CFDD405D1B0FE68 -B0FDD702230259FDA70000030073FF6E05DA064B001D002A003700A640850203000B0A0D -0C120F1A051C1103190D1F121F1A151C550254045A08590D59115B135017551C792A140B -090318061B1F0A1F0B1118161B2609272F75037F097F0A7F0B7F0C791270187019701A70 -1B132A2F1E2E043221340C09181B040615023234060A2A2F1E2E04272B15000C09181B04 -0F0073390F39010F391F393F390327150F683810F6ED5D5D10E411173910ED111739003F -ED3F121739FD11173931305D015D011402070E0123222627072313260235341237362433 -3216173733031612012E01232206070E011514161701342627011E01333236373E0105DA -63595CFBA173C94F9F84CD656D605C5801059A76C2528E84BC656FFE6F3990596EB44240 -453B3A035C3C3AFD683C91596EB73E434202E8B8FEDD6165663A37E4012664012CC4B601 -216762683737C9FEF464FED7013A2E2D4D4E4CE5938CE04C01B88BE44BFC432D2E504C52 -E100000300A1009D075F047C00170026003500724054051608311526192F2923262C3B34 -441C4B34510256075F0A5F0E5A1351165918553063026D0A631669236C24642C642D1821 -AF33AF0306120F09092AAF1BAF150F7B18743002272A0030180C0099371E2A0C993610F6 -ED10E411393910ED5D002F3CEDED332F1239393CEDED3130015D011402232226270E0123 -2202353412333216173E01333212052E01232206151416333236373E0125342623220607 -0E01071E01333236075FF5CF85DE454FD38FBFE2FACA86DE444FD58DBFE2FC683FB8608A -9C7F776E7C392225030C807658814A1E33133CBB608A9C0297EFFEF599929794010FD6EE -010C9A919695FEF1947575A79A85A6615E39470186A5477830672C7377A6000100D700B3 -05B505B6000F004540290E03540F010101010D045408AC0A070C401101301140110200AB -0A800D010D2A040105AB07400401042F5D3CF43C10FD5D3CF45D5D3C002F3CE4FD3C322F -5DFD3C31302521352111213521113311211521112105B5FB22021CFDE4021CA6021CFDE4 -021CB39E01A69E0221FDDF9EFE5A000200FE0000058005710006000A0061401605045403 -020306540001002C26012902360139020400B8FFE240240B1837031E0B18370954080303 -00400C01300C400C020504090A040100004001500102012F5D332F1217395D5D002F332F -2FED2B2B31305D4B53588710FD8710FD05C05909013501150901112135210580FB7E0482 -FC870379FB7E0482012F01E37C01E3B7FE96FE96FE1AA0000002010C0000058E05710006 -000A0063401603045405050602540101002C26002906360039060401B8FFE240260B1837 -051E0B1837095408050501400C01300C400C020503090A040100002F013001400103012F -5D332F1217395D5D002F332F2FED2B2B31305D4B53588710FD8710FD05C0590901350901 -350111213521058EFB7E0379FC870482FB7E04820312FE1DB7016A016AB7FE1DFC72A000 -0001006C000004A705D1001000834020300E3F10420E4F10540E5B10650E6A10730E7C10 -0A0020090B371020090B370EB8FFE0B3090B370DB8FFE04033090B374601550F700F0305 -0208320B0B0C010F0005070D0307080F121F1202030A005C0501030F05130D5C0C0A0F08 -BF0802082F5D3333E4ED39323210E42F2F5D003F3F1217392FED393931305D012B2B2B2B -5D090115211521112311213521350133090104A7FE400174FE8EBCFE8E0174FE3DD4014C -015005D1FCC15E8AFE5601AA8A490354FD6D0293000100BEFE640464045D001500384020 -080205140B051042050900080A0C0102131A0092171F176017020D091A0A881610F6FD3C -5D10F4FD3939003F3F3FED3F3C12393931302123270E012322262711231133111E013332 -363711330464B20A3B815B567F42BCBC209B5B5D8536BC76414A4640FDF305F9FCBA2752 -433C034000020095FFE0047905EF00220031006640481502151B162E2904241B310A351B -410A431B560A551A561F5020562A641A661E642A632E751B702E140F06263F0C0C061D19 -19153F1D022C3F060A1A0F232912141A0900002914092FED332F1239ED1139392F003FED -3FFD322F1112392FED123931305D011402070E01232226353400333216173E0135342623 -22060723353E01333216171E01032E01232206151416333236373E0104794E5255CB71C0 -F3010DCA5A9F4F02029E984EB74E0B51C96089CD3E2A1DCB3C98488DA8877080A322060B -0345A4FE987B7C62FDCBE4012134411A3B1AD9CA3F37C22C2D6D7C56CEFEC42F36B6AA91 -99C2BE215000000100BBFF43055905D1000C00A9406A01030F08450B8B03D903D30B0601 -08010B2B033208320B5D03660A600B08030203080908B3040304030B0A0BB30202030302 -03080908B3040304030B0A0BB30202030303610A010A07040304070A04020C0C0203090A -0A6B090109040202040309040B0835050301350B002FED3FED1117392F2F2F5D332F1239 -012F332F1217392F2F2F5D332F313087107AED87C0018710ED8708C00187107AED87C001 -8710ED8708C0015D71052135090135211521011501210559FB6202A1FD69046DFC850288 -FD6603B4BDBF029C0277BCB0FDA748FD730000010090FF3F05FC05D1000B003B40250307 -050009350A0270007F09020414005A6F017F010201010D0514095A00086008700803082F -5DE4ED11332F5DE4ED5D003FFD3C3C2F3C313001231123112111231123352105FCC8C6FD -B0C6C8056C0523FA1C05E4FA1C05E4AE0001007100000541045D000B002B401703070500 -093E0A05041A00B001010D051A09B0100801082F5DE4ED11332FE4ED003FFD3C3C2F3C31 -300123112311211123112335210541CABCFE3CBCCA04D003BFFC4103BFFC4103BF9E0001 -008AFE590490061E0021002C4018000004401E00111115400D0D0F231F2302001000091A -10192F33FD322F2F5D003FFD322F3FFD322F313001232E01232207061511140706232226 -2735331E013332373635113437363332161704900A2073208134356869BC346D310A216C -228135346868BD3A6636055708153D3D95FB9DCE6D6E0B0AB208153D3D950463CC6F6E0B -0A0000020097021303B005F000230030005740370A0A06211B0916212E0925215529600E -6029700E70290B02082552111120081C1C1853200201012E5308061D1125022A1D0B002B -2A000B2F33ED2F1239FD32322F003FED332F3FFD322F1112392FED12393130015D012335 -0E01070E01232226353436373E0137353426272E012322060723353E013332161503350E -01070E0115141633323603B0AA1C312C2D514980AF5D4D4EEF88242122573054A8270E2D -B84DD9BEAA45B736404E5B5E5283022A5E1425131415AA846A8724241F0612354013120A -300EAC0D20A99FFE74F504100F124D444C4C430000020079021303E405F0000B00170031 -40205D015D055207520B046A0F6515020F530902155303060C2A40000100122A00062F33 -ED2F5DED003FED3FED5D31305D0114022322023534123332120734262322061514163332 -3603E4F4C1C9EDEDC9C1F4B687787A86867A78870401EBFEFD0109E5E5010AFEFCEBACAC -AEAAAAADAB000001006B0000062105F00027006240440909090D1A091A0D2C092C0D3403 -300530113413460346136A1A641D64216A24101925140204160B341F0226183501160825 -1202191214081502141C272222290E15171C2FC4ED11332FC4123939ED2FED2FED003F3C -FD3C3FED12173931305D2901113E01373E01353426232206151416171E01171121352135 -26023510002120001114020715210621FDA443842D2F38F8E2E2F83A2F2F7F44FDA401B4 -A8D90172013601360172D9A801B40185275A373A9970C8FDFDC86E9E38395727FE7BAE7C -580132CC0116015AFEA6FEEACCFECE587C0000030068FFE3073F047C00390043005200B9 -40840B190B1D1C192604200D3604320D383D34414204420D4A3D4241520D5237554B630D -6137654B13161D4B2A512E622E7B0D7E137C1E7D24732E73387C4B0B47013C2170430143 -124333033018403D36042C2C283F30040B0B073F0F0A5041180A433A011A474412213304 -00470F2D012D0C0C3A1A00472D1B008F544054014D1B001B855310F632ED5D10E4113939 -10ED332F2F5D2F1217392FFD1139003FED3FED332F3FED332F3FED111217392F5D33FD32 -31305D015D01211416171E013332363733150E01232226270E01070E0123222635343637 -362437353426272E012322060723353E01333216173E0133321215272E01272E01232206> -<07032E01350E01070E01151416333236073FFCCD3C37348E566FD5420C4ED56DA6ED4C15 -5C323F947396D36C655F0124A22E2928703C4FB35A0D37CE659FD33945CA7DD9FBB60525 -20226D4F85B41991141569C0524F61747663C1022F72A234302D5334CD233B686713501C -242FC2987C992A271C033D41551717112A24BF0F265D5B5268FF00FB3E446625272C968C -FE6B35844B030915145B535F5C560003005DFF6C047104D900170021002B007840560008 -0F140A19292604001800250200180025020914001800253D1D322B4D1D422B0721261825 -04291B3E0609121504030F04293E030A21261825041E221B0009061215040C00902D0F2D -1F2D3F2D6F2D041E1B0C852C10F6ED5D10E411173910ED111739003FED3F121739FD1117 -3931305D5D5D015D011000232226270723132E01351000333216173733071E01252E0123 -22061514161701342627011E013332360471FEE8EB548F3B856EAB4B530117ED578E3674 -6F9B4C54FEBC2563379BAA222302442322FE40275F3B96AE022EFEEFFEC42A27C601004D -E2930111013D2C23ACE74CE0DC1D1DDCD2619436012B619836FD611F1ED900020071FFE2 -03BE05D100030020006D404C0F221F2202131E231E3A053A144B05400D400E400F43165C -05520F6F05650E651A7A057A0910127F1301131007120155030320201C34070A022B0303 -101F70130113130A200401041915040A2F33ED2F5D12392F5DED332FED003FFD322F3FED -331239395D2F31305D015D01233533130E01232226353436373E01373533110E01070E01 -151416333236373302C8CCCCF653BA70D7F9453B3A9D44B33C9E2E3644997967C5390A04 -FED3FA571E28D1AB62963E3E6529E1FECF2161282F7C4E716F4225000002012300000203 -05D1000300070027401707070055030305080F0901045D032B055D0F02200202022F5DE4 -FDE45D003F3FED332F3130012335331323133301F9CCCC0AE01AAA04FED3FA2F04370001 -00D2003905B002FA000500294018000002540F0401044007013007400702012A40000100 -00042F332F5DED5D5D002F5DFD322F313025231121352105B0ABFBCD04DE390221A00001 -0086FF6906C906FC0008004A402C15073307440772070407070806140302030207090829 -08590869080408000100010100040351060607080208002F2F1239392FED012F2F332F31 -308710DD5DC0C08710FD08C0005D09012301233521090106C9FC9066FE80ED0189013902 -DA06FCF86D03E18BFCCB065C0001FFDCFF37050005EF002B0077404D070B001F2E08270C -270F2E212925350D300F400E410F59226607660C0E0C0B0807201D1E21221D220F2D1F2D -020920201D2209041600160B081E462121281200000449280216161A4900120112002F5D -FD322F3FFD322F1112392FED393930012F2F1217392F2F5D8710C0C0C0FDC0C0C0313001 -5D01232E012322060F01211521030E01070E012322262735331E01333236371323353337 -3E01373E013332161705000A1D7229797E232A0141FEA3671D5C4041985C2950340A215E -2C7F812367D9F52A1A5C3E3E99573A4F3405290A1A77A0C28AFE1686B034352A0709B40E -1480A701EA8AC67BA833332C0A08000200F300CA0598045000190033006D40490A010606 -050E08130A1B06200528082D5B0452115B1E522B680B6432790B743210272730541D1A23 -541D1A002A012A0D0D1654030009542A0300101929000033291A0C290D26291A272F33ED -3CED2FED332FED002F333333ED2F2FED332F2F5D3333ED2F2FED332F31305D010E012322 -26272E0123220607233E01333216171E0133323637130E01232226272E0123220607233E -01333216171E0133323637059714B69E4D8C3841682C4B541C9B17B39F488E3B3D6B2D4C -59139E19AEA348903927802E4E56149D13B79E4D8A3A237C364B541B0450C2C64B2D3437 -607CB6C44A2E303B6D7DFDFCB8C34B2D1F4C6E7CC0C84A2E1C4F637A000200320000059E -05D100030006004F403148024703025A056A050205041A000003061A010102390236036B -0264037B02750306020305030000080105010203065401002FED3F1239012F11332F1739 -5D31308710FD8710FD04C0005D015D290101210902059EFA94023201080127FE50FE5105 -D1FAD7047BFB8500000200A600A2047A04760006000D005940107305730C0204400C1037 -0B400C103706B8FFC0B30C10370DB8FFC0401B0C103703000300070A0A07040500010100 -000C0B084007010707082F332F5D123939332F332F123939002F332F1239392F2F31302B -2B2B2B015D2501350115090105013501150901047AFDF00210FE9B0165FE52FDDA0226FE -8D0173BF01A35501A2BCFEEFFEEFD901BE5901BDC4FEDAFEDA00000200AE00A204820476 -0006000D005740107C037C0A0204400C10370B400C103702B8FFC0B30C103709B8FFC040 -1A0C10370C080C080505010403014000010000010A0B08070107082F33332F1239392F33 -2F5D123939002F332F39392F2F31302B2B2B2B015D090135090135010501350901350104 -82FDDA0173FE8D0226FE3CFDF00165FE9B02100260FE42C401260126C4FE4357FE5DBC01 -110111BCFE5E000300B2000005DA00DF00030007000B0025401405010206040A55090800 -2B0101042B0505082B092FED332FED332FED003FED173931302123353305233533052335 -3305DACCCCFDD2CCCCFDD2CCCCDFDFDFDFDFFFFF001A0000055E08010236002400000117 -004300640175000BB602000C0E050025012B3500FFFF001A0000055E07C8023600240000 -011700D700330175000BB60200180B050025012B3500FFFF0073FFE105DA07C802360032 -0000011700D7008B0175000BB6020031240F0325012B3500000200780000081C05D10016 -002500554039001C0022301C3022401C40227204720A721C741D72230B14351111011834 -10350D0317341535010811141417170E1203070073271F1507682610F6ED10E61117392F -FD32003FEDED3FEDED12392FED3130015D29012224272602353412373E01332115211121 -152111210511232206070E01151416171E0133081CFBCEC4FEFD6791B3AE984FF9E8042E -FD0502FBFD0502FBFC407A92B55F7481716D5BD09236415B0146CFD7013C603344B0FE68 -B0FDD7040479203642F8ABABEE4439280003006AFFE10776047C0024002B00370094406C -2604200D3204300D32293B2E323032343B364004400D40294D2E403040344D36530D5314 -5C165C1A531C5322620D621C6222700D72221B013C2B121E2B030F283D21042F3F1B040B -0B073F0F0A353F150A1E122B011A7F2C012C0C0C251A002C18008F393F3901321B188538 -10F6ED5D10E4113910ED332F2F5DFD323939003FED3FED332F3FED3FED1217392FED3130 -015D01211416171E013332363733150E01232226270E01232200111000333216173E0133 -321215272E012322060F0134262322061514163332360776FCDC3C34348D526DCD460C62 -BF69A8E84A45D183E9FEEF0117E38CC84447D78FE1ECB703918D8BAF10B8A49399A0A792 -92A5021B689831312F4F38CD2A347A686F78013C01110115013979726A81FEF4EF2A9B9B -A4927DD7D5E0CCD4D7D500010099023C047D02DC00030018400C0154020000050F051F05 -02022F5D11332F002FED313001213521047DFC1C03E4023CA00000010099023C076702DC -00030011B6015402000005022F11332F002FED3130012135210767F93206CE023CA00002 -FFED03E503160614000300070052B502180D103701B8FFE8B3090C3700B8FFE840090910 -3706180D103705B8FFE8B3090C3704B8FFE8401309103701000501050502060100B10202 -04B1062FED332FED003F3C332F5D3C3130012B2B2B2B2B2B0123013303230133031686FE -F1F0EF86FEF1F003E5022FFDD1022F000002009603E503BF0614000300070050B90004FF -E8400E0D10370518090C37061809103700B8FFE840200D10370118090C37021809103701 -000501050503070100B1020204B1000601062F5DED332FED003F3C332F5D3C3130012B2B -2B2B2B2B090123132301231303BFFEF186A5A4FEF186A50614FDD1022FFDD1022F000001 -FFED03E5018606140003002EB502180D103701B8FFE8B3090C3700B8FFE8400D09103701 -00010101020100B1022FED003F335D2F3130012B2B2B0123013301868AFEF1F403E5022F -000100A003E5023906140003002FB90000FFE8401A0D10370118090C3702180910370100 -010101030100B1000201022F5DED003F335D2F3130012B2B2B090123130239FEF18AA506 -14FDD1022F00000300D2000705BA051100030007000B00414029000B010B5608AC045407 -0F0101015602AC0F070107400D01300D400D0204AB000B2D05AB01400A010A2F5D3CE4FD -3CE45D5D002F5DF4ED5D10FDF4ED5D313001231133012135210123113303BDEEEE01FDFB -1804E8FE03EEEE03FE0113FD2BA0FD2B0113000200ACFFC805E00554000300070057403B -4804470658045706680467067F047006087F057007020705000301000330036003900304 -03B200023002600290020402B220010406020002000201192F3333182F2F123939002F1A -19FE5DEE5D11173931305D015D090705E0FD66FD66029A01BDFE43FE4301BD028EFD3A02 -C602C6FD3A01DDFE23FE2300FFFF003DFE64047F05DB0236005C00000116008EDD000016 -400F02100E600E700E0301000E0B040025012B355D35FFFF0006000004E607500236003C -00000117008EFFED01750019401302000E400E500E600E700E0501000E090500252B355D -35000001FF9A0000034B05D10003001D401138034803680065016903050100030000022F -332F003F2F3130015D09012301034BFCF4A5030C05D1FA2F05D100010000FFE504CA05EC -003300CC408758040102B52F0103B81D010237184718571867187718E718F71807013A00 -4A005A006A007A00FA0006032C06502998090109230F5020F71201081218122812581204 -00121203151827190119191D341502002833010133332F34030A272001022320292C0400 -0F12090604260C082A182A282A03002A21210C18007135103407073426150C683410F4ED -12392F103C10F63C11392FC45F5D111217391117395F5D003FED332F5F5D333FED332F5D -331112392F5F5D5D3CFD3CDD5D3CFD3C5F5D5F5D5F5D5F5D31305F5D250E012322000323 -37332E013534363723373312003332161715232E01232204072107210E01151416172107 -211604333236373304CA6CB97EF3FE8331862C4B02020202772C5D3A0174F38DBF541050 -C67C9DFF003001DB2CFE3C02030202017C2CFEC4310108969DB2440F3E3326012E010476 -152F161A34187601010128292DD1413DCFB17618341A172E1576B6D13F3D000100BA00AC -02E0046C0006002C400972050104400C103706B8FFC0400C0C1037030300040501000001 -2F332F123939002F332F31302B2B015D2501350115090102E0FDDA0226FE8D0173AC01B4 -5901B3C7FEE7FEE7000100C200AC02E8046C0006002C40097D030104400C103702B8FFC0 -400C0C10370505010403010000012F332F123939002F332F31302B2B015D090135090135 -0102E8FDDA0173FE8D02260260FE4CC701190119C7FE4D000002004400000453061E0003 -001E005B40370B103A10601A741A04014402031515193F1100070A3E1D0D050509080B14 -0160051A006004140A0492201D071A0B0D0A400D10370A891F10F62B3232FD3210E61139 -10E4FDE42F2F003F3C3F33FD323FFD322F3FED3130015D01233533032311211123112335 -333534363332161715232E012322061D01210453D0D011BCFDF9BC7F7FC8B73E65290A1C -6A22796A02C90518C3FA2503C2FC3E03BF9E31C1CF0D07AA08146B8C2800000100440000 -0447061E001A004E402D6C077A0702191A191A053E16000C0F3E091205010E08100A011A -000A0F00921C090C1A10120F400D10370F891B10F62B3232FD3210E6113910ED2F2F003F -3C3F33FD323FED33332F2F31305D2123112E012322061D01211521112311233533353436 -33321617370447BC2B8B35A2850149FEBDBC7F7FE9DE45902CBC056D080C6C8C2C9EFC41 -03BF9E31BFD10E040800000100BB007C045B06140013005740390B0E0F1011080609AA0A -0712130001040605AA060A060C030C010F151F150210630063020407080B0C0D0E111201 -0A022803090563700301032F5DF63C10ED173910E6E65D003F2F1239392FED17392FED17 -3931300125132313053505110535050333032515251125045BFE6D058405FE6D0193FE6D -01930584050193FE6D019301FB05FE7C018405810501A20581050184FE7C058105FE5E05 -000100FD01FF01EC031A00030016400C02560108002D2F013F0102012F5DED003FED3130 -0123113301ECEFEF01FF011B0001FFF6FEEC018F011B0003002EB90000FFE840190D1037 -0118090C370218091037010F0301011F03010300B1022FED002F5D335D2F3130012B2B2B -09012313018FFEF18AA5011BFDD1022F0002FFF6FEEC031F011B000300070051B90004FF -E8400E0D10370518090C37061809103700B8FFE840210D10370118090C37021809103701 -0005010505030F071F07020700B1020204B1062FED332FED002F5D3C332F5D3C3130012B -2B2B2B2B2B0901231323012313031FFEF186A5A4FEF186A5011BFDD1022FFDD1022F0007 -0095FFE30B9305ED000B000F001B00270033003F004B00C640900908060A0918061A083C -073E1808170A1818171A193C163E2908260A2918261A283C253E460D480F560D580F680E -17791F7625792B7631794376490625512F034F030203031F5109020F030E08432B513D20 -19401902191949315137130A4F0C400E020C0E462A003A013A402A3A003401342E2A0016 -01163416282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D12 -3939ED33332F5DED2F5D33ED2F5DED2F2F5D003F3CFD3C332F5D3CFD3C3F3F3FED332F5D -ED5D3130015D011406232226353436333216250123090114062322263534363332160134 -262322061514163332360134262322061514163332362514062322263534363332160734 -262322061514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6 -BAFABB596466585866645904935964665858666459043EBEB2B5BABDB2B6BAB259646658 -586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADCDDE0DADA01B8AC8888ADAD8787 -FE17AC8888ADAD8787AEE0DADCDDE0DADADFAC8888ADAD878700FFFF001A0000055E0801 -023600240000011700D600280175000BB602000F0B050025012B3500FFFF00C80000049D -0801023600280000011700D600260175000BB60100100C020325012B3500FFFF001A0000 -055E08010236002400000117008DFFF80175000BB602000C0C050025012B3500FFFF00C8 -0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500 -FFFF00C80000049D080102360028000001170043003C0175000BB601000D0D020325012B -3500FFFF0089000002D508010236002C00000117008DFF120175000BB601000D0D040925 -012B3500FFFF005D0000030808010236002C0000011700D6FF270175000BB60100100C04 -0925012B3500FFFF007E000002E207500236002C00000117008EFF240175001940130200 -104010501060107010050100100D0409252B355D3500FFFF0089000002D508010236002C -000001170043FF3E0175000BB601000D0D040925012B3500FFFF0073FFE105DA08010236 -003200000117008D00780175000BB6020025250F0325012B3500FFFF0073FFE105DA0801 -023600320000011700D6008F0175000BB6020028240F0325012B3500FFFF0073FFE105DA -08010236003200000117004300AA0175000BB6020025250F0325012B3500FFFF00B2FFE1 -052908010236003800000117008D006E0175000BB60100201F0D1D25012B3500FFFF00B2 -FFE105290801023600380000011700D6005B0175000BB60100221E0D1D25012B3500FFFF -00B2FFE1052908010236003800000117004300AA0175000BB601001F1F0D1D25012B3500 -000100BB00000177045D0003001E4011020501087F05010592001A7F010101880410F65D -FDE65D003F3F3130212311330177BCBC045D00010136051103E1068C0006003A40275905 -5606690566067A0573060601020350056005700503050560030103500060007000030000 -042F332F5D002F5D332F5D1239393130015D01230B0123133303E19FB9B89BE4E3051101 -00FF00017B00000100ED051D042C06530019003940233902350E4902450E04190D190952 -0F101F1002101652100D600301031928000C28000D2F33ED2FED002F5D3333ED2F5DED33 -2F2F31305D010E01232226272E0123220607233E01333216171E0133323637042C0B846F -365C292F412734340483088E67325D2A2F49213339030653989A27252B2B5A4C979A2724 -29295C4600010118053703FE05D10003001440090253100101010000022F332F002F5DED -31300121352103FEFD1A02E605379A0000010113050E0402068C000D0056403A6508650C -7508750C040D5006600670060306060AAA094003F00302D19003E003029003E003028B00 -03018950030150030159030D2A00072A00062F33ED2FED002F5E71725E5D5E5D715E5D5E -ED332F5D3C31305D010E0123222627331E013332363704020AC5A9A9C509A60C6B5B596B -0E068CA8D6D6A8847878840000010221051802F505DB0003000EB50244010015012FED00 -2FED31300123353302F5D4D40518C3000002012D050903E907B1000B00170045402E0F51 -090009300902313009015009600970090309091551030C29200030000200003000600003 -D0000100001229062FED332F5D7172ED002FED332F5D725E715EED313001140623222635 -343633321607342623220615141633323603E9CC9290CECC9293CB917558587576575875 -065E8FC6C5908FC4C48F567776575776760000010161FE59037000140014002440150B02 -1B012B013901041207070B53030D0E2A0000062F332FED003FFD322F2F31305D05140623 -22262735331E0133323635342627331E010370B79225742D091A58326862060399020659 -A2AC0E0CA00A1A4E581D491913340002015605160477068C000300070042B54500450402 -00B8FFE8B30E103704B8FFE840190E10370750036003700303030305019F000100000204 -0204062F33332F2F332F5D002F33332F5D333130012B2B5D09012313230123130477FEFE -8BA9B0FEFE8BA9068CFE8A0176FE8A0176000001019FFE5F037C000A0014002440150E04 -1E042B043B04040A14141053030D000D2A00062F33ED2F003FFD322F2F31305D010E0123 -222635343637330E011514163332363733037C344B2A8BA90D069B0606535A24511108FE -790E0C9E8F263E1A1B3C1E524E1B080000010132051103DD068C0006003A402754015902 -64016B0274017B020606050250036003700303030360020102500060007000030000032F -332F5D002F5D332F5D1239393130015D01032303331B0103DDE4E3E49FB9B8068CFE8501 -7BFF00010000000100180000048005D1000D0047402A3B0B4B0A5A0A7A0A04020B050804 -090309090106030C3501080A030A00000F0F0F01080B140503026C0E10F63232FD325D11 -332F392F2F003FED3F12392F2F12173931305D29011107353711331101150111210480FC -52BABAC6015DFEA302E8021798A395031AFD78011BA3FEE8FE0700010018000002360614 -000B003D4023490559056905030407010A040B05050B0B030801030800050D92000A011A -050704880C10F43232FD3232E62F2F003F3F12392F332F12173931305D01071123110735 -37113311370236B5BCADADBCB5037A91FD1702608D9F8A0318FD7194FFFF0086FFE50502 -0801023600360000011700DF004D0175000BB6010034311A0025012B3500FFFF006EFFE5 -03D7068C023600560000011600DFAE00000BB601003734180025012B3500FFFF007E0000 -050808010236003D0000011700DF00320175000BB601000D0A020625012B3500FFFF005D -000003E3068C0236005D0000011600DF9400000BB601000D0A050625012B35000002017A -FE780228061400030007002940160F094F090201060106050201050B00041F014F050105 -2F5D3CFD3C003F3F1239392F2F3130015D01231133112311330228AEAEAEAE02F6031EF8 -64031E000002000E000005BC05D100120025005240333816481666026811041B1E083C0B -0B071A340C031F3407087600011D1D0713150074270F274027602703091B1E140B09076C -2610F63232FD322F5D10F6ED12392F5D003FED3FED12392FFD393931305D011402070E01 -23211123353311213204171612073426272E012B011121152111333236373E0105BCB193 -66FBCDFE88C4C40174DA01025898AACF7A7958C68ABC0169FE97BC8FD5596F6F02E7CBFE -B65B3F3802E48F025E3F375FFEC4D6AFF0453227FE4C8FFDC62A3947E8000002006AFFE1 -0471061E001F00310084405B190D290D32013420392B362D45014C0D44204A2B442D5A2B -542D6F05741E7421100C03293F090F121A1D041B10100903161B1B3F164F160216022F3E -030A1C111A1D1C030011120F0C26051F162F160216231316090000092C14062FED11332F -1239ED2F5D17391217392F2F003FED3F5D332F111239392F1217392FED123931305D0110 -00232200353400333216172E01270527372E012735211E01173717071612013E01353426 -272E012322061514163332360471FEE4F1E5FEEB0112CA6C9B56208757FEF842ED54905D -0127236225D242BA99A6FEDE313403024BA55693A9A98F427B027DFEBCFEA8010EF5E201 -08353570D64AA2618E43512F1019431A80616D93FE9BFD8A3BA99620371E2D2BAF98B4AE -2C00FFFF0006000004E608010236003C00000117008DFFE40175000BB601000B0A050025 -012B3500FFFF003DFE64047F068C0236005C00000116008DDD00000BB601000A09040025 -012B3500000200C80000049605D100120021005C403E391F491F551180108011051B3400 -0701071A34200C010C0C07090A0309080F231F23021315200030004000700004006F230F -233F23020C1B071400096C2210F632FD32325D10F65DED5D003F3F1239392F5DED2F5DED -3130015D011406070E012B011123113311333216171E01073426272E012B011133323637 -3E010496463C4EDB97C6C6C6CD85C243535ECE343830805AC4A777982F2C2903135CA939 -4B48FEBE05D1FEF22D2C35AA7D486B231E19FDCD292D2966000200B9FE64049006140013 -0020004D4035320239153220430249154220561267127E087C1C0A0E0906174211040C01 -1E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED -3F3FED12393931305D011406070E012322262711231133113E0133321203342623220607 -111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F51A44B5073499DB0023C -88E14E4A512628FE2C07B0FDD43F55FECFFEECCAC84639FD87241AD4000100DC023C05B0 -02DC0003001E401100540F02010240050130054005020000012F332F5D5D002F5DED3130 -0121352105B0FB2C04D4023CA000000101230069056904AF000B00264017D702D80802A7 -0201D705D80B02A80B0105840294020202192F5D002F3130015D71005D71250709012709 -01370901170105696FFE4CFE4C6F01B8FE486F01B401B46FFE48D86F01B8FE486F01B401 -B46FFE4801B86FFE4C00000101230236039205D5000F002E4018055006060C030E03AA01 -0E0505020F0F0C0E2A02100301032F5D33ED39322F2F332F003FFD323F332FED31300121 -35331123353236373E01373311330392FD99EAF22D6C1E252C0387DD02367A0238700D0C -102C28FCDB00000100CF023603C705EF001D0045402D24152518361535184C105E106D10 -651866197D1075180B0F0F0B521302021C52010E00001C02082A16101610022F33332F2F -ED1239332F003FFD323FED332F3130015D0121353E01373E013534262322060723353E01 -333216151406070E01072103C7FD0864A733834A6B5A59AC300D47AF57B4BB6173379B42 -022002369C3E6E29676754454C3D1FB41A239D7D63975A2B6629000100CF020F03BC05F0 -002E007740162A033903450C4A1F540C5C1F6B0864237D0874230A27B8FFC040390B0E37 -2C2B15520F16010F161F164F165F16CF16FF16061621211D52160625020A0A0E52060F1A -2A281622112A2216282C04091000010000092F332F5D121739ED2F2F2FED003FED332F3F -1239ED332F2F5D71ED393931302B5D011406070E012322262735331E013332363534262B -01353332363534262322060723353E0133321615140607151E0103BC42383994595EA54A -0E29C35D648576708F80706B63684DC32C0E4AAD5AAFC16E595F8303314B712223211E1C -B3243B474B553C8D4D443D473E24B21B23886A59721A08116F00FFFF00AB000007A305D5 -0036023B9200003700BB023700000117023C0404FDC300204015020E08020E400E600E02 -010B2B0B5B0B6B0B7F0B045D11355D1135003F35FFFF00AB0000074105D50036023B9200 -003700BB023700000117023E0384FDC3002640190302100803020E1F0E5F0E7F0E03010B -2B0B5B0B6B0B7F0B045D11355D113535003F3535FFFF008C0000077905ED0026023DA600 -002700BB029100000107023E03BCFDC30036402603023608030236103630367F36030131 -003134314B315F316B317B3106000900093F094F09035D11355D11355D113535003F3535 -0001003C0000047405D10011005840330C0F09512F063F060206060B02344F0501050510 -0B01341003200301080803032F00010000130E01050A140F0E2F0B3F0B020B2F5D3333FD -32322F11332F5D332F392F5D003FED2F12392F5DED12392F5DED39393130012111211521 -1121152111231123353311210474FD3E028AFD76014AFEB6C0B6B603820526FE55ABFEEF -8BFECC01348B0412FFFF0073FFE305A208010236002A0000001700D900CF0175FFFF006C -FE590443068C0236004A0000011600D9FE00000BB6020037311A2325012B3500FFFF0089 -000002D507500236002C0000011700DAFF240175000BB601000D0C040925012B35000001 -0086FE59050205EC004700C240990B0B0A1F0036003A1B0B1B1F13362F0B2A1F292F2436 -24463F0B391F3427392A34363441481F4427482A43364B3E44415F035A05523257365544 -6B026F046A30643264366642604679057A2D703670377541754486292B20400E10371F40 -0E10371A060028313F06341D38383C343402212125341D0A101014530C0D0F0F172A0937 -3F153128150031371D0904200074490F49704902206A4810E65D10E611173910ED2FED2F -2FED332F003FFD322F3FED332F3FED332F1112173931302B2B5D011406070E01071E0115 -14062322262735331E01333236353426270E012322242735331604333236353426272E01 -272E013534243332041715232624232206151416171E01171E01050251492C683E0303B3 -9A25742D091A523868620302142515A1FEFF850E71012882B8CD61634BAF62C6BF013CF3 -9D0106650E55FEEB919FC1607940EC52A6A801A957AA3B233711162C199DB10E0CA20A1C -4E5818291201023C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E -28152CB20001006EFE5903D70478004A00AA40810820090C37090204321902173224202B -3B34203A3B43204B3B5A1C5C2D5237534652496B1C6B2D6237624662497C1C7C28743779 -3F74428B0188248531873F1D170300252F4006351A80390139393D3E35041E1E223E1A09 -0D0D1153090D0C0C142A0638401B2F251B002F381A06041D008E4C0F4C1F4C3F4C5F4C7F -4C051D864B10E65D10E611173910ED2FED2F2FED332F003FFD322F3FED332F3FED332F5D -1112173931305D2B011406071E011514062322262735331E01333236353426270E012322 -262735331E0133323635342726272E01272E01353436373E013332161715232E01232206 -15141716171E011716171603D77F6F0205B79225742D091A5832686203021528177CCF46 -0A59DA647C8C26266C288135937B393A38AD6B64CD440A48CE63678E2B2A5E34812B8347 -4701426BA32A13361AA2AC0E0CA00A1A4E58182D0F02023B23D3434F5056422222180918 -0E27976E457A302F373123C935494F4E452323160C180A1E494AFFFF0073FFE505460801 -0236002600000117008D006E0175000BB601002D2C0C1525012B3500FFFF0069FFE703F3 -068C0236004600000116008DCE00000BB601002423090F25012B3500FFFF0073FFE50546 -0801023600260000011700DF00A80175000BB601002E2B0E1525012B3500FFFF0069FFE7 -03F3068C023600460000011600DFF600000BB601002522090F25012B35000002006CFFE1 -04FB0614001B0028006F404A3B05380C3C2232243E284B054A0C4E2245244F2859086908 -70120D0114511A17171018011304072041100403082642070A160088011617131C041A1A -01922A1F2A3F2A02231B010A852910F632ED5D10F632FD3232323210E42F003FED3F3FED -1239393F12392F3CFD3C31305D01231123350E01232202113436373E0133321617352135 -213533153301112E0123220615141633323604FBB8BC4DAD6EC6ED524444B66059864CFE -95016BBCB8FE8C4F73499CB2879750A404F4FB0C754252012E01118EDB4D4C4F2427CE86 -9A9AFB9902792218D6CCC3CD47000001FFFC0684051A06FC00030011B601500200000502 -2F11332F002FED313001212721051AFAE705051E06847800000100FD01FF01EC031A0003 -0016400C02560108002D2F013F0102012F5DED003FED31300123113301ECEFEF01FF011B -FFFF001A0000055E0801023600240000011700D900310175000BB60200110B050025012B -3500FFFF0068FFE1041D068C023600440000011600D9D600000BB602003A340B2625012B -35000002001AFE5F062B05D1001B001E00C840900F051F052E053E05401D700806381C4A -0E450F590E570F051D1E1D1C0A77098709020914100F101D1E0B770C870C020C140D0D0E -570E580F7D0E730F040B34301E401E701E031E091E1D030D0E031B1B1753030D107A0D01 -0D080000142A060F20010E0F1D06040D0C102410391042105A106A1074100710106E200F -20010A0D2B0D360D4D0D550D650D7C0D070D641F10E65D5D10F42F5D1217395D2FED332F -003F5D3C3FFD322F3F1217392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D -005D010E012322263534363703210323012101230E0115141633323637330902062B344B -2A8BA91E0679FD7C92C9021E0108021E610607535A24511108FD91FEFBFEFAFE790E0C9D -90406A150154FE6105D1FA2F1B351B524E1B08033102DBFD250000020068FE5F052E0478 -003A00470099406A0B11052B1A12162B2A0544225F25544065166C2562407B127B1D7F25 -703F0F0C041B04390559166916053A3A3653030D0A103C3D301940190219192810242420 -3F28044541100A3009080000332A060F25012506193B091A2F25132F91490F491F493F49 -03421B13854810F6ED5D10E4113910FD3232322F5D2FED332F003F3C3FED3FED332F1112 -392F5DED12393FFD322F31305D015D010E0123222635343637350E01070E012322263534 -3637362437353426272E012322060723353E01333216171E011511230E01151416333236 -373301110E01070E01151416333236052E344B2A8BA90D041955282F7A5297D26D656601 -1EA42D2A28703D4AB6610A37D06576AF403F421D0607535A24511108FE3456E944516474 -7763A4FE790E0C9E8F263B1377113D12171FC89B7F9D2D2D20081D40541817102725BF0F -24272F2E926CFD0A1B321E524E1B0801FB013705141317615560614DFFFF00C8000005B2 -0801023600270000011700DF00280175000BB60200211E080F25012B35000003006CFFE1 -062706140003001700240072B90000FFC0404A0E10370118090D3702180910373D073D1E -34203B244D074F1E45204B245A0A6A0A70140B02020316011506091C4112040508224209 -0A0000021618061A02041F263F26021F1B040C852510F632ED5D2F33FD32322F332F003F -ED3F3FED1239393F33332F31305D012B2B2B010323130123350E01232202113436373E01 -33321617113303112E012322061514163332360627FA7F98FEFDBC51B067C8EB514544B5 -6158884BBCBC4C78479EB0889650A40614FE0701F9F9EC75464E013401118EDE4E4C5025 -2701E4FAFF0281221ADCCAC7CF47FFFF000E000005BC05D1021600E70000000100C8FE5F -04CD05D10020005C40390C041C042D043D04041235000F100F020F0F090E350B03133516 -090820201C53030D00192A0006060C10030A1473220F22010F1314140A6C2110F432FD32 -5D10E61117392F33ED2F003FFD322F3F3CED3FED12392F71ED31305D010E012322263534 -3637211121152111211521112115230E01151416333236373304CD344B2A8BA90B06FDC7 -03D5FCF1030FFCF1030FFE0607535A24511108FE790E0C9E8F24331D05D1B0FE68B0FDD7 -B01B351B524E1B080002006AFE5F0460047C002C0033007B40560D1E1A1E2604290D2B1E -34043A0D3C1E3B3244044B0D4B32590D502A6C0D602B790D783212191915531D0D013C33 -3323303D29040F230B0B073F2309122A20201A1A0C0C2D1A008F350F351F353F35033301 -1B26853410F6FD325D10F4ED332F3C11332FED003FED332F12393FED12392FED3FFD322F -31305D01211416171E013332363733150E01070E011514163332363733150E0123222635 -343637260011100033321215272E01232206070460FCC93E36348F5672E7310A4A9B5102 -03535A24511108344B2A8BA90604F8FEEB012BF4E2F5B701939697B30C021B6799313030 -5B2CCD1F3109143012524E1B089F0E0C9E8F18321212012A010401120142FEF8F32A94A2 -B284FFFF00C80000049D0801023600280000011700DF00220175000BB601000F0C020325 -012B3500FFFF006AFFE60460068C023600480000011600DFFD00000BB602002320120025 -012B3500FFFF00C80000047608010236002F00000117008DFEC00175000BB60100080702 -0325012B3500FFFF00AB0000025108010236004F00000117008DFE8E0175002FB5700270 -030203B8FFC0B3090C3702B8FFC04011090C3701044F049F040201000605020325012B35 -005D11352B2B5D00000200C80000047606140005000900464016070C0B0D370808090102 -030435010800000B0F0B0106B8FFEA40110E1037080C0B1037060608041408016C0A10F6 -32ED2F332F2B2B5D11332F003FED3F3F332F3130012B2901113311210B0123130476FC52 -C602E8C3FA7F9805D1FADF0564FE0701F900000200BB000003540614000300070042400D -010C0B0D370202030601050800B8FFEA40190E1037020C0B103700000F021F0202020204 -1A7F050105880810F65DFD322F5D332F2B2B003F3F33332F3130012B0103231303231133 -0354FA7F98FCBCBC0614FE0701F9F9EC0614000200C80000047605D1000500090036401E -07562F0801080801020304350108062D07070100000B0F0B010414016C0A10F6ED5D1133 -2F12392FED003FED3F12392F5DED3130290111331121032311330476FC52C602E89CE9E9 -05D1FADF0157010B000200BB00000362061400030007002D401A05560606010201010807 -2D6F067006020606001A7F010101880810F65DED332F5DED003F3F12392FED3130212311 -33012311330177BCBC01EBE7E70614FBF4010900FFFF00C8000005380801023600310000 -0117008D00780175000BB601000C0B050925012B3500FFFF00B90000045F068C02360051 -00000116008D0000000BB6010019180E1625012B3500FFFF00C800000538080102360031 -0000011700DF00A20175000BB601000D0A050925012B3500FFFF00B90000045F068C0236 -00510000011600DF1C00000BB601001A170E0225012B3500FFFF0073FFE105DA08010236 -00320000011700DD008C0175000DB703020029260F0325012B353500FFFF006AFFE10471 -068C023600520000011600DDD800000DB70302001D1A060025012B353500FFFF00C80000 -059808010236003500000117008DFFF60175000BB602002221060B25012B3500FFFF00B9 -00000372068C0236005500000117008DFF380000000BB6010015130A1225012B3500FFFF -00C8000005980801023600350000011700DF000A0175000BB602002320060B25012B3500 -FFFF009200000372068C023600550000011700DFFF600000000BB6010016130A0325012B -3500FFFF0086FFE5050208010236003600000117008D00140175000BB6010033321A1F25 -012B3500FFFF006EFFE503D7068C0236005600000116008D9400000BB601003635063225 -012B350000010000FE5904EE05D1001B0048402E0C071C072C073C07040C0C1053080D01 -18351A030216080B0B132A050F1D1F1D4F1D03005B050114185B4F1901192F5DF4FD32E4 -5D2FED332F003F333FFD323FFD322F31305D0121111E011514062322262735331E013332 -3635342627231121352104EEFDEC0309B79225742D091A58326862050332FDEC04EE0521 -FB04144822A2AC0E0CA00A1A4E581E36170521B00001003EFE5902FD059E0030006F4046 -0C080D1A19081E1A2B082F1A3C08070D0D1153090D20251C3E22201F0503171830302C3F -18094F327F32020C0C142A06182306031C008C321D22251A1F1D4F1C7F1C021C883110F6 -5D3232FD322F10E61117392FED332F5D003FFD322F1239393F3333FD322F3FFD322F3130 -5D250E01071E011514062322262735331E01333236353426272322263511233533113311 -211521111416171E01333236373302FD0C1C100204B79225742D091A58326862030214AB -B27F7FBC0184FE7C0818164D4F2E64160A0A030703122C18A2AC0E0CA00A1A4E58172F10 -B7CB02529E0141FEBF9EFE0358632B28251B0900FFFF0000000004EE0801023600370000 -011700DFFFEE0175000BB601000B08060725012B35000002003EFFEA037A0705001B001F -0073404C0B041C042A042A1D2A1E3A1D3A1E4A1D4A1E551C641C691E741C791E0E1F1F1E -0B10073E1E0D0B0A051B1B173F03094F217F21021C1C1E1E100E008C21080D101A0A0800 -4F077F070207882010F65D323232FD322F10F63211392F332F5D003FFD322F3F333333FD -322F2F332F3130015D250E012322263511233533113311211521111416171E0133323637 -331303231302FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A7DFA7F980A0E12B8 -CB02529E0141FEBF9EFE0358632B28251B090652FE1101EFFFFF00B2FFE1052908010236 -00380000011600DB63500079405B02010900210140215021A02103EF102101902101BD00 -210150218021028B10214021702103B021C021F021039021C02102599021C021E0210310 -21602190210331002101E021010F211F214021502180210521020100241E0D1D25012B35 -3500115D71725E71725E5D71725E5D725E5D725E5D715E353500FFFF00B1FFE1045707B1 -023600580000011600DB0000000DB70201001D17091625012B353500FFFF00B2FFE10529 -0801023600380000011700DD00780175000DB7020100241F0D1D25012B353500FFFF00B1 -FFE10481068C023600580000011600DD0A00000DB70201001D18091625012B353500FFFF -007E0000050808010236003D00000117008D00070175000BB601000B0D050625012B3500 -FFFF005D000003E3068C0236005D00000117008DFF680000000BB601000B0D050625012B -3500FFFF007E0000050807500236003D0000011700DA00390175000BB601000B0A050625 -012B3500FFFF005D000003E305DB0236005D0000011600DA9200000BB601000B0A050625 -012B3500000100C80000048A05D10005001F401003013504030000070F07010214036C06 -10F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D100030073 -FFE105DA05F0001700230027006D404F040004060B0C0B1217001706190C191257015705 -53075F0B580D58115F13531710253560260126260976097915021B3415022134090A2726 -27260F18150373290F29010F291F293F29031E150F682810F6ED5D5D10F6ED1239392F2F -003FED3FED5D12392F5DED3130015D011612151402070E01232224272602353412373624 -33321613100023220011100033320003213521051E5B6163595CFBA19DFEFF5A5A61605C -5801059AA0FF47FEFCE1E3FEFD0108DEDE0107ACFD8D0273052664FEDEB8B8FEDD616566 -6863630120B9B6012167626869FD610122013BFEC5FEDEFEDBFEC901370106B300030069 -FFF0062405E1001D002A00370058403624182C321525062B32091509081603082A1E2532 -65006A0F041E150032150F00072B1518250407140F080839381F393F396F399039045D11 -12392FC4ED173910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01 -071523352E01272E01353436373E01373533151E01171E01073426272E0127113E01373E -0101110E01070E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F -4B57CE403B3A8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A -524AD88C88CC4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01 -363737AA6170B63A2D3C0002006CFFE10443047C00130020005740162A032A203C1A301C -38204F1A421C4820580668060A10B8FFC040230B1037120502110518410E0401081E4205 -0A1114021A0092221F223F22021B1B08852110F6ED5D10F6FD3232003FED3F3FED123939 -3F31302B5D2123350E01232202113436373E0133321617353303112E0123220615141633 -32360443BC51B067C8EB514544B56158884BBCBC4C78479EB0889650A475464E01340111 -8EDE4E4C502C2734FCB6027C221FDCCAC7CF47000002006AFFE104730614001900280086 -4029031C0520171526153B0A3A0E3A1C3E214C0A490E4A1C4F2153176B0E7B0E7A207B21 -1136264626021DB8FFE04034121C371D180A11371D171D0C050F133E1001263F030A1111 -001D0C0F1A1B00140F00902A0F2A1F2A3F2A6F2A040F0F231B06852910F6ED332F5D10E4 -113910ED11393911332F003FED3FFD323F33332F2B2B5D31305D01100023220011343637 -3E01372E012735211521151E01171E01073426270E01070E011514163332360473FEEBEE -F1FEEB564045B45C4CB466032AFDCF44DE5D9676C26E6E4291423F55AA9C99A60227FEF0 -FECA012F01068DC5404852113F8748B39E0A2E9C5488FBA487E45608303532AE7FC9D0D3 -0001006DFFE603EE0478003D007C40432612263B363B49014418590154186A016F0B6418 -79017A0B7418792274350F0C2C3F2B2B03161A1A1E3E16043D3D393F0309192B40090C37 -2B241B10100C2B19040900B8FFC0401009143700003F7F3F803F02331B09863E10F6ED5D -11332F2B1217392FED2F2B2F003FED332F3FED332F1112392FED3931305D250E01232226 -272E0135343637352E01353436373E013332161715232E01232206070E01151416171E01 -3B0115232206070E01151416171E01333236373303EE6BCE734FA446455771795B6C5F41 -40A24F62A45A0D42C3642D4E2A233338302D68356F9E3E642A2931342925653866E8470D -40302A2028277F5E6090260718845C5975222120211CCF33380B140F432C3D440F0E03A6 -0911114A3B354A151314483E0002006AFFE1050F047C0011001D004D40163A15351B4A15 -451B040E3F0D05153E09041B3F030A0FB8FFC040190B0D370E0E090C0F0306121B00901F -1F1F6F1F02181B06851E10F6ED5D10F4ED121739332F2B003FED3FED3FED5D3130011000 -232200111000333216172115211E010734262322061514163332360471FEE7E9F1FEEC01 -1AED376A1D01E0FEE03E44C2A49AA1A4A79C98A8022EFEE7FECC013C01110113013B1609 -A549C27FD7D6E0CDD1DAD7000001000A000003EE045D0007003840230301043F06054000 -4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32 -2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A50002 -0068FE6405EA047A001D0024007840163515740F022110090C37213E1A040F0522037717 -0117B8FFF0400F090C37173E0609050C75147A1E0211B8FFC040250D103711112217041A -05050C1E1B3A0001008F260F261F264F266026040F2601141B0C852510F6ED5D5D10F45D -ED12392FED3939332F2B5D003F3FED2B5D39393F3FED2B31305D011000051123112E0127 -2E01353412373315060215141617113E0133200003342623113E0105EAFEA9FEF3BB82DD -51555E7685E58894E1BD214B270130015DC3E0C1CED30240FEFDFEC40FFE72018E065145 -4AC4869F01128A1163FEF6A7BDE60603E80201FED5FEFBB8DBFCB20AE8000002FFFCFE59 -051AFFAE000300070020400F02500101080650050D0400000905022F3311332F33003FED -12392FED31300521352111213521051AFAE2051EFAE2051ECA78FEAB7800FFFF01230000 -03DC05D10036000400000117000401D90000001E40140302200D5F0D6F0D030D01000005 -10057F0503052F5D35352F5D35350001009A022A03C605F00016004DB90014FFE0B3090C -3715B8FFE0B3090C3713B8FFF84017171B370110130D0D085313020E03012A000018100B -2A0DB8FFC0B3090A370D2F2BFD3211332FED003F3FED332F1239332B31302B012B012311 -3426272E012322060711231133153E013332161503C6AC0E15164D40418D41ABAB4BA254 -9AA6022A0215466A2424234332FD4503AB683E45B9AB000200C8FFE508CA05D1004E005D -00E240210B18044D19012E18204D55316A186631654D791375487952735A0D05200E1037 -3DB8FFE040310E103711001A46043B033F400B0D373F3F433E3B4F3501353B351E37213E -34243134032C573450290129292B56342C0307B8FFC0403C0B0D3707070E3E0309202B3A -4F4A4F0237341F1A20201A330606461A381D3E1A3E1A3E111A00005F0F5F014F13225F33 -7F33023333572A13702B012B2F5DFD32332F5D39ED5D11332FED33332F2F123939ED332F -1112392FED39395D002F2F3FED332F2B3FED12392F5DED1217392FED393933332F5D2FED -332F2B1112173931302B2B5D0114062322262735331E01171E01333236353426272E0127 -2E013534363723112311230E01070E012B01112311333216171E011733353315213E0133 -32161715232E01232206151416171E01171E01013426272E012B0111333236373E0108CA -E2BE6ABA3D0917472D356145667943552A62377E6E0F12DDB57C0C3B2F4DCCA030BCF486 -B44847580A78B5017F24733155B53E0940B15B59723B562E642E7284FA5E36372F83572E -1178962F2F2701429BC23C22D31331161A1E4C5A4844160B131026956E254426FC4E03B2 -45792F4D4DFDD505D12D302F9364DCDC12183024C935494E4F4648170C180C1E8E024F4D -75241F1DFDA32D2F306DFFFF0089FFEB063E05D10036002C00000117002D035400000005 -B20F23015D00FFFF00AFFE59043D05DB0036004C00000117004D02280000001840115023 -60237F23030302500C600C7F0C030C2F5D35355D000200000000052706140016001A0065 -B90017FFE8403F0D10371818090C3719180910370315161575150318181701100D084213 -040E05010D08171740190119100B1A19300D500D700DAF0DCF0D050D0D021A00911C10F6 -ED332F5D33FD322F5D332F003F3C3F3FED12393F332F31305D012B2B2B2123113426272E -012322060711231133153E0133321615090123130527BC1218195E4B4DA84DBCBC58BC63 -B5BEFC72FEF18AA5027C4D87262A294C3BFCBE045D7C4952DACD033FFDD1022F000100D5 -0366028705D100030027B90000FFE840140D10370118090C3702180910370101030300B1 -022FED003F332F3130012B2B2B090123130287FED688C205D1FD95026B00000200D50366 -041805D1000300070050B90004FFE8400E0D10370518090C37061809103700B8FFE84020 -0D10370118090C37021809103746000101050503070304B13F0601060600B1022FED332F -5DED003F3C332F3C3130015D2B2B2B2B2B2B09012313210123130287FED688C20281FED6 -88C205D1FD95026BFD95026B00040095FFE3080705ED001B001F002B003700CA400C471D -481F561D591F681E050BB8FFE040160E103701200E10371F1D1C071D171D021D291E1E1F -29B8FFF44012090B37230C090B374F0D401B7A2F75350417B8FFE8404A0E103711180E10 -371F031B1B17512F034F0302030D030D115109022F51202940290229293551230A1E0840 -1E011C1E322A00260126262C2A1C1E062020390F39010D2000010000142A062FED332F5D -335D11332F123939ED332F5DED2F2F5D003F3FED332F5DED3FED33332F2F5DED332F3F2B -2B5D2B2B3130018710ED5D87C0002B2B015D010E012322263534363332161715232E0123 -220615141633323637330901230901140623222635343633321607342623220615141633 -3236032D1E934EC0D9DDBC417F3F0E3C73396D7F7B71497A250E02F5FCF4A5030C028ABE -B2B5BABDB2B6BAB2596466585866645902BE1232E6D2C9F22121AD3233959C9698422302 -68FA2F05D1FBCCE0DADCDDE0DADADFAC8888ADAD87870002000FFFE8028605D3001B002B -006E400D531D621D701C0316180B113705B8FFF040310B0F37001A010B1C051B1B051612 -120F5216092550050347080112121F2908401114372F0801081C1B001A0008030B2A01B8 -FFC0B3101437012F2BED17332F33322F5D2BED332F5D003FED3FED332F1112392F17392B -2B31305D13371134363332161514020711141633323637150E012322263D0107133E0135 -3426272E01232206070E01150FB17B6F607C78A51D1B1A44693771395C6B4FF8622F0D0D -0A190F0F19060B0C01A6EB01C7E299826D5CFEF7E6FE61592B214AA22C2B727FE162022B -A980371E30110C0D0C0E156E5800000200920000044203B0000300070025401507CB0101 -05CB0307CB010105CB00031003300303032F5DED332FED002FED332FED31301321112113 -1121119203B0FC504C031803B0FC500364FCE80318000001008301BD0252038C00030017 -400B02020300000002300202022F5D332F002F332F3130011121110252FE31038CFE3101 -CF000002008301BD0252038C000300070023401306CB020205CB0304CB000006CB000230 -0202022F5DED332FED002FED332FED313001112111052111210252FE310183FEC9013703 -8CFE3101CF4CFEC9000100B10088042203F9000B0021401409090F032F034F0303030606 -00009000A00003002F5D332F002F5D332F3130133400333200151400232200B10102B7B6 -0102FEFEB6B7FEFE0240B70102FEFEB7B6FEFE0102000002007001AA026603A0000B0017 -0065400B06102326370610171A3700B8FFF0B323263700B8FFF04015171A3712CB06060C -CB000910171A3709100B0E3703B8FFF0B3171A3703B8FFF040130B0E3715CB03030FCB00 -0920093009600904092F5DED332FED2B2B2B2B002FED332FED2B2B2B2B31300132161514 -06232226353436172206151416333236353426016B689393686893926949666748486766 -03A093686893936868934C674849666649486700FFFF001A0000055E073C023600240000 -011700D80031016B000AB602000C0B0607252B35FFFF0068FFE1041D05D1023600440000 -011600D8D900000AB6020036371D26252B35FFFF0073FFE5054608010236002600000117 -00D600A90175000AB601002F2B0F15252B35FFFF0069FFE703F3068C0236004600000116 -00D6F4000011400C014026502602002622060F252B5D3500FFFF0073FFE5054607500236 -00260000011700DA00A80175000AB601002C2B0F15252B35FFFF0069FFE703F305DB0236 -00460000011600DAF5000011400C012024302402002425060F252B5D3500FFFF00C80000 -049D073C023600280000011700D80033016B000AB601000E0F0203252B35FFFF006AFFE6 -046005D1023600480000011600D8F700000AB6020022231200252B35FFFF00C80000049D -0801023600280000011700D900400175000AB60100120C0203252B35FFFF006AFFE60460 -068C023600480000011600D9FE00000F400A027026010026201515252B5D3500FFFF00C8 -0000049D0750023600280000011700DA004F0175000AB601000E0F0203252B35FFFF006A -FFE6046005DB023600480000011600DA0000000AB6020022231218252B35FFFF0073FFE3 -05A208010236002A0000011700D600D00175000AB601002925070F252B35FFFF006CFE59 -0443068C0236004A0000011600D6FB000011400C0230354035020035311A23252B5D3500 -FFFF0073FFE305A207500236002A0000011700DA00CE0175000AB601002728070F252B35 -FFFF006CFE59044305DB0236004A0000011600DAF5000011400C0250336033020033341A -23252B5D350000010073FE5905A205EC0038009540200906060E07261D06130E210E350E -4901410E510E6506650B630E740E741C0F2CB8FFE04043090C37323236532E0D28032235 -40230123230C03101017340C021D34030A3131002A0F2B1F2B022B760901221022042B27 -040910216C25753A0F3A403A021A1509683910F4ED5D10F4ED331217392F2F5D2F5DED33 -2F003FED3FED332F1112392F5DED12393FFD322F3130012B5D0534262722242726023510 -002132041715232E01272E012322001110002132363711213521110E01071E0115140623 -22262735331E0133323603820302ADFEE066677001A1016C7F010999121F763945AF6FFA -FEDD0130010660BF48FE7102535AD45E0103B79225742D091A583268626B152B0F5F6061 -0123C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAEFD8129460F0E2516 -A2AC0E0CA00A1A4E0003006CFE590443068C002300300034009F406F243234320233200D -10373D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C057020 -112F343F344F3403343433331E220512211528401E0407070B40030D2E41150731315033 -603302333300180F0601062124121A0006180092361F363F36022B1B18853510F6ED5D10 -E4113910FD32322F5D1112392F5D332F003FED3FED332F3FED1239393F11332F332F5D31 -305D012B5D2510002122262735331E01333236373E013D010E01232202113436373E0133 -321617373303112E01232206151416333236130323010443FEFEFEF459A9520A2EC86460 -7E23231E559B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A534B3F301117FFE -E4FEF61917C012352E29276E446644430121010790D14C474F272830FCD60261221DD0C6 -BCC23F058EFE8A017600FFFF00C80000053B08010236002B0000011700D600760175000A -B60100100C060B252B35FFFF00B90000045F08010236004B0000011700D600220175001A -4012014F1B6F1B9F1B031B112601001B170808252B35002B5D3500020020000005E305D1 -001300170060403D0E1201160408520B400C0F370B0B0C05350017101702170B10170304 -070C03070000120F150303140278190F19401950190309090B0E16030614076C1810F6ED -1739332F5D10F6ED1739332F002F3F1217392F71ED12392F2BED17393130012311231121 -11231123353335331521353315330135211505E3A8C6FD19C6A8A8C602E7C6A8FE92FD19 -0455FBAB02D9FD2704558CF0F0F0F0FEA8CCCC00000100130000045F0614001E00504030 -031D161D751D0317140E51111112180D08421B041201010D08150F021A0091201F206020 -02141517030B1A110F0D881F10F63232FD17325D10F6ED2F2F003F3C3F3FED123912392F -ED393931305D2123113426272E0123220607112311233533353315211521113E01333216 -15045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC63B5BE027C4D87262A294C3BFCBE -04F4869A9A86FEED4952DACD0002002C0000033307C8000B0025006DB9001BFFD040400B -10370E300B10370C0C15520F1C1F1C021C191C192252700F010F0F09043206030A033201 -0825280F0C1F0C020C1828190C276D080B5A0A1405025A19036D2610F432ED32FDED32E4 -332FED2F5DED003FED323FED32332F5DED33332F2F5DED332F31302B2B29013533112335 -2115231133130E01232226272E0123220607233E01333216171E013332363702D5FDB4C3 -C3024CC3C35E077D663453262D3C20302D0288037E683351282A431D2E31019804A19898 -FB5F0730989724262B2A5B4B88A6242528295B470002FFF200000241063C0003001D0054 -40347C0673130204040DAA1440090C37141114111AAA0707020501081DAD0440090F3704 -10AD117F1F011F9204001A117F010101881E10F65D32FD32ED5D2FED2F2BED003F3F332F -ED33332F2F2BED332F31305D21231133131406232226272E012322061523343633321617 -1E01333236350177BCBCCA6750283A1E202D17232170684E2F3220212C162421045D01DF -81821A202322454181821B1F2322483E0002005F000002FF073C000B000F004D40150E32 -0D0D09043206030A033201082F0F3F0F020F0EB8FFC040150B0D370E0F116D0A080B5A0A -140305025A0E036D1010F632F43210FDF43210E6332F2B2F5D003FFD323FFD32332FED31 -302901353311233521152311331321352102D5FDB4C3C3024CC3C32AFD6002A09804A198 -98FB5F060A9A0002FFFC0000023605D1000300070032401D025301010605057F00700202 -00027F0901099200041A027F050105880810F65D32FD32E65D2F2F5D002F3F332FED3130 -01213521032311330236FDC6023ABFBCBC05379AFA2F045D00020080000002DF07D3000B -00190059401F0C701201121216AA0F0F09043206030A0332010819290C400B0E370C1329 -12B8FFC040130B0F37120C1B6D080B5A0A1405025A12036D1A10F432ED32FDED32E4332F -2BED2F2BED003FED323FED32332FED332F5D333130290135331123352115231133131406 -232226353314163332363502D5FDB4C3C3024CC3C30A939C99979E454D49489804A19898 -FB5F073BA8CFCFA886726E8A00020001000002300668000D0011004840150006060A5003 -0310050F0D2900400B103700072906B8FFC040130B1037067F13011392000E1A067F0F01 -0F881210F65D32FD32E65D2F2BED2F2BED002F3F332FED332F3331300114062322263533 -1416333236350323113302308B8C8A8E924145414427BCBC06689AC0BE9C7A6B6283F998 -045D00010089FE5F031C05D10020004F402D1C20090C3709043206030A03320C01081717 -13531B0D1818102A1E1E0B02226D0A080B5A0A140305025A036D2110F4F43210FDF43210 -E61112392FED332F003FFD322F3F33FD323FFD3231302B21233533112335211523113315 -230E011514163332363733150E012322263534360174EBC3C3024CC3C3C2060942582141 -1309245122879A099804A19898FB5F981C29265150130B9E0A0BA08C22350002008EFE5F -024605DB0003001B0056401C0820090C371B1753070D014402400B0D3702030E050D1104 -04142A0AB8FFC040170B17370A0A0E7F1D011D9200600F1A01607F0E010E881C10F65DE4 -FDE4E65D11332F2BED332F002F333F3F2BED3FFD3231302B01233533130E012322263534 -3637113311230E0115141633323637330183D4D4C3245122859C2508BC3C060742582141 -13090518C3F8990A0B9E8E3F6F19040BFBA31A361B5150130B00FFFF002CFFEB034D0801 -0236002D0000011700D6FF6C01750014B1011AB8FFC040090B0E37001A160415252B2B35 -0002FFC2FE5902AF068C0015001C005540340A011C0102551B651B751B0318161A1B1B1A -1A123E150507070B40030D1A1A4F1301137F06010616121A1306160370150115921E10F4 -5D1732ED2F2F5D2F5D332F003FFD322F3FED332F332F1239395D31305D05140623222627 -35331E01333236373E01351123352137230B012313330209C8A828832C0A1C5F2D485816 -160DE901A5A69FB9B89BE4E31BC4C8100CB30B1C282828715103849EB40100FF00017B00 -FFFF00CDFE59057505D10236002E0000011600DCFB00000AB601001A0C0500252B35FFFF -00C1FE5904AF06140236004E0000011700DCFF7C00000011400C01301A401A02001A0C05 -0A252B5D3500000100C1000004AF045D000B007D40512802D801DB090309010F0D1F011D -021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A0802 -050A0507050105080B02600A700A020A0A00000D200D400D0208031A05890C10F4FD325D -11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0015D -7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B045DFDD102 -2FFDFC00000100C8FE59047605D1001A003F40240C20090C37111115530D0D0203043507 -01081010182A0A0A0105051C0F1C010414016C1B10F4ED5D11332F12392FED332F003F3C -ED3F3FFD322F31302B29011133112115211E011514062322262735331E01333236353426 -02BFFE09C602E8FEE30204B79225742D091A583268620605D1FADFB0122F18A2AC0E0CA0 -0A1A4E581E3E00010005FE5901E906140018003D40240A20090C370F0F13530B0D020104 -01080E0E082A1616017F1A011A92041A7F010101881910F45DFDE45D12392FFD322F003F -2F3F3FFD322F31302B2123113311331E011514062322262735331E013332363534260149 -8EBC6C0105AE8525642809184E285E52010614FA00123724A2AC0C0CA00B174F57153300 -FFFF00C8FE59053805D1023600310000011600DCFE000013400E01201630164016030016 -0A0400252B5D3500FFFF00B9FE59045F047C023600510000011600DC8B000013400E0100 -2310232023030023170D00252B5D3500000100C8FE59053805D10016009D401F00076107 -7107A107040C070B0C1B0736074607540765077507B001B0070A07B8FFC040510B113776 -06010F0102061F01150626013601340646014406560153066006790170060E0406015A01 -550602111115530D0D0207040806030A0104080110100A06010207130A78180F18401802 -0213046C1710F4ED5D10F4FD11393911332F2F003F33333F3C1239393FFD322F31300172 -715D5D002B5D71043501112311210111331114062322262735331E0133320480FD01B901 -330284B9CEB42751250B163A1E7F948A053EFACC05D1FBA00460FA18BFD10806A8050A00 -000100B9FE59045F047C00260045402B03150C191615751504100D084213040E050D081E -1E22531A0D1D1D021A1791281F28602802100B1A0D882710F4FD325D10F6ED332F003FFD -322F3F3F3FED123931305D0435113426272E012322060711231133153E01333216151114 -062322262735331E01333236373603A31218195E4B4DA84DBCBC58BC63B5BECCB4274E26 -0B163C1A4C6117162556024B4D87262A294C3BFCBE045D7C4952DACDFD0FBFCC0706A805 -0A262626FFFF0073FFE105DA0746023600320000011700D8009B0175000AB6020026270F -03252B35FFFF006AFFE1047105D1023600520000011600D8E300000AB602001A1B060025 -2B35FFFF0073FFE105DA0801023600320000011700D9009C0175000AB602002A240F0325 -2B35FFFF006AFFE10471068C023600520000011600D9E400000AB602001E180600252B35 -FFFF00C8FE59059805D1023600350000011600DCF600000AB602002420050D252B350001 -001BFE590372045D002700574034000D100D200D032120090C370C090F131317430A0F05 -1C090826260253220D25251F2A05050913132940297029020C1B1A09882810F4FD325D11 -332F11392FFD322F003FFD322F3F2F3F3CFD322F11123931302B5D1E0133323635342627 -231133153E013332161715232E012322060711331E011514062322262735333C4E285E52 -0102A6BC70AB59312C2C0A2A4F3657A24B840105AE8525642809FA174F57153323045DA5 -5A4B0507C10A094D3DFCFB123724A2AC0C0CA000FFFF0086FFE505020801023600360000 -011700D6004A0175000AB6010035311A00252B35FFFF006EFFE503D7068C023600560000 -011600D6AF00000F400A017F38010038341A00252B5D350000010000000004EE05D1000F -004140250D0A003203030F09043506030F0F111F114F11030B020B085B090D0009140204 -5B4F0501052F5DF432ED393910E4332F2F5D002F3FFD3212392FED393931300121352111 -21352115211121152111230214FEB4014CFDEC04EEFDEC014CFEB4C602E48F01AEB0B0FE -528FFD1C0001003EFFEA02FD059E0023006E40210420090D37181507510A0A0E030F140B -3E110F0E0523231F3F03094F257F250216B8FFC0401E090B3716160713008C250909070C -0A0E111504181A0C07400D103707882410F62B32ED17392F12392F10F63211392F2B5D00 -3FFD322F3F3333FD322F1112392FED393931302B250E012322263D012335331123353311 -331121152111211521151416171E01333236373302FD357D31ABB27F7F7F7FBC0184FE7C -012DFED30818164D4F2E64160A0A0E12B8CBA88601249E0141FEBF9EFEDC865358632B28 -251B0900FFFF00B2FFE1052907C8023600380000011700D700610175000AB601002B1E0D -1D252B35FFFF00B1FFE104570653023600580000011600D70600000AB601002417091625 -2B35FFFF00B2FFE105290746023600380000011700D800630175000AB6010020210D1D25 -2B35FFFF00B1FFE1045705D1023600580000011600D80100000AB60100191A0916252B35 -FFFF00B2FFE105290801023600380000011700D900630175000AB60100241E0D1D252B35 -FFFF00B1FFE10457068C023600580000011600D90100000AB601001D170916252B350001 -00B2FE5F052905D1003400634044231223183D093D2139224C094C214B22771377170A33 -20090C372E2E2A53320D1C24060D031534060A2F2F272A00060023030C1B141E76360F36 -1F364036030F140C6B3510F4ED5D10F6ED1217392FED332F003FED3F1239393FFD322F31 -302B5D053436372206232226272E01351133111416171E01333236373E01351133111406 -070E01070E011514163332363733150E012322260314050509190F8CD0475147C621272C -976A6B962D2721C647512D683D0405535A24511108344B2A8CA8741A271601494852E8A9 -037BFC7B798C394142414239936D038AFC85A2F1502C3B10143C17524E1B089F0E0C9F00 -000100B1FE5F0567045D002A005C40220B0619077A07032720090C370205150905114205 -0A010822221E53260D23231B2A29B8FFC04015091037292914021A17922C1F2C602C020B -1A08872B10F4ED5D10F4FD32322F2BED332F003FFD322F3F3FED3F3C123931302B5D0437 -350E01232226351133111416171E0133323637113311230E011514163332363733150E01 -23222635340395065FAE69B0C4BC101A1B565249AD4BBC1E0607535A24511108344B2A8C -A81D1D7C4B50D7D002D5FD8455792B2C284C3B0342FBA31B351B524E1B089F0E0CA08D24 -FFFF005C0000078D08010236003A0000011700D601690175000AB60100110D0600252B35 -FFFF005600000636068C0236005A0000011700D600BB0000000AB60100110D0600252B35 -FFFF0006000004E608010236003C0000011700D6FFEE0175000AB601000D090500252B35 -FFFF003DFE64047F068C0236005C0000011600D6DD00000AB601000C080400252B350001 -00B900000308061E0010002440140000043F0D0009080000081A6F097F090209891110F6 -5DED332F003F3FFD322F313001232E012322061511231134363332161703080A1F642679 -67BCC2BF3F652A055E09136B8CFB7D0482C2DA0C08000004001A0000055E08000012001E -00210025013F40862B20372040205A18551A501E55206918651A651E0A180B170D4A0646 -125906561278027703082020211F02370187010201140012002021033704870402041405 -05060606091226062912370638124606491258127A0675120B24240C702501251651A00C -F00C02060C160C3F0CF00C040C03340F2170210221212006120405201C401C020C1CB8FF -C0406C393937501C701C021C01050824400E10370F242F240222222440090D372413290F -0F2F0F4F0F8F0F9F0F050F19290009200940098009900905090F270106090F122405050C -0024003A0042005A006A0074000700006E270F27010A052B0535054D05550565057B0507 -05642610E65D5D10E62F5D1217395D2F5DED2F5DED2F2B332F5D2B003F3C2F5D2B335D12 -17392F5DED2F5D72ED2F5D12392F3130015D8710FD5DC0C0C08710FD5DC0C008C0015D00 -5D212303210323012E013534363332161514060727342623220615141633323613090207 -2337055ED394FD8094C901F83139A17373A039302A47393948493838487DFEFEFEFD021D -F39595019FFE6105571F65406D90906D40651FC4364B4A37394B4CFC6602CBFD3505B7CD -CD0000040068FFE1041D07330032003F004B004F00D6B50C0A190A0230B8FFC040880B0E -37590E51215C38690E63216F397B0A7A1474207B380A0208343D3011401102111149084F -4F4E4E43AA062916299F290329400B0D37292F0123494F1F011F291F184149043D41080A -01084E400D10374C4C4E40090C374E4E2640292F2C3F2C022C2C26297F468F4602464600 -0F1F011F1134021A001F0B0091510F511F513F51033A1B0B855010F6ED5D10E6113910FD -32322F5D12392F5DED332F5DED12392F2B332F2B003F3FED3FED33332F5D123911392F2B -5DED332F332F1112392F5DED123931305D012B5D2123350E01070E012322263534363736 -2437353426272E01232206070E010723353E01372E01353436333216151406071E011503 -110E01070E0115141633323603342623220615141633323613032313041DBB1955282F7A -5297D26D6566011EA42E29296D3F3A692A3150130A2369311C259F73739E2E237D87BB56 -E9445164747763A443473939484938384895F3959577113D12171FC89B7F9D2D2D20081D -4156171811140B0D1D07BF0914081E532E6D90906D335B1F22AA9AFE1D01370514131761 -5560614D042C364B4A37394C4D0262FEEE011200FFFF000E0000076D0801023600900000 -0117008D01DE01750011400C020F164F16020016140607252B5D3500FFFF0068FFE3073F -068C023600A000000117008D01690000000AB6030055541B00252B35FFFF0073FF6E05DA -08010236009100000117008D007801750013400E03303A403A603A03003A3B0F00252B5D -3500FFFF005DFF6C0471068C023600A100000116008DE2000011400C03302E402E02002E -2F0C00252B5D35000001015A03400249045D00030014400A01560205032D000201022F5D -ED003FED3130012311330249EFEF0340011DFFFF005C0000078D08010236003A00000117 -004301730175000AB60100100D0600252B35FFFF005600000636068C0236005A00000117 -004300C30000000AB60100100D0600252B35FFFF005C0000078D08010236003A00000117 -008D01690175000AB601000F100600252B35FFFF005600000636068C0236005A00000117 -008D00BF0000000AB601000F100600252B35FFFF005C0000078D07500236003A00000117 -008E016C01750020B10213B8FFC040120D10370F13010100135F13020013100600252B5D -355D2B35FFFF00560000063605DB0236005A00000117008E00BF0000001EB10213B8FFC0 -40100D10370F1301010013010013100600252B5D355D2B35FFFF0006000004E608010236 -003C000001170043000A01750014B1010AB8FFC040090D1037000A0A0500252B2B35FFFF -003DFE64047F068C0236005C000001160043FF000015401001200B300B600B700B04000B -090400252B5D35000001FFED03E40186061300030032B90003FFE4B70D10370101030100 -B8FFAEB30D103700B8FFE840090A0C3700007F0201022F5D332F2B2B003F332F3130012B -010323010186A5F4010F0613FDD1022F0001FFD00685051606FD00030011B60150020000 -05022F11332F002FED3130012135210516FABA0546068578000100890000048B05EE0028 -00934063411253125B1A6312730273129024B603B6240923200551000810082008030808 -1F1C09510F0C1F0C3F0C4F0C040C141418490C01100202284A01080F2A1F2A022327021C -1F20050C08215F1D6F1D7F1D031D0A061306081D13040220004000020000022F332F5D12 -17392F2F332F5D332F3333FD321139395D003FFD323F1239ED332F2F5DED3939332F5DED -393931305D2901353E0137233533352335333534123332161715232E012322061D012115 -21152115210E01071521048BFBFE67620E9DA4A4A3FDCD6998400A3E98568C8B016CFE93 -016DFE8F0F705A0345CF1B817B868C86A7C801012211CE2A30A59094868C86659F2C0B00 -000200B1FFE60511053200180022005F4013380D391C491C580D6A217A21060C100B0D37 -07B8FFF0402A090A37191F290F2615690F790F05013222220F1F32150B0B07330F090C0C -1913260001000024220114122FFD3211332F5DED332F003FED332F2FED12392FED5D2B2B -31305D01211416171E013332363733150E0123200011100021320011272E01272E012322 -06070511FC66423C3AA3607AEA590D82C07FFEC9FEAD01420113FF010CBE02262928875A -9FD50D027884B53E3C3B5648D53637015B0141013A0176FECDFEE92A549133333AD4B100 -FFFF00ABFFE1078305D50036023B9200003700BB023700000117024103F2FDC60016400C -040302100A010B400B7F0B025D1135003F353535FFFF008CFFE107A405ED0036023DA600 -003700BB02910000011702410413FDC600384026040302360A0403023900392039403980 -39FF3905013100315B317B3103000900093F094F09035D11355D11355D11353535003F35 -3535FFFF008AFFE107A405DA0036023FA400003700BB02910000011702410413FDC60038 -4026040302320A040302350035203540358035FF3505012D002D5B2D7B2D03000900093F -094F09035D11355D11355D11353535003F353535FFFF0099FFE1076F05DA00360240A600 -003700BB023100000117024103DEFDC6003640240403020E0A040302116F118011FF1103 -01092B093B0944095B097F0905000400043F04025D11355D11355D11353535003F353535 -00010061FE5901FA00880003002CB90002FFE840170D10370318090C3700180910370F01 -010101000D0202002F332F003F332F5D3130012B2B2B1B01330161A5F4FEF1FE59022FFD -D10000010161FE59037000140014002440150B021B012B013901041207070B53030D0E2A -0000062F332FED003FFD322F2F31305D0514062322262735331E0133323635342627331E -010370B79225742D091A58326862060399020659A2AC0E0CA00A1A4E581D491913340001 -0212050C0305068C000300144009030302002D100301032F5DED002F332F313001032303 -0305319131068CFE8001800000030100050C0418068C00030007000B003F401506050AAF -090902000002072B0640090A37060A2B0BB8FFC0400C090B370B06002D0B100301032F5D -33FD322F2BED2F2BED002F332F12392FED3939313001032303012335330523353302FD31 -803101FDBFBFFDA7BFBF068CFE800180FE8CC3C3C300FFFF00070000055E05D102360024 -00000117019DFDF5FF450012400A020E03020E1F0E4F0E025D1135003F35FFFF00000000 -059005D10037002800F300000117019DFDEEFF4500204014010F030F111011401103011F -0C010C00400101012F5D352F5D355D003F35FFFF00000000062E05D10037002B00F30000 -0117019DFDEEFF4500204014010F030F112011401103011F0C010C00400501052F5D352F -5D355D003F35FFFF0000000003C805D10037002C00F300000117019DFDEEFF4500244018 -010F03011F0C010C00400201020F111F11401150116011055D2F5D352F5D35003F35FFFF -0000FFE1069905F00037003200BF00000117019DFDEEFF45002240150227030F29010227 -1F270101000F000F100F700F035D1135355D11355D003F35FFFF00000000060105D10037 -003C011B00000117019DFDEEFF45002440180109030F0E1F0E2F0E03011F090109001F04 -4004700403042F5D352F5D355D003F35FFFF0000000006D705F0003701BB00B700000117 -019DFDEEFF45002A401E012B03011F2B012B00001C101C201C031C0F2D202D502D602D70 -2D8F2D065D2F5D35115D35003F350004FFCB00000267068C00030007000B000F005C401D -0A090FAF0C0C06070706060205010B2A0A40090F370A0A0404000E2A0FB8FFC04015090F -370F0F0707017F11011192001A7F010101881010F65DFDED5D11332F332F2BED11332F33 -2F2BED002F3F332F332F12392FED39393130212311331303230301233533052335330177 -BCBC0438543801B0ABABFE0FABAB045D022FFE800180FE8CC3C3C300FFFF001A0000055E -05D1021600240000FFFF00C80000052B05D10216002500000002001A0000058605D10003 -00060058403C49056A050205041A000003061A01010215001A0125002A0145004A014B02 -4403590256036B0264037B0275030E020305030000080105010203065401002FED3F1239 -012F11332F17395D31308710FD8710FD04C0005D2901012109020586FA94023201080127 -FE50FE5105D1FAD7047BFB85FFFF00C80000049D05D1021600280000FFFF007E00000508 -05D10216003D0000FFFF00C80000053B05D10216002B0000FFFF0089000002D505D10216 -002C0000FFFF00CD0000057505D10216002E00000001001A0000056205D10006006C404E -0902390258020378017703020203020114000600020314040405490546067C0573060405 -030405002400390042005A006A007400070000080F08010F08010A042B0436044D045504 -65047B0407042F5D5D5D11332F5D002F3F3130015D8710FDC08710FD08C0015D005D2123 -09012301330562D5FE2CFE2CCB022CF00505FAFB05D1FFFF00C8000005F605D102160030 -0000FFFF00C80000053805D102160031000000030072000004BF05D100030007000B0047 -40130535060609013502030A350908054009133704B8FFC0401609133704050504030204 -0908720D0F0D1F0D0209680C10E65D10E41117392F2F2B2B003FED3FED12392FED313001 -213521032135211321352104BFFBB3044D34FC1B03E534FBB3044D0521B0FD08B0FC77B0 -FFFF0073FFE105DA05F0021600320000000100C80000053B05D100070027401703350603 -010501140078090F0940095009030414056C0810F6ED5D10F6ED002F333FED3130212311 -2111231121053BC6FD19C604730521FADF05D100FFFF00C80000049605D1021600330000 -000100760000050005D1000C00EB404709040908450B540B6409640A660B9309930A960B -A409A30AA70B0D0608060B1608160B28032708340A340B430A430B5903550B670B760B8B -0399049908B804B808EB04EB08150BB8FFC0B32529370AB8FFC0B325293709B8FFC0B325 -293708B8FFC04030262937030203080908B3040304030B0A0BB302030264048D02020403 -0203080B3501083505030403A009B009D0090309B8FFC04023191E371009200960097209 -D009E00906090703040B0908070602000010000200000E022F11332F5D1217392F2F5D2B -71332F003FED2FED11173931305D011087ED87C01087ED8708C0012B2B2B2B5D71290135 -090135211521011501210500FB76026CFDA80448FCC0024AFD8A039AB80258020EB3B0FE -061AFDA3FFFF0000000004EE05D1021600370000FFFF0006000004E605D10216003C0000 -FFFF00440000053805D10216003B0000000100B30000064405D10023006240402515251E -021B067518011834380948096F090309192209030810030822142311141023071B180714 -108008A008B0080320255025702503080825240F253F25025D1112392F5D5DC4ED393910 -C42FED2FED002F3F1217392F5DED5D393931305D011406070E01071123112E01272E0135 -1133111416171E01171133113E01373E013511330644514D50E197C59AE24B4E51C63B34 -359A62C5619C353836C6038E9DD74345460AFEBE01420B484245D69C0243FDA66D8E2C2D -2F0703E4FC1C082D2E318571025A0001006C0000062005F00027007D40125B195B256C1A -641D64216C24791A79240821B8FFC0B3090B371DB8FFC0403B090B373002301440024014 -041925140204160B341F02261835011608251202191214081502141C272222290F29010F -291F299029A029040E15171C2FC4ED5D5D11332FC4123939ED2FED2FED003F3CFD3C3FED -1217395D31302B2B5D2901113E01373E01353426232206151416171E0117112135213526 -023510002120001114020715210620FDC03C772C2D34FEDCDCFE342D2D763CFDC0019A9D -CB0177013101310177CB9D019A01832658393B9F6ACEF9F9CE6A9F3B395826FE7DAE7C5A -0138C20114015EFEA2FEECC2FEC85A7CFFFF007E000002E207500236002C00000117008E -FF240175001940130200104010501060107010050100100D0409252B355D3500FFFF0006 -000004E607500236003C00000117008EFFED01750019401302000E400E500E600E700E05 -01000E090500252B355D3500FFFF006CFFE10443068C0236012E00000116019DE200000A -B6020024210800252B35FFFF006DFFE603EE068C0236013000000116019DCC000013400E -014041504170410300413E1219252B5D3500FFFF00B9FE64045F068C023601C600000116 -019D1D00000AB601001A170E16252B35FFFF00A000000193068C023600D500000117019D -FE8E0000000BB601000704020325012B3500FFFF00B1FFE2045C068C023601D100000116 -019EFB00000F400903020100221F0717252B35353500000200B9FE64048D061400180037 -0077404F16200D1037070F4A1B4326433756267929062E200D0F3733200D103705200D10 -371615203E5F21012121032B3E0C0135400309080C15120F200120281B12122008191B00 -90391F390132071A08883810F6FD325D10F6ED1239392FED2F5D1239003F3FED3FED1239 -2F5DED393931302B2B2B5D012B011400232226271123113436333216171E011514060715 -1E01073426272E012B0135333236373E01353426232206070E0115111E01333236048DFE -F3CD4FB03FBCFDDF5A953B39448B7F9FBCC2453A3B924924244282272E2D8A6D49682120 -1E42964895A101BCCAFEF82C2AFE2405D2E0FE2B2E2B8A5B7FBD25111AC797596F1F2016 -A01D1E2262557074352C2C753EFCA2261F9D0001003DFE64047F045D0008006940497507 -01070607081A00010007061A04050505030C0A001A002A004A0059006900750007000505 -15052505450556056605730507050001011A059004A0040204040A091F0A4F0A5F0A035D -1112392F5DC4ED10C42F5D2F5D003F3F31300187FDC08710FD08C0005D09011123110133 -0901047FFE37BCFE43CC0157015A045DFBDBFE2C01D40425FCC4033C0001006CFE6403D6 -0614002F0058401D4600570065287F1178207D21061D1A3E1B012D3F0F070C1A1A19121C -07B8FFE04018090C37000701071C070BB40303310F313F3102231B12853010F6ED5D1133 -2FED33332F5D2B2F1239392F003F2FED3FED3931305D251E011514060723353E01353426 -2B012226353412373E013735213521150E01070602151416171E01171E013B013216039A -201C5A43B35A4C3D2F91E5DE5C4E4BC56CFE3402E875E55A5972060C0A31272479385647 -664B285B2854A93F0E4F7745394CE8E58C01007770CD5E099E874ECE7875FEE88F224828 -264B18160534000100B9FE64045F047C00160038402303151615731503100D084213040E -05010C0D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3F3F3FED12 -3931305D0123113426272E012322060711231133153E0133321615045FBC1218195E4B4D -A84DBCBC58BC63B5BEFE6404184D87262A294C3BFCBE045D7C4952DACD0000030089FFE1 -04750614001700240031006CB9002FFFD6B30A0D3729B8FFD640400A0D37212A0B0D371B -2A0B0D37662C01263E0F241F24022424061E3E3A124A120212012C3E3506450602060A25 -181A0000331F333F330224261A800C900C020C2F5DFD325D11332FFD32003F5DED3F5DED -12392F5DED5D31302B2B2B2B011406070E01232226272E01353412373E01333216171612 -072E01272E01232206070E010705211416171E01333236373E0104752E243AD29898D23A -252D2D2639D39797D339252EBD043120296C4F4F6C29222F040272FD8E2E2428704F4F70 -28242E0300BEFD548789898754FDBEAE010753828A8A8254FEFA548FD6364639394637D5 -8FA18EE93E453E3E453EE900FFFF00BB00000177045D021600D50000000100C1000004A8 -045F001800D3403B0601060216182618451856186618071C023A0169027A029701A602A6 -18C70208020203C60101860101011A001800090801F90801080B0A03090109B8FFEE4040 -10183709B402181703177F0301091808020305010C1010143F0C05060505011A172A1736 -178017A417051517251777179417E917F917060917180201050F0F00B8FFF04013090E37 -00001A0F1A1F1A3F1A0308031A05891910F6FD3C5D11332F2B332F17395D71002F2F3F3F -FD322F111217395D3130018710C0C07AF52B7118C0C004C07172018710FD5D7108C0015D -71212301071123113311013E013332163315232E01232206070304A8F8FE3D70BCBC0180 -487F3F1C3C070B102F0D2F4D1DFB01E96DFE84045DFDDA01A14F3802A602022F21FEF100 -0001003D0000047F061400070085401305040502020306011A07000002031A04040505B8 -FFF0401C0C10372B002604200703050402030601000806680701070506030400B8FFC040 -260910370C001C004B005A006A00790006008D090F090103041304440455046504760406 -04820810E65D5D10F65D2B1117395D2F003F3F17393130015D2B8710FDC01087FDC008C0 -08C0012123090123010333047FCDFEB8FE97C401D1D7D3033DFCC3042001F400000100B9 -FE640465045D00150046402C12200B0D3703200B0D37080205140B051042050900080A0C -0102131A0092171F1760179017030D091A0A881610F6FD3C5D10F6FD3939003F3F3FED3F -3C12393931302B2B2123350E012322262711231133111E013332363711330465BA4A874E -4B7854BCBC209E5B5D8836BC764E3D3650FDF305F9FCBA2752433C034000FFFF003D0000 -047F045D02160059000000010068FE64041106140046008A403C0F020F06090E1B0E241E -24283415361E36284428473C562D563C691779170F1918333F32320C24213D22013F3F0C -030C191C3232232121122B1B1C04B8FFD6400E090C37040408B4231C1280000100B8FFC0 -400B090C370000483A1B12854710F4ED11332F2B5D123939ED332F2B2FED12392F2F332F -1239003F2FED3FFD3212392FED393931305D0514060723353E013534262B012226272E01 -353436373E0137352E01353436373523352115212206070E01151416171E013B01152122 -06070E01151416171E013B013216171E0104115B42B45C4B3A2E8C8CB93F424532302C89 -4C7D96575AE40338FF00446D302D3641332D7650AAFED942692F2B334B403F995A1C4467 -211F226055A83F0E4F7844374E36393C97584E84353145130B1CA56853873A069A9E1D22 -2066434F621A1716A52827256A3B66721919072F25235F00FFFF006AFFE10471047C0216 -00520000000200B9FE640494047C0011001E0042402C3A17351E4A17431E560D05060315 -3E0F041C400309080C121B3A004A00020090201F206F200219071A08881F10F4FD325D10 -F65DED003F3FED3FED123931305D011000232226271123113436373E0133320003342623 -220615111E013332360494FEEBDE41A348BC47423EBB66F30100C2A0929E8D49774BA2B0 -0241FEFEFEAB242BFE2B04227BB9423E42FEDAFEDFDACCC0B6FE6D221DDE00010069FE64 -03FA04770029005C40120C020C06201325233614362340237A1F0817B8FFE040140E1037 -3F194F190219191D3F1504030C263F0B04B8FFD64011090C370418180408B400002B201B -12852A10F4ED11332FED33332F2F2B002FED3F3FED332F5D31302B5D0514060723353E01 -3534262B012226272E013510002132161715232E01232206151416171E013B01321603FA -5E3EB1564D3C2D5C75C64B49530137010354A0430C5E9D44A6BD393232814B64738E6057 -AA3B0E4B7947364F3C4342D092010E0144251BD33E32EEC1708E2D2C2799000100B1FFE2 -045C045D00170030401F1607050F3E0903560366037903880305030A151A0091191F1901 -091A06871810F6ED5D10F6ED003F5DED3F333130011406232226351133111416171E0133 -3236373E01351133045CF4E2DFF6BC14201F6B5C56731E1D15BC0197DADBD7DE02C6FD7F -5D782E2B2B2C2C2C7B5A028100010030FE640488045D000B00A240492A02250839023408 -4B02440879020710091A0A0B0A071A060506011A000B00031A04050402050B080A000606 -0A0405064A0445066A0465067A04770608040C0605080B050204040A00B8FFE040100A10 -3700000D2F0D010604200A1037042F2BC45D11332F2BC4121739003F3F5D111739313001 -8710ED8710ED8710ED8710ED4B535840140B030A070002030A0601080409070005040906 -010F0F0F0F59005D0123090123090133090133010488D5FEA6FEA2CB01BCFE4FD5014F01 -53CBFE4FFE64026BFD95030202F7FDA80258FD11000100B0FE6405E3045D0023006B4047 -1B062618751802183D39094909020919220903081005080C221A3F237F230223111A3010 -7010021023071B18071A109008C008025025602502080825240F25010F251F253F25035D -5D1112392F5D5DC4ED393910C42F5DED2F5DED003F3F1217392F5DED5D39393130011406 -070E01071123112E01272E01351133111416171E01171133113E01373E0135113305E360 -4F52C873BB73C753505FBC4B34388643BB4386383B44BC01BE72A835373705FE68019806 -343936A772029FFD9C718723261E0403C7FC39051C27287B7802640000010071FFE20611 -045D003D0079402D361F3632441F4432551F55326804680F691A69377D1A7D370C283B28 -0903061605210D303E060A3A400C0E3718B8FFC040240C0E37361B001B1B13003A29090A -291A18139028A028C0280328283F3E1F3F3F3F6F3F035D1112392F5DC4C4ED393910C4C4 -2FED2FED2B2B003FED39393F1217392F31305D011406070E0123222627230E0123222627 -2E013534123733150602151416171E01333236373E01371133111E01171E01333236373E -01353402273533161206112F33379D7360A2250627946671A333332F7290E4879F101E1A -5D47334714161D06BA091C1518393A465E1B19169D89E4907201F760C14B505963434462 -5D4C4CBF61AA0115A7116CFECCB742713F37491911122C0F0248FDB8112C111316473937 -7A41B601346D11A7FEEBFFFF00050000022D05DB021600770000FFFF00B1FFE2045C05DB -023601D100000116008EFB000015400F02301D501D601D0301001D180717252B355D3500 -FFFF006AFFE10471068C0236005200000116019DE200000AB602001B180600252B35FFFF -00B1FFE2045C068C023601D100000116019DFB00000AB601001B180717252B35FFFF0071 -FFE20611068C023601D400000117019D00B60000000AB60100413E1300252B35FFFF00C8 -0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500 -0001FFFF0000060705D1002500614025652476240216341F1F061E1A351B03093506182F -073F074F077F0704070717590F010F1500B8FFC04014090D370000270F27011A1F1D011D -1D1F17141A182F33FD32322F5D2F5D11332F2BED5D12392F5D002F2FED3FFD3212392FED -31305D011406070E012B0135333236373E01353426272E01232111231121352115211121 -3216171E010607534957AF8A6E5D5B782F38343135329583FEEBC6FE520468FE0C015398 -BF554C4901CC6CB13A4530B11022286F4E4B73232213FD220521B0B0FE6824423BAEFFFF -00C80000048A07ED023601EB00000117008D003501610015401001300840086008700804 -0008070405252B5D350000010073FFE5053905EC002A006A400C3A1C491C58057606790C -0511B8FFE040370A103701200A103720341D1D0F032A2A26340309131317340F021E1E13 -000010000200002C0F2C010F2C1F2C2F2C3F2C041D206C09682B10F6FD325D5D11332F5D -33332F003FED332F3FED332F1112392FED31302B2B5D250E012322242726023534123736 -243332161715232E01232206070E01072115211416171E013332363733053963EC91A9FE -EE61616969625F0112A98CF65F104EF98D6DAE4846580F0334FCC258474AC4708AF75010 -4127356863630120B7AF011F66626C3427DF40523A3B3BAD72AD8BD94648494A4300FFFF -0086FFE5050205EC021600360000FFFF0089000002D505D10216002C0000FFFF007E0000 -02E207500236002C00000117008EFF240175001940130200104010501060107010050100 -100D0409252B355D3500FFFF002CFFEB02EA05D10216002D000000020012FFFD08A205D1 -000E003D0066B3460C0130B8FFACB30A10371EB8FFC0401D0B0E37073437371618353503 -28282C352408341637081416163500150FB8FFF440110E11370F713F2F3F011813003501 -3535282F332F5DED5D10F62BFD11392FFD32002FED2FFD322F3FED12392FED31302B2B5D -013426272E01232111213236373E01371406070E01232111210E01070602070E01070E01 -2322262335331E01333236373612133612372111213216171E0107D33235379083FEEC01 -0F858F363834CF554754C098FDEEFDF0030B0308251D1D492F306544153C0C0E0A1E0F24 -401647430E050B040391015298C0554C4901C94B72232510FDCB1A252769556CB0374238 -052171D955D6FEEC595A6B2B2C2603C001021617470146012D62014487FDB823423BAE00 -000200C80000088305D1000E002700554020171E07342121161F1B030834161A560F0120 -1F081400166F160216161900150FB8FFF4400F0E11370F71294029011D19141A6C2810F6 -FD325D10F62BFD11392F5DED39395D002F2FED3F3312392FED39393130013426272E0123 -2111213236373E01371406070E0123211121112311331121113311213216171E0107B432 -35379083FEEC010F858F363834CF554754C098FDEEFD65C6C6029BC6015298C0554C4901 -C94B72232510FDCB1A252769556CB037423802DEFD2205D1FDB80248FDB823423BAE0001 -FFFF000005FD05D1001D00504032000E48175817600E620F700E700F0708011A350B0B01 -07033504031301131412121F5F067F0602060306070014037F0101012F5D33FD32322F2F -5D11332FED002F333FFD3212392FED123931305D2123112135211521113E01333216171E -01151123113426272E01232206070273C6FE520468FE0C5FF66765AA3D3D45C6161E2079 -646AC3660521B0B0FE2D1F33323534A373FE11018C4A8C2B2E312622FFFF00CD00000575 -07ED023601F200000117008D003C01610010400A01702301002321050025012B5D350002 -0006FFF904E6078F001A002800AF405A29033801461955140419191A1814171617161716 -191A130001001617181A010500070B0B0F35071B0F21702102212175250125AA0F1E011E -1E0003281A1B221A702101211B2100700A010A360156016501760104160A01031700B8FF -E0401409103700002A502A012A400910371720091037172F2B2B5D11332F2B1217395D2F -5D1139392F5DED2FED003F332F5DED5D332F5D332FED322F11121739018710FDC008C001 -8710FD08C03130005D09010E01070E012322262735331E01333236373E013F0101330901 -030E0123222627331E013332363704E6FDCA225D3634612D2872100E0F462D14481C203F -1624FDD6DB01B301862105C9A8A8C905B602605E5F5F0205D1FB1B4C621B19110801B902 -09060B0C34324F044FFC92036E01BEA6A8A8A67063627100000100C8FEAF053B05D1000B -0032401C060203043409000B0913000002061407780D400D700D020314026C0C10F6ED5D -10F6ED12392FED002F2F33ED3F33313029011133112111331121112302A4FE24C602E7C6 -FE24BB05D1FADB0525FA2FFEAF00FFFF001A0000055E05D1021600240000000200C80000 -052C05D100120021003E40256311011A340C0C070B3508031B3407080A0A131556000100 -71230F234023020C1B14076C2210F6FD325D10F45DED332F003FED3FED12392FED31305D -011406070E0123211121152111213216171E01073426272E01232111213236373E01052C -554754C098FDE403E5FCE1015C98C0554C49CF3235379083FEE20119858F36383401CD6C -B037423805D1B0FE6823423BAE724B72232510FDCB1A25276900FFFF00C80000052B05D1 -021600250000000100C80000048A05D10005001F401003013504030000070F0701021403 -6C0610F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D10002 -000AFEAF059E05D1000D00130049402A09121A124A110310340A030C1307340301051013 -0A0A070E140C0C0113200001000015131307070413052FED392FED11332F5DED392FED12 -392FED002F332FFD32323FED31305D01231121112311333612112111332111210A010705 -9EBCFBE4BC78829B03728DFEADFE0E0E9476FEAF0155FEAB0201D602B1019AFADF0475FE -9BFDAFBFFFFF00C80000049D05D102160028000000010020000007A805D1003700C7402E -093318332933401D40244135541D54247518711D73240B27133333351A130E0C0E020116 -09103701130037000708B8FFEA405A091037081309090A271F1A032C223237070A0C0E33 -35072C02142D350409021521052C03002F0A20375F0A50376F0A6037062C2C0137022733 -350600C5220414051515080A070C0E1A0609C51F0505393810393F395F397F39045D1112 -392F33F41739322F10FD32F41739322F5D002F3F1739FD322F121739FD111739018710FD -2BC08710FD2BC08710FD8710FD3130005D21230123112311230123012E01272E01272E01 -2B0135333216171E01171E01171133113E01373E01373E013B0115232206070E01070E01 -0707A8F2FDF469C46BFDF4E6025158682013251C1B533C3C47A7B23D0B1E0F2C8F56C45C -912E121D093CB5A5473C424B1E1D25132A7D3E02A9FD5702A9FD5702FE3A9C693D571C1B -18B17FAD1E5824696608029DFD610663702C5519AC80B1171C1B5B3A8587270000010051 -FFE5048505EC0040007F40145401583B6701693B7F0B7F0C7031703274380932B8FFE040 -3F0B10370B200B10373E3D1D3420200934703001303029343402100D7F0D020D0D113409 -0A3D1E0B0D37171E0B0D37236C3A1E1E3D3A030C171503734231310C2F332F10F6ED1217 -392F2FED2B2B003FED332F5D3FED332F5D1112392FED393931302B2B5D011E0115140607 -0E012322262735331E01333236373E01353426272E012B0135333236353426272E012322 -06070E010723353E01333216171E0115140607151E010416303F5B4650E68593FB4A0F63 -F97148A83436313C33339159C9B3ADD2352E2D6F4C4E843B3064170D4BF87E7BB14B4E52 -A37D347602CD2A816669AA3C4444371EDE3B4B2A292D6F454F651F1E1BA97F7836521818 -151E1411340DDB2036272C30885A7FB01B0F092F000100C80000053905D1000900644023 -0B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D07B8 -FFE840240B0F3702100C0F3707060102040308030308030807021400780B0F0B400B0207 -14046C0A10F6ED5D10F6FD113939003F3F1217392B2B31305D7121231101231133110133 -0539C5FD1CC8C502DBD104A9FB5705D1FB690497000200C800000539078F000900170093 -40320B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D -0A0F10701002101014AA0F0D010D0D07B8FFE840330B0F3702100C0F3707060102040308 -030308171A500A600A020A111A100A10000403080702140078190F194019020714046C18 -10F6ED5D10F6ED113939111239392FED2F5DED003F3F1217392B2B332F5DED332F5D3331 -305D7121231101231133110133030E0123222627331E01333236370539C5FD1CC8C502DB -D1B505C9A8A8C905B602605E5F5F0204A9FB5705D1FB69049701BEA6A8A8A67063627100 -000100CD0000057505D1002000AF407909011F01290127203A0137204B0147205C016500 -6720760074200D1F200A0D370C200A0D370202038801C8010201B30020001E661B861B02 -1B13120D120D121B1E04152002322F08010808000716351503070305000D121B1E200504 -4F150115150F2220003000400004500001006E22402201080414056C2110F6FD325D10F6 -5D5D322F5D121739002F2F3F3FED1112392F5DFD39121739018710FD5DC031300187107A -FD5D1808C0012B2B5D2123012311231133113E01373E01373E01373E013B011523220607 -0E01070E01070575FEFDA387C6C6335A28284E1E0D231245B9B44F53454E1F1D2B17346B -5A02A7FD5905D1FD6401121917553E1B522DA686B1191D1A583B847C2E0000010012FFFD -051805D10021003DB9001BFFACB309103709B8FFC0401A0B0E370335200301131317350F -01140078238F230103132020122F332FED5D10F6ED002FFD322F2F3FED31302B2B212311 -210E01070602070E01070E012322262335331E0133323637361213361237210518C6FDE6 -030B0308251D1D492F306544153C0C0E0A1E0F24401647430E050B04039B052171D955D6 -FEEC595A6B2B2C2603C001021617470146012D6201448700FFFF00C8000005F605D10216 -00300000FFFF00C80000053B05D10216002B0000FFFF0073FFE105DA05F0021600320000 -000100C80000053B05D100070027401703350603010501140078090F0940095009030414 -056C0810F6ED5D10F6ED002F333FED31302123112111231121053BC6FD19C604730521FA -DF05D100FFFF00C80000049605D1021600330000FFFF0073FFE5054605EC021600260000 -FFFF0000000004EE05D102160037000000010006FFF904E605D1001A0080403C29033801 -461955140419191A1814171617161716191A130001001617181A010500070B0B0F350700 -03700A010A360156016501760104160A01031700B8FFE0401409103700001C501C011C40 -0910371720091037172F2B2B5D11332F2B1217395D2F5D003F2FFD322F11121739018710 -FDC008C0018710FD08C03130005D09010E01070E012322262735331E01333236373E013F -010133090104E6FDCA225D3634612D2872100E0F462D14481C203F1624FDD6DB01B30186 -05D1FB1B4C621B19110801B90209060B0C34324F044FFC92036E00030069FFF0062405E1 -001D002A00370058403624182C321525062B32091509081603082A1E253265006A0F041E -150032150F00072B1518250407140F080839381F393F396F399039045D1112392FC4ED17 -3910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01071523352E01 -272E01353436373E01373533151E01171E01073426272E0127113E01373E0101110E0107 -0E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F4B57CE403B3A -8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A524AD88C88CC -4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01363737AA6170 -B63A2D3CFFFF00440000053805D10216003B0000000100C8FEAF05BE05D1000B0032401C -0602030B08043501080514080800130D40090B370A0A0D0414016C0C10F6ED11332F2BED -392FED003FFD322F3F3331302901113311211133113311230502FBC6C602DDC68DBC05D1 -FADD0523FADDFE010001008E000004EA05D10019003B40243511451154116C0974160502 -0C1435050500180C030017011400781B0F1B010D140C6A1A10F6ED5D10F6FD32002F3F33 -12392FED123931305D2123110E01232226272E01351133111416171E0133323637113304 -EAC681DD6463AC3F3F47C6142323726B71D652C60276282A313535A47201FCFE67577930 -2F2F281E02B1000100C80000077605D1000B003640200A06020308043401091400C60814 -05041401C605050D0C1F0D3F0D500D700D045D1112392FF4ED10FDF4ED002FFD323F3333 -31302901113311211133112111330776F952C6022EC6022EC605D1FADB0525FADB052500 -000100C8FEAF080305D1000F004140260A0602030C080434010F0D13000009140CC60814 -05041401C6050511101F113F1150117011045D1112392FF4ED10FDF4ED332FED002F2FFD -32323F33333130290111331121113311211133113311230747F981C6022EC6022EC68DBC -05D1FADB0525FADB0525FADBFE0300020000000005F405D1000E00210046401D07341B1B -1618351903083416560F011B08144F167F160216161900150FB8FFF4400A0E11370F7123 -0F2301192F5D10F62BFD11392F5DFD325D002FED3FED12392FED3130013426272E012321 -11213236373E01371406070E0123211121352111213216171E0105253235379083FEEC01 -0F858F363834CF554754C098FDEEFE660260015298C0554C4901C94B72232510FDCB1A25 -2769556CB03742380521B0FDB823423BAE00000300C80000069505D1000E001F00230055 -4016440D0107341919161703083416220321560F0100150FB8FFF4B30E11370FB8FFC040 -150C10370F0F21142078250F25702502190814166C2410F6FD325D10F6FD322F2B2BED5D -002F3F2FED3F12392FED31305D013426272E01232111213236373E01371406070E012321 -113311213216171E010123113304533235379083FEEC010F858F363834CF554754C098FD -EEC6015298C0554C490173C6C601C94B72232510FDCB1A252769556CB037423805D1FDB8 -23423BAEFDC505D1000200C80000052205D1000E001F003C401007341919161703083416 -560F0100150FB8FFF440110E11370F71210F21402102190814166C2010F6FD325D10F62B -ED5D002FED3F12392FED3130013426272E01232111213236373E01371406070E01232111 -3311213216171E0104533235379083FEEC010F858F363834CF554754C098FDEEC6015298 -C0554C4901C94B72232510FDCB1A252769556CB037423805D1FDB823423BAE0000010061 -FFE5052905EC002A0070400A3A1C491C640676060426B8FFE0403E0A10370B200A103718 -34191928092424203428020D0D11340909060316035603031A24171403732C0F2C010F2C -1F2C2F2C3F2C04241824180F0C1F0C020C2F5D33332F2F5D5D10F6ED11395D003FED332F -3FED332F1112392FED31302B2B5D0116121514020706042322262735331E01333236373E -01352135212E01272E012322060723353E0133320404616068696366FEEFA38DFE571051 -F78D7BCC444849FCD303230E5C4747B46689F057115DFE85AC010F052C60FEE4C2ACFEDF -676A6B3625DB414D574B50C980AD77AF3939374D43DC27356000000200C8FFE107D305F0 -000B001E006240427814010903060915161A1C5616591C7916761C080C34131E1314031C -03341602100309341C090F13190615180C3F0C580C6F0C040C0C0F0015197320120E140F -6C1F10F6FD3210F6ED12392F5DED1239002F3FED3F3FED1217392FED5D31305D01100023 -2200111000333200012311231133113312002120001110002120000705FEFFDBDDFEFE01 -03DCDB0101FB79F0C6C6F924016A0113013F016CFE90FEC5FECCFE9102E801280135FECC -FED7FEDBFEC90136010EFD3005D1FDAC012D0146FE63FE95FE93FE6601890002002C0000 -04DE05D10010001F0066400C28033506471C5A0759170504B8FFE8403209103703041305 -0506060F113440030103030012340F03000519150904060309045F050105120114007821 -0F2140216021035D10F6FD322F5D17392FED002F2F3FED12392F5DED12393130018710FD -C02B005D212311210123012E01353436373E0133210311212206070E01151416171E0133 -04DEC6FEBFFE43EE01DE96A55F4E47BE7301EAC6FED256682B2E3425292D82560250FDB0 -026E33D5B372A5373228FD240232161D1F7043506A292C1EFFFF0068FFE1041D04780216 -0044000000020074FFE1047C061D00270039006440160C1F35043D29303940044B294039 -6512751273330A33B8FFC0402B0B0D3722062B41002510250225250619411800373F060A -223118180C281B03903B1F3B3F3B02311B0C863A10F6ED5D10F6ED12392F1239003FED3F -ED12392F5DED123931302B5D011E01151400232226272602353436373E01373E01373E01 -37150E01070E01070E01073E01333216133426232206070E01151416171E0133323603EE -4648FED4DB6CB640504F0E19144D3548EBC24F883642814080CF303535084BB3655EAE0F -B29257A04802033A352E6C3E97AA03B846C786FAFEB6494C5F0121D04B9B6C5DAC354959 -11070904AD0408060B3E3135AB4D36493EFE22B9B7372E19431CAED840362DDA000300B9 -00000453045D0015002400330061400C0A0305141A0315147623050CB8FFD6402F090C37 -12112C3C4F1E011E1E071D3D08052D3D0708161B122C0F0F07251B00100D10370090350F -35011E2C1A07883410F6FD325D10F42BED12392F1239ED003FED3FED12392F71ED393931 -302B5D011406070E01232111213216171E0115140607151E01033426272E012B01113332 -36373E01133426272E012B0111333236373E010453413940977BFE3201B07D7F383F3B5E -4A6381FD1F202A694DC4EB4A4724261D3B243D26584EF1B270792C2C2B0152517E2A2F2A -045D111D216A48537A220A1889017D243A101505FECE0B161841FE4237451D1207FE930F -19194800000100B9000003BB045D0005001F4010013F040503700001000007021A038806 -10F6ED11332F5D002F3FED313001211123112103BBFDBABC030203B8FC48045D00020009 -FEF404AF045D000D00130053401C3B124A12020105103E0A050C13073E0310C90A0A070E -1A0C0C01C900B8FFC040120B0E370000152F153F1502131A070704C9052FED392FED5D11 -332F2BED392FED12392FED002FFD32323FED2F3331305D01231121112311333612112111 -3321112106020704AFAFFCB8AF79757302BE87FEBDFEAF0D8053FEF4010FFEF101ACC101 -F90103FC43031FFBFE628600FFFF006AFFE60460047C0216004800000001003400000632 -045D003100D840123A0E3A2D4A0E4A2D5F0C5F2F6F0C6F2F0826B8FFE0B3090B3715B8FF -E0401A090B3724B42D2D2F17B40E0C0E020116091037011A0031000708B8FFEA405E0910 -37081A09090A241C1703291F3C31070A0C0E2F2D072902112A3F040902121D052905002E -0A21315E0A51316F0A60317F0A7031082929013102242D2F0600C71F041A051212080A07 -0C0E170609C71C0505333210333F334F336F33045D1112392F33F41739322F10FD32F417 -39322F5D002F3F1739FD322F121739FD111739018710FD2BC08710FD2BC08710FD8710FD -3130002B2B5D21230123112311230123012E01272E012B0135333216171E01171E011711 -33113E01373E01373E013B0115232206070E01070632E3FE9A5BBA51FE8AD901AF314B1F -1B4A5435457C962D091B0A216740BA4069210B1B082C947D4535554B191C4D2D01FEFE02 -01FEFE0202491A60615542A2647D1A43174C3F0401E4FE1C04404B1942197B66A2465159 -631900010041FFE603C20478003D007FB7263475127D3C032FB8FFE0404C0D103708200D -10373B1B3FAF1CBF1C021C1C06313F2D902DA02D032D2D293E3104200A300A020A0A0E3F -06091C2E231B372E1C373B0409141B00903F7F3F803F02800990090209400B0F37092F2B -5D5D10F6ED1217392FED2F2F003FED332F5D3FED332F5D1112392F5DED3931302B2B5D01 -1406070E012322262735331E01333236373E01353426272E012B0135333236373E013534 -26272E012322060723353E01333216171E0115140607151E0103C2574444A45274D2660D -49E26A326A272A32312A297430A371288128343D3024255B2366C5430D53BE5F4E9B4342 -546D5C677A01395E822827242C2ECE4046131518433A3C48121208A2060D113E442F3D11 -110C3734CF1B221C2222755658851D071989000100B900000466045D00090044402D0B02 -0407020D030103380B103702380E10370706010204030805030808021A00920B1F0B600B -0203071A04880A10F6ED395D10F4FD39003F3F12173931302B2B5D712123110123113311 -01330466BAFDB7AABA0243B00347FCB9045DFCC5033B000200B900000466061500090017 -0073404C0B020407020D030103380B103702380E10370A0F1001101014500D0D07060102 -04030805030817C91F0A2F0A020A11C900101010201003100A100408021A0092191F1960 -190203071A04881810F6ED395D10F6FD391239392F5DED2F5DED003F3F121739332FED33 -2F5D3331302B2B5D7121231101231133110133030E0123222627331E01333236370466BA -FDB7AABA0243B06B05B1A9A9B105AB015B58595A010347FCB9045DFCC5033B01B894A6A6 -94695E5C6B00000100C1000004A9045D001A0093404D0120090E371B02271A360E321635 -1A0502011A001A000A1B0F2B0F020FB41618160A0F181604121A023C2F08010808000713 -3F12050705010508561A9600961AB600B61A05021A181604121200B8FFC04011090E3700 -001C0F1C1F1C0208031A05891B10F6FD325D11332F2B332F17395D003F3C3F3FED111239 -2F5DFD39121739018710FD71C03130018710FDC0015D2B2123012311231133113236373E -01373E013B0115232206070E010704A9F6FE3066BCBC5D72280E1B0D349C9256534F5924 -2859320200FE00045DFE1E434A1B3D1C7170A243545E5D180001001DFFFE043E045D0021 -003FB9001BFFACB30D103709B8FFC0401C0D1037023E2105001313173F0F011A00922303 -1A20203020022020122F332F5DED10F6ED002FFD322F2F3FED31302B2B212311210E0107 -0E01070E01070E012322262335333216333236373E01373E013721043EBCFE5F03060307 -201A183B2222533111410A0A081E0A183312333E0A040703030103BF539A3EA7C7423E4D -1F1E1E02A4020E1332EEE152E166000100B9000004D9045D000C0078401335093A0B4503 -4A0470037F04060B400D103709B8FFC0403D0D10377B027B05790A030A2A090B37050A02 -030904400E103704200D0F373F04010404070B09050107090A0B0305021A00920E0F0E20 -0E02051A07880D10F6ED5D10F6ED111739002F333F3312392F5D2B2B1217393130002B5D -012B2B5D2123110123011123113309013304D9BAFEEA8CFEECB0E301300126E70372FDC2 -023EFC8E045DFD8F0271000100B900000460045D000B0032401C033F0808050A07050105 -0809021A00920D1F0D600D0208031A05880C10F6FD325D10F6FD32003F333F3312392FED -31302123112111231133112111330460BCFDD1BCBC022FBC01F7FE09045DFE3C01C4FFFF -006AFFE10471047C021600520000000100B900000460045D000700254015033F06050005 -011A0092091F09600902041A05880810F6ED5D10F6ED002F333FED313021231121112311 -210460BCFDD1BC03A703BBFC45045D00FFFF00B9FE640490047C0216005300000001006A -FFE703FD04770021005A40430F234F235F23032B01220E2A1624183A01350E3A16351849 -014F0A440E4F1641185901550E6901650E7A01730E131010143F0C0421211A3F03090F00 -0023171B09852210F6ED11332F3C003FED332F3FED332F31305D015D250E01232226272E -013510002132161715232E01232206151416333236373E01373303FD73A5527ACC494951 -0128010161BB4E0B5DB555A7B7B6A83B75302651100B463629474848DC93010B013F3627 -D14744E0C7C7DC1E1813350D0001000A000003EE045D0007003840230301043F06054000 -4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32 -2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A5FFFF -003DFE64047F045D0216005C00000003006FFE64064B061400230030003D007A40105622 -011D011B1E0C09040627353F2118B8FFF040400E0F3718043B2E3F0F06100E0F3706090B -0C392436384924463804241B00C809311B1E2B04091A0C381B12C8800C900C020C0C3F3E -0F3F1F3F3F3F503F803F055D1112392F5DFDED10ED173910FDED5D003F3F2B33FD323F2B -33FD321217393F31305D011406070E01232226271123110E01232202113436373E013332 -16171133113E0133321203342623220607111E0133323605112E01232206151416333236 -064B4C3F3EA259436327BA3D4F54C1F04E3F3DA5523C6331BA2E7C3FC6E2C18888374A3F -2F3F3A8D9BFD7627503187A18F87355B024C95E54A4A4E2E13FE3301CD1E23012E010D8D -DD4B494D251E01E1FE1F1B28FED5FEECBFDE1219FD171619D9AA02E91219CED2C3E01D00 -FFFF003C00000480045D0216005B0000000100B9FEF404DE045D000B0041400F0602050B -08043F01051A080800C90AB8FFC04015090D370A0A0D0D40090E378F0DAF0D02041A0188 -0C10F6ED5D2B11332F2BED392FED002FFD322F3F33313029011133112111331133112304 -2FFC8ABC0226BC87AF045DFC4503BBFC45FE52000001008E0000041F045D0016003C4025 -0C061C062C06750E040209113F0505001509050014011A0092183F18010A1A0009100902 -092F5DED5D10F6FD32002F3F3312392FED123931305D2123110E01232226351133111416 -171E01333236371133041FBC5BA662B4BEBC101A1A5E5445A23CBC01AD1C22B1A70196FE -CA40652524261B12021D000100B900000649045D000B003D40260A06020508043F010809 -1A00CA081A05041A01CA8005A0050205050D0C0F0D200D500D700D045D1112392F5DF4ED -10FDF4ED003FFD323F333331302901113311211133112111330649FA70BC01AEBC01AEBC -045DFC4503BBFC4503BB000100B9FEF406D0045D000F004A402E0A0602050C08043F0108 -0E0DC90000091A0CCA081A05041A01CA80059005A00503050511100F111F113F116F1104 -5D1112392F5DF4ED10FDF4ED392FED002F3FFD32323F3333313029011133112111331121 -1133113311230621FA98BC01AEBC01AEBC87AF045DFC4503BBFC4503BBFC45FE52000002 -000A000004C4045D000E0021004A4015750D01073D4F1B9F1B021B1B16183F1905083D16 -0FB8FFF04016090B371B081A161619001B0F8F230F231F232F2303192F5D10F6FD11392F -FD322B002FED3FED12392F5DED31305D013426272E012B0111333236373E01371406070E -0123211121352111333216171E01040223282A6B64B0AC646E282925C24138429676FE55 -FEB80204F47E8B453A3A0157334D18190AFE8411181A473A518429322A03B8A5FE4D1A33 -2B86000300B9000005A2045D000E001F0023005A4016200523073D4F199F190219191617 -05083D167900010FB8FFF04022090B37001B500F600F700F030F0F231A2292250F253025 -402570250419081A16882410F6FD325D10F6FD322F5DED2B5D002FED3F12392F5DED2F3F -3130013426272E012B0111333236373E01371406070E012321113311333216171E011333 -1123036923282A6B64B0AC646E282925C24138429676FE55BCF47E8B453A3ABBBCBC0157 -334D18190AFE8411181A473A518429322A045DFE4D1A332B8602B1FBA300000200B90000 -0435045D000E001F00424013073D4F199F19021919161705083D167900010FB8FFF04013 -090B37001B0F8F210F212F210219081A16882010F6FD325D10F6ED2B5D002FED3F12392F -5DED3130013426272E012B0111333236373E01371406070E012321113311333216171E01 -037323282A6B64BAB6646E282925C24138429676FE4BBCFE7E8B453A3A0157334D18190A -FE8411181A473A518429322A045DFE4D1A332B8600010053FFE703F604770021007DB532 -0442040210B8FFD640090B0D37152A0B0D371DB8FFD6403F0B1037082A0B1037123D1313 -061F1B1B173E1F049F0A010A0A0E3E0609141C111A0390232340090D371C2F133F134F13 -03131C1380099009020940090C37092F2B5D33332F5D2F2B10F6ED1139003FED332F5D3F -ED332F1112392FED31302B2B2B2B5D011E011510002122262735331E0133323637213521 -2E012322060723353E01333216035D4950FEC9FEFC66BF430D3CC66D9DC40CFDCC023314 -BE8E5BB4570D3FC2677CC803ED46D290FEEAFEB8301BCE2F49C0BA979E9F3D43CE193A44 -000200B9FFE1064C047C000B001E005640363A0335094A034509040C3E131E1314031C03 -3F16041005093F1C0A0F1319061A2F0C010C0C0F001B1990202F203F2002120E1A0F881F -10F6FD325D10F6ED12392F5DED1239002F3FED3F3FED1217392FED5D3130013426232206 -15141633323625231123113311333624333200111000232200058AA69399A1A89292A7FC -D3E8BCBCED190111C7E70112FEF2EBDEFEF5022ED7D5DFCDD4D7D5A2FE06045DFE3BE7FD -FEC4FEEEFEF1FEC201200002004300000413045D0010001F0069B3721C0104B8FFE8403D -0910370304B4050506060F113C030300123D0F0500050909190902191B70090109040603 -09040A051A054A055A0580059005060512011A0092210F21015D10F6FD322F5D17392F5D -ED5D002F2F3FED12392FED12393130018710FDC02B015D212311230123012E0135343637 -3E0133210311232206070E01151416171E01330413BCDDFEA6DD01789186503D3C9C5C01 -AEBCED4D442827251724256A4101BBFE4501CD28A586597C27261BFDF201780A16164B2C -37441E1D1500FFFF006AFFE6046005DB0236004800000116008EF9000014400D03302560 -250202002520120025012B355D3500010013FE6D046206140035006A4044051C1E261E28 -59056905721D0617140E51111112180D08421B0412012F3E2A2A012A0D150F5F2E6F2E7F -2E032E2E0D001A2191371F37603702141517030B1A110F0D883610F63232FD17325D10F6 -ED12392F5D2F2F002F2F5DED3F3FED123912392FED393931305D0026272E01272E012322 -0607112311233533353315211521113E01333216171416151406070602070E01232A0127 -35333236133E013503A501010113191A594650AC4CBCA6A6BC0141FEBF58C162B1BB0303 -020103544746B96A17182A44BB9C09010102064B2B5080292B294D3AFCBE04F4869A9A86 -FEED4952DEC92F6B4B3A703AB0FEFF50504E029EF60150224B2EFFFF00B9000003BB0682 -0236020B00000116008D9AF6000AB6010009070405252B350001006AFFE7040A04770021 -006EB53B0A4B0A021BB8FFD640090B0D37162A0B0D370EB8FFD640340B1037012A0B1037 -193D1818030C1010143E0C0421211D3E03092018301840180318171810031A008E232340 -090D371A1A09852210F6ED2B10E61117392F5D003FED332F3FED332F1112392FED31302B -2B2B2B5D250E01232226272E013510002132161715232E01232206072115211E01333236 -3733040A4E9F7B7DD14C4C52012B010D68BB450C40C2658FC719023CFDC10AC4A46CBD3E -0C302029474849DC92010501453620CB324E9CA197B2C8443200FFFF006EFFE503D70478 -021600560000FFFF00AF0000018305DB0216004C0000FFFF00050000022D05DB02160077 -0000FFFFFFC2FE59021505DB0216004D00000002001DFFFE06F4045D000E003D0072B900 -30FFACB30D10371EB8FFC0401D0D1037073D4F379F3702373716183E350528282C3F2409 -3D167900010FB8FFF0401E090B3737081A161635001B890F010F8F3F0F3F0118C9203530 -35023535282F332F5DED5D10F45DFD11392FFD322B5D002FED2FFD322F3FED12392F5DED -31302B2B00353426272E012B01113332363736371406070E01232111210E01070E01070E -01070E012322262335333216333236373E01373E01372111333216171E01063223282A6B -64B0AC646E2829E74138429676FE55FE5F03060307201A183B2222533111410A0A081E0A -183312333E0A0407030301F47E8B453A3A012037334D18190AFE8411181A81518429322A -03BF539A3EA7C7423E4D1F1E1E02A4020E1332EEE152E166FE4D1A332B86000200B90000 -06F4045D000E0027005D4017171E073D4F219F21022121161C20051A083D167900010FB8 -FFF0401F090B37211E081A16161A001B890F010F8F290F292F294F29031D191A1A882810 -F6FD325D10F65DED11392FED39392B5D002FED2F3F3312392F5DED39393130013426272E -012B0111333236373E01371406070E0123211121112311331121113311333216171E0106 -3223282A6B64B0AC646E282925C24138429676FE55FDF3BCBC020DBCF47E8B453A3A0157 -334D18190AFE8411181A473A518429322A0210FDF0045DFE4D01B3FE4D1A332B86000001 -00130000045F0614001E00504030031D161D751D0317140E51111112180D08421B041201 -010D08150F021A0091201F20602002141517030B1A110F0D881F10F63232FD17325D10F6 -ED2F2F003F3C3F3FED123912392FED393931305D2123113426272E012322060711231123 -3533353315211521113E0133321615045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC -63B5BE027C4D87262A294C3BFCBE04F4869A9A86FEED4952DACDFFFF00C1000004A90682 -0236021200000116008DF9F60011400C01001D401D02001D1C0611252B5D35000002003D -FE64047F06150007001500BD404C04063406440650066006700606090307051903170546 -0149035800570179030902071A000100051A0403044900460402080F0E010E0E12500B0B -0003020405020C15C908400B0E37080FC90EB8FFC040110B0E370E080E04026801010102 -03030400B8FFC040220910370C001C004A006A007A0005008D170F170103041304450465 -0475040504821610E65D5D10F65D2B1117395D2F1139392F2BED2F2BED003F3F12393933 -2FED332F5D333130015D8710FD8710FDC0015D005D0901231301330901130E0123222627 -331E0133323637047FFD74C9D0FE43CC0157015A0805B1A9A9B105AB015B58595A01045D -FA0701D20427FCC4033C01B894A6A694695E5C6B000100B9FEF40460045D000B003F4027 -0A060520030103083E00050802C93F034F037F0303030305091A00920D1F0D600D02081A -05880C10F6ED5D10F6ED12392F5DED003F33ED2F5D3F3331302901112311211133112111 -330460FE84AEFE83BC022FBCFEF4010C045DFC4403BC000100C80000048A076B0007002B -B90006FFC040140D10370606003503030205130606090114026C0810F6ED11332FED002F -3FED332F2B31300111231121113311018EC60308BA0521FADF05D1019AFDB600000100B9 -000003BB05CE00070033B90006FFC0401A0E10370606003F03050205C97006010606090F -0901011A02870810F6ED5D11332F5DED002F3FED332F2B313001112311211133110175BC -0254AE03B8FC48045D0171FDEA00000100CB023C073502DC00030011B601540200000501 -2F11332F002FED3130012135210735F996066A023CA0000400C8000008B905ED00090015 -0021002500A7403E080718073A014901440646075801540656076F0160067F0170060D09 -0D0613190D16137A19751F0625533F224F220222221F401214371F51300D010D0D19B8FF -C040321214371951130202030807040106030100220F2302232223220A1CC910100A0006 -0102071300000416C90A0A270213046C2610F6ED11332FED12392FFD1139391112392FED -1239392F2F5D002F3F1217393FED2B332F5DED2B332F5DED5D3130015D21230111231121 -0111330114062322263534363332160734262322061514163332360121152104FFF5FD72 -B401330250B403BABDB2B6BABEB2B5BAB25865675757676558FE6201B8FE480534FACC05 -D1FB4004C0FE63E0DADADFE0DADCDDAC8888ADAD8787FDE89E00000100B900000460045D -000700254015033F06050005011A0092091F09600902041A05880810F6ED5D10F6ED002F -333FED313021231121112311210460BCFDD1BC03A703BBFC45045D00000101190235028F -05D5000800214011035004040703010E0307002A03000101012F5D33ED392F003F3F332F -ED3130012311233532363733028FA5D1667E0989023502A9752C5600000100EF023D039F -05ED001D0043B90011FFE040250D10370F0F0B521302021C51010E00001C01082A261636 -166616761604160F160F000101012F5D33332F2F5DED1239332F003FFD323FED332F3130 -2B0121353E01373E013534262322060723353E01333216151406070E010721039FFD505B -86276D40584C468F290F41974D9DA9526A318D3701F2023D94456825676D52464A3C20B3 -1B229E7A5D945E2B6A29000100E6021C037305ED002E0074400F6C096C227E097E220455 -0C5A1F0226B8FFE0403B0B0E3703200B0D372C2B15510F16010F161F164F165F16CF16FF -16061621211D51160625020A0A0E51060F1A2A281622112A2216282C04090000092F332F -121739ED2F2F2FED003FED332F3F1239ED332F2F5D71ED393931302B2B5D015D01140607 -0E012322262735331E013332363534262B01353332363534262322060723353E01333216 -15140607151E0103733C30357B4F528F4111259A4F546E645B8C7D575F52574299251140 -964F98AA614D5075033A47702225201E1CAF233B4948533B8B4C423C473E23AF1B228C62 -57711A08106D000200B3023D03BD05ED000A000D003A401E6D067E06020609010D51050C -05030702030E00070B042A09000D060101062F332F12393333FD39392F003F3F1239392F -ED3939323130015D012315233521350133113321110103BDA396FE2F01D295A3FECBFE9F -0319DCDCB9021BFDB10190FE7000000100E6021C037505DA002A004840176F087F08021D -1D1A5125250621511E030A0A0E51060F00B8FFEA400F090C371F21291E1F1E09142A0000 -092F332FED1239392FED2F2B003FED332F3FED12392FFD322F31305D011406070E012322 -262735331E01333236373E01353426272E012322060711211521153E01333216171E0103 -75322F3088574E953C1025924E2C521C1D171F1D1E59353B6C260255FE4814310E547634 -373C0363457A2A2B331C1A9F1436171C1D43272A391415110E0601F08BCF02021722246F -000100F3023503A505DA000600414025560101030100012A020203630073000200000351 -0503020E030002100910370202040000042F332F12392F2B1239003F3FFD322F3130015D -8710ED87C0015D0901230121352103A5FE2AB901F0FDED02B2054EFCE7031A8B000300C5 -021B039105EE001900280037005D40420F0B0F151F0B1F152A022A0439023904492B582B -0A0F251F2526103610042F09261604031D5110023551030F1A2A13202A0D292A090D1316 -04067000010000322A062FED332F5D121739ED2FED2FED003FED3FED1217395D31305D01 -140623222635343637352E0135343633321615140607151E01033426232206151416171E -01173E01133426272E01270E011514163332360391CB9BA7BF5E595246B99095B5505261 -5BBE574F465D302D17482E392618374217582A3A387650516D033579A19F784F78260429 -64476A8D87683F7D2304276B016433483F36263D140A1F0B254FFE79323B1E0A1C0F205D -304A5F4E00020073FFE1068B05F0002800340075400978180176097915021BB8FFC04045 -0910371B694F0001002302031A090A0905151A0915155A095515062C3415023234090A22 -1E2926151B00030F291503360F361F3680369036BF36CF36060F36012F150F683510F6ED -5D5D10D6ED121739D4FDC4003FED3FED5D1239393FDD5DED2B5D31305D011E0115140207 -0E01232224272602353412373624333216171E01173E013534262735331E011514060110 -0023220011100033320005A11F1A63595CFBA19DFEFF5A5A61605C5801059AA0FF591819 -144F43160CA00D0B78FEF9FEFCE1E3FEFD0108DEDE0107044958A663B8FEDD6165666863 -630120B9B6012167626869611B2121044044245B17092F46326C82FE8D0122013BFEC5FE -DEFEDBFEC90137000002006AFFE104C30584001D0029005640391A20090C373A2135274A -21452704151B690D050003213F0904273F030A14102918090C1B03061E1B00902B0F2B1F -2B3F2B6F2B04241B06852A10F6ED5D10F6ED121739DCFDC4003FED3FED12393FFDCD5D31 -302B011000232200111000333216173332363534262735331E01151406071E0107342623 -22061514163332360471FEE8EBEDFEE90117ED33602B5D5A4A160CA00D0B736C4548C2AA -9799A9AA9896AB022EFEEFFEC4013C01110111013D0F104147245B17092F46326A80144D -D98BD9D3D3D9D2D9D700000100B2FFE1067506F8002B004C40342A20090F37252B6A1C03 -0D032615390649067615041534060A2420290F2801281B14002D0F2D402D6F2D7F2D902D -050F140C6B2C10F6ED5D10DEEDD45DFDC4003FED5D3F3FFDC431302B011406070E012322 -26272E01351133111416171E01333236373E0135113332363534262735331E0115140623 -052947514DCE898CD0475147C621272C976A6B962D2721D85A4A160CA00D0BACA00256A2 -F1504C464A4852E8A9037BFC7B798C394142414239936D038A4147245B17092F46328384 -000100B1FFE105A505840025005C403E0B0619077A070323200910371E246A1505020509 -051142050A011D19290F21012114021A40000100270F276F27025F279027A027C027EF27 -050B1A08872610F6ED5D7110D671ED32D45DFDC4002F3FED3F12393FFDC431302B5D2123 -350E01232226351133111416171E0133323637113332363534262735331E011514062B01 -0457BC5FAE69B0C4BC101A1B565249AD4BD05A4A160CA00D0BACA0027C4B50D7D002D5FD -8455792B2C284C3B03424147245B17092F46328384000001020905110342068C00160042 -4029BF0301030606050C50146005010504ADC005D005020540090D370505110940111437 -09290F000100112FDD5DED2B12392F2B5DED002F5DD4ED12392FC55D3130011406071523 -353E013534262322060723353E01333216034242426E2F3026211F251803134926516605 -F8404E1544790C27271827090969060C560000010221FE8202F5FF450003001340090144 -8F0201020015012FED002F5DED31300123353302F5D4D4FE82C3FFFF0154051602FA068C -001600430000FFFF021D051603C3068C0016008D00000002013605110514068C0006000A -004DB90006FFF040100E103705100E10370802010708040305B8FFC040110E1037050560 -0301036007700702070900B8FFC0B50E10370000042F332F2BD6CD5D002F5D332F2B1217 -392F3130012B2B01230B012313332103231303E19FB9B89BE4E30217DA817C05110100FF -00017BFEF6010A0000020003051103E1068C0006000A004AB90006FFF040100E10370510 -0E10370802010809040305B8FFC040180E1037050560030103006F097F0902090704400E -103700042F332BD6CD5D2F002F5D332F2B1217392F3130012B2B01230B01231333012303 -3303E19FB9B89BE4E3FE6181DADF05110100FF00017BFEF6010A00020136051104C00752 -0006001D008EB90006FFF040120E103705100E1037BF0A010A0D0D0C13501BB8FFC0400B -0E10371B0C02010C030305B8FFC0402A0E10370505600301030BADC00CD00C020C400910 -370C0C18104011143710290F07010718400C10371800B8FFC040090E1037000060040104 -2F5D332F2BD42BDD5DED2B12392F2B5DED002F5D332F2B1217392FD42BED12392FC55D31 -30012B2B01230B01231333251406071523353E013534262322060723353E0133321603E1 -9FB9B89BE4E301C342426E2F3026211F251803134926516605110100FF00017B32404E15 -44790C27271827090969060C560000020125051103F307DE000600200064B90006FFF040 -200E103705100E10370710520F171F17A0170317141D520A400D11370A01020305B8FFC0 -40110E10370505600301032029070013291400B8FFC0B40E103700042F332BD6ED2FD6ED -002F5D332F2B123939D62BED3CDD5DED3C3130012B2B01230B01231333130E0123222627 -2E0123220607233E01333216171E013332363703E19FB9B89BE4E3F606865F35491C183A -192B22058C05875F36491C163B192A240405110100FF00017B015289902919162D3E4788 -912A19142E3E47000002014204E703D506FB000D0011003C40251110400F1A3710001006 -0AAA3F030103600E700E020E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D -002F5DEDCD39392F2BCD313001140623222635331416333236353703231303D5B29897B2 -A2555253555EDA817C0646A3BCBCA37C64647CB5FEF6010A0002014204E703D506FB000D -0011003C4025100F400F1A370F000F060AAA3F0301036F107F1002100E0D2A0E0F001F00 -8F000300072A062FEDD45D39ED2FCD5D002F5DEDCD39392F2BCD31300114062322263533 -1416333236350723033303D5B29897B2A2555253555281DADF0646A3BCBCA37C64647C55 -010A0002014204E703D5071E000D002400634040111414131A0F2201221340091A371300 -13060AAA3F0301031213400910371313001F101F201F031F1728500E600E700E030E0D2A -0E0F001F008F000300072A062FEDD45D39ED2F5DEDCD5D392F2BCD002F5DEDCD39392F2B -D45DCD12392FC531300114062322263533141633323635271406071523353E0135342623 -22060723353E0133321603D5B29897B2A2555253551237375C272822191C1E1402103C21 -42570646A3BCBCA37C64647C5B34431238650A2120191D080757060A45000002012504E7 -03F307DE000D0027005840100E17520F1E1F1E021E1B245220110111B8FFC04025090C37 -11006006700602060AAA3F0301031A291B0627290E0D2A0F001F008F000300072A062FED -D45DEDD4ED10D6ED002F5DEDDD5D39D62B71ED3CDD5DED3C313001140623222635331416 -33323635130E01232226272E0123220607233E01333216171E013332363703D5B29897B2 -A255525355C006865F35491C183A192B22058C05875F36491C163B192A24040646A3BCBC -A37C64647C019889902919162D3E4788912A19142E3E47000001020905110342068C0016 -00524035BF0301030606050C50501460147014031409900501C76005010504ADC005D005 -020540091037050511094011143709290F000100112FDD5DED2B12392F2B5DED002F5D5E -5D5ED45DED12392FC55D3130011406071523353E013534262322060723353E0133321603 -4242426E2F3026211F251803134926516605F8404E1544790C27271827090969060C5600 -00020136065403E1080100060020007D404A0702170202141D50200A010A1050076F1701 -0F1770170217010205400D1137050920039003A003B003045910032003C00303C003D003 -0231D003E003025003010F037003020320280700B8FFC040090E10370013281400042F33 -D6ED2F2BD6ED002F5D71725E71725E715ECD2B39392F5D713CEDDD71ED3C31305D012327 -07233733130E01232226272E0123220607233E01333216171E013332363703E1A9AFAEA5 -F8BBEC0B705025491C1B3E141D2806860A6F5227432122301A1B2B0506545959AD010052 -6B190D0D1A202D4E6F17101016232A0000020142064803D50801000D0011005A403E5010 -6010020A50FF03015F030103007F0601060F109F10026F10FF1002106F11010F11701102 -11590E690E720E030E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D002F5D -71DD5D71D45D3CDD7172ED5D313001140623222635331416333236353707233703D5AB9E -9EACA24B5D5A4D4FC681680738589899573058592FC9D8D800020142064803D50801000D -001100644033500E600E020A50FF03015F030103007F0601060F0E9F0E026F0EFF0E020E -6F11010F1170110211561066107D1003100E0D2A0EB8FFC0400F090D370E0F001F008F00 -0300072A062FEDD45D392BED2FCD5D002F5D71DD5D71D45D3CDD7172ED5D313001140623 -222635331416333236350723273303D5AB9E9EACA24B5D5A4D5681C6DF07385898995730 -58592F0FD80000020142064803D50801000D0024008E4062111414131A6F22010F227022 -02223F134F13021340111537130013060A5009900301B0030159700301310F033F037003 -CF0304031213400915371313501F601F701F03001F101F201F301F401F051F17C00E010E -0D2A0E0F001F008F000300072A062FEDD45D39ED2F5DCDCD5D71392F2BCD002F5D5E715E -5D715EEDCD39392F2B712F5D71CD12392FC5313001140623222635331416333236352714 -06071523353E013534262322060723353E0133321603D5AB9E9EACA24B5D5A4D2E2E2E4D -231F1C15191A0E020E321B364A0738589899573058592F612B380F2F54091E1817160805 -4905083900020142064803D50801000D0027009240111B2450DF1101110E17506F1E010F -1E011EB8FFC040520D10371E00060A50099003B00302F0030159200330034003C003D003 -E003066003700302C003D0030231A003B003025003E003020F033F03CF0303031A281B1B -0627280E0E0D2A0F001F008F000300072A062FEDD45DED3C10ED103C10ED002F5D71725E -5D71725E5D715EEDCD322F2B5D71ED3CDD71ED3C31300114062322263533141633323635 -370E01232226272E0123220607233E01333216171E013332363703D5AE9B9BAFA26C3C3C -6BA20B705025491C1B3E141D2806860A6F5227432122301A1B2B050706546A67572E2828 -2EFB526B190D0D1A202D4E6F17101016232A000201360668051008010006001D0088B900 -06FFF0401A0E103705100E1037BF0A010A0D0D0C400E10370C13500F1B011BB8FFC0403A -0D10371B0102030F0570050205050F0301030BADC00CD00C020C400910370C0C18104011 -143710290F07010750006000700003180000600401042F5D332FD45DDD5DED2B12392F2B -5DED002F5D332F5D1239392F2B5DEDC42B392FC55D3130012B2B01232707231333051406 -071523353E013534262322060723353E0133321603E19FB9B89BE4E3021342426E2F3026 -211F25180313492651660668CECE014944404E1544790C27271827090969060C5600FFFF -001AFE82055E05D10236002400000116024B2F00000AB602000D0E0500252B35FFFF0068 -FE82041D04780236004400000116024BBA00000F400A027F36010036370B00252B5D3500 -FFFF001A0000055E080102360024000001170256002F0175001A401202501C0102101C40 -1C701C03001C0B0500252B5D35005D35FFFF0068FFE1041D068C0236004400000116024A -BA000011400C025F457F45021D45340B00252B5D3500FFFF001A0000055E07ED02360024 -00000117024E002F01610011400B0302400F01000F0B0500252B5D353500FFFF0068FFE1 -04F4068C0236004400000116024EE0000013400D030240385038022938340B00252B5D35 -3500FFFF001A0000055E07ED0236002400000117024F002F01610011400B03020F0F0100 -0F0B0500252B5D353500FFFFFFE3FFE1041D068C0236004400000116024FE0000013400D -030240385038022938340B00252B5D353500FFFF001A0000055E08010236002400000116 -025C2F00001740110302400FA00FB00FC00F04000F0B0500252B5D353500FFFF0068FFE1 -04A0075202360044000001160250E0000013400D030240385038022938340B00252B5D35 -3500FFFF001A0000055E0801023600240000011602572F00000CB70302000F0B0500252B -3535FFFF0068FFE1041D07DE02360044000001160251E0000013400D0302403850380229 -38340B00252B5D353500FFFF001AFE82055E07ED023600240000003700D6002F01610116 -024B2F00001840110300141505002502400F01000F0B0500252B5D352B35FFFF0068FE82 -041D068C023600440000003600D6E0000116024BBA00001E4016037F3D01003D3E0B0025 -0240385038022938340B00252B5D352B5D35FFFF001A0000055E08010236002400000116 -02582F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236004400000116 -0252E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000055E08010236 -00240000011602592F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236 -0044000001160253E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000 -055E08010236002400000116025A2F00000CB7030200110B0500252B3535FFFF0068FFE1 -041D071E02360044000001160254E0000011400B0302403A01293A340B00252B5D353500 -FFFF001A0000055E08010236002400000116025B2F00000CB7030200110B0500252B3535 -FFFF0068FFE1041D07DE02360044000001160255E0000011400B0302403A01293A340B00 -252B5D353500FFFF001AFE82055E0801023600240000003700D9002F01750116024B2F00 -001D4013025011011103001B1C0500250200110B0500252B352B3500115D3500FFFF0068 -FE82041D068C023600440000003600D9DD000116024BBA0000184011037F44010044450B -002502293A340B00252B352B5D35FFFF00C8FE82049D05D10236002800000116024B2600 -000AB601000E0F0100252B35FFFF006AFE820460047C0236004800000116024BF900000A -B6021F22231218252B35FFFF00C80000049D08010236002800000117025600260175001C -401401501D0101001D201D501D601D04001D0C0203252B5D35005D35FFFF006AFFE60460 -068C0236004800000116024AF9000018B4026F310131B8FFC040090A1137323120120025 -2B2B5D35FFFF00C80000049D07C8023600280000011700D7002601750012400B01501901 -0100190C0203252B35005D35FFFF006AFFE604600653023600480000011600D7F900000A -B602002D201200252B35FFFF00C80000053A08010236002800000117024E002601750016 -400D0201501001020100100C0203252B3535005D3535FFFF006AFFE6050D068C02360048 -00000116024EF900000CB703021E24201200252B3535FFFF00290000049D080102360028 -00000117024F002601750016400D0201501001020100100C0203252B3535005D3535FFFF -FFFCFFE60460068C0236004800000116024FF900000CB703021E24201200252B3535FFFF -00C80000053608010236002800000116025C26000013400D0201101020100200100C0203 -252B5D353500FFFF006AFFE604B9075202360048000001160250F9000013400D03020024 -2024021E24201200252B5D353500FFFF00C80000049D0801023600280000011602572600 -000CB7020100100C0203252B3535FFFF006AFFE6046007DE02360048000001160251F900 -000CB703021E24201200252B3535FFFF00C8FE82049D0801023600280000003700D60026 -01750116024B2600001D40130110501001020015160203250100100C0203252B352B3500 -5D113500FFFF006AFE820460068C023600480000003600D6F9000116024BF9000014400E -031E292A120025021E24201200252B352B35FFFF0089000002D508010236002C00000117 -0256FF2401750016400E01501101015011010011100409252B5D35005D35FFFF00960000 -01CF068C023600D500000117024AFE8D0000000AB6010009080203252B35FFFF0089FE82 -02D505D10236002C00000117024BFF240000000AB601000E0F0409252B35FFFF00AFFE82 -018305DB0236004C00000117024BFE8E0000000AB602000A0B0203252B35FFFF0073FE82 -05DA05F00236003200000117024B009B0000000AB6020026270F03252B35FFFF006AFE82 -0471047C0236005200000116024BE200000AB602001A1B0600252B35FFFF0073FFE105DA -080102360032000001170256009601750022400B0250340102503470340234B8FFC04009 -090B370034240F03252B2B5D35005D35FFFF006AFFE10471068C0236005200000116024A -E200000F400A02701D01001D1C0600252B5D3500FFFF0073FFE105DA0801023600320000 -0117024E00960175001E401403025028010302202850288028030028240F03252B5D3535 -005D3535FFFF006AFFE104F6068C0236005200000116024EE200001940130302001C201C -501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA08010236003200000117 -024F009601750016400D030250280103020028240F03252B3535005D3535FFFFFFE5FFE1 -0471068C0236005200000116024FE200000CB70302001C180600252B3535FFFF0073FFE1 -05DA08010236003200000117025C009600000015400F0302202850288028030028240F03 -252B5D353500FFFF006AFFE104A2075202360052000001160250E200001940130302001C -201C501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA0801023600320000 -01170257009600000015400F0302202850288028030028240F03252B5D353500FFFF006A -FFE1047107DE02360052000001160251E200001940130302001C201C501C801CB01C0500 -1C180600252B5D353500FFFF0073FE8205DA0801023600320000003700D6009601750117 -024B00960000001D4013025028012803002D2E0F0325020028240F03252B352B3500115D -3500FFFF006AFE820471068C023600520000003600D6E2000116024BE2000014400E0300 -212206002502001C180600252B352B35FFFF0073FFE1068B08010236024600000117008D -007801750014400D025036603602020036360F03252B35005D35FFFF006AFFE104C3068C -0236024700000116008DE200000AB602002B2B0600252B35FFFF0073FFE1068B08010236 -024600000117004300AA0175001A40120250366036020250367036020036360F03252B5D -35005D35FFFF006AFFE104C3068C02360247000001160043E2000011400C02502B602B02 -002B2B0600252B5D3500FFFF0073FFE1068B080102360246000001170256008F01750012 -400B02503A0102003A390F03252B35005D35FFFF006AFFE104C3068C0236024700000116 -024AE200000AB602002F2E0600252B35FFFF0073FFE1068B07C8023602460000011700D7 -008B01750012400B02504201020042350F03252B35005D35FFFF006AFFE104C306530236 -02470000011600D7C400001540100210372037403750370400372A0600252B5D3500FFFF -0073FE82068B05F00236024600000117024B009A0000000AB6020037380F03252B35FFFF -006AFE8204C305840236024700000116024BE200000AB602002C2D0600252B35FFFF00B2 -FE82052905D10236003800000116024B6200000AB6010020210C00252B35FFFF00B1FE82 -0457045D0236005800000116024BFD00000AB60100191A0916252B35FFFF00B2FFE10529 -080102360038000001170256006201750012400B01502301010023220C00252B35005D35 -FFFF00B1FFE10457068C0236005800000116024AFD00000AB601001C1B0916252B35FFFF -00B2FFE1067508010236024800000117008D007C01750014400D01502E602E0201002E2D -0C00252B35005D35FFFF00B1FFE105A5068C0236024900000116008DEE00001840100160 -28010130284028020028290900252B5D35005D35FFFF00B2FFE106750801023602480000 -0117004300AA0175001C401401502D602D0201402D602D802D03002D2D0C00252B5D3500 -5D35FFFF00B1FFE105A5068C023602490000011600430200001840100160270101502760 -27020027270800252B5D35005D35FFFF00B2FFE106750801023602480000011702560062 -01750012400B01503101010031300C00252B35005D35FFFF00B1FFE105A5068C02360249 -00000116024AFD00000AB601002B2A0800252B35FFFF00B2FFE1067507BE023602480000 -011700D70062016B000AB60100392C0C00252B35FFFF00B1FFE105A50653023602490000 -011600D7FD00000AB6010033260800252B35FFFF00B2FE82067506F80236024800000116 -024B6200000AB601002E2F0D00252B35FFFF00B1FE8205A505840236024900000116024B -FD00000AB6010028290800252B35FFFF0006000004E608010236003C000001170043FFE4 -0175001B400A01500A600A0201500A01B8FFD3B40A0A0401252B5D35005D3500FFFF003D -FE64047F068C0236005C000001160043DD000013B5016009700902B8FFDDB40909040025 -2B5D3500FFFF0006FE8204E605D10236003C00000116024BEC00000AB601000A09040125 -2B35FFFF003DFE64047F045D0236005C00000117024B010400000012400D010A0F0A2F0A -4F0A6F0A7F0A055D1135FFFF0006000004E608010236003C000001170256FFEC01750018 -401001500E0101C00ED00E02000E0D0302252B5D35005D35FFFF003DFE64047F068C0236 -005C00000116024AC900000F400A01500D01000D0C0400252B5D3500FFFF0006000004E6 -07C80236003C0000011700D7FFEC01750012400B01501601010016090500252B35005D35 -FFFF003DFE64047F06530236005C0000011600D7DD00000AB6010015080400252B350003 -006CFEBD04FB0614001B0028002C007E40523B05380C3C2232243E284B054A0C4E224524 -4F285908690870120D2AB52B0114511A17171018011304072041100403082642070A2C2B -2C2B010A1600881617131C041A1A01922E1F2E3F2E02231B010A852D10F632ED5D10F632 -ED32323232ED2F111239392F2F003FED3F3FED1239393F12392F3CFD3C2FED31305D0123 -1123350E01232202113436373E0133321617352135213533153301112E01232206151416 -3332361321352104FBB8BC4DAD6EC6ED524444B66059864CFE95016BBCB8FE8C4F73499C -B2879750A4EAFCB4034C04F4FB0C754252012E01118EDB4D4C4F2427CE869A9AFB990279 -2218D6CCC3CD47FDE286FFFF00ED051D042C0653001600D700000002008A009104900498 -0023002F004D40332D290B0802231D1A141108172F0501052729050F1701170F311F3102 -24290B0802231D1A1411080E202001202A29200F0E010E2F5D33ED2F5D121739ED5D002F -5D33ED2F5D121739ED31300107270E01232226270727372E01353436372737173E013332 -16173717071E011514060727342623220615141633323604906EEC2C4A342E5724EC6DE9 -1718161AEA6FEB24572D2C5825EA71EB1818191765694B496B694B496B01016EEA1A1619 -17EC71EA25592B34492BED6EEB17191817EA6DED2653302D5824A949706E4B4A6F6D0000 -0002000000000000FF4C00780000000000000000000000000000000000000000037D0000 -01020103010401050106010701080109010A010B010C010D010E010F0110011101120113 -011401150116011701180119011A011B011C011D011E011F012001210122012301240125 -0126012701280129012A012B012C012D012E012F01300131013201330134013501360137 -01380139013A013B013C013D013E013F0140014101420143014401450146014701480149 -014A014B014C014D014E014F0150015101520153015401550156015701580159015A015B -015C015D015E015F0160016101620163016401650166016701680169016A016B016C016D -016E016F0170017101720173017401750176017701780179017A017B017C017D017E017F -0180018101820183018401850186018701880189018A018B018C018D018E018F01900191 -01920193019401950196019701980199019A019B019C019D019E019F01A001A101A201A3 -01A401A501A601A701A801A901AA01AB01AC01AD01AE01AF01B001B101B201B301B401B5 -01B601B701B801B901BA01BB01BC01BD01BE01BF01C001C101C201C301C401C501C601C7 -01C801C901CA01CB01CC01CD01CE01CF01D001D101D201D301D401D501D601D701D801D9 -01DA01DB01DC01DD01DE01DF01E001E101E201E301E401E501E601E701E801E901EA01EB -01EC01ED01EE01EF01F001F101F201F301F401F501F601F701F801F901FA01FB01FC01FD -01FE01FF0200020102020203020402050206020702080209020A020B020C020D020E020F -0210021102120213021402150216021702180219021A021B021C021D021E021F02200221 -02220223022402250226022702280229022A022B022C022D022E022F0230023102320233 -023402350236023702380239023A023B023C023D023E023F024002410242024302440245 -0246024702480249024A024B024C024D024E024F02500251025202530254025502560257 -02580259025A025B025C025D025E025F0260026102620263026402650266026702680269 -026A026B026C026D026E026F0270027102720273027402750276027702780279027A027B -027C027D027E027F0280028102820283028402850286028702880289028A028B028C028D -028E028F0290029102920293029402950296029702980299029A029B029C029D029E029F -02A002A102A202A302A402A502A602A702A802A902AA02AB02AC02AD02AE02AF02B002B1 -02B202B302B402B502B602B702B802B902BA02BB02BC02BD02BE02BF02C002C102C202C3 -02C402C502C602C702C802C902CA02CB02CC02CD02CE02CF02D002D102D202D302D402D5 -02D602D702D802D902DA02DB02DC02DD02DE02DF02E002E102E202E302E402E502E602E7 -02E802E902EA02EB02EC02ED02EE02EF02F002F102F202F302F402F502F602F702F802F9 -02FA02FB02FC02FD02FE02FF0300030103020303030403050306030703080309030A030B -030C030D030E030F0310031103120313031403150316031703180319031A031B031C031D -031E031F0320032103220323032403250326032703280329032A032B032C032D032E032F -0330033103320333033403350336033703380339033A033B033C033D033E033F03400341 -03420343034403450346034703480349034A034B034C034D034E034F0350035103520353 -035403550356035703580359035A035B035C035D035E035F036003610362036303640365 -0366036703680369036A036B036C036D036E036F03700371037203730374037503760377 -03780379037A037B037C037D037E037F0380038103820383038403850386038703880389 -038A038B038C038D038E038F0390039103920393039403950396039703980399039A039B -039C039D039E039F03A003A103A203A303A403A503A603A703A803A903AA03AB03AC03AD -03AE03AF03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF -03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE03CF03D003D1 -03D203D303D403D503D603D703D803D903DA03DB03DC03DD03DE03DF03E003E103E203E3 -03E403E503E603E703E803E903EA03EB03EC03ED03EE03EF03F003F103F203F303F403F5 -03F603F703F803F903FA03FB03FC03FD03FE03FF04000401040204030404040504060407 -04080409040A040B040C040D040E040F0410041104120413041404150416041704180419 -041A041B041C041D041E041F0420042104220423042404250426042704280429042A042B -042C042D042E042F0430043104320433043404350436043704380439043A043B043C043D -043E043F0440044104420443044404450446044704480449044A044B044C044D044E044F -0450045104520453045404550456045704580459045A045B045C045D045E045F04600461 -04620463046404650466046704680469046A046B046C046D046E046F0470047104720473 -047404750476047704780479047A047B047C047D052E6E756C6C106E6F6E6D61726B696E -6772657475726E057370616365066578636C616D0871756F746564626C0A6E756D626572 -7369676E06646F6C6C61720770657263656E7409616D70657273616E640B71756F746573 -696E676C6509706172656E6C6566740A706172656E726967687408617374657269736B04 -706C757305636F6D6D610668797068656E06706572696F6405736C617368047A65726F03 -6F6E650374776F05746872656504666F757204666976650373697805736576656E056569 -676874046E696E6505636F6C6F6E0973656D69636F6C6F6E046C65737305657175616C07 -67726561746572087175657374696F6E0261740141014201430144014501460147014801 -49014A014B014C014D014E014F0150015101520153015401550156015701580159015A0B -627261636B65746C656674096261636B736C6173680C627261636B657472696768740B61 -7363696963697263756D0A756E64657273636F7265056772617665016101620163016401 -650166016701680169016A016B016C016D016E016F017001710172017301740175017601 -7701780179017A0962726163656C656674036261720A627261636572696768740A617363 -696974696C646509416469657265736973054172696E670843636564696C6C6106456163 -757465064E74696C6465094F646965726573697309556469657265736973066161637574 -65066167726176650B6163697263756D666C657809616469657265736973066174696C64 -65056172696E670863636564696C6C6106656163757465066567726176650B6563697263 -756D666C65780965646965726573697306696163757465066967726176650B6963697263 -756D666C657809696469657265736973066E74696C6465066F6163757465066F67726176 -650B6F63697263756D666C6578096F6469657265736973066F74696C6465067561637574 -65067567726176650B7563697263756D666C657809756469657265736973066461676765 -72066465677265650463656E7408737465726C696E670773656374696F6E0662756C6C65 -74097061726167726170680A6765726D616E64626C730A7265676973746572656409636F -707972696768740974726164656D61726B056163757465086469657265736973086E6F74 -657175616C024145064F736C61736808696E66696E69747909706C75736D696E7573096C -657373657175616C0C67726561746572657175616C0379656E036D75310B706172746961 -6C646966660973756D6D6174696F6E0770726F647563740370693108696E74656772616C -0B6F726466656D696E696E650C6F72646D617363756C696E65034F686D026165066F736C -6173680C7175657374696F6E646F776E0A6578636C616D646F776E0A6C6F676963616C6E -6F74077261646963616C06666C6F72696E0B617070726F78657175616C09696E6372656D -656E740D6775696C6C656D6F746C6566740E6775696C6C656D6F74726967687408656C6C -697073697306416772617665064174696C6465064F74696C6465024F45026F6506656E64 -61736806656D646173680C71756F746564626C6C6566740D71756F746564626C72696768 -740971756F74656C6566740A71756F7465726967687406646976696465076C6F7A656E67 -650979646965726573697309596469657265736973086672616374696F6E044575726F0D -6775696C73696E676C6C6566740E6775696C73696E676C726967687402666902666C0964 -616767657264626C0E706572696F6463656E74657265640E71756F746573696E676C6261 -73650C71756F746564626C626173650B70657274686F7573616E640B4163697263756D66 -6C65780B4563697263756D666C6578064161637574650945646965726573697306456772 -617665064961637574650B4963697263756D666C65780949646965726573697306496772 -617665064F61637574650B4F63697263756D666C6578064F677261766506556163757465 -0B5563697263756D666C65780655677261766508646F746C657373690A63697263756D66 -6C65780574696C6465066D6163726F6E05627265766509646F74616363656E740472696E -6707636564696C6C610C68756E676172756D6C617574066F676F6E656B056361726F6E06 -4C736C617368066C736C61736806536361726F6E06736361726F6E065A6361726F6E067A -6361726F6E0962726F6B656E626172034574680365746806596163757465067961637574 -650554686F726E0574686F726E056D696E7573086D756C7469706C790B6F6E6573757065 -72696F720B74776F7375706572696F720D74687265657375706572696F72076F6E656861 -6C660A6F6E65717561727465720D74687265657175617274657273056672616E63064762 -72657665066762726576650449646F740853636564696C6C610873636564696C6C610643 -61637574650663616375746506436361726F6E06636361726F6E07646D6163726F6E096F -76657273636F7265066D6964646F74064162726576650661627265766507416F676F6E65 -6B07616F676F6E656B06446361726F6E06646361726F6E0644736C61736807456F676F6E -656B07656F676F6E656B06456361726F6E06656361726F6E064C6163757465066C616375 -7465064C6361726F6E066C6361726F6E044C646F74046C646F74064E6163757465066E61 -63757465064E6361726F6E066E6361726F6E094F64626C6163757465096F64626C616375 -7465065261637574650672616375746506526361726F6E06726361726F6E065361637574 -65067361637574650854636564696C6C610874636564696C6C6106546361726F6E067463 -61726F6E055572696E67057572696E67095564626C6163757465097564626C6163757465 -065A6163757465067A6163757465045A646F74047A646F740547616D6D61055468657461 -0350686905616C7068610564656C746107657073696C6F6E057369676D61037461750370 -68690D756E64657273636F726564626C096578636C616D64626C096E7375706572696F72 -0670657365746102494A02696A0B6E61706F7374726F706865066D696E75746506736563 -6F6E64096166696936313234380961666969363132383906483232303733064831383534 -3306483138353531064831383533330A6F70656E62756C6C657407416D6163726F6E0761 -6D6163726F6E0B4363697263756D666C65780B6363697263756D666C65780443646F7404 -63646F7407456D6163726F6E07656D6163726F6E06456272657665066562726576650445 -646F740465646F740B4763697263756D666C65780B6763697263756D666C65780447646F -740467646F740847636564696C6C610867636564696C6C610B4863697263756D666C6578 -0B6863697263756D666C657804486261720468626172064974696C6465066974696C6465 -07496D6163726F6E07696D6163726F6E064962726576650669627265766507496F676F6E -656B07696F676F6E656B0B4A63697263756D666C65780B6A63697263756D666C6578084B -636564696C6C61086B636564696C6C610C6B677265656E6C616E646963084C636564696C -6C61086C636564696C6C61084E636564696C6C61086E636564696C6C6103456E6703656E -67074F6D6163726F6E076F6D6163726F6E064F6272657665066F62726576650852636564 -696C6C610872636564696C6C610B5363697263756D666C65780B7363697263756D666C65 -7804546261720474626172065574696C6465067574696C646507556D6163726F6E07756D -6163726F6E065562726576650675627265766507556F676F6E656B07756F676F6E656B0B -5763697263756D666C65780B7763697263756D666C65780B5963697263756D666C65780B -7963697263756D666C6578056C6F6E67730A4172696E6761637574650A6172696E676163 -757465074145616375746507616561637574650B4F736C61736861637574650B6F736C61 -7368616375746509616E6F74656C65696106576772617665067767726176650657616375 -746506776163757465095764696572657369730977646965726573697306596772617665 -067967726176650D71756F74657265766572736564097261646963616C65780961666969 -303839343109657374696D61746564096F6E656569676874680C74687265656569676874 -68730B66697665656967687468730C736576656E656967687468730B636F6D6D61616363 -656E7410756E646572636F6D6D61616363656E7405746F6E6F730D646965726573697374 -6F6E6F730A416C706861746F6E6F730C457073696C6F6E746F6E6F7308457461746F6E6F -7309496F7461746F6E6F730C4F6D6963726F6E746F6E6F730C557073696C6F6E746F6E6F -730A4F6D656761746F6E6F7311696F74616469657265736973746F6E6F7305416C706861 -04426574610544656C746107457073696C6F6E045A6574610345746104496F7461054B61 -707061064C616D626461024D75024E75025869074F6D6963726F6E0250690352686F0553 -69676D610354617507557073696C6F6E0343686903507369054F6D6567610C496F746164 -696572657369730F557073696C6F6E64696572657369730A616C706861746F6E6F730C65 -7073696C6F6E746F6E6F7308657461746F6E6F7309696F7461746F6E6F7314757073696C -6F6E6469657265736973746F6E6F7304626574610567616D6D61047A6574610365746105 -746865746104696F7461056B61707061066C616D626461026D75026E75027869076F6D69 -63726F6E0372686F067369676D613107757073696C6F6E0363686903707369056F6D6567 -610C696F746164696572657369730F757073696C6F6E64696572657369730C6F6D696372 -6F6E746F6E6F730C757073696C6F6E746F6E6F730A6F6D656761746F6E6F730961666969 -313030323309616669693130303531096166696931303035320961666969313030353309 -616669693130303534096166696931303035350961666969313030353609616669693130 -303537096166696931303035380961666969313030353909616669693130303630096166 -696931303036310961666969313030363209616669693130313435096166696931303031 -370961666969313030313809616669693130303139096166696931303032300961666969 -313030323109616669693130303232096166696931303032340961666969313030323509 -616669693130303236096166696931303032370961666969313030323809616669693130 -303239096166696931303033300961666969313030333109616669693130303332096166 -696931303033330961666969313030333409616669693130303335096166696931303033 -360961666969313030333709616669693130303338096166696931303033390961666969 -313030343009616669693130303431096166696931303034320961666969313030343309 -616669693130303434096166696931303034350961666969313030343609616669693130 -303437096166696931303034380961666969313030343909616669693130303635096166 -696931303036360961666969313030363709616669693130303638096166696931303036 -390961666969313030373009616669693130303732096166696931303037330961666969 -313030373409616669693130303735096166696931303037360961666969313030373709 -616669693130303738096166696931303037390961666969313030383009616669693130 -303831096166696931303038320961666969313030383309616669693130303834096166 -696931303038350961666969313030383609616669693130303837096166696931303038 -380961666969313030383909616669693130303930096166696931303039310961666969 -313030393209616669693130303933096166696931303039340961666969313030393509 -616669693130303936096166696931303039370961666969313030373109616669693130 -303939096166696931303130300961666969313031303109616669693130313032096166 -696931303130330961666969313031303409616669693130313035096166696931303130 -360961666969313031303709616669693130313038096166696931303130390961666969 -313031313009616669693130313933096166696931303035300961666969313030393809 -616669693030323038096166696936313335320270690C6F6E656E756D657261746F720C -74776F6E756D657261746F720E74687265656E756D657261746F720D666F75726E756D65 -7261746F720D666976656E756D657261746F720E736576656E6E756D657261746F720E65 -696768746E756D657261746F7210446F6E74436F6D707265737348544D5808676C797068 -35373908676C79706835383008676C797068353831054F686F726E056F686F726E055568 -6F726E0575686F726E0D686F6F6B61626F7665636F6D620C646F7462656C6F77636F6D62 -096772617665636F6D62096163757465636F6D6208676C79706835393008676C79706835 -393108676C79706835393208676C79706835393308676C79706835393408676C79706835 -393508676C79706835393608676C79706835393708676C79706835393808676C79706835 -393908676C79706836303008676C79706836303108676C79706836303208676C79706836 -303308676C7970683630340941646F7462656C6F770961646F7462656C6F770A41686F6F -6B61626F76650A61686F6F6B61626F7665104163697263756D666C657861637574651061 -63697263756D666C65786163757465104163697263756D666C6578677261766510616369 -7263756D666C65786772617665144163697263756D666C6578686F6F6B61626F76651461 -63697263756D666C6578686F6F6B61626F7665104163697263756D666C657874696C6465 -106163697263756D666C657874696C6465134163697263756D666C6578646F7462656C6F -77136163697263756D666C6578646F7462656C6F770B41627265766561637574650B6162 -7265766561637574650B41627265766567726176650B61627265766567726176650F4162 -72657665686F6F6B61626F76650F616272657665686F6F6B61626F76650B416272657665 -74696C64650B61627265766574696C64650E416272657665646F7462656C6F770E616272 -657665646F7462656C6F770945646F7462656C6F770965646F7462656C6F770A45686F6F -6B61626F76650A65686F6F6B61626F7665064574696C6465066574696C64651045636972 -63756D666C65786163757465106563697263756D666C6578616375746510456369726375 -6D666C65786772617665106563697263756D666C65786772617665144563697263756D66 -6C6578686F6F6B61626F7665146563697263756D666C6578686F6F6B61626F7665104563 -697263756D666C657874696C6465106563697263756D666C657874696C64651345636972 -63756D666C6578646F7462656C6F77136563697263756D666C6578646F7462656C6F770A -49686F6F6B61626F76650A69686F6F6B61626F76650949646F7462656C6F770969646F74 -62656C6F7708676C79706836343908676C79706836353008676C79706836353108676C79 -70683635320573686576610A68617461667365676F6C0A686174616670617461680B6861 -74616671616D617473056869726971057473657265057365676F6C057061746168067161 -6D61747305686F6C616D0671756275747306646167657368056D65746567056D61716166 -0472616665057061736571077368696E646F740673696E646F7408736F66706173757104 -616C6566036265740567696D656C0564616C657402686503766176057A6179696E036865 -740374657403796F640866696E616C6B6166036B6166056C616D65640866696E616C6D65 -6D036D656D0866696E616C6E756E036E756E0673616D656B68046179696E0766696E616C -70650270650A66696E616C747361646905747361646903716F660472657368047368696E -0374617609646F75626C6576617606766176796F6409646F75626C65796F640667657265 -73680967657273686179696D0D6E657773686571656C7369676E0A7661767368696E646F -740D66696E616C6B616673686576610E66696E616C6B616671616D6174730A6C616D6564 -686F6C616D106C616D6564686F6C616D64616765736807616C746179696E0B7368696E73 -68696E646F740A7368696E73696E646F74117368696E6461676573687368696E646F7410 -7368696E64616765736873696E646F7409616C656670617461680A616C656671616D6174 -7309616C65666D61706971096265746461676573680B67696D656C6461676573680B6461 -6C6574646167657368086865646167657368097661766461676573680B7A6179696E6461 -676573680974657464616765736809796F646461676573680E66696E616C6B6166646167 -657368096B61666461676573680B6C616D6564646167657368096D656D64616765736809 -6E756E6461676573680C73616D656B686461676573680D66696E616C7065646167657368 -0870656461676573680B747361646964616765736809716F666461676573680A72657368 -6461676573680A7368696E64616765736808746176646167657308766176686F6C616D07 -62657472616665076B6166726166650670657261666509616C65666C616D6564127A6572 -6F77696474686E6F6E6A6F696E65720F7A65726F77696474686A6F696E65720F6C656674 -746F72696768746D61726B0F7269676874746F6C6566746D61726B096166696935373338 -380961666969353734303309616669693537343037096166696935373430390961666969 -353734343009616669693537343531096166696935373435320961666969353734353309 -616669693537343534096166696935373435350961666969353734353609616669693537 -343537096166696935373435380961666969353733393209616669693537333933096166 -696935373339340961666969353733393509616669693537333936096166696935373339 -370961666969353733393809616669693537333939096166696935373430300961666969 -353734303109616669693537333831096166696935373436310961666969363331363709 -616669693537343539096166696935373534330961666969353735333409616669693537 -343934096166696936323834330961666969363238343409616669693632383435096166 -696936343234300961666969363432343109616669693633393534096166696935373338 -320961666969363432343209616669693632383831096166696935373530340961666969 -353733363909616669693537333730096166696935373337310961666969353733373209 -616669693537333733096166696935373337340961666969353733373509616669693537 -333931096166696935373437310961666969353734363009616669693532323538096166 -696935373530360961666969363239353809616669693632393536096166696935323935 -370961666969353735303509616669693632383839096166696936323838370961666969 -363238383809616669693537353037096166696936323936310961666969363239353909 -616669693632393630096166696935373530380961666969363239363209616669693537 -353637096166696936323936340961666969353233303509616669693532333036096166 -696935373530390961666969363239363709616669693632393635096166696936323936 -360961666969353735353509616669693532333634096166696936333735330961666969 -363337353409616669693633373539096166696936333736330961666969363337393509 -616669693632383931096166696936333830380961666969363239333809616669693633 -383130096166696936323934320961666969363239343709616669693633383133096166 -696936333832330961666969363338323409616669693633383333096166696936333834 -340961666969363238383209616669693632383833096166696936323838340961666969 -363238383509616669693632383836094F646F7462656C6F77096F646F7462656C6F770A -4F686F6F6B61626F76650A6F686F6F6B61626F7665104F63697263756D666C6578616375 -7465106F63697263756D666C65786163757465104F63697263756D666C65786772617665 -106F63697263756D666C65786772617665144F63697263756D666C6578686F6F6B61626F -7665146F63697263756D666C6578686F6F6B61626F7665104F63697263756D666C657874 -696C6465106F63697263756D666C657874696C6465134F63697263756D666C6578646F74 -62656C6F77136F63697263756D666C6578646F7462656C6F770A4F686F726E6163757465 -0A6F686F726E61637574650A4F686F726E67726176650A6F686F726E67726176650E4F68 -6F726E686F6F6B61626F76650E6F686F726E686F6F6B61626F76650A4F686F726E74696C -64650A6F686F726E74696C64650D4F686F726E646F7462656C6F770D6F686F726E646F74 -62656C6F770955646F7462656C6F770975646F7462656C6F770A55686F6F6B61626F7665> -<0A75686F6F6B61626F76650A55686F726E61637574650A75686F726E61637574650A5568 -6F726E67726176650A75686F726E67726176650E55686F726E686F6F6B61626F76650E75 -686F726E686F6F6B61626F76650A55686F726E74696C64650A75686F726E74696C64650D -55686F726E646F7462656C6F770D75686F726E646F7462656C6F7708676C797068383832 -08676C7970683838330959646F7462656C6F770979646F7462656C6F770A59686F6F6B61 -626F76650A79686F6F6B61626F7665065974696C6465067974696C646504646F6E670974 -696C6465636F6D620863757272656E63790000000000000100000C92000102160C000009 -0084000400B4FF9C000400B6FF9C000A0024FF9C000A0090FF9C000F00B4FF2E000F00B6 -FF2E00100024FFCE0010002CFFE20010002DFF9C00100036FFEC00100037FF6A00100039 -FFCE0010003AFFCE0010003BFFB00010003CFF740010003DFFE200100044FFEC00100059 -FFD80010005AFFEC0010005BFFCE0010005CFFD80010005DFFD800100090FFCE001000A0 -FFEC0011000FFF7E00110010FF60001100B1FF88001100B2FF88001100B4FF2E001100B6 -FF2E001D00B2FF7400240010FFCE00240036FFF600240037FF8800240038FFF600240039 -FFC40024003AFFCE0024003CFFB000240057FFEC00240058FFF600240059FFCE0024005A -FFE20024005CFFCE002400B1FFCE002400B2FFCE002400B3FFCE002400B4FF88002400B5 -FFCE002400B6FF880025000FFFEC00250010000A00250011FFEC00250037FFC4002500AB -FFEC002500B1000A002500B2000A00260010FFCE002600AFFFE7002600B1FFCE002600B2 -FFCE0027000FFFCE00270011FFCE00270037FFCE0027003AFFEC0027003BFFF60027003C -FFEC0027003DFFEC002700ABFFCE0029000FFED400290011FED40029001DFFC40029001E -FFC400290022003C00290024FF9C00290037001E00290044FF9C00290048FFCE00290052 -FFCE00290090FF92002900A0FF9C002900A1FFCE002900ABFED4002900B0FFCE002C0010 -FFE2002C00B1FFE2002C00B2FFE2002D000FFFEC002D0011FFEC002D0024FFF6002D0090 -FFF6002D00ABFFEC002E0010FF92002E0032FFEC002E0044FFC4002E0048FFBA002E0052 -FFBA002E0058FFCE002E0059FFB0002E005AFFBA002E005CFFB0002E0091FFEC002E00A0 -FFC4002E00A1FFBA002E00AFFFEC002E00B0FFBA002E00B1FF92002E00B2FF92002F000A -FF88002F0010FF60002F0026FFEC002F002AFFEC002F002D0064002F0032FFEC002F0037 -FF56002F0039FF92002F003AFF9C002F003CFF60002F0059FF92002F005CFF92002F0064 -FFEC002F0091FFEC002F00AFFFEC002F00B1FF60002F00B2FF60002F00B4FF60002F00B6 -FF600032000FFFE200320011FFE200320037FFCE0032003BFFF60032003CFFEC0032003D -FFEC003200ABFFE20033000FFED400330011FED400330024FFCE0033003C001400330044 -FFCE00330048FFCE00330052FFCE00330090FFBA003300A0FFCE003300A1FFCE003300AB -FED4003300B0FFCE0034000FFFE200340011FFE2003400ABFFE200350010FF9C00350037 -FFC40035003CFFEC00350044FFD800350048FFCE00350052FFCE00350058FFEC0035005C -FFC9003500A0FFCE003500A1FFCE003500B0FFC4003500B1FF9C003500B2FF9C003500B4 -FFBA003500B6FFBA0036000FFFEC00360011FFEC00360024FFEC00360036FFEA00360059 -FFE20036005AFFEC0036005CFFE200360090FFEC003600ABFFEC0037000FFEDE00370010 -FF6A00370011FEDE0037001DFF380037001EFF3800370022003C00370024FF8800370026 -FFD80037002AFFD800370032FFCE00370036FFF400370037FFBA00370044FF1000370046 -FF2400370048FF240037004AFF2E00370052FF2400370055FF3800370056FF4C00370058 -FF3800370059FF380037005AFF380037005CFF380037005DFF5600370064FFD800370090 -FF7E00370091FFCE003700A0FF10003700A1FF24003700ABFEDE003700AFFFCE003700B0 -FF24003700B1FF6A003700B2FF6A0038000FFFEC00380011FFEC00380024FFF600380090 -FFEC003800ABFFEC0039000FFEDE00390010FFCE00390011FEDE0039001DFFB00039001E -FFB000390024FFC400390044FF9C00390048FF9C00390052FF9C00390058FFC40039005C -FFBF00390090FFBA003900A0FF9C003900A1FF9C003900ABFEDE003900B0FF9C003900B1 -FFCE003900B2FFCE003A000FFEDE003A0010FFCE003A0011FF24003A001DFFB0003A001E -FFB0003A0024FFCE003A0044FF9C003A0048FF9C003A0052FF9C003A0055FFC4003A0058 -FFC4003A005CFFBF003A0090FFC4003A00A0FF9C003A00A1FF9C003A00ABFF24003A00B0 -FF9C003A00B1FFCE003A00B2FFCE003B0010FFB0003B0026FFF6003B002AFFF6003B0032 -FFF6003B0044FFCE003B0048FFC4003B0052FFC4003B0058FFE2003B005CFFB0003B0064 -FFF6003B0091FFF6003B00A0FFCE003B00A1FFC4003B00AFFFF6003B00B0FFC4003B00B1 -FFB0003B00B2FFB0003C000FFEDE003C0010FF74003C0011FEDE003C001DFF38003C001E -FF38003C0024FFB0003C0032FFEC003C0044FF74003C0047FF88003C0048FF7E003C004A -FF7E003C0050FF9C003C0051FF9C003C0052FF7E003C0053FF9C003C0054FF7E003C0055 -FF9C003C0056FF92003C0058FF92003C0059FF9C003C0090FFB0003C0091FFEC003C00A0 -FF74003C00A1FF7E003C00ABFEDE003C00AFFFEC003C00B0FF7E003C00B1FF74003C00B2 -FF74003D0010FFC4003D0026FFEC003D002AFFEC003D0032FFEC003D003DFFF6003D0044 -FFCE003D0048FFC4003D0052FFC4003D005AFFD8003D005CFFBF003D0064FFEC003D0091 -FFEC003D00A0FFCE003D00A1FFC4003D00AFFFEC003D00B0FFC4003D00B1FFCE003D00B2 -FFCE00440059FFF00044005AFFF60044005CFFF00045000FFFE200450011FFEC0045005C -FFFB004500ABFFEC00460010FFEC00460037FFC4004600B1FFEC004600B2FFEC00480037 -FF7400490005003C0049000A003C0049000C00640049000D00320049000FFF7E00490010 -FFCE00490011FF8800490022006E0049003F00640049004000640049005CFFF600490060 -0064004900ABFF88004900B1FFCE004900B2FFCE004900B40032004900B60032004B0059 -FFEC004B005AFFF6004B005CFFEC004E0010FF9C004E0048FFEC004E0052FFEC004E00A1 -FFEC004E00B0FFEC004E00B1FF9C004E00B2FF9C00500059FFEC0050005AFFF60050005C -FFEC00510059FFEC0051005AFFF60051005CFFEC0052000FFFE200520011FFEC00520059 -FFF10052005BFFEC0052005CFFF1005200ABFFEC0053000FFFE200530011FFEC0053005C -FFFB005300ABFFEC0055000FFEDE00550010FFEC00550011FEDE00550044FFDC005500A0 -FFD8005500ABFEDE005500B1FFEC005500B2FFEC005500B4001E005500B6001E00570010 -FFD80057005CFFF6005700B1FFD8005700B2FFD8005700B40014005700B600140059000F -FF4C00590010FFD800590011FF4C00590044FFD800590048FFEE00590052FFEE005900A0 -FFD8005900A1FFEE005900ABFF4C005900B0FFF1005900B1FFD8005900B2FFD8005A000F -FFBA005A0010FFEC005A0011FFBA005A0044FFEC005A00A0FFEC005A00ABFFBA005A00B1 -FFEC005A00B2FFEC005B0010FFCE005B0046FFEC005B0047FFF6005B0048FFE8005B004A -FFF6005B0052FFE8005B006FFFEC005B00A1FFE8005B00B0FFEC005B00B1FFCE005B00B2 -FFCE005C000FFF42005C0010FFD8005C0011FF42005C0044FFD8005C0046FFEE005C0047 -FFF6005C0048FFEE005C004AFFF6005C0052FFEE005C0054FFF6005C006FFFEE005C00A0 -FFD8005C00A1FFEE005C00ABFF4C005C00B0FFF1005C00B1FFD8005C00B2FFD8005D0010 -FFEC005D0046FFF6005D0047FFF6005D0048FFF4005D004AFFF6005D0052FFF4005D0054 -FFF6005D006FFFF6005D00A1FFF4005D00B1FFEC005D00B2FFEC00640010FFCE006400AF -FFE7006400B1FFCE006400B2FFCE006F0010FFEC006F00B1FFEC006F00B2FFEC0091000F -FFE200910011FFE200910037FFCE0091003BFFF60091003CFFEC0091003DFFEC009100AB -FFE200A1000FFFE200A10011FFEC00A10059FFF100A1005BFFEC00A1005CFFF100A100AB -FFEC00AB00B4FF2E00AB00B6FF2E00B10024FFCE00B1002CFFE200B1002DFF9C00B10036 -FFEC00B10037FF6A00B10039FFCE00B1003AFFCE00B1003BFFB000B1003CFF7400B1003D -FFF600B10044FFEC00B10059FFD800B1005AFFEC00B1005BFFCE00B1005CFFD800B1005D -FFD800B10090FFCE00B100A0FFEC00B20024FFCE00B2002CFFE200B2002DFF9C00B20036 -FFEC00B20037FF6A00B20039FFCE00B2003AFFCE00B2003BFFB000B2003CFF7400B2003D -FFF600B20044FFEC00B20059FFD800B2005AFFEC00B2005BFFCE00B2005CFFD800B2005D -FFD800B20090FFCE00B200A0FFEC00B30024FF9C00B30090FF9C00B4000FFF2E00B40011 -FF2E00B40024FF9C00B40037006E00B40039006400B4003A003C00B4003C006E00B40056 -FFBA00B40057002800B40090FF9C00B400ABFF2E00B50024FF9C00B50090FF9C00B6000F -FF2E00B60011FF2E00B60024FF9C00B60037006E00B60039006400B6003A003C00B6003C -006E00B60056FFBA00B60057002800B60090FF9C00B600ABFF2E00C30037FF2E00C30039 -FF2E00C3003AFF9C00C3003CFF2E00C40037FF2E00C40039FF2E00C4003AFF9C00C4003C -FF2E0000000000010001000100000001000013FF0000001400000000000013F7308213F3 -06092A864886F70D010702A08213E4308213E0020101310E300C06082A864886F70D0205 -05003060060A2B060104018237020104A0523050302C060A2B06010401823702011CA21E -801C003C003C003C004F00620073006F006C006500740065003E003E003E3020300C0608 -2A864886F70D020505000410503EEC935CE1D8D33511E69A791E4594A0820F3F308202C0 -3082022902141389B4D18AE8A7C4BD35C79B8D88CA1FCA535691300D06092A864886F70D -010104050030819E311F301D060355040A1316566572695369676E205472757374204E65 -74776F726B31173015060355040B130E566572695369676E2C20496E632E312C302A0603 -55040B1323566572695369676E2054696D65205374616D70696E67205365727669636520 -526F6F7431343032060355040B132B4E4F204C494142494C495459204143434550544544 -2C20286329393720566572695369676E2C20496E632E301E170D39373035313230373030 -30305A170D3939313233313037303030305A30819E311F301D060355040A131656657269 -5369676E205472757374204E6574776F726B31173015060355040B130E56657269536967 -6E2C20496E632E312C302A060355040B1323566572695369676E2054696D65205374616D -70696E67205365727669636520526F6F7431343032060355040B132B4E4F204C49414249 -4C4954592041434345505445442C20286329393720566572695369676E2C20496E632E30 -819F300D06092A864886F70D010101050003818D0030818902818100D32E20F0687C2C2D -2E811CB106B2A70BB7110D57DA53D875E3C9332AB2D4F6095B34F3E990FE090CD0DB1B5A -B9CDE7F688B19DC08725EB7D5810736A78CB7115FDC658F629AB585E9604FD2D62115881 -1CCA7194D522582FD5CC14058436BA94AAB44D4AE9EE3B22AD56997E219C6C86C04A4797 -6AB4A636D5FC092DD3B4399B0203010001300D06092A864886F70D010104050003818100 -3A119C85053ED2E980FB7BD5A9F4AC79FC05FC953D7123A92B28DF8C136589FE2C87018F -5A9A62CA11A780F4B7BE14B7D156996B086245C6A2A5DA357F0522DE722D048605A77C09 -16931443F0F7164DD6078E9B106C58FE0A3597CA899FDF04709C2A7D618EC1E80B719AA8 -C76662423D959422329822898AFA640824F5D2FA308202CD30820236021500BD119ADA43 -ED21FB46588489CA46889025EE1460300D06092A864886F70D010104050030819E311F30 -1D060355040A1316566572695369676E205472757374204E6574776F726B311730150603 -55040B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369 -676E2054696D65205374616D70696E67205365727669636520526F6F7431343032060355 -040B132B4E4F204C494142494C4954592041434345505445442C20286329393720566572 -695369676E2C20496E632E301E170D3937303531323037303030305A170D393931323331 -3037303030305A3081AC31273025060355040B131E566572695369676E2054696D652053 -74616D70696E672053657276696365311F301D060355040B1316566572695369676E2054 -72757374204E6574776F726B31343032060355040B132B4E4F204C494142494C49545920 -41434345505445442C20286329393720566572695369676E2C20496E632E311730150603 -55040A130E566572695369676E2C20496E632E3111300F06035504071308496E7465726E -657430819D300D06092A864886F70D010101050003818B0030818702818100AB61EDB4AD -8D904790DCB4115E69DC0A7F62900631CDCEFF889146D7493A94E9D4063F9DADA2785AEC -F9FC63454FB80B6E30EFA236AB2D09DFF16F27AB0D516005354F7FCE544FD0B72C42D80B -D08DB85EFFB680D0E396B47F224942106CD398B00156A3C3CF2E9F3AF47FA858A6D72265 -E58CAB789CBCD94742685B2D7DFDB5020103300D06092A864886F70D0101040500038181 -006D60FB995FA469B3D37B702B62231E442051AF2315C77402F949F2271A5CAC86713508 -2BF68FDEE0B596E88BA74BE373C848099DB0DA8BDA1592CA03E509255606E74EA447A5D1 -5746D43856F521CDC3263B2D2532CE9BE2BF4047EAD86D4776E5C030A30F80CE7FD83B7E -A0F9952A312B15FAC814EDDDB0E9554170462D2C7E308209A63082090FA0030201020210 -7966966E83B0D0B601126E9DC0B46571300D06092A864886F70D01010205003061311130 -0F06035504071308496E7465726E657431173015060355040A130E566572695369676E2C -20496E632E31333031060355040B132A566572695369676E20436F6D6D65726369616C20 -536F667477617265205075626C697368657273204341301E170D39383034313630303030 -30305A170D3939303431363233353935395A3082015D3111300F06035504071308496E74 -65726E657431173015060355040A130E566572695369676E2C20496E632E313330310603 -55040B132A566572695369676E20436F6D6D65726369616C20536F667477617265205075 -626C69736865727320434131463044060355040B133D7777772E766572697369676E2E63 -6F6D2F7265706F7369746F72792F43505320496E636F72702E206279205265662E2C4C49 -41422E4C54442863293936313E303C060355040B13354469676974616C20494420436C61 -73732033202D204D6963726F736F667420536F6674776172652056616C69646174696F6E -207632310B3009060355040613025553311330110603550408130A57617368696E67746F -6E3110300E060355040713075265646D6F6E64311E301C060355040314154D6963726F73 -6F667420436F72706F726174696F6E311E301C060355040B14154D6963726F736F667420 -436F72706F726174696F6E30820120300D06092A864886F70D01010105000382010D0030 -8201080282010100B490D226A864E6EB15C3FF6D7B414F0AF96F2A71CE2E1853A63236E0 -D468E135FD4912D896FC65CF531420BE04C97AF5C9706D94ECCCB3AF2A309A32587CB6A9 -6B256799C0E277EA05E5EFE396F7AD0B19A6AE3C8470E2F86F5C4F7D6F0F52458A15D765 -DC3B2005E33DA16C973A0E0B2513ED21CB208E397A628305C9231AFC529DAC9D4C96D73C -4E583D827BEE093556B568C04245A23B31A3FBD895FB55C72CA8A3C3294FCEF493F0031F -7BF1153AA9F8AA5083056D62F08B138838D9E31C0E73C10640BA28C3EBCD9271C7BE66B2 -A15422D60B677CF8877989AC660AAA51FAFD7221FC865DC6F44A0EEC5861234DD0B13A64 -E0139E5EC8856D4C16AF3D07020103A38205DD308205D930090603551D1304023000300B -0603551D0F0404030205A03081880603551D01048180307E80107B96E4D143FD6898F338 -CC6E3BF20B82A16330613111300F06035504071308496E7465726E657431173015060355 -040A130E566572695369676E2C20496E632E31333031060355040B132A56657269536967 -6E20436F6D6D65726369616C20536F667477617265205075626C69736865727320434182 -0502B400000130210603551D040101FF04173014300E300C060A2B060104018237020116 -0302078000300D0603551D0A040630040302064030820436060A2B06010401823702010A -0101FF048204233082041FA029802768747470733A2F2F7777772E766572697369676E2E -636F6D2F7265706F7369746F72792F435053A18203B8818203B454686973206365727469 -66696361746520696E636F72706F7261746573206279207265666572656E63652C20616E -642069747320757365206973207374726963746C790A7375626A65637420746F2C207468 -6520566572695369676E2043657274696669636174696F6E205072616374696365205374 -6174656D656E742028435053290A76657273696F6E20312E302C20617661696C61626C65 -20696E2074686520566572695369676E207265706F7369746F72792061743A0A68747470 -733A2F2F7777772E766572697369676E2E636F6D3B20627920452D6D61696C2061742043 -50532D726571756573747340766572697369676E2E636F6D3B206F720A6279206D61696C -20617420566572695369676E2C20496E632E2C203235393320436F617374204176652E2C -204D6F756E7461696E20566965772C2043412039343034330A55534120436F7079726967 -6874202863293139393620566572695369676E2C20496E632E2020416C6C205269676874 -732052657365727665642E204345525441494E0A57415252414E5449455320444953434C -41494D454420414E44204C494142494C495459204C494D495445442E0A0A5741524E494E -473A2054484520555345204F462054484953204345525449464943415445204953205354 -524943544C59205355424A45435420544F205448450A564552495349474E204345525449 -4649434154494F4E2050524143544943452053544154454D454E542E2020544845204953 -5355494E4720415554484F524954590A444953434C41494D53204345525441494E20494D -504C49454420414E4420455850524553532057415252414E544945532C20494E434C5544 -494E472057415252414E544945530A4F46204D45524348414E544142494C495459204F52 -204649544E45535320464F52204120504152544943554C415220505552504F53452C2041 -4E442057494C4C204E4F540A4245204C4941424C4520464F5220434F4E53455155454E54 -49414C2C2050554E49544956452C20414E44204345525441494E204F544845522044414D -414745532E205345450A5448452043505320464F522044455441494C532E0A0A436F6E74 -656E7473206F662074686520566572695369676E2072656769737465726564206E6F6E76 -657269666965645375626A656374417474726962757465730A657874656E73696F6E2076 -616C7565207368616C6C206E6F7420626520636F6E736964657265642061732061636375 -7261746520696E666F726D6174696F6E0A76616C69646174656420627920746865204941 -2E0AA336803468747470733A2F2F7777772E766572697369676E2E636F6D2F7265706F73 -69746F72792F766572697369676E6C6F676F2E6769663081AF0603551D200481A7308030 -80060B6086480186F845010701013080302806082B06010505070201161C68747470733A -2F2F7777772E766572697369676E2E636F6D2F435053306206082B060105050702023056 -3015160E566572695369676E2C20496E632E30030201011A3D566572695369676E277320 -43505320696E636F72702E206279207265666572656E6365206C6961622E206C74642E20 -286329393720566572695369676E0000000000003016060A2B06010401823702011B0408 -30060101FF0101FF300D06092A864886F70D010102050003818100954CA27955DA745C8B -25C2A620F06CB8B37B467B9E9F7ABA710648151265CC5D29F8513B8971B1F4143878DA8F -AE0B8036905D4897C500380A53BF4037FF8A13276D004734F7484C2E72F2C6D37EFD446F -228FD1929FE394EDE7FF00C9C2EE721CD99C036EB6C1637B3278443B9E858AFB84863728 -2EE7A638373EBAFCF382233182042430820420020101307530613111300F060355040713 -08496E7465726E657431173015060355040A130E566572695369676E2C20496E632E3133 -3031060355040B132A566572695369676E20436F6D6D65726369616C20536F6674776172 -65205075626C69736865727320434102107966966E83B0D0B601126E9DC0B46571300C06 -082A864886F70D02050500A081AE301906092A864886F70D010903310C060A2B06010401 -8237020104301C060A2B06010401823702010B310E300C060A2B06010401823702011630 -1F06092A864886F70D010904311204105BA6237427F8290EF09CCF5B63F749F83052060A -2B06010401823702010C31443042A01A801800560065007200640061006E006100200046 -006F006E0074A1248022687474703A2F2F7777772E6D6963726F736F66742E636F6D2F74 -727565747970652F300D06092A864886F70D0101010500048201003EFBA519B6A00C823F -B823EA3A1E5E6EBDBBF2C647D1F1093C66910B72FEA26B78E409E7750E62A559DAAC12F7 -CCA36B0725F8BB2E0409AEE1156BE3736F46D1B116DF2B18ABCF394DCF0EF8EE01A758E5 -E4872882FFDD5F04C39F3258358C3DE27BE8FC410AC11736DD19609E3BACBB2257C5E4A4 -836F811D07EC80DAB42FE9AC33537823FA2AC0D406166130C356085818B3CEC8A53763BF -88191B4E52ED790B57C924CEA670505AA2621C1121663215F15D1A9E89A6BC2AA35F5B1F -86E4FDEC2280203A57D736DD2C29A4D2D29F00BAF260927AB3B36EF1C4CC5100CAC54BAA -0AFB74D0101FBEC53815E46B3814DF7E5DFC4A121257608F59AA76D5F333A3A18201D030 -8201CC06092A864886F70D010906318201BD308201B90201013081B830819E311F301D06 -0355040A1316566572695369676E205472757374204E6574776F726B3117301506035504 -0B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369676E -2054696D65205374616D70696E67205365727669636520526F6F7431343032060355040B -132B4E4F204C494142494C4954592041434345505445442C202863293937205665726953 -69676E2C20496E632E021500BD119ADA43ED21FB46588489CA46889025EE1460300C0608 -2A864886F70D02050500A059301806092A864886F70D010903310B06092A864886F70D01 -0701301C06092A864886F70D010905310F170D3938313131323135313835305A301F0609 -2A864886F70D01090431120410641EED59DAFC3103655C9A2A4309D288300D06092A8648 -86F70D01010105000481809092A6C858A52E216E3E56A1C40477C3C63030D247298EF8EA -BFA1C4D5DDE8C375555276DDBB2761ADFC914D772AD331C04DDD675B9736F7D136CAA72D -41CF9F8377C51611E0D1B6EDD8C5AB73694109FD5312908B17319E96C22CCEDD65C9D342 -DC0E3B159C36E0FDA54B21C8DD968B90621C263E94F737AC1997B9D84E517C0000> -] def -/CharStrings 893 dict dup begin -/.notdef 0 def /.null 1 def /nonmarkingreturn 2 def /space 3 def /exclam 4 def -/quotedbl 5 def /numbersign 6 def /dollar 7 def /percent 8 def -/ampersand 9 def /quotesingle 10 def /parenleft 11 def /parenright 12 def -/asterisk 13 def /plus 14 def /comma 15 def /hyphen 16 def -/period 17 def /slash 18 def /zero 19 def /one 20 def -/two 21 def /three 22 def /four 23 def /five 24 def -/six 25 def /seven 26 def /eight 27 def /nine 28 def -/colon 29 def /semicolon 30 def /less 31 def /equal 32 def -/greater 33 def /question 34 def /at 35 def /A 36 def -/B 37 def /C 38 def /D 39 def /E 40 def -/F 41 def /G 42 def /H 43 def /I 44 def -/J 45 def /K 46 def /L 47 def /M 48 def -/N 49 def /O 50 def /P 51 def /Q 52 def -/R 53 def /S 54 def /T 55 def /U 56 def -/V 57 def /W 58 def /X 59 def /Y 60 def -/Z 61 def /bracketleft 62 def /backslash 63 def /bracketright 64 def -/asciicircum 65 def /underscore 66 def /grave 67 def /a 68 def -/b 69 def /c 70 def /d 71 def /e 72 def -/f 73 def /g 74 def /h 75 def /i 76 def -/j 77 def /k 78 def /l 79 def /m 80 def -/n 81 def /o 82 def /p 83 def /q 84 def -/r 85 def /s 86 def /t 87 def /u 88 def -/v 89 def /w 90 def /x 91 def /y 92 def -/z 93 def /braceleft 94 def /bar 95 def /braceright 96 def -/asciitilde 97 def /Adieresis 98 def /Aring 99 def /Ccedilla 100 def -/Eacute 101 def /Ntilde 102 def /Odieresis 103 def /Udieresis 104 def -/aacute 105 def /agrave 106 def /acircumflex 107 def /adieresis 108 def -/atilde 109 def /aring 110 def /ccedilla 111 def /eacute 112 def -/egrave 113 def /ecircumflex 114 def /edieresis 115 def /iacute 116 def -/igrave 117 def /icircumflex 118 def /idieresis 119 def /ntilde 120 def -/oacute 121 def /ograve 122 def /ocircumflex 123 def /odieresis 124 def -/otilde 125 def /uacute 126 def /ugrave 127 def /ucircumflex 128 def -/udieresis 129 def /dagger 130 def /degree 131 def /cent 132 def -/sterling 133 def /section 134 def /bullet 135 def /paragraph 136 def -/germandbls 137 def /registered 138 def /copyright 139 def /trademark 140 def -/acute 141 def /dieresis 142 def /notequal 143 def /AE 144 def -/Oslash 145 def /infinity 146 def /plusminus 147 def /lessequal 148 def -/greaterequal 149 def /yen 150 def /mu1 151 def /partialdiff 152 def -/summation 153 def /product 154 def /pi1 155 def /integral 156 def -/ordfeminine 157 def /ordmasculine 158 def /Ohm 159 def /ae 160 def -/oslash 161 def /questiondown 162 def /exclamdown 163 def /logicalnot 164 def -/radical 165 def /florin 166 def /approxequal 167 def /increment 168 def -/guillemotleft 169 def /guillemotright 170 def /ellipsis 171 def /Agrave 172 def -/Atilde 173 def /Otilde 174 def /OE 175 def /oe 176 def -/endash 177 def /emdash 178 def /quotedblleft 179 def /quotedblright 180 def -/quoteleft 181 def /quoteright 182 def /divide 183 def /lozenge 184 def -/ydieresis 185 def /Ydieresis 186 def /fraction 187 def /Euro 188 def -/guilsinglleft 189 def /guilsinglright 190 def /fi 191 def /fl 192 def -/daggerdbl 193 def /periodcentered 194 def /quotesinglbase 195 def /quotedblbase 196 def -/perthousand 197 def /Acircumflex 198 def /Ecircumflex 199 def /Aacute 200 def -/Edieresis 201 def /Egrave 202 def /Iacute 203 def /Icircumflex 204 def -/Idieresis 205 def /Igrave 206 def /Oacute 207 def /Ocircumflex 208 def -/Ograve 209 def /Uacute 210 def /Ucircumflex 211 def /Ugrave 212 def -/dotlessi 213 def /circumflex 214 def /tilde 215 def /macron 216 def -/breve 217 def /dotaccent 218 def /ring 219 def /cedilla 220 def -/hungarumlaut 221 def /ogonek 222 def /caron 223 def /Lslash 224 def -/lslash 225 def /Scaron 226 def /scaron 227 def /Zcaron 228 def -/zcaron 229 def /brokenbar 230 def /Eth 231 def /eth 232 def -/Yacute 233 def /yacute 234 def /Thorn 235 def /thorn 236 def -/minus 237 def /multiply 238 def /onesuperior 239 def /twosuperior 240 def -/threesuperior 241 def /onehalf 242 def /onequarter 243 def /threequarters 244 def -/franc 245 def /Gbreve 246 def /gbreve 247 def /Idot 248 def -/Scedilla 249 def /scedilla 250 def /Cacute 251 def /cacute 252 def -/Ccaron 253 def /ccaron 254 def /dmacron 255 def /overscore 256 def -/middot 257 def /Abreve 258 def /abreve 259 def /Aogonek 260 def -/aogonek 261 def /Dcaron 262 def /dcaron 263 def /Dslash 264 def -/Eogonek 265 def /eogonek 266 def /Ecaron 267 def /ecaron 268 def -/Lacute 269 def /lacute 270 def /Lcaron 271 def /lcaron 272 def -/Ldot 273 def /ldot 274 def /Nacute 275 def /nacute 276 def -/Ncaron 277 def /ncaron 278 def /Odblacute 279 def /odblacute 280 def -/Racute 281 def /racute 282 def /Rcaron 283 def /rcaron 284 def -/Sacute 285 def /sacute 286 def /Tcedilla 287 def /tcedilla 288 def -/Tcaron 289 def /tcaron 290 def /Uring 291 def /uring 292 def -/Udblacute 293 def /udblacute 294 def /Zacute 295 def /zacute 296 def -/Zdot 297 def /zdot 298 def /Gamma 299 def /Theta 300 def -/Phi 301 def /alpha 302 def /delta 303 def /epsilon 304 def -/sigma 305 def /tau 306 def /phi 307 def /underscoredbl 308 def -/exclamdbl 309 def /nsuperior 310 def /peseta 311 def /IJ 312 def -/ij 313 def /napostrophe 314 def /minute 315 def /second 316 def -/afii61248 317 def /afii61289 318 def /H22073 319 def /H18543 320 def -/H18551 321 def /H18533 322 def /openbullet 323 def /Amacron 324 def -/amacron 325 def /Ccircumflex 326 def /ccircumflex 327 def /Cdot 328 def -/cdot 329 def /Emacron 330 def /emacron 331 def /Ebreve 332 def -/ebreve 333 def /Edot 334 def /edot 335 def /Gcircumflex 336 def -/gcircumflex 337 def /Gdot 338 def /gdot 339 def /Gcedilla 340 def -/gcedilla 341 def /Hcircumflex 342 def /hcircumflex 343 def /Hbar 344 def -/hbar 345 def /Itilde 346 def /itilde 347 def /Imacron 348 def -/imacron 349 def /Ibreve 350 def /ibreve 351 def /Iogonek 352 def -/iogonek 353 def /Jcircumflex 354 def /jcircumflex 355 def /Kcedilla 356 def -/kcedilla 357 def /kgreenlandic 358 def /Lcedilla 359 def /lcedilla 360 def -/Ncedilla 361 def /ncedilla 362 def /Eng 363 def /eng 364 def -/Omacron 365 def /omacron 366 def /Obreve 367 def /obreve 368 def -/Rcedilla 369 def /rcedilla 370 def /Scircumflex 371 def /scircumflex 372 def -/Tbar 373 def /tbar 374 def /Utilde 375 def /utilde 376 def -/Umacron 377 def /umacron 378 def /Ubreve 379 def /ubreve 380 def -/Uogonek 381 def /uogonek 382 def /Wcircumflex 383 def /wcircumflex 384 def -/Ycircumflex 385 def /ycircumflex 386 def /longs 387 def /Aringacute 388 def -/aringacute 389 def /AEacute 390 def /aeacute 391 def /Oslashacute 392 def -/oslashacute 393 def /anoteleia 394 def /Wgrave 395 def /wgrave 396 def -/Wacute 397 def /wacute 398 def /Wdieresis 399 def /wdieresis 400 def -/Ygrave 401 def /ygrave 402 def /quotereversed 403 def /radicalex 404 def -/afii08941 405 def /estimated 406 def /oneeighth 407 def /threeeighths 408 def -/fiveeighths 409 def /seveneighths 410 def /commaaccent 411 def /undercommaaccent 412 def -/tonos 413 def /dieresistonos 414 def /Alphatonos 415 def /Epsilontonos 416 def -/Etatonos 417 def /Iotatonos 418 def /Omicrontonos 419 def /Upsilontonos 420 def -/Omegatonos 421 def /iotadieresistonos 422 def /Alpha 423 def /Beta 424 def -/Delta 425 def /Epsilon 426 def /Zeta 427 def /Eta 428 def -/Iota 429 def /Kappa 430 def /Lambda 431 def /Mu 432 def -/Nu 433 def /Xi 434 def /Omicron 435 def /Pi 436 def -/Rho 437 def /Sigma 438 def /Tau 439 def /Upsilon 440 def -/Chi 441 def /Psi 442 def /Omega 443 def /Iotadieresis 444 def -/Upsilondieresis 445 def /alphatonos 446 def /epsilontonos 447 def /etatonos 448 def -/iotatonos 449 def /upsilondieresistonos 450 def /beta 451 def /gamma 452 def -/zeta 453 def /eta 454 def /theta 455 def /iota 456 def -/kappa 457 def /lambda 458 def /mu 459 def /nu 460 def -/xi 461 def /omicron 462 def /rho 463 def /sigma1 464 def -/upsilon 465 def /chi 466 def /psi 467 def /omega 468 def -/iotadieresis 469 def /upsilondieresis 470 def /omicrontonos 471 def /upsilontonos 472 def -/omegatonos 473 def /afii10023 474 def /afii10051 475 def /afii10052 476 def -/afii10053 477 def /afii10054 478 def /afii10055 479 def /afii10056 480 def -/afii10057 481 def /afii10058 482 def /afii10059 483 def /afii10060 484 def -/afii10061 485 def /afii10062 486 def /afii10145 487 def /afii10017 488 def -/afii10018 489 def /afii10019 490 def /afii10020 491 def /afii10021 492 def -/afii10022 493 def /afii10024 494 def /afii10025 495 def /afii10026 496 def -/afii10027 497 def /afii10028 498 def /afii10029 499 def /afii10030 500 def -/afii10031 501 def /afii10032 502 def /afii10033 503 def /afii10034 504 def -/afii10035 505 def /afii10036 506 def /afii10037 507 def /afii10038 508 def -/afii10039 509 def /afii10040 510 def /afii10041 511 def /afii10042 512 def -/afii10043 513 def /afii10044 514 def /afii10045 515 def /afii10046 516 def -/afii10047 517 def /afii10048 518 def /afii10049 519 def /afii10065 520 def -/afii10066 521 def /afii10067 522 def /afii10068 523 def /afii10069 524 def -/afii10070 525 def /afii10072 526 def /afii10073 527 def /afii10074 528 def -/afii10075 529 def /afii10076 530 def /afii10077 531 def /afii10078 532 def -/afii10079 533 def /afii10080 534 def /afii10081 535 def /afii10082 536 def -/afii10083 537 def /afii10084 538 def /afii10085 539 def /afii10086 540 def -/afii10087 541 def /afii10088 542 def /afii10089 543 def /afii10090 544 def -/afii10091 545 def /afii10092 546 def /afii10093 547 def /afii10094 548 def -/afii10095 549 def /afii10096 550 def /afii10097 551 def /afii10071 552 def -/afii10099 553 def /afii10100 554 def /afii10101 555 def /afii10102 556 def -/afii10103 557 def /afii10104 558 def /afii10105 559 def /afii10106 560 def -/afii10107 561 def /afii10108 562 def /afii10109 563 def /afii10110 564 def -/afii10193 565 def /afii10050 566 def /afii10098 567 def /afii00208 568 def -/afii61352 569 def /pi 570 def /onenumerator 571 def /twonumerator 572 def -/threenumerator 573 def /fournumerator 574 def /fivenumerator 575 def /sevennumerator 576 def -/eightnumerator 577 def /DontCompressHTMX 578 def /glyph579 579 def /glyph580 580 def -/glyph581 581 def /Ohorn 582 def /ohorn 583 def /Uhorn 584 def -/uhorn 585 def /hookabovecomb 586 def /dotbelowcomb 587 def /gravecomb 588 def -/acutecomb 589 def /glyph590 590 def /glyph591 591 def /glyph592 592 def -/glyph593 593 def /glyph594 594 def /glyph595 595 def /glyph596 596 def -/glyph597 597 def /glyph598 598 def /glyph599 599 def /glyph600 600 def -/glyph601 601 def /glyph602 602 def /glyph603 603 def /glyph604 604 def -/Adotbelow 605 def /adotbelow 606 def /Ahookabove 607 def /ahookabove 608 def -/Acircumflexacute 609 def /acircumflexacute 610 def /Acircumflexgrave 611 def /acircumflexgrave 612 def -/Acircumflexhookabove 613 def /acircumflexhookabove 614 def /Acircumflextilde 615 def /acircumflextilde 616 def -/Acircumflexdotbelow 617 def /acircumflexdotbelow 618 def /Abreveacute 619 def /abreveacute 620 def -/Abrevegrave 621 def /abrevegrave 622 def /Abrevehookabove 623 def /abrevehookabove 624 def -/Abrevetilde 625 def /abrevetilde 626 def /Abrevedotbelow 627 def /abrevedotbelow 628 def -/Edotbelow 629 def /edotbelow 630 def /Ehookabove 631 def /ehookabove 632 def -/Etilde 633 def /etilde 634 def /Ecircumflexacute 635 def /ecircumflexacute 636 def -/Ecircumflexgrave 637 def /ecircumflexgrave 638 def /Ecircumflexhookabove 639 def /ecircumflexhookabove 640 def -/Ecircumflextilde 641 def /ecircumflextilde 642 def /Ecircumflexdotbelow 643 def /ecircumflexdotbelow 644 def -/Ihookabove 645 def /ihookabove 646 def /Idotbelow 647 def /idotbelow 648 def -/glyph649 649 def /glyph650 650 def /glyph651 651 def /glyph652 652 def -/sheva 653 def /hatafsegol 654 def /hatafpatah 655 def /hatafqamats 656 def -/hiriq 657 def /tsere 658 def /segol 659 def /patah 660 def -/qamats 661 def /holam 662 def /qubuts 663 def /dagesh 664 def -/meteg 665 def /maqaf 666 def /rafe 667 def /paseq 668 def -/shindot 669 def /sindot 670 def /sofpasuq 671 def /alef 672 def -/bet 673 def /gimel 674 def /dalet 675 def /he 676 def -/vav 677 def /zayin 678 def /het 679 def /tet 680 def -/yod 681 def /finalkaf 682 def /kaf 683 def /lamed 684 def -/finalmem 685 def /mem 686 def /finalnun 687 def /nun 688 def -/samekh 689 def /ayin 690 def /finalpe 691 def /pe 692 def -/finaltsadi 693 def /tsadi 694 def /qof 695 def /resh 696 def -/shin 697 def /tav 698 def /doublevav 699 def /vavyod 700 def -/doubleyod 701 def /geresh 702 def /gershayim 703 def /newsheqelsign 704 def -/vavshindot 705 def /finalkafsheva 706 def /finalkafqamats 707 def /lamedholam 708 def -/lamedholamdagesh 709 def /altayin 710 def /shinshindot 711 def /shinsindot 712 def -/shindageshshindot 713 def /shindageshsindot 714 def /alefpatah 715 def /alefqamats 716 def -/alefmapiq 717 def /betdagesh 718 def /gimeldagesh 719 def /daletdagesh 720 def -/hedagesh 721 def /vavdagesh 722 def /zayindagesh 723 def /tetdagesh 724 def -/yoddagesh 725 def /finalkafdagesh 726 def /kafdagesh 727 def /lameddagesh 728 def -/memdagesh 729 def /nundagesh 730 def /samekhdagesh 731 def /finalpedagesh 732 def -/pedagesh 733 def /tsadidagesh 734 def /qofdagesh 735 def /reshdagesh 736 def -/shindagesh 737 def /tavdages 738 def /vavholam 739 def /betrafe 740 def -/kafrafe 741 def /perafe 742 def /aleflamed 743 def /zerowidthnonjoiner 744 def -/zerowidthjoiner 745 def /lefttorightmark 746 def /righttoleftmark 747 def /afii57388 748 def -/afii57403 749 def /afii57407 750 def /afii57409 751 def /afii57440 752 def -/afii57451 753 def /afii57452 754 def /afii57453 755 def /afii57454 756 def -/afii57455 757 def /afii57456 758 def /afii57457 759 def /afii57458 760 def -/afii57392 761 def /afii57393 762 def /afii57394 763 def /afii57395 764 def -/afii57396 765 def /afii57397 766 def /afii57398 767 def /afii57399 768 def -/afii57400 769 def /afii57401 770 def /afii57381 771 def /afii57461 772 def -/afii63167 773 def /afii57459 774 def /afii57543 775 def /afii57534 776 def -/afii57494 777 def /afii62843 778 def /afii62844 779 def /afii62845 780 def -/afii64240 781 def /afii64241 782 def /afii63954 783 def /afii57382 784 def -/afii64242 785 def /afii62881 786 def /afii57504 787 def /afii57369 788 def -/afii57370 789 def /afii57371 790 def /afii57372 791 def /afii57373 792 def -/afii57374 793 def /afii57375 794 def /afii57391 795 def /afii57471 796 def -/afii57460 797 def /afii52258 798 def /afii57506 799 def /afii62958 800 def -/afii62956 801 def /afii52957 802 def /afii57505 803 def /afii62889 804 def -/afii62887 805 def /afii62888 806 def /afii57507 807 def /afii62961 808 def -/afii62959 809 def /afii62960 810 def /afii57508 811 def /afii62962 812 def -/afii57567 813 def /afii62964 814 def /afii52305 815 def /afii52306 816 def -/afii57509 817 def /afii62967 818 def /afii62965 819 def /afii62966 820 def -/afii57555 821 def /afii52364 822 def /afii63753 823 def /afii63754 824 def -/afii63759 825 def /afii63763 826 def /afii63795 827 def /afii62891 828 def -/afii63808 829 def /afii62938 830 def /afii63810 831 def /afii62942 832 def -/afii62947 833 def /afii63813 834 def /afii63823 835 def /afii63824 836 def -/afii63833 837 def /afii63844 838 def /afii62882 839 def /afii62883 840 def -/afii62884 841 def /afii62885 842 def /afii62886 843 def /Odotbelow 844 def -/odotbelow 845 def /Ohookabove 846 def /ohookabove 847 def /Ocircumflexacute 848 def -/ocircumflexacute 849 def /Ocircumflexgrave 850 def /ocircumflexgrave 851 def /Ocircumflexhookabove 852 def -/ocircumflexhookabove 853 def /Ocircumflextilde 854 def /ocircumflextilde 855 def /Ocircumflexdotbelow 856 def -/ocircumflexdotbelow 857 def /Ohornacute 858 def /ohornacute 859 def /Ohorngrave 860 def -/ohorngrave 861 def /Ohornhookabove 862 def /ohornhookabove 863 def /Ohorntilde 864 def -/ohorntilde 865 def /Ohorndotbelow 866 def /ohorndotbelow 867 def /Udotbelow 868 def -/udotbelow 869 def /Uhookabove 870 def /uhookabove 871 def /Uhornacute 872 def -/uhornacute 873 def /Uhorngrave 874 def /uhorngrave 875 def /Uhornhookabove 876 def -/uhornhookabove 877 def /Uhorntilde 878 def /uhorntilde 879 def /Uhorndotbelow 880 def -/uhorndotbelow 881 def /glyph882 882 def /glyph883 883 def /Ydotbelow 884 def -/ydotbelow 885 def /Yhookabove 886 def /yhookabove 887 def /Ytilde 888 def -/ytilde 889 def /dong 890 def /tildecomb 891 def /currency 892 def - -end readonly def -FontName currentdict end definefont pop -%%EndFont -%%EndProlog -mpldict begin -13.5 175.5 translate -585 441 0 0 clipbox -% polygon -1.000 setgray -1.000 setlinewidth -0 setlinejoin -2 setlinecap -[] 0 setdash -0 0 m -0 441 l -585 441 l -585 0 l -closepath -gsave -fill -grestore -stroke -% polygon -0.000 setgray -73.125 44.1 m -73.125 396.9 l -526.5 396.9 l -526.5 44.1 l -closepath -gsave -1.000 setgray -fill -grestore -stroke -% draw_lines -0.000 0.000 1.000 setrgbcolor -gsave -453.375 352.800 73.125 44.100 clipbox -73.125 44.100 m -82.192 44.625 l -91.260 46.237 l -100.328 49.043 l -109.395 53.206 l -118.463 58.937 l -127.530 66.464 l -136.597 76.012 l -145.665 87.777 l -154.733 101.897 l -163.800 118.431 l -172.868 137.336 l -181.935 158.456 l -191.002 181.511 l -200.070 206.100 l -209.138 231.707 l -218.205 257.720 l -227.273 283.450 l -236.340 308.160 l -245.408 331.100 l -254.475 351.539 l -263.543 368.804 l -272.610 382.309 l -281.678 391.584 l -290.745 396.306 l -299.812 396.306 l -308.880 391.584 l -317.948 382.309 l -327.015 368.804 l -336.083 351.539 l -345.150 331.100 l -354.218 308.160 l -363.285 283.450 l -372.353 257.720 l -381.420 231.707 l -390.488 206.100 l -399.555 181.511 l -408.623 158.456 l -417.690 137.336 l -426.758 118.431 l -435.825 101.897 l -444.893 87.777 l -453.960 76.012 l -463.028 66.464 l -472.095 58.937 l -481.163 53.206 l -490.230 49.043 l -499.298 46.237 l -508.365 44.625 l -517.433 44.100 l -stroke -grestore -% draw_lines -1.000 0.000 0.000 setrgbcolor -gsave -453.375 352.800 73.125 44.100 clipbox -73.125 44.100 m -82.192 58.500 l -91.260 72.900 l -100.328 87.300 l -109.395 101.700 l -118.463 116.100 l -127.530 130.500 l -136.597 144.900 l -145.665 159.300 l -154.733 173.700 l -163.800 188.100 l -172.868 202.500 l -181.935 216.900 l -191.002 231.300 l -200.070 245.700 l -209.138 260.100 l -218.205 274.500 l -227.273 288.900 l -236.340 303.300 l -245.408 317.700 l -254.475 332.100 l -263.543 346.500 l -272.610 360.900 l -281.678 375.300 l -290.745 389.700 l -299.812 389.700 l -308.880 375.300 l -317.948 360.900 l -327.015 346.500 l -336.083 332.100 l -345.150 317.700 l -354.218 303.300 l -363.285 288.900 l -372.353 274.500 l -381.420 260.100 l -390.488 245.700 l -399.555 231.300 l -408.623 216.900 l -417.690 202.500 l -426.758 188.100 l -435.825 173.700 l -444.893 159.300 l -453.960 144.900 l -463.028 130.500 l -472.095 116.100 l -481.163 101.700 l -490.230 87.300 l -499.298 72.900 l -508.365 58.500 l -517.433 44.100 l -stroke -grestore -% draw_lines -0.000 0.500 0.000 setrgbcolor -gsave -453.375 352.800 73.125 44.100 clipbox -73.125 44.100 m -82.192 45.548 l -91.260 49.869 l -100.328 56.992 l -109.395 66.799 l -118.463 79.131 l -127.530 93.783 l -136.597 110.516 l -145.665 129.056 l -154.733 149.096 l -163.800 170.309 l -172.868 192.347 l -181.935 214.846 l -191.002 237.438 l -200.070 259.753 l -209.138 281.422 l -218.205 302.092 l -227.273 321.421 l -236.340 339.094 l -245.408 354.819 l -254.475 368.339 l -263.543 379.431 l -272.610 387.913 l -281.678 393.647 l -290.745 396.538 l -299.812 396.538 l -308.880 393.647 l -317.948 387.913 l -327.015 379.431 l -336.083 368.339 l -345.150 354.819 l -354.218 339.094 l -363.285 321.421 l -372.353 302.092 l -381.420 281.422 l -390.488 259.753 l -399.555 237.438 l -408.623 214.846 l -417.690 192.347 l -426.758 170.309 l -435.825 149.096 l -444.893 129.056 l -453.960 110.516 l -463.028 93.783 l -472.095 79.131 l -481.163 66.799 l -490.230 56.992 l -499.298 49.869 l -508.365 45.548 l -517.433 44.100 l -stroke -grestore -% draw_lines -0.750 0.000 0.750 setrgbcolor -gsave -453.375 352.800 73.125 44.100 clipbox -73.125 72.324 m -82.192 73.656 l -91.260 77.632 l -100.328 84.185 l -109.395 93.207 l -118.463 104.552 l -127.530 118.033 l -136.597 133.427 l -145.665 150.483 l -154.733 168.921 l -163.800 188.437 l -172.868 208.711 l -181.935 229.410 l -191.002 250.195 l -200.070 270.724 l -209.138 290.661 l -218.205 309.676 l -227.273 327.460 l -236.340 343.718 l -245.408 358.186 l -254.475 370.624 l -263.543 380.828 l -272.610 388.632 l -281.678 393.907 l -290.745 396.567 l -299.812 396.567 l -308.880 393.907 l -317.948 388.632 l -327.015 380.828 l -336.083 370.624 l -345.150 358.186 l -354.218 343.718 l -363.285 327.460 l -372.353 309.676 l -381.420 290.661 l -390.488 270.724 l -399.555 250.195 l -408.623 229.410 l -417.690 208.711 l -426.758 188.437 l -435.825 168.921 l -444.893 150.483 l -453.960 133.427 l -463.028 118.033 l -472.095 104.552 l -481.163 93.207 l -490.230 84.185 l -499.298 77.632 l -508.365 73.656 l -517.433 72.324 l -stroke -grestore -% text -0.000 setgray -/Verdana findfont -18.000 scalefont -setfont -144.812 403.956 m -0 4 rmoveto -(Smoothing window in time-domain) show -% text -/Verdana findfont -14.000 scalefont -setfont -69.469 30.1 m -(0) show -% line -0.500 setlinewidth -0 setlinecap -163.800 44.100 m 163.800 48.100 l -stroke -% line -163.800 392.900 m 163.800 396.900 l -stroke -% text -155.769 30.1 m -(10) show -% line -254.475 44.100 m 254.475 48.100 l -stroke -% line -254.475 392.900 m 254.475 396.900 l -stroke -% text -246.444 30.1 m -(20) show -% line -345.150 44.100 m 345.150 48.100 l -stroke -% line -345.150 392.900 m 345.150 396.900 l -stroke -% text -337.619 30.1 m -(30) show -% line -435.825 44.100 m 435.825 48.100 l -stroke -% line -435.825 392.900 m 435.825 396.900 l -stroke -% text -427.731 30.1 m -(40) show -% text -518.844 30.1 m -(50) show -% text -296.656 17.1 m -(n) show -% text -47.812 39.1 m -(0.0) show -% line -73.125 114.660 m 77.125 114.660 l -stroke -% line -522.500 114.660 m 526.500 114.660 l -stroke -% text -47.875 109.66 m -(0.2) show -% line -73.125 185.220 m 77.125 185.220 l -stroke -% line -522.500 185.220 m 526.500 185.220 l -stroke -% text -47.125 180.22 m -(0.4) show -% line -73.125 255.780 m 77.125 255.780 l -stroke -% line -522.500 255.780 m 526.500 255.780 l -stroke -% text -47.812 250.78 m -(0.6) show -% line -73.125 326.340 m 77.125 326.340 l -stroke -% line -522.500 326.340 m 526.500 326.340 l -stroke -% text -47.797 321.34 m -(0.8) show -% text -48.062 391.9 m -(1.0) show -% polygon -1.000 setlinewidth -2 setlinecap -214.291 51.156 m -214.291 161.736 l -385.334 161.736 l -385.334 51.156 l -closepath -gsave -1.000 setgray -fill -grestore -stroke -% draw_lines -0.000 0.000 1.000 setrgbcolor -230.344 143.521 m -237.901 143.521 l -245.457 143.521 l -253.013 143.521 l -stroke -% draw_lines -1.000 0.000 0.000 setrgbcolor -230.344 121.605 m -237.901 121.605 l -245.457 121.605 l -253.013 121.605 l -stroke -% draw_lines -0.000 0.500 0.000 setrgbcolor -230.344 97.688 m -237.901 97.688 l -245.457 97.688 l -253.013 97.688 l -stroke -% draw_lines -0.750 0.000 0.750 setrgbcolor -230.344 71.371 m -237.901 71.371 l -245.457 71.371 l -253.013 71.371 l -stroke -% text -0.000 setgray -/Verdana findfont -24.000 scalefont -setfont -262.081 134.521 m -(Blackman) show -% text -262.081 112.605 m -(Bartlett) show -% text -262.081 86.688 m -0 5 rmoveto -(Hanning) show -% text -262.081 60.371 m -0 5 rmoveto -(Hamming) show - -end -showpage diff --git a/numpy/doc/numpybook/Figures/fig1bw.eps b/numpy/doc/numpybook/Figures/fig1bw.eps deleted file mode 100644 index 3353edcb4..000000000 --- a/numpy/doc/numpybook/Figures/fig1bw.eps +++ /dev/null @@ -1,4575 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Title: fig1bw.eps -%%Creator: matplotlib version 0.85.1.cvs, http://matplotlib.sourceforge.net/ -%%CreationDate: Fri Jan 6 00:30:28 2006 -%%BoundingBox: 13 175 598 616 -%%EndComments -%%BeginProlog -/mpldict 7 dict def -mpldict begin -/m { moveto } bind def -/l { lineto } bind def -/r { rlineto } bind def -/box { -m -1 index 0 r -0 exch r -neg 0 r -closepath -} bind def -/clipbox { -box -clip -newpath -} bind def -/ellipse { -newpath -matrix currentmatrix 7 1 roll -translate -scale -0 0 1 5 3 roll arc -setmatrix -closepath -} bind def -%%BeginFont: Verdana -%!PS-TrueType-1.0-1.0 -8 dict begin -/FontName /Verdana def -/FontMatrix [1 0 0 1 0 0] def -/FontType 42 def -/Encoding StandardEncoding def -/FontBBox [-102 -423 2963 2049] def -/PaintType 0 def -/FontInfo 7 dict dup begin -/Notice (Typeface and data © 1996 Microsoft Corporation. All Rights Reserved) def -/FamilyName (Verdana) def -/FullName (Verdana) def -/version (Version 2.35) def -/isFixedPitch false def -/UnderlinePosition -180 def -/UnderlineThickness 120 def -end readonly def -/sfnts [ -<00010000001301000004003044534947CD5006A400020D64000014144C5453485694D82F -00001530000003814F532F32477590C3000001B80000005656444D5874F17C6D000018B4 -000005E0636D6170E84D8B8B000007A80000068C637674204CA740E3000022AC00000198 -6670676DEE371553000021740000013867617370001700090000021000000010676C7966 -01F195F700009EC000013BB668646D7809490ECD0000323800006C8868656164C748722C -0000013C0000003668686561133B09D00000017400000024686D7478C905723E00002444 -00000DF46B65726E75BF7E53000200CC00000C966C6F63616784B57700000E34000006FC -6D617870086A023E00000198000000206E616D65A93B95720000022000000587706F7374 -C58F55450001DA7800002651707265701240C02F00001E94000002E00001000000010000 -16FBFC3A5F0F3CF5001B080000000000AA7E442900000000B26DE2ABFF9AFE590B930801 -00000009000200000000000000010000080BFE5200000C2CFF9AFBD40B93000100000000 -00000000000000000000037D00010000037D00620007006B000500020010002F00380000 -0495013F0003000100010411019000050000059A053300000125059A0533000003A00078 -02A70800020B0604030504040204000002870000000000000000000000004D5320200040 -0020FB02061EFE5900CA080B01AE2000019F000000000000000000030008000200100001 -FFFF00030000002801E60001000000000000004300000001000000000001000700430001 -0000000000020007004A0001000000000003002F00510001000000000004000700800001 -000000000005000C00870001000000000006000700930001000000000007002F009A0003 -000104030002000C00C90003000104050002001000D50003000104060002000C00E50003 -000104070002001000F10003000104080002001001010003000104090000008601110003 -000104090001000E01970003000104090002000E01A50003000104090003005E01B30003 -000104090004000E021100030001040900050018021F0003000104090006000E02370003 -000104090007005E024500030001040A0002000C02A300030001040B0002001002AF0003 -0001040C0002000C02BF00030001040E0002000C02CB0003000104100002000E02D70003 -000104130002001202E50003000104140002000C02F70003000104150002001003030003 -000104160002000C03130003000104190002000E031F00030001041B00020010032D0003 -0001041D0002000C033D00030001041F0002000C03490003000104240002000E03550003 -0001042D0002000E036300030001080A0002000C03710003000108160002000C037D0003 -00010C0A0002000C0389000300010C0C0002000C0395547970656661636520616E642064 -61746120A92031393936204D6963726F736F667420436F72706F726174696F6E2E20416C -6C2052696768747320526573657276656456657264616E61526567756C61724D6963726F -736F66743A56657264616E6120526567756C61723A56657273696F6E203120284D696372 -6F736F66742956657264616E6156657273696F6E20322E333556657264616E6156657264 -616E6120697320612074726164656D61726B206F66204D6963726F736F667420436F7270 -6F726174696F6E004E006F0072006D0061006C006F00620079010D0065006A006E00E900 -6E006F0072006D0061006C005300740061006E0064006100720064039A03B103BD03BF03 -BD03B903BA03AC0054007900700065006600610063006500200061006E00640020006400 -6100740061002000A9002000310039003900360020004D006900630072006F0073006F00 -66007400200043006F00720070006F0072006100740069006F006E002E00200041006C00 -6C0020005200690067006800740073002000520065007300650072007600650064005600 -65007200640061006E00610052006500670075006C00610072004D006900630072006F00 -73006F00660074003A00560065007200640061006E006100200052006500670075006C00 -610072003A00560065007200730069006F006E0020003100200028004D00690063007200 -6F0073006F00660074002900560065007200640061006E00610056006500720073006900 -6F006E00200032002E0033003500560065007200640061006E0061005600650072006400 -61006E006100200069007300200061002000740072006100640065006D00610072006B00 -20006F00660020004D006900630072006F0073006F0066007400200043006F0072007000 -6F0072006100740069006F006E004E006F0072006D0061006C004E006F0072006D006100 -61006C0069004E006F0072006D0061006C004E006F0072006D00E1006C004E006F007200 -6D0061006C0065005300740061006E00640061006100720064004E006F0072006D006100 -6C004E006F0072006D0061006C006E0079004E006F0072006D0061006C041E0431044B04 -47043D044B0439004E006F0072006D00E1006C006E0065004E006F0072006D0061006C00 -4E006F0072006D0061006C004E0061007600610064006E006F0041007200720075006E00 -740061004E006F0072006D0061006C004E006F0072006D0061006C004E006F0072006D00 -61006C004E006F0072006D0061006C00000000020001000000000014000300010000011A -000001060000010000000000000001020000000200000000000000000000000000000001 -0000030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324 -25262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748 -494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60610062636465666768696A6B -6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F -909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAB03ACADAEAFB0B1B2 -B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD000D1D2D3D4D5 -D6D7D8D9DADBDCDDDEDF0004057200000084008000060004007E017F019201A101B001FF -02C702C902DD0301030303090323037E038A038C03A103CE040C044F045C045F04911E85 -1EF92015201E2022202620302033203A203C203E2044207F20A420A720AC210521132116 -21222126212E215E22022206220F22122215221A221E222B22482260226525A125AB25CA -25CF25E6F002F00DFB02FFFF0000002000A0019201A001AF01FA02C602C902D803000303 -03090323037E0384038C038E03A30401040E0451045E04901E801EA02013201720202026 -203020322039203C203E2044207F20A320A720AB21052113211621222126212E215B2202 -2206220F221122152219221E222B22482260226425A125AA25CA25CF25E6F001F004FB01 -FFFFFFE30000FF1400A60099FF8A0000FE0F0000FF4C0078FF41FF28FCA00000FE170000 -0000FDD9FDD8FDD7FDD6FDA6E30B0000000000000000E085E095E109E084E0F9E156E077 -E0B70000E0900000E038E02BE123DF6ADF79E068E03CDE96DEA2DE8B0000DEA60000DE74 -DE71DE5FDE2FDE30DB9EDB96DAEEDB73DB5D10BE000005BE000100000082000000000000 -000002380000023800000000000000000000023800000242026800000000000000000000 -000002B203640368037600000000000000000000000000000000036A0000036A00000000 -000000000000000000000000000000000358000003580000000000000000000000000000 -0000000000000000034400000000000300A300840085037C009600E60086008E008B009D -00A900A40010008A01000083009300F000F1008D00970088010100DC00EF009E00AA00F3 -00F200F400A200AC00C800C600AD006200630090006400CA006500C700C900CE00CB00CC -00CD00E7006600D100CF00D000AE006700EE009100D400D200D3006800E900EB0089006A -0069006B006D006C006E00A0006F0071007000720073007500740076007700E80078007A -0079007B007D007C00B700A1007F007E0080008100EA00EC00B901440145010201030104 -010500FB00FC014601470148014900FD00FE01060107010800FF014A014B014C014D014E -014F0109010A010B010C0150015100F600F701520153015401550156015701580159015A -015B015C015D015E015F0160016100F800D50138013901620163016401650166010D010E -01670168010F01100111011200E000E1011301140169016A01150116013A016B016C016D -016E016F01700117011800AF00B00119011A01710172011B011C011D011E0173017400F9 -00FA00E200E3011F01200121012201750176017701780179017A017B017C012301240125 -0126017D017E017F01800181018200BA012701280129012A00E400E5018300D600DF00D9 -00DA00DB00DE00D700DD019D019E019F018A01A001A101A201A401A501A601A701A8012B -01A901AA01AB01AC012C01AD01AE01AF01B001B101B201B301B401B501B601B701B8012D -01B901BA01BB01BC01BD01BE01BF01C001C101C2012E01C301C4012F013001C501C601C7 -01C801C901CA01CB01CC01CD01CE023A01CF01D00131013201D1013301D201D301D401D5 -01D601D701D801D9025D025E025F0260026102620263026402650266026702680269026A -026B026C026D026E026F0270027102720273027402750276027702780279027A027B027C -027D027E027F028002810282028302840285028602870288034C034D034E034F03500351 -03520353035403550356035703580359035A035B035C035D035E035F0360036103620363 -036403650366036703680369036A036B036C036D036E036F037003710191019203740375 -037603770378037900B100B20238013400B500B600C3019300B300B400C4008200C10087 -00F50195037A00BC009900ED00C200A5019B019C023B023C023D023E023F024002410242 -0000001F001F001F001F00470070010401C0025F033C035503A203F10461049604C004DE -04F50520057F05B9063806DB072D07A70830086B090B099309B509F10A350A640AAA0B13 -0BF80C600CDC0D4F0DA00DD60E060E7A0EAE0EDB0F180F860FA61000104C10B8111711AE -122012B812DF132C13881407148814DF15221544156F159015C815DE15FE168916E71747 -17A01803184F18D11912193D198C19E51A001A761AB61B011B5D1BB81BF51C8B1CDB1D1B -1D741DD91E641EC21F041F631F7E1FDC203B205520FE21AA21BD21D021E9220222142226 -2238225322652278230A231C232E234023562369237C23B423EE2400241224242436244C -245E24702482249424AB24E62520259A260826EB270B274327C928832929297B299C29C2 -2A2D2A912B412BCD2C0D2C5A2CA82D0C2D4C2DCB2E3D2E722E9F2EE92F5E2F9F301130E7 -316D31D831FF3223326032DF336433A233F33443346D3480349334A6350E35AD35C735DD -361C365B368036A736E33728373F37593777382D3858388438E139313986399E39C43A03 -3AD73AEA3AFD3B103B243B373B4A3B5D3B773B8A3B9D3BB03BC33BD63BE93BFC3C173C47 -3C8E3CA63CEC3D003D493D7D3DB53DEA3E1B3E5B3E923EA53EB73ECA3EDC3F043F6B3FFF -40124024408840E441014135416941BB4239425A427E42AA42F643024314432743F044AF -44C244D444E744F9456F4586459E45B145C3465F47144727479D47A54806489348A648B8 -48CB48F0492B4961499249BC49CF49E149F44A064A1A4A2D4A404A534A664A794A8C4A9E -4AEE4B6C4B7F4BEC4C354C484C5C4C6F4C824C954CA84CBA4CDA4D584DDD4E3C4EC24F58 -4FB24FE1505D5081509D50E951DF51EF52085268528B52CA538353FD5425543F54665491 -54EA54FC550D551F55345546555B556D557E559055A455B655C755D955EE5600561556B8 -575B576D578757DE583458A458FC593F596C59C05A035A595AB15AC85B225B335B495BA2 -5BEB5C305C465C5C5CD25D2E5D405D515D635D745D855DEA5DFC5E105E4E5EBA5ECC5EDD -5EEF5F005F125F235FA2600E6020603260446055608561656246625C626E6285629A62B1 -62C362D562E762F963166332634963606388639E6422648E64AA64D76504653065556589 -65A265DD65F36611662F664F666E668E66B16700670867106752675A6762676A6772677A -67C367CB67D36812681A6840684868DA68E268EA68F2695D69DC69F66A106A216A376A48 -6A5B6A6F6AFD6B4A6BBD6BFF6C866C8E6D226D7A6DC16DC96E726E7A6ECF6F3B6F7A6FEA -705A70F370FB7112712371347146715A71C571DD7255725D7265727F7287731C738773DE -73F3749074C174C97521752975497594759C765676F2773A77AE783B7892789A78A278AA -78D078D878E078E8795979DE79E67A167A5D7A907ACD7B297B907BE47C5F7CCD7D367D3E -7DCA7E4C7E6C7EBC7EC47F7D8015804D80B18126817B81D38203820B82308238829A82C9 -82D1836C837483AC83EF8425846784C3852B858085F4865386BD86D38757876887D587DD -87E587ED87F5888B88F9894F896489EE8A258A4E8A7B8A918B238B488B6C8BBD8C398C73 -8CD88D0C8D8E8D8E8D8E8D8E8D8E8E208E8D8EF48F598F9F8FB58FBD8FC59006904590BD -9126916491A19209927292C09334938093D1944E94D395479558956C9586959B95B195C7 -95DD95F3960B96219633964996659683969596AA96BC96D196E396F8970A971F973E9759 -976A977B979697AE97C497D597ED97FF98179829983F985598679879989898B198C998DB -98ED98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF9911 -9922994099549970998999A199B399CB99E499FC9A159A359A4E9A659A769A909AA59ABB -9ACC9AE29AF99B0B9B1C9B2D9B3E9B549B659B7C9B949BAF9BC79BDD9BEE9C009C119C22 -9C339C4E9C649C759C8B9CA49CB89CCE9CDF9D639D6B9DDB0000037D01011C1C300E0E0B -0E010A01010E0E010F01010B0B0B0B0B0B0B0B0B0B01010E0E0E0B0C320E101923150E0F -740A0E2D240E0D0D0D0E322C1D322E1C111C0101010101010D0D0E0D0D1C0D0BB4010EB4 -110B100D0D2A11110B0A100F0A11010E0101323210230E0D1D0D0D0D0D0D0D0E0D0D0D0D -B4B4B4B40B10101010100B0B0B0B0B010B0B01010B0101010101010E330D010E0E0E0B10 -010101010B0101010E100B300E010B010127270132320D011C0B01010101010E010A1101 -01010101010B010101013223322323747474740D0D0D1D1D1DB401010101010101010101 -0AD732111C110E1001110A0D0D0E01010101010101010E0D743211100E100E0D0101320D -320D190D10230D230D2DB42D322D010E0B0E0B0D100E2A0E2A32112C112C111D0B1D0B1C -111C11100D130D2612181110010D010A0A110E01240A121901011901320D100E100E230D -230D230D0E0D0E0D0E0D0F0B0F0B74B474B474B474B40A010E0E0E2DB40E0B0E0B0D100D -100E2A32112C111D0B1D0B1D491D182E10110A01320D330E0D10012E102E102E10110A01 -010B01010101012E010101320E1C10160C27B4320E01231C0F740E0A240E300D0F0D1E2C -111C111474110D120BB40B0B0F0D0B0DB40D0A130A011010010B0C1010B40B100B10230A -100D3274740A0C0E010E1111320E0E10012311010E0E0E12240F0D0F0D102C11131C2D22 -11111F2D0E0D01100D240A010D0D301210100B011D1010100D0F110A170F270D11320C11 -0C0E0D0A0D0B010E11B4B4010A0E0B0B0A10100A01011001010101010101010101012D10 -282001010101010101010101010101010101010101320D320D320D320D320D320D320D32 -0D320D320D320D320D230D230D230D230D230D230D230D230D74B474B401010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -01010101010101010D100D100D100D100D100D100D102D102D102D102D102D101D0B1D0B -28202820282028202820110A110A110A110A0D010B00000000000001000101010101000C -00F808FF00080008FFFE0009000AFFFE000A000AFFFE000B000BFFFE000C000CFFFE000D -000DFFFD000E000EFFFD000F000FFFFD0010000FFFFD00110011FFFD00120012FFFC0013 -0013FFFC00140015FFFC00150015FFFC00160016FFFC00170017FFFB00180018FFFB0019 -001AFFFB001A001BFFFB001B001BFFFB001C001CFFFA001D001DFFFA001E001EFFFA001F -0020FFFA00200020FFFA00210021FFF900220022FFF900230023FFF900240025FFF90025 -0026FFF900260026FFF800270027FFF800280028FFF800290029FFF8002A002BFFF8002B -002BFFF7002C002CFFF7002D002DFFF7002E002EFFF7002F0030FFF700300031FFF60031 -0031FFF600320032FFF600330033FFF600340034FFF600350036FFF500360036FFF50037 -0037FFF500380038FFF500390039FFF5003A003BFFF4003B003CFFF4003C003DFFF4003D -003DFFF4003E003EFFF4003F003FFFF300400041FFF300410041FFF300420042FFF30043 -0043FFF300440044FFF200450046FFF200460047FFF200470047FFF200480048FFF20049 -0049FFF1004A004AFFF1004B004CFFF1004C004DFFF1004D004DFFF1004E004EFFF0004F -004FFFF000500051FFF000510052FFF000520052FFEF00530053FFEF00540054FFEF0055 -0055FFEF00560057FFEF00570058FFEE00580058FFEE00590059FFEE005A005AFFEE005B -005CFFEE005C005DFFEC005D005DFFEC005E005EFFEC005F005FFFEC00600060FFEC0061 -0062FFEB00620062FFEB00630063FFEB00640064FFEB00650065FFEB00660067FFEA0067 -0068FFEA00680068FFEA00690069FFEA006A006AFFEA006B006BFFE9006C006DFFE9006D -006DFFE9006E006EFFE9006F006FFFE900700070FFE800710072FFE800720072FFE80073 -0073FFE800740074FFE800750075FFE700760076FFE700770078FFE700780078FFE70079 -0079FFE7007A007AFFE6007B007BFFE6007C007DFFE6007D007DFFE6007E007EFFE6007F -007FFFE500800080FFE500810082FFE500820083FFE500830083FFE500840084FFE40085 -0085FFE400860086FFE400870088FFE400880088FFE400890089FFE3008A008AFFE3008B -008BFFE3008C008DFFE3008D008EFFE3008E008EFFE2008F008FFFE200900090FFE20091 -0091FFE200920093FFE200930093FFE100940094FFE100950095FFE100960096FFE10097 -0098FFE100980099FFE000990099FFE0009A009BFFE0009B009BFFE0009C009CFFE0009D -009EFFDF009E009EFFDF009F00A0FFDF00A000A0FFDF00A100A1FFDF00A200A3FFDE00A3 -00A4FFDE00A400A4FFDE00A500A6FFDE00A600A6FFDE00A700A7FFDD00A800A9FFDD00A9 -00A9FFDD00AA00ABFFDD00AB00ABFFDD00AC00ACFFDC00AD00AEFFDC00AE00AFFFDC00AF -00B0FFDC00B000B0FFDC00B100B1FFDB00B200B2FFDB00B300B4FFDB00B400B5FFDB00B5 -00B6FFDB00B600B6FFDA00B700B7FFDA00B800B9FFDA00B900BAFFDA00BA00BBFFDA00BB -00BBFFD900BC00BCFFD900BD00BDFFD900BE00BFFFD900BF00C0FFD900C000C1FFD800C1 -00C1FFD800C200C2FFD800C300C4FFD800C400C5FFD800C500C5FFD700C600C6FFD700C7 -00C7FFD700C800C8FFD700C900CAFFD700CA00CBFFD600CB00CCFFD600CC00CCFFD600CD -00CDFFD600CE00CFFFD600CF00D0FFD500D000D0FFD500D100D1FFD500D200D2FFD500D3 -00D3FFD500D400D5FFD400D500D5FFD400D600D7FFD400D700D7FFD400D800D8FFD400D9 -00DAFFD300DA00DBFFD300DB00DCFFD300DC00DCFFD300DD00DDFFD300DE00DEFFD200DF -00E0FFD200E000E0FFD200E100E2FFD200E200E2FFD200E300E3FFD100E400E5FFD100E5 -00E6FFD100E600E7FFD100E700E7FFD100E800E8FFD000E900E9FFD000EA00EBFFD000EB -00EBFFD000EC00ECFFD000ED00EDFFCF00EE00EEFFCF00EF00F0FFCF00F000F1FFCF00F1 -00F2FFCF00F200F2FFCE00F300F3FFCE00F400F4FFCE00F500F6FFCE00F600F7FFCE00F7 -00F7FFCD00F800F8FFCD00F900F9FFCD00FA00FBFFCD00FB00FCFFCC00FC00FDFFCC00FD -00FEFFCC00FE00FEFFCC00FF00FFFFCCB8FFC0401EB229323610B220B240B250B270B280 -B2A0B2B0B2D0B2E0B20AC0B2F0B202B8FFC04070B51718361F44010F561F56024F555F55 -026F54019F54AF54025153170452531604535215044A4952044649370447493204484932 -04493539043C3F32043D3F3D043E3F2104433F1D04423F5204413F5204403F52043F3532 -0432336404333534043534540434351E04D034E034F03403B8FFEEB3B4254836B8FFE0B3 -B4102336B8FFEE400DB4090F36B41A480476B386B302B8FFF0B3B3254836B8FFFA40FFB3 -092436B314480489881304706C7078020F9CDF9E02409D161936409C161B364097171936 -4096171B368685131F0F840F850F8E0F8F0F901F841F8E1F8F2F8E808580888F91908590 -8790880F40820910360F721F72024071090C360F6D0120C80120C7013FC6EFC60220C540 -C50200620100621062024061A061020F5B012D1411042C1425042B1439042A1413042914 -15041F141E042120430420143C04C91A45041A1B47041B1A3C041A143204151439041314 -480412141A0411141A0470140140144143360F0E2A1F0006010DC34B1F0CC24B1F0AC04B -1F09C04B1F05BC4B1F04BD4B1F03B94B1F02BA4B1F01B64B1F00B74B1FC3C22A1FC0BF2A -1FBD4056BC211FBAB9211FB7B6211FC2C3C40DBFC0C10DBCBDBE0CB9BABB0CB6B7B80C10 -BC80BC0240B980B9020FB63FB64FB67FB6040FB62FB63FB66FB67FB6BFB6CFB6FFB6080A -0937040C0D02050402030202010002500501B801FF858D8D1DB0964B5258B0801D59B808 -004B5458B001B0018E59B0084B5358B001B0018E59002B2B2B2B2B737473732B2B2B2B2B -2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB00345B006456861B006234473B00345B00E456861 -B00E2344B00E45B00F456861B00F23442B01B0144568B01423442B732B2B2B2B2B2B2B2B -2B2B2B2B2B2B2B2B7373737373737373732B732B732B2B2B2B2B73732B2B2B2B732B2B2B -2B00752B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73747373742B73742B400C3736 -26251F13120D0C0504022C20B003254523452361688A204568208A234460442D2C4B5258 -45441B2121592D2C202045684420B001602045B0467668188A4560442D2CB0122BB00225 -45B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C -60B0022523442121212D2CB100032545685458B0032545B0032545606820B004252344B0 -042523441BB00325204568208A2344B00325456860B003252344592D2CB0032520456820 -8A2344B00325456860B0032523442D2C4B525845441B2121592D2C462346608A8A462320 -468A608A61B8FF8062232010238AB14B4B8A70456020B0005058B00161B8FFBA8B1BB046 -8C59B0106068013A2D2C2045B003254652583F1B2111592D2C4B53234B515A5820458A60 -441B2121592D2C4B53234B515A58381B2121592D061E061405F005D1047C045D03DD0010 -0000FFE7FFE1FE78FE64FE590394001FFFFF009600AA00B900C600CEFFFFFFFFFFFFFFFF -00BC00C2FFFFFFFF007600B200C000CBFFFFFFFFFFFFFFFFFFFFFFFF0081009400A600CC -00DA00EFFFFFFFFFFFFFFFFF0098009E00AB00B0FFFFFFFFFFFFFFFFFFFFFFFF00900098 -009E00A400A900AE00B300BA00C3FFFF00880091009800A500ACFFFFFFFFFFFFFFFFFFFF -006F0087008F009B00A000D3011DFFFFFFFFFFFF00C3021401C2FFFFFFFF00E9000C02D1 -0173018E001A002C0044005C0073007E008600B200C8014C001A003D00440050005C0072 -0078009200B200B900C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003D0056005D006A -006E00B100B900C1FFFFFFFF002A003D00540064006A00B100B9FFFFFFFFFFFF0071007A -008900A100A700BB006F007A00870091009AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -008102210221007400E500B900CA019502C600AC00A700850614000A000005D1001F0000 -045D001F00000000FFE10000FE64FFF50000036202F402A2029100AF026A004C08000100 -0000000002D0000002D000000326012303AC00A8068C00C30516009B089C009505D00073 -022600A403A200B503A20093051600A7068C00D202E9009303A2009902E900FD03A2FFE2 -0516008905160116051600A1051600A70516004D051600BB051600890516009A0516007A -0516007103A2015A03A200E6068C00FE068C00F5068C010C045D00A0080000B00578001A -057C00C805960073062A00C8050F00C8049900C806340073060300C8035E008903A3002C -058B00CD047400C806BE00C805FC00C8064C007304D300C8064C0073059000C805780086 -04EE000005DB00B20578001A07E9005C057B004404EC0006057B007E03A200EF03A20046 -03A200AB068C00BA0516FFFC0516015404CE006804FC00B9042B006904FC006C04C4006A -02D0004404FC006C051000B9023200AF02C1FFC204BC00C1023200BB07C800B9051000B9 -04DB006A04FC00B904FC006C036A00B9042B006E0327003E051000B104BC003D068C0056 -04BC003C04BC003D0434005D051400AD03A2017A051400BB068C00BB0578001A0578001A -05960073050F00C805FC00C8064C007005DB00B204CE006804CE006804CE006804CE0068 -04CE006804CE0068042B006904C4006A04C4006A04C4006A04C4006A023200A00232FFEB -0232FFF502320005051000B904DB006A04DB006A04DB006A04DB006A04DB006A051000B1 -051000B1051000B1051000B1051600BB0456009A0516009F05160089051600AC045D00B9 -0516008904F600B90800009F0800009F07D000AA0516021D0516015A068C00F507E0000E -064C0073080000A1068C00D7068C00FE068C010C0516006C052200BE0516009505D100BB -068C009005A900710516008A045D0097045D0079068C006B07A4006804DB005D045D0071 -03260123068C00D2068C00860516FFDC068C00F305D10032052800A6052800AE068C00B2 -0578001A0578001A064C0073088F007807DA006A051600990800009903ACFFED03AC0096 -0226FFED022600A0068C00D2068C00AC04BC003D04EC000602E4FF9A0516000003A200BA -03A200C20500004405020044051600BB02E900FD0226FFF603ACFFF60C2C00950578001A -050F00C80578001A050F00C8050F00C8035E0089035E005D035E007E035E0089064C0073 -064C0073064C007305DB00B205DB00B205DB00B2023200BB05160136051600ED05160118 -05160113051602210516012D05160161051601560516019F05160132047E001802460018 -05780086042B006E057B007E0434005D03A2017A0634000E04E5006A04EC000604BC003D -04D800C804FC00B9068C00DC068C012304560123045600CF045600CF080000AB080000AB -0800008C0516003C0634007304FC006C035E008905780086042B006E05960073042B0069 -05960073042B006904FC006C0516FFFC02E900FD0578001A04CE00680578001A04CE0068 -062A00C8052E006C0634000E050F00C804C4006A050F00C804C4006A047400C8023200AB -047400C8025E00BB047400C803AB00BB05FC00C8051000B905FC00C8051000B9064C0073 -04DB006A059000C8036A00B9059000C8036A009205780086042B006E04EE00000327003E -04EE00000327003E05DB00B2051000B105DB00B2051000B1057B007E0434005D057B007E -0434005D048800C8064C0073068D006904FC006C04DD006A041A006D050B006A03F8000A -065200680516FFFC04FF0123045D009A094F00C806F7008904E900AF05D8000002E400D5 -047500D5089C00950296000F04D5009202D6008302D6008304D500B102D600700578001A -04CE006805960073042B006905960073042B0069050F00C804C4006A050F00C804C4006A -050F00C804C4006A0634007304FC006C0634007304FC006C0634007304FC006C060300C8 -051000B90603002005100013035E002C0232FFF2035E005F0232FFFC035E008002320001 -035E00890232008E03A3002C02C1FFC2058B00CD04BC00C104BC00C1047400C802320005 -05FC00C8051000B905FC00C8051000B9064C007304DB006A064C007304DB006A059000C8 -036A001B05780086042B006E04EE00000327003E05DB00B2051000B105DB00B2051000B1 -05DB00B2050B00B105DB00B2050B00B107E9005C068C005604EC000604BC003D026700B9 -0578001A04CE006807E0000E07A40068064C007304DB005D03A2015A07E9005C068C0056 -07E9005C068C005607E9005C068C005604EC000604BC003D0226FFED0516FFD005160089 -05BE00B1080000AB0800008C0800008A0800009901B00061051601610516021205160100 -057800070602000006F6000004510000070C000006070000074300000232FFCB0578001A -057C00C805A0001A050F00C8057B007E060300C8035E0089058B00CD057C001A06BE00C8 -05FC00C805310072064C0073060300C804D300C80561007604EE000004EC0006057B0044 -06F700B3068C006C035E007E04EC000604FC006C041A006D051000B9023200A0050D00B1 -04F600B904BC003D03A9006C051000B904FE0089023200BB04BC00C104BC003D051E00B9 -04BC003D0406006804DB006A050000B904100069050D00B104B80030069300B006820071 -02320005050D00B104DB006A050D00B106820071050F00C80657FFFF048800C8059B0073 -05780086035E0089035E007E03A3002C08F2001208D300C8068BFFFF058B00CD04EC0006 -060300C80578001A057C00C8057C00C8048800C805F7000A050F00C807C9002004ED0051 -060100C8060100C8058B00CD05E0001206BE00C8060300C8064C0073060300C804D300C8 -0596007304EE000004EC0006068D0069057B0044061700C805B2008E083E00C8085C00C8 -06440000075D00C8057200C8059C0061084600C805A6002C04CE006804EA007404C200B9 -03C500B904F9000904C4006A0662003404320041051F00B9051F00B904BC00C104F7001D -059200B9051900B904DB006A051900B904FC00B90446006A03F8000A04BC003D06BA006F -04BC003C052800B904D8008E070200B9071A00B90520000A065B00B9049100B904600053 -06B600B904CC004304C4006A0510001303C500B90460006A042B006E023200AF02320005 -02C1FFC20750001D075000B90510001304BC00C104BC003D051900B9048800C803C500B9 -080000CB096000C8051900B904560119045600EF045600E6045600B3045600E6045600F3 -045600C5000000000000000000000000000000000674007304DB006A060D00B2054700B1 -0000020900000221000001540000021D0516013605160003051601360516012505160142 -051601420516014205160125051602090516013605160142051601420516014205160142 -051601360578001A04CE00680578001A04CE00680578001A04CE00680578001A04CEFFE3 -0578001A04CE00680578001A04CE00680578001A04CE00680578001A04CE00680578001A -04CE00680578001A04CE00680578001A04CE00680578001A04CE0068050F00C804C4006A -050F00C804C4006A050F00C804C4006A050F00C804C4006A050F002904C4FFFC050F00C8 -04C4006A050F00C804C4006A050F00C804C4006A035E008902320096035E0089023200AF -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000064C007304DB006A064C0073 -04DB006A064C007304DB006A064C007304DBFFE5064C007304DB006A064C007304DB006A -064C007304DB006A0674007304DB006A0674007304DB006A0674007304DB006A06740073 -04DB006A0674007304DB006A05DB00B2051000B105DB00B2051000B1060D00B2054700B1 -060D00B2054700B1060D00B2054700B1060D00B2054700B1060D00B2054700B104EC0006 -04BC003D04EC000604BC003D04EC000604BC003D04EC000604BC003D04FC006C000000ED -0516008A0000001F00000380090E09000303050507070B07030404070703050304070707 -070707070707070404070707060A08070808070608080505070609080907090707070808 -090707070404040706060606060606030606030306030906060606040604060607060605 -060506070808080708090806060606060606060606060303030306060606060606060606 -07050707060507060909090606070A090907070707060607070607050507090606050707 -0707070606070808090A0907090404020207070607030604040606070302040E08070807 -070505050509090908080803060606060606060606060603070607050508060706070607 -070505050909090608060507060806080606060308060806080608070607060603060306 -040806080609060704070407060704070408060806070507050609070606050605090606 -050B09060703050B03050303050308060806080607060706070608060806080608060806 -050305030503050305030706060603080608060906090607040706070408060806080608 -06090707060308060A090906040907090709070706020607060909090902060606080809 -060908090308070607070805070809080709080706070707090905070605060306060505 -060603060606060506060506050907030606060707080608070505050A0A070707070807 -070607070906080807070908090807080707070708070909080907080907060606040606 -070506060606070606060606050609060705090907080606080606060406060303030909 -060606060505090B06050505050505050000000009060806000000000606060606060606 -060606060606060806080608060806080608060806080608060806080608060706070607 -060706070607060706070605030503000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000090609060906 -090609060906090609060906090609060906080608060806080608060806080607060706 -07060706060007000A0F0A000404040508070B0703050507080405040507070707070707 -0707070505080808060A070708080606080805050706090709070908070708070B070707 -0505050806060707050707040707030307030B0707070704060407060707060606050608 -070708060709080707070707070507070707030303030707070707070707070707050707 -060507060A0A0A0606080A090A080808070706070807070505080A070604080807080706 -06080707090B0A070A0505030308080607040605050606070403050F0706070606050505 -050909090808080306060606060606060606060307060706050806070607070808050505 -0A0A0A060807050706080508050706040707070708070806070607060306030605070707 -0709070804080407060704070408070807070607060609090707050705090606050C0906 -0704060B0306040406040707080508050607060706070807080708070807080705030503 -0503050305030707070603070707070907090708040706070408070807080708070B0707 -060307070A0A0907050B070B070B070706030607070A0A0A0A0206060607070906090909 -030707070607080507070907070908070707070709090507070507030707070507070307 -0607060507070507060909030707070906080608070505050B0B08070708070707060706 -0906080807070908090807080707090709070B0B080907080A0707070605060707050707 -0706070707070705050609070706090A0708060608060707050606030303090907070607 -06050A0C0705050505050505000000000907080700000000060606060606060606060606 -060606070707070707070707070707070707070707070707070707060706070607060706 -070607060706070503050300000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000009070907090709070907 -090709070907090709070907090708070807080708070807080708070706070607060706 -070007000B110B000404040509070C080305050709040504050707070707070707070705 -05090909060A080809090706090805050806090809070908080708080B08070805050509 -07070707060707040707030407030B070707070506040707090707060705070908080907 -080908070707070707060707070703030303070707070707070707070706070707060707 -0B0B0B0707090B090B090909070707080908070606090B07060409090709080707090808 -090C0B070B05050303090907070407050507070704030511080708070705050505090909 -08080803070707070707070707070603080608060509070707070709090606060B0B0B07 -090705080609060906070704080708070907090707070706030603060508070807090708 -05080508060704070408070807080608060609090707060705090707060D0A070804060C -040704040704080709060906070707070707090709070907080708070503050305030503 -05040807070603080708070907090708050806070408070807080708070B090707030807 -0B0B0907050B090B090B090707030707080B0B0B0B02070707080809060A090903080808 -070808050808090807090807070707080909050707060703070707050707030707070706 -07070607070909030707070907090609080505050D0C090808080808080608070B070808 -08080908090807090708090809080B0C090A07090B080707070508070906070707070707 -07070706050709070807090A080907070A0707070507060303040A0B0707070706050B0D -070606060606060600000000090708070000000007070707070707070707070707070708 -070807080708070807080708070807080708070807080707070707070707070707070707 -070707050305030000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000907090709070907090709070907 -090709070907090709070807080708070807080708070807070707070707070707000700 -0C120C00040405060A080D09030505080904050405080808080808080808080505090909 -070C0808090908070909050508070A090A080A08080709080D0807080505050A08080808 -060808040808030407030B0808080805070508070B0707070805080A08080908090A0908 -08080808080608080808030303030808080808080808080808070808080708070C0C0C08 -08090C0A0C090909080808090A080807070A0B080705090A080A0908080A08080A0D0D08 -0C06060303090A070704080505080808040306120808080808050505050A0A0A09090903 -0808080808080808080807030807080705090707070808090A0707070C0C0C0809080508 -07090609060808040808080809090908080808070307040706090809080A080805080508 -07070507050908090808070807070A0B0808060807090808070E0A070904070D04070404 -070408080906090608080808080809080908090809080908050305030503050305040807 -070703090809080A080A0808050807070509080908090809080D0B07070408080C0B0A08 -050D0B0D0B0D0B0707030808090C0C0C0C0308080808090A060B090B0308080808080905 -08080A09080A0908080707080B0A05070806080308070706080803080708070608080608 -070B0B030808080B080A0709080505050D0D0A0808090808080709080D07090908090A09 -0A09080907080B0809090D0E090B08090C080808070608080B0608080707080808080806 -07070B0709080B0C080907080B0708080608070303040B0B0807070807060C0E08070707 -07070707000000000A080908000000000808080808080808080808080808080808080808 -080808080808080808080808080808080808080808080808080808080808080808080805 -030503000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000A080A080A080A080A080A080A080A080A08 -0A080A080A0809080908090809080908090809080707070707070707080008000D140D00 -050505050A080D09030606090905070506080808080808080808080606090909070D0908 -090908080909050608070B090A080A08090909090D0909090606060B0808080808080805 -0808030407030B0808080805070608080B0708070807080B09090908090A090808080808 -080808080808030303030808080808080808080808070808080708080D0D0D0808090C0A -0D090909080808090B090807070B0B080705090B080B0908080B09090A0E0D080D060603 -03090B080905080606080808050306140908090808050505050A0A0A0909090308080808 -08080808080807030907090707090809080808090B0707070D0D0D080908050907090809 -080808050908090809080908080808070307040706090809080A08080508050907090609 -060908090809070907070A0B08080708070B0808070F0B080A05070E0408050508050908 -090809080808080808080908090809080908090805030503050305030604080707070309 -0809080A080A0808050907090609080908090809080D0B09080409080C0B0A08060D0B0D -0B0D0B0908030808090D0D0D0D0308080809090A060B0A0C030908090809090508090B09 -080A0908090909090B0B05090807080308080906080803080808080708080708080B0B03 -0808080B080A0709090505060F0D0B080909090808070A080D080909080A0B090A090809 -09090B090A090D0E0A0C08090D080808080608080B070808080809080808080807080B07 -09080B0C080907080B0808080608070303040C0D0808080807060D0F0807070707070707 -000000000A08090900000000080808080808080808080808080808090809080908090809 -080908090809080908090809080908080808080808080808080808080808080503050300 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000A080A080A080A080A080A080A080A080A080A080A08 -0A0809080908090909090909090909090908090809080908080008000E150E0005050606 -0B090F0A040606090B050705060909090909090909090906060B0B0B080E0A0A0A0B0908 -0B0A05060A080B0A0B080B0A0A090A0A0F0A090A0606060B090908090709080509090305 -08030D0909090906080609080B0908080906090B0A0A0A090A0B0A080808080808070808 -0808030303030909090909090909090909080909090809090E0E0E09090B0E0B0E0B0B0B -0909090A0B0A0908080B0D0908060B0B090B0A09090B0A0A0B0F0E090E060604040B0B08 -0905090606090909050406150A090A0909050505050B0B0B0A0A0A030909090909090909 -090908030A080A08060B09090808090B0B0808080E0E0E090B09050A080A070A07090905 -0A080A080B090B090809080803080408060A090A090B090A060A060A08090609060A090A -090A080A08080B0B09090709070B090908100C080A05080F0508050508050A080A070A07 -0908090809080B090B090B090A090A09050305030503050306050A080808030A090A090B -090B090A060A0809060A090A090A090A090F0B0908040A080E0D0B09060F0B0F0B0F0B09 -080409090A0E0E0E0E030909090A0B0C070C0B0C030A0A0A090A0A050A0A0B0A090B0A08 -0909090A0B0B05090907090309090906090903080809080709090709080B0B030909090B -090B080A0A050506100F0B0A090B0A0A0A080A090F090B0B0A0A0B0A0B0A080A09090B0A -0B0A0D0E0B0D0A0A0E0A0809080709080B07090908090A090909090807080B090A080B0C -090B08080C0808090708080303050D0D0908080908070E10090808080808080800000000 -0B090B0A000000000909090909090909090909090909090A080A080A080A080A080A080A -080A080A080A080A080A0809080908090809080908090809080908050305030000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000B090B090B090B090B090B090B090B090B090B090B090B090A09 -0A090B0A0B0A0B0A0B0A0B0A0908090809080908090009000F170F00050506070C0A100B -0407070A0C050705070A0A0A0A0A0A0A0A0A0A07070C0C0C080F0A0A0B0B09090C0B0507 -0A080D0B0C090C0A0A090B0A0F0A090A0707070C0A0A0909080909050909030509030F09 -0A090906080609090D0909090A070A0C0A0A0B090B0C0B09090909090908090909090303 -0303090A0A0A0A0A090909090A080A0A0A080A090F0F0F0A0A0C0F0C0F0C0C0C0A090A0B -0C0B0A08080C0E0A08060C0C0A0C0B0A0A0C0A0A0C100F0A0F070704040C0C0909050A07 -0709090A050407170A090A0909050505050C0C0C0B0B0B030A0A0A0A0A0A0A0A0A0A0803 -0A080A09070B09090909090C0C0808080F0F0F0A0C09050A080B080B08090A050A090A09 -0B0A0B090909090803080408070B090B090C0A0A060A060A08090609060B090B090A090A -09090C0D090A080A070B0A0908110D080B0508100509050509050A090B080B0809090909 -09090C090C090C090B090B09050305030503050307050A090908030B090B090C0A0C0A0A -060A0809060B090B090B090B080F0D0909050A090F0E0C0A070F0D0F0D0F0D0909040A0A -0B0F0F0F0F030A0A0A0A0B0D070D0B0D030A0A0B090A0B050A0A0D0B0A0C0B090A09090A -0D0C0509090809030909090709090309090909080A0A0809090B0D03090A090D090C090B -0A05050711110C0A0A0B0A0A0A090B090F090B0B0A0B0D0B0C0B090B090A0D0A0B0B0F10 -0C0E0A0B100A0909090709090D08090909090A090A09090807090D090A090D0E0A0C0908 -0D0909090708080303050E0E0909090909070F120908080808080808000000000C0A0C0A -000000000A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A090A090A090A090A090A090A090A -090A090A090A090909090909090909090909090909090905030503000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B090B090C0A -0C0A0C0A0C0A0C0A090909090909090909000A0010181000060606070D0A110C0407070A -0D060706070A0A0A0A0A0A0A0A0A0A07070D0D0D09100B0B0B0C0A090C0C07070B090D0C -0D0A0D0B0A0A0C0B110B0B0B0707070D0A0A0A0A080A0A060A0A050609050F0A0A0A0A06 -09070A090D0909090A070A0D0B0B0B0A0C0D0C0A0A0A0A0A0A080A0A0A0A050505050A0A -0A0A0A0A0A0A0A0A0A090A0A0A090A0A1010100A0A0D100D100D0D0D0A0A0A0C0D0B0A09 -090D0F0A09060D0D0A0D0C0A0A0D0B0B0D11100A10070704040D0D090B060A07070A0A0A -060407180B0A0B0A0A070707070D0D0D0C0C0C050A0A0A0A0A0A0A0A0A0A09030A090B09 -070C0A0B090A0A0D0D0909091010100A0C0A070A090B080B080A0A060B0A0B0A0C0A0C0A -0A0A0A0905090509070C0A0C0A0D0A0B060B060A090A070A070C0A0C0A0B090B09090D0D -0A0A090A070D0A0A09130E0B0C060911050A06060A060B0A0B080B080A0A0A0A0A0A0C0A -0C0A0C0A0C0A0C0A070507050705070507060B090909050C0A0C0A0D0A0D0A0B060A090A -070C0A0C0A0C0A0C0A110D0B09050B0A100F0D0A07110D110D110D0B09040A0A0B101010 -10030A0A0A0B0C0E090E0C0E050B0B0B0A0B0C070B0B0D0C0A0D0C0A0B0A0B0B0D0D070B -0A090A050A0A09070A0A0509090A09080A0A080A090D0D050A0A0A0D0A0D090B0A070707 -12120D0B0B0B0B0B0B090C0A110A0C0C0B0C0D0C0D0C0A0B0A0B0D0B0C0B0F100D0E0B0B -110B0A0A0A080A0A0D090A0A090A0B0A0A0A0A0907090D090A0A0D0E0A0C09090D0A0A0A -0809090505060F0F0A09090A090810130A09090909090909000000000D0A0D0B00000000 -0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B -0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0705070500000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0A0C0A0D0B0D0B0D0B -0D0B0D0B0B090B090B090B090A000A00111A1100060607080E0B120C0508080B0E060806 -080B0B0B0B0B0B0B0B0B0B08080E0E0E09110C0C0C0D0B0A0D0D08080C090E0D0D0A0D0C -0C0A0C0C110C0A0C0808080E0B0B0A0B090B0A060B0B05060A05110B0A0B0B0709070B0A -0E0A0A090B080B0E0C0C0C0B0D0D0C0A0A0A0A0A0A090A0A0A0A050505050B0A0A0A0A0A -0B0B0B0B0B090B0B0B090B0B1111110B0B0E110D110E0E0E0B0B0B0C0E0C0B09090E100A -09070E0E0B0E0C0B0B0E0C0C0D12110B11080805050E0E0A0A060B08080B0B0B0605081A -0C0B0C0B0B080808080D0D0D0C0C0C050B0B0B0B0B0B0B0B0B0B0A050C090C09080D0A0A -0A0A0B0E0E0909091111110B0D0B080C090C090C090B0B060C0A0C0A0D0B0D0B0A0B0A09 -05090509080D0B0D0B0D0A0C070C070C090A070A070C0B0C0B0C090C090A0D0E0B0A080B -080D0B0B09140F0A0C060912060A06060A060C0A0C090C090B0A0B0A0B0A0D0B0D0B0D0B -0D0B0D0B080508050805080508060C0A0A09050D0B0D0B0D0A0D0A0C070C090A070C0B0C -0B0C0B0C0B110E0A0A050C0A11100D0A08110E110E110E0A0A050B0B0C11111111040B0B -0B0C0D0F090F0D10050C0C0C0B0C0D080C0C0E0D0B0D0D0A0B0A0A0C0F0E080A0B080B05 -0B0B0A080B0B050A0A0B0A090A0B090B0A0E0E050B0A0B0E0B0D0A0C0C08080813130E0C -0A0D0C0C0C0A0D0B110A0D0D0C0D0E0D0D0D0A0C0A0A0E0C0D0C12120D100C0C120C0A0A -0A080B0A0E080B0B0A0B0C0B0A0B0B09080A0D0A0C0A0F0F0B0E0A090E0A0A0B08090905 -050610100B0A0A0B0A0811140B09090909090909000000000D0A0D0B000000000B0B0B0B -0B0B0B0B0B0B0B0B0B0B0B0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B -0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A080508050000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000D0A -0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0B0C0B0D0B0D0B0D0B0D0B0D0B -0A0A0A0A0A0A0A0A0B000B00121B1200060607080F0B130D0508080B0F070807080B0B0B -0B0B0B0B0B0B0B08080F0F0F0A120C0C0D0E0B0A0E0E08080C0A0F0D0E0B0E0D0C0B0D0C -120C0B0C0808080F0B0B0B0B090B0B060B0B05060B05120B0B0B0B0809070B0B0F0B0B09 -0B080B0F0C0C0D0B0D0E0D0B0B0B0B0B0B090B0B0B0B050505050B0B0B0B0B0B0B0B0B0B -0B0A0B0B0B0A0B0B1212120B0B0F120E120F0F0F0B0C0B0D0F0D0B0A0A0F110B0A070F0F -0B0F0D0C0C0F0C0C0E13120B12080805050F0F0B0B070B08080B0B0B0705081B0C0B0C0B -0B080808080E0E0E0D0D0D050B0B0B0B0B0B0B0B0B0B0A050C090C09080E0B0B0B0B0B0F -0F0A0A0A1212120B0E0B080C090D090D090B0B070C0B0C0B0E0C0E0B0B0B0B0A050A050A -080D0B0D0B0E0B0D080D080C090B070B070D0B0D0B0C090C090A0E0E0B0B090B090E0B0B -0A15100B0D070A13060B06060B060C0B0D090D090B0B0B0B0B0B0E0B0E0B0E0B0E0B0E0B -080508050805080508060C0B0B0A050D0B0D0B0E0B0E0B0D080C090B070D0B0D0B0D0B0D -0B120F0B0B050C0B12110E0B08120F120F120F0B0B050B0B0D12121212040B0B0B0C0E10 -0A100E10050C0C0D0B0C0E080C0C0F0D0C0E0E0B0C0B0B0C100E080B0B090B050B0B0B08 -0B0B050B0B0B0B090B0B090B0B0F0F050B0B0B0F0B0E0A0D0C08080814140F0C0B0E0C0C -0C0A0D0B120B0E0E0C0D0F0E0E0E0B0D0B0B0E0C0E0D13130E110C0D130D0B0B0B080B0B -0E090C0C0B0B0D0B0B0B0B0A090B0F0B0C0B10100C0E0A0A0F0B0B0B080A090505061010 -0B0B0B0B0A0812150B0A0A0A0A0A0A0A000000000E0B0D0B000000000B0B0B0B0B0B0B0B -0B0B0B0B0B0B0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0B0B0B0B0B -0B0B0B0B0B0B0B0B0B0B0B08050805000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000E0B0E0B0E0B -0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0B0B0B0B -0B0B0B0B0B000B00131D130007070709100C140E0509090C10070907090C0C0C0C0C0C0C -0C0C0C09091010100A130D0D0D0F0C0B0F0E08090D0B100E0F0B0F0D0D0C0E0D130D0C0D -090909100C0C0B0C0A0C0B070C0C06070B06120C0C0C0C080A070C0B100B0B0A0C090C10 -0D0D0D0C0E0F0E0B0B0B0B0B0B0A0B0B0B0B060606060C0C0C0C0C0C0C0C0C0C0C0A0C0C -0C0A0C0C1313130C0C10130F131010100C0C0C0E100D0C0A0A10120C0A0710100C100E0C -0C100D0D0F14130C130909050510100B0C070C09090C0C0C0705091D0D0C0D0C0C080808 -080F0F0F0E0E0E060C0C0C0C0C0C0C0C0C0C0B060D0A0D0A090F0C0C0B0C0C10100A0A0A -1313130C0F0C080D0A0D0A0D0A0C0C070D0B0D0B0F0C0F0C0B0C0B0B060B060B090E0C0E -0C0F0C0D080D080D0A0C070C070E0C0E0C0D0A0D0A0B0F100C0C0A0C090F0C0C0A16110C -0E070B14060B07070B070D0B0D0A0D0A0C0B0C0B0C0B0F0C0F0C0F0C0E0C0E0C08060806 -0806080609070D0B0B0B060E0C0E0C0F0C0F0C0D080D0A0C070E0C0E0C0E0C0E0C13100C -0B060D0B13120F0C091310131013100C0B050C0C0E13131313040C0C0C0D0E110A110E11 -060D0D0D0C0D0E080D0D100E0C0F0E0B0D0C0C0D110F080C0C0A0C060C0C0B090C0C060B -0B0C0B0A0C0C0A0C0B100F060C0C0C0F0C0F0B0D0D0808091515100D0C0E0D0D0D0B0E0C -120C0E0E0D0E100E0F0E0B0D0C0C100D0E0E14140F110D0D140D0B0C0B090C0B0F0A0C0C -0B0C0D0C0C0C0C0A090B100B0D0C11110C0F0B0A100B0B0C090A0A06060711110C0B0B0C -0B0913160C0A0A0A0A0A0A0A000000000F0C0E0C000000000C0C0C0C0C0C0C0C0C0C0C0C -0C0C0C0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0C0B0C0B0C0B0C0B0C -0B0C0B0C0B0C0B0806080600000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000F0C0F0C0F0C0F0C0F0C -0F0C0F0C0F0C0F0C0F0C0F0C0F0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0C0B0C0B0C0B0C0B -0C000C00141E140007070809100D160F0509090D10070907090D0D0D0D0D0D0D0D0D0D09 -091010100B140E0E0E0F0D0C100F08090E0B110F100C100E0E0C0F0E140E0C0E09090910 -0D0D0C0C0A0C0C070C0D06070C06130D0C0C0C090A080D0C100C0C0B0D090D100E0E0E0D -0F100F0C0C0C0C0C0C0A0C0C0C0C060606060D0C0C0C0C0C0D0D0D0D0D0B0D0D0D0B0D0C -1414140D0D101310141010100D0D0D0F100E0D0B0B10130C0B0810100D100F0D0D100E0E -1015140D140909050510100C0C070D09090D0D0D0705091E0E0D0E0D0D08080808101010 -0F0F0F060D0D0D0D0D0D0D0D0D0D0B060E0A0E0B09100C0C0C0C0C10100B0B0B1414140D -100C080E0A0E0A0E0A0C0D070E0C0E0C0F0D100D0C0D0C0B060B060B090F0D0F0D100C0E -090E090E0A0C080C080F0D0F0D0E0B0E0B0B10100C0C0A0D0A100D0C0B17110C0F070B16 -060C07070C070E0C0E0A0E0A0D0C0D0C0D0C100C100C100C0F0D0F0D0806080608060806 -09070E0C0C0B060F0D0F0D100C100C0E090E0A0C080F0D0F0D0F0D0F0D14100C0C060E0C -1313100C091410141014100C0C050D0D0E14141414040D0D0D0E0F110B120F12060E0E0E -0D0E0F080E0E110F0D100F0C0D0C0C0E1110080C0C0A0D060D0C0C090D0C060C0C0D0C0A -0C0D0A0D0C1010060D0C0D100D100B0E0E0808091616100E0C0F0E0E0E0B0F0D130C0F0F -0E0F110F100F0C0E0C0C100E0F0E151510120E0E150E0C0C0C090C0C100A0D0D0C0C0E0D -0C0D0C0B0A0C110C0D0C12120D100B0B110C0C0D090B0A06060712120D0C0C0D0B091417 -0D0B0B0B0B0B0B0B00000000110C0F0D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E -0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0D0C0D0C0D0C0D0C0D0C0D0C0D -0C0D0C080608060000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000100C100C100C100C100C100C100C -110C110C110C110C110C0F0D0F0D0F0D0F0D0F0D0F0D0F0D0C0C0C0C0C0C0C0C0C000D00 -152015000707080A110D170F060A0A0D11080A080A0D0D0D0D0D0D0D0D0D0D0A0A111111 -0B150E0E0F100D0C1010080A0F0C1210110D110F0E0D0F0E150E0D0E0A0A0A110D0D0D0D -0B0D0D070D0D06070C06140D0D0D0D090B080D0C110C0C0B0D0A0D110E0E0F0D10110F0D -0D0D0D0D0D0B0D0D0D0D060606060D0D0D0D0D0D0D0D0D0D0D0B0D0D0D0B0D0D1515150D -0D111411151111110D0D0D0F110F0D0B0B11140D0B0811110D110F0E0E110E0E1116150D -150A0A060611110C0D080D0A0A0D0D0D08060A200E0D0E0D0D080808081111110F0F0F06 -0D0D0D0D0D0D0D0D0D0D0C060E0B0E0B0A100D0D0C0D0D11110B0B0B1515150D100D080E -0B0F0B0F0B0D0D080E0D0E0D100E100D0D0D0D0C060C060C0A100D100D110D0F090F090E -0B0D080D080F0D0F0D0E0B0E0B0C11110D0D0B0D0A110D0D0B18120D0F080C17070D0707 -0D070E0D0F0B0F0B0D0D0D0D0D0D100D100D100D100D100D08060806080608060A070F0C -0C0C06100D100D110D110D0F090E0B0D080F0D0F0D0F0D0F0D15110D0C060E0D1414110D -0A1511151115110D0C060D0D0F15151515040D0D0D0E10120B131013060E0E0F0D0E1008 -0F0E12100E11100D0E0D0D0E1211080D0D0B0D060D0D0C0A0D0D060C0C0D0C0B0D0D0B0D -0C1111060D0D0D110D110C0F0E08080A1717110F0D100E0E0E0C100D140D10100F0F1210 -11100D0F0D0D110E100F161610130E0F160F0D0D0C0A0D0D110B0D0D0C0D0F0D0D0D0D0B -0A0C120C0E0D12130D110C0B120D0D0D0A0B0B06060713130D0C0C0D0C0A15190D0B0B0B -0B0B0B0B00000000120D100D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0D0E0D0E -0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D08 -060806000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000110D110D110D110D110D110D110D120D120D -120D120D120D0F0D0F0D100D100D100D100D100D0D0C0D0C0D0C0D0C0D000D0016211600 -0808090A120E1810060A0A0E12080A080A0E0E0E0E0E0E0E0E0E0E0A0A1212120C160F0F -0F110E0D11110A0A0F0C1310110D110F0F0E100F160F0E0F0A0A0A120E0E0D0E0B0E0D08 -0E0E06080D06150E0D0E0E090B090E0D120D0D0C0E0A0E120F0F0F0E1011100D0D0D0D0D -0D0B0D0D0D0D060606060E0D0D0D0D0D0E0E0E0E0E0C0E0E0E0C0E0E1616150E0E121511 -161212120E0E0E1012100E0C0C12150D0C0912120E12100E0E120F0F1118160E160A0A06 -0612120D0E080E0A0A0E0E0E08060A210F0E0F0E0E0A0A0A0A111111101010060E0E0E0E -0E0E0E0E0E0E0C060F0B0F0C0A110D0E0D0D0E12120C0C0C1616160E110E0A0F0B0F0B0F -0B0E0E080F0D0F0D110E110E0D0E0D0C060C070C0A100E100E110D0F090F090F0B0E090E -09100E100E0F0C0F0C0C11120E0D0B0E0B110E0E0C1A130E10080C18070D08080D080F0D -0F0B0F0B0E0D0E0D0E0D110E110E110E110E110E0A060A060A060A060A080F0D0D0C0610 -0E100E110D110D0F090F0B0E09100E100E100E100E16120E0D070F0D1515110D0A161216 -1216120E0D060E0E1016161616050E0E0E0F11130C131114060F0F0F0E0F110A0F0F1310 -0E11110D0F0E0E0F13120A0E0E0B0E060E0E0D0A0E0E060D0D0E0D0B0D0E0B0E0D121206 -0E0D0E120E110C0F0F0A0A0A1918120F0E110F0F0F0C100E150E11110F10131111110D0F -0E0E120F1110171711140F0F17100D0E0D0A0E0D120C0E0E0D0E0F0E0D0E0E0C0B0D130D -0E0D13140E110D0C120D0D0E0A0C0B06060814140E0D0D0E0C0A161A0E0C0C0C0C0C0C0C -00000000120D110F000000000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0D0F0D0F0D0F0D0F -0D0F0D0F0D0F0D0F0D0F0D0F0D0F0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0A060A0600 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000110D110D110D110D110D110D110D120D120D120D120D -120D100E100E110F110F110F110F110F0E0D0E0D0E0D0E0D0E000E00172317000808090B -130F1911060A0A0F13080A080A0F0F0F0F0F0F0F0F0F0F0A0A1313130D17101010120F0D -12110A0A100D1311120E1210100E111017100E100A0A0A130F0F0E0E0C0E0E080E0F0608 -0E06160F0E0E0E0A0C090F0E130E0E0C0F0A0F131010100F1112110E0E0E0E0E0E0C0E0E -0E0E060606060F0E0E0E0E0E0F0F0F0F0F0C0F0F0F0D0F0E1717160F0F13161217131313 -0F0F0F1113100F0D0D13160E0D0913130F13110F0F1310101219170F170B0B060613130E -0E080F0A0A0E0E0F08060B23100F100F0F0A0A0A0A121212111111060F0F0F0F0F0F0F0F -0F0F0D06100C100C0A120E0E0E0E0E13130C0C0C1717170F120E0A100C100C100C0E0F08 -100E100E120F120F0E0F0E0D060D070D0B110F110F120E100A100A100C0E090E09110F11 -0F100C100C0D12130E0E0C0F0B120F0E0D1B140E11080D19070E08080E08100E100C100C -0F0E0F0E0F0E120E120E120E110F110F0A060A060A060A060A08100E0E0D06110F110F12 -0E120E100A100C0E09110F110F110F110F17130E0E07100E1616120E0A1713171317130E -0E060F0F1117171717050F0F0F1011140C141115061010100F10110A101013110F12110E -0F0E0E1014130A0E0E0C0F060F0E0E0B0F0E060E0E0F0E0C0E0E0C0F0E1313060F0E0F13 -0F120D10100A0A0A1A1913100E111010100D110F160E11111011131112110E100E0E1310 -121018181215101018100E0E0E0B0E0E120C0F0F0E0E100F0E0F0E0C0B0E130E0F0E1414 -0F120D0D130E0E0F0B0D0C06060815150F0E0E0F0D0B171B0F0C0C0C0C0C0C0C00000000 -130E1110000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E10 -0E100E100E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A060000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000120E120E120E120E120E120E120E130E130E130E130E130E110F -110F111011101110111011100E0E0E0E0E0E0E0E0E000F00182518000808090B140F1A11 -060B0B0F14090B090B0F0F0F0F0F0F0F0F0F0F0B0B1414140D18101011130F0E13120A0B -110D1412130E1311100F121018100F100B0B0B140F0F0E0F0D0F0E080F0F06080E06170F -0F0F0F0A0D090F0E140E0E0D0F0B0F141010110F1213120E0E0E0E0E0E0D0E0E0E0E0606 -06060F0F0F0F0F0F0F0F0F0F0F0D0F0F0F0D0F0F1818170F0F141713181414140F0F0F11 -14110F0D0D14170F0D0914140F14110F0F141010131A180F180B0B060614140E0F090F0B -0B0F0F0F09060B25100F100F0F0A0A0A0A131313121212060F0F0F0F0F0F0F0F0F0F0D06 -100D100D0B130F0F0E0F0F14140D0D0D1818180F130F0A100D110D110D0F0F09100E100E -1310130F0E0F0E0D060D070D0B120F120F130F110A110A100D0F090F09120F120F100D10 -0D0E13140F0F0C0F0C130F0F0D1C150F12090D1A080F09090F09100E110D110D0F0E0F0E -0F0E130F130F130F120F120F0A060A060A060A060B08110E0E0D06120F120F130F130F11 -0A100D0F09120F120F120F120F18140F0E07100E1717130F0B1814181418140F0E060F0F -1118181818050F0F0F1012150D151216061010110F10120A111014121013120E100F0F10 -15140A0F0F0C0F060F0F0E0B0F0F060E0E0F0E0C0F0F0C0F0E1414060F0F0F140F130E11 -100A0A0B1B1A14110F121010100E120F170F12121112141213120E110F0F141012111919 -1316101119110E0F0E0B0F0E130D0F0F0E0F110F0F0F0F0D0C0E140E0F0F15150F130E0D -140E0E0F0B0D0D06060816160F0E0E0F0E0B181C0F0D0D0D0D0D0D0D00000000130F1210 -000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E100E100E10 -0E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A06000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000130F130F130F130F130F130F130F130F130F130F130F130F120F120F1210 -12101210121012100F0E0F0E0F0E0F0E0F000F001B291B000A0A0B0C16111D14070C0C11 -160A0C0A0C111111111111111111110C0C1616160F1B12131315111015140B0C130F1714 -15101513121114121B1311130C0C0C16111110110E11100A1111070910071A111011110C -0E0B11101610100E110C1116121213111415141010101010100E10101010070707071110 -1010101011111111110F1111110F11111B1B1A1111161B151B161616111111141613110F -0F161A100F0B16161116141111161212151D1B111B0C0C0707161610110A110C0C111111 -0A070C2912111211110B0B0B0B15151514141407111111111111111111110F07120E130E -0C15111110101116160F0F0F1B1B1B1115110B120E130E130E11110A1210121015111511 -1011100F070F080F0C141114111510130C130C120E110B110B14111411130E130E0F1516 -11100E110D1511110F1F1811140A0F1D09100A0A100A1210130E130E1110111011101511 -15111511141114110B070B070B070B070C091310100F071411141115101510130C120E11 -0B14111411141114111B1611100812101B1A15100C1B161B161B161110071111131B1B1B -1B061111111214180F181419071213131113140B13131714121514101211111318160B11 -110E11071111100C111107101011100E10110E11101616071110111611150F13120B0B0C -1E1E161311141213130F14111A11141413141714151410131111161315131C1C15191213 -1C131011100D1110160E1111101113111011110E0D1017101110181811150F0F17101011 -0D0F0E0707091919111010110F0D1B20110F0F0F0F0F0F0F000000001610141200000000 -111111111111111111111111111111121012101210121012101210121012101210121012 -101210111011101110111011101110111011100B070B0700000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000015101510151015101510151015101610161016101610161014111411141214121412 -141214121110111011101110110011001D2C1D000A0A0B0D18121F15080D0D12180B0D0B -0D121212121212121212120D0D181818101D14141416121116160D0D1410181617111714 -141215141D1412140D0D0D18121211120F12110A1212090A11091C121212120C0F0B1211 -1811110F120D1218141414121617151111111111110F1111111109090909121212121212 -1212121212101212121012121D1D1C1212181D171D181818121312151815121010181C12 -100B18181218151313181414171F1C121D0D0D0808181811120A120D0D1212120B080D2C -14121412120D0D0D0D17171715151509121212121212121212121009140F140F0D161212 -11121218181010101D1D1D1216120D140F140F140F12120B141114111613161211121110 -091009100D161216121712140C140C140F120B120B15121512140F140F10171812120F12 -0E17121210221912150A101F09120A0A120A1411140F140F121112111211161216121612 -161216120D090D090D090D090D0A14111110091612161217121712140C140F120B151215 -12151215121D1812110914111D1C17120D1D181D181D181211081212151D1D1D1D061212 -12141619101A161A091414141214160D14141816131716111412121419180D12120F1209 -1212110D121209111113110F12120F12111818091212121812171014140D0D0D20201814 -12161414141016121C12161614151816171611141212181416151E1E171B14141E141112 -110E1211170F1313111214121212120F0E1118111312191A13171110181111120E100F09 -090A1B1B12111112100E1D22121010101010101000000000171216130000000012121212 -121212121212121212121214111411141114111411141114111411141114111411141112 -1112111211121112111211121112110D090D090000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000001712 -171217121712171217121712171217121712171217121512151216131613161316131613 -121112111211121112001200203120000B0B0D0F1A142217090F0F141A0C0F0C0F141414 -141414141414140F0F1A1A1A112016161619141219180D0F16121B181913191616141716 -201614160F0F0F1A141413141114130B1414090B13091F141314140E110D14131A131311 -140F141A1616161418191713131313131311131313130909090914131313131314141414 -141114141411141420201F14141A1F19201A1A1A141514171A171411111A1F13110D1A1A -141A1715151A161619221F14200F0F09091A1A13140C140F0F1414140C090F3116141614 -140D0D0D0D19191917171709141414141414141414141209161116110F1914141313141A -1A1111112020201419140D16111611161114140C16131613191519141314131209120912 -0F181418141913160E160E1611140D140D171417141611161112191A1413101410191414 -11251C14170C12220A130B0B130B16131611161114131413141319141914191418141814 -0D090D090D090D090F0B16131312091814181419131913160E1611140D17141714171417 -14201A14130A16131F1F19130F201A201A201A141309141417202020200714141416181C -111C181D091616171416180D16161B1815191813161414161C1A0D14141014091414130F -141409131314131013141014131A1A091413141A14191216160D0D0F24231A1614181616 -161218141F14181816181B181918131614141A1618172121191D161621171314130F1413 -1A111414131416141314141110131B1315131C1C151912121B1313140F121109090B1D1D -14131314120F20261411111111111111000000001A131815000000001414141414141414 -141414141414141613161316131613161316131613161316131613161316131413141314 -13141314131413141314130D090D09000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000191319131913 -19131913191319131A131A131A131A131A13171417141815181518151815181514131413 -1413141314001400213221000C0C0D0F1B152418090F0F151B0C0F0C0F15151515151515 -1515150F0F1B1B1B12211717171915131A190D0F17121C191A141A171714181721171417 -0F0F0F1B151514151115140C1515090B140920151415150E110D15141B141411150F151B -17171715191A181414141414141114141414090909091514141414141515151515121515 -1512151421212015151B201A211B1B1B151515181B171512121B2014120D1B1B151B1815 -151B17171A232015210F0F09091B1B14140C150F0F1515150C090F3217151715150D0D0D -0D1A1A1A18181809151515151515151515151309171117110F1A14141414151B1B121212 -212121151A150D17111711171115150C1714171419151A151415141209120A120F191519 -151A14170E170E1711140D140D1815181517111711131A1B15141115101A151512261D14 -180C12240B140C0C140C1714171117111514151415141A151A151A15191519150D090D09 -0D090D090F0B1714141209191519151A141A14170E1711140D1815181518151815211B14 -140A171420201A140F211B211B211B141409151518212121210715151517191D121D191E -091717171517190D17171C19151A1914161414171D1B0D14151115091514140F15150914 -1415141114151115131B1B091514151B151A1317170D0D0F25241B171419171717131915 -2014191917181C191A19141714141B17191822221A1E161722171414141015141A111515 -141417151415151210141C1415141D1D151A13121C14141510121109090B1E1E15141415 -131021271512121212121212000000001B14191600000000151515151515151515151515 -151515171417141714171417141714171417141714171417141714151415141514151415 -141514151415140D090D0900000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000001A141A141A141A141A14 -1A141A141B141B141B141B141B1418151815191619161916191619161414141414141414 -15001500253825000D0D0F111E18281B0A1111181E0D110D111818181818181818181811 -111E1E1E142519191A1D17151D1C10111A151F1C1D161D1A19171B19251917191111111E -181816171317160D17170A0D160A241716171710130F17161E1616131711171E19191A17 -1C1D1B16161616161613161616160A0A0A0A171616161616171717171814181818141817 -25252418181E241D251E1E1E1818181B1E1A1814141E2316140F1E1E181E1B18181E1919 -1D2824182511110A0A1E1E16170D1811111717180D0A11381917191717101010101D1D1D -1B1B1B0A18181818181818181818150A19131913111D17171616171E1E14141425252518 -1D171019131A131A1317180D191619161D181D17161716150A150B15111C171C171D161A -101A101913170F170F1B171B1719131913151D1E17171317121D1817142B20171B0D1528 -0C160D0D160D19161A131A131716171617161D171D171D171C171C17100A100A100A100A -110D1A1616150A1C171C171D161D161A101913170F1B171B171B171B17251E17160B1916 -24231D1611251E251E251E17160A18181B2525252508181818191C2014211C220A19191A -17191C101A191F1C181D1C1619171719201E10171713170A1717161117170A1616181613 -16171317161E1E0A1716171E171D151A1910101129291E1A171C191919151C1724171C1C -1A1B1F1C1D1C161A17171E191C1A26271D22191A261A1617161117161E13181816171A18 -1618171412161F1618162021181D15141F1616171114130A0A0D2222171616181511252B -1814141414141414000000001E161C180000000018181818181818181818181818181819 -161916191619161916191619161916191619161916191617161716171617161716171617 -161716100A100A0000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000001D161D161D161D161D161D161D16 -1E161E161E161E161E161B171B171C181C181C181C181C18171617161716171617001800 -2A402A000F0F1113221B2D1F0B13131B220F130F131B1B1B1B1B1B1B1B1B1B1313222222 -172A1D1D1D201B18212012131D17231F2119211D1D1A1F1D2A1D1A1D131313221B1B191A -161A190F1A1B0C0E190C291B191A1A1216111B19221919161B131B221D1D1D1B1F211F19 -191919191916191919190C0C0C0C1B19191919191B1B1B1B1B171B1B1B171B1A2A2A291B -1B222A212A2222221B1B1B1F221E1B1717222819171122221B221F1B1B221D1D212D291B -2A13130B0B2222191A0F1B13131A1A1B0F0B13401D1B1D1B1B121212122121211F1F1F0C -1B1B1B1B1B1B1B1B1B1B180C1D161D1613211A1A19191A22221717172A2A2A1B211A121D -161D161D161A1B0F1D191D19201B211B191B19170C170C17131F1B1F1B21191D121D121D -161A111A111F1B1F1B1D161D161821221A1A161A15211B1A1731251A1F0F172D0E190F0F -190F1D191D161D161B191B191B19211A211A211A201B201B120C120C120C120C130E1D19 -19170C1F1B1F1B211921191D121D161A111F1B1F1B1F1B1F1A2A221A190D1D192A282119 -132A222A222A221A190B1B1B1E2A2A2A2A091B1B1B1D2025172520260C1D1D1E1B1D2012 -1D1D231F1B2120191C1A1A1D2522121A1A161B0C1B1A19131B1A0C19191B1915191A151B -1923220C1B191B221B21181D1D1212132F2E221D1A201D1D1D181F1B291A20201D1F2320 -2120191D1A1A221D201E2B2C21271D1D2B1E191A19141A1922161B1B191A1D1B191B1A16 -151923191B1925251B2118172319191B1417160C0C0E26261B19191B18142A311B171717 -17171717000000002219201C000000001B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1D191D191D -191D191D191D191D191D191D191D191D191D191B191B191B191B191B191B191B191B1912 -0C120C000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000211921192119211921192119211922192219 -2219221922191F1B1F1B201C201C201C201C201C1A191A191A191A191A001B002E462E00 -10101215261D32210C15151D26111511151D1D1D1D1D1D1D1D1D1D1515262626192E1F20 -20231D1A24231215201A2722241C24201F1C221F2D201C20151515261D1D1C1D181D1B10 -1D1D0C101B0C2D1D1C1D1D1418121D1B261B1B181D151D261F1F201D2224221C1C1C1C1C -1C181B1B1B1B0C0C0C0C1D1C1C1C1C1C1D1D1D1D1D191D1D1D191D1D2E2E2D1D1D262E24 -2E2626261D1E1D2126211D1919262C1C191226261D26211E1E261F1F24312D1D2E15150C -0C26261B1C111D15151D1D1D110C15461F1D1F1D1D121212122424242222220C1D1D1D1D -1D1D1D1D1D1D1A0C1F18201815241C1C1B1C1D26261919192E2E2E1D241D121F18201820 -181D1D111F1C1F1C231E241D1B1D1B1A0C1A0E1A15221D221D241C201420141F181C121C -12221D221D201820181A24261D1C181D17241D1D1936281C22111A320F1C10101C101F1C -201820181D1B1D1B1D1B241D241D241D231D231D120C120C120C120C1510201B1B1A0C22 -1D221D241C241C20141F181C12221D221D221D221D2D261C1B0E1F1C2E2C241C152D262D -262D261C1B0C1D1D212E2E2E2E0A1D1D1D1F23281929232A0C1F20201D20231220202722 -1E24231C1F1C1C202826121C1D181D0C1D1D1B151D1D0C1B1B1D1B171C1D171D1B26250C -1D1C1D251D241A201F121215333326201C231F20201A221D2D1C23232022272324231C20 -1C1C262023212F30242A1F2030201C1C1B161D1B25181D1D1B1D201D1C1D1D19171B271B -1E1C28291D251A19271C1B1D1619180C0C102A2A1D1B1B1D1A162E361D19191919191919 -00000000251C231E000000001D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1F1C1F1C1F1C1F1C1F -1C1F1C1F1C1F1C1F1C1F1C1F1C1F1C1D1B1D1B1D1B1D1B1D1B1D1B1D1B1D1B120C120C00 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000241C241C241C241C241C241C241C251C251C251C251C -251C221D221D231E231E231E231E231E1C1B1C1B1C1B1C1B1D001D00324C320012121417 -292036240D17172029121712172020202020202020202017172929291B3222222327201D -27261517231C2A25271E2723221F252231221F221717172920201E1F1A1F1E121F200F11 -1E0F31201E1F1F151A14201E291E1E1A20172029222223202527251E1E1E1E1E1E1A1E1E -1E1E0F0F0F0F201E1E1E1E1E20202020201B2020201B201F323231202029322732292929 -202020242923201B1B29301E1B1429292029242020292222273531203217170D0D29291E -1F122017171F1F20120D174C2220222020151515152727272525250F2020202020202020 -20201C0F221A221A17271F1F1E1E1F29291B1B1B32323220271F15221A231A231A1F2012 -221E221E272027201E201E1C0F1C0F1C1725202520271E23152315221A1F141F14252025 -20221A221A1C27291F1E1A201928201F1B3A2C1F25121C36101E12121E12221E231A231A -201E201E201E271F271F271F26202620150F150F150F150F1711231E1E1C0F2520252027 -1E271E2315221A1F14252025202520252031291F1E0F221E3230271E173129312931291F -1E0D202024323232320B20202022262C1B2C262D0F2222232022261523222A252027261E -221F1F222C29151F1F1A200F201F1E17201F0F1E1E201E191E1F19201E29290F201E2029 -20281C2322151517383729231F262222221C2520311F262623252A2627261E231F1F2922 -26243434272E222334231E1F1E181F1E281A20201E1F23201E201F1B191E2A1E201E2C2C -20281D1B2A1E1E20181B1A0F0F112E2E201E1E201C18323B201B1B1B1B1B1B1B00000000 -281E262100000000202020202020202020202020202020221E221E221E221E221E221E22 -1E221E221E221E221E221E201E201E201E201E201E201E201E201E150F150F0000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000271E271E271E271E271E271E271E281E281E281E281E281E2520 -2520262126212621262126211F1E1F1E1F1E1F1E1F00200036523600131315192C223A27 -0F1919222C141914192222222222222222222219192C2C2C1D362525262A221F2A291719 -251E2E282B212B2625212825352521251919192C222220221C22201322220F13200F3522 -212222171C1522202C20201C2219222C25252622282B282020202020201C202020200F0F -0F0F22212121212122222222221D2222221D222136363522222C362B362C2C2C22232227 -2C26221D1D2C34211D152C2C222C2723232C25252B3A35223619190F0F2C2C2021142219 -19222222140F19522522252222171717172B2B2B2828280F222222222222222222221E0F -251C251C192A21212021222C2C1D1D1D363636222A2217251C261C261C22221425202520 -2A232A222022201E0F1E101E19282228222B2126172617251C2115211528222822251C25 -1C1F2B2C22211C221B2B22221D3F2F2127141E3A1121131321132520261C261C22202220 -22202A222A222A2229222922170F170F170F170F19132520201E0F282228222B212B2126 -17251C21152822282228222822352C212010252036342B2119352C352C352C21200F2222 -27363636360B22222225292F1D3029310F2525262225291725252E28232B292124212125 -2F2C1721221C220F2221201922220F202023201B21221B22202C2C0F2221222C222B1F26 -251717193C3C2C2521292525251F28223521292925282E292B29212621212C2529263838 -2A32252638262021201922202B1C2323202226222122221D1B202D2023212F30232B1F1E -2D202022191E1C0F0F133131222020221F19363F221D1D1D1D1D1D1D000000002C212924 -000000002222222222222222222222222222222520252025202520252025202520252025 -2025202520252022202220222022202220222022202220170F170F000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000002B212B212B212B212B212B212B212C212C212C212C212C21282228222924 -29242924292429242120212021202120220022003A583A001414171B2F253E2A101A1A25 -2F151A151A252525252525252525251A1A2F2F2F203A2828292D25212D2C181A2820312B -2E232E2828242A28392824281A1A1A2F252523241E24231424250F14220F382523242419 -1E1725222F22221E251A252F282829252B2E2A2323232323231E232323230F0F0F0F2523 -2323232325252525251F2525252025243A3A3925252F392E3A2F2F2F2525252A2F292520 -202F372320172F2F252F2A25252F28282E3E39253A1B1B10102F2F222415251A1A242425 -15101B582825282525181818182E2E2E2A2A2A0F25252525252525252525210F281E281E -1A2D23242223242F2F1F1F1F3A3A3A252D2418281E291E291E242515282328232D262D25 -232523200F2011201B2B252B252E2328192819281E241724172A252A25281E281E212E30 -24231E251D2E2524204333242A15203E1323151523152823291E291E2523252325232D24 -2D242D242C252C25180F180F180F180F1A14282222200F2B252B252E232E232819281E24 -172A252A252A252A25392F242211282339372E231A392F392F392F24221025252A3A3A3A -3A0C252525282C321F332C350F28282925282C182828312B262E2C2327242428332F1824 -241E250F2524221B25240F222225221D23241D2522302F0F2523252F252E21292818181A -41402F28242C282828212B2538242C2C282B312C2E2C2329242430282C293C3D2D352729 -3C292324231B24232E1E2525222428252325241F1D22312225233333252E212031232325 -1B201E0F0F14353525222225211B3A44251F1F1F1F1F1F1F000000002F232C2600000000 -252525252525252525252525252525282328232823282328232823282328232823282328 -23282325232523252325232523252325232523180F180F00000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00002E232E232E232E232E232E232E232F232F232F232F232F232A252A252C262C262C26 -2C262C262422242224222422240025004366430018181A1F372B4831121E1E2B37181E18 -1E2B2B2B2B2B2B2B2B2B2B1E1E37373725432E2E2F342A2734321D1E2E2538323528352F -2E29312E422E292E1E1E1E372B2B282A232A28182A2A12172812412A292A2A1D231A2A28 -372828232B1E2B372E2E2F2A3235312828282828282328282828121212122A2929292929 -2A2A2A2A2B242B2B2B252B2A4343412B2B374335433737372B2B2B31372F2B2525374029 -251A37372B37312B2B372E2E3548422B431F1F121237372829182B1E1E2A2A2B18121F66 -2E2A2E2A2A1D1D1D1D353535313131122B2B2B2B2B2B2B2B2B2B26122E232E231E342929 -28292A37372424244343432B342A1D2E232F232F232A2B182E282E28342B342A282A2825 -122514251F322A322A35292F1D2F1D2E23291A291A312A312A2E232E232635372A29222A -21352B2A254E3A29311825481628181828182E282F232F232A282A282A28342A342A342A -322A322A1D121D121D121D121E172E28282512322A322A352935292F1D2E23291A312A31 -2A312A312A42372928142E28434035291E4237423742372928122B2B30434343430E2B2B -2B2E323A243B323D122E2E2F2A2E321D2E2E38322B3532282D29292E3A371D292A222A12 -2A2A281F2A2A1228282B2822292A222A283737122A292A372A35262F2E1D1D1E4B4A372E -29322E2E2E26322A412932322E3138323532282F2929372E33304546343E2E2F452F2829 -28202A2835232B2B282A2F2B292B2A24212838282B293B3B2B3526253828282A20252312 -12173D3D2A28282B2620434F2B24242424242424000000003629332C000000002B2B2B2B -2B2B2B2B2B2B2B2B2B2B2B2E282E282E282E282E282E282E282E282E282E282E282E282A -282A282A282A282A282A282A282A281D121D120000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000003529 -35293529352935293529352936293629362936293629312A312A332C332C332C332C332C -29282928292829282A002B004B724B001A1A1E223D305137142222303D1B221B22303030 -3030303030303022223D3D3D294B3333343A2F2B3A381F22342A3F383B2D3B34332E3733 -4A332E332222223D30302D2F272F2D1A2F2F151A2C15492F2E2F2F20271E2F2C3D2C2C27 -3022303D3333342F383B372D2D2D2D2D2D272D2D2D2D151515152F2E2E2E2E2E2F2F2F2F -302930303029302F4B4B4930303D4A3B4B3D3D3D303030373D353029293D482E291E3D3D -303D3730303D33333B504A304B222214143D3D2C2E1B3022222F2F301B142272332F332F -2F1F1F1F1F3B3B3B37373715303030303030303030302A1533273327223A2E2E2C2D2F3D -3D2929294B4B4B303A2F1F3327342734272F301B332D332D3A313A2F2D2F2D2A152A162A -22382F382F3B2E3420342033272E1E2E1E372F372F332733272A3B3D2F2E262F253B302F -2957412E371B2A51182D1B1B2D1B332D342734272F2D2F2D2F2D3A2F3A2F3A2F382F382F -1F151F151F151F15221A342C2C2A15382F382F3B2E3B2E342033272E1E372F372F372F37 -2F4A3D2E2C17332D4A483B2E224A3D4A3D4A3D2E2C143030364B4B4B4B10303030333841 -28423944153333352F33381F34333F38313B382D322E2E33413D1F2E2F262F152F2F2C22 -2F2F152C2C302C262E2F262F2C3E3D152F2E2F3D2F3B2A35331F1F2254533D342E383333 -332A382F492E383834373F383B382D342E2E3D3339354D4E3B4533354E352D2E2D232F2D -3C2730302C2F34302E302F28252C3F2C302D4243303C2B293F2D2D2F23292715151A4545 -2F2C2C302A234B583029292929292929000000003D2E3931000000003030303030303030 -30303030303030332D332D332D332D332D332D332D332D332D332D332D332D2F2D2F2D2F -2D2F2D2F2D2F2D2F2D2F2D1F151F15000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000003B2E3B2E3B2E -3B2E3B2E3B2E3B2E3D2E3D2E3D2E3D2E3D2E372F372F393139313931393139312E2C2E2C -2E2C2E2C2F003000537E53001D1D21264435593C16262635441E261E2635353535353535 -35353526264444442D5339393A403430403E22263A2E463E4132413A39333D3952393339 -26262644353532342B34311D3435181D31185135323434232B2135314431312C35263544 -39393A343E413D3232323232322B313131311818181835323232323235353535352D3535 -352D35335353513535445241534444443535353C443B352D2D444F322D21444435443C36 -36443939415951355326261616444431331E3526263434351E16267E3934393434222222 -224141413D3D3D18353535353535353535352F18392B392C2640333331323444442D2D2D -53535335403422392B3A2B3A2B34351E39323932403640343134312E182E192E263E353E -3541323A233A23392B332133213D353D35392C392C2F414434322B34294235342D614833 -3D1E2E591B321D1D321D39323A2B3A2B3431343134314034403440343E353E3522182218 -22182218261D3A31312E183E353E35413241323A23392B33213D353D353D353D34524433 -31193932524F41322652445244524433311635353C5353535312353535393E482D493F4B -1839393A34393E223A39463E36413E323833333948442233342B35183433312635341831 -3135312A32342A34314444183432344434422F3A392222265D5C443A333E3939392F3E34 -51333E3E3A3D463E413E323A333344393F3B5657414C393A563B323331273431422C3535 -31343A353235342C293146313632494A35422F2D46323135272D2B18181D4C4C35313135 -2F275361352D2D2D2D2D2D2D0000000043323F3700000000353535353535353535353535 -353535393239323932393239323932393239323932393239323932343134313431343134 -313431343134312218221800000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000041324132413241324132 -41324132433243324332433243323D353D353F373F373F373F373F373331333133313331 -340035005C8C5C002020242A4B3A6343192A2A3A4B212A212A3A3A3A3A3A3A3A3A3A3A2A -2A4B4B4B325C3F3F40473A354745272A40334E45483748403F39433F5B3F393F2A2A2A4B -3A3A373930393720393A18203618593A3839392730243A364B3636303A2A3A4B3F3F403A -4548433737373737373037373737181818183A38383838383A3A3A3A3A323A3A3A323A39 -5C5C5A3A3A4B5B485C4B4B4B3A3B3A434B413A32324B583832244B4B3A4B433B3B4B3F3F -48625A3A5C2A2A19194B4B3639213A2A2A3A3A3A21192A8C3F3A3F3A3A27272727484848 -434343183A3A3A3A3A3A3A3A3A3A34183F303F302A4738393638394B4B3232325C5C5C3A -4739273F3040304030393A213F373F37473C473A373A373318331B332A453A453A483840 -2740273F3039243924433A433A3F303F3034484B39382F3A2E493A39326B503843213363 -1E38212138213F37403040303A373A373A37473947394739453A453A2718271827182718 -2A204036363318453A453A4838483840273F303924433A433A433A433A5B4B39361C3F37 -5B5848382A5B4B5B4B5B4B3936193A3A425C5C5C5C133A3A3A3F455032514554183F3F41 -3A3F4527403F4E453C4845373E39393F504B2739392F3A183A39362A3A391836363B362E -383A2F3A364C4B183A383A4B3A4934403F27272A67654B4039453F3F3F34453A5A394545 -40444E454845374039394B3F46425F6048553F415F413739372B393749303B3B3639403B -383B39312E364D363B3851523B4935324D37373A2B323018182054543A36363B342B5C6C -3B32323232323232000000004A38463D000000003A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3F -373F373F373F373F373F373F373F373F373F373F373F373A373A373A373A373A373A373A -373A37271827180000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000004838483848384838483848384838 -4A384A384A384A384A38433A433A463D463D463D463D463D393639363936393639003A00 -649864002323272E52406C491B2D2D4052242D242D404040404040404040402D2D525252 -37644445464D3F394E4B2A2D4538544B4F3C4F46443E494463453E452D2D2D5240403C3E -343E3C233E3F1B223B1B613F3D3E3E2B34273F3B523B3B353F2D3F524444463F4B4F493C -3C3C3C3C3C343C3C3C3C1B1B1B1B3F3D3D3D3D3D3F3F3F3F403640404037403E64646240 -4052634F6452525240404049524740373752603D3727525240524940405244444F6B6240 -642E2E1B1B52523B3E24402D2D3F3F40241B2E98443F443F3F2A2A2A2A4F4F4F4949491B -40404040404040404040381B443445352D4E3D3E3B3D3E5252363636646464404E3E2A44 -34463446343E4024443C443C4D414E3F3C3F3C381B381E382E4B3F4B3F4F3D462B462B44 -343E273E27493F493F45354535394F523E3D333F324F403E3774573D4924386C203C2323 -3C23443C463446343F3C3F3C3F3C4E3E4E3E4E3E4B3F4B3F2A1B2A1B2A1B2A1B2D22453B -3B381B4B3F4B3F4F3D4F3D462B44343E27493F493F493F493F63523E3B1E443C63604F3D -2D6352635263523E3B1B4040486464646415404040444B5736584B5B1B4445463F454B2A -4545544B414F4B3C433E3E4557522A3E3E333F1B3F3E3B2E3F3E1B3B3B403B323D3F333F -3B52511B3F3D3F513F4F3946442A2A2D706E52453E4B444545394B3F613E4B4B4549544B -4F4B3C463E3E52454C4767694E5C444667473C3D3B2F3E3C503440403B3E46403D403E35 -323B543B403D5859404F3937543C3C3F2F37341B1B225B5B3F3B3B40392F647540363636 -3636363600000000513D4C4200000000404040404040404040404040404040443C443C44 -3C443C443C443C443C443C443C443C443C443C3F3C3F3C3F3C3F3C3F3C3F3C3F3C3F3C2A -1B2A1B000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000004F3D4F3D4F3D4F3D4F3D4F3D4F3D513D513D -513D513D513D493F493F4C424C424C424C424C423E3B3E3B3E3B3E3B3E00400000020100 -000007000600000300070014B706020400060204002FCDDDCD002FCDDDCD313021112111 -2521112101000600FA800500FB000600FA0080050000000201230000020305D100030007 -0027401703030202075505080F0901005D042B035D0F051F0502052F5DE4FDE45D003FED -332F3F3130010323031323353302031AAA1CD6CCCC05D1FBC90437FA2FD3000200A803D1 -0304061400030007002640150206060307010F09400902032C0040000100042C072FED33 -5D2FED5D003F3C332F3C3130010323032303230303042B842BA82B842B0614FDBD0243FD -BD024300000200C3000005C905D1001B001F00B1407140215609740570097B137B167B17 -7B1A080A091E1D160F1501671501151E0C0F1013140B1407081F1C17001801681801181E -0502011A06190662191462700B010B03110B111903040D001B011B1B0D171A011D0410B5 -131E020509040CB50F070F1318040B00140114030F0B4F0B020B08003F5D3F5D1217392F -ED17392FED1739012F332F5D1217392F2F2F5DE42FE4313087C0C0C0C0FD5D71C0C0C0C0 -C08710C0C0C0C0FD5D71C0C0C0C0C0015D01210321152103231321032313213521132135 -2113330321133303210521032105C9FEB35C0134FEA9688168FEF2688168FED6014D5CFE -CC0157698169010E698169012AFE35FEEE5E011203A4FE8887FE5B01A5FE5B01A5870178 -8701A6FE5A01A6FE5A85FE840003009BFE9704880628002C0033003A00BC408D7D087E16 -70197620702C7A36060E16012B1B16122B230D350D3C163C24352B430D4A164C24432B5A -08532053335A356B0865206529632B6A30643A171D40090B371D382E11221D2226471B18 -312D1227373400030A067F1E011E050A11470A05060F3C1F3C0221210334207F00010031 -201818063F094F09020900112D1B1E263706031E0930064006700603062F5D33ED173932 -2F5D12392FED2F5DED12392F5D002F3333ED2F2F2F5D121739ED33332F1139392F2B3130 -5D5D011406071123112E012735331E01171E0117112E01272E01353436371133111E0117 -15232E0127111E01171E0125110E0115141601342627113E010488F2C47684E855101362 -2E348B4F28441DA38EE9D17665D4480E4BA3851E461A95A3FDD46B926C02007584788101 -7C9BCD13FE960165013127C60E351113210301B1080F0829A57994CC110110FEF2022C1D -C42E4709FE51051105209CE8019D08655A5B5CFE585E5719FE620C6200050095FFE30807 -05ED000B000F001B00270033009C40720908060A0918061A0F351808170A1818171A2908 -260A2918261A460D480F4035560D580F680E13791F7625792B76310425512F034F030203 -031F5109020F030E082B51201940190219193151130A4F0C400E020C0E2E2A0016011616 -282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D123939ED33 -2F5DED2F2F5D003FED332F5DED3F3F3FED332F5DED5D3130015D01140623222635343633 -321625012309011406232226353436333216013426232206151416333236013426232206 -1514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6BAFABB59 -64665858666459049359646658586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADC -DDE0DADA01B8AC8888ADAD8787FE17AC8888ADAD878700030073FFE1061305F0000B0018 -004500E1406F090F190F3C0C3015301D352D3E3D4F1A471D4F44791C0B6A25603F7B0576 -087B0F761D7A25703E703F090508062A06371408161D142A1437153F290C2A1D26373008 -300A4008400A490C41144F1C431D46204C21412D413C5108590D5B25690566086B0F601D -1E3F0C161D20231903B8FFC0403B12173703AA190D2C093E05233502163F230A1E082C0D -3E032F00143806142F3F0C4513201D2F38041A26001E011E1E45140D1A011A1A13152673 -4610F6ED332F5DED332F5D11121739111239392FED2FED121739003F3FED3F121739ED2B -2F12393912393931305D5D015D013426232206151416173E0113010E01070E0115141633 -323601151406070123270E01232224353436373E01372E01353436373E01333216151406 -070E0107013E0137362635031871585C744F836265C2FE221F3E1F1C24AB9D5DB7016B32 -3C017AF6E573F07FD0FEED34232368356E61353532A161ADD6181D20765E01730E0E0102 -0104A75F6D7B594B744F2387FD0001D20F312A276E4592B35B02AE6060F06DFE90E08E71 -F3C55C86312F531F48926F437932303CAF862C6F2C315A20FE96286034388A30000100A4 -03D10182061400030015400A020203010F0501002C032FED5D003F332F31300103230301 -822B882B0614FDBD0243000100B5FE64030F061400150048403709010907190119072803 -28054F01480348054F075F015F076F016F077F01780278067F07120701010C7A04010830 -000100000F1F04881610F4ED332F5D3C5D003F3F3130015D012326021110123733150E01 -070602151412171E0117030FE5B1C4C4B1E551933F3C4B493E3C9A4DFE64CB01E0012D01 -2D01E0CB0A49BF7F7BFED8A4ABFEE4807BC7450000010093FE6402ED06140015004E403D -060306131503151326012603261326154701400340134715500350136003601379007602 -700370137614151201040C750001123F040104040B1F00921710F6ED332F5D3C5D003F3F -3130015D0110020723353E01373612353402272E01273533161202EDC4B1E54D9B3B3E49 -4A3D3F9351E5B1C4023CFED3FE20CB0A45C77B80011CABA401287B7FBF490ACBFE200001 -00A70276047106140011009040094F1301114009103708B8FFC040580910375B025B0554 -0B540E6B026B05640B640E7B027B05730B730E0C01060F0A0B0E08110502060C064F0450 -0402040A0F0C01040C010F131F130200110D4010011008070C4F090109100E020304050B -060D2809700C010C2F5D33ED1739322F5D1239392F5D1239395D003F335D332F5D331217 -392F332F3331305D012B2B5D01072513231305272D013705033303251705047140FE9606 -8105FE9741017DFE8341016A068107016B40FE8403776ED5FE980168D66ECFCF6ED50167 -FE99D46ECD00000100D2001B05BA04FD000B0039402303AC01045408AC0A0F070107400D -01300D400D0200AB0A800101012A05AB07400401042F5D3CE4FD5D3CE45D5D002F5D3CE4 -FD3CE4313001211123112135211133112105BAFDDFA6FDDF0221A60221023CFDDF0221A0 -0221FDDF00010093FE8E023F011D0003003540261A012A012B0235003902450048025500 -590264007400C5030C0202035604000004021A0202022F5D332F0010F4322F3130015D09 -012313023FFEE692AE011DFD71028F00000100990231030902E600030020401401420F02 -01020F054F004F055F005F05050000022F332F5D002F5DED3130012135210309FD900270 -0231B500000100FD000001EC011D00030016400C02560108002D2F013F0102012F5DED00 -3FED31302123113301ECEFEF011D0001FFE2FED0035C0614000300364025030100050116 -01250138004900440156016701770186010A011202032F02010200010000022F332F003F -2F5D31300187ED5D87C009012301035CFD33AD02CA0614F8BC07440000020089FFE1048F -05EF000B0023004140303601390B340C3B123B18341E4501490B440C4B124B18441E0C15 -4909022149030A0F21009E250F251F25021B2106982410F6ED5D10F6ED003FED3FED3130 -5D011002212002111012212012013E01353426272E01232206070E01151416171E013332 -36048FFBFEF8FEF4F7FA0109010CF7FEF92319192423795F5E7B24221916242179645E7C -02E9FE6FFE89017C018A018D017BFE7FFCB551DB9A98E04E4D4E4E4F4AEE8E9CD2534E52 -4E00000101160000043C05D6000F003A4023054606060C030E034801080F111F11020502 -1F0F010F0F0C0E20023F036F03700303032F5D33ED39322F5D2F335D003FFD323F332FED -3130290135211121353236373E0137331121043CFCDA0136FECA3F90252E35049B013098 -03E6881514194D41FAC2000100A10000049105F000200097407B501F601F020503061116 -03151124113B05380D350E3F1D3F1E391F4B05480D450E4F1D4F1E491F5F035D045D055B -0956115F195E1B5D1C5F1D5F1E6A036406651162156F1E700274117F1A7F1C7F1E25000F -100F2D082F1C300F400F060F0F0B4A1302021F4A01081F0208211616209E220F221F2202 -101002992110F6322F5D10F6322FED1239003FFD323FED332F5D31305D015D2901353E01 -373E013534262322060723353E01333204151406070E01070E0107210491FC1069D35BC0 -8E99895BD4650A47ED6FE501042B2A27694B6BE4630321D15AB459BADB7F74834042D223 -3ADDBD5593423E784969C554000100A7FFE1047C05F0003D009540700B0B052F1A0B152F -290B262F293C3C0B35143122342F4A0B45144322432F56015905590B552F6A0B662F6A3C -780B762F74357B3C1A343A443A023B3A1E491F012D112D022D2D294A1F0931020F0D1F0D -020D0D114A090A2321371E2E1621032E1E3A37040C03A03F0F3F1F3F020C9A3E10E65D10 -E611173910ED2F2F2FED003FED332F5D3F1239ED332F5D2FFD39395D31305D011E011514 -06070E012322262735331E01333236373E01353426272E012B0135333236353426272E01 -2322060723353E01333216171E0115140607151E01040E303E4A434BCB797CF04D0F55E6 -6B3F8E2C2E2D332D2D804A5A4698B52E292B623E5FD65F0A47ED6F6DA643484AAF77307C -02CD2B826766AA3F46433B23D1384A2A292C6A5150691E1F17A67F7A36511A1A14443ED1 -233B282C30885B7CB9180E0833000002004D000004B305D1000A000D00684041040D140D -240D340D440D700D060C0D480606070C0607090D4901050503070303083F0A4F0A020A0F -0F1F0F02070C04200A090D064F060101010F061F063F0603062F5D332F5D12393333ED39 -395D2F5D003F3F12392F3CFD321239393130018710FD04C0015D01231123112135013311 -3321110104B3DDC0FD3702D1B8DDFE63FDBF01A3FE5D01A3E60348FC7202A0FD60000001 -00BBFFE1048505D1002A0070404E0A081A082B083D0835113D164B0844115A0854296A08 -7A080C1D1D1A490F251F2540250325214A25061E020F0A1F0A020A0A0E4A060A2022204F -1D011D142100201D09009F2C0F2C1F2C02099B2B10E65D10E611393910ED2F5DED2F003F -ED332F5D3F1239ED2F5DFD322F31305D011406070E012322262735331E01333236373E01 -353426272E012322060711211521113E01333216171E0104854C4248C7837AE24E0E52DC -6A4785342C2D352F34955C58A33B0380FD412B5A2179B64C505801D968BE41464B3324D3 -344928322B784F4D6A20261F180C02FFAFFE740404293437AE0000020089FFE104A705ED -0022003700644044060D160D3925333133374925423143375F01560D5020502165217531 -0E1A0329491D1313174A1D030F023549030A1A2C2F122321001209009C390F391F39022F -2109983810F6ED5D10E6113910ED2F123939003FED3F1239FD322F2FED123931305D0114 -002322262726023534123736243332161715232E01232200073E01333216171E01073426 -272E01232206070E01151416171E0133323604A7FED5D96EB445565D555D580116B93B50 -290A1C713BD7FF001554A36B5F914C5859CB373F2E703D55924D020241392E6B3F91A601 -E3E3FEE14443530112C1C6013277717F0A0DBF0F1BFEF3E5333523353DBA8D5D7A2D2014 -282A16291F9EB7352C29B1000001009A0000049505D10006004F403209010A0224014801 -4B0258027903070301000120020203000002034A050302080F081F087B02030300020204 -0F00010000042F332F5D12392F12395D003F3FFD11392F3130018710ED87C0015D090123 -012135210495FD5ED602CDFCB003FB04F2FB0E0522AF0003007AFFDE049C05F300190028 -0037009440702D2B3415332234273433441541224427453350155B195A1B5A1F54225F2B -592C5F31543354376008620E6212621960236027760E76127B2C86121DA926A62F022616 -0A2F04031D4710023548030A1A200013011313002F0A0D292100162620009D390F391F39 -0220210D0D322106973810F6ED332FED5D10E411393910ED11393911332F71ED003FED3F -ED1217395D31305D01140023222435343637352E0135342433320415140607151E010334 -26232206151416171E01173E01133426272E01270E01151416333236049CFED3E4F2FEE1 -908378730114D5DF010A7E7A8C94EDA5807EA15152258B42634C1F51762F705D5A6DBA8F -92AF019FC1FF00FAC37CC93B06409872A8E0D6A565C337063CB0024F6B7F786648692912 -3A13428EFD735C6F3816262231A86A87B09600020071FFE3048F05EF0022003700644045 -0804190429043C253C2B352E4C254C2B432E58045F175D18521B70017B250F111D324914 -294914061D020A0A0E4A060A351109232100091A009E390F391F39022C211A963810F6ED -5D10E6113910ED2F3939003FFD322F3F1239ED2FED123931305D01140207060423222627 -35331E01333212370E01232226272E01353400333216171612073426272E012322061514 -16171E01333236373E01048F595A5BFEEEB9345C240A1D6A41DDFB145DA4615C954B5859 -012CD86CB845555CCA40382F6C3F90A736402D6C424EA04601030342C3FEC270727C0B0C -BF0F1B0109E9383024343DBC83E4011E434353FEFBA49BBC342D27B4A35F782D1F152A28 -15290002015A00000249045D00030007001E4010015602050656050807002D0600010101 -2F5D3CFD3C003FED3FED313001231133112311330249EFEFEFEF0340011DFBA3011D0002 -00E6FE8E0292045D00030007004C40370A050A061A051A062A052B063504390645044806 -5504590664047404C5070F01560205060607560806063F044F04020404002D000101012F -5DFD322F5D332F0010F4322F3FED3130015D01231133130123130249EFEF49FEE692AE03 -40011DFCC0FD71028F00000100FE004D058004CB0006005E401073050105045403020306 -540001002C00B8FFE240260A1837031E0A1837031F002F0002030F000100400801300840 -080204050100004001500102012F5D332F1239395D5D002F5D335D2F2B2B31304B535887 -10FD8710FD05C059015D250135011509010580FB7E0482FC72038E4D02017C0201B4FE75 -FE75000200F5016A059703AE00030007003540200554060154060F020102400901300940 -09020405012F004000020000400101012F5D332F5D1239395D5D002F5D33ED2FED313001 -213521112135210597FB5E04A2FB5E04A2030EA0FDBCA0000001010C004D058E04CB0006 -006040107C030103045405050602540101002C01B8FFE240280A1837051E0A1837051F01 -2F0102050F010101400801300840080203050100002F013001400103012F5D332F123939 -5D5D002F5D335D2F2B2B31304B53588710FD8710FD05C059015D09013509013501058EFB -7E038EFC720482024EFDFFB4018B018BB4FDFF00000200A0000003ED05EF001C00200069 -40470F221F2224140335184F024F034F0544185C0554186904691064187418741C0C0870 -090109061A1E161612341A02081F551E08202B1F1F061F7F0901090F1509172000010000 -172F332F5D1239ED2F5DED332FED003FED333FFD322F111239395D2F31305D015D011406 -070E01071523113E01373E013534262322060723353E013332160123353303ED46393892 -52B34197303A4099796CC1380A46D760D7F9FE75CCCC047362993B39642FE1013125582D -346F56716F4423CC1B2BD1FAE2D3000200B0FF1E074E05EF0042004F00D640A206020F04 -0B050A090F1B0E1C0F3F0F4016021F041C051F1B1F1C142214271F3F1F4125022C042C05 -2F1B2F1C242220272F3F2F414740444856481D0A05052759496E09650D691A6821652766 -3F664174167B1B70277439743B0F120511081247520E1440151B371404044D53082D2D2A -510E083D311E51313D020F2D012D051143122D144A123F0B010B0F512051021829140B37 -0F0020007F000300002429376B5010F6ED332F5D123939ED5D2F5DED2F33FD32322F5D00 -3F33ED2F123939ED332F2FED332FCD2B2FED331239392F31305D015D0114020721270E01 -23222635341233321617353311333E013534022726242322040706021514121716043332 -3637150E0123222427260235341237362433320417161201112E01232206151416333236 -074E514BFE481B4A8858A8C9F6AB4970419FF32A2B5B5858FEFCA5A0FEF75F606D685F63 -010A9D56B75461A859BAFEC2727380867474013EB5C401346A6A71FD8F3F64398192747B -438602978BFEFC6B743C40FEE4E3010E212130FCB64BE159A4010C606067746262FEEF9A -A5FEEF61656716188E150F7F72730142C3B9013F7575867C7070FEC5FE4002061D19B4A6 -A3A73E000002001A0000055E05D10007000A009840694009014A0645070209090A080287 -01010114000700090A0387040104140505067C067307020334300A400A700A030A090A06 -03017A050105080F0C0106070903050C002400390042005A006A0074000700006E0C0F0C -010A052B0536054D05550565057B050705640B10E65D5D10F62F5D1217395D003F5D3C3F -39392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D005D2123032103230121 -130901055ED392FD7C92C9021E01087CFEFBFEFA019FFE6105D1FC7802DBFD25000300C8 -0000052B05D100150024003300524033050C150C270C550256157F190612112C341E1E07 -1D3408032D3407081615122C0F0F0725150071350F354035021E2C14076C3410F6FD325D -10F6ED12392F1239ED003FED3FED12392FED39393130015D011406070E01232111213216 -171E0115140607151E01013426272E012B0111213236373E01133426272E012321112132 -36373E01052B544754C99BFDF001B9A3A24A524A6C5A97AEFEB324282F8663EC01005D6E -2F2F277F3647308962FEC9010682A635383401CA6FAA37423805D118262B875E6A952D08 -1FCB0204364A171B0DFE52131E1E5FFD9A5A6A25190FFDD61B24276400010073FFE50546 -05EC002A0061404A05010D09061416011B0914152515361543145B08580A580E5B105B28 -600361147002760F70141316161A3412022A2A2634060A1600712C0F2C010F2C1F2C2F2C -3F2C6F2C0520150C682B10F6ED5D5D10F63C003FED332F3FED332F3130015D250E01070E -012322242726023534123736243332161715232E01232206070E01151416171E01333236 -373305463759483D8F56A2FEF762606C68625F010DA478EF920F7BF28A71B547454D5543 -46BB688FFA6D0E6C182A17131B5B615F0125C2B801226461663A49EB675E494D4BE5969D -E2474A476262000200C8000005B205D1000E001D003A4027391249126902680D04163408 -03173407087600010F1500741F0F1F2F1F401F601F041714076C1E10F6ED5D10F6ED5D00 -3FED3FED3130015D011402070E01232111213204171612073426272E012B011133323637 -3E0105B2B19366FBCDFE880174DA01015998AACF7A7958C68ABABA8FD5596F6F02E7CBFE -B65B3F3805D13F375FFEC4D6AFF0453227FB832A3947E800000100C80000049D05D1000B -003B402309350006100602060601053502030A350108040008010800730D0F0D01060914 -016C0C10F6FD325D10F63C5D3C003FED3FED12392F71ED31302901112115211121152111 -21049DFC2B03D5FCF1030FFCF1030F05D1B0FE68B0FDD700000100C80000047F05D10009 -0034401E053502020701350803070800034F0B02030300640B0F0B01020514076C0A10F6 -FD325D10F4322F5D003F3FED12392FED313001211121152111231121047FFD0F0287FD79 -C603B70521FE5CB0FD3305D100010073FFE305A205EC00240069404907010906060E1D06 -130E210E350E4901410E510E6506650B630E740E741C0F223540230123230C0310101734 -0C021D34030A7609012210220910216C0075260F264026021A1509682510F6ED5D10F6ED -3312392F2F5D003FED3FED332F1112392F5DED3130015D25060423222427260235100021 -32041715232E01272E01232200111000213236371121352105A27AFEDF87AEFEDE666770 -01A1016C7F010999121F763945AF6FFAFEDD0130010660BF48FE7102536E385360606101 -23C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAE00000100C80000053B -05D1000B003A4023033500081008020808050A070301050809021400780D0F0D400D500D -03080314056C0C10F6FD325D10F6FD32003F3C3F3C12392F71ED31302123112111231133 -11211133053BC6FD19C6C602E7C602D9FD2705D1FDB8024800010089000002D505D1000B -002E401909043206030A033201080D6D0A080B5A0A140305025A036D0C10F6F43210FDF4 -3210E6003FFD323FFD32313029013533112335211523113302D5FDB4C3C3024CC3C39804 -A19898FB5F000001002CFFEB02EA05D100150030401C6A017C01021233150307070B3403 -09131312140077170F170106651610E65D10F6ED332F003FFD322F3FED31305D01140623 -22262735331E01333236373E01351121352102EAEFC930A0360B29783F5C6D1A1B0FFEC5 -02010183C4D4110CB90E1E2A2728744C03659E00000100CD0000057505D1000B00A74075 -190956015C09030509280938094A0968098A09D809070F010A091E0119022A012B093901 -3909350B49014909450B5C01650B72007908100202038801C8010201B3000B000809B302 -0B0A030A840A010802050A07030105080B02030A0A0F0D20003000400004500001006E0D -400D01080314056C0C10F6FD325D10F65D5D322F123939003F3C3F3C1239393130015D87 -10C0C07AFD1804C00187107AFD5D1808C0015D71722901010711231133110133010575FE -FFFDB394C6C602D3F0FD6702979EFE0705D1FCF70309FD44000100C80000047605D10005 -002040110203043501080000070F07010414016C0610F6ED5D11332F003FED3F31302901 -113311210476FC52C602E805D1FADF00000100C8000005F605D1000C00794059560A0138 -023805360A6F0260036F05600A7F0270037F05700A0B5509560A5A0B0364037403750903 -050A020309000410043404440454046A04060404070B0903010708090A0B030502140078 -0E0F0E1F0E500E030513076C0D10F6ED5D10F6ED111739003F3C3F3C12392F5D12173931 -30015D72005D722123110123011123112109012105F6C6FE6276FE65B9010E018D018001 -130503FC970369FAFD05D1FCC3033D00000100C80000053805D10009006B404E0C071F07 -34074507510761077107077606010F0102061F0115063406440653066B0160067F017006 -0B0C010406025A01550602020701080603010408060102071300780B0F0B400B02021304 -6C0A10F6ED5D10F6FD113939003F3C3F3C12393931300172715D5D005D21230111231121 -0111330538F5FD3EB901330284B90534FACC05D1FB4004C000020073FFE105DA05F00017 -002300564042040004060B0C0B1217001706190C19125701570553075F0B580D58115F13 -53171076097915021B3415022134090A18150373250F25010F251F253F25031E150F6824 -10F6ED5D5D10F6ED003FED3FED5D3130015D011612151402070E01232224272602353412 -373624333216131000232200111000333200051E5B6163595CFBA19DFEFF5A5A61605C58 -01059AA0FF47FEFCE1E3FEFD0108DEDE0107052664FEDEB8B8FEDD6165666863630120B9 -B6012167626869FD610122013BFEC5FEDEFEDBFEC9013700000200C80000049605D10010 -001F0056403D3A143D1D4B144B1D500E540F650F071934000710070207070918340A0309 -080F211F21021115200030004000700004006F210F213F2102190714096C2010F6FD325D -10F45DED5D003F3FED12392F5DED3130015D011406070E012B01112311213216171E0107 -3426272E012B0111333236373E010496453E4DD2A0C6C6019486BA48555DCE3637307B5E -C4A778962F2F27040F63A93E4D4DFDD505D12D3039AA874D72241F1BFDAD2B2F306A0002 -0073FE7705F805F000250031008640610B0C0B120418041D190C19121518161D5C0B590D -59115C1353175719571D742010551F651F751D742D0425252135030B29341E0609760979 -150215022F34090A1E130600337326151B0009061D030F1B73330F33010F331F333F3303 -2C150F683210F6ED5D5D10E61117393210EDE62F2FED003FED3F5D123939ED3FFD322F31 -305D015D010E01232226270E01232224272602353412373624333216171612151002071E -01333236373303100023220011100033320005F83C753DAED309182D159DFEFF5A5A6160 -5C5801059AA0FF595B61DFBC0464842971181BECFEFCE1E3FEFD0108DEDE0107FE930F0D -BFB204036863630120B9B60121676268696164FEDEB8FEEFFE8A4B727E190A039F012201 -3BFEC5FEDEFEDBFEC9013700000200C80000059805D10010001F007A405408011D012D01 -3A01391D450F4814481D5A01560F59146F016902600A650B7E01750B110201B300100010 -071A34400201020205183407030105080F211F2140210311150F0D010D0D102000010019 -031400056C2010F632FD322F5D39392F5DED5D003F3C3FED12392F5DED12393130018710 -7AFD18C0015D29010121112311213216171E0115140607133426272E012B011133323637 -3E010598FEFFFE0EFEE9C601A187B448515BA28E612D342B7650E9C85E8C312D2B0250FD -B005D1232D339B77A1D93701A34063221D17FDCE212D2A6D00010086FFE5050205EC0030 -009A40790B09031F00231B08141F29082818241F242F390836103813351F362A4A084510 -4913451F4A27442A5802551B551F552D6B19661B651F662B602F7B16701F7020742A742D -86122309400E103708400E103700111A28041D06212125341D020A0A0E34060A2128151A -111500211A090074320F32703202096A3110E65D10E611393910ED2FED2F003FED332F3F -ED332F1112173931302B2B5D011406070E012322242735331604333236353426272E0127 -2E013534243332041715232624232206151416171E01171E010502514950D596A1FEFF85 -0E71012882B8CD61634BAF62C6BF013CF39D0106650E55FEEB919FC1607940EC52A6A801 -A957AA3B40483C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E28 -152CB20000010000000004EE05D1000700274018010435060303080F091F094F0903005B -0114045B4F0501052F5DF4FDE45D003F3FFD323130012111231121352104EEFDECC6FDEC -04EE0521FADF0521B000000100B2FFE1052905D1001D003A4029231223183D033D094C03 -4C0977137717081C0D031534060A1B1400761F0F1F1F1F401F030F140C6B1E10F6ED5D10 -F6ED003FED3F3C31305D011406070E01232226272E01351133111416171E01333236373E -01351133052947514DCE898CD0475147C621272C976A6B962D2721C60256A2F1504C464A -4852E8A9037BFC7B798C394142414239936D038A0001001A0000055E05D10006008C4066 -470148020205040507065706860603061400000105070457048604030414030203080144 -014B02580273017C02060005027503010303020845004A0302020103040024003A005A00 -6A00740006006E080F08010F08010B032B033503550365037B030603640710E65D5D5D10 -F65D1139395D003F3F5D1239393130015D8710FD5DC08710FD5D08C0015D090121013309 -01055EFDE2FEF8FDE2D401D301D305D1FA2F05D1FAE2051E0001005C0000078D05D1000C -00BB409E470367037903030D010B020404020505080C0B1701190318051908190B290329 -08290B3B023903320434083C09330A3A0B4B02440444084C09430A4B0B55015A0255045A -0557075909550A65016A0265046A056A09650A7F02700473087C09720A7C0B2E0C140001 -000714060506030301000300090205080B03090C0602060302083B0034064B0044067A00 -75060600720E1F0E3F0E5F0E7F0E0406670D10EE5D10E65D003F3F1217395D5D31300187 -10FD8710FD015D005D09012309012301330901330901078DFE7DDFFEC7FECEDAFE76CB01 -390134C90137013705D1FA2F04D4FB2C05D1FB2A04D6FB1E04E2000100440000053805D1 -000B00C2409775017A07020A04050A1A04150A2C04230A37094D04420A58035F04580557 -09500A570B68036D0468056709600A670B7B04730A170B14000100091408070803140201 -020514060607050407010A0B0602080302080F0D01060216022602360247020509081908 -290839084808050208070A04010406020D00160026003600470050000600660D08090619 -062906390648065F060606660C10F65D3210F65D321117392F2F5D5D5D003F3F12173931 -30018710ED8710ED8710ED8710ED005D015D09022309012309013309010538FDFE0201E5 -FE6AFE60D80207FE05E40191019A05D1FD20FD0F0265FD9B02E802E9FDA3025D00010006 -000004E605D10008007C405D2C012C04280735074001400440075007680470070A160619 -08270628085606590865066A08080814000100061405040502000D050200010004000703 -040107080402050302080F0A1F0A4F0A7F0A04005B01070114045B4F057F0502052F5DF4 -ED3910E45D003F3F1217395D3130015D8710ED8710ED015D005D09011123110133090104 -E6FDF4C6FDF2DB0197019B05D1FCBCFD7302780359FD66029A000001007E0000050805D1 -000900594036030708060813082608360846085608660876080808B30202030707033506 -03020208350108040803020707040209730B0F0B0102690A10E65D10E61139392F123939 -2F003FFD322F3FFD322F31300187107AED5D1887C0290135012135211501210508FB7603 -91FC910452FC6603B0B80469B0B3FB92000100EFFE7802F706140007001C400E05520201 -0652010B030000061F012FED332F3C003FED3FED3130012111211521112102F7FDF80208 -FEA6015AFE78079C8FF9820000010046FED003C006140003003A40280301020A0119012A -0138014B01590168017801890109011200032F000100030100006002700202022F5D332F -003F2F5D31300187ED5D87C00123013303C0ADFD33B0FED00744000100ABFE7802B30614 -0007001C400E045207010352010B031F000005012F3C332FED003FED3FED313001213521 -1121352102B3FDF8015AFEA60208FE788F067E8F000100BA02AA05D205D1000600474034 -3B0133034B0145035F0150036F0160037F0170030A69027B02020102050F031F033F035F -036F0305030305030000004F000200042F335D2F003F332F5D12393931305D015D012309 -0123013305D2C6FE39FE3AC5024D7E02AC0273FD8B0327000001FFFCFED4051AFF4C0003 -0011B6015002000005022F11332F002FED313001213521051AFAE2051EFED47800010154 -051602FA068C000300244016480159026902790204500360037003030303010000022F33 -2F002F332F5D3130015D0123013302FA95FEEFF30516017600020068FFE1041D04780026 -0033007A40540C0A0423190A152304590E511E5C2C690E601D6F2D7B0A7A14701D7B2C0A -0208283D3011401102111120084F1C011C1C183F20043141080A01080F1D011D1127021A -001D0B0091350F351F353F35032E1B0B853410F6ED5D10E6113910FD32322F5D003F3FED -3FED332F5D1112392F5DED123931305D015D2123350E01070E0123222635343637362437 -353426272E012322060723353E01333216171E011503110E01070E01151416333236041D -BB1955282F7A5297D26D6566011EA42D2A28703D4AB6610A37D06576AF403F42BB56E944 -5164747763A477113D12171FC89B7F9D2D2D20081D40541817102725BF0F24272F2E926C -FE1D013705141317615560614D00000200B9FFE10490061400130020005140393402350F -3B1530204402450F4B154020571267127F087B1C0C0E0906174211040C011E40060A0B08 -141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED3F3FED123939 -31305D011406070E012322262707231133113E0133321203342623220607111E01333236 -04904F4347AA665F8E450CB0BC4FB26FC6E5C2849352A8485073499CB102378CE04C4F4F -2D26340614FDD44153FED0FEE6C8CF4738FD80241CCD00010069FFE703F3047700210057 -40410F234F23022B01220E2A1624183A01350E3A16351849014F0A440E4F164118590155 -0E6901650E7A01730E131010143F0C0421211A3F03090F008D23171B09852210F6ED10F6 -3C003FED332F3FED332F31305D015D250E01232226272E013510003332161715232E0123 -2206151416333236373E01373303F35EA95F79CA484950012DF760B94D0A56B757A0B9B5 -A439762F2948150A462D32474848DC93011201383627D14348D7D0CAD91E18152F110002 -006CFFE10443061400130020004B40333C1A301C38204F1A421C48205806680670100912 -0102110518410E0401081E42050A1114021A0092221F223F22021B1B08852110F6ED5D10 -F6FD3232003FED3F3FED1239393F31305D2123350E01232202113436373E013332161711 -3303112E012322061514163332360443BC51B067C8EB514544B56158884BBCBC4C78479E -B0889650A475464E013401118EDE4E4C50252701E4FAFF0281221ADCCAC7CF470002006A -FFE60460047C0018001F005A404026042B0D30043B0D3C1E43044B0D4B1E5A0D50166A0D -6017780D7A1E0E013C1F1F0F1C3D15040B0B073F0F090C0C191A008F210F211F213F2103 -1F011B12852010F6FD325D10F4ED332F003FED332F3FED12392FED31305D01211416171E -013332363733150E0123200011100033321215272E01232206070460FCC93E36348F5672 -E7310A5FC66DFEEAFEC8012BF4E2F5B701939697B30C021B67993130305B2CCD2836012D -011501120142FEF8F32A94A2B2840001004400000312061E0018004B402D081439147505 -030000043F15000B0E3E0811050D080009400902090F090E00080B1A0F11000E400D1037 -0E891910F62B323232FD322F12392F2F5D003F3F33FD323FFD322F3130015D01232E0123 -22061D012115211123112335333534363332161703120A1F6426796D0153FEB3BC7F7FC6 -BB3F652A055E09136B8C269EFC4103BF9E25C7D50C080002006CFE590443047C00230030 -006E404E3D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C05 -702011220512211528401E0407070B40030D2E4115070F0601062124121A000618009232 -1F323F32022B1B18853110F4ED5D10E4113910FD32322F5D003FED3FED332F3FED123939 -3F31305D2510002122262735331E01333236373E013D010E01232202113436373E013332 -1617373303112E012322061514163332360443FEFEFEF459A9520A2EC864607E23231E55 -9B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A57FFEE4FEF61917C012352E29 -276E446644430121010790D14C474F272830FCD60261221DD0C6BCC23F00000100B90000 -045F061400160037402203151615751503100D084213040E01010D08021A0091181F1860 -1802100B1A0D881710F6FD325D10F6ED003F3C3F3FED123931305D2123113426272E0123 -22060711231133113E0133321615045FBC1218195E4B4DA84DBCBC58BC63B5BE027C4D87 -262A294C3BFCBE0614FDCD4952DACD00000200AF0000018305DB000300070030401E0144 -02400B0D370203060505087F090109920060041A01607F050105880810F65DE4FDE4E65D -003F3F3F2BED313001233533032311330183D4D40CBCBC0518C3FA25045D0002FFC2FE59 -021505DB000300190049402E0A051C0502014402400B0D370203163E19050B0B0F40070D -4F1701177F0A010A0160161A00600A1770190119921B10F65D3232E4FDE42F5D2F5D003F -FD322F3FED3F2BED31305D012335330314062322262735331E01333236373E0135112335 -210215D4D40CC8A828832C0A1C5F2D485816160DE901A50518C3FA0AC4C8100CB30B1C28 -2828715103849E00000100C1000004AF0614000B007D40512802D801DB090309010F0D1F -011D021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A -0802050A0507010105080B02600A700A020A0A00000D200D400D0208031A05890C10F6FD -325D11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0 -015D7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B0614FC -1A022FFDFC00000100BB0000017706140003001E4011020101087F05010592001A7F0101 -01880410F65DFDE65D003F3F3130212311330177BCBC0614000100B900000717047C002B -006A4048032403291324132944204426B72A07B62501251F1D1C0817422822041D050110 -1C08402D011F2D302D402D502D702D05001A016110250B1C0F1A101F1A1A1C611F104010 -801003102F5DF4FD3210FD11393910F4ED5D5D003F3C3C3F3F3CFD32111239395D31305D -2123113426272E01232206071E01151123113426272E012322060711231133153E013332 -16173E01333216150717BC0D151756514F9E4F0304BC0D151756514D9B4DBCBC58AF6372 -9F2772BC6BB8AF027C4886282B2C4F3D173D1EFD35027C4A85282B2B4C3BFCBE045D7C49 -5260556055DFC800000100B90000045F047C00160037402203151615751503100D084213 -040E05010D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3C3F3FED -123931305D2123113426272E012322060711231133153E0133321615045FBC1218195E4B -4DA84DBCBC58BC63B5BE027C4D87262A294C3BFCBE045D7C4952DACD0002006AFFE10471 -047C000B0017003E402C3B0E341034143B164B0E441044144B16080F3F0904153F030A0C -1B0090190F191F193F196F1904121B06851810F6ED5D10F6ED003FED3FED3130015D0110 -002322001110003332000334262322061514163332360471FEE8EBEDFEE90117EDEB0118 -C2AA9799A9AA9896AB022EFEEFFEC4013C01110111013DFEC3FEEFD9D3D3D9D2D9D70002 -00B9FE640490047C00130020004D4035320239153220430249154220561267127E087C1C -0A0E0906174211040C051E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD -32325D10F4ED003F3FED3F3FED12393931305D011406070E012322262711231133153E01 -33321203342623220607111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F -51A44B5073499DB0023C88E14E4A512628FE2C05F9753F55FECFFEECCAC84639FD87241A -D4000002006CFE640443047C00130020004B40333B033D1A301C3A204C034B1A461C4A20 -701009120502110418400E04010C1E4205091114021A0092221F223F22021B1B08852110 -F6ED5D10F4FD3232003FED3F3FED1239393F31305D0123110E01232202113436373E0133 -321617373303112E012322061514163332360443BC57AC64C7ED534442B2635A8B480CB0 -BC4E7846A3AA899352A4FE64021A4B490133010E90DD4B4950282730FCBF0278231CDDC2 -C4D34700000100B900000372045D001200384021000D100D200D030C090F000004430A0F -05090800001440147014020C071A09881310F6FD325D11332F003F3F3CFD322F11123931 -305D01232E012322060711231133153E013332161703720A2A4F3657A24BBCBC70AB5931 -2C2C03900A094D3DFCE7045DA55A4B0507000001006EFFE503D704780033009340710602 -091B1502191B26092A2432093C2442094C245E055D165321562F54326F056C166020642F -6532147A057F1174207928742B8A01880D851A872894019A1B0B000E1829041E03802201 -2222263E1E0407070B3E030921291B180E1B00211807008E350F351F353F355F357F3505 -07863410E65D10E611393910ED2FED2F003FED332F3FED332F5D1112173931305D015D01 -14062322262735331E0133323635342726272E01272E01353436373E013332161715232E -0123220615141716171E011716171603D7FDDB7CCF460A59DA647C8C26266C288135937B -393A38AD6B64CD440A48CE63678E2B2A5E34812B834747014299C43B23D3434F50564222 -221809180E27976E457A302F373123C935494F4E452323160C180A1E494A0001003EFFEA -02FD059E001B0048402C0C051A052B05030B10073E0D0B0A051B1B173F03094F1D7F1D02 -0E008C1D080D101A0A0807400D103707881C10F62B3232FD322F10F6325D003FFD322F3F -3333FD322F31305D250E012322263511233533113311211521111416171E013332363733 -02FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A0A0E12B8CB02529E0141FEBF9E -FE0358632B28251B0900000100B1FFE10457045D0016003740220B0619077A0703020515 -09051142050A010814021A0092181F186018020B1A08871710F6ED5D10F6FD32003F3FED -3F3C123931305D2123350E01232226351133111416171E013332363711330457BC5FAE69 -B0C4BC101A1B565249AD4BBC7C4B50D7D002D5FD8455792B2C284C3B03420001003D0000 -047F045D000600864041260429063604390646044906062905390540055105600505061A -000100041A03020328002703380037034A00470375017A02080005027503010305020802 -010300B8FFC0401E0910370C001C006A007A0004008D080F080103031303650375030403 -820710E65D5D10F45D2B113939003F3F5D1239393130015D8710FD8710FD005D015D0901 -2301330901047FFE3CBDFE3FCC015A0157045DFBA3045DFC870379000001005600000636 -045D000C0088406D0D031D032C012A0229032504260524082B0B34013B0544014B055701 -58045905570B6D02620464086A09640A6B0B79017D02720474087B09730A7A0B1E0C1A00 -0100071A060506000910090205080B03090C0602060502080F061F062F0603008E0E100E -3F0E6F0E030006830D10F6325D10E65D003F3F1217395D3130018710FD8710FD015D0901 -23090123013313013301130636FEDDAEFEE1FEE3ADFEDAC4CD01179B011EC2045DFBA303 -5DFCA3045DFC9F0361FC9F0361000001003C00000480045D000B00DA408C090B1B011403 -14071B09270327073C003B0134033404340634073B093D0A4C004B014403440444064407 -4B094D0A5A0155035A0555075A09550B6F016003690560076F09660B230F0200083F0230 -084F0240087D02700808091A0A0B0A071A060506011A000B00031A0405040102050B0809 -06047A047506020605040809060106020D010502080B04040A00B8FFC0401C0910370600 -01008D0D0F0D010F0D1F0D400D5F0D040602040104820C10F65D325D5D10F65D2B321117 -395D2F5D003F3F5D1217393130018710ED8710ED8710ED8710ED005D015D212309012309 -0133090133010480EDFEC3FEC1DB01B4FE50ED013B013CDCFE4901ADFE53022D0230FE5A -01A6FDDA0001003DFE64047F045D0007008C404104063406440650066006700606090307 -0519031705460149035800570179030902071A000100051A040304490046040200030204 -05020C02680101010203030400B8FFC040220910370C001C004A006A007A0005008D090F -0901030413044504650475040504820810E45D5D10F65D2B1117395D2F003F3F12393931 -30015D8710FD8710FDC0015D005D0901231301330901047FFD74C9D0FE43CC0157015A04 -5DFA0701D20427FCC4033C000001005D000003E3045D00090056403A15083A0335084A03 -45085C03540860087F0370080A0707033E06050202083E01080408030207070402098E0B -1F0B3F0B5F0B6F0B7F0B0502840A10E65D10E41139392F1239392F003FFD322F3FFD322F -3130015D2901350121352115012103E3FC7A028BFD830367FD72029F8B03359D86FCC800 -000100ADFE78045906140025005640382F1D3A074A07562367237523063A1D4A1D021D1C -09533F0A4F0A020A0A01145112012451010B140F00400002000919201F0E000940050105 -2F5D33333CFD3C2F2F5D3C003FED3FED12392F5DFD39395D3130015D012322263D013426 -2B01353332363D0134363B01152322061D01140607151E011D0114163B01045996B3DFA6 -AB3333ABA6DFB39672887B9A89899A7B8872FE78C7BC95A9BF9CBFA995BCC78A7E8CAF8B -BD371837BD8BAF8C7E000001017AFE78022806140003001B400F0F054F05020201010B00 -1F4F0101012F5DED003F3F3130015D012311330228AEAEFE78079C00000100BBFE780467 -0614002500544034211235023112400240127A0C06131200533F254F25022525091B511C -010A51090B1B0009010900170E1F050509004F200120202710D62F5D33333C10FD3C2F2F -5D3C003FED3FED12392F5DFD39393130015D012322061D0114062B01353332363D013436 -37352E013D0134262B01353332161D0114163B01046733ABA6DFB39672887B9A89899A7B -887296B3DFA6AB3301F8BFA995BCC78A7E8CAF8BBD371837BD8BAF8C7E8AC7BC95A9BF00 -000100BB018B05D1039F001F0056404206030609091309191908170A1518191A3B083418 -4B0844185A035A0A550D541B5B1D60056E14611875047A147518170F1C54060C54061F16 -1F2A000001000F2A00102F33ED2F5DED002F3333ED2FED333130015D010E01070E012322 -26272E0123220607233E01373E01333216171E013332363705D102292D2E82645E925466 -5C325E6409A702292C2B8A605D935550663D676103039F63C04B4D584F667D40AFC464BD -4D4A5B4D68625BCAA900FFFF001A0000055E07500236002400000117008E002F0175001A -40130320113011401170118011050200110E060725012B355D350003001A0000055E0801 -0012001E002100DF40442B2040205A18551A501E55206918651A651E09180B170D4A0646 -125906561278027703082020211F02870101011400120020210387040104140505067B06 -74120216510CB8FFC0405D0D10370C033470210121212006120405001C011C0301050813 -114F0F500F600F030F191140095F096F0903090F230106090F1204050C00240039004200 -5A006A0074000700006E230F23010A052B0536054D05550565057B050705642210E65D5D -10F62F5D1217395D2F5DED2F5DED003F3C3F5D1217392F5DED2F2BED3130015D8710FD5D -C0C0C08710FD5DC0C008C0015D005D212303210323012E01353436333216151406071334 -26232206151416333236130901055ED394FD8094C90207596BCC9293CB69592C72565672 -7355567236FEFEFEFD019FFE61057F2C9F668FC2C28F64A32A012F56737455567373FBF1 -02CBFD3500010073FE59054605EC00410097406F0A20032B1C20152B250B222B3402330B -342B4302430B452B5D1F582158255A275E3F6102602B70027626702B160B0B1B0B022D2D -313429021A061D41413D341D0A101014320C0D0F0F172A0009100920090309091D234371 -2C0071430F43010F431F432F433F436F4305371523684210F6ED5D5D10F43CE41239392F -5DED332F003FFD322F3FED332F1239393FED332F31305D015D250E01070E01071E011514 -062322262735331E01333236353426270E01232224272602353412373624333216171523 -2E01232206070E01151416171E01333236373305463759480B1A120203BB9326772D091A -5B326A620202132B12A2FEF762606C68625F010DA478EF920F7BF28A71B547454D554346 -BB688FFA6D0E6C182A17030903133317A2AC0E0CA20A1C5056132D1402025B615F0125C2 -B801226461663A49EB675E494D4BE5969DE2474A47626200FFFF00C80000049D08010236 -002800000117008D001E0175000BB601000D0D020325012B3500FFFF00C80000053807C8 -023600310000011700D7008C0175000BB60100170A050925012B3500FFFF0070FFE105D7 -075002360032FD000117008E009601750018401103002930295029702904020029240F03 -25012B355D35FFFF00B2FFE1052907500236003800000117008E00620175001840110210 -24202440246024040100241E0D1D25012B355D35FFFF0068FFE1041D068C023600440000 -0116008DE300000BB6020036371D2625012B3500FFFF0068FFE1041D068C023600440000 -01160043E800000BB6020035371D2325012B3500FFFF0068FFE1041D068C023600440000 -011600D6E000000BB6020038341D2625012B3500FFFF0068FFE1041D05DB023600440000 -0116008EE000001E4016030F39703902020039103920394039040039341D2625012B5D35 -5D35FFFF0068FFE1041D0653023600440000011600D7E200000BB6020041341D2525012B -3500FFFF0068FFE1041D07B1023600440000011600DBD300000DB70302003A341D262501 -2B35350000010069FE5903F3047700380080405B0F3A4F3A022A012A0726252A2D252F3B -01390735253B2D342F4B014F2140254F2D402F590153256C0166257A017525150B081B08 -0227272B3F230417031A3838313F1A090D0D113D090D0C0C142A06061A2026008D3A2E1B -20853910F6ED10F63C1139392FED332F003FFD322F3FED332F1239393FED332F31305D5D -015D250E01071E011514062322262735331E01333236353426270E01232226272E013510 -003332161715232E01232206151416333236373E01373303F3214D1D0305B79225742D09 -1A583268620302101D1979CA484950012DF760B94D0A56B757A0B9B5A439762F2948150A -460F1F0913391CA2AC0E0CA00A1A4E58162E140204474848DC93011201383627D14348D7 -D0CAD91E18152F11FFFF006AFFE60460068C0236004800000116008DFD00000BB6020022 -21121825012B3500FFFF006AFFE60460068C02360048000001160043FD00000BB6020021 -20121825012B3500FFFF006AFFE60460068C023600480000011600D6F900000BB6020024 -20120025012B3500FFFF006AFFE6046005DB0236004800000116008EF9000014400D0330 -2560250202002520120025012B355D35FFFF00A000000246068C023600D500000117008D -FE830000000BB601000505020325012B3500FFFFFFEB00000191068C023600D500000117 -0043FE970000000BB601000505020325012B35000002FFF50000023C068C0006000A003D -40247A0174037A057406040201030505030905080800047F0C01000C92071A047F080108 -880B10FD5D32FDE4335D2F2F003F3F2F332F1239393130015D01230B0123133303231133 -023C978F8E93B2E313BCBC0511010BFEF5017BF974045D00000300050000022D05DB0003 -0007000B0041402702010744600401040A050908011A7F000100041A700501057F0D0100 -0D92081A057F090109880C10F65D32FDE4335D2F5DED2F5DED003F3F2F5DED3939313001 -2335330523353313231133022DBDBDFE95BDBDB5BCBC0518C3C3C3FA25045D00FFFF00B9 -0000045F0653023600510000011600D70700000BB6010024170E1525012B3500FFFF006A -FFE10471068C0236005200000116008DE200000BB602001919060025012B3500FFFF006A -FFE10471068C02360052000001160043E200000BB602001919060025012B3500FFFF006A -FFE10471068C023600520000011600D6E200000BB602001C18060025012B3500FFFF006A -FFE1047105DB0236005200000116008EE2000014400D03301D501D0202001D1806002501 -2B355D35FFFF006AFFE104710653023600520000011600D7E200000BB602002518060025 -012B3500FFFF00B1FFE10457068C0236005800000116008DEE00000BB601001918101225 -012B3500FFFF00B1FFE10457068C023600580000011600430200000BB601001818091625 -012B3500FFFF00B1FFE10457068C023600580000011600D6F800000BB601001B17091625 -012B3500FFFF00B1FFE1045705DB0236005800000116008EFD000016400F02301C501C60 -1C0301001C17091625012B355D35000100BB0087045B0614000B003C4026070A0B000104 -0605AA0606080308010F0D1F0D02006302040708090A010602280563700301032F5DE6ED -173910E65D003F2F12392FED17393130012513231305350503330325045BFE6D058405FE -6D01930584050193040A05FC780388058105018EFE7205000002009A02CC03BC05EC000B -0017002840186A0F65157A0F751504155403030F5409020C2A0000122A062FED332FED00 -3FED332FED5D313001140623222635343633321607342623220615141633323603BCE8A9 -A9E8E8A9AAE7A58666668689636686045CA8E8E7A9A8E8E8A8668B8B6668898C0002009F -FE97046005C3001C0023007B40553C0A3F2030224B0A4F2040225A0153116C0164117901 -7611791F76230E1D1E180D3F134F130213130D1747060C030F0505201C301C401C031C18 -471C05030F251F2502130021202F090109001D0C0F1804031E09062F33ED1739322F5DED -2F3C5D002F3333ED2F5D2F3F123939ED33332F5D2F11393931305D250E01071123112600 -353400371133111E011715232E0127113E01373305110E01151416046047B46876E3FEFB -010BDD7668BA410B37AE7378AD330BFE2787A2984A1E2F03FE9D0167150120FAF2012B16 -0163FEA1032C1FCB2C5209FCB90A552985034214D2BDB5D2000100890000048B05EE0021 -00774050201D3415321D03031E151E251E410E530E5B16630E7302730E091B1805460F08 -1F084F0803081010144908010C0202204A01080F231F23021F02181B20080519060F0605 -190F040220004000020000022F332F5D1217392F2F2F2F33FD3211395D003FFD323F1239 -ED332F2F5DED393931305D015D2901353E01352335331134123332161715232E01232206 -1511211521151406071521048BFBFE7667B0B0FDCD6998400A3E98568C8B019FFE617C62 -0345CF20BDB98A0136C801012211CE2A30A590FEDD8A3D7EBB390B00000200ACFE7F0468 -05EF0043006100A9407F05050A2714051D273E2030424D104F20433240425C105E165132 -63096E106A2B63321152055F205F255F275B2D5B3950426B1F6A20653D654061427C097C -10742B7431107B50745F0218075F50293A062F0D3333373F2F021111153F0F0D1F0D020D -181B5F045607333A1B50262911471A1129330704221000010000561A222FED332F5D1217 -39ED2F2F3939ED2F2F123939ED002F5DFD322F3FFD322F111217395D31305D015D011406 -07151E01151406070E012322262735331E01333236353426272E01272627263534363735 -2E01353436373E013332161715232E01232206151416171E0117161716033E0135342627 -2E01272E01270E01070E01151416171E01171E01173E01046876636158424148C27C57A7 -5C0A4FB46C86A2272D299052D6525372666554404340C78057A85B0A3ABD797FA92B2B2B -845BC85A59F71C1E211D1C4E2C275D46123E1618261F1D1B512C266043144202596AA237 -072E915A4D8A3238361B1FC2253261573841191725143451518162A93907309259518334 -323A1C1DC21B3C5C573947171725152E4F4FFEAB21413A334617181F0C0B1514092D181A -563132461817200B0A18130B2F00000100B9012103A4040B000B0013B703030900000688 -0C10F6322F002F332F313001140623222635343633321603A4DC9A9ADBDB9A9ADC02969A -DBDB9A9ADBDB00010089FE95045205D1000D003B40245308610802010F0501054F060106 -0602AA0C030F0F1F0F020529040402290F0D010D0D092F332F5DED332FED5D003FED332F -5D2F5D3C31305D012311231123112E013534243321045294D695CEFC0104F301D2FE9506 -BAF94603BC05F8CCCFE8000100B9FFE8048D061E0036006D4048052E152E2E132C343913 -39343736490E4636532166217B1B0C3433143D151E3C15032D0007070B3D03092608181B -303400140C061C060206111B000614300325009038251A26883710F6ED10E611173910ED -2F5D2F12392FED003F3FFD322F3F1239ED2FED39393130015D0114002322262735331E01 -333236373E0135342623353236353426272E01232206070E01151123113436373E013332 -1615140607151E01048DFEF1DB2C73240A2A63384A6E21231FD3C69D9A161E1B583D395C -28252DBC48403CB35EB7E58E71A4BE01E1D6FEDD0F0DA518123A31347F4CA6A996778123 -421F1D231D2724845FFBC104387CB73E3A3BAE9770B2200925DF0004009FFF2E076105F0 -000B00170028003700AD407A7C0D7C11701370177A1A74277336070D1A04231E1A122314 -282C0E231022142C16211824233F1936234919472252186B0E641064146B166A19151A19 -2A182818292A25252818311B2A001D101D4F1D0318001D01901D011D0CAD1D06000012AD -06281AAA31311E19401D011D30AA1E15501D1E0903030F500902003FED332F123939ED2F -ED2F5D3C12392FED39012FED332F1239ED2F5D71335DFD3C2F39392FED8710FDC0313001 -5D005D011000212000111000212000031000212000111000212000072301231123112132 -16171E0115140607373426272E012B0111333236373E010761FE05FE9AFE9AFE0501FB01 -66016601FB74FE49FECAFECAFE4901B70136013601B7C0DFFEB5A2A501385E7A3B3F3B71 -63201C211F4635957F3E5A1D1F19028FFE9AFE0501FB0166016601FBFE05FE9A013601BC -FE44FECAFECAFE4401BC820163FE9D0393101F226149618126FD243812110AFECB131719 -3C000003009FFF2E076105F0000B001700330096406D7C0D7C117013701779197223062C -0E231022142C1633183324332A332E44184124442A442E54185424542A542E6B0E641064 -146B1662186A1D642417257F1801182C2A181E0CAD1E06000012AD06103320330233332F -521B1F252F2502252529522115501B210903030F500902003FED332F123939ED2FFD322F -5D2FFD322F5D012FED332F1239ED2F33ED2F5D3C3130015D005D01100021200011100021 -2000031000212000111000212000050E012322243534003332161715232E012322061514 -1633323637330761FE05FE9AFE9AFE0501FB0166016601FB74FE49FECAFECAFE4901B701 -36013601B7FE72569F4EE3FEF8010DDE59AC3E1036A9598E9F9994539D4810028FFE9AFE -0501FB0166016601FBFE05FE9A013601BCFE44FECAFECAFE4401BC572727F6EAE1010230 -1CB52846ABA59FAE3A34000200AA031106F105D1000E0016005240217B0478057A060379 -0C010B0C0D01030406080815121210135015030D280B0F370BB8FFC440110B0F37022800 -000728090FAE102814AE132FE4FDE42FED332FED2B2B003FFD3C332F1217395D3130005D -0123112303230323112311331B0133052311231123352106F17C14ED4FEF197BEEBFBFE3 -FC02E57FE5024903110269FE3D01CAFD9002C0FE82017E75FDB5024B75000001021D0516 -03C3068C000300244016470156006600760004500360037003030303010000022F332F00 -2F332F5D3130015D0901231303C3FEEF95B3068CFE8A01760002015A051803BE05DB0003 -000700264015020644016005010500140F010101041401000501052F5D33ED2F5DED002F -5D3CFD3C3130012335330523353303BEC7C7FE63C7C70518C3C3C300000100F5001B0597 -04FD0013008840541612010C0B080704030E111201020D80029002A002B0020402290303 -0C030D030112045307110E08530D070F0B010B40150130154015020407080B0112110E08 -030D0309030D1004062F004000020000400601062F5D332F5D1217392F2F1217395D5D00 -2F5D3333ED39392FED3939322F2F3130018710FD5D87C0C0C0C010C0C0C0C0C0015D0121 -0323132135211321352113330321152103210597FDA0689968FE5701DA54FDD2025E6999 -6901ABFE2453022F016AFEB1014F9C010C9C014FFEB19CFEF4000002000E0000076D05D1 -000F00130079404F04030B061B041B052A042B053B064A044A054D064D120B1213030414 -05050675057C06020A100E140115730601080B0440000100000F05010564140334130D35 -0A0A13050835123406030E35010508003F3CED3FEDED1239392FED2FED300110F65D322F -5D1739E62FED393931305D8710FDC0C0C0015D2901112103230121152111211521112101 -112303076DFC50FDF4D4CF0252050DFD1302EDFD1302EDFC50DBEF022CFDD405D1B0FE68 -B0FDD702230259FDA70000030073FF6E05DA064B001D002A003700A640850203000B0A0D -0C120F1A051C1103190D1F121F1A151C550254045A08590D59115B135017551C792A140B -090318061B1F0A1F0B1118161B2609272F75037F097F0A7F0B7F0C791270187019701A70 -1B132A2F1E2E043221340C09181B040615023234060A2A2F1E2E04272B15000C09181B04 -0F0073390F39010F391F393F390327150F683810F6ED5D5D10E411173910ED111739003F -ED3F121739FD11173931305D015D011402070E0123222627072313260235341237362433 -3216173733031612012E01232206070E011514161701342627011E01333236373E0105DA -63595CFBA173C94F9F84CD656D605C5801059A76C2528E84BC656FFE6F3990596EB44240 -453B3A035C3C3AFD683C91596EB73E434202E8B8FEDD6165663A37E4012664012CC4B601 -216762683737C9FEF464FED7013A2E2D4D4E4CE5938CE04C01B88BE44BFC432D2E504C52 -E100000300A1009D075F047C00170026003500724054051608311526192F2923262C3B34 -441C4B34510256075F0A5F0E5A1351165918553063026D0A631669236C24642C642D1821 -AF33AF0306120F09092AAF1BAF150F7B18743002272A0030180C0099371E2A0C993610F6 -ED10E411393910ED5D002F3CEDED332F1239393CEDED3130015D011402232226270E0123 -2202353412333216173E01333212052E01232206151416333236373E0125342623220607 -0E01071E01333236075FF5CF85DE454FD38FBFE2FACA86DE444FD58DBFE2FC683FB8608A -9C7F776E7C392225030C807658814A1E33133CBB608A9C0297EFFEF599929794010FD6EE -010C9A919695FEF1947575A79A85A6615E39470186A5477830672C7377A6000100D700B3 -05B505B6000F004540290E03540F010101010D045408AC0A070C401101301140110200AB -0A800D010D2A040105AB07400401042F5D3CF43C10FD5D3CF45D5D3C002F3CE4FD3C322F -5DFD3C31302521352111213521113311211521112105B5FB22021CFDE4021CA6021CFDE4 -021CB39E01A69E0221FDDF9EFE5A000200FE0000058005710006000A0061401605045403 -020306540001002C26012902360139020400B8FFE240240B1837031E0B18370954080303 -00400C01300C400C020504090A040100004001500102012F5D332F1217395D5D002F332F -2FED2B2B31305D4B53588710FD8710FD05C05909013501150901112135210580FB7E0482 -FC870379FB7E0482012F01E37C01E3B7FE96FE96FE1AA0000002010C0000058E05710006 -000A0063401603045405050602540101002C26002906360039060401B8FFE240260B1837 -051E0B1837095408050501400C01300C400C020503090A040100002F013001400103012F -5D332F1217395D5D002F332F2FED2B2B31305D4B53588710FD8710FD05C0590901350901 -350111213521058EFB7E0379FC870482FB7E04820312FE1DB7016A016AB7FE1DFC72A000 -0001006C000004A705D1001000834020300E3F10420E4F10540E5B10650E6A10730E7C10 -0A0020090B371020090B370EB8FFE0B3090B370DB8FFE04033090B374601550F700F0305 -0208320B0B0C010F0005070D0307080F121F1202030A005C0501030F05130D5C0C0A0F08 -BF0802082F5D3333E4ED39323210E42F2F5D003F3F1217392FED393931305D012B2B2B2B -5D090115211521112311213521350133090104A7FE400174FE8EBCFE8E0174FE3DD4014C -015005D1FCC15E8AFE5601AA8A490354FD6D0293000100BEFE640464045D001500384020 -080205140B051042050900080A0C0102131A0092171F176017020D091A0A881610F6FD3C -5D10F4FD3939003F3F3FED3F3C12393931302123270E012322262711231133111E013332 -363711330464B20A3B815B567F42BCBC209B5B5D8536BC76414A4640FDF305F9FCBA2752 -433C034000020095FFE0047905EF00220031006640481502151B162E2904241B310A351B -410A431B560A551A561F5020562A641A661E642A632E751B702E140F06263F0C0C061D19 -19153F1D022C3F060A1A0F232912141A0900002914092FED332F1239ED1139392F003FED -3FFD322F1112392FED123931305D011402070E01232226353400333216173E0135342623 -22060723353E01333216171E01032E01232206151416333236373E0104794E5255CB71C0 -F3010DCA5A9F4F02029E984EB74E0B51C96089CD3E2A1DCB3C98488DA8877080A322060B -0345A4FE987B7C62FDCBE4012134411A3B1AD9CA3F37C22C2D6D7C56CEFEC42F36B6AA91 -99C2BE215000000100BBFF43055905D1000C00A9406A01030F08450B8B03D903D30B0601 -08010B2B033208320B5D03660A600B08030203080908B3040304030B0A0BB30202030302 -03080908B3040304030B0A0BB30202030303610A010A07040304070A04020C0C0203090A -0A6B090109040202040309040B0835050301350B002FED3FED1117392F2F2F5D332F1239 -012F332F1217392F2F2F5D332F313087107AED87C0018710ED8708C00187107AED87C001 -8710ED8708C0015D71052135090135211521011501210559FB6202A1FD69046DFC850288 -FD6603B4BDBF029C0277BCB0FDA748FD730000010090FF3F05FC05D1000B003B40250307 -050009350A0270007F09020414005A6F017F010201010D0514095A00086008700803082F -5DE4ED11332F5DE4ED5D003FFD3C3C2F3C313001231123112111231123352105FCC8C6FD -B0C6C8056C0523FA1C05E4FA1C05E4AE0001007100000541045D000B002B401703070500 -093E0A05041A00B001010D051A09B0100801082F5DE4ED11332FE4ED003FFD3C3C2F3C31 -300123112311211123112335210541CABCFE3CBCCA04D003BFFC4103BFFC4103BF9E0001 -008AFE590490061E0021002C4018000004401E00111115400D0D0F231F2302001000091A -10192F33FD322F2F5D003FFD322F3FFD322F313001232E01232207061511140706232226 -2735331E013332373635113437363332161704900A2073208134356869BC346D310A216C -228135346868BD3A6636055708153D3D95FB9DCE6D6E0B0AB208153D3D950463CC6F6E0B -0A0000020097021303B005F000230030005740370A0A06211B0916212E0925215529600E -6029700E70290B02082552111120081C1C1853200201012E5308061D1125022A1D0B002B -2A000B2F33ED2F1239FD32322F003FED332F3FFD322F1112392FED12393130015D012335 -0E01070E01232226353436373E0137353426272E012322060723353E013332161503350E -01070E0115141633323603B0AA1C312C2D514980AF5D4D4EEF88242122573054A8270E2D -B84DD9BEAA45B736404E5B5E5283022A5E1425131415AA846A8724241F0612354013120A -300EAC0D20A99FFE74F504100F124D444C4C430000020079021303E405F0000B00170031 -40205D015D055207520B046A0F6515020F530902155303060C2A40000100122A00062F33 -ED2F5DED003FED3FED5D31305D0114022322023534123332120734262322061514163332 -3603E4F4C1C9EDEDC9C1F4B687787A86867A78870401EBFEFD0109E5E5010AFEFCEBACAC -AEAAAAADAB000001006B0000062105F00027006240440909090D1A091A0D2C092C0D3403 -300530113413460346136A1A641D64216A24101925140204160B341F0226183501160825 -1202191214081502141C272222290E15171C2FC4ED11332FC4123939ED2FED2FED003F3C -FD3C3FED12173931305D2901113E01373E01353426232206151416171E01171121352135 -26023510002120001114020715210621FDA443842D2F38F8E2E2F83A2F2F7F44FDA401B4 -A8D90172013601360172D9A801B40185275A373A9970C8FDFDC86E9E38395727FE7BAE7C -580132CC0116015AFEA6FEEACCFECE587C0000030068FFE3073F047C00390043005200B9 -40840B190B1D1C192604200D3604320D383D34414204420D4A3D4241520D5237554B630D -6137654B13161D4B2A512E622E7B0D7E137C1E7D24732E73387C4B0B47013C2170430143 -124333033018403D36042C2C283F30040B0B073F0F0A5041180A433A011A474412213304 -00470F2D012D0C0C3A1A00472D1B008F544054014D1B001B855310F632ED5D10E4113939 -10ED332F2F5D2F1217392FFD1139003FED3FED332F3FED332F3FED111217392F5D33FD32 -31305D015D01211416171E013332363733150E01232226270E01070E0123222635343637 -362437353426272E012322060723353E01333216173E0133321215272E01272E01232206> -<07032E01350E01070E01151416333236073FFCCD3C37348E566FD5420C4ED56DA6ED4C15 -5C323F947396D36C655F0124A22E2928703C4FB35A0D37CE659FD33945CA7DD9FBB60525 -20226D4F85B41991141569C0524F61747663C1022F72A234302D5334CD233B686713501C -242FC2987C992A271C033D41551717112A24BF0F265D5B5268FF00FB3E446625272C968C -FE6B35844B030915145B535F5C560003005DFF6C047104D900170021002B007840560008 -0F140A19292604001800250200180025020914001800253D1D322B4D1D422B0721261825 -04291B3E0609121504030F04293E030A21261825041E221B0009061215040C00902D0F2D -1F2D3F2D6F2D041E1B0C852C10F6ED5D10E411173910ED111739003FED3F121739FD1117 -3931305D5D5D015D011000232226270723132E01351000333216173733071E01252E0123 -22061514161701342627011E013332360471FEE8EB548F3B856EAB4B530117ED578E3674 -6F9B4C54FEBC2563379BAA222302442322FE40275F3B96AE022EFEEFFEC42A27C601004D -E2930111013D2C23ACE74CE0DC1D1DDCD2619436012B619836FD611F1ED900020071FFE2 -03BE05D100030020006D404C0F221F2202131E231E3A053A144B05400D400E400F43165C -05520F6F05650E651A7A057A0910127F1301131007120155030320201C34070A022B0303 -101F70130113130A200401041915040A2F33ED2F5D12392F5DED332FED003FFD322F3FED -331239395D2F31305D015D01233533130E01232226353436373E01373533110E01070E01 -151416333236373302C8CCCCF653BA70D7F9453B3A9D44B33C9E2E3644997967C5390A04 -FED3FA571E28D1AB62963E3E6529E1FECF2161282F7C4E716F4225000002012300000203 -05D1000300070027401707070055030305080F0901045D032B055D0F02200202022F5DE4 -FDE45D003F3FED332F3130012335331323133301F9CCCC0AE01AAA04FED3FA2F04370001 -00D2003905B002FA000500294018000002540F0401044007013007400702012A40000100 -00042F332F5DED5D5D002F5DFD322F313025231121352105B0ABFBCD04DE390221A00001 -0086FF6906C906FC0008004A402C15073307440772070407070806140302030207090829 -08590869080408000100010100040351060607080208002F2F1239392FED012F2F332F31 -308710DD5DC0C08710FD08C0005D09012301233521090106C9FC9066FE80ED0189013902 -DA06FCF86D03E18BFCCB065C0001FFDCFF37050005EF002B0077404D070B001F2E08270C -270F2E212925350D300F400E410F59226607660C0E0C0B0807201D1E21221D220F2D1F2D -020920201D2209041600160B081E462121281200000449280216161A4900120112002F5D -FD322F3FFD322F1112392FED393930012F2F1217392F2F5D8710C0C0C0FDC0C0C0313001 -5D01232E012322060F01211521030E01070E012322262735331E01333236371323353337 -3E01373E013332161705000A1D7229797E232A0141FEA3671D5C4041985C2950340A215E -2C7F812367D9F52A1A5C3E3E99573A4F3405290A1A77A0C28AFE1686B034352A0709B40E -1480A701EA8AC67BA833332C0A08000200F300CA0598045000190033006D40490A010606 -050E08130A1B06200528082D5B0452115B1E522B680B6432790B743210272730541D1A23 -541D1A002A012A0D0D1654030009542A0300101929000033291A0C290D26291A272F33ED -3CED2FED332FED002F333333ED2F2FED332F2F5D3333ED2F2FED332F31305D010E012322 -26272E0123220607233E01333216171E0133323637130E01232226272E0123220607233E -01333216171E0133323637059714B69E4D8C3841682C4B541C9B17B39F488E3B3D6B2D4C -59139E19AEA348903927802E4E56149D13B79E4D8A3A237C364B541B0450C2C64B2D3437 -607CB6C44A2E303B6D7DFDFCB8C34B2D1F4C6E7CC0C84A2E1C4F637A000200320000059E -05D100030006004F403148024703025A056A050205041A000003061A010102390236036B -0264037B02750306020305030000080105010203065401002FED3F1239012F11332F1739 -5D31308710FD8710FD04C0005D015D290101210902059EFA94023201080127FE50FE5105 -D1FAD7047BFB8500000200A600A2047A04760006000D005940107305730C0204400C1037 -0B400C103706B8FFC0B30C10370DB8FFC0401B0C103703000300070A0A07040500010100 -000C0B084007010707082F332F5D123939332F332F123939002F332F1239392F2F31302B -2B2B2B015D2501350115090105013501150901047AFDF00210FE9B0165FE52FDDA0226FE -8D0173BF01A35501A2BCFEEFFEEFD901BE5901BDC4FEDAFEDA00000200AE00A204820476 -0006000D005740107C037C0A0204400C10370B400C103702B8FFC0B30C103709B8FFC040 -1A0C10370C080C080505010403014000010000010A0B08070107082F33332F1239392F33 -2F5D123939002F332F39392F2F31302B2B2B2B015D090135090135010501350901350104 -82FDDA0173FE8D0226FE3CFDF00165FE9B02100260FE42C401260126C4FE4357FE5DBC01 -110111BCFE5E000300B2000005DA00DF00030007000B0025401405010206040A55090800 -2B0101042B0505082B092FED332FED332FED003FED173931302123353305233533052335 -3305DACCCCFDD2CCCCFDD2CCCCDFDFDFDFDFFFFF001A0000055E08010236002400000117 -004300640175000BB602000C0E050025012B3500FFFF001A0000055E07C8023600240000 -011700D700330175000BB60200180B050025012B3500FFFF0073FFE105DA07C802360032 -0000011700D7008B0175000BB6020031240F0325012B3500000200780000081C05D10016 -002500554039001C0022301C3022401C40227204720A721C741D72230B14351111011834 -10350D0317341535010811141417170E1203070073271F1507682610F6ED10E61117392F -FD32003FEDED3FEDED12392FED3130015D29012224272602353412373E01332115211121 -152111210511232206070E01151416171E0133081CFBCEC4FEFD6791B3AE984FF9E8042E -FD0502FBFD0502FBFC407A92B55F7481716D5BD09236415B0146CFD7013C603344B0FE68 -B0FDD7040479203642F8ABABEE4439280003006AFFE10776047C0024002B00370094406C -2604200D3204300D32293B2E323032343B364004400D40294D2E403040344D36530D5314 -5C165C1A531C5322620D621C6222700D72221B013C2B121E2B030F283D21042F3F1B040B -0B073F0F0A353F150A1E122B011A7F2C012C0C0C251A002C18008F393F3901321B188538 -10F6ED5D10E4113910ED332F2F5DFD323939003FED3FED332F3FED3FED1217392FED3130 -015D01211416171E013332363733150E01232226270E01232200111000333216173E0133 -321215272E012322060F0134262322061514163332360776FCDC3C34348D526DCD460C62 -BF69A8E84A45D183E9FEEF0117E38CC84447D78FE1ECB703918D8BAF10B8A49399A0A792 -92A5021B689831312F4F38CD2A347A686F78013C01110115013979726A81FEF4EF2A9B9B -A4927DD7D5E0CCD4D7D500010099023C047D02DC00030018400C0154020000050F051F05 -02022F5D11332F002FED313001213521047DFC1C03E4023CA00000010099023C076702DC -00030011B6015402000005022F11332F002FED3130012135210767F93206CE023CA00002 -FFED03E503160614000300070052B502180D103701B8FFE8B3090C3700B8FFE840090910 -3706180D103705B8FFE8B3090C3704B8FFE8401309103701000501050502060100B10202 -04B1062FED332FED003F3C332F5D3C3130012B2B2B2B2B2B0123013303230133031686FE -F1F0EF86FEF1F003E5022FFDD1022F000002009603E503BF0614000300070050B90004FF -E8400E0D10370518090C37061809103700B8FFE840200D10370118090C37021809103701 -000501050503070100B1020204B1000601062F5DED332FED003F3C332F5D3C3130012B2B -2B2B2B2B090123132301231303BFFEF186A5A4FEF186A50614FDD1022FFDD1022F000001 -FFED03E5018606140003002EB502180D103701B8FFE8B3090C3700B8FFE8400D09103701 -00010101020100B1022FED003F335D2F3130012B2B2B0123013301868AFEF1F403E5022F -000100A003E5023906140003002FB90000FFE8401A0D10370118090C3702180910370100 -010101030100B1000201022F5DED003F335D2F3130012B2B2B090123130239FEF18AA506 -14FDD1022F00000300D2000705BA051100030007000B00414029000B010B5608AC045407 -0F0101015602AC0F070107400D01300D400D0204AB000B2D05AB01400A010A2F5D3CE4FD -3CE45D5D002F5DF4ED5D10FDF4ED5D313001231133012135210123113303BDEEEE01FDFB -1804E8FE03EEEE03FE0113FD2BA0FD2B0113000200ACFFC805E00554000300070057403B -4804470658045706680467067F047006087F057007020705000301000330036003900304 -03B200023002600290020402B220010406020002000201192F3333182F2F123939002F1A -19FE5DEE5D11173931305D015D090705E0FD66FD66029A01BDFE43FE4301BD028EFD3A02 -C602C6FD3A01DDFE23FE2300FFFF003DFE64047F05DB0236005C00000116008EDD000016 -400F02100E600E700E0301000E0B040025012B355D35FFFF0006000004E607500236003C -00000117008EFFED01750019401302000E400E500E600E700E0501000E090500252B355D -35000001FF9A0000034B05D10003001D401138034803680065016903050100030000022F -332F003F2F3130015D09012301034BFCF4A5030C05D1FA2F05D100010000FFE504CA05EC -003300CC408758040102B52F0103B81D010237184718571867187718E718F71807013A00 -4A005A006A007A00FA0006032C06502998090109230F5020F71201081218122812581204 -00121203151827190119191D341502002833010133332F34030A272001022320292C0400 -0F12090604260C082A182A282A03002A21210C18007135103407073426150C683410F4ED -12392F103C10F63C11392FC45F5D111217391117395F5D003FED332F5F5D333FED332F5D -331112392F5F5D5D3CFD3CDD5D3CFD3C5F5D5F5D5F5D5F5D31305F5D250E012322000323 -37332E013534363723373312003332161715232E01232204072107210E01151416172107 -211604333236373304CA6CB97EF3FE8331862C4B02020202772C5D3A0174F38DBF541050 -C67C9DFF003001DB2CFE3C02030202017C2CFEC4310108969DB2440F3E3326012E010476 -152F161A34187601010128292DD1413DCFB17618341A172E1576B6D13F3D000100BA00AC -02E0046C0006002C400972050104400C103706B8FFC0400C0C1037030300040501000001 -2F332F123939002F332F31302B2B015D2501350115090102E0FDDA0226FE8D0173AC01B4 -5901B3C7FEE7FEE7000100C200AC02E8046C0006002C40097D030104400C103702B8FFC0 -400C0C10370505010403010000012F332F123939002F332F31302B2B015D090135090135 -0102E8FDDA0173FE8D02260260FE4CC701190119C7FE4D000002004400000453061E0003 -001E005B40370B103A10601A741A04014402031515193F1100070A3E1D0D050509080B14 -0160051A006004140A0492201D071A0B0D0A400D10370A891F10F62B3232FD3210E61139 -10E4FDE42F2F003F3C3F33FD323FFD322F3FED3130015D01233533032311211123112335 -333534363332161715232E012322061D01210453D0D011BCFDF9BC7F7FC8B73E65290A1C -6A22796A02C90518C3FA2503C2FC3E03BF9E31C1CF0D07AA08146B8C2800000100440000 -0447061E001A004E402D6C077A0702191A191A053E16000C0F3E091205010E08100A011A -000A0F00921C090C1A10120F400D10370F891B10F62B3232FD3210E6113910ED2F2F003F -3C3F33FD323FED33332F2F31305D2123112E012322061D01211521112311233533353436 -33321617370447BC2B8B35A2850149FEBDBC7F7FE9DE45902CBC056D080C6C8C2C9EFC41 -03BF9E31BFD10E040800000100BB007C045B06140013005740390B0E0F1011080609AA0A -0712130001040605AA060A060C030C010F151F150210630063020407080B0C0D0E111201 -0A022803090563700301032F5DF63C10ED173910E6E65D003F2F1239392FED17392FED17 -3931300125132313053505110535050333032515251125045BFE6D058405FE6D0193FE6D -01930584050193FE6D019301FB05FE7C018405810501A20581050184FE7C058105FE5E05 -000100FD01FF01EC031A00030016400C02560108002D2F013F0102012F5DED003FED3130 -0123113301ECEFEF01FF011B0001FFF6FEEC018F011B0003002EB90000FFE840190D1037 -0118090C370218091037010F0301011F03010300B1022FED002F5D335D2F3130012B2B2B -09012313018FFEF18AA5011BFDD1022F0002FFF6FEEC031F011B000300070051B90004FF -E8400E0D10370518090C37061809103700B8FFE840210D10370118090C37021809103701 -0005010505030F071F07020700B1020204B1062FED332FED002F5D3C332F5D3C3130012B -2B2B2B2B2B0901231323012313031FFEF186A5A4FEF186A5011BFDD1022FFDD1022F0007 -0095FFE30B9305ED000B000F001B00270033003F004B00C640900908060A0918061A083C -073E1808170A1818171A193C163E2908260A2918261A283C253E460D480F560D580F680E -17791F7625792B7631794376490625512F034F030203031F5109020F030E08432B513D20 -19401902191949315137130A4F0C400E020C0E462A003A013A402A3A003401342E2A0016 -01163416282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D12 -3939ED33332F5DED2F5D33ED2F5DED2F2F5D003F3CFD3C332F5D3CFD3C3F3F3FED332F5D -ED5D3130015D011406232226353436333216250123090114062322263534363332160134 -262322061514163332360134262322061514163332362514062322263534363332160734 -262322061514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6 -BAFABB596466585866645904935964665858666459043EBEB2B5BABDB2B6BAB259646658 -586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADCDDE0DADA01B8AC8888ADAD8787 -FE17AC8888ADAD8787AEE0DADCDDE0DADADFAC8888ADAD878700FFFF001A0000055E0801 -023600240000011700D600280175000BB602000F0B050025012B3500FFFF00C80000049D -0801023600280000011700D600260175000BB60100100C020325012B3500FFFF001A0000 -055E08010236002400000117008DFFF80175000BB602000C0C050025012B3500FFFF00C8 -0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500 -FFFF00C80000049D080102360028000001170043003C0175000BB601000D0D020325012B -3500FFFF0089000002D508010236002C00000117008DFF120175000BB601000D0D040925 -012B3500FFFF005D0000030808010236002C0000011700D6FF270175000BB60100100C04 -0925012B3500FFFF007E000002E207500236002C00000117008EFF240175001940130200 -104010501060107010050100100D0409252B355D3500FFFF0089000002D508010236002C -000001170043FF3E0175000BB601000D0D040925012B3500FFFF0073FFE105DA08010236 -003200000117008D00780175000BB6020025250F0325012B3500FFFF0073FFE105DA0801 -023600320000011700D6008F0175000BB6020028240F0325012B3500FFFF0073FFE105DA -08010236003200000117004300AA0175000BB6020025250F0325012B3500FFFF00B2FFE1 -052908010236003800000117008D006E0175000BB60100201F0D1D25012B3500FFFF00B2 -FFE105290801023600380000011700D6005B0175000BB60100221E0D1D25012B3500FFFF -00B2FFE1052908010236003800000117004300AA0175000BB601001F1F0D1D25012B3500 -000100BB00000177045D0003001E4011020501087F05010592001A7F010101880410F65D -FDE65D003F3F3130212311330177BCBC045D00010136051103E1068C0006003A40275905 -5606690566067A0573060601020350056005700503050560030103500060007000030000 -042F332F5D002F5D332F5D1239393130015D01230B0123133303E19FB9B89BE4E3051101 -00FF00017B00000100ED051D042C06530019003940233902350E4902450E04190D190952 -0F101F1002101652100D600301031928000C28000D2F33ED2FED002F5D3333ED2F5DED33 -2F2F31305D010E01232226272E0123220607233E01333216171E0133323637042C0B846F -365C292F412734340483088E67325D2A2F49213339030653989A27252B2B5A4C979A2724 -29295C4600010118053703FE05D10003001440090253100101010000022F332F002F5DED -31300121352103FEFD1A02E605379A0000010113050E0402068C000D0056403A6508650C -7508750C040D5006600670060306060AAA094003F00302D19003E003029003E003028B00 -03018950030150030159030D2A00072A00062F33ED2FED002F5E71725E5D5E5D715E5D5E -ED332F5D3C31305D010E0123222627331E013332363704020AC5A9A9C509A60C6B5B596B -0E068CA8D6D6A8847878840000010221051802F505DB0003000EB50244010015012FED00 -2FED31300123353302F5D4D40518C3000002012D050903E907B1000B00170045402E0F51 -090009300902313009015009600970090309091551030C29200030000200003000600003 -D0000100001229062FED332F5D7172ED002FED332F5D725E715EED313001140623222635 -343633321607342623220615141633323603E9CC9290CECC9293CB917558587576575875 -065E8FC6C5908FC4C48F567776575776760000010161FE59037000140014002440150B02 -1B012B013901041207070B53030D0E2A0000062F332FED003FFD322F2F31305D05140623 -22262735331E0133323635342627331E010370B79225742D091A58326862060399020659 -A2AC0E0CA00A1A4E581D491913340002015605160477068C000300070042B54500450402 -00B8FFE8B30E103704B8FFE840190E10370750036003700303030305019F000100000204 -0204062F33332F2F332F5D002F33332F5D333130012B2B5D09012313230123130477FEFE -8BA9B0FEFE8BA9068CFE8A0176FE8A0176000001019FFE5F037C000A0014002440150E04 -1E042B043B04040A14141053030D000D2A00062F33ED2F003FFD322F2F31305D010E0123 -222635343637330E011514163332363733037C344B2A8BA90D069B0606535A24511108FE -790E0C9E8F263E1A1B3C1E524E1B080000010132051103DD068C0006003A402754015902 -64016B0274017B020606050250036003700303030360020102500060007000030000032F -332F5D002F5D332F5D1239393130015D01032303331B0103DDE4E3E49FB9B8068CFE8501 -7BFF00010000000100180000048005D1000D0047402A3B0B4B0A5A0A7A0A04020B050804 -090309090106030C3501080A030A00000F0F0F01080B140503026C0E10F63232FD325D11 -332F392F2F003FED3F12392F2F12173931305D29011107353711331101150111210480FC -52BABAC6015DFEA302E8021798A395031AFD78011BA3FEE8FE0700010018000002360614 -000B003D4023490559056905030407010A040B05050B0B030801030800050D92000A011A -050704880C10F43232FD3232E62F2F003F3F12392F332F12173931305D01071123110735 -37113311370236B5BCADADBCB5037A91FD1702608D9F8A0318FD7194FFFF0086FFE50502 -0801023600360000011700DF004D0175000BB6010034311A0025012B3500FFFF006EFFE5 -03D7068C023600560000011600DFAE00000BB601003734180025012B3500FFFF007E0000 -050808010236003D0000011700DF00320175000BB601000D0A020625012B3500FFFF005D -000003E3068C0236005D0000011600DF9400000BB601000D0A050625012B35000002017A -FE780228061400030007002940160F094F090201060106050201050B00041F014F050105 -2F5D3CFD3C003F3F1239392F2F3130015D01231133112311330228AEAEAEAE02F6031EF8 -64031E000002000E000005BC05D100120025005240333816481666026811041B1E083C0B -0B071A340C031F3407087600011D1D0713150074270F274027602703091B1E140B09076C -2610F63232FD322F5D10F6ED12392F5D003FED3FED12392FFD393931305D011402070E01 -23211123353311213204171612073426272E012B011121152111333236373E0105BCB193 -66FBCDFE88C4C40174DA01025898AACF7A7958C68ABC0169FE97BC8FD5596F6F02E7CBFE -B65B3F3802E48F025E3F375FFEC4D6AFF0453227FE4C8FFDC62A3947E8000002006AFFE1 -0471061E001F00310084405B190D290D32013420392B362D45014C0D44204A2B442D5A2B -542D6F05741E7421100C03293F090F121A1D041B10100903161B1B3F164F160216022F3E -030A1C111A1D1C030011120F0C26051F162F160216231316090000092C14062FED11332F -1239ED2F5D17391217392F2F003FED3F5D332F111239392F1217392FED123931305D0110 -00232200353400333216172E01270527372E012735211E01173717071612013E01353426 -272E012322061514163332360471FEE4F1E5FEEB0112CA6C9B56208757FEF842ED54905D -0127236225D242BA99A6FEDE313403024BA55693A9A98F427B027DFEBCFEA8010EF5E201 -08353570D64AA2618E43512F1019431A80616D93FE9BFD8A3BA99620371E2D2BAF98B4AE -2C00FFFF0006000004E608010236003C00000117008DFFE40175000BB601000B0A050025 -012B3500FFFF003DFE64047F068C0236005C00000116008DDD00000BB601000A09040025 -012B3500000200C80000049605D100120021005C403E391F491F551180108011051B3400 -0701071A34200C010C0C07090A0309080F231F23021315200030004000700004006F230F -233F23020C1B071400096C2210F632FD32325D10F65DED5D003F3F1239392F5DED2F5DED -3130015D011406070E012B011123113311333216171E01073426272E012B011133323637 -3E010496463C4EDB97C6C6C6CD85C243535ECE343830805AC4A777982F2C2903135CA939 -4B48FEBE05D1FEF22D2C35AA7D486B231E19FDCD292D2966000200B9FE64049006140013 -0020004D4035320239153220430249154220561267127E087C1C0A0E0906174211040C01 -1E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED -3F3FED12393931305D011406070E012322262711231133113E0133321203342623220607 -111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F51A44B5073499DB0023C -88E14E4A512628FE2C07B0FDD43F55FECFFEECCAC84639FD87241AD4000100DC023C05B0 -02DC0003001E401100540F02010240050130054005020000012F332F5D5D002F5DED3130 -0121352105B0FB2C04D4023CA000000101230069056904AF000B00264017D702D80802A7 -0201D705D80B02A80B0105840294020202192F5D002F3130015D71005D71250709012709 -01370901170105696FFE4CFE4C6F01B8FE486F01B401B46FFE48D86F01B8FE486F01B401 -B46FFE4801B86FFE4C00000101230236039205D5000F002E4018055006060C030E03AA01 -0E0505020F0F0C0E2A02100301032F5D33ED39322F2F332F003FFD323F332FED31300121 -35331123353236373E01373311330392FD99EAF22D6C1E252C0387DD02367A0238700D0C -102C28FCDB00000100CF023603C705EF001D0045402D24152518361535184C105E106D10 -651866197D1075180B0F0F0B521302021C52010E00001C02082A16101610022F33332F2F -ED1239332F003FFD323FED332F3130015D0121353E01373E013534262322060723353E01 -333216151406070E01072103C7FD0864A733834A6B5A59AC300D47AF57B4BB6173379B42 -022002369C3E6E29676754454C3D1FB41A239D7D63975A2B6629000100CF020F03BC05F0 -002E007740162A033903450C4A1F540C5C1F6B0864237D0874230A27B8FFC040390B0E37 -2C2B15520F16010F161F164F165F16CF16FF16061621211D52160625020A0A0E52060F1A -2A281622112A2216282C04091000010000092F332F5D121739ED2F2F2FED003FED332F3F -1239ED332F2F5D71ED393931302B5D011406070E012322262735331E013332363534262B -01353332363534262322060723353E0133321615140607151E0103BC42383994595EA54A -0E29C35D648576708F80706B63684DC32C0E4AAD5AAFC16E595F8303314B712223211E1C -B3243B474B553C8D4D443D473E24B21B23886A59721A08116F00FFFF00AB000007A305D5 -0036023B9200003700BB023700000117023C0404FDC300204015020E08020E400E600E02 -010B2B0B5B0B6B0B7F0B045D11355D1135003F35FFFF00AB0000074105D50036023B9200 -003700BB023700000117023E0384FDC3002640190302100803020E1F0E5F0E7F0E03010B -2B0B5B0B6B0B7F0B045D11355D113535003F3535FFFF008C0000077905ED0026023DA600 -002700BB029100000107023E03BCFDC30036402603023608030236103630367F36030131 -003134314B315F316B317B3106000900093F094F09035D11355D11355D113535003F3535 -0001003C0000047405D10011005840330C0F09512F063F060206060B02344F0501050510 -0B01341003200301080803032F00010000130E01050A140F0E2F0B3F0B020B2F5D3333FD -32322F11332F5D332F392F5D003FED2F12392F5DED12392F5DED39393130012111211521 -1121152111231123353311210474FD3E028AFD76014AFEB6C0B6B603820526FE55ABFEEF -8BFECC01348B0412FFFF0073FFE305A208010236002A0000001700D900CF0175FFFF006C -FE590443068C0236004A0000011600D9FE00000BB6020037311A2325012B3500FFFF0089 -000002D507500236002C0000011700DAFF240175000BB601000D0C040925012B35000001 -0086FE59050205EC004700C240990B0B0A1F0036003A1B0B1B1F13362F0B2A1F292F2436 -24463F0B391F3427392A34363441481F4427482A43364B3E44415F035A05523257365544 -6B026F046A30643264366642604679057A2D703670377541754486292B20400E10371F40 -0E10371A060028313F06341D38383C343402212125341D0A101014530C0D0F0F172A0937 -3F153128150031371D0904200074490F49704902206A4810E65D10E611173910ED2FED2F -2FED332F003FFD322F3FED332F3FED332F1112173931302B2B5D011406070E01071E0115 -14062322262735331E01333236353426270E012322242735331604333236353426272E01 -272E013534243332041715232624232206151416171E01171E01050251492C683E0303B3 -9A25742D091A523868620302142515A1FEFF850E71012882B8CD61634BAF62C6BF013CF3 -9D0106650E55FEEB919FC1607940EC52A6A801A957AA3B233711162C199DB10E0CA20A1C -4E5818291201023C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E -28152CB20001006EFE5903D70478004A00AA40810820090C37090204321902173224202B -3B34203A3B43204B3B5A1C5C2D5237534652496B1C6B2D6237624662497C1C7C28743779 -3F74428B0188248531873F1D170300252F4006351A80390139393D3E35041E1E223E1A09 -0D0D1153090D0C0C142A0638401B2F251B002F381A06041D008E4C0F4C1F4C3F4C5F4C7F -4C051D864B10E65D10E611173910ED2FED2F2FED332F003FFD322F3FED332F3FED332F5D -1112173931305D2B011406071E011514062322262735331E01333236353426270E012322 -262735331E0133323635342726272E01272E01353436373E013332161715232E01232206 -15141716171E011716171603D77F6F0205B79225742D091A5832686203021528177CCF46 -0A59DA647C8C26266C288135937B393A38AD6B64CD440A48CE63678E2B2A5E34812B8347 -4701426BA32A13361AA2AC0E0CA00A1A4E58182D0F02023B23D3434F5056422222180918 -0E27976E457A302F373123C935494F4E452323160C180A1E494AFFFF0073FFE505460801 -0236002600000117008D006E0175000BB601002D2C0C1525012B3500FFFF0069FFE703F3 -068C0236004600000116008DCE00000BB601002423090F25012B3500FFFF0073FFE50546 -0801023600260000011700DF00A80175000BB601002E2B0E1525012B3500FFFF0069FFE7 -03F3068C023600460000011600DFF600000BB601002522090F25012B35000002006CFFE1 -04FB0614001B0028006F404A3B05380C3C2232243E284B054A0C4E2245244F2859086908 -70120D0114511A17171018011304072041100403082642070A160088011617131C041A1A -01922A1F2A3F2A02231B010A852910F632ED5D10F632FD3232323210E42F003FED3F3FED -1239393F12392F3CFD3C31305D01231123350E01232202113436373E0133321617352135 -213533153301112E0123220615141633323604FBB8BC4DAD6EC6ED524444B66059864CFE -95016BBCB8FE8C4F73499CB2879750A404F4FB0C754252012E01118EDB4D4C4F2427CE86 -9A9AFB9902792218D6CCC3CD47000001FFFC0684051A06FC00030011B601500200000502 -2F11332F002FED313001212721051AFAE705051E06847800000100FD01FF01EC031A0003 -0016400C02560108002D2F013F0102012F5DED003FED31300123113301ECEFEF01FF011B -FFFF001A0000055E0801023600240000011700D900310175000BB60200110B050025012B -3500FFFF0068FFE1041D068C023600440000011600D9D600000BB602003A340B2625012B -35000002001AFE5F062B05D1001B001E00C840900F051F052E053E05401D700806381C4A -0E450F590E570F051D1E1D1C0A77098709020914100F101D1E0B770C870C020C140D0D0E -570E580F7D0E730F040B34301E401E701E031E091E1D030D0E031B1B1753030D107A0D01 -0D080000142A060F20010E0F1D06040D0C102410391042105A106A1074100710106E200F -20010A0D2B0D360D4D0D550D650D7C0D070D641F10E65D5D10F42F5D1217395D2FED332F -003F5D3C3FFD322F3F1217392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D -005D010E012322263534363703210323012101230E0115141633323637330902062B344B -2A8BA91E0679FD7C92C9021E0108021E610607535A24511108FD91FEFBFEFAFE790E0C9D -90406A150154FE6105D1FA2F1B351B524E1B08033102DBFD250000020068FE5F052E0478 -003A00470099406A0B11052B1A12162B2A0544225F25544065166C2562407B127B1D7F25 -703F0F0C041B04390559166916053A3A3653030D0A103C3D301940190219192810242420 -3F28044541100A3009080000332A060F25012506193B091A2F25132F91490F491F493F49 -03421B13854810F6ED5D10E4113910FD3232322F5D2FED332F003F3C3FED3FED332F1112 -392F5DED12393FFD322F31305D015D010E0123222635343637350E01070E012322263534 -3637362437353426272E012322060723353E01333216171E011511230E01151416333236 -373301110E01070E01151416333236052E344B2A8BA90D041955282F7A5297D26D656601 -1EA42D2A28703D4AB6610A37D06576AF403F421D0607535A24511108FE3456E944516474 -7763A4FE790E0C9E8F263B1377113D12171FC89B7F9D2D2D20081D40541817102725BF0F -24272F2E926CFD0A1B321E524E1B0801FB013705141317615560614DFFFF00C8000005B2 -0801023600270000011700DF00280175000BB60200211E080F25012B35000003006CFFE1 -062706140003001700240072B90000FFC0404A0E10370118090D3702180910373D073D1E -34203B244D074F1E45204B245A0A6A0A70140B02020316011506091C4112040508224209 -0A0000021618061A02041F263F26021F1B040C852510F632ED5D2F33FD32322F332F003F -ED3F3FED1239393F33332F31305D012B2B2B010323130123350E01232202113436373E01 -33321617113303112E012322061514163332360627FA7F98FEFDBC51B067C8EB514544B5 -6158884BBCBC4C78479EB0889650A40614FE0701F9F9EC75464E013401118EDE4E4C5025 -2701E4FAFF0281221ADCCAC7CF47FFFF000E000005BC05D1021600E70000000100C8FE5F -04CD05D10020005C40390C041C042D043D04041235000F100F020F0F090E350B03133516 -090820201C53030D00192A0006060C10030A1473220F22010F1314140A6C2110F432FD32 -5D10E61117392F33ED2F003FFD322F3F3CED3FED12392F71ED31305D010E012322263534 -3637211121152111211521112115230E01151416333236373304CD344B2A8BA90B06FDC7 -03D5FCF1030FFCF1030FFE0607535A24511108FE790E0C9E8F24331D05D1B0FE68B0FDD7 -B01B351B524E1B080002006AFE5F0460047C002C0033007B40560D1E1A1E2604290D2B1E -34043A0D3C1E3B3244044B0D4B32590D502A6C0D602B790D783212191915531D0D013C33 -3323303D29040F230B0B073F2309122A20201A1A0C0C2D1A008F350F351F353F35033301 -1B26853410F6FD325D10F4ED332F3C11332FED003FED332F12393FED12392FED3FFD322F -31305D01211416171E013332363733150E01070E011514163332363733150E0123222635 -343637260011100033321215272E01232206070460FCC93E36348F5672E7310A4A9B5102 -03535A24511108344B2A8BA90604F8FEEB012BF4E2F5B701939697B30C021B6799313030 -5B2CCD1F3109143012524E1B089F0E0C9E8F18321212012A010401120142FEF8F32A94A2 -B284FFFF00C80000049D0801023600280000011700DF00220175000BB601000F0C020325 -012B3500FFFF006AFFE60460068C023600480000011600DFFD00000BB602002320120025 -012B3500FFFF00C80000047608010236002F00000117008DFEC00175000BB60100080702 -0325012B3500FFFF00AB0000025108010236004F00000117008DFE8E0175002FB5700270 -030203B8FFC0B3090C3702B8FFC04011090C3701044F049F040201000605020325012B35 -005D11352B2B5D00000200C80000047606140005000900464016070C0B0D370808090102 -030435010800000B0F0B0106B8FFEA40110E1037080C0B1037060608041408016C0A10F6 -32ED2F332F2B2B5D11332F003FED3F3F332F3130012B2901113311210B0123130476FC52 -C602E8C3FA7F9805D1FADF0564FE0701F900000200BB000003540614000300070042400D -010C0B0D370202030601050800B8FFEA40190E1037020C0B103700000F021F0202020204 -1A7F050105880810F65DFD322F5D332F2B2B003F3F33332F3130012B0103231303231133 -0354FA7F98FCBCBC0614FE0701F9F9EC0614000200C80000047605D1000500090036401E -07562F0801080801020304350108062D07070100000B0F0B010414016C0A10F6ED5D1133 -2F12392FED003FED3F12392F5DED3130290111331121032311330476FC52C602E89CE9E9 -05D1FADF0157010B000200BB00000362061400030007002D401A05560606010201010807 -2D6F067006020606001A7F010101880810F65DED332F5DED003F3F12392FED3130212311 -33012311330177BCBC01EBE7E70614FBF4010900FFFF00C8000005380801023600310000 -0117008D00780175000BB601000C0B050925012B3500FFFF00B90000045F068C02360051 -00000116008D0000000BB6010019180E1625012B3500FFFF00C800000538080102360031 -0000011700DF00A20175000BB601000D0A050925012B3500FFFF00B90000045F068C0236 -00510000011600DF1C00000BB601001A170E0225012B3500FFFF0073FFE105DA08010236 -00320000011700DD008C0175000DB703020029260F0325012B353500FFFF006AFFE10471 -068C023600520000011600DDD800000DB70302001D1A060025012B353500FFFF00C80000 -059808010236003500000117008DFFF60175000BB602002221060B25012B3500FFFF00B9 -00000372068C0236005500000117008DFF380000000BB6010015130A1225012B3500FFFF -00C8000005980801023600350000011700DF000A0175000BB602002320060B25012B3500 -FFFF009200000372068C023600550000011700DFFF600000000BB6010016130A0325012B -3500FFFF0086FFE5050208010236003600000117008D00140175000BB6010033321A1F25 -012B3500FFFF006EFFE503D7068C0236005600000116008D9400000BB601003635063225 -012B350000010000FE5904EE05D1001B0048402E0C071C072C073C07040C0C1053080D01 -18351A030216080B0B132A050F1D1F1D4F1D03005B050114185B4F1901192F5DF4FD32E4 -5D2FED332F003F333FFD323FFD322F31305D0121111E011514062322262735331E013332 -3635342627231121352104EEFDEC0309B79225742D091A58326862050332FDEC04EE0521 -FB04144822A2AC0E0CA00A1A4E581E36170521B00001003EFE5902FD059E0030006F4046 -0C080D1A19081E1A2B082F1A3C08070D0D1153090D20251C3E22201F0503171830302C3F -18094F327F32020C0C142A06182306031C008C321D22251A1F1D4F1C7F1C021C883110F6 -5D3232FD322F10E61117392FED332F5D003FFD322F1239393F3333FD322F3FFD322F3130 -5D250E01071E011514062322262735331E01333236353426272322263511233533113311 -211521111416171E01333236373302FD0C1C100204B79225742D091A58326862030214AB -B27F7FBC0184FE7C0818164D4F2E64160A0A030703122C18A2AC0E0CA00A1A4E58172F10 -B7CB02529E0141FEBF9EFE0358632B28251B0900FFFF0000000004EE0801023600370000 -011700DFFFEE0175000BB601000B08060725012B35000002003EFFEA037A0705001B001F -0073404C0B041C042A042A1D2A1E3A1D3A1E4A1D4A1E551C641C691E741C791E0E1F1F1E -0B10073E1E0D0B0A051B1B173F03094F217F21021C1C1E1E100E008C21080D101A0A0800 -4F077F070207882010F65D323232FD322F10F63211392F332F5D003FFD322F3F333333FD -322F2F332F3130015D250E012322263511233533113311211521111416171E0133323637 -331303231302FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A7DFA7F980A0E12B8 -CB02529E0141FEBF9EFE0358632B28251B090652FE1101EFFFFF00B2FFE1052908010236 -00380000011600DB63500079405B02010900210140215021A02103EF102101902101BD00 -210150218021028B10214021702103B021C021F021039021C02102599021C021E0210310 -21602190210331002101E021010F211F214021502180210521020100241E0D1D25012B35 -3500115D71725E71725E5D71725E5D725E5D725E5D715E353500FFFF00B1FFE1045707B1 -023600580000011600DB0000000DB70201001D17091625012B353500FFFF00B2FFE10529 -0801023600380000011700DD00780175000DB7020100241F0D1D25012B353500FFFF00B1 -FFE10481068C023600580000011600DD0A00000DB70201001D18091625012B353500FFFF -007E0000050808010236003D00000117008D00070175000BB601000B0D050625012B3500 -FFFF005D000003E3068C0236005D00000117008DFF680000000BB601000B0D050625012B -3500FFFF007E0000050807500236003D0000011700DA00390175000BB601000B0A050625 -012B3500FFFF005D000003E305DB0236005D0000011600DA9200000BB601000B0A050625 -012B3500000100C80000048A05D10005001F401003013504030000070F07010214036C06 -10F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D100030073 -FFE105DA05F0001700230027006D404F040004060B0C0B1217001706190C191257015705 -53075F0B580D58115F13531710253560260126260976097915021B3415022134090A2726 -27260F18150373290F29010F291F293F29031E150F682810F6ED5D5D10F6ED1239392F2F -003FED3FED5D12392F5DED3130015D011612151402070E01232224272602353412373624 -33321613100023220011100033320003213521051E5B6163595CFBA19DFEFF5A5A61605C -5801059AA0FF47FEFCE1E3FEFD0108DEDE0107ACFD8D0273052664FEDEB8B8FEDD616566 -6863630120B9B6012167626869FD610122013BFEC5FEDEFEDBFEC901370106B300030069 -FFF0062405E1001D002A00370058403624182C321525062B32091509081603082A1E2532 -65006A0F041E150032150F00072B1518250407140F080839381F393F396F399039045D11 -12392FC4ED173910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01 -071523352E01272E01353436373E01373533151E01171E01073426272E0127113E01373E -0101110E01070E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F -4B57CE403B3A8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A -524AD88C88CC4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01 -363737AA6170B63A2D3C0002006CFFE10443047C00130020005740162A032A203C1A301C -38204F1A421C4820580668060A10B8FFC040230B1037120502110518410E0401081E4205 -0A1114021A0092221F223F22021B1B08852110F6ED5D10F6FD3232003FED3F3FED123939 -3F31302B5D2123350E01232202113436373E0133321617353303112E0123220615141633 -32360443BC51B067C8EB514544B56158884BBCBC4C78479EB0889650A475464E01340111 -8EDE4E4C502C2734FCB6027C221FDCCAC7CF47000002006AFFE104730614001900280086 -4029031C0520171526153B0A3A0E3A1C3E214C0A490E4A1C4F2153176B0E7B0E7A207B21 -1136264626021DB8FFE04034121C371D180A11371D171D0C050F133E1001263F030A1111 -001D0C0F1A1B00140F00902A0F2A1F2A3F2A6F2A040F0F231B06852910F6ED332F5D10E4 -113910ED11393911332F003FED3FFD323F33332F2B2B5D31305D01100023220011343637 -3E01372E012735211521151E01171E01073426270E01070E011514163332360473FEEBEE -F1FEEB564045B45C4CB466032AFDCF44DE5D9676C26E6E4291423F55AA9C99A60227FEF0 -FECA012F01068DC5404852113F8748B39E0A2E9C5488FBA487E45608303532AE7FC9D0D3 -0001006DFFE603EE0478003D007C40432612263B363B49014418590154186A016F0B6418 -79017A0B7418792274350F0C2C3F2B2B03161A1A1E3E16043D3D393F0309192B40090C37 -2B241B10100C2B19040900B8FFC0401009143700003F7F3F803F02331B09863E10F6ED5D -11332F2B1217392FED2F2B2F003FED332F3FED332F1112392FED3931305D250E01232226 -272E0135343637352E01353436373E013332161715232E01232206070E01151416171E01 -3B0115232206070E01151416171E01333236373303EE6BCE734FA446455771795B6C5F41 -40A24F62A45A0D42C3642D4E2A233338302D68356F9E3E642A2931342925653866E8470D -40302A2028277F5E6090260718845C5975222120211CCF33380B140F432C3D440F0E03A6 -0911114A3B354A151314483E0002006AFFE1050F047C0011001D004D40163A15351B4A15 -451B040E3F0D05153E09041B3F030A0FB8FFC040190B0D370E0E090C0F0306121B00901F -1F1F6F1F02181B06851E10F6ED5D10F4ED121739332F2B003FED3FED3FED5D3130011000 -232200111000333216172115211E010734262322061514163332360471FEE7E9F1FEEC01 -1AED376A1D01E0FEE03E44C2A49AA1A4A79C98A8022EFEE7FECC013C01110113013B1609 -A549C27FD7D6E0CDD1DAD7000001000A000003EE045D0007003840230301043F06054000 -4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32 -2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A50002 -0068FE6405EA047A001D0024007840163515740F022110090C37213E1A040F0522037717 -0117B8FFF0400F090C37173E0609050C75147A1E0211B8FFC040250D103711112217041A -05050C1E1B3A0001008F260F261F264F266026040F2601141B0C852510F6ED5D5D10F45D -ED12392FED3939332F2B5D003F3FED2B5D39393F3FED2B31305D011000051123112E0127 -2E01353412373315060215141617113E0133200003342623113E0105EAFEA9FEF3BB82DD -51555E7685E58894E1BD214B270130015DC3E0C1CED30240FEFDFEC40FFE72018E065145 -4AC4869F01128A1163FEF6A7BDE60603E80201FED5FEFBB8DBFCB20AE8000002FFFCFE59 -051AFFAE000300070020400F02500101080650050D0400000905022F3311332F33003FED -12392FED31300521352111213521051AFAE2051EFAE2051ECA78FEAB7800FFFF01230000 -03DC05D10036000400000117000401D90000001E40140302200D5F0D6F0D030D01000005 -10057F0503052F5D35352F5D35350001009A022A03C605F00016004DB90014FFE0B3090C -3715B8FFE0B3090C3713B8FFF84017171B370110130D0D085313020E03012A000018100B -2A0DB8FFC0B3090A370D2F2BFD3211332FED003F3FED332F1239332B31302B012B012311 -3426272E012322060711231133153E013332161503C6AC0E15164D40418D41ABAB4BA254 -9AA6022A0215466A2424234332FD4503AB683E45B9AB000200C8FFE508CA05D1004E005D -00E240210B18044D19012E18204D55316A186631654D791375487952735A0D05200E1037 -3DB8FFE040310E103711001A46043B033F400B0D373F3F433E3B4F3501353B351E37213E -34243134032C573450290129292B56342C0307B8FFC0403C0B0D3707070E3E0309202B3A -4F4A4F0237341F1A20201A330606461A381D3E1A3E1A3E111A00005F0F5F014F13225F33 -7F33023333572A13702B012B2F5DFD32332F5D39ED5D11332FED33332F2F123939ED332F -1112392FED39395D002F2F3FED332F2B3FED12392F5DED1217392FED393933332F5D2FED -332F2B1112173931302B2B5D0114062322262735331E01171E01333236353426272E0127 -2E013534363723112311230E01070E012B01112311333216171E011733353315213E0133 -32161715232E01232206151416171E01171E01013426272E012B0111333236373E0108CA -E2BE6ABA3D0917472D356145667943552A62377E6E0F12DDB57C0C3B2F4DCCA030BCF486 -B44847580A78B5017F24733155B53E0940B15B59723B562E642E7284FA5E36372F83572E -1178962F2F2701429BC23C22D31331161A1E4C5A4844160B131026956E254426FC4E03B2 -45792F4D4DFDD505D12D302F9364DCDC12183024C935494E4F4648170C180C1E8E024F4D -75241F1DFDA32D2F306DFFFF0089FFEB063E05D10036002C00000117002D035400000005 -B20F23015D00FFFF00AFFE59043D05DB0036004C00000117004D02280000001840115023 -60237F23030302500C600C7F0C030C2F5D35355D000200000000052706140016001A0065 -B90017FFE8403F0D10371818090C3719180910370315161575150318181701100D084213 -040E05010D08171740190119100B1A19300D500D700DAF0DCF0D050D0D021A00911C10F6 -ED332F5D33FD322F5D332F003F3C3F3FED12393F332F31305D012B2B2B2123113426272E -012322060711231133153E0133321615090123130527BC1218195E4B4DA84DBCBC58BC63 -B5BEFC72FEF18AA5027C4D87262A294C3BFCBE045D7C4952DACD033FFDD1022F000100D5 -0366028705D100030027B90000FFE840140D10370118090C3702180910370101030300B1 -022FED003F332F3130012B2B2B090123130287FED688C205D1FD95026B00000200D50366 -041805D1000300070050B90004FFE8400E0D10370518090C37061809103700B8FFE84020 -0D10370118090C37021809103746000101050503070304B13F0601060600B1022FED332F -5DED003F3C332F3C3130015D2B2B2B2B2B2B09012313210123130287FED688C20281FED6 -88C205D1FD95026BFD95026B00040095FFE3080705ED001B001F002B003700CA400C471D -481F561D591F681E050BB8FFE040160E103701200E10371F1D1C071D171D021D291E1E1F -29B8FFF44012090B37230C090B374F0D401B7A2F75350417B8FFE8404A0E103711180E10 -371F031B1B17512F034F0302030D030D115109022F51202940290229293551230A1E0840 -1E011C1E322A00260126262C2A1C1E062020390F39010D2000010000142A062FED332F5D -335D11332F123939ED332F5DED2F2F5D003F3FED332F5DED3FED33332F2F5DED332F3F2B -2B5D2B2B3130018710ED5D87C0002B2B015D010E012322263534363332161715232E0123 -220615141633323637330901230901140623222635343633321607342623220615141633 -3236032D1E934EC0D9DDBC417F3F0E3C73396D7F7B71497A250E02F5FCF4A5030C028ABE -B2B5BABDB2B6BAB2596466585866645902BE1232E6D2C9F22121AD3233959C9698422302 -68FA2F05D1FBCCE0DADCDDE0DADADFAC8888ADAD87870002000FFFE8028605D3001B002B -006E400D531D621D701C0316180B113705B8FFF040310B0F37001A010B1C051B1B051612 -120F5216092550050347080112121F2908401114372F0801081C1B001A0008030B2A01B8 -FFC0B3101437012F2BED17332F33322F5D2BED332F5D003FED3FED332F1112392F17392B -2B31305D13371134363332161514020711141633323637150E012322263D0107133E0135 -3426272E01232206070E01150FB17B6F607C78A51D1B1A44693771395C6B4FF8622F0D0D -0A190F0F19060B0C01A6EB01C7E299826D5CFEF7E6FE61592B214AA22C2B727FE162022B -A980371E30110C0D0C0E156E5800000200920000044203B0000300070025401507CB0101 -05CB0307CB010105CB00031003300303032F5DED332FED002FED332FED31301321112113 -1121119203B0FC504C031803B0FC500364FCE80318000001008301BD0252038C00030017 -400B02020300000002300202022F5D332F002F332F3130011121110252FE31038CFE3101 -CF000002008301BD0252038C000300070023401306CB020205CB0304CB000006CB000230 -0202022F5DED332FED002FED332FED313001112111052111210252FE310183FEC9013703 -8CFE3101CF4CFEC9000100B10088042203F9000B0021401409090F032F034F0303030606 -00009000A00003002F5D332F002F5D332F3130133400333200151400232200B10102B7B6 -0102FEFEB6B7FEFE0240B70102FEFEB7B6FEFE0102000002007001AA026603A0000B0017 -0065400B06102326370610171A3700B8FFF0B323263700B8FFF04015171A3712CB06060C -CB000910171A3709100B0E3703B8FFF0B3171A3703B8FFF040130B0E3715CB03030FCB00 -0920093009600904092F5DED332FED2B2B2B2B002FED332FED2B2B2B2B31300132161514 -06232226353436172206151416333236353426016B689393686893926949666748486766 -03A093686893936868934C674849666649486700FFFF001A0000055E073C023600240000 -011700D80031016B000AB602000C0B0607252B35FFFF0068FFE1041D05D1023600440000 -011600D8D900000AB6020036371D26252B35FFFF0073FFE5054608010236002600000117 -00D600A90175000AB601002F2B0F15252B35FFFF0069FFE703F3068C0236004600000116 -00D6F4000011400C014026502602002622060F252B5D3500FFFF0073FFE5054607500236 -00260000011700DA00A80175000AB601002C2B0F15252B35FFFF0069FFE703F305DB0236 -00460000011600DAF5000011400C012024302402002425060F252B5D3500FFFF00C80000 -049D073C023600280000011700D80033016B000AB601000E0F0203252B35FFFF006AFFE6 -046005D1023600480000011600D8F700000AB6020022231200252B35FFFF00C80000049D -0801023600280000011700D900400175000AB60100120C0203252B35FFFF006AFFE60460 -068C023600480000011600D9FE00000F400A027026010026201515252B5D3500FFFF00C8 -0000049D0750023600280000011700DA004F0175000AB601000E0F0203252B35FFFF006A -FFE6046005DB023600480000011600DA0000000AB6020022231218252B35FFFF0073FFE3 -05A208010236002A0000011700D600D00175000AB601002925070F252B35FFFF006CFE59 -0443068C0236004A0000011600D6FB000011400C0230354035020035311A23252B5D3500 -FFFF0073FFE305A207500236002A0000011700DA00CE0175000AB601002728070F252B35 -FFFF006CFE59044305DB0236004A0000011600DAF5000011400C0250336033020033341A -23252B5D350000010073FE5905A205EC0038009540200906060E07261D06130E210E350E -4901410E510E6506650B630E740E741C0F2CB8FFE04043090C37323236532E0D28032235 -40230123230C03101017340C021D34030A3131002A0F2B1F2B022B760901221022042B27 -040910216C25753A0F3A403A021A1509683910F4ED5D10F4ED331217392F2F5D2F5DED33 -2F003FED3FED332F1112392F5DED12393FFD322F3130012B5D0534262722242726023510 -002132041715232E01272E012322001110002132363711213521110E01071E0115140623 -22262735331E0133323603820302ADFEE066677001A1016C7F010999121F763945AF6FFA -FEDD0130010660BF48FE7102535AD45E0103B79225742D091A583268626B152B0F5F6061 -0123C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAEFD8129460F0E2516 -A2AC0E0CA00A1A4E0003006CFE590443068C002300300034009F406F243234320233200D -10373D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C057020 -112F343F344F3403343433331E220512211528401E0407070B40030D2E41150731315033 -603302333300180F0601062124121A0006180092361F363F36022B1B18853510F6ED5D10 -E4113910FD32322F5D1112392F5D332F003FED3FED332F3FED1239393F11332F332F5D31 -305D012B5D2510002122262735331E01333236373E013D010E01232202113436373E0133 -321617373303112E01232206151416333236130323010443FEFEFEF459A9520A2EC86460 -7E23231E559B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A534B3F301117FFE -E4FEF61917C012352E29276E446644430121010790D14C474F272830FCD60261221DD0C6 -BCC23F058EFE8A017600FFFF00C80000053B08010236002B0000011700D600760175000A -B60100100C060B252B35FFFF00B90000045F08010236004B0000011700D600220175001A -4012014F1B6F1B9F1B031B112601001B170808252B35002B5D3500020020000005E305D1 -001300170060403D0E1201160408520B400C0F370B0B0C05350017101702170B10170304 -070C03070000120F150303140278190F19401950190309090B0E16030614076C1810F6ED -1739332F5D10F6ED1739332F002F3F1217392F71ED12392F2BED17393130012311231121 -11231123353335331521353315330135211505E3A8C6FD19C6A8A8C602E7C6A8FE92FD19 -0455FBAB02D9FD2704558CF0F0F0F0FEA8CCCC00000100130000045F0614001E00504030 -031D161D751D0317140E51111112180D08421B041201010D08150F021A0091201F206020 -02141517030B1A110F0D881F10F63232FD17325D10F6ED2F2F003F3C3F3FED123912392F -ED393931305D2123113426272E0123220607112311233533353315211521113E01333216 -15045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC63B5BE027C4D87262A294C3BFCBE -04F4869A9A86FEED4952DACD0002002C0000033307C8000B0025006DB9001BFFD040400B -10370E300B10370C0C15520F1C1F1C021C191C192252700F010F0F09043206030A033201 -0825280F0C1F0C020C1828190C276D080B5A0A1405025A19036D2610F432ED32FDED32E4 -332FED2F5DED003FED323FED32332F5DED33332F2F5DED332F31302B2B29013533112335 -2115231133130E01232226272E0123220607233E01333216171E013332363702D5FDB4C3 -C3024CC3C35E077D663453262D3C20302D0288037E683351282A431D2E31019804A19898 -FB5F0730989724262B2A5B4B88A6242528295B470002FFF200000241063C0003001D0054 -40347C0673130204040DAA1440090C37141114111AAA0707020501081DAD0440090F3704 -10AD117F1F011F9204001A117F010101881E10F65D32FD32ED5D2FED2F2BED003F3F332F -ED33332F2F2BED332F31305D21231133131406232226272E012322061523343633321617 -1E01333236350177BCBCCA6750283A1E202D17232170684E2F3220212C162421045D01DF -81821A202322454181821B1F2322483E0002005F000002FF073C000B000F004D40150E32 -0D0D09043206030A033201082F0F3F0F020F0EB8FFC040150B0D370E0F116D0A080B5A0A -140305025A0E036D1010F632F43210FDF43210E6332F2B2F5D003FFD323FFD32332FED31 -302901353311233521152311331321352102D5FDB4C3C3024CC3C32AFD6002A09804A198 -98FB5F060A9A0002FFFC0000023605D1000300070032401D025301010605057F00700202 -00027F0901099200041A027F050105880810F65D32FD32E65D2F2F5D002F3F332FED3130 -01213521032311330236FDC6023ABFBCBC05379AFA2F045D00020080000002DF07D3000B -00190059401F0C701201121216AA0F0F09043206030A0332010819290C400B0E370C1329 -12B8FFC040130B0F37120C1B6D080B5A0A1405025A12036D1A10F432ED32FDED32E4332F -2BED2F2BED003FED323FED32332FED332F5D333130290135331123352115231133131406 -232226353314163332363502D5FDB4C3C3024CC3C30A939C99979E454D49489804A19898 -FB5F073BA8CFCFA886726E8A00020001000002300668000D0011004840150006060A5003 -0310050F0D2900400B103700072906B8FFC040130B1037067F13011392000E1A067F0F01 -0F881210F65D32FD32E65D2F2BED2F2BED002F3F332FED332F3331300114062322263533 -1416333236350323113302308B8C8A8E924145414427BCBC06689AC0BE9C7A6B6283F998 -045D00010089FE5F031C05D10020004F402D1C20090C3709043206030A03320C01081717 -13531B0D1818102A1E1E0B02226D0A080B5A0A140305025A036D2110F4F43210FDF43210 -E61112392FED332F003FFD322F3F33FD323FFD3231302B21233533112335211523113315 -230E011514163332363733150E012322263534360174EBC3C3024CC3C3C2060942582141 -1309245122879A099804A19898FB5F981C29265150130B9E0A0BA08C22350002008EFE5F -024605DB0003001B0056401C0820090C371B1753070D014402400B0D3702030E050D1104 -04142A0AB8FFC040170B17370A0A0E7F1D011D9200600F1A01607F0E010E881C10F65DE4 -FDE4E65D11332F2BED332F002F333F3F2BED3FFD3231302B01233533130E012322263534 -3637113311230E0115141633323637330183D4D4C3245122859C2508BC3C060742582141 -13090518C3F8990A0B9E8E3F6F19040BFBA31A361B5150130B00FFFF002CFFEB034D0801 -0236002D0000011700D6FF6C01750014B1011AB8FFC040090B0E37001A160415252B2B35 -0002FFC2FE5902AF068C0015001C005540340A011C0102551B651B751B0318161A1B1B1A -1A123E150507070B40030D1A1A4F1301137F06010616121A1306160370150115921E10F4 -5D1732ED2F2F5D2F5D332F003FFD322F3FED332F332F1239395D31305D05140623222627 -35331E01333236373E01351123352137230B012313330209C8A828832C0A1C5F2D485816 -160DE901A5A69FB9B89BE4E31BC4C8100CB30B1C282828715103849EB40100FF00017B00 -FFFF00CDFE59057505D10236002E0000011600DCFB00000AB601001A0C0500252B35FFFF -00C1FE5904AF06140236004E0000011700DCFF7C00000011400C01301A401A02001A0C05 -0A252B5D3500000100C1000004AF045D000B007D40512802D801DB090309010F0D1F011D -021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A0802 -050A0507050105080B02600A700A020A0A00000D200D400D0208031A05890C10F4FD325D -11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0015D -7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B045DFDD102 -2FFDFC00000100C8FE59047605D1001A003F40240C20090C37111115530D0D0203043507 -01081010182A0A0A0105051C0F1C010414016C1B10F4ED5D11332F12392FED332F003F3C -ED3F3FFD322F31302B29011133112115211E011514062322262735331E01333236353426 -02BFFE09C602E8FEE30204B79225742D091A583268620605D1FADFB0122F18A2AC0E0CA0 -0A1A4E581E3E00010005FE5901E906140018003D40240A20090C370F0F13530B0D020104 -01080E0E082A1616017F1A011A92041A7F010101881910F45DFDE45D12392FFD322F003F -2F3F3FFD322F31302B2123113311331E011514062322262735331E013332363534260149 -8EBC6C0105AE8525642809184E285E52010614FA00123724A2AC0C0CA00B174F57153300 -FFFF00C8FE59053805D1023600310000011600DCFE000013400E01201630164016030016 -0A0400252B5D3500FFFF00B9FE59045F047C023600510000011600DC8B000013400E0100 -2310232023030023170D00252B5D3500000100C8FE59053805D10016009D401F00076107 -7107A107040C070B0C1B0736074607540765077507B001B0070A07B8FFC040510B113776 -06010F0102061F01150626013601340646014406560153066006790170060E0406015A01 -550602111115530D0D0207040806030A0104080110100A06010207130A78180F18401802 -0213046C1710F4ED5D10F4FD11393911332F2F003F33333F3C1239393FFD322F31300172 -715D5D002B5D71043501112311210111331114062322262735331E0133320480FD01B901 -330284B9CEB42751250B163A1E7F948A053EFACC05D1FBA00460FA18BFD10806A8050A00 -000100B9FE59045F047C00260045402B03150C191615751504100D084213040E050D081E -1E22531A0D1D1D021A1791281F28602802100B1A0D882710F4FD325D10F6ED332F003FFD -322F3F3F3FED123931305D0435113426272E012322060711231133153E01333216151114 -062322262735331E01333236373603A31218195E4B4DA84DBCBC58BC63B5BECCB4274E26 -0B163C1A4C6117162556024B4D87262A294C3BFCBE045D7C4952DACDFD0FBFCC0706A805 -0A262626FFFF0073FFE105DA0746023600320000011700D8009B0175000AB6020026270F -03252B35FFFF006AFFE1047105D1023600520000011600D8E300000AB602001A1B060025 -2B35FFFF0073FFE105DA0801023600320000011700D9009C0175000AB602002A240F0325 -2B35FFFF006AFFE10471068C023600520000011600D9E400000AB602001E180600252B35 -FFFF00C8FE59059805D1023600350000011600DCF600000AB602002420050D252B350001 -001BFE590372045D002700574034000D100D200D032120090C370C090F131317430A0F05 -1C090826260253220D25251F2A05050913132940297029020C1B1A09882810F4FD325D11 -332F11392FFD322F003FFD322F3F2F3F3CFD322F11123931302B5D1E0133323635342627 -231133153E013332161715232E012322060711331E011514062322262735333C4E285E52 -0102A6BC70AB59312C2C0A2A4F3657A24B840105AE8525642809FA174F57153323045DA5 -5A4B0507C10A094D3DFCFB123724A2AC0C0CA000FFFF0086FFE505020801023600360000 -011700D6004A0175000AB6010035311A00252B35FFFF006EFFE503D7068C023600560000 -011600D6AF00000F400A017F38010038341A00252B5D350000010000000004EE05D1000F -004140250D0A003203030F09043506030F0F111F114F11030B020B085B090D0009140204 -5B4F0501052F5DF432ED393910E4332F2F5D002F3FFD3212392FED393931300121352111 -21352115211121152111230214FEB4014CFDEC04EEFDEC014CFEB4C602E48F01AEB0B0FE -528FFD1C0001003EFFEA02FD059E0023006E40210420090D37181507510A0A0E030F140B -3E110F0E0523231F3F03094F257F250216B8FFC0401E090B3716160713008C250909070C -0A0E111504181A0C07400D103707882410F62B32ED17392F12392F10F63211392F2B5D00 -3FFD322F3F3333FD322F1112392FED393931302B250E012322263D012335331123353311 -331121152111211521151416171E01333236373302FD357D31ABB27F7F7F7FBC0184FE7C -012DFED30818164D4F2E64160A0A0E12B8CBA88601249E0141FEBF9EFEDC865358632B28 -251B0900FFFF00B2FFE1052907C8023600380000011700D700610175000AB601002B1E0D -1D252B35FFFF00B1FFE104570653023600580000011600D70600000AB601002417091625 -2B35FFFF00B2FFE105290746023600380000011700D800630175000AB6010020210D1D25 -2B35FFFF00B1FFE1045705D1023600580000011600D80100000AB60100191A0916252B35 -FFFF00B2FFE105290801023600380000011700D900630175000AB60100241E0D1D252B35 -FFFF00B1FFE10457068C023600580000011600D90100000AB601001D170916252B350001 -00B2FE5F052905D1003400634044231223183D093D2139224C094C214B22771377170A33 -20090C372E2E2A53320D1C24060D031534060A2F2F272A00060023030C1B141E76360F36 -1F364036030F140C6B3510F4ED5D10F6ED1217392FED332F003FED3F1239393FFD322F31 -302B5D053436372206232226272E01351133111416171E01333236373E01351133111406 -070E01070E011514163332363733150E012322260314050509190F8CD0475147C621272C -976A6B962D2721C647512D683D0405535A24511108344B2A8CA8741A271601494852E8A9 -037BFC7B798C394142414239936D038AFC85A2F1502C3B10143C17524E1B089F0E0C9F00 -000100B1FE5F0567045D002A005C40220B0619077A07032720090C370205150905114205 -0A010822221E53260D23231B2A29B8FFC04015091037292914021A17922C1F2C602C020B -1A08872B10F4ED5D10F4FD32322F2BED332F003FFD322F3F3FED3F3C123931302B5D0437 -350E01232226351133111416171E0133323637113311230E011514163332363733150E01 -23222635340395065FAE69B0C4BC101A1B565249AD4BBC1E0607535A24511108344B2A8C -A81D1D7C4B50D7D002D5FD8455792B2C284C3B0342FBA31B351B524E1B089F0E0CA08D24 -FFFF005C0000078D08010236003A0000011700D601690175000AB60100110D0600252B35 -FFFF005600000636068C0236005A0000011700D600BB0000000AB60100110D0600252B35 -FFFF0006000004E608010236003C0000011700D6FFEE0175000AB601000D090500252B35 -FFFF003DFE64047F068C0236005C0000011600D6DD00000AB601000C080400252B350001 -00B900000308061E0010002440140000043F0D0009080000081A6F097F090209891110F6 -5DED332F003F3FFD322F313001232E012322061511231134363332161703080A1F642679 -67BCC2BF3F652A055E09136B8CFB7D0482C2DA0C08000004001A0000055E08000012001E -00210025013F40862B20372040205A18551A501E55206918651A651E0A180B170D4A0646 -125906561278027703082020211F02370187010201140012002021033704870402041405 -05060606091226062912370638124606491258127A0675120B24240C702501251651A00C -F00C02060C160C3F0CF00C040C03340F2170210221212006120405201C401C020C1CB8FF -C0406C393937501C701C021C01050824400E10370F242F240222222440090D372413290F -0F2F0F4F0F8F0F9F0F050F19290009200940098009900905090F270106090F122405050C -0024003A0042005A006A0074000700006E270F27010A052B0535054D05550565057B0507 -05642610E65D5D10E62F5D1217395D2F5DED2F5DED2F2B332F5D2B003F3C2F5D2B335D12 -17392F5DED2F5D72ED2F5D12392F3130015D8710FD5DC0C0C08710FD5DC0C008C0015D00 -5D212303210323012E013534363332161514060727342623220615141633323613090207 -2337055ED394FD8094C901F83139A17373A039302A47393948493838487DFEFEFEFD021D -F39595019FFE6105571F65406D90906D40651FC4364B4A37394B4CFC6602CBFD3505B7CD -CD0000040068FFE1041D07330032003F004B004F00D6B50C0A190A0230B8FFC040880B0E -37590E51215C38690E63216F397B0A7A1474207B380A0208343D3011401102111149084F -4F4E4E43AA062916299F290329400B0D37292F0123494F1F011F291F184149043D41080A -01084E400D10374C4C4E40090C374E4E2640292F2C3F2C022C2C26297F468F4602464600 -0F1F011F1134021A001F0B0091510F511F513F51033A1B0B855010F6ED5D10E6113910FD -32322F5D12392F5DED332F5DED12392F2B332F2B003F3FED3FED33332F5D123911392F2B -5DED332F332F1112392F5DED123931305D012B5D2123350E01070E012322263534363736 -2437353426272E01232206070E010723353E01372E01353436333216151406071E011503 -110E01070E0115141633323603342623220615141633323613032313041DBB1955282F7A -5297D26D6566011EA42E29296D3F3A692A3150130A2369311C259F73739E2E237D87BB56 -E9445164747763A443473939484938384895F3959577113D12171FC89B7F9D2D2D20081D -4156171811140B0D1D07BF0914081E532E6D90906D335B1F22AA9AFE1D01370514131761 -5560614D042C364B4A37394C4D0262FEEE011200FFFF000E0000076D0801023600900000 -0117008D01DE01750011400C020F164F16020016140607252B5D3500FFFF0068FFE3073F -068C023600A000000117008D01690000000AB6030055541B00252B35FFFF0073FF6E05DA -08010236009100000117008D007801750013400E03303A403A603A03003A3B0F00252B5D -3500FFFF005DFF6C0471068C023600A100000116008DE2000011400C03302E402E02002E -2F0C00252B5D35000001015A03400249045D00030014400A01560205032D000201022F5D -ED003FED3130012311330249EFEF0340011DFFFF005C0000078D08010236003A00000117 -004301730175000AB60100100D0600252B35FFFF005600000636068C0236005A00000117 -004300C30000000AB60100100D0600252B35FFFF005C0000078D08010236003A00000117 -008D01690175000AB601000F100600252B35FFFF005600000636068C0236005A00000117 -008D00BF0000000AB601000F100600252B35FFFF005C0000078D07500236003A00000117 -008E016C01750020B10213B8FFC040120D10370F13010100135F13020013100600252B5D -355D2B35FFFF00560000063605DB0236005A00000117008E00BF0000001EB10213B8FFC0 -40100D10370F1301010013010013100600252B5D355D2B35FFFF0006000004E608010236 -003C000001170043000A01750014B1010AB8FFC040090D1037000A0A0500252B2B35FFFF -003DFE64047F068C0236005C000001160043FF000015401001200B300B600B700B04000B -090400252B5D35000001FFED03E40186061300030032B90003FFE4B70D10370101030100 -B8FFAEB30D103700B8FFE840090A0C3700007F0201022F5D332F2B2B003F332F3130012B -010323010186A5F4010F0613FDD1022F0001FFD00685051606FD00030011B60150020000 -05022F11332F002FED3130012135210516FABA0546068578000100890000048B05EE0028 -00934063411253125B1A6312730273129024B603B6240923200551000810082008030808 -1F1C09510F0C1F0C3F0C4F0C040C141418490C01100202284A01080F2A1F2A022327021C -1F20050C08215F1D6F1D7F1D031D0A061306081D13040220004000020000022F332F5D12 -17392F2F332F5D332F3333FD321139395D003FFD323F1239ED332F2F5DED3939332F5DED -393931305D2901353E0137233533352335333534123332161715232E012322061D012115 -21152115210E01071521048BFBFE67620E9DA4A4A3FDCD6998400A3E98568C8B016CFE93 -016DFE8F0F705A0345CF1B817B868C86A7C801012211CE2A30A59094868C86659F2C0B00 -000200B1FFE60511053200180022005F4013380D391C491C580D6A217A21060C100B0D37 -07B8FFF0402A090A37191F290F2615690F790F05013222220F1F32150B0B07330F090C0C -1913260001000024220114122FFD3211332F5DED332F003FED332F2FED12392FED5D2B2B -31305D01211416171E013332363733150E0123200011100021320011272E01272E012322 -06070511FC66423C3AA3607AEA590D82C07FFEC9FEAD01420113FF010CBE02262928875A -9FD50D027884B53E3C3B5648D53637015B0141013A0176FECDFEE92A549133333AD4B100 -FFFF00ABFFE1078305D50036023B9200003700BB023700000117024103F2FDC60016400C -040302100A010B400B7F0B025D1135003F353535FFFF008CFFE107A405ED0036023DA600 -003700BB02910000011702410413FDC600384026040302360A0403023900392039403980 -39FF3905013100315B317B3103000900093F094F09035D11355D11355D11353535003F35 -3535FFFF008AFFE107A405DA0036023FA400003700BB02910000011702410413FDC60038 -4026040302320A040302350035203540358035FF3505012D002D5B2D7B2D03000900093F -094F09035D11355D11355D11353535003F353535FFFF0099FFE1076F05DA00360240A600 -003700BB023100000117024103DEFDC6003640240403020E0A040302116F118011FF1103 -01092B093B0944095B097F0905000400043F04025D11355D11355D11353535003F353535 -00010061FE5901FA00880003002CB90002FFE840170D10370318090C3700180910370F01 -010101000D0202002F332F003F332F5D3130012B2B2B1B01330161A5F4FEF1FE59022FFD -D10000010161FE59037000140014002440150B021B012B013901041207070B53030D0E2A -0000062F332FED003FFD322F2F31305D0514062322262735331E0133323635342627331E -010370B79225742D091A58326862060399020659A2AC0E0CA00A1A4E581D491913340001 -0212050C0305068C000300144009030302002D100301032F5DED002F332F313001032303 -0305319131068CFE8001800000030100050C0418068C00030007000B003F401506050AAF -090902000002072B0640090A37060A2B0BB8FFC0400C090B370B06002D0B100301032F5D -33FD322F2BED2F2BED002F332F12392FED3939313001032303012335330523353302FD31 -803101FDBFBFFDA7BFBF068CFE800180FE8CC3C3C300FFFF00070000055E05D102360024 -00000117019DFDF5FF450012400A020E03020E1F0E4F0E025D1135003F35FFFF00000000 -059005D10037002800F300000117019DFDEEFF4500204014010F030F111011401103011F -0C010C00400101012F5D352F5D355D003F35FFFF00000000062E05D10037002B00F30000 -0117019DFDEEFF4500204014010F030F112011401103011F0C010C00400501052F5D352F -5D355D003F35FFFF0000000003C805D10037002C00F300000117019DFDEEFF4500244018 -010F03011F0C010C00400201020F111F11401150116011055D2F5D352F5D35003F35FFFF -0000FFE1069905F00037003200BF00000117019DFDEEFF45002240150227030F29010227 -1F270101000F000F100F700F035D1135355D11355D003F35FFFF00000000060105D10037 -003C011B00000117019DFDEEFF45002440180109030F0E1F0E2F0E03011F090109001F04 -4004700403042F5D352F5D355D003F35FFFF0000000006D705F0003701BB00B700000117 -019DFDEEFF45002A401E012B03011F2B012B00001C101C201C031C0F2D202D502D602D70 -2D8F2D065D2F5D35115D35003F350004FFCB00000267068C00030007000B000F005C401D -0A090FAF0C0C06070706060205010B2A0A40090F370A0A0404000E2A0FB8FFC04015090F -370F0F0707017F11011192001A7F010101881010F65DFDED5D11332F332F2BED11332F33 -2F2BED002F3F332F332F12392FED39393130212311331303230301233533052335330177 -BCBC0438543801B0ABABFE0FABAB045D022FFE800180FE8CC3C3C300FFFF001A0000055E -05D1021600240000FFFF00C80000052B05D10216002500000002001A0000058605D10003 -00060058403C49056A050205041A000003061A01010215001A0125002A0145004A014B02 -4403590256036B0264037B0275030E020305030000080105010203065401002FED3F1239 -012F11332F17395D31308710FD8710FD04C0005D2901012109020586FA94023201080127 -FE50FE5105D1FAD7047BFB85FFFF00C80000049D05D1021600280000FFFF007E00000508 -05D10216003D0000FFFF00C80000053B05D10216002B0000FFFF0089000002D505D10216 -002C0000FFFF00CD0000057505D10216002E00000001001A0000056205D10006006C404E -0902390258020378017703020203020114000600020314040405490546067C0573060405 -030405002400390042005A006A007400070000080F08010F08010A042B0436044D045504 -65047B0407042F5D5D5D11332F5D002F3F3130015D8710FDC08710FD08C0015D005D2123 -09012301330562D5FE2CFE2CCB022CF00505FAFB05D1FFFF00C8000005F605D102160030 -0000FFFF00C80000053805D102160031000000030072000004BF05D100030007000B0047 -40130535060609013502030A350908054009133704B8FFC0401609133704050504030204 -0908720D0F0D1F0D0209680C10E65D10E41117392F2F2B2B003FED3FED12392FED313001 -213521032135211321352104BFFBB3044D34FC1B03E534FBB3044D0521B0FD08B0FC77B0 -FFFF0073FFE105DA05F0021600320000000100C80000053B05D100070027401703350603 -010501140078090F0940095009030414056C0810F6ED5D10F6ED002F333FED3130212311 -2111231121053BC6FD19C604730521FADF05D100FFFF00C80000049605D1021600330000 -000100760000050005D1000C00EB404709040908450B540B6409640A660B9309930A960B -A409A30AA70B0D0608060B1608160B28032708340A340B430A430B5903550B670B760B8B -0399049908B804B808EB04EB08150BB8FFC0B32529370AB8FFC0B325293709B8FFC0B325 -293708B8FFC04030262937030203080908B3040304030B0A0BB302030264048D02020403 -0203080B3501083505030403A009B009D0090309B8FFC04023191E371009200960097209 -D009E00906090703040B0908070602000010000200000E022F11332F5D1217392F2F5D2B -71332F003FED2FED11173931305D011087ED87C01087ED8708C0012B2B2B2B5D71290135 -090135211521011501210500FB76026CFDA80448FCC0024AFD8A039AB80258020EB3B0FE -061AFDA3FFFF0000000004EE05D1021600370000FFFF0006000004E605D10216003C0000 -FFFF00440000053805D10216003B0000000100B30000064405D10023006240402515251E -021B067518011834380948096F090309192209030810030822142311141023071B180714 -108008A008B0080320255025702503080825240F253F25025D1112392F5D5DC4ED393910 -C42FED2FED002F3F1217392F5DED5D393931305D011406070E01071123112E01272E0135 -1133111416171E01171133113E01373E013511330644514D50E197C59AE24B4E51C63B34 -359A62C5619C353836C6038E9DD74345460AFEBE01420B484245D69C0243FDA66D8E2C2D -2F0703E4FC1C082D2E318571025A0001006C0000062005F00027007D40125B195B256C1A -641D64216C24791A79240821B8FFC0B3090B371DB8FFC0403B090B373002301440024014 -041925140204160B341F02261835011608251202191214081502141C272222290F29010F -291F299029A029040E15171C2FC4ED5D5D11332FC4123939ED2FED2FED003F3CFD3C3FED -1217395D31302B2B5D2901113E01373E01353426232206151416171E0117112135213526 -023510002120001114020715210620FDC03C772C2D34FEDCDCFE342D2D763CFDC0019A9D -CB0177013101310177CB9D019A01832658393B9F6ACEF9F9CE6A9F3B395826FE7DAE7C5A -0138C20114015EFEA2FEECC2FEC85A7CFFFF007E000002E207500236002C00000117008E -FF240175001940130200104010501060107010050100100D0409252B355D3500FFFF0006 -000004E607500236003C00000117008EFFED01750019401302000E400E500E600E700E05 -01000E090500252B355D3500FFFF006CFFE10443068C0236012E00000116019DE200000A -B6020024210800252B35FFFF006DFFE603EE068C0236013000000116019DCC000013400E -014041504170410300413E1219252B5D3500FFFF00B9FE64045F068C023601C600000116 -019D1D00000AB601001A170E16252B35FFFF00A000000193068C023600D500000117019D -FE8E0000000BB601000704020325012B3500FFFF00B1FFE2045C068C023601D100000116 -019EFB00000F400903020100221F0717252B35353500000200B9FE64048D061400180037 -0077404F16200D1037070F4A1B4326433756267929062E200D0F3733200D103705200D10 -371615203E5F21012121032B3E0C0135400309080C15120F200120281B12122008191B00 -90391F390132071A08883810F6FD325D10F6ED1239392FED2F5D1239003F3FED3FED1239 -2F5DED393931302B2B2B5D012B011400232226271123113436333216171E011514060715 -1E01073426272E012B0135333236373E01353426232206070E0115111E01333236048DFE -F3CD4FB03FBCFDDF5A953B39448B7F9FBCC2453A3B924924244282272E2D8A6D49682120 -1E42964895A101BCCAFEF82C2AFE2405D2E0FE2B2E2B8A5B7FBD25111AC797596F1F2016 -A01D1E2262557074352C2C753EFCA2261F9D0001003DFE64047F045D0008006940497507 -01070607081A00010007061A04050505030C0A001A002A004A0059006900750007000505 -15052505450556056605730507050001011A059004A0040204040A091F0A4F0A5F0A035D -1112392F5DC4ED10C42F5D2F5D003F3F31300187FDC08710FD08C0005D09011123110133 -0901047FFE37BCFE43CC0157015A045DFBDBFE2C01D40425FCC4033C0001006CFE6403D6 -0614002F0058401D4600570065287F1178207D21061D1A3E1B012D3F0F070C1A1A19121C -07B8FFE04018090C37000701071C070BB40303310F313F3102231B12853010F6ED5D1133 -2FED33332F5D2B2F1239392F003F2FED3FED3931305D251E011514060723353E01353426 -2B012226353412373E013735213521150E01070602151416171E01171E013B013216039A -201C5A43B35A4C3D2F91E5DE5C4E4BC56CFE3402E875E55A5972060C0A31272479385647 -664B285B2854A93F0E4F7745394CE8E58C01007770CD5E099E874ECE7875FEE88F224828 -264B18160534000100B9FE64045F047C00160038402303151615731503100D084213040E -05010C0D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3F3F3FED12 -3931305D0123113426272E012322060711231133153E0133321615045FBC1218195E4B4D -A84DBCBC58BC63B5BEFE6404184D87262A294C3BFCBE045D7C4952DACD0000030089FFE1 -04750614001700240031006CB9002FFFD6B30A0D3729B8FFD640400A0D37212A0B0D371B -2A0B0D37662C01263E0F241F24022424061E3E3A124A120212012C3E3506450602060A25 -181A0000331F333F330224261A800C900C020C2F5DFD325D11332FFD32003F5DED3F5DED -12392F5DED5D31302B2B2B2B011406070E01232226272E01353412373E01333216171612 -072E01272E01232206070E010705211416171E01333236373E0104752E243AD29898D23A -252D2D2639D39797D339252EBD043120296C4F4F6C29222F040272FD8E2E2428704F4F70 -28242E0300BEFD548789898754FDBEAE010753828A8A8254FEFA548FD6364639394637D5 -8FA18EE93E453E3E453EE900FFFF00BB00000177045D021600D50000000100C1000004A8 -045F001800D3403B0601060216182618451856186618071C023A0169027A029701A602A6 -18C70208020203C60101860101011A001800090801F90801080B0A03090109B8FFEE4040 -10183709B402181703177F0301091808020305010C1010143F0C05060505011A172A1736 -178017A417051517251777179417E917F917060917180201050F0F00B8FFF04013090E37 -00001A0F1A1F1A3F1A0308031A05891910F6FD3C5D11332F2B332F17395D71002F2F3F3F -FD322F111217395D3130018710C0C07AF52B7118C0C004C07172018710FD5D7108C0015D -71212301071123113311013E013332163315232E01232206070304A8F8FE3D70BCBC0180 -487F3F1C3C070B102F0D2F4D1DFB01E96DFE84045DFDDA01A14F3802A602022F21FEF100 -0001003D0000047F061400070085401305040502020306011A07000002031A04040505B8 -FFF0401C0C10372B002604200703050402030601000806680701070506030400B8FFC040 -260910370C001C004B005A006A00790006008D090F090103041304440455046504760406 -04820810E65D5D10F65D2B1117395D2F003F3F17393130015D2B8710FDC01087FDC008C0 -08C0012123090123010333047FCDFEB8FE97C401D1D7D3033DFCC3042001F400000100B9 -FE640465045D00150046402C12200B0D3703200B0D37080205140B051042050900080A0C -0102131A0092171F1760179017030D091A0A881610F6FD3C5D10F6FD3939003F3F3FED3F -3C12393931302B2B2123350E012322262711231133111E013332363711330465BA4A874E -4B7854BCBC209E5B5D8836BC764E3D3650FDF305F9FCBA2752433C034000FFFF003D0000 -047F045D02160059000000010068FE64041106140046008A403C0F020F06090E1B0E241E -24283415361E36284428473C562D563C691779170F1918333F32320C24213D22013F3F0C -030C191C3232232121122B1B1C04B8FFD6400E090C37040408B4231C1280000100B8FFC0 -400B090C370000483A1B12854710F4ED11332F2B5D123939ED332F2B2FED12392F2F332F -1239003F2FED3FFD3212392FED393931305D0514060723353E013534262B012226272E01 -353436373E0137352E01353436373523352115212206070E01151416171E013B01152122 -06070E01151416171E013B013216171E0104115B42B45C4B3A2E8C8CB93F424532302C89 -4C7D96575AE40338FF00446D302D3641332D7650AAFED942692F2B334B403F995A1C4467 -211F226055A83F0E4F7844374E36393C97584E84353145130B1CA56853873A069A9E1D22 -2066434F621A1716A52827256A3B66721919072F25235F00FFFF006AFFE10471047C0216 -00520000000200B9FE640494047C0011001E0042402C3A17351E4A17431E560D05060315 -3E0F041C400309080C121B3A004A00020090201F206F200219071A08881F10F4FD325D10 -F65DED003F3FED3FED123931305D011000232226271123113436373E0133320003342623 -220615111E013332360494FEEBDE41A348BC47423EBB66F30100C2A0929E8D49774BA2B0 -0241FEFEFEAB242BFE2B04227BB9423E42FEDAFEDFDACCC0B6FE6D221DDE00010069FE64 -03FA04770029005C40120C020C06201325233614362340237A1F0817B8FFE040140E1037 -3F194F190219191D3F1504030C263F0B04B8FFD64011090C370418180408B400002B201B -12852A10F4ED11332FED33332F2F2B002FED3F3FED332F5D31302B5D0514060723353E01 -3534262B012226272E013510002132161715232E01232206151416171E013B01321603FA -5E3EB1564D3C2D5C75C64B49530137010354A0430C5E9D44A6BD393232814B64738E6057 -AA3B0E4B7947364F3C4342D092010E0144251BD33E32EEC1708E2D2C2799000100B1FFE2 -045C045D00170030401F1607050F3E0903560366037903880305030A151A0091191F1901 -091A06871810F6ED5D10F6ED003F5DED3F333130011406232226351133111416171E0133 -3236373E01351133045CF4E2DFF6BC14201F6B5C56731E1D15BC0197DADBD7DE02C6FD7F -5D782E2B2B2C2C2C7B5A028100010030FE640488045D000B00A240492A02250839023408 -4B02440879020710091A0A0B0A071A060506011A000B00031A04050402050B080A000606 -0A0405064A0445066A0465067A04770608040C0605080B050204040A00B8FFE040100A10 -3700000D2F0D010604200A1037042F2BC45D11332F2BC4121739003F3F5D111739313001 -8710ED8710ED8710ED8710ED4B535840140B030A070002030A0601080409070005040906 -010F0F0F0F59005D0123090123090133090133010488D5FEA6FEA2CB01BCFE4FD5014F01 -53CBFE4FFE64026BFD95030202F7FDA80258FD11000100B0FE6405E3045D0023006B4047 -1B062618751802183D39094909020919220903081005080C221A3F237F230223111A3010 -7010021023071B18071A109008C008025025602502080825240F25010F251F253F25035D -5D1112392F5D5DC4ED393910C42F5DED2F5DED003F3F1217392F5DED5D39393130011406 -070E01071123112E01272E01351133111416171E01171133113E01373E0135113305E360 -4F52C873BB73C753505FBC4B34388643BB4386383B44BC01BE72A835373705FE68019806 -343936A772029FFD9C718723261E0403C7FC39051C27287B7802640000010071FFE20611 -045D003D0079402D361F3632441F4432551F55326804680F691A69377D1A7D370C283B28 -0903061605210D303E060A3A400C0E3718B8FFC040240C0E37361B001B1B13003A29090A -291A18139028A028C0280328283F3E1F3F3F3F6F3F035D1112392F5DC4C4ED393910C4C4 -2FED2FED2B2B003FED39393F1217392F31305D011406070E0123222627230E0123222627 -2E013534123733150602151416171E01333236373E01371133111E01171E01333236373E -01353402273533161206112F33379D7360A2250627946671A333332F7290E4879F101E1A -5D47334714161D06BA091C1518393A465E1B19169D89E4907201F760C14B505963434462 -5D4C4CBF61AA0115A7116CFECCB742713F37491911122C0F0248FDB8112C111316473937 -7A41B601346D11A7FEEBFFFF00050000022D05DB021600770000FFFF00B1FFE2045C05DB -023601D100000116008EFB000015400F02301D501D601D0301001D180717252B355D3500 -FFFF006AFFE10471068C0236005200000116019DE200000AB602001B180600252B35FFFF -00B1FFE2045C068C023601D100000116019DFB00000AB601001B180717252B35FFFF0071 -FFE20611068C023601D400000117019D00B60000000AB60100413E1300252B35FFFF00C8 -0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500 -0001FFFF0000060705D1002500614025652476240216341F1F061E1A351B03093506182F -073F074F077F0704070717590F010F1500B8FFC04014090D370000270F27011A1F1D011D -1D1F17141A182F33FD32322F5D2F5D11332F2BED5D12392F5D002F2FED3FFD3212392FED -31305D011406070E012B0135333236373E01353426272E01232111231121352115211121 -3216171E010607534957AF8A6E5D5B782F38343135329583FEEBC6FE520468FE0C015398 -BF554C4901CC6CB13A4530B11022286F4E4B73232213FD220521B0B0FE6824423BAEFFFF -00C80000048A07ED023601EB00000117008D003501610015401001300840086008700804 -0008070405252B5D350000010073FFE5053905EC002A006A400C3A1C491C58057606790C -0511B8FFE040370A103701200A103720341D1D0F032A2A26340309131317340F021E1E13 -000010000200002C0F2C010F2C1F2C2F2C3F2C041D206C09682B10F6FD325D5D11332F5D -33332F003FED332F3FED332F1112392FED31302B2B5D250E012322242726023534123736 -243332161715232E01232206070E01072115211416171E013332363733053963EC91A9FE -EE61616969625F0112A98CF65F104EF98D6DAE4846580F0334FCC258474AC4708AF75010 -4127356863630120B7AF011F66626C3427DF40523A3B3BAD72AD8BD94648494A4300FFFF -0086FFE5050205EC021600360000FFFF0089000002D505D10216002C0000FFFF007E0000 -02E207500236002C00000117008EFF240175001940130200104010501060107010050100 -100D0409252B355D3500FFFF002CFFEB02EA05D10216002D000000020012FFFD08A205D1 -000E003D0066B3460C0130B8FFACB30A10371EB8FFC0401D0B0E37073437371618353503 -28282C352408341637081416163500150FB8FFF440110E11370F713F2F3F011813003501 -3535282F332F5DED5D10F62BFD11392FFD32002FED2FFD322F3FED12392FED31302B2B5D -013426272E01232111213236373E01371406070E01232111210E01070602070E01070E01 -2322262335331E01333236373612133612372111213216171E0107D33235379083FEEC01 -0F858F363834CF554754C098FDEEFDF0030B0308251D1D492F306544153C0C0E0A1E0F24 -401647430E050B040391015298C0554C4901C94B72232510FDCB1A252769556CB0374238 -052171D955D6FEEC595A6B2B2C2603C001021617470146012D62014487FDB823423BAE00 -000200C80000088305D1000E002700554020171E07342121161F1B030834161A560F0120 -1F081400166F160216161900150FB8FFF4400F0E11370F71294029011D19141A6C2810F6 -FD325D10F62BFD11392F5DED39395D002F2FED3F3312392FED39393130013426272E0123 -2111213236373E01371406070E0123211121112311331121113311213216171E0107B432 -35379083FEEC010F858F363834CF554754C098FDEEFD65C6C6029BC6015298C0554C4901 -C94B72232510FDCB1A252769556CB037423802DEFD2205D1FDB80248FDB823423BAE0001 -FFFF000005FD05D1001D00504032000E48175817600E620F700E700F0708011A350B0B01 -07033504031301131412121F5F067F0602060306070014037F0101012F5D33FD32322F2F -5D11332FED002F333FFD3212392FED123931305D2123112135211521113E01333216171E -01151123113426272E01232206070273C6FE520468FE0C5FF66765AA3D3D45C6161E2079 -646AC3660521B0B0FE2D1F33323534A373FE11018C4A8C2B2E312622FFFF00CD00000575 -07ED023601F200000117008D003C01610010400A01702301002321050025012B5D350002 -0006FFF904E6078F001A002800AF405A29033801461955140419191A1814171617161716 -191A130001001617181A010500070B0B0F35071B0F21702102212175250125AA0F1E011E -1E0003281A1B221A702101211B2100700A010A360156016501760104160A01031700B8FF -E0401409103700002A502A012A400910371720091037172F2B2B5D11332F2B1217395D2F -5D1139392F5DED2FED003F332F5DED5D332F5D332FED322F11121739018710FDC008C001 -8710FD08C03130005D09010E01070E012322262735331E01333236373E013F0101330901 -030E0123222627331E013332363704E6FDCA225D3634612D2872100E0F462D14481C203F -1624FDD6DB01B301862105C9A8A8C905B602605E5F5F0205D1FB1B4C621B19110801B902 -09060B0C34324F044FFC92036E01BEA6A8A8A67063627100000100C8FEAF053B05D1000B -0032401C060203043409000B0913000002061407780D400D700D020314026C0C10F6ED5D -10F6ED12392FED002F2F33ED3F33313029011133112111331121112302A4FE24C602E7C6 -FE24BB05D1FADB0525FA2FFEAF00FFFF001A0000055E05D1021600240000000200C80000 -052C05D100120021003E40256311011A340C0C070B3508031B3407080A0A131556000100 -71230F234023020C1B14076C2210F6FD325D10F45DED332F003FED3FED12392FED31305D -011406070E0123211121152111213216171E01073426272E01232111213236373E01052C -554754C098FDE403E5FCE1015C98C0554C49CF3235379083FEE20119858F36383401CD6C -B037423805D1B0FE6823423BAE724B72232510FDCB1A25276900FFFF00C80000052B05D1 -021600250000000100C80000048A05D10005001F401003013504030000070F0701021403 -6C0610F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D10002 -000AFEAF059E05D1000D00130049402A09121A124A110310340A030C1307340301051013 -0A0A070E140C0C0113200001000015131307070413052FED392FED11332F5DED392FED12 -392FED002F332FFD32323FED31305D01231121112311333612112111332111210A010705 -9EBCFBE4BC78829B03728DFEADFE0E0E9476FEAF0155FEAB0201D602B1019AFADF0475FE -9BFDAFBFFFFF00C80000049D05D102160028000000010020000007A805D1003700C7402E -093318332933401D40244135541D54247518711D73240B27133333351A130E0C0E020116 -09103701130037000708B8FFEA405A091037081309090A271F1A032C223237070A0C0E33 -35072C02142D350409021521052C03002F0A20375F0A50376F0A6037062C2C0137022733 -350600C5220414051515080A070C0E1A0609C51F0505393810393F395F397F39045D1112 -392F33F41739322F10FD32F41739322F5D002F3F1739FD322F121739FD111739018710FD -2BC08710FD2BC08710FD8710FD3130005D21230123112311230123012E01272E01272E01 -2B0135333216171E01171E01171133113E01373E01373E013B0115232206070E01070E01 -0707A8F2FDF469C46BFDF4E6025158682013251C1B533C3C47A7B23D0B1E0F2C8F56C45C -912E121D093CB5A5473C424B1E1D25132A7D3E02A9FD5702A9FD5702FE3A9C693D571C1B -18B17FAD1E5824696608029DFD610663702C5519AC80B1171C1B5B3A8587270000010051 -FFE5048505EC0040007F40145401583B6701693B7F0B7F0C7031703274380932B8FFE040 -3F0B10370B200B10373E3D1D3420200934703001303029343402100D7F0D020D0D113409 -0A3D1E0B0D37171E0B0D37236C3A1E1E3D3A030C171503734231310C2F332F10F6ED1217 -392F2FED2B2B003FED332F5D3FED332F5D1112392FED393931302B2B5D011E0115140607 -0E012322262735331E01333236373E01353426272E012B0135333236353426272E012322 -06070E010723353E01333216171E0115140607151E010416303F5B4650E68593FB4A0F63 -F97148A83436313C33339159C9B3ADD2352E2D6F4C4E843B3064170D4BF87E7BB14B4E52 -A37D347602CD2A816669AA3C4444371EDE3B4B2A292D6F454F651F1E1BA97F7836521818 -151E1411340DDB2036272C30885A7FB01B0F092F000100C80000053905D1000900644023 -0B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D07B8 -FFE840240B0F3702100C0F3707060102040308030308030807021400780B0F0B400B0207 -14046C0A10F6ED5D10F6FD113939003F3F1217392B2B31305D7121231101231133110133 -0539C5FD1CC8C502DBD104A9FB5705D1FB690497000200C800000539078F000900170093 -40320B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D -0A0F10701002101014AA0F0D010D0D07B8FFE840330B0F3702100C0F3707060102040308 -030308171A500A600A020A111A100A10000403080702140078190F194019020714046C18 -10F6ED5D10F6ED113939111239392FED2F5DED003F3F1217392B2B332F5DED332F5D3331 -305D7121231101231133110133030E0123222627331E01333236370539C5FD1CC8C502DB -D1B505C9A8A8C905B602605E5F5F0204A9FB5705D1FB69049701BEA6A8A8A67063627100 -000100CD0000057505D1002000AF407909011F01290127203A0137204B0147205C016500 -6720760074200D1F200A0D370C200A0D370202038801C8010201B30020001E661B861B02 -1B13120D120D121B1E04152002322F08010808000716351503070305000D121B1E200504 -4F150115150F2220003000400004500001006E22402201080414056C2110F6FD325D10F6 -5D5D322F5D121739002F2F3F3FED1112392F5DFD39121739018710FD5DC031300187107A -FD5D1808C0012B2B5D2123012311231133113E01373E01373E01373E013B011523220607 -0E01070E01070575FEFDA387C6C6335A28284E1E0D231245B9B44F53454E1F1D2B17346B -5A02A7FD5905D1FD6401121917553E1B522DA686B1191D1A583B847C2E0000010012FFFD -051805D10021003DB9001BFFACB309103709B8FFC0401A0B0E370335200301131317350F -01140078238F230103132020122F332FED5D10F6ED002FFD322F2F3FED31302B2B212311 -210E01070602070E01070E012322262335331E0133323637361213361237210518C6FDE6 -030B0308251D1D492F306544153C0C0E0A1E0F24401647430E050B04039B052171D955D6 -FEEC595A6B2B2C2603C001021617470146012D6201448700FFFF00C8000005F605D10216 -00300000FFFF00C80000053B05D10216002B0000FFFF0073FFE105DA05F0021600320000 -000100C80000053B05D100070027401703350603010501140078090F0940095009030414 -056C0810F6ED5D10F6ED002F333FED31302123112111231121053BC6FD19C604730521FA -DF05D100FFFF00C80000049605D1021600330000FFFF0073FFE5054605EC021600260000 -FFFF0000000004EE05D102160037000000010006FFF904E605D1001A0080403C29033801 -461955140419191A1814171617161716191A130001001617181A010500070B0B0F350700 -03700A010A360156016501760104160A01031700B8FFE0401409103700001C501C011C40 -0910371720091037172F2B2B5D11332F2B1217395D2F5D003F2FFD322F11121739018710 -FDC008C0018710FD08C03130005D09010E01070E012322262735331E01333236373E013F -010133090104E6FDCA225D3634612D2872100E0F462D14481C203F1624FDD6DB01B30186 -05D1FB1B4C621B19110801B90209060B0C34324F044FFC92036E00030069FFF0062405E1 -001D002A00370058403624182C321525062B32091509081603082A1E253265006A0F041E -150032150F00072B1518250407140F080839381F393F396F399039045D1112392FC4ED17 -3910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01071523352E01 -272E01353436373E01373533151E01171E01073426272E0127113E01373E0101110E0107 -0E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F4B57CE403B3A -8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A524AD88C88CC -4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01363737AA6170 -B63A2D3CFFFF00440000053805D10216003B0000000100C8FEAF05BE05D1000B0032401C -0602030B08043501080514080800130D40090B370A0A0D0414016C0C10F6ED11332F2BED -392FED003FFD322F3F3331302901113311211133113311230502FBC6C602DDC68DBC05D1 -FADD0523FADDFE010001008E000004EA05D10019003B40243511451154116C0974160502 -0C1435050500180C030017011400781B0F1B010D140C6A1A10F6ED5D10F6FD32002F3F33 -12392FED123931305D2123110E01232226272E01351133111416171E0133323637113304 -EAC681DD6463AC3F3F47C6142323726B71D652C60276282A313535A47201FCFE67577930 -2F2F281E02B1000100C80000077605D1000B003640200A06020308043401091400C60814 -05041401C605050D0C1F0D3F0D500D700D045D1112392FF4ED10FDF4ED002FFD323F3333 -31302901113311211133112111330776F952C6022EC6022EC605D1FADB0525FADB052500 -000100C8FEAF080305D1000F004140260A0602030C080434010F0D13000009140CC60814 -05041401C6050511101F113F1150117011045D1112392FF4ED10FDF4ED332FED002F2FFD -32323F33333130290111331121113311211133113311230747F981C6022EC6022EC68DBC -05D1FADB0525FADB0525FADBFE0300020000000005F405D1000E00210046401D07341B1B -1618351903083416560F011B08144F167F160216161900150FB8FFF4400A0E11370F7123 -0F2301192F5D10F62BFD11392F5DFD325D002FED3FED12392FED3130013426272E012321 -11213236373E01371406070E0123211121352111213216171E0105253235379083FEEC01 -0F858F363834CF554754C098FDEEFE660260015298C0554C4901C94B72232510FDCB1A25 -2769556CB03742380521B0FDB823423BAE00000300C80000069505D1000E001F00230055 -4016440D0107341919161703083416220321560F0100150FB8FFF4B30E11370FB8FFC040 -150C10370F0F21142078250F25702502190814166C2410F6FD325D10F6FD322F2B2BED5D -002F3F2FED3F12392FED31305D013426272E01232111213236373E01371406070E012321 -113311213216171E010123113304533235379083FEEC010F858F363834CF554754C098FD -EEC6015298C0554C490173C6C601C94B72232510FDCB1A252769556CB037423805D1FDB8 -23423BAEFDC505D1000200C80000052205D1000E001F003C401007341919161703083416 -560F0100150FB8FFF440110E11370F71210F21402102190814166C2010F6FD325D10F62B -ED5D002FED3F12392FED3130013426272E01232111213236373E01371406070E01232111 -3311213216171E0104533235379083FEEC010F858F363834CF554754C098FDEEC6015298 -C0554C4901C94B72232510FDCB1A252769556CB037423805D1FDB823423BAE0000010061 -FFE5052905EC002A0070400A3A1C491C640676060426B8FFE0403E0A10370B200A103718 -34191928092424203428020D0D11340909060316035603031A24171403732C0F2C010F2C -1F2C2F2C3F2C04241824180F0C1F0C020C2F5D33332F2F5D5D10F6ED11395D003FED332F -3FED332F1112392FED31302B2B5D0116121514020706042322262735331E01333236373E -01352135212E01272E012322060723353E0133320404616068696366FEEFA38DFE571051 -F78D7BCC444849FCD303230E5C4747B46689F057115DFE85AC010F052C60FEE4C2ACFEDF -676A6B3625DB414D574B50C980AD77AF3939374D43DC27356000000200C8FFE107D305F0 -000B001E006240427814010903060915161A1C5616591C7916761C080C34131E1314031C -03341602100309341C090F13190615180C3F0C580C6F0C040C0C0F0015197320120E140F -6C1F10F6FD3210F6ED12392F5DED1239002F3FED3F3FED1217392FED5D31305D01100023 -2200111000333200012311231133113312002120001110002120000705FEFFDBDDFEFE01 -03DCDB0101FB79F0C6C6F924016A0113013F016CFE90FEC5FECCFE9102E801280135FECC -FED7FEDBFEC90136010EFD3005D1FDAC012D0146FE63FE95FE93FE6601890002002C0000 -04DE05D10010001F0066400C28033506471C5A0759170504B8FFE8403209103703041305 -0506060F113440030103030012340F03000519150904060309045F050105120114007821 -0F2140216021035D10F6FD322F5D17392FED002F2F3FED12392F5DED12393130018710FD -C02B005D212311210123012E01353436373E0133210311212206070E01151416171E0133 -04DEC6FEBFFE43EE01DE96A55F4E47BE7301EAC6FED256682B2E3425292D82560250FDB0 -026E33D5B372A5373228FD240232161D1F7043506A292C1EFFFF0068FFE1041D04780216 -0044000000020074FFE1047C061D00270039006440160C1F35043D29303940044B294039 -6512751273330A33B8FFC0402B0B0D3722062B41002510250225250619411800373F060A -223118180C281B03903B1F3B3F3B02311B0C863A10F6ED5D10F6ED12392F1239003FED3F -ED12392F5DED123931302B5D011E01151400232226272602353436373E01373E01373E01 -37150E01070E01070E01073E01333216133426232206070E01151416171E0133323603EE -4648FED4DB6CB640504F0E19144D3548EBC24F883642814080CF303535084BB3655EAE0F -B29257A04802033A352E6C3E97AA03B846C786FAFEB6494C5F0121D04B9B6C5DAC354959 -11070904AD0408060B3E3135AB4D36493EFE22B9B7372E19431CAED840362DDA000300B9 -00000453045D0015002400330061400C0A0305141A0315147623050CB8FFD6402F090C37 -12112C3C4F1E011E1E071D3D08052D3D0708161B122C0F0F07251B00100D10370090350F -35011E2C1A07883410F6FD325D10F42BED12392F1239ED003FED3FED12392F71ED393931 -302B5D011406070E01232111213216171E0115140607151E01033426272E012B01113332 -36373E01133426272E012B0111333236373E010453413940977BFE3201B07D7F383F3B5E -4A6381FD1F202A694DC4EB4A4724261D3B243D26584EF1B270792C2C2B0152517E2A2F2A -045D111D216A48537A220A1889017D243A101505FECE0B161841FE4237451D1207FE930F -19194800000100B9000003BB045D0005001F4010013F040503700001000007021A038806 -10F6ED11332F5D002F3FED313001211123112103BBFDBABC030203B8FC48045D00020009 -FEF404AF045D000D00130053401C3B124A12020105103E0A050C13073E0310C90A0A070E -1A0C0C01C900B8FFC040120B0E370000152F153F1502131A070704C9052FED392FED5D11 -332F2BED392FED12392FED002FFD32323FED2F3331305D01231121112311333612112111 -3321112106020704AFAFFCB8AF79757302BE87FEBDFEAF0D8053FEF4010FFEF101ACC101 -F90103FC43031FFBFE628600FFFF006AFFE60460047C0216004800000001003400000632 -045D003100D840123A0E3A2D4A0E4A2D5F0C5F2F6F0C6F2F0826B8FFE0B3090B3715B8FF -E0401A090B3724B42D2D2F17B40E0C0E020116091037011A0031000708B8FFEA405E0910 -37081A09090A241C1703291F3C31070A0C0E2F2D072902112A3F040902121D052905002E -0A21315E0A51316F0A60317F0A7031082929013102242D2F0600C71F041A051212080A07 -0C0E170609C71C0505333210333F334F336F33045D1112392F33F41739322F10FD32F417 -39322F5D002F3F1739FD322F121739FD111739018710FD2BC08710FD2BC08710FD8710FD -3130002B2B5D21230123112311230123012E01272E012B0135333216171E01171E011711 -33113E01373E01373E013B0115232206070E01070632E3FE9A5BBA51FE8AD901AF314B1F -1B4A5435457C962D091B0A216740BA4069210B1B082C947D4535554B191C4D2D01FEFE02 -01FEFE0202491A60615542A2647D1A43174C3F0401E4FE1C04404B1942197B66A2465159 -631900010041FFE603C20478003D007FB7263475127D3C032FB8FFE0404C0D103708200D -10373B1B3FAF1CBF1C021C1C06313F2D902DA02D032D2D293E3104200A300A020A0A0E3F -06091C2E231B372E1C373B0409141B00903F7F3F803F02800990090209400B0F37092F2B -5D5D10F6ED1217392FED2F2F003FED332F5D3FED332F5D1112392F5DED3931302B2B5D01 -1406070E012322262735331E01333236373E01353426272E012B0135333236373E013534 -26272E012322060723353E01333216171E0115140607151E0103C2574444A45274D2660D -49E26A326A272A32312A297430A371288128343D3024255B2366C5430D53BE5F4E9B4342 -546D5C677A01395E822827242C2ECE4046131518433A3C48121208A2060D113E442F3D11 -110C3734CF1B221C2222755658851D071989000100B900000466045D00090044402D0B02 -0407020D030103380B103702380E10370706010204030805030808021A00920B1F0B600B -0203071A04880A10F6ED395D10F4FD39003F3F12173931302B2B5D712123110123113311 -01330466BAFDB7AABA0243B00347FCB9045DFCC5033B000200B900000466061500090017 -0073404C0B020407020D030103380B103702380E10370A0F1001101014500D0D07060102 -04030805030817C91F0A2F0A020A11C900101010201003100A100408021A0092191F1960 -190203071A04881810F6ED395D10F6FD391239392F5DED2F5DED003F3F121739332FED33 -2F5D3331302B2B5D7121231101231133110133030E0123222627331E01333236370466BA -FDB7AABA0243B06B05B1A9A9B105AB015B58595A010347FCB9045DFCC5033B01B894A6A6 -94695E5C6B00000100C1000004A9045D001A0093404D0120090E371B02271A360E321635 -1A0502011A001A000A1B0F2B0F020FB41618160A0F181604121A023C2F08010808000713 -3F12050705010508561A9600961AB600B61A05021A181604121200B8FFC04011090E3700 -001C0F1C1F1C0208031A05891B10F6FD325D11332F2B332F17395D003F3C3F3FED111239 -2F5DFD39121739018710FD71C03130018710FDC0015D2B2123012311231133113236373E -01373E013B0115232206070E010704A9F6FE3066BCBC5D72280E1B0D349C9256534F5924 -2859320200FE00045DFE1E434A1B3D1C7170A243545E5D180001001DFFFE043E045D0021 -003FB9001BFFACB30D103709B8FFC0401C0D1037023E2105001313173F0F011A00922303 -1A20203020022020122F332F5DED10F6ED002FFD322F2F3FED31302B2B212311210E0107 -0E01070E01070E012322262335333216333236373E01373E013721043EBCFE5F03060307 -201A183B2222533111410A0A081E0A183312333E0A040703030103BF539A3EA7C7423E4D -1F1E1E02A4020E1332EEE152E166000100B9000004D9045D000C0078401335093A0B4503 -4A0470037F04060B400D103709B8FFC0403D0D10377B027B05790A030A2A090B37050A02 -030904400E103704200D0F373F04010404070B09050107090A0B0305021A00920E0F0E20 -0E02051A07880D10F6ED5D10F6ED111739002F333F3312392F5D2B2B1217393130002B5D -012B2B5D2123110123011123113309013304D9BAFEEA8CFEECB0E301300126E70372FDC2 -023EFC8E045DFD8F0271000100B900000460045D000B0032401C033F0808050A07050105 -0809021A00920D1F0D600D0208031A05880C10F6FD325D10F6FD32003F333F3312392FED -31302123112111231133112111330460BCFDD1BCBC022FBC01F7FE09045DFE3C01C4FFFF -006AFFE10471047C021600520000000100B900000460045D000700254015033F06050005 -011A0092091F09600902041A05880810F6ED5D10F6ED002F333FED313021231121112311 -210460BCFDD1BC03A703BBFC45045D00FFFF00B9FE640490047C0216005300000001006A -FFE703FD04770021005A40430F234F235F23032B01220E2A1624183A01350E3A16351849 -014F0A440E4F1641185901550E6901650E7A01730E131010143F0C0421211A3F03090F00 -0023171B09852210F6ED11332F3C003FED332F3FED332F31305D015D250E01232226272E -013510002132161715232E01232206151416333236373E01373303FD73A5527ACC494951 -0128010161BB4E0B5DB555A7B7B6A83B75302651100B463629474848DC93010B013F3627 -D14744E0C7C7DC1E1813350D0001000A000003EE045D0007003840230301043F06054000 -4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32 -2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A5FFFF -003DFE64047F045D0216005C00000003006FFE64064B061400230030003D007A40105622 -011D011B1E0C09040627353F2118B8FFF040400E0F3718043B2E3F0F06100E0F3706090B -0C392436384924463804241B00C809311B1E2B04091A0C381B12C8800C900C020C0C3F3E -0F3F1F3F3F3F503F803F055D1112392F5DFDED10ED173910FDED5D003F3F2B33FD323F2B -33FD321217393F31305D011406070E01232226271123110E01232202113436373E013332 -16171133113E0133321203342623220607111E0133323605112E01232206151416333236 -064B4C3F3EA259436327BA3D4F54C1F04E3F3DA5523C6331BA2E7C3FC6E2C18888374A3F -2F3F3A8D9BFD7627503187A18F87355B024C95E54A4A4E2E13FE3301CD1E23012E010D8D -DD4B494D251E01E1FE1F1B28FED5FEECBFDE1219FD171619D9AA02E91219CED2C3E01D00 -FFFF003C00000480045D0216005B0000000100B9FEF404DE045D000B0041400F0602050B -08043F01051A080800C90AB8FFC04015090D370A0A0D0D40090E378F0DAF0D02041A0188 -0C10F6ED5D2B11332F2BED392FED002FFD322F3F33313029011133112111331133112304 -2FFC8ABC0226BC87AF045DFC4503BBFC45FE52000001008E0000041F045D0016003C4025 -0C061C062C06750E040209113F0505001509050014011A0092183F18010A1A0009100902 -092F5DED5D10F6FD32002F3F3312392FED123931305D2123110E01232226351133111416 -171E01333236371133041FBC5BA662B4BEBC101A1A5E5445A23CBC01AD1C22B1A70196FE -CA40652524261B12021D000100B900000649045D000B003D40260A06020508043F010809 -1A00CA081A05041A01CA8005A0050205050D0C0F0D200D500D700D045D1112392F5DF4ED -10FDF4ED003FFD323F333331302901113311211133112111330649FA70BC01AEBC01AEBC -045DFC4503BBFC4503BB000100B9FEF406D0045D000F004A402E0A0602050C08043F0108 -0E0DC90000091A0CCA081A05041A01CA80059005A00503050511100F111F113F116F1104 -5D1112392F5DF4ED10FDF4ED392FED002F3FFD32323F3333313029011133112111331121 -1133113311230621FA98BC01AEBC01AEBC87AF045DFC4503BBFC4503BBFC45FE52000002 -000A000004C4045D000E0021004A4015750D01073D4F1B9F1B021B1B16183F1905083D16 -0FB8FFF04016090B371B081A161619001B0F8F230F231F232F2303192F5D10F6FD11392F -FD322B002FED3FED12392F5DED31305D013426272E012B0111333236373E01371406070E -0123211121352111333216171E01040223282A6B64B0AC646E282925C24138429676FE55 -FEB80204F47E8B453A3A0157334D18190AFE8411181A473A518429322A03B8A5FE4D1A33 -2B86000300B9000005A2045D000E001F0023005A4016200523073D4F199F190219191617 -05083D167900010FB8FFF04022090B37001B500F600F700F030F0F231A2292250F253025 -402570250419081A16882410F6FD325D10F6FD322F5DED2B5D002FED3F12392F5DED2F3F -3130013426272E012B0111333236373E01371406070E012321113311333216171E011333 -1123036923282A6B64B0AC646E282925C24138429676FE55BCF47E8B453A3ABBBCBC0157 -334D18190AFE8411181A473A518429322A045DFE4D1A332B8602B1FBA300000200B90000 -0435045D000E001F00424013073D4F199F19021919161705083D167900010FB8FFF04013 -090B37001B0F8F210F212F210219081A16882010F6FD325D10F6ED2B5D002FED3F12392F -5DED3130013426272E012B0111333236373E01371406070E012321113311333216171E01 -037323282A6B64BAB6646E282925C24138429676FE4BBCFE7E8B453A3A0157334D18190A -FE8411181A473A518429322A045DFE4D1A332B8600010053FFE703F604770021007DB532 -0442040210B8FFD640090B0D37152A0B0D371DB8FFD6403F0B1037082A0B1037123D1313 -061F1B1B173E1F049F0A010A0A0E3E0609141C111A0390232340090D371C2F133F134F13 -03131C1380099009020940090C37092F2B5D33332F5D2F2B10F6ED1139003FED332F5D3F -ED332F1112392FED31302B2B2B2B5D011E011510002122262735331E0133323637213521 -2E012322060723353E01333216035D4950FEC9FEFC66BF430D3CC66D9DC40CFDCC023314 -BE8E5BB4570D3FC2677CC803ED46D290FEEAFEB8301BCE2F49C0BA979E9F3D43CE193A44 -000200B9FFE1064C047C000B001E005640363A0335094A034509040C3E131E1314031C03 -3F16041005093F1C0A0F1319061A2F0C010C0C0F001B1990202F203F2002120E1A0F881F -10F6FD325D10F6ED12392F5DED1239002F3FED3F3FED1217392FED5D3130013426232206 -15141633323625231123113311333624333200111000232200058AA69399A1A89292A7FC -D3E8BCBCED190111C7E70112FEF2EBDEFEF5022ED7D5DFCDD4D7D5A2FE06045DFE3BE7FD -FEC4FEEEFEF1FEC201200002004300000413045D0010001F0069B3721C0104B8FFE8403D -0910370304B4050506060F113C030300123D0F0500050909190902191B70090109040603 -09040A051A054A055A0580059005060512011A0092210F21015D10F6FD322F5D17392F5D -ED5D002F2F3FED12392FED12393130018710FDC02B015D212311230123012E0135343637 -3E0133210311232206070E01151416171E01330413BCDDFEA6DD01789186503D3C9C5C01 -AEBCED4D442827251724256A4101BBFE4501CD28A586597C27261BFDF201780A16164B2C -37441E1D1500FFFF006AFFE6046005DB0236004800000116008EF9000014400D03302560 -250202002520120025012B355D3500010013FE6D046206140035006A4044051C1E261E28 -59056905721D0617140E51111112180D08421B0412012F3E2A2A012A0D150F5F2E6F2E7F -2E032E2E0D001A2191371F37603702141517030B1A110F0D883610F63232FD17325D10F6 -ED12392F5D2F2F002F2F5DED3F3FED123912392FED393931305D0026272E01272E012322 -0607112311233533353315211521113E01333216171416151406070602070E01232A0127 -35333236133E013503A501010113191A594650AC4CBCA6A6BC0141FEBF58C162B1BB0303 -020103544746B96A17182A44BB9C09010102064B2B5080292B294D3AFCBE04F4869A9A86 -FEED4952DEC92F6B4B3A703AB0FEFF50504E029EF60150224B2EFFFF00B9000003BB0682 -0236020B00000116008D9AF6000AB6010009070405252B350001006AFFE7040A04770021 -006EB53B0A4B0A021BB8FFD640090B0D37162A0B0D370EB8FFD640340B1037012A0B1037 -193D1818030C1010143E0C0421211D3E03092018301840180318171810031A008E232340 -090D371A1A09852210F6ED2B10E61117392F5D003FED332F3FED332F1112392FED31302B -2B2B2B5D250E01232226272E013510002132161715232E01232206072115211E01333236 -3733040A4E9F7B7DD14C4C52012B010D68BB450C40C2658FC719023CFDC10AC4A46CBD3E -0C302029474849DC92010501453620CB324E9CA197B2C8443200FFFF006EFFE503D70478 -021600560000FFFF00AF0000018305DB0216004C0000FFFF00050000022D05DB02160077 -0000FFFFFFC2FE59021505DB0216004D00000002001DFFFE06F4045D000E003D0072B900 -30FFACB30D10371EB8FFC0401D0D1037073D4F379F3702373716183E350528282C3F2409 -3D167900010FB8FFF0401E090B3737081A161635001B890F010F8F3F0F3F0118C9203530 -35023535282F332F5DED5D10F45DFD11392FFD322B5D002FED2FFD322F3FED12392F5DED -31302B2B00353426272E012B01113332363736371406070E01232111210E01070E01070E -01070E012322262335333216333236373E01373E01372111333216171E01063223282A6B -64B0AC646E2829E74138429676FE55FE5F03060307201A183B2222533111410A0A081E0A -183312333E0A0407030301F47E8B453A3A012037334D18190AFE8411181A81518429322A -03BF539A3EA7C7423E4D1F1E1E02A4020E1332EEE152E166FE4D1A332B86000200B90000 -06F4045D000E0027005D4017171E073D4F219F21022121161C20051A083D167900010FB8 -FFF0401F090B37211E081A16161A001B890F010F8F290F292F294F29031D191A1A882810 -F6FD325D10F65DED11392FED39392B5D002FED2F3F3312392F5DED39393130013426272E -012B0111333236373E01371406070E0123211121112311331121113311333216171E0106 -3223282A6B64B0AC646E282925C24138429676FE55FDF3BCBC020DBCF47E8B453A3A0157 -334D18190AFE8411181A473A518429322A0210FDF0045DFE4D01B3FE4D1A332B86000001 -00130000045F0614001E00504030031D161D751D0317140E51111112180D08421B041201 -010D08150F021A0091201F20602002141517030B1A110F0D881F10F63232FD17325D10F6 -ED2F2F003F3C3F3FED123912392FED393931305D2123113426272E012322060711231123 -3533353315211521113E0133321615045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC -63B5BE027C4D87262A294C3BFCBE04F4869A9A86FEED4952DACDFFFF00C1000004A90682 -0236021200000116008DF9F60011400C01001D401D02001D1C0611252B5D35000002003D -FE64047F06150007001500BD404C04063406440650066006700606090307051903170546 -0149035800570179030902071A000100051A0403044900460402080F0E010E0E12500B0B -0003020405020C15C908400B0E37080FC90EB8FFC040110B0E370E080E04026801010102 -03030400B8FFC040220910370C001C004A006A007A0005008D170F170103041304450465 -0475040504821610E65D5D10F65D2B1117395D2F1139392F2BED2F2BED003F3F12393933 -2FED332F5D333130015D8710FD8710FDC0015D005D0901231301330901130E0123222627 -331E0133323637047FFD74C9D0FE43CC0157015A0805B1A9A9B105AB015B58595A01045D -FA0701D20427FCC4033C01B894A6A694695E5C6B000100B9FEF40460045D000B003F4027 -0A060520030103083E00050802C93F034F037F0303030305091A00920D1F0D600D02081A -05880C10F6ED5D10F6ED12392F5DED003F33ED2F5D3F3331302901112311211133112111 -330460FE84AEFE83BC022FBCFEF4010C045DFC4403BC000100C80000048A076B0007002B -B90006FFC040140D10370606003503030205130606090114026C0810F6ED11332FED002F -3FED332F2B31300111231121113311018EC60308BA0521FADF05D1019AFDB600000100B9 -000003BB05CE00070033B90006FFC0401A0E10370606003F03050205C97006010606090F -0901011A02870810F6ED5D11332F5DED002F3FED332F2B313001112311211133110175BC -0254AE03B8FC48045D0171FDEA00000100CB023C073502DC00030011B601540200000501 -2F11332F002FED3130012135210735F996066A023CA0000400C8000008B905ED00090015 -0021002500A7403E080718073A014901440646075801540656076F0160067F0170060D09 -0D0613190D16137A19751F0625533F224F220222221F401214371F51300D010D0D19B8FF -C040321214371951130202030807040106030100220F2302232223220A1CC910100A0006 -0102071300000416C90A0A270213046C2610F6ED11332FED12392FFD1139391112392FED -1239392F2F5D002F3F1217393FED2B332F5DED2B332F5DED5D3130015D21230111231121 -0111330114062322263534363332160734262322061514163332360121152104FFF5FD72 -B401330250B403BABDB2B6BABEB2B5BAB25865675757676558FE6201B8FE480534FACC05 -D1FB4004C0FE63E0DADADFE0DADCDDAC8888ADAD8787FDE89E00000100B900000460045D -000700254015033F06050005011A0092091F09600902041A05880810F6ED5D10F6ED002F -333FED313021231121112311210460BCFDD1BC03A703BBFC45045D00000101190235028F -05D5000800214011035004040703010E0307002A03000101012F5D33ED392F003F3F332F -ED3130012311233532363733028FA5D1667E0989023502A9752C5600000100EF023D039F -05ED001D0043B90011FFE040250D10370F0F0B521302021C51010E00001C01082A261636 -166616761604160F160F000101012F5D33332F2F5DED1239332F003FFD323FED332F3130 -2B0121353E01373E013534262322060723353E01333216151406070E010721039FFD505B -86276D40584C468F290F41974D9DA9526A318D3701F2023D94456825676D52464A3C20B3 -1B229E7A5D945E2B6A29000100E6021C037305ED002E0074400F6C096C227E097E220455 -0C5A1F0226B8FFE0403B0B0E3703200B0D372C2B15510F16010F161F164F165F16CF16FF -16061621211D51160625020A0A0E51060F1A2A281622112A2216282C04090000092F332F -121739ED2F2F2FED003FED332F3F1239ED332F2F5D71ED393931302B2B5D015D01140607 -0E012322262735331E013332363534262B01353332363534262322060723353E01333216 -15140607151E0103733C30357B4F528F4111259A4F546E645B8C7D575F52574299251140 -964F98AA614D5075033A47702225201E1CAF233B4948533B8B4C423C473E23AF1B228C62 -57711A08106D000200B3023D03BD05ED000A000D003A401E6D067E06020609010D51050C -05030702030E00070B042A09000D060101062F332F12393333FD39392F003F3F1239392F -ED3939323130015D012315233521350133113321110103BDA396FE2F01D295A3FECBFE9F -0319DCDCB9021BFDB10190FE7000000100E6021C037505DA002A004840176F087F08021D -1D1A5125250621511E030A0A0E51060F00B8FFEA400F090C371F21291E1F1E09142A0000 -092F332FED1239392FED2F2B003FED332F3FED12392FFD322F31305D011406070E012322 -262735331E01333236373E01353426272E012322060711211521153E01333216171E0103 -75322F3088574E953C1025924E2C521C1D171F1D1E59353B6C260255FE4814310E547634 -373C0363457A2A2B331C1A9F1436171C1D43272A391415110E0601F08BCF02021722246F -000100F3023503A505DA000600414025560101030100012A020203630073000200000351 -0503020E030002100910370202040000042F332F12392F2B1239003F3FFD322F3130015D -8710ED87C0015D0901230121352103A5FE2AB901F0FDED02B2054EFCE7031A8B000300C5 -021B039105EE001900280037005D40420F0B0F151F0B1F152A022A0439023904492B582B -0A0F251F2526103610042F09261604031D5110023551030F1A2A13202A0D292A090D1316 -04067000010000322A062FED332F5D121739ED2FED2FED003FED3FED1217395D31305D01 -140623222635343637352E0135343633321615140607151E01033426232206151416171E -01173E01133426272E01270E011514163332360391CB9BA7BF5E595246B99095B5505261 -5BBE574F465D302D17482E392618374217582A3A387650516D033579A19F784F78260429 -64476A8D87683F7D2304276B016433483F36263D140A1F0B254FFE79323B1E0A1C0F205D -304A5F4E00020073FFE1068B05F0002800340075400978180176097915021BB8FFC04045 -0910371B694F0001002302031A090A0905151A0915155A095515062C3415023234090A22 -1E2926151B00030F291503360F361F3680369036BF36CF36060F36012F150F683510F6ED -5D5D10D6ED121739D4FDC4003FED3FED5D1239393FDD5DED2B5D31305D011E0115140207 -0E01232224272602353412373624333216171E01173E013534262735331E011514060110 -0023220011100033320005A11F1A63595CFBA19DFEFF5A5A61605C5801059AA0FF591819 -144F43160CA00D0B78FEF9FEFCE1E3FEFD0108DEDE0107044958A663B8FEDD6165666863 -630120B9B6012167626869611B2121044044245B17092F46326C82FE8D0122013BFEC5FE -DEFEDBFEC90137000002006AFFE104C30584001D0029005640391A20090C373A2135274A -21452704151B690D050003213F0904273F030A14102918090C1B03061E1B00902B0F2B1F -2B3F2B6F2B04241B06852A10F6ED5D10F6ED121739DCFDC4003FED3FED12393FFDCD5D31 -302B011000232200111000333216173332363534262735331E01151406071E0107342623 -22061514163332360471FEE8EBEDFEE90117ED33602B5D5A4A160CA00D0B736C4548C2AA -9799A9AA9896AB022EFEEFFEC4013C01110111013D0F104147245B17092F46326A80144D -D98BD9D3D3D9D2D9D700000100B2FFE1067506F8002B004C40342A20090F37252B6A1C03 -0D032615390649067615041534060A2420290F2801281B14002D0F2D402D6F2D7F2D902D -050F140C6B2C10F6ED5D10DEEDD45DFDC4003FED5D3F3FFDC431302B011406070E012322 -26272E01351133111416171E01333236373E0135113332363534262735331E0115140623 -052947514DCE898CD0475147C621272C976A6B962D2721D85A4A160CA00D0BACA00256A2 -F1504C464A4852E8A9037BFC7B798C394142414239936D038A4147245B17092F46328384 -000100B1FFE105A505840025005C403E0B0619077A070323200910371E246A1505020509 -051142050A011D19290F21012114021A40000100270F276F27025F279027A027C027EF27 -050B1A08872610F6ED5D7110D671ED32D45DFDC4002F3FED3F12393FFDC431302B5D2123 -350E01232226351133111416171E0133323637113332363534262735331E011514062B01 -0457BC5FAE69B0C4BC101A1B565249AD4BD05A4A160CA00D0BACA0027C4B50D7D002D5FD -8455792B2C284C3B03424147245B17092F46328384000001020905110342068C00160042 -4029BF0301030606050C50146005010504ADC005D005020540090D370505110940111437 -09290F000100112FDD5DED2B12392F2B5DED002F5DD4ED12392FC55D3130011406071523 -353E013534262322060723353E01333216034242426E2F3026211F251803134926516605 -F8404E1544790C27271827090969060C560000010221FE8202F5FF450003001340090144 -8F0201020015012FED002F5DED31300123353302F5D4D4FE82C3FFFF0154051602FA068C -001600430000FFFF021D051603C3068C0016008D00000002013605110514068C0006000A -004DB90006FFF040100E103705100E10370802010708040305B8FFC040110E1037050560 -0301036007700702070900B8FFC0B50E10370000042F332F2BD6CD5D002F5D332F2B1217 -392F3130012B2B01230B012313332103231303E19FB9B89BE4E30217DA817C05110100FF -00017BFEF6010A0000020003051103E1068C0006000A004AB90006FFF040100E10370510 -0E10370802010809040305B8FFC040180E1037050560030103006F097F0902090704400E -103700042F332BD6CD5D2F002F5D332F2B1217392F3130012B2B01230B01231333012303 -3303E19FB9B89BE4E3FE6181DADF05110100FF00017BFEF6010A00020136051104C00752 -0006001D008EB90006FFF040120E103705100E1037BF0A010A0D0D0C13501BB8FFC0400B -0E10371B0C02010C030305B8FFC0402A0E10370505600301030BADC00CD00C020C400910 -370C0C18104011143710290F07010718400C10371800B8FFC040090E1037000060040104 -2F5D332F2BD42BDD5DED2B12392F2B5DED002F5D332F2B1217392FD42BED12392FC55D31 -30012B2B01230B01231333251406071523353E013534262322060723353E0133321603E1 -9FB9B89BE4E301C342426E2F3026211F251803134926516605110100FF00017B32404E15 -44790C27271827090969060C560000020125051103F307DE000600200064B90006FFF040 -200E103705100E10370710520F171F17A0170317141D520A400D11370A01020305B8FFC0 -40110E10370505600301032029070013291400B8FFC0B40E103700042F332BD6ED2FD6ED -002F5D332F2B123939D62BED3CDD5DED3C3130012B2B01230B01231333130E0123222627 -2E0123220607233E01333216171E013332363703E19FB9B89BE4E3F606865F35491C183A -192B22058C05875F36491C163B192A240405110100FF00017B015289902919162D3E4788 -912A19142E3E47000002014204E703D506FB000D0011003C40251110400F1A3710001006 -0AAA3F030103600E700E020E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D -002F5DEDCD39392F2BCD313001140623222635331416333236353703231303D5B29897B2 -A2555253555EDA817C0646A3BCBCA37C64647CB5FEF6010A0002014204E703D506FB000D -0011003C4025100F400F1A370F000F060AAA3F0301036F107F1002100E0D2A0E0F001F00 -8F000300072A062FEDD45D39ED2FCD5D002F5DEDCD39392F2BCD31300114062322263533 -1416333236350723033303D5B29897B2A2555253555281DADF0646A3BCBCA37C64647C55 -010A0002014204E703D5071E000D002400634040111414131A0F2201221340091A371300 -13060AAA3F0301031213400910371313001F101F201F031F1728500E600E700E030E0D2A -0E0F001F008F000300072A062FEDD45D39ED2F5DEDCD5D392F2BCD002F5DEDCD39392F2B -D45DCD12392FC531300114062322263533141633323635271406071523353E0135342623 -22060723353E0133321603D5B29897B2A2555253551237375C272822191C1E1402103C21 -42570646A3BCBCA37C64647C5B34431238650A2120191D080757060A45000002012504E7 -03F307DE000D0027005840100E17520F1E1F1E021E1B245220110111B8FFC04025090C37 -11006006700602060AAA3F0301031A291B0627290E0D2A0F001F008F000300072A062FED -D45DEDD4ED10D6ED002F5DEDDD5D39D62B71ED3CDD5DED3C313001140623222635331416 -33323635130E01232226272E0123220607233E01333216171E013332363703D5B29897B2 -A255525355C006865F35491C183A192B22058C05875F36491C163B192A24040646A3BCBC -A37C64647C019889902919162D3E4788912A19142E3E47000001020905110342068C0016 -00524035BF0301030606050C50501460147014031409900501C76005010504ADC005D005 -020540091037050511094011143709290F000100112FDD5DED2B12392F2B5DED002F5D5E -5D5ED45DED12392FC55D3130011406071523353E013534262322060723353E0133321603 -4242426E2F3026211F251803134926516605F8404E1544790C27271827090969060C5600 -00020136065403E1080100060020007D404A0702170202141D50200A010A1050076F1701 -0F1770170217010205400D1137050920039003A003B003045910032003C00303C003D003 -0231D003E003025003010F037003020320280700B8FFC040090E10370013281400042F33 -D6ED2F2BD6ED002F5D71725E71725E715ECD2B39392F5D713CEDDD71ED3C31305D012327 -07233733130E01232226272E0123220607233E01333216171E013332363703E1A9AFAEA5 -F8BBEC0B705025491C1B3E141D2806860A6F5227432122301A1B2B0506545959AD010052 -6B190D0D1A202D4E6F17101016232A0000020142064803D50801000D0011005A403E5010 -6010020A50FF03015F030103007F0601060F109F10026F10FF1002106F11010F11701102 -11590E690E720E030E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D002F5D -71DD5D71D45D3CDD7172ED5D313001140623222635331416333236353707233703D5AB9E -9EACA24B5D5A4D4FC681680738589899573058592FC9D8D800020142064803D50801000D -001100644033500E600E020A50FF03015F030103007F0601060F0E9F0E026F0EFF0E020E -6F11010F1170110211561066107D1003100E0D2A0EB8FFC0400F090D370E0F001F008F00 -0300072A062FEDD45D392BED2FCD5D002F5D71DD5D71D45D3CDD7172ED5D313001140623 -222635331416333236350723273303D5AB9E9EACA24B5D5A4D5681C6DF07385898995730 -58592F0FD80000020142064803D50801000D0024008E4062111414131A6F22010F227022 -02223F134F13021340111537130013060A5009900301B0030159700301310F033F037003 -CF0304031213400915371313501F601F701F03001F101F201F301F401F051F17C00E010E -0D2A0E0F001F008F000300072A062FEDD45D39ED2F5DCDCD5D71392F2BCD002F5D5E715E -5D715EEDCD39392F2B712F5D71CD12392FC5313001140623222635331416333236352714 -06071523353E013534262322060723353E0133321603D5AB9E9EACA24B5D5A4D2E2E2E4D -231F1C15191A0E020E321B364A0738589899573058592F612B380F2F54091E1817160805 -4905083900020142064803D50801000D0027009240111B2450DF1101110E17506F1E010F -1E011EB8FFC040520D10371E00060A50099003B00302F0030159200330034003C003D003 -E003066003700302C003D0030231A003B003025003E003020F033F03CF0303031A281B1B -0627280E0E0D2A0F001F008F000300072A062FEDD45DED3C10ED103C10ED002F5D71725E -5D71725E5D715EEDCD322F2B5D71ED3CDD71ED3C31300114062322263533141633323635 -370E01232226272E0123220607233E01333216171E013332363703D5AE9B9BAFA26C3C3C -6BA20B705025491C1B3E141D2806860A6F5227432122301A1B2B050706546A67572E2828 -2EFB526B190D0D1A202D4E6F17101016232A000201360668051008010006001D0088B900 -06FFF0401A0E103705100E1037BF0A010A0D0D0C400E10370C13500F1B011BB8FFC0403A -0D10371B0102030F0570050205050F0301030BADC00CD00C020C400910370C0C18104011 -143710290F07010750006000700003180000600401042F5D332FD45DDD5DED2B12392F2B -5DED002F5D332F5D1239392F2B5DEDC42B392FC55D3130012B2B01232707231333051406 -071523353E013534262322060723353E0133321603E19FB9B89BE4E3021342426E2F3026 -211F25180313492651660668CECE014944404E1544790C27271827090969060C5600FFFF -001AFE82055E05D10236002400000116024B2F00000AB602000D0E0500252B35FFFF0068 -FE82041D04780236004400000116024BBA00000F400A027F36010036370B00252B5D3500 -FFFF001A0000055E080102360024000001170256002F0175001A401202501C0102101C40 -1C701C03001C0B0500252B5D35005D35FFFF0068FFE1041D068C0236004400000116024A -BA000011400C025F457F45021D45340B00252B5D3500FFFF001A0000055E07ED02360024 -00000117024E002F01610011400B0302400F01000F0B0500252B5D353500FFFF0068FFE1 -04F4068C0236004400000116024EE0000013400D030240385038022938340B00252B5D35 -3500FFFF001A0000055E07ED0236002400000117024F002F01610011400B03020F0F0100 -0F0B0500252B5D353500FFFFFFE3FFE1041D068C0236004400000116024FE0000013400D -030240385038022938340B00252B5D353500FFFF001A0000055E08010236002400000116 -025C2F00001740110302400FA00FB00FC00F04000F0B0500252B5D353500FFFF0068FFE1 -04A0075202360044000001160250E0000013400D030240385038022938340B00252B5D35 -3500FFFF001A0000055E0801023600240000011602572F00000CB70302000F0B0500252B -3535FFFF0068FFE1041D07DE02360044000001160251E0000013400D0302403850380229 -38340B00252B5D353500FFFF001AFE82055E07ED023600240000003700D6002F01610116 -024B2F00001840110300141505002502400F01000F0B0500252B5D352B35FFFF0068FE82 -041D068C023600440000003600D6E0000116024BBA00001E4016037F3D01003D3E0B0025 -0240385038022938340B00252B5D352B5D35FFFF001A0000055E08010236002400000116 -02582F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236004400000116 -0252E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000055E08010236 -00240000011602592F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236 -0044000001160253E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000 -055E08010236002400000116025A2F00000CB7030200110B0500252B3535FFFF0068FFE1 -041D071E02360044000001160254E0000011400B0302403A01293A340B00252B5D353500 -FFFF001A0000055E08010236002400000116025B2F00000CB7030200110B0500252B3535 -FFFF0068FFE1041D07DE02360044000001160255E0000011400B0302403A01293A340B00 -252B5D353500FFFF001AFE82055E0801023600240000003700D9002F01750116024B2F00 -001D4013025011011103001B1C0500250200110B0500252B352B3500115D3500FFFF0068 -FE82041D068C023600440000003600D9DD000116024BBA0000184011037F44010044450B -002502293A340B00252B352B5D35FFFF00C8FE82049D05D10236002800000116024B2600 -000AB601000E0F0100252B35FFFF006AFE820460047C0236004800000116024BF900000A -B6021F22231218252B35FFFF00C80000049D08010236002800000117025600260175001C -401401501D0101001D201D501D601D04001D0C0203252B5D35005D35FFFF006AFFE60460 -068C0236004800000116024AF9000018B4026F310131B8FFC040090A1137323120120025 -2B2B5D35FFFF00C80000049D07C8023600280000011700D7002601750012400B01501901 -0100190C0203252B35005D35FFFF006AFFE604600653023600480000011600D7F900000A -B602002D201200252B35FFFF00C80000053A08010236002800000117024E002601750016 -400D0201501001020100100C0203252B3535005D3535FFFF006AFFE6050D068C02360048 -00000116024EF900000CB703021E24201200252B3535FFFF00290000049D080102360028 -00000117024F002601750016400D0201501001020100100C0203252B3535005D3535FFFF -FFFCFFE60460068C0236004800000116024FF900000CB703021E24201200252B3535FFFF -00C80000053608010236002800000116025C26000013400D0201101020100200100C0203 -252B5D353500FFFF006AFFE604B9075202360048000001160250F9000013400D03020024 -2024021E24201200252B5D353500FFFF00C80000049D0801023600280000011602572600 -000CB7020100100C0203252B3535FFFF006AFFE6046007DE02360048000001160251F900 -000CB703021E24201200252B3535FFFF00C8FE82049D0801023600280000003700D60026 -01750116024B2600001D40130110501001020015160203250100100C0203252B352B3500 -5D113500FFFF006AFE820460068C023600480000003600D6F9000116024BF9000014400E -031E292A120025021E24201200252B352B35FFFF0089000002D508010236002C00000117 -0256FF2401750016400E01501101015011010011100409252B5D35005D35FFFF00960000 -01CF068C023600D500000117024AFE8D0000000AB6010009080203252B35FFFF0089FE82 -02D505D10236002C00000117024BFF240000000AB601000E0F0409252B35FFFF00AFFE82 -018305DB0236004C00000117024BFE8E0000000AB602000A0B0203252B35FFFF0073FE82 -05DA05F00236003200000117024B009B0000000AB6020026270F03252B35FFFF006AFE82 -0471047C0236005200000116024BE200000AB602001A1B0600252B35FFFF0073FFE105DA -080102360032000001170256009601750022400B0250340102503470340234B8FFC04009 -090B370034240F03252B2B5D35005D35FFFF006AFFE10471068C0236005200000116024A -E200000F400A02701D01001D1C0600252B5D3500FFFF0073FFE105DA0801023600320000 -0117024E00960175001E401403025028010302202850288028030028240F03252B5D3535 -005D3535FFFF006AFFE104F6068C0236005200000116024EE200001940130302001C201C -501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA08010236003200000117 -024F009601750016400D030250280103020028240F03252B3535005D3535FFFFFFE5FFE1 -0471068C0236005200000116024FE200000CB70302001C180600252B3535FFFF0073FFE1 -05DA08010236003200000117025C009600000015400F0302202850288028030028240F03 -252B5D353500FFFF006AFFE104A2075202360052000001160250E200001940130302001C -201C501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA0801023600320000 -01170257009600000015400F0302202850288028030028240F03252B5D353500FFFF006A -FFE1047107DE02360052000001160251E200001940130302001C201C501C801CB01C0500 -1C180600252B5D353500FFFF0073FE8205DA0801023600320000003700D6009601750117 -024B00960000001D4013025028012803002D2E0F0325020028240F03252B352B3500115D -3500FFFF006AFE820471068C023600520000003600D6E2000116024BE2000014400E0300 -212206002502001C180600252B352B35FFFF0073FFE1068B08010236024600000117008D -007801750014400D025036603602020036360F03252B35005D35FFFF006AFFE104C3068C -0236024700000116008DE200000AB602002B2B0600252B35FFFF0073FFE1068B08010236 -024600000117004300AA0175001A40120250366036020250367036020036360F03252B5D -35005D35FFFF006AFFE104C3068C02360247000001160043E2000011400C02502B602B02 -002B2B0600252B5D3500FFFF0073FFE1068B080102360246000001170256008F01750012 -400B02503A0102003A390F03252B35005D35FFFF006AFFE104C3068C0236024700000116 -024AE200000AB602002F2E0600252B35FFFF0073FFE1068B07C8023602460000011700D7 -008B01750012400B02504201020042350F03252B35005D35FFFF006AFFE104C306530236 -02470000011600D7C400001540100210372037403750370400372A0600252B5D3500FFFF -0073FE82068B05F00236024600000117024B009A0000000AB6020037380F03252B35FFFF -006AFE8204C305840236024700000116024BE200000AB602002C2D0600252B35FFFF00B2 -FE82052905D10236003800000116024B6200000AB6010020210C00252B35FFFF00B1FE82 -0457045D0236005800000116024BFD00000AB60100191A0916252B35FFFF00B2FFE10529 -080102360038000001170256006201750012400B01502301010023220C00252B35005D35 -FFFF00B1FFE10457068C0236005800000116024AFD00000AB601001C1B0916252B35FFFF -00B2FFE1067508010236024800000117008D007C01750014400D01502E602E0201002E2D -0C00252B35005D35FFFF00B1FFE105A5068C0236024900000116008DEE00001840100160 -28010130284028020028290900252B5D35005D35FFFF00B2FFE106750801023602480000 -0117004300AA0175001C401401502D602D0201402D602D802D03002D2D0C00252B5D3500 -5D35FFFF00B1FFE105A5068C023602490000011600430200001840100160270101502760 -27020027270800252B5D35005D35FFFF00B2FFE106750801023602480000011702560062 -01750012400B01503101010031300C00252B35005D35FFFF00B1FFE105A5068C02360249 -00000116024AFD00000AB601002B2A0800252B35FFFF00B2FFE1067507BE023602480000 -011700D70062016B000AB60100392C0C00252B35FFFF00B1FFE105A50653023602490000 -011600D7FD00000AB6010033260800252B35FFFF00B2FE82067506F80236024800000116 -024B6200000AB601002E2F0D00252B35FFFF00B1FE8205A505840236024900000116024B -FD00000AB6010028290800252B35FFFF0006000004E608010236003C000001170043FFE4 -0175001B400A01500A600A0201500A01B8FFD3B40A0A0401252B5D35005D3500FFFF003D -FE64047F068C0236005C000001160043DD000013B5016009700902B8FFDDB40909040025 -2B5D3500FFFF0006FE8204E605D10236003C00000116024BEC00000AB601000A09040125 -2B35FFFF003DFE64047F045D0236005C00000117024B010400000012400D010A0F0A2F0A -4F0A6F0A7F0A055D1135FFFF0006000004E608010236003C000001170256FFEC01750018 -401001500E0101C00ED00E02000E0D0302252B5D35005D35FFFF003DFE64047F068C0236 -005C00000116024AC900000F400A01500D01000D0C0400252B5D3500FFFF0006000004E6 -07C80236003C0000011700D7FFEC01750012400B01501601010016090500252B35005D35 -FFFF003DFE64047F06530236005C0000011600D7DD00000AB6010015080400252B350003 -006CFEBD04FB0614001B0028002C007E40523B05380C3C2232243E284B054A0C4E224524 -4F285908690870120D2AB52B0114511A17171018011304072041100403082642070A2C2B -2C2B010A1600881617131C041A1A01922E1F2E3F2E02231B010A852D10F632ED5D10F632 -ED32323232ED2F111239392F2F003FED3F3FED1239393F12392F3CFD3C2FED31305D0123 -1123350E01232202113436373E0133321617352135213533153301112E01232206151416 -3332361321352104FBB8BC4DAD6EC6ED524444B66059864CFE95016BBCB8FE8C4F73499C -B2879750A4EAFCB4034C04F4FB0C754252012E01118EDB4D4C4F2427CE869A9AFB990279 -2218D6CCC3CD47FDE286FFFF00ED051D042C0653001600D700000002008A009104900498 -0023002F004D40332D290B0802231D1A141108172F0501052729050F1701170F311F3102 -24290B0802231D1A1411080E202001202A29200F0E010E2F5D33ED2F5D121739ED5D002F -5D33ED2F5D121739ED31300107270E01232226270727372E01353436372737173E013332 -16173717071E011514060727342623220615141633323604906EEC2C4A342E5724EC6DE9 -1718161AEA6FEB24572D2C5825EA71EB1818191765694B496B694B496B01016EEA1A1619 -17EC71EA25592B34492BED6EEB17191817EA6DED2653302D5824A949706E4B4A6F6D0000 -0002000000000000FF4C00780000000000000000000000000000000000000000037D0000 -01020103010401050106010701080109010A010B010C010D010E010F0110011101120113 -011401150116011701180119011A011B011C011D011E011F012001210122012301240125 -0126012701280129012A012B012C012D012E012F01300131013201330134013501360137 -01380139013A013B013C013D013E013F0140014101420143014401450146014701480149 -014A014B014C014D014E014F0150015101520153015401550156015701580159015A015B -015C015D015E015F0160016101620163016401650166016701680169016A016B016C016D -016E016F0170017101720173017401750176017701780179017A017B017C017D017E017F -0180018101820183018401850186018701880189018A018B018C018D018E018F01900191 -01920193019401950196019701980199019A019B019C019D019E019F01A001A101A201A3 -01A401A501A601A701A801A901AA01AB01AC01AD01AE01AF01B001B101B201B301B401B5 -01B601B701B801B901BA01BB01BC01BD01BE01BF01C001C101C201C301C401C501C601C7 -01C801C901CA01CB01CC01CD01CE01CF01D001D101D201D301D401D501D601D701D801D9 -01DA01DB01DC01DD01DE01DF01E001E101E201E301E401E501E601E701E801E901EA01EB -01EC01ED01EE01EF01F001F101F201F301F401F501F601F701F801F901FA01FB01FC01FD -01FE01FF0200020102020203020402050206020702080209020A020B020C020D020E020F -0210021102120213021402150216021702180219021A021B021C021D021E021F02200221 -02220223022402250226022702280229022A022B022C022D022E022F0230023102320233 -023402350236023702380239023A023B023C023D023E023F024002410242024302440245 -0246024702480249024A024B024C024D024E024F02500251025202530254025502560257 -02580259025A025B025C025D025E025F0260026102620263026402650266026702680269 -026A026B026C026D026E026F0270027102720273027402750276027702780279027A027B -027C027D027E027F0280028102820283028402850286028702880289028A028B028C028D -028E028F0290029102920293029402950296029702980299029A029B029C029D029E029F -02A002A102A202A302A402A502A602A702A802A902AA02AB02AC02AD02AE02AF02B002B1 -02B202B302B402B502B602B702B802B902BA02BB02BC02BD02BE02BF02C002C102C202C3 -02C402C502C602C702C802C902CA02CB02CC02CD02CE02CF02D002D102D202D302D402D5 -02D602D702D802D902DA02DB02DC02DD02DE02DF02E002E102E202E302E402E502E602E7 -02E802E902EA02EB02EC02ED02EE02EF02F002F102F202F302F402F502F602F702F802F9 -02FA02FB02FC02FD02FE02FF0300030103020303030403050306030703080309030A030B -030C030D030E030F0310031103120313031403150316031703180319031A031B031C031D -031E031F0320032103220323032403250326032703280329032A032B032C032D032E032F -0330033103320333033403350336033703380339033A033B033C033D033E033F03400341 -03420343034403450346034703480349034A034B034C034D034E034F0350035103520353 -035403550356035703580359035A035B035C035D035E035F036003610362036303640365 -0366036703680369036A036B036C036D036E036F03700371037203730374037503760377 -03780379037A037B037C037D037E037F0380038103820383038403850386038703880389 -038A038B038C038D038E038F0390039103920393039403950396039703980399039A039B -039C039D039E039F03A003A103A203A303A403A503A603A703A803A903AA03AB03AC03AD -03AE03AF03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF -03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE03CF03D003D1 -03D203D303D403D503D603D703D803D903DA03DB03DC03DD03DE03DF03E003E103E203E3 -03E403E503E603E703E803E903EA03EB03EC03ED03EE03EF03F003F103F203F303F403F5 -03F603F703F803F903FA03FB03FC03FD03FE03FF04000401040204030404040504060407 -04080409040A040B040C040D040E040F0410041104120413041404150416041704180419 -041A041B041C041D041E041F0420042104220423042404250426042704280429042A042B -042C042D042E042F0430043104320433043404350436043704380439043A043B043C043D -043E043F0440044104420443044404450446044704480449044A044B044C044D044E044F -0450045104520453045404550456045704580459045A045B045C045D045E045F04600461 -04620463046404650466046704680469046A046B046C046D046E046F0470047104720473 -047404750476047704780479047A047B047C047D052E6E756C6C106E6F6E6D61726B696E -6772657475726E057370616365066578636C616D0871756F746564626C0A6E756D626572 -7369676E06646F6C6C61720770657263656E7409616D70657273616E640B71756F746573 -696E676C6509706172656E6C6566740A706172656E726967687408617374657269736B04 -706C757305636F6D6D610668797068656E06706572696F6405736C617368047A65726F03 -6F6E650374776F05746872656504666F757204666976650373697805736576656E056569 -676874046E696E6505636F6C6F6E0973656D69636F6C6F6E046C65737305657175616C07 -67726561746572087175657374696F6E0261740141014201430144014501460147014801 -49014A014B014C014D014E014F0150015101520153015401550156015701580159015A0B -627261636B65746C656674096261636B736C6173680C627261636B657472696768740B61 -7363696963697263756D0A756E64657273636F7265056772617665016101620163016401 -650166016701680169016A016B016C016D016E016F017001710172017301740175017601 -7701780179017A0962726163656C656674036261720A627261636572696768740A617363 -696974696C646509416469657265736973054172696E670843636564696C6C6106456163 -757465064E74696C6465094F646965726573697309556469657265736973066161637574 -65066167726176650B6163697263756D666C657809616469657265736973066174696C64 -65056172696E670863636564696C6C6106656163757465066567726176650B6563697263 -756D666C65780965646965726573697306696163757465066967726176650B6963697263 -756D666C657809696469657265736973066E74696C6465066F6163757465066F67726176 -650B6F63697263756D666C6578096F6469657265736973066F74696C6465067561637574 -65067567726176650B7563697263756D666C657809756469657265736973066461676765 -72066465677265650463656E7408737465726C696E670773656374696F6E0662756C6C65 -74097061726167726170680A6765726D616E64626C730A7265676973746572656409636F -707972696768740974726164656D61726B056163757465086469657265736973086E6F74 -657175616C024145064F736C61736808696E66696E69747909706C75736D696E7573096C -657373657175616C0C67726561746572657175616C0379656E036D75310B706172746961 -6C646966660973756D6D6174696F6E0770726F647563740370693108696E74656772616C -0B6F726466656D696E696E650C6F72646D617363756C696E65034F686D026165066F736C -6173680C7175657374696F6E646F776E0A6578636C616D646F776E0A6C6F676963616C6E -6F74077261646963616C06666C6F72696E0B617070726F78657175616C09696E6372656D -656E740D6775696C6C656D6F746C6566740E6775696C6C656D6F74726967687408656C6C -697073697306416772617665064174696C6465064F74696C6465024F45026F6506656E64 -61736806656D646173680C71756F746564626C6C6566740D71756F746564626C72696768 -740971756F74656C6566740A71756F7465726967687406646976696465076C6F7A656E67 -650979646965726573697309596469657265736973086672616374696F6E044575726F0D -6775696C73696E676C6C6566740E6775696C73696E676C726967687402666902666C0964 -616767657264626C0E706572696F6463656E74657265640E71756F746573696E676C6261 -73650C71756F746564626C626173650B70657274686F7573616E640B4163697263756D66 -6C65780B4563697263756D666C6578064161637574650945646965726573697306456772 -617665064961637574650B4963697263756D666C65780949646965726573697306496772 -617665064F61637574650B4F63697263756D666C6578064F677261766506556163757465 -0B5563697263756D666C65780655677261766508646F746C657373690A63697263756D66 -6C65780574696C6465066D6163726F6E05627265766509646F74616363656E740472696E -6707636564696C6C610C68756E676172756D6C617574066F676F6E656B056361726F6E06 -4C736C617368066C736C61736806536361726F6E06736361726F6E065A6361726F6E067A -6361726F6E0962726F6B656E626172034574680365746806596163757465067961637574 -650554686F726E0574686F726E056D696E7573086D756C7469706C790B6F6E6573757065 -72696F720B74776F7375706572696F720D74687265657375706572696F72076F6E656861 -6C660A6F6E65717561727465720D74687265657175617274657273056672616E63064762 -72657665066762726576650449646F740853636564696C6C610873636564696C6C610643 -61637574650663616375746506436361726F6E06636361726F6E07646D6163726F6E096F -76657273636F7265066D6964646F74064162726576650661627265766507416F676F6E65 -6B07616F676F6E656B06446361726F6E06646361726F6E0644736C61736807456F676F6E -656B07656F676F6E656B06456361726F6E06656361726F6E064C6163757465066C616375 -7465064C6361726F6E066C6361726F6E044C646F74046C646F74064E6163757465066E61 -63757465064E6361726F6E066E6361726F6E094F64626C6163757465096F64626C616375 -7465065261637574650672616375746506526361726F6E06726361726F6E065361637574 -65067361637574650854636564696C6C610874636564696C6C6106546361726F6E067463 -61726F6E055572696E67057572696E67095564626C6163757465097564626C6163757465 -065A6163757465067A6163757465045A646F74047A646F740547616D6D61055468657461 -0350686905616C7068610564656C746107657073696C6F6E057369676D61037461750370 -68690D756E64657273636F726564626C096578636C616D64626C096E7375706572696F72 -0670657365746102494A02696A0B6E61706F7374726F706865066D696E75746506736563 -6F6E64096166696936313234380961666969363132383906483232303733064831383534 -3306483138353531064831383533330A6F70656E62756C6C657407416D6163726F6E0761 -6D6163726F6E0B4363697263756D666C65780B6363697263756D666C65780443646F7404 -63646F7407456D6163726F6E07656D6163726F6E06456272657665066562726576650445 -646F740465646F740B4763697263756D666C65780B6763697263756D666C65780447646F -740467646F740847636564696C6C610867636564696C6C610B4863697263756D666C6578 -0B6863697263756D666C657804486261720468626172064974696C6465066974696C6465 -07496D6163726F6E07696D6163726F6E064962726576650669627265766507496F676F6E -656B07696F676F6E656B0B4A63697263756D666C65780B6A63697263756D666C6578084B -636564696C6C61086B636564696C6C610C6B677265656E6C616E646963084C636564696C -6C61086C636564696C6C61084E636564696C6C61086E636564696C6C6103456E6703656E -67074F6D6163726F6E076F6D6163726F6E064F6272657665066F62726576650852636564 -696C6C610872636564696C6C610B5363697263756D666C65780B7363697263756D666C65 -7804546261720474626172065574696C6465067574696C646507556D6163726F6E07756D -6163726F6E065562726576650675627265766507556F676F6E656B07756F676F6E656B0B -5763697263756D666C65780B7763697263756D666C65780B5963697263756D666C65780B -7963697263756D666C6578056C6F6E67730A4172696E6761637574650A6172696E676163 -757465074145616375746507616561637574650B4F736C61736861637574650B6F736C61 -7368616375746509616E6F74656C65696106576772617665067767726176650657616375 -746506776163757465095764696572657369730977646965726573697306596772617665 -067967726176650D71756F74657265766572736564097261646963616C65780961666969 -303839343109657374696D61746564096F6E656569676874680C74687265656569676874 -68730B66697665656967687468730C736576656E656967687468730B636F6D6D61616363 -656E7410756E646572636F6D6D61616363656E7405746F6E6F730D646965726573697374 -6F6E6F730A416C706861746F6E6F730C457073696C6F6E746F6E6F7308457461746F6E6F -7309496F7461746F6E6F730C4F6D6963726F6E746F6E6F730C557073696C6F6E746F6E6F -730A4F6D656761746F6E6F7311696F74616469657265736973746F6E6F7305416C706861 -04426574610544656C746107457073696C6F6E045A6574610345746104496F7461054B61 -707061064C616D626461024D75024E75025869074F6D6963726F6E0250690352686F0553 -69676D610354617507557073696C6F6E0343686903507369054F6D6567610C496F746164 -696572657369730F557073696C6F6E64696572657369730A616C706861746F6E6F730C65 -7073696C6F6E746F6E6F7308657461746F6E6F7309696F7461746F6E6F7314757073696C -6F6E6469657265736973746F6E6F7304626574610567616D6D61047A6574610365746105 -746865746104696F7461056B61707061066C616D626461026D75026E75027869076F6D69 -63726F6E0372686F067369676D613107757073696C6F6E0363686903707369056F6D6567 -610C696F746164696572657369730F757073696C6F6E64696572657369730C6F6D696372 -6F6E746F6E6F730C757073696C6F6E746F6E6F730A6F6D656761746F6E6F730961666969 -313030323309616669693130303531096166696931303035320961666969313030353309 -616669693130303534096166696931303035350961666969313030353609616669693130 -303537096166696931303035380961666969313030353909616669693130303630096166 -696931303036310961666969313030363209616669693130313435096166696931303031 -370961666969313030313809616669693130303139096166696931303032300961666969 -313030323109616669693130303232096166696931303032340961666969313030323509 -616669693130303236096166696931303032370961666969313030323809616669693130 -303239096166696931303033300961666969313030333109616669693130303332096166 -696931303033330961666969313030333409616669693130303335096166696931303033 -360961666969313030333709616669693130303338096166696931303033390961666969 -313030343009616669693130303431096166696931303034320961666969313030343309 -616669693130303434096166696931303034350961666969313030343609616669693130 -303437096166696931303034380961666969313030343909616669693130303635096166 -696931303036360961666969313030363709616669693130303638096166696931303036 -390961666969313030373009616669693130303732096166696931303037330961666969 -313030373409616669693130303735096166696931303037360961666969313030373709 -616669693130303738096166696931303037390961666969313030383009616669693130 -303831096166696931303038320961666969313030383309616669693130303834096166 -696931303038350961666969313030383609616669693130303837096166696931303038 -380961666969313030383909616669693130303930096166696931303039310961666969 -313030393209616669693130303933096166696931303039340961666969313030393509 -616669693130303936096166696931303039370961666969313030373109616669693130 -303939096166696931303130300961666969313031303109616669693130313032096166 -696931303130330961666969313031303409616669693130313035096166696931303130 -360961666969313031303709616669693130313038096166696931303130390961666969 -313031313009616669693130313933096166696931303035300961666969313030393809 -616669693030323038096166696936313335320270690C6F6E656E756D657261746F720C -74776F6E756D657261746F720E74687265656E756D657261746F720D666F75726E756D65 -7261746F720D666976656E756D657261746F720E736576656E6E756D657261746F720E65 -696768746E756D657261746F7210446F6E74436F6D707265737348544D5808676C797068 -35373908676C79706835383008676C797068353831054F686F726E056F686F726E055568 -6F726E0575686F726E0D686F6F6B61626F7665636F6D620C646F7462656C6F77636F6D62 -096772617665636F6D62096163757465636F6D6208676C79706835393008676C79706835 -393108676C79706835393208676C79706835393308676C79706835393408676C79706835 -393508676C79706835393608676C79706835393708676C79706835393808676C79706835 -393908676C79706836303008676C79706836303108676C79706836303208676C79706836 -303308676C7970683630340941646F7462656C6F770961646F7462656C6F770A41686F6F -6B61626F76650A61686F6F6B61626F7665104163697263756D666C657861637574651061 -63697263756D666C65786163757465104163697263756D666C6578677261766510616369 -7263756D666C65786772617665144163697263756D666C6578686F6F6B61626F76651461 -63697263756D666C6578686F6F6B61626F7665104163697263756D666C657874696C6465 -106163697263756D666C657874696C6465134163697263756D666C6578646F7462656C6F -77136163697263756D666C6578646F7462656C6F770B41627265766561637574650B6162 -7265766561637574650B41627265766567726176650B61627265766567726176650F4162 -72657665686F6F6B61626F76650F616272657665686F6F6B61626F76650B416272657665 -74696C64650B61627265766574696C64650E416272657665646F7462656C6F770E616272 -657665646F7462656C6F770945646F7462656C6F770965646F7462656C6F770A45686F6F -6B61626F76650A65686F6F6B61626F7665064574696C6465066574696C64651045636972 -63756D666C65786163757465106563697263756D666C6578616375746510456369726375 -6D666C65786772617665106563697263756D666C65786772617665144563697263756D66 -6C6578686F6F6B61626F7665146563697263756D666C6578686F6F6B61626F7665104563 -697263756D666C657874696C6465106563697263756D666C657874696C64651345636972 -63756D666C6578646F7462656C6F77136563697263756D666C6578646F7462656C6F770A -49686F6F6B61626F76650A69686F6F6B61626F76650949646F7462656C6F770969646F74 -62656C6F7708676C79706836343908676C79706836353008676C79706836353108676C79 -70683635320573686576610A68617461667365676F6C0A686174616670617461680B6861 -74616671616D617473056869726971057473657265057365676F6C057061746168067161 -6D61747305686F6C616D0671756275747306646167657368056D65746567056D61716166 -0472616665057061736571077368696E646F740673696E646F7408736F66706173757104 -616C6566036265740567696D656C0564616C657402686503766176057A6179696E036865 -740374657403796F640866696E616C6B6166036B6166056C616D65640866696E616C6D65 -6D036D656D0866696E616C6E756E036E756E0673616D656B68046179696E0766696E616C -70650270650A66696E616C747361646905747361646903716F660472657368047368696E -0374617609646F75626C6576617606766176796F6409646F75626C65796F640667657265 -73680967657273686179696D0D6E657773686571656C7369676E0A7661767368696E646F -740D66696E616C6B616673686576610E66696E616C6B616671616D6174730A6C616D6564 -686F6C616D106C616D6564686F6C616D64616765736807616C746179696E0B7368696E73 -68696E646F740A7368696E73696E646F74117368696E6461676573687368696E646F7410 -7368696E64616765736873696E646F7409616C656670617461680A616C656671616D6174 -7309616C65666D61706971096265746461676573680B67696D656C6461676573680B6461 -6C6574646167657368086865646167657368097661766461676573680B7A6179696E6461 -676573680974657464616765736809796F646461676573680E66696E616C6B6166646167 -657368096B61666461676573680B6C616D6564646167657368096D656D64616765736809 -6E756E6461676573680C73616D656B686461676573680D66696E616C7065646167657368 -0870656461676573680B747361646964616765736809716F666461676573680A72657368 -6461676573680A7368696E64616765736808746176646167657308766176686F6C616D07 -62657472616665076B6166726166650670657261666509616C65666C616D6564127A6572 -6F77696474686E6F6E6A6F696E65720F7A65726F77696474686A6F696E65720F6C656674 -746F72696768746D61726B0F7269676874746F6C6566746D61726B096166696935373338 -380961666969353734303309616669693537343037096166696935373430390961666969 -353734343009616669693537343531096166696935373435320961666969353734353309 -616669693537343534096166696935373435350961666969353734353609616669693537 -343537096166696935373435380961666969353733393209616669693537333933096166 -696935373339340961666969353733393509616669693537333936096166696935373339 -370961666969353733393809616669693537333939096166696935373430300961666969 -353734303109616669693537333831096166696935373436310961666969363331363709 -616669693537343539096166696935373534330961666969353735333409616669693537 -343934096166696936323834330961666969363238343409616669693632383435096166 -696936343234300961666969363432343109616669693633393534096166696935373338 -320961666969363432343209616669693632383831096166696935373530340961666969 -353733363909616669693537333730096166696935373337310961666969353733373209 -616669693537333733096166696935373337340961666969353733373509616669693537 -333931096166696935373437310961666969353734363009616669693532323538096166 -696935373530360961666969363239353809616669693632393536096166696935323935 -370961666969353735303509616669693632383839096166696936323838370961666969 -363238383809616669693537353037096166696936323936310961666969363239353909 -616669693632393630096166696935373530380961666969363239363209616669693537 -353637096166696936323936340961666969353233303509616669693532333036096166 -696935373530390961666969363239363709616669693632393635096166696936323936 -360961666969353735353509616669693532333634096166696936333735330961666969 -363337353409616669693633373539096166696936333736330961666969363337393509 -616669693632383931096166696936333830380961666969363239333809616669693633 -383130096166696936323934320961666969363239343709616669693633383133096166 -696936333832330961666969363338323409616669693633383333096166696936333834 -340961666969363238383209616669693632383833096166696936323838340961666969 -363238383509616669693632383836094F646F7462656C6F77096F646F7462656C6F770A -4F686F6F6B61626F76650A6F686F6F6B61626F7665104F63697263756D666C6578616375 -7465106F63697263756D666C65786163757465104F63697263756D666C65786772617665 -106F63697263756D666C65786772617665144F63697263756D666C6578686F6F6B61626F -7665146F63697263756D666C6578686F6F6B61626F7665104F63697263756D666C657874 -696C6465106F63697263756D666C657874696C6465134F63697263756D666C6578646F74 -62656C6F77136F63697263756D666C6578646F7462656C6F770A4F686F726E6163757465 -0A6F686F726E61637574650A4F686F726E67726176650A6F686F726E67726176650E4F68 -6F726E686F6F6B61626F76650E6F686F726E686F6F6B61626F76650A4F686F726E74696C -64650A6F686F726E74696C64650D4F686F726E646F7462656C6F770D6F686F726E646F74 -62656C6F770955646F7462656C6F770975646F7462656C6F770A55686F6F6B61626F7665> -<0A75686F6F6B61626F76650A55686F726E61637574650A75686F726E61637574650A5568 -6F726E67726176650A75686F726E67726176650E55686F726E686F6F6B61626F76650E75 -686F726E686F6F6B61626F76650A55686F726E74696C64650A75686F726E74696C64650D -55686F726E646F7462656C6F770D75686F726E646F7462656C6F7708676C797068383832 -08676C7970683838330959646F7462656C6F770979646F7462656C6F770A59686F6F6B61 -626F76650A79686F6F6B61626F7665065974696C6465067974696C646504646F6E670974 -696C6465636F6D620863757272656E63790000000000000100000C92000102160C000009 -0084000400B4FF9C000400B6FF9C000A0024FF9C000A0090FF9C000F00B4FF2E000F00B6 -FF2E00100024FFCE0010002CFFE20010002DFF9C00100036FFEC00100037FF6A00100039 -FFCE0010003AFFCE0010003BFFB00010003CFF740010003DFFE200100044FFEC00100059 -FFD80010005AFFEC0010005BFFCE0010005CFFD80010005DFFD800100090FFCE001000A0 -FFEC0011000FFF7E00110010FF60001100B1FF88001100B2FF88001100B4FF2E001100B6 -FF2E001D00B2FF7400240010FFCE00240036FFF600240037FF8800240038FFF600240039 -FFC40024003AFFCE0024003CFFB000240057FFEC00240058FFF600240059FFCE0024005A -FFE20024005CFFCE002400B1FFCE002400B2FFCE002400B3FFCE002400B4FF88002400B5 -FFCE002400B6FF880025000FFFEC00250010000A00250011FFEC00250037FFC4002500AB -FFEC002500B1000A002500B2000A00260010FFCE002600AFFFE7002600B1FFCE002600B2 -FFCE0027000FFFCE00270011FFCE00270037FFCE0027003AFFEC0027003BFFF60027003C -FFEC0027003DFFEC002700ABFFCE0029000FFED400290011FED40029001DFFC40029001E -FFC400290022003C00290024FF9C00290037001E00290044FF9C00290048FFCE00290052 -FFCE00290090FF92002900A0FF9C002900A1FFCE002900ABFED4002900B0FFCE002C0010 -FFE2002C00B1FFE2002C00B2FFE2002D000FFFEC002D0011FFEC002D0024FFF6002D0090 -FFF6002D00ABFFEC002E0010FF92002E0032FFEC002E0044FFC4002E0048FFBA002E0052 -FFBA002E0058FFCE002E0059FFB0002E005AFFBA002E005CFFB0002E0091FFEC002E00A0 -FFC4002E00A1FFBA002E00AFFFEC002E00B0FFBA002E00B1FF92002E00B2FF92002F000A -FF88002F0010FF60002F0026FFEC002F002AFFEC002F002D0064002F0032FFEC002F0037 -FF56002F0039FF92002F003AFF9C002F003CFF60002F0059FF92002F005CFF92002F0064 -FFEC002F0091FFEC002F00AFFFEC002F00B1FF60002F00B2FF60002F00B4FF60002F00B6 -FF600032000FFFE200320011FFE200320037FFCE0032003BFFF60032003CFFEC0032003D -FFEC003200ABFFE20033000FFED400330011FED400330024FFCE0033003C001400330044 -FFCE00330048FFCE00330052FFCE00330090FFBA003300A0FFCE003300A1FFCE003300AB -FED4003300B0FFCE0034000FFFE200340011FFE2003400ABFFE200350010FF9C00350037 -FFC40035003CFFEC00350044FFD800350048FFCE00350052FFCE00350058FFEC0035005C -FFC9003500A0FFCE003500A1FFCE003500B0FFC4003500B1FF9C003500B2FF9C003500B4 -FFBA003500B6FFBA0036000FFFEC00360011FFEC00360024FFEC00360036FFEA00360059 -FFE20036005AFFEC0036005CFFE200360090FFEC003600ABFFEC0037000FFEDE00370010 -FF6A00370011FEDE0037001DFF380037001EFF3800370022003C00370024FF8800370026 -FFD80037002AFFD800370032FFCE00370036FFF400370037FFBA00370044FF1000370046 -FF2400370048FF240037004AFF2E00370052FF2400370055FF3800370056FF4C00370058 -FF3800370059FF380037005AFF380037005CFF380037005DFF5600370064FFD800370090 -FF7E00370091FFCE003700A0FF10003700A1FF24003700ABFEDE003700AFFFCE003700B0 -FF24003700B1FF6A003700B2FF6A0038000FFFEC00380011FFEC00380024FFF600380090 -FFEC003800ABFFEC0039000FFEDE00390010FFCE00390011FEDE0039001DFFB00039001E -FFB000390024FFC400390044FF9C00390048FF9C00390052FF9C00390058FFC40039005C -FFBF00390090FFBA003900A0FF9C003900A1FF9C003900ABFEDE003900B0FF9C003900B1 -FFCE003900B2FFCE003A000FFEDE003A0010FFCE003A0011FF24003A001DFFB0003A001E -FFB0003A0024FFCE003A0044FF9C003A0048FF9C003A0052FF9C003A0055FFC4003A0058 -FFC4003A005CFFBF003A0090FFC4003A00A0FF9C003A00A1FF9C003A00ABFF24003A00B0 -FF9C003A00B1FFCE003A00B2FFCE003B0010FFB0003B0026FFF6003B002AFFF6003B0032 -FFF6003B0044FFCE003B0048FFC4003B0052FFC4003B0058FFE2003B005CFFB0003B0064 -FFF6003B0091FFF6003B00A0FFCE003B00A1FFC4003B00AFFFF6003B00B0FFC4003B00B1 -FFB0003B00B2FFB0003C000FFEDE003C0010FF74003C0011FEDE003C001DFF38003C001E -FF38003C0024FFB0003C0032FFEC003C0044FF74003C0047FF88003C0048FF7E003C004A -FF7E003C0050FF9C003C0051FF9C003C0052FF7E003C0053FF9C003C0054FF7E003C0055 -FF9C003C0056FF92003C0058FF92003C0059FF9C003C0090FFB0003C0091FFEC003C00A0 -FF74003C00A1FF7E003C00ABFEDE003C00AFFFEC003C00B0FF7E003C00B1FF74003C00B2 -FF74003D0010FFC4003D0026FFEC003D002AFFEC003D0032FFEC003D003DFFF6003D0044 -FFCE003D0048FFC4003D0052FFC4003D005AFFD8003D005CFFBF003D0064FFEC003D0091 -FFEC003D00A0FFCE003D00A1FFC4003D00AFFFEC003D00B0FFC4003D00B1FFCE003D00B2 -FFCE00440059FFF00044005AFFF60044005CFFF00045000FFFE200450011FFEC0045005C -FFFB004500ABFFEC00460010FFEC00460037FFC4004600B1FFEC004600B2FFEC00480037 -FF7400490005003C0049000A003C0049000C00640049000D00320049000FFF7E00490010 -FFCE00490011FF8800490022006E0049003F00640049004000640049005CFFF600490060 -0064004900ABFF88004900B1FFCE004900B2FFCE004900B40032004900B60032004B0059 -FFEC004B005AFFF6004B005CFFEC004E0010FF9C004E0048FFEC004E0052FFEC004E00A1 -FFEC004E00B0FFEC004E00B1FF9C004E00B2FF9C00500059FFEC0050005AFFF60050005C -FFEC00510059FFEC0051005AFFF60051005CFFEC0052000FFFE200520011FFEC00520059 -FFF10052005BFFEC0052005CFFF1005200ABFFEC0053000FFFE200530011FFEC0053005C -FFFB005300ABFFEC0055000FFEDE00550010FFEC00550011FEDE00550044FFDC005500A0 -FFD8005500ABFEDE005500B1FFEC005500B2FFEC005500B4001E005500B6001E00570010 -FFD80057005CFFF6005700B1FFD8005700B2FFD8005700B40014005700B600140059000F -FF4C00590010FFD800590011FF4C00590044FFD800590048FFEE00590052FFEE005900A0 -FFD8005900A1FFEE005900ABFF4C005900B0FFF1005900B1FFD8005900B2FFD8005A000F -FFBA005A0010FFEC005A0011FFBA005A0044FFEC005A00A0FFEC005A00ABFFBA005A00B1 -FFEC005A00B2FFEC005B0010FFCE005B0046FFEC005B0047FFF6005B0048FFE8005B004A -FFF6005B0052FFE8005B006FFFEC005B00A1FFE8005B00B0FFEC005B00B1FFCE005B00B2 -FFCE005C000FFF42005C0010FFD8005C0011FF42005C0044FFD8005C0046FFEE005C0047 -FFF6005C0048FFEE005C004AFFF6005C0052FFEE005C0054FFF6005C006FFFEE005C00A0 -FFD8005C00A1FFEE005C00ABFF4C005C00B0FFF1005C00B1FFD8005C00B2FFD8005D0010 -FFEC005D0046FFF6005D0047FFF6005D0048FFF4005D004AFFF6005D0052FFF4005D0054 -FFF6005D006FFFF6005D00A1FFF4005D00B1FFEC005D00B2FFEC00640010FFCE006400AF -FFE7006400B1FFCE006400B2FFCE006F0010FFEC006F00B1FFEC006F00B2FFEC0091000F -FFE200910011FFE200910037FFCE0091003BFFF60091003CFFEC0091003DFFEC009100AB -FFE200A1000FFFE200A10011FFEC00A10059FFF100A1005BFFEC00A1005CFFF100A100AB -FFEC00AB00B4FF2E00AB00B6FF2E00B10024FFCE00B1002CFFE200B1002DFF9C00B10036 -FFEC00B10037FF6A00B10039FFCE00B1003AFFCE00B1003BFFB000B1003CFF7400B1003D -FFF600B10044FFEC00B10059FFD800B1005AFFEC00B1005BFFCE00B1005CFFD800B1005D -FFD800B10090FFCE00B100A0FFEC00B20024FFCE00B2002CFFE200B2002DFF9C00B20036 -FFEC00B20037FF6A00B20039FFCE00B2003AFFCE00B2003BFFB000B2003CFF7400B2003D -FFF600B20044FFEC00B20059FFD800B2005AFFEC00B2005BFFCE00B2005CFFD800B2005D -FFD800B20090FFCE00B200A0FFEC00B30024FF9C00B30090FF9C00B4000FFF2E00B40011 -FF2E00B40024FF9C00B40037006E00B40039006400B4003A003C00B4003C006E00B40056 -FFBA00B40057002800B40090FF9C00B400ABFF2E00B50024FF9C00B50090FF9C00B6000F -FF2E00B60011FF2E00B60024FF9C00B60037006E00B60039006400B6003A003C00B6003C -006E00B60056FFBA00B60057002800B60090FF9C00B600ABFF2E00C30037FF2E00C30039 -FF2E00C3003AFF9C00C3003CFF2E00C40037FF2E00C40039FF2E00C4003AFF9C00C4003C -FF2E0000000000010001000100000001000013FF0000001400000000000013F7308213F3 -06092A864886F70D010702A08213E4308213E0020101310E300C06082A864886F70D0205 -05003060060A2B060104018237020104A0523050302C060A2B06010401823702011CA21E -801C003C003C003C004F00620073006F006C006500740065003E003E003E3020300C0608 -2A864886F70D020505000410503EEC935CE1D8D33511E69A791E4594A0820F3F308202C0 -3082022902141389B4D18AE8A7C4BD35C79B8D88CA1FCA535691300D06092A864886F70D -010104050030819E311F301D060355040A1316566572695369676E205472757374204E65 -74776F726B31173015060355040B130E566572695369676E2C20496E632E312C302A0603 -55040B1323566572695369676E2054696D65205374616D70696E67205365727669636520 -526F6F7431343032060355040B132B4E4F204C494142494C495459204143434550544544 -2C20286329393720566572695369676E2C20496E632E301E170D39373035313230373030 -30305A170D3939313233313037303030305A30819E311F301D060355040A131656657269 -5369676E205472757374204E6574776F726B31173015060355040B130E56657269536967 -6E2C20496E632E312C302A060355040B1323566572695369676E2054696D65205374616D -70696E67205365727669636520526F6F7431343032060355040B132B4E4F204C49414249 -4C4954592041434345505445442C20286329393720566572695369676E2C20496E632E30 -819F300D06092A864886F70D010101050003818D0030818902818100D32E20F0687C2C2D -2E811CB106B2A70BB7110D57DA53D875E3C9332AB2D4F6095B34F3E990FE090CD0DB1B5A -B9CDE7F688B19DC08725EB7D5810736A78CB7115FDC658F629AB585E9604FD2D62115881 -1CCA7194D522582FD5CC14058436BA94AAB44D4AE9EE3B22AD56997E219C6C86C04A4797 -6AB4A636D5FC092DD3B4399B0203010001300D06092A864886F70D010104050003818100 -3A119C85053ED2E980FB7BD5A9F4AC79FC05FC953D7123A92B28DF8C136589FE2C87018F -5A9A62CA11A780F4B7BE14B7D156996B086245C6A2A5DA357F0522DE722D048605A77C09 -16931443F0F7164DD6078E9B106C58FE0A3597CA899FDF04709C2A7D618EC1E80B719AA8 -C76662423D959422329822898AFA640824F5D2FA308202CD30820236021500BD119ADA43 -ED21FB46588489CA46889025EE1460300D06092A864886F70D010104050030819E311F30 -1D060355040A1316566572695369676E205472757374204E6574776F726B311730150603 -55040B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369 -676E2054696D65205374616D70696E67205365727669636520526F6F7431343032060355 -040B132B4E4F204C494142494C4954592041434345505445442C20286329393720566572 -695369676E2C20496E632E301E170D3937303531323037303030305A170D393931323331 -3037303030305A3081AC31273025060355040B131E566572695369676E2054696D652053 -74616D70696E672053657276696365311F301D060355040B1316566572695369676E2054 -72757374204E6574776F726B31343032060355040B132B4E4F204C494142494C49545920 -41434345505445442C20286329393720566572695369676E2C20496E632E311730150603 -55040A130E566572695369676E2C20496E632E3111300F06035504071308496E7465726E -657430819D300D06092A864886F70D010101050003818B0030818702818100AB61EDB4AD -8D904790DCB4115E69DC0A7F62900631CDCEFF889146D7493A94E9D4063F9DADA2785AEC -F9FC63454FB80B6E30EFA236AB2D09DFF16F27AB0D516005354F7FCE544FD0B72C42D80B -D08DB85EFFB680D0E396B47F224942106CD398B00156A3C3CF2E9F3AF47FA858A6D72265 -E58CAB789CBCD94742685B2D7DFDB5020103300D06092A864886F70D0101040500038181 -006D60FB995FA469B3D37B702B62231E442051AF2315C77402F949F2271A5CAC86713508 -2BF68FDEE0B596E88BA74BE373C848099DB0DA8BDA1592CA03E509255606E74EA447A5D1 -5746D43856F521CDC3263B2D2532CE9BE2BF4047EAD86D4776E5C030A30F80CE7FD83B7E -A0F9952A312B15FAC814EDDDB0E9554170462D2C7E308209A63082090FA0030201020210 -7966966E83B0D0B601126E9DC0B46571300D06092A864886F70D01010205003061311130 -0F06035504071308496E7465726E657431173015060355040A130E566572695369676E2C -20496E632E31333031060355040B132A566572695369676E20436F6D6D65726369616C20 -536F667477617265205075626C697368657273204341301E170D39383034313630303030 -30305A170D3939303431363233353935395A3082015D3111300F06035504071308496E74 -65726E657431173015060355040A130E566572695369676E2C20496E632E313330310603 -55040B132A566572695369676E20436F6D6D65726369616C20536F667477617265205075 -626C69736865727320434131463044060355040B133D7777772E766572697369676E2E63 -6F6D2F7265706F7369746F72792F43505320496E636F72702E206279205265662E2C4C49 -41422E4C54442863293936313E303C060355040B13354469676974616C20494420436C61 -73732033202D204D6963726F736F667420536F6674776172652056616C69646174696F6E -207632310B3009060355040613025553311330110603550408130A57617368696E67746F -6E3110300E060355040713075265646D6F6E64311E301C060355040314154D6963726F73 -6F667420436F72706F726174696F6E311E301C060355040B14154D6963726F736F667420 -436F72706F726174696F6E30820120300D06092A864886F70D01010105000382010D0030 -8201080282010100B490D226A864E6EB15C3FF6D7B414F0AF96F2A71CE2E1853A63236E0 -D468E135FD4912D896FC65CF531420BE04C97AF5C9706D94ECCCB3AF2A309A32587CB6A9 -6B256799C0E277EA05E5EFE396F7AD0B19A6AE3C8470E2F86F5C4F7D6F0F52458A15D765 -DC3B2005E33DA16C973A0E0B2513ED21CB208E397A628305C9231AFC529DAC9D4C96D73C -4E583D827BEE093556B568C04245A23B31A3FBD895FB55C72CA8A3C3294FCEF493F0031F -7BF1153AA9F8AA5083056D62F08B138838D9E31C0E73C10640BA28C3EBCD9271C7BE66B2 -A15422D60B677CF8877989AC660AAA51FAFD7221FC865DC6F44A0EEC5861234DD0B13A64 -E0139E5EC8856D4C16AF3D07020103A38205DD308205D930090603551D1304023000300B -0603551D0F0404030205A03081880603551D01048180307E80107B96E4D143FD6898F338 -CC6E3BF20B82A16330613111300F06035504071308496E7465726E657431173015060355 -040A130E566572695369676E2C20496E632E31333031060355040B132A56657269536967 -6E20436F6D6D65726369616C20536F667477617265205075626C69736865727320434182 -0502B400000130210603551D040101FF04173014300E300C060A2B060104018237020116 -0302078000300D0603551D0A040630040302064030820436060A2B06010401823702010A -0101FF048204233082041FA029802768747470733A2F2F7777772E766572697369676E2E -636F6D2F7265706F7369746F72792F435053A18203B8818203B454686973206365727469 -66696361746520696E636F72706F7261746573206279207265666572656E63652C20616E -642069747320757365206973207374726963746C790A7375626A65637420746F2C207468 -6520566572695369676E2043657274696669636174696F6E205072616374696365205374 -6174656D656E742028435053290A76657273696F6E20312E302C20617661696C61626C65 -20696E2074686520566572695369676E207265706F7369746F72792061743A0A68747470 -733A2F2F7777772E766572697369676E2E636F6D3B20627920452D6D61696C2061742043 -50532D726571756573747340766572697369676E2E636F6D3B206F720A6279206D61696C -20617420566572695369676E2C20496E632E2C203235393320436F617374204176652E2C -204D6F756E7461696E20566965772C2043412039343034330A55534120436F7079726967 -6874202863293139393620566572695369676E2C20496E632E2020416C6C205269676874 -732052657365727665642E204345525441494E0A57415252414E5449455320444953434C -41494D454420414E44204C494142494C495459204C494D495445442E0A0A5741524E494E -473A2054484520555345204F462054484953204345525449464943415445204953205354 -524943544C59205355424A45435420544F205448450A564552495349474E204345525449 -4649434154494F4E2050524143544943452053544154454D454E542E2020544845204953 -5355494E4720415554484F524954590A444953434C41494D53204345525441494E20494D -504C49454420414E4420455850524553532057415252414E544945532C20494E434C5544 -494E472057415252414E544945530A4F46204D45524348414E544142494C495459204F52 -204649544E45535320464F52204120504152544943554C415220505552504F53452C2041 -4E442057494C4C204E4F540A4245204C4941424C4520464F5220434F4E53455155454E54 -49414C2C2050554E49544956452C20414E44204345525441494E204F544845522044414D -414745532E205345450A5448452043505320464F522044455441494C532E0A0A436F6E74 -656E7473206F662074686520566572695369676E2072656769737465726564206E6F6E76 -657269666965645375626A656374417474726962757465730A657874656E73696F6E2076 -616C7565207368616C6C206E6F7420626520636F6E736964657265642061732061636375 -7261746520696E666F726D6174696F6E0A76616C69646174656420627920746865204941 -2E0AA336803468747470733A2F2F7777772E766572697369676E2E636F6D2F7265706F73 -69746F72792F766572697369676E6C6F676F2E6769663081AF0603551D200481A7308030 -80060B6086480186F845010701013080302806082B06010505070201161C68747470733A -2F2F7777772E766572697369676E2E636F6D2F435053306206082B060105050702023056 -3015160E566572695369676E2C20496E632E30030201011A3D566572695369676E277320 -43505320696E636F72702E206279207265666572656E6365206C6961622E206C74642E20 -286329393720566572695369676E0000000000003016060A2B06010401823702011B0408 -30060101FF0101FF300D06092A864886F70D010102050003818100954CA27955DA745C8B -25C2A620F06CB8B37B467B9E9F7ABA710648151265CC5D29F8513B8971B1F4143878DA8F -AE0B8036905D4897C500380A53BF4037FF8A13276D004734F7484C2E72F2C6D37EFD446F -228FD1929FE394EDE7FF00C9C2EE721CD99C036EB6C1637B3278443B9E858AFB84863728 -2EE7A638373EBAFCF382233182042430820420020101307530613111300F060355040713 -08496E7465726E657431173015060355040A130E566572695369676E2C20496E632E3133 -3031060355040B132A566572695369676E20436F6D6D65726369616C20536F6674776172 -65205075626C69736865727320434102107966966E83B0D0B601126E9DC0B46571300C06 -082A864886F70D02050500A081AE301906092A864886F70D010903310C060A2B06010401 -8237020104301C060A2B06010401823702010B310E300C060A2B06010401823702011630 -1F06092A864886F70D010904311204105BA6237427F8290EF09CCF5B63F749F83052060A -2B06010401823702010C31443042A01A801800560065007200640061006E006100200046 -006F006E0074A1248022687474703A2F2F7777772E6D6963726F736F66742E636F6D2F74 -727565747970652F300D06092A864886F70D0101010500048201003EFBA519B6A00C823F -B823EA3A1E5E6EBDBBF2C647D1F1093C66910B72FEA26B78E409E7750E62A559DAAC12F7 -CCA36B0725F8BB2E0409AEE1156BE3736F46D1B116DF2B18ABCF394DCF0EF8EE01A758E5 -E4872882FFDD5F04C39F3258358C3DE27BE8FC410AC11736DD19609E3BACBB2257C5E4A4 -836F811D07EC80DAB42FE9AC33537823FA2AC0D406166130C356085818B3CEC8A53763BF -88191B4E52ED790B57C924CEA670505AA2621C1121663215F15D1A9E89A6BC2AA35F5B1F -86E4FDEC2280203A57D736DD2C29A4D2D29F00BAF260927AB3B36EF1C4CC5100CAC54BAA -0AFB74D0101FBEC53815E46B3814DF7E5DFC4A121257608F59AA76D5F333A3A18201D030 -8201CC06092A864886F70D010906318201BD308201B90201013081B830819E311F301D06 -0355040A1316566572695369676E205472757374204E6574776F726B3117301506035504 -0B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369676E -2054696D65205374616D70696E67205365727669636520526F6F7431343032060355040B -132B4E4F204C494142494C4954592041434345505445442C202863293937205665726953 -69676E2C20496E632E021500BD119ADA43ED21FB46588489CA46889025EE1460300C0608 -2A864886F70D02050500A059301806092A864886F70D010903310B06092A864886F70D01 -0701301C06092A864886F70D010905310F170D3938313131323135313835305A301F0609 -2A864886F70D01090431120410641EED59DAFC3103655C9A2A4309D288300D06092A8648 -86F70D01010105000481809092A6C858A52E216E3E56A1C40477C3C63030D247298EF8EA -BFA1C4D5DDE8C375555276DDBB2761ADFC914D772AD331C04DDD675B9736F7D136CAA72D -41CF9F8377C51611E0D1B6EDD8C5AB73694109FD5312908B17319E96C22CCEDD65C9D342 -DC0E3B159C36E0FDA54B21C8DD968B90621C263E94F737AC1997B9D84E517C0000> -] def -/CharStrings 893 dict dup begin -/.notdef 0 def /.null 1 def /nonmarkingreturn 2 def /space 3 def /exclam 4 def -/quotedbl 5 def /numbersign 6 def /dollar 7 def /percent 8 def -/ampersand 9 def /quotesingle 10 def /parenleft 11 def /parenright 12 def -/asterisk 13 def /plus 14 def /comma 15 def /hyphen 16 def -/period 17 def /slash 18 def /zero 19 def /one 20 def -/two 21 def /three 22 def /four 23 def /five 24 def -/six 25 def /seven 26 def /eight 27 def /nine 28 def -/colon 29 def /semicolon 30 def /less 31 def /equal 32 def -/greater 33 def /question 34 def /at 35 def /A 36 def -/B 37 def /C 38 def /D 39 def /E 40 def -/F 41 def /G 42 def /H 43 def /I 44 def -/J 45 def /K 46 def /L 47 def /M 48 def -/N 49 def /O 50 def /P 51 def /Q 52 def -/R 53 def /S 54 def /T 55 def /U 56 def -/V 57 def /W 58 def /X 59 def /Y 60 def -/Z 61 def /bracketleft 62 def /backslash 63 def /bracketright 64 def -/asciicircum 65 def /underscore 66 def /grave 67 def /a 68 def -/b 69 def /c 70 def /d 71 def /e 72 def -/f 73 def /g 74 def /h 75 def /i 76 def -/j 77 def /k 78 def /l 79 def /m 80 def -/n 81 def /o 82 def /p 83 def /q 84 def -/r 85 def /s 86 def /t 87 def /u 88 def -/v 89 def /w 90 def /x 91 def /y 92 def -/z 93 def /braceleft 94 def /bar 95 def /braceright 96 def -/asciitilde 97 def /Adieresis 98 def /Aring 99 def /Ccedilla 100 def -/Eacute 101 def /Ntilde 102 def /Odieresis 103 def /Udieresis 104 def -/aacute 105 def /agrave 106 def /acircumflex 107 def /adieresis 108 def -/atilde 109 def /aring 110 def /ccedilla 111 def /eacute 112 def -/egrave 113 def /ecircumflex 114 def /edieresis 115 def /iacute 116 def -/igrave 117 def /icircumflex 118 def /idieresis 119 def /ntilde 120 def -/oacute 121 def /ograve 122 def /ocircumflex 123 def /odieresis 124 def -/otilde 125 def /uacute 126 def /ugrave 127 def /ucircumflex 128 def -/udieresis 129 def /dagger 130 def /degree 131 def /cent 132 def -/sterling 133 def /section 134 def /bullet 135 def /paragraph 136 def -/germandbls 137 def /registered 138 def /copyright 139 def /trademark 140 def -/acute 141 def /dieresis 142 def /notequal 143 def /AE 144 def -/Oslash 145 def /infinity 146 def /plusminus 147 def /lessequal 148 def -/greaterequal 149 def /yen 150 def /mu1 151 def /partialdiff 152 def -/summation 153 def /product 154 def /pi1 155 def /integral 156 def -/ordfeminine 157 def /ordmasculine 158 def /Ohm 159 def /ae 160 def -/oslash 161 def /questiondown 162 def /exclamdown 163 def /logicalnot 164 def -/radical 165 def /florin 166 def /approxequal 167 def /increment 168 def -/guillemotleft 169 def /guillemotright 170 def /ellipsis 171 def /Agrave 172 def -/Atilde 173 def /Otilde 174 def /OE 175 def /oe 176 def -/endash 177 def /emdash 178 def /quotedblleft 179 def /quotedblright 180 def -/quoteleft 181 def /quoteright 182 def /divide 183 def /lozenge 184 def -/ydieresis 185 def /Ydieresis 186 def /fraction 187 def /Euro 188 def -/guilsinglleft 189 def /guilsinglright 190 def /fi 191 def /fl 192 def -/daggerdbl 193 def /periodcentered 194 def /quotesinglbase 195 def /quotedblbase 196 def -/perthousand 197 def /Acircumflex 198 def /Ecircumflex 199 def /Aacute 200 def -/Edieresis 201 def /Egrave 202 def /Iacute 203 def /Icircumflex 204 def -/Idieresis 205 def /Igrave 206 def /Oacute 207 def /Ocircumflex 208 def -/Ograve 209 def /Uacute 210 def /Ucircumflex 211 def /Ugrave 212 def -/dotlessi 213 def /circumflex 214 def /tilde 215 def /macron 216 def -/breve 217 def /dotaccent 218 def /ring 219 def /cedilla 220 def -/hungarumlaut 221 def /ogonek 222 def /caron 223 def /Lslash 224 def -/lslash 225 def /Scaron 226 def /scaron 227 def /Zcaron 228 def -/zcaron 229 def /brokenbar 230 def /Eth 231 def /eth 232 def -/Yacute 233 def /yacute 234 def /Thorn 235 def /thorn 236 def -/minus 237 def /multiply 238 def /onesuperior 239 def /twosuperior 240 def -/threesuperior 241 def /onehalf 242 def /onequarter 243 def /threequarters 244 def -/franc 245 def /Gbreve 246 def /gbreve 247 def /Idot 248 def -/Scedilla 249 def /scedilla 250 def /Cacute 251 def /cacute 252 def -/Ccaron 253 def /ccaron 254 def /dmacron 255 def /overscore 256 def -/middot 257 def /Abreve 258 def /abreve 259 def /Aogonek 260 def -/aogonek 261 def /Dcaron 262 def /dcaron 263 def /Dslash 264 def -/Eogonek 265 def /eogonek 266 def /Ecaron 267 def /ecaron 268 def -/Lacute 269 def /lacute 270 def /Lcaron 271 def /lcaron 272 def -/Ldot 273 def /ldot 274 def /Nacute 275 def /nacute 276 def -/Ncaron 277 def /ncaron 278 def /Odblacute 279 def /odblacute 280 def -/Racute 281 def /racute 282 def /Rcaron 283 def /rcaron 284 def -/Sacute 285 def /sacute 286 def /Tcedilla 287 def /tcedilla 288 def -/Tcaron 289 def /tcaron 290 def /Uring 291 def /uring 292 def -/Udblacute 293 def /udblacute 294 def /Zacute 295 def /zacute 296 def -/Zdot 297 def /zdot 298 def /Gamma 299 def /Theta 300 def -/Phi 301 def /alpha 302 def /delta 303 def /epsilon 304 def -/sigma 305 def /tau 306 def /phi 307 def /underscoredbl 308 def -/exclamdbl 309 def /nsuperior 310 def /peseta 311 def /IJ 312 def -/ij 313 def /napostrophe 314 def /minute 315 def /second 316 def -/afii61248 317 def /afii61289 318 def /H22073 319 def /H18543 320 def -/H18551 321 def /H18533 322 def /openbullet 323 def /Amacron 324 def -/amacron 325 def /Ccircumflex 326 def /ccircumflex 327 def /Cdot 328 def -/cdot 329 def /Emacron 330 def /emacron 331 def /Ebreve 332 def -/ebreve 333 def /Edot 334 def /edot 335 def /Gcircumflex 336 def -/gcircumflex 337 def /Gdot 338 def /gdot 339 def /Gcedilla 340 def -/gcedilla 341 def /Hcircumflex 342 def /hcircumflex 343 def /Hbar 344 def -/hbar 345 def /Itilde 346 def /itilde 347 def /Imacron 348 def -/imacron 349 def /Ibreve 350 def /ibreve 351 def /Iogonek 352 def -/iogonek 353 def /Jcircumflex 354 def /jcircumflex 355 def /Kcedilla 356 def -/kcedilla 357 def /kgreenlandic 358 def /Lcedilla 359 def /lcedilla 360 def -/Ncedilla 361 def /ncedilla 362 def /Eng 363 def /eng 364 def -/Omacron 365 def /omacron 366 def /Obreve 367 def /obreve 368 def -/Rcedilla 369 def /rcedilla 370 def /Scircumflex 371 def /scircumflex 372 def -/Tbar 373 def /tbar 374 def /Utilde 375 def /utilde 376 def -/Umacron 377 def /umacron 378 def /Ubreve 379 def /ubreve 380 def -/Uogonek 381 def /uogonek 382 def /Wcircumflex 383 def /wcircumflex 384 def -/Ycircumflex 385 def /ycircumflex 386 def /longs 387 def /Aringacute 388 def -/aringacute 389 def /AEacute 390 def /aeacute 391 def /Oslashacute 392 def -/oslashacute 393 def /anoteleia 394 def /Wgrave 395 def /wgrave 396 def -/Wacute 397 def /wacute 398 def /Wdieresis 399 def /wdieresis 400 def -/Ygrave 401 def /ygrave 402 def /quotereversed 403 def /radicalex 404 def -/afii08941 405 def /estimated 406 def /oneeighth 407 def /threeeighths 408 def -/fiveeighths 409 def /seveneighths 410 def /commaaccent 411 def /undercommaaccent 412 def -/tonos 413 def /dieresistonos 414 def /Alphatonos 415 def /Epsilontonos 416 def -/Etatonos 417 def /Iotatonos 418 def /Omicrontonos 419 def /Upsilontonos 420 def -/Omegatonos 421 def /iotadieresistonos 422 def /Alpha 423 def /Beta 424 def -/Delta 425 def /Epsilon 426 def /Zeta 427 def /Eta 428 def -/Iota 429 def /Kappa 430 def /Lambda 431 def /Mu 432 def -/Nu 433 def /Xi 434 def /Omicron 435 def /Pi 436 def -/Rho 437 def /Sigma 438 def /Tau 439 def /Upsilon 440 def -/Chi 441 def /Psi 442 def /Omega 443 def /Iotadieresis 444 def -/Upsilondieresis 445 def /alphatonos 446 def /epsilontonos 447 def /etatonos 448 def -/iotatonos 449 def /upsilondieresistonos 450 def /beta 451 def /gamma 452 def -/zeta 453 def /eta 454 def /theta 455 def /iota 456 def -/kappa 457 def /lambda 458 def /mu 459 def /nu 460 def -/xi 461 def /omicron 462 def /rho 463 def /sigma1 464 def -/upsilon 465 def /chi 466 def /psi 467 def /omega 468 def -/iotadieresis 469 def /upsilondieresis 470 def /omicrontonos 471 def /upsilontonos 472 def -/omegatonos 473 def /afii10023 474 def /afii10051 475 def /afii10052 476 def -/afii10053 477 def /afii10054 478 def /afii10055 479 def /afii10056 480 def -/afii10057 481 def /afii10058 482 def /afii10059 483 def /afii10060 484 def -/afii10061 485 def /afii10062 486 def /afii10145 487 def /afii10017 488 def -/afii10018 489 def /afii10019 490 def /afii10020 491 def /afii10021 492 def -/afii10022 493 def /afii10024 494 def /afii10025 495 def /afii10026 496 def -/afii10027 497 def /afii10028 498 def /afii10029 499 def /afii10030 500 def -/afii10031 501 def /afii10032 502 def /afii10033 503 def /afii10034 504 def -/afii10035 505 def /afii10036 506 def /afii10037 507 def /afii10038 508 def -/afii10039 509 def /afii10040 510 def /afii10041 511 def /afii10042 512 def -/afii10043 513 def /afii10044 514 def /afii10045 515 def /afii10046 516 def -/afii10047 517 def /afii10048 518 def /afii10049 519 def /afii10065 520 def -/afii10066 521 def /afii10067 522 def /afii10068 523 def /afii10069 524 def -/afii10070 525 def /afii10072 526 def /afii10073 527 def /afii10074 528 def -/afii10075 529 def /afii10076 530 def /afii10077 531 def /afii10078 532 def -/afii10079 533 def /afii10080 534 def /afii10081 535 def /afii10082 536 def -/afii10083 537 def /afii10084 538 def /afii10085 539 def /afii10086 540 def -/afii10087 541 def /afii10088 542 def /afii10089 543 def /afii10090 544 def -/afii10091 545 def /afii10092 546 def /afii10093 547 def /afii10094 548 def -/afii10095 549 def /afii10096 550 def /afii10097 551 def /afii10071 552 def -/afii10099 553 def /afii10100 554 def /afii10101 555 def /afii10102 556 def -/afii10103 557 def /afii10104 558 def /afii10105 559 def /afii10106 560 def -/afii10107 561 def /afii10108 562 def /afii10109 563 def /afii10110 564 def -/afii10193 565 def /afii10050 566 def /afii10098 567 def /afii00208 568 def -/afii61352 569 def /pi 570 def /onenumerator 571 def /twonumerator 572 def -/threenumerator 573 def /fournumerator 574 def /fivenumerator 575 def /sevennumerator 576 def -/eightnumerator 577 def /DontCompressHTMX 578 def /glyph579 579 def /glyph580 580 def -/glyph581 581 def /Ohorn 582 def /ohorn 583 def /Uhorn 584 def -/uhorn 585 def /hookabovecomb 586 def /dotbelowcomb 587 def /gravecomb 588 def -/acutecomb 589 def /glyph590 590 def /glyph591 591 def /glyph592 592 def -/glyph593 593 def /glyph594 594 def /glyph595 595 def /glyph596 596 def -/glyph597 597 def /glyph598 598 def /glyph599 599 def /glyph600 600 def -/glyph601 601 def /glyph602 602 def /glyph603 603 def /glyph604 604 def -/Adotbelow 605 def /adotbelow 606 def /Ahookabove 607 def /ahookabove 608 def -/Acircumflexacute 609 def /acircumflexacute 610 def /Acircumflexgrave 611 def /acircumflexgrave 612 def -/Acircumflexhookabove 613 def /acircumflexhookabove 614 def /Acircumflextilde 615 def /acircumflextilde 616 def -/Acircumflexdotbelow 617 def /acircumflexdotbelow 618 def /Abreveacute 619 def /abreveacute 620 def -/Abrevegrave 621 def /abrevegrave 622 def /Abrevehookabove 623 def /abrevehookabove 624 def -/Abrevetilde 625 def /abrevetilde 626 def /Abrevedotbelow 627 def /abrevedotbelow 628 def -/Edotbelow 629 def /edotbelow 630 def /Ehookabove 631 def /ehookabove 632 def -/Etilde 633 def /etilde 634 def /Ecircumflexacute 635 def /ecircumflexacute 636 def -/Ecircumflexgrave 637 def /ecircumflexgrave 638 def /Ecircumflexhookabove 639 def /ecircumflexhookabove 640 def -/Ecircumflextilde 641 def /ecircumflextilde 642 def /Ecircumflexdotbelow 643 def /ecircumflexdotbelow 644 def -/Ihookabove 645 def /ihookabove 646 def /Idotbelow 647 def /idotbelow 648 def -/glyph649 649 def /glyph650 650 def /glyph651 651 def /glyph652 652 def -/sheva 653 def /hatafsegol 654 def /hatafpatah 655 def /hatafqamats 656 def -/hiriq 657 def /tsere 658 def /segol 659 def /patah 660 def -/qamats 661 def /holam 662 def /qubuts 663 def /dagesh 664 def -/meteg 665 def /maqaf 666 def /rafe 667 def /paseq 668 def -/shindot 669 def /sindot 670 def /sofpasuq 671 def /alef 672 def -/bet 673 def /gimel 674 def /dalet 675 def /he 676 def -/vav 677 def /zayin 678 def /het 679 def /tet 680 def -/yod 681 def /finalkaf 682 def /kaf 683 def /lamed 684 def -/finalmem 685 def /mem 686 def /finalnun 687 def /nun 688 def -/samekh 689 def /ayin 690 def /finalpe 691 def /pe 692 def -/finaltsadi 693 def /tsadi 694 def /qof 695 def /resh 696 def -/shin 697 def /tav 698 def /doublevav 699 def /vavyod 700 def -/doubleyod 701 def /geresh 702 def /gershayim 703 def /newsheqelsign 704 def -/vavshindot 705 def /finalkafsheva 706 def /finalkafqamats 707 def /lamedholam 708 def -/lamedholamdagesh 709 def /altayin 710 def /shinshindot 711 def /shinsindot 712 def -/shindageshshindot 713 def /shindageshsindot 714 def /alefpatah 715 def /alefqamats 716 def -/alefmapiq 717 def /betdagesh 718 def /gimeldagesh 719 def /daletdagesh 720 def -/hedagesh 721 def /vavdagesh 722 def /zayindagesh 723 def /tetdagesh 724 def -/yoddagesh 725 def /finalkafdagesh 726 def /kafdagesh 727 def /lameddagesh 728 def -/memdagesh 729 def /nundagesh 730 def /samekhdagesh 731 def /finalpedagesh 732 def -/pedagesh 733 def /tsadidagesh 734 def /qofdagesh 735 def /reshdagesh 736 def -/shindagesh 737 def /tavdages 738 def /vavholam 739 def /betrafe 740 def -/kafrafe 741 def /perafe 742 def /aleflamed 743 def /zerowidthnonjoiner 744 def -/zerowidthjoiner 745 def /lefttorightmark 746 def /righttoleftmark 747 def /afii57388 748 def -/afii57403 749 def /afii57407 750 def /afii57409 751 def /afii57440 752 def -/afii57451 753 def /afii57452 754 def /afii57453 755 def /afii57454 756 def -/afii57455 757 def /afii57456 758 def /afii57457 759 def /afii57458 760 def -/afii57392 761 def /afii57393 762 def /afii57394 763 def /afii57395 764 def -/afii57396 765 def /afii57397 766 def /afii57398 767 def /afii57399 768 def -/afii57400 769 def /afii57401 770 def /afii57381 771 def /afii57461 772 def -/afii63167 773 def /afii57459 774 def /afii57543 775 def /afii57534 776 def -/afii57494 777 def /afii62843 778 def /afii62844 779 def /afii62845 780 def -/afii64240 781 def /afii64241 782 def /afii63954 783 def /afii57382 784 def -/afii64242 785 def /afii62881 786 def /afii57504 787 def /afii57369 788 def -/afii57370 789 def /afii57371 790 def /afii57372 791 def /afii57373 792 def -/afii57374 793 def /afii57375 794 def /afii57391 795 def /afii57471 796 def -/afii57460 797 def /afii52258 798 def /afii57506 799 def /afii62958 800 def -/afii62956 801 def /afii52957 802 def /afii57505 803 def /afii62889 804 def -/afii62887 805 def /afii62888 806 def /afii57507 807 def /afii62961 808 def -/afii62959 809 def /afii62960 810 def /afii57508 811 def /afii62962 812 def -/afii57567 813 def /afii62964 814 def /afii52305 815 def /afii52306 816 def -/afii57509 817 def /afii62967 818 def /afii62965 819 def /afii62966 820 def -/afii57555 821 def /afii52364 822 def /afii63753 823 def /afii63754 824 def -/afii63759 825 def /afii63763 826 def /afii63795 827 def /afii62891 828 def -/afii63808 829 def /afii62938 830 def /afii63810 831 def /afii62942 832 def -/afii62947 833 def /afii63813 834 def /afii63823 835 def /afii63824 836 def -/afii63833 837 def /afii63844 838 def /afii62882 839 def /afii62883 840 def -/afii62884 841 def /afii62885 842 def /afii62886 843 def /Odotbelow 844 def -/odotbelow 845 def /Ohookabove 846 def /ohookabove 847 def /Ocircumflexacute 848 def -/ocircumflexacute 849 def /Ocircumflexgrave 850 def /ocircumflexgrave 851 def /Ocircumflexhookabove 852 def -/ocircumflexhookabove 853 def /Ocircumflextilde 854 def /ocircumflextilde 855 def /Ocircumflexdotbelow 856 def -/ocircumflexdotbelow 857 def /Ohornacute 858 def /ohornacute 859 def /Ohorngrave 860 def -/ohorngrave 861 def /Ohornhookabove 862 def /ohornhookabove 863 def /Ohorntilde 864 def -/ohorntilde 865 def /Ohorndotbelow 866 def /ohorndotbelow 867 def /Udotbelow 868 def -/udotbelow 869 def /Uhookabove 870 def /uhookabove 871 def /Uhornacute 872 def -/uhornacute 873 def /Uhorngrave 874 def /uhorngrave 875 def /Uhornhookabove 876 def -/uhornhookabove 877 def /Uhorntilde 878 def /uhorntilde 879 def /Uhorndotbelow 880 def -/uhorndotbelow 881 def /glyph882 882 def /glyph883 883 def /Ydotbelow 884 def -/ydotbelow 885 def /Yhookabove 886 def /yhookabove 887 def /Ytilde 888 def -/ytilde 889 def /dong 890 def /tildecomb 891 def /currency 892 def - -end readonly def -FontName currentdict end definefont pop -%%EndFont -%%EndProlog -mpldict begin -13.5 175.5 translate -585 441 0 0 clipbox -% polygon -1.000 setgray -1.000 setlinewidth -0 setlinejoin -2 setlinecap -[] 0 setdash -0 0 m -0 441 l -585 441 l -585 0 l -closepath -gsave -fill -grestore -stroke -% polygon -0.000 setgray -73.125 44.1 m -73.125 396.9 l -526.5 396.9 l -526.5 44.1 l -closepath -gsave -1.000 setgray -fill -grestore -stroke -% draw_lines -gsave -453.375 352.800 73.125 44.100 clipbox -73.125 44.100 m -82.192 44.625 l -91.260 46.237 l -100.328 49.043 l -109.395 53.206 l -118.463 58.937 l -127.530 66.464 l -136.597 76.012 l -145.665 87.777 l -154.733 101.897 l -163.800 118.431 l -172.868 137.336 l -181.935 158.456 l -191.002 181.511 l -200.070 206.100 l -209.138 231.707 l -218.205 257.720 l -227.273 283.450 l -236.340 308.160 l -245.408 331.100 l -254.475 351.539 l -263.543 368.804 l -272.610 382.309 l -281.678 391.584 l -290.745 396.306 l -299.812 396.306 l -308.880 391.584 l -317.948 382.309 l -327.015 368.804 l -336.083 351.539 l -345.150 331.100 l -354.218 308.160 l -363.285 283.450 l -372.353 257.720 l -381.420 231.707 l -390.488 206.100 l -399.555 181.511 l -408.623 158.456 l -417.690 137.336 l -426.758 118.431 l -435.825 101.897 l -444.893 87.777 l -453.960 76.012 l -463.028 66.464 l -472.095 58.937 l -481.163 53.206 l -490.230 49.043 l -499.298 46.237 l -508.365 44.625 l -517.433 44.100 l -stroke -grestore -% draw_lines -0 setlinecap -[6 6] 0 setdash -gsave -453.375 352.800 73.125 44.100 clipbox -73.125 44.100 m -82.192 58.500 l -91.260 72.900 l -100.328 87.300 l -109.395 101.700 l -118.463 116.100 l -127.530 130.500 l -136.597 144.900 l -145.665 159.300 l -154.733 173.700 l -163.800 188.100 l -172.868 202.500 l -181.935 216.900 l -191.002 231.300 l -200.070 245.700 l -209.138 260.100 l -218.205 274.500 l -227.273 288.900 l -236.340 303.300 l -245.408 317.700 l -254.475 332.100 l -263.543 346.500 l -272.610 360.900 l -281.678 375.300 l -290.745 389.700 l -299.812 389.700 l -308.880 375.300 l -317.948 360.900 l -327.015 346.500 l -336.083 332.100 l -345.150 317.700 l -354.218 303.300 l -363.285 288.900 l -372.353 274.500 l -381.420 260.100 l -390.488 245.700 l -399.555 231.300 l -408.623 216.900 l -417.690 202.500 l -426.758 188.100 l -435.825 173.700 l -444.893 159.300 l -453.960 144.900 l -463.028 130.500 l -472.095 116.100 l -481.163 101.700 l -490.230 87.300 l -499.298 72.900 l -508.365 58.500 l -517.433 44.100 l -stroke -grestore -% draw_lines -[3 5 1 5] 0 setdash -gsave -453.375 352.800 73.125 44.100 clipbox -73.125 44.100 m -82.192 45.548 l -91.260 49.869 l -100.328 56.992 l -109.395 66.799 l -118.463 79.131 l -127.530 93.783 l -136.597 110.516 l -145.665 129.056 l -154.733 149.096 l -163.800 170.309 l -172.868 192.347 l -181.935 214.846 l -191.002 237.438 l -200.070 259.753 l -209.138 281.422 l -218.205 302.092 l -227.273 321.421 l -236.340 339.094 l -245.408 354.819 l -254.475 368.339 l -263.543 379.431 l -272.610 387.913 l -281.678 393.647 l -290.745 396.538 l -299.812 396.538 l -308.880 393.647 l -317.948 387.913 l -327.015 379.431 l -336.083 368.339 l -345.150 354.819 l -354.218 339.094 l -363.285 321.421 l -372.353 302.092 l -381.420 281.422 l -390.488 259.753 l -399.555 237.438 l -408.623 214.846 l -417.690 192.347 l -426.758 170.309 l -435.825 149.096 l -444.893 129.056 l -453.960 110.516 l -463.028 93.783 l -472.095 79.131 l -481.163 66.799 l -490.230 56.992 l -499.298 49.869 l -508.365 45.548 l -517.433 44.100 l -stroke -grestore -% draw_lines -[1 3] 0 setdash -gsave -453.375 352.800 73.125 44.100 clipbox -73.125 72.324 m -82.192 73.656 l -91.260 77.632 l -100.328 84.185 l -109.395 93.207 l -118.463 104.552 l -127.530 118.033 l -136.597 133.427 l -145.665 150.483 l -154.733 168.921 l -163.800 188.437 l -172.868 208.711 l -181.935 229.410 l -191.002 250.195 l -200.070 270.724 l -209.138 290.661 l -218.205 309.676 l -227.273 327.460 l -236.340 343.718 l -245.408 358.186 l -254.475 370.624 l -263.543 380.828 l -272.610 388.632 l -281.678 393.907 l -290.745 396.567 l -299.812 396.567 l -308.880 393.907 l -317.948 388.632 l -327.015 380.828 l -336.083 370.624 l -345.150 358.186 l -354.218 343.718 l -363.285 327.460 l -372.353 309.676 l -381.420 290.661 l -390.488 270.724 l -399.555 250.195 l -408.623 229.410 l -417.690 208.711 l -426.758 188.437 l -435.825 168.921 l -444.893 150.483 l -453.960 133.427 l -463.028 118.033 l -472.095 104.552 l -481.163 93.207 l -490.230 84.185 l -499.298 77.632 l -508.365 73.656 l -517.433 72.324 l -stroke -grestore -% text -/Verdana findfont -18.000 scalefont -setfont -144.812 403.956 m -0 4 rmoveto -(Smoothing window in time-domain) show -% text -/Verdana findfont -14.000 scalefont -setfont -69.469 30.1 m -(0) show -% line -0.500 setlinewidth -[] 0 setdash -163.800 44.100 m 163.800 48.100 l -stroke -% line -163.800 392.900 m 163.800 396.900 l -stroke -% text -155.769 30.1 m -(10) show -% line -254.475 44.100 m 254.475 48.100 l -stroke -% line -254.475 392.900 m 254.475 396.900 l -stroke -% text -246.444 30.1 m -(20) show -% line -345.150 44.100 m 345.150 48.100 l -stroke -% line -345.150 392.900 m 345.150 396.900 l -stroke -% text -337.619 30.1 m -(30) show -% line -435.825 44.100 m 435.825 48.100 l -stroke -% line -435.825 392.900 m 435.825 396.900 l -stroke -% text -427.731 30.1 m -(40) show -% text -518.844 30.1 m -(50) show -% text -296.656 17.1 m -(n) show -% text -47.812 39.1 m -(0.0) show -% line -73.125 114.660 m 77.125 114.660 l -stroke -% line -522.500 114.660 m 526.500 114.660 l -stroke -% text -47.875 109.66 m -(0.2) show -% line -73.125 185.220 m 77.125 185.220 l -stroke -% line -522.500 185.220 m 526.500 185.220 l -stroke -% text -47.125 180.22 m -(0.4) show -% line -73.125 255.780 m 77.125 255.780 l -stroke -% line -522.500 255.780 m 526.500 255.780 l -stroke -% text -47.812 250.78 m -(0.6) show -% line -73.125 326.340 m 77.125 326.340 l -stroke -% line -522.500 326.340 m 526.500 326.340 l -stroke -% text -47.797 321.34 m -(0.8) show -% text -48.062 391.9 m -(1.0) show -% polygon -1.000 setlinewidth -2 setlinecap -214.291 51.156 m -214.291 161.736 l -385.334 161.736 l -385.334 51.156 l -closepath -gsave -1.000 setgray -fill -grestore -stroke -% draw_lines -230.344 143.521 m -237.901 143.521 l -245.457 143.521 l -253.013 143.521 l -stroke -% draw_lines -0 setlinecap -[6 6] 0 setdash -230.344 121.605 m -237.901 121.605 l -245.457 121.605 l -253.013 121.605 l -stroke -% draw_lines -[3 5 1 5] 0 setdash -230.344 97.688 m -237.901 97.688 l -245.457 97.688 l -253.013 97.688 l -stroke -% draw_lines -[1 3] 0 setdash -230.344 71.371 m -237.901 71.371 l -245.457 71.371 l -253.013 71.371 l -stroke -% text -/Verdana findfont -24.000 scalefont -setfont -262.081 134.521 m -(Blackman) show -% text -262.081 112.605 m -(Bartlett) show -% text -262.081 86.688 m -0 5 rmoveto -(Hanning) show -% text -262.081 60.371 m -0 5 rmoveto -(Hamming) show - -end -showpage diff --git a/numpy/doc/numpybook/Figures/fig2.eps b/numpy/doc/numpybook/Figures/fig2.eps deleted file mode 100644 index 20797dc71..000000000 --- a/numpy/doc/numpybook/Figures/fig2.eps +++ /dev/null @@ -1,4921 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Title: fig2.eps -%%Creator: matplotlib version 0.85.1.cvs, http://matplotlib.sourceforge.net/ -%%CreationDate: Fri Jan 6 00:11:32 2006 -%%BoundingBox: 13 175 598 616 -%%EndComments -%%BeginProlog -/mpldict 7 dict def -mpldict begin -/m { moveto } bind def -/l { lineto } bind def -/r { rlineto } bind def -/box { -m -1 index 0 r -0 exch r -neg 0 r -closepath -} bind def -/clipbox { -box -clip -newpath -} bind def -/ellipse { -newpath -matrix currentmatrix 7 1 roll -translate -scale -0 0 1 5 3 roll arc -setmatrix -closepath -} bind def -%%BeginFont: Verdana -%!PS-TrueType-1.0-1.0 -8 dict begin -/FontName /Verdana def -/FontMatrix [1 0 0 1 0 0] def -/FontType 42 def -/Encoding StandardEncoding def -/FontBBox [-102 -423 2963 2049] def -/PaintType 0 def -/FontInfo 7 dict dup begin -/Notice (Typeface and data © 1996 Microsoft Corporation. All Rights Reserved) def -/FamilyName (Verdana) def -/FullName (Verdana) def -/version (Version 2.35) def -/isFixedPitch false def -/UnderlinePosition -180 def -/UnderlineThickness 120 def -end readonly def -/sfnts [ -<00010000001301000004003044534947CD5006A400020D64000014144C5453485694D82F -00001530000003814F532F32477590C3000001B80000005656444D5874F17C6D000018B4 -000005E0636D6170E84D8B8B000007A80000068C637674204CA740E3000022AC00000198 -6670676DEE371553000021740000013867617370001700090000021000000010676C7966 -01F195F700009EC000013BB668646D7809490ECD0000323800006C8868656164C748722C -0000013C0000003668686561133B09D00000017400000024686D7478C905723E00002444 -00000DF46B65726E75BF7E53000200CC00000C966C6F63616784B57700000E34000006FC -6D617870086A023E00000198000000206E616D65A93B95720000022000000587706F7374 -C58F55450001DA7800002651707265701240C02F00001E94000002E00001000000010000 -16FBFC3A5F0F3CF5001B080000000000AA7E442900000000B26DE2ABFF9AFE590B930801 -00000009000200000000000000010000080BFE5200000C2CFF9AFBD40B93000100000000 -00000000000000000000037D00010000037D00620007006B000500020010002F00380000 -0495013F0003000100010411019000050000059A053300000125059A0533000003A00078 -02A70800020B0604030504040204000002870000000000000000000000004D5320200040 -0020FB02061EFE5900CA080B01AE2000019F000000000000000000030008000200100001 -FFFF00030000002801E60001000000000000004300000001000000000001000700430001 -0000000000020007004A0001000000000003002F00510001000000000004000700800001 -000000000005000C00870001000000000006000700930001000000000007002F009A0003 -000104030002000C00C90003000104050002001000D50003000104060002000C00E50003 -000104070002001000F10003000104080002001001010003000104090000008601110003 -000104090001000E01970003000104090002000E01A50003000104090003005E01B30003 -000104090004000E021100030001040900050018021F0003000104090006000E02370003 -000104090007005E024500030001040A0002000C02A300030001040B0002001002AF0003 -0001040C0002000C02BF00030001040E0002000C02CB0003000104100002000E02D70003 -000104130002001202E50003000104140002000C02F70003000104150002001003030003 -000104160002000C03130003000104190002000E031F00030001041B00020010032D0003 -0001041D0002000C033D00030001041F0002000C03490003000104240002000E03550003 -0001042D0002000E036300030001080A0002000C03710003000108160002000C037D0003 -00010C0A0002000C0389000300010C0C0002000C0395547970656661636520616E642064 -61746120A92031393936204D6963726F736F667420436F72706F726174696F6E2E20416C -6C2052696768747320526573657276656456657264616E61526567756C61724D6963726F -736F66743A56657264616E6120526567756C61723A56657273696F6E203120284D696372 -6F736F66742956657264616E6156657273696F6E20322E333556657264616E6156657264 -616E6120697320612074726164656D61726B206F66204D6963726F736F667420436F7270 -6F726174696F6E004E006F0072006D0061006C006F00620079010D0065006A006E00E900 -6E006F0072006D0061006C005300740061006E0064006100720064039A03B103BD03BF03 -BD03B903BA03AC0054007900700065006600610063006500200061006E00640020006400 -6100740061002000A9002000310039003900360020004D006900630072006F0073006F00 -66007400200043006F00720070006F0072006100740069006F006E002E00200041006C00 -6C0020005200690067006800740073002000520065007300650072007600650064005600 -65007200640061006E00610052006500670075006C00610072004D006900630072006F00 -73006F00660074003A00560065007200640061006E006100200052006500670075006C00 -610072003A00560065007200730069006F006E0020003100200028004D00690063007200 -6F0073006F00660074002900560065007200640061006E00610056006500720073006900 -6F006E00200032002E0033003500560065007200640061006E0061005600650072006400 -61006E006100200069007300200061002000740072006100640065006D00610072006B00 -20006F00660020004D006900630072006F0073006F0066007400200043006F0072007000 -6F0072006100740069006F006E004E006F0072006D0061006C004E006F0072006D006100 -61006C0069004E006F0072006D0061006C004E006F0072006D00E1006C004E006F007200 -6D0061006C0065005300740061006E00640061006100720064004E006F0072006D006100 -6C004E006F0072006D0061006C006E0079004E006F0072006D0061006C041E0431044B04 -47043D044B0439004E006F0072006D00E1006C006E0065004E006F0072006D0061006C00 -4E006F0072006D0061006C004E0061007600610064006E006F0041007200720075006E00 -740061004E006F0072006D0061006C004E006F0072006D0061006C004E006F0072006D00 -61006C004E006F0072006D0061006C00000000020001000000000014000300010000011A -000001060000010000000000000001020000000200000000000000000000000000000001 -0000030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324 -25262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748 -494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60610062636465666768696A6B -6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F -909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAB03ACADAEAFB0B1B2 -B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD000D1D2D3D4D5 -D6D7D8D9DADBDCDDDEDF0004057200000084008000060004007E017F019201A101B001FF -02C702C902DD0301030303090323037E038A038C03A103CE040C044F045C045F04911E85 -1EF92015201E2022202620302033203A203C203E2044207F20A420A720AC210521132116 -21222126212E215E22022206220F22122215221A221E222B22482260226525A125AB25CA -25CF25E6F002F00DFB02FFFF0000002000A0019201A001AF01FA02C602C902D803000303 -03090323037E0384038C038E03A30401040E0451045E04901E801EA02013201720202026 -203020322039203C203E2044207F20A320A720AB21052113211621222126212E215B2202 -2206220F221122152219221E222B22482260226425A125AA25CA25CF25E6F001F004FB01 -FFFFFFE30000FF1400A60099FF8A0000FE0F0000FF4C0078FF41FF28FCA00000FE170000 -0000FDD9FDD8FDD7FDD6FDA6E30B0000000000000000E085E095E109E084E0F9E156E077 -E0B70000E0900000E038E02BE123DF6ADF79E068E03CDE96DEA2DE8B0000DEA60000DE74 -DE71DE5FDE2FDE30DB9EDB96DAEEDB73DB5D10BE000005BE000100000082000000000000 -000002380000023800000000000000000000023800000242026800000000000000000000 -000002B203640368037600000000000000000000000000000000036A0000036A00000000 -000000000000000000000000000000000358000003580000000000000000000000000000 -0000000000000000034400000000000300A300840085037C009600E60086008E008B009D -00A900A40010008A01000083009300F000F1008D00970088010100DC00EF009E00AA00F3 -00F200F400A200AC00C800C600AD006200630090006400CA006500C700C900CE00CB00CC -00CD00E7006600D100CF00D000AE006700EE009100D400D200D3006800E900EB0089006A -0069006B006D006C006E00A0006F0071007000720073007500740076007700E80078007A -0079007B007D007C00B700A1007F007E0080008100EA00EC00B901440145010201030104 -010500FB00FC014601470148014900FD00FE01060107010800FF014A014B014C014D014E -014F0109010A010B010C0150015100F600F701520153015401550156015701580159015A -015B015C015D015E015F0160016100F800D50138013901620163016401650166010D010E -01670168010F01100111011200E000E1011301140169016A01150116013A016B016C016D -016E016F01700117011800AF00B00119011A01710172011B011C011D011E0173017400F9 -00FA00E200E3011F01200121012201750176017701780179017A017B017C012301240125 -0126017D017E017F01800181018200BA012701280129012A00E400E5018300D600DF00D9 -00DA00DB00DE00D700DD019D019E019F018A01A001A101A201A401A501A601A701A8012B -01A901AA01AB01AC012C01AD01AE01AF01B001B101B201B301B401B501B601B701B8012D -01B901BA01BB01BC01BD01BE01BF01C001C101C2012E01C301C4012F013001C501C601C7 -01C801C901CA01CB01CC01CD01CE023A01CF01D00131013201D1013301D201D301D401D5 -01D601D701D801D9025D025E025F0260026102620263026402650266026702680269026A -026B026C026D026E026F0270027102720273027402750276027702780279027A027B027C -027D027E027F028002810282028302840285028602870288034C034D034E034F03500351 -03520353035403550356035703580359035A035B035C035D035E035F0360036103620363 -036403650366036703680369036A036B036C036D036E036F037003710191019203740375 -037603770378037900B100B20238013400B500B600C3019300B300B400C4008200C10087 -00F50195037A00BC009900ED00C200A5019B019C023B023C023D023E023F024002410242 -0000001F001F001F001F00470070010401C0025F033C035503A203F10461049604C004DE -04F50520057F05B9063806DB072D07A70830086B090B099309B509F10A350A640AAA0B13 -0BF80C600CDC0D4F0DA00DD60E060E7A0EAE0EDB0F180F860FA61000104C10B8111711AE -122012B812DF132C13881407148814DF15221544156F159015C815DE15FE168916E71747 -17A01803184F18D11912193D198C19E51A001A761AB61B011B5D1BB81BF51C8B1CDB1D1B -1D741DD91E641EC21F041F631F7E1FDC203B205520FE21AA21BD21D021E9220222142226 -2238225322652278230A231C232E234023562369237C23B423EE2400241224242436244C -245E24702482249424AB24E62520259A260826EB270B274327C928832929297B299C29C2 -2A2D2A912B412BCD2C0D2C5A2CA82D0C2D4C2DCB2E3D2E722E9F2EE92F5E2F9F301130E7 -316D31D831FF3223326032DF336433A233F33443346D3480349334A6350E35AD35C735DD -361C365B368036A736E33728373F37593777382D3858388438E139313986399E39C43A03 -3AD73AEA3AFD3B103B243B373B4A3B5D3B773B8A3B9D3BB03BC33BD63BE93BFC3C173C47 -3C8E3CA63CEC3D003D493D7D3DB53DEA3E1B3E5B3E923EA53EB73ECA3EDC3F043F6B3FFF -40124024408840E441014135416941BB4239425A427E42AA42F643024314432743F044AF -44C244D444E744F9456F4586459E45B145C3465F47144727479D47A54806489348A648B8 -48CB48F0492B4961499249BC49CF49E149F44A064A1A4A2D4A404A534A664A794A8C4A9E -4AEE4B6C4B7F4BEC4C354C484C5C4C6F4C824C954CA84CBA4CDA4D584DDD4E3C4EC24F58 -4FB24FE1505D5081509D50E951DF51EF52085268528B52CA538353FD5425543F54665491 -54EA54FC550D551F55345546555B556D557E559055A455B655C755D955EE5600561556B8 -575B576D578757DE583458A458FC593F596C59C05A035A595AB15AC85B225B335B495BA2 -5BEB5C305C465C5C5CD25D2E5D405D515D635D745D855DEA5DFC5E105E4E5EBA5ECC5EDD -5EEF5F005F125F235FA2600E6020603260446055608561656246625C626E6285629A62B1 -62C362D562E762F963166332634963606388639E6422648E64AA64D76504653065556589 -65A265DD65F36611662F664F666E668E66B16700670867106752675A6762676A6772677A -67C367CB67D36812681A6840684868DA68E268EA68F2695D69DC69F66A106A216A376A48 -6A5B6A6F6AFD6B4A6BBD6BFF6C866C8E6D226D7A6DC16DC96E726E7A6ECF6F3B6F7A6FEA -705A70F370FB7112712371347146715A71C571DD7255725D7265727F7287731C738773DE -73F3749074C174C97521752975497594759C765676F2773A77AE783B7892789A78A278AA -78D078D878E078E8795979DE79E67A167A5D7A907ACD7B297B907BE47C5F7CCD7D367D3E -7DCA7E4C7E6C7EBC7EC47F7D8015804D80B18126817B81D38203820B82308238829A82C9 -82D1836C837483AC83EF8425846784C3852B858085F4865386BD86D38757876887D587DD -87E587ED87F5888B88F9894F896489EE8A258A4E8A7B8A918B238B488B6C8BBD8C398C73 -8CD88D0C8D8E8D8E8D8E8D8E8D8E8E208E8D8EF48F598F9F8FB58FBD8FC59006904590BD -9126916491A19209927292C09334938093D1944E94D395479558956C9586959B95B195C7 -95DD95F3960B96219633964996659683969596AA96BC96D196E396F8970A971F973E9759 -976A977B979697AE97C497D597ED97FF98179829983F985598679879989898B198C998DB -98ED98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF9911 -9922994099549970998999A199B399CB99E499FC9A159A359A4E9A659A769A909AA59ABB -9ACC9AE29AF99B0B9B1C9B2D9B3E9B549B659B7C9B949BAF9BC79BDD9BEE9C009C119C22 -9C339C4E9C649C759C8B9CA49CB89CCE9CDF9D639D6B9DDB0000037D01011C1C300E0E0B -0E010A01010E0E010F01010B0B0B0B0B0B0B0B0B0B01010E0E0E0B0C320E101923150E0F -740A0E2D240E0D0D0D0E322C1D322E1C111C0101010101010D0D0E0D0D1C0D0BB4010EB4 -110B100D0D2A11110B0A100F0A11010E0101323210230E0D1D0D0D0D0D0D0D0E0D0D0D0D -B4B4B4B40B10101010100B0B0B0B0B010B0B01010B0101010101010E330D010E0E0E0B10 -010101010B0101010E100B300E010B010127270132320D011C0B01010101010E010A1101 -01010101010B010101013223322323747474740D0D0D1D1D1DB401010101010101010101 -0AD732111C110E1001110A0D0D0E01010101010101010E0D743211100E100E0D0101320D -320D190D10230D230D2DB42D322D010E0B0E0B0D100E2A0E2A32112C112C111D0B1D0B1C -111C11100D130D2612181110010D010A0A110E01240A121901011901320D100E100E230D -230D230D0E0D0E0D0E0D0F0B0F0B74B474B474B474B40A010E0E0E2DB40E0B0E0B0D100D -100E2A32112C111D0B1D0B1D491D182E10110A01320D330E0D10012E102E102E10110A01 -010B01010101012E010101320E1C10160C27B4320E01231C0F740E0A240E300D0F0D1E2C -111C111474110D120BB40B0B0F0D0B0DB40D0A130A011010010B0C1010B40B100B10230A -100D3274740A0C0E010E1111320E0E10012311010E0E0E12240F0D0F0D102C11131C2D22 -11111F2D0E0D01100D240A010D0D301210100B011D1010100D0F110A170F270D11320C11 -0C0E0D0A0D0B010E11B4B4010A0E0B0B0A10100A01011001010101010101010101012D10 -282001010101010101010101010101010101010101320D320D320D320D320D320D320D32 -0D320D320D320D320D230D230D230D230D230D230D230D230D74B474B401010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -01010101010101010D100D100D100D100D100D100D102D102D102D102D102D101D0B1D0B -28202820282028202820110A110A110A110A0D010B00000000000001000101010101000C -00F808FF00080008FFFE0009000AFFFE000A000AFFFE000B000BFFFE000C000CFFFE000D -000DFFFD000E000EFFFD000F000FFFFD0010000FFFFD00110011FFFD00120012FFFC0013 -0013FFFC00140015FFFC00150015FFFC00160016FFFC00170017FFFB00180018FFFB0019 -001AFFFB001A001BFFFB001B001BFFFB001C001CFFFA001D001DFFFA001E001EFFFA001F -0020FFFA00200020FFFA00210021FFF900220022FFF900230023FFF900240025FFF90025 -0026FFF900260026FFF800270027FFF800280028FFF800290029FFF8002A002BFFF8002B -002BFFF7002C002CFFF7002D002DFFF7002E002EFFF7002F0030FFF700300031FFF60031 -0031FFF600320032FFF600330033FFF600340034FFF600350036FFF500360036FFF50037 -0037FFF500380038FFF500390039FFF5003A003BFFF4003B003CFFF4003C003DFFF4003D -003DFFF4003E003EFFF4003F003FFFF300400041FFF300410041FFF300420042FFF30043 -0043FFF300440044FFF200450046FFF200460047FFF200470047FFF200480048FFF20049 -0049FFF1004A004AFFF1004B004CFFF1004C004DFFF1004D004DFFF1004E004EFFF0004F -004FFFF000500051FFF000510052FFF000520052FFEF00530053FFEF00540054FFEF0055 -0055FFEF00560057FFEF00570058FFEE00580058FFEE00590059FFEE005A005AFFEE005B -005CFFEE005C005DFFEC005D005DFFEC005E005EFFEC005F005FFFEC00600060FFEC0061 -0062FFEB00620062FFEB00630063FFEB00640064FFEB00650065FFEB00660067FFEA0067 -0068FFEA00680068FFEA00690069FFEA006A006AFFEA006B006BFFE9006C006DFFE9006D -006DFFE9006E006EFFE9006F006FFFE900700070FFE800710072FFE800720072FFE80073 -0073FFE800740074FFE800750075FFE700760076FFE700770078FFE700780078FFE70079 -0079FFE7007A007AFFE6007B007BFFE6007C007DFFE6007D007DFFE6007E007EFFE6007F -007FFFE500800080FFE500810082FFE500820083FFE500830083FFE500840084FFE40085 -0085FFE400860086FFE400870088FFE400880088FFE400890089FFE3008A008AFFE3008B -008BFFE3008C008DFFE3008D008EFFE3008E008EFFE2008F008FFFE200900090FFE20091 -0091FFE200920093FFE200930093FFE100940094FFE100950095FFE100960096FFE10097 -0098FFE100980099FFE000990099FFE0009A009BFFE0009B009BFFE0009C009CFFE0009D -009EFFDF009E009EFFDF009F00A0FFDF00A000A0FFDF00A100A1FFDF00A200A3FFDE00A3 -00A4FFDE00A400A4FFDE00A500A6FFDE00A600A6FFDE00A700A7FFDD00A800A9FFDD00A9 -00A9FFDD00AA00ABFFDD00AB00ABFFDD00AC00ACFFDC00AD00AEFFDC00AE00AFFFDC00AF -00B0FFDC00B000B0FFDC00B100B1FFDB00B200B2FFDB00B300B4FFDB00B400B5FFDB00B5 -00B6FFDB00B600B6FFDA00B700B7FFDA00B800B9FFDA00B900BAFFDA00BA00BBFFDA00BB -00BBFFD900BC00BCFFD900BD00BDFFD900BE00BFFFD900BF00C0FFD900C000C1FFD800C1 -00C1FFD800C200C2FFD800C300C4FFD800C400C5FFD800C500C5FFD700C600C6FFD700C7 -00C7FFD700C800C8FFD700C900CAFFD700CA00CBFFD600CB00CCFFD600CC00CCFFD600CD -00CDFFD600CE00CFFFD600CF00D0FFD500D000D0FFD500D100D1FFD500D200D2FFD500D3 -00D3FFD500D400D5FFD400D500D5FFD400D600D7FFD400D700D7FFD400D800D8FFD400D9 -00DAFFD300DA00DBFFD300DB00DCFFD300DC00DCFFD300DD00DDFFD300DE00DEFFD200DF -00E0FFD200E000E0FFD200E100E2FFD200E200E2FFD200E300E3FFD100E400E5FFD100E5 -00E6FFD100E600E7FFD100E700E7FFD100E800E8FFD000E900E9FFD000EA00EBFFD000EB -00EBFFD000EC00ECFFD000ED00EDFFCF00EE00EEFFCF00EF00F0FFCF00F000F1FFCF00F1 -00F2FFCF00F200F2FFCE00F300F3FFCE00F400F4FFCE00F500F6FFCE00F600F7FFCE00F7 -00F7FFCD00F800F8FFCD00F900F9FFCD00FA00FBFFCD00FB00FCFFCC00FC00FDFFCC00FD -00FEFFCC00FE00FEFFCC00FF00FFFFCCB8FFC0401EB229323610B220B240B250B270B280 -B2A0B2B0B2D0B2E0B20AC0B2F0B202B8FFC04070B51718361F44010F561F56024F555F55 -026F54019F54AF54025153170452531604535215044A4952044649370447493204484932 -04493539043C3F32043D3F3D043E3F2104433F1D04423F5204413F5204403F52043F3532 -0432336404333534043534540434351E04D034E034F03403B8FFEEB3B4254836B8FFE0B3 -B4102336B8FFEE400DB4090F36B41A480476B386B302B8FFF0B3B3254836B8FFFA40FFB3 -092436B314480489881304706C7078020F9CDF9E02409D161936409C161B364097171936 -4096171B368685131F0F840F850F8E0F8F0F901F841F8E1F8F2F8E808580888F91908590 -8790880F40820910360F721F72024071090C360F6D0120C80120C7013FC6EFC60220C540 -C50200620100621062024061A061020F5B012D1411042C1425042B1439042A1413042914 -15041F141E042120430420143C04C91A45041A1B47041B1A3C041A143204151439041314 -480412141A0411141A0470140140144143360F0E2A1F0006010DC34B1F0CC24B1F0AC04B -1F09C04B1F05BC4B1F04BD4B1F03B94B1F02BA4B1F01B64B1F00B74B1FC3C22A1FC0BF2A -1FBD4056BC211FBAB9211FB7B6211FC2C3C40DBFC0C10DBCBDBE0CB9BABB0CB6B7B80C10 -BC80BC0240B980B9020FB63FB64FB67FB6040FB62FB63FB66FB67FB6BFB6CFB6FFB6080A -0937040C0D02050402030202010002500501B801FF858D8D1DB0964B5258B0801D59B808 -004B5458B001B0018E59B0084B5358B001B0018E59002B2B2B2B2B737473732B2B2B2B2B -2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB00345B006456861B006234473B00345B00E456861 -B00E2344B00E45B00F456861B00F23442B01B0144568B01423442B732B2B2B2B2B2B2B2B -2B2B2B2B2B2B2B2B7373737373737373732B732B732B2B2B2B2B73732B2B2B2B732B2B2B -2B00752B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73747373742B73742B400C3736 -26251F13120D0C0504022C20B003254523452361688A204568208A234460442D2C4B5258 -45441B2121592D2C202045684420B001602045B0467668188A4560442D2CB0122BB00225 -45B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C -60B0022523442121212D2CB100032545685458B0032545B0032545606820B004252344B0 -042523441BB00325204568208A2344B00325456860B003252344592D2CB0032520456820 -8A2344B00325456860B0032523442D2C4B525845441B2121592D2C462346608A8A462320 -468A608A61B8FF8062232010238AB14B4B8A70456020B0005058B00161B8FFBA8B1BB046 -8C59B0106068013A2D2C2045B003254652583F1B2111592D2C4B53234B515A5820458A60 -441B2121592D2C4B53234B515A58381B2121592D061E061405F005D1047C045D03DD0010 -0000FFE7FFE1FE78FE64FE590394001FFFFF009600AA00B900C600CEFFFFFFFFFFFFFFFF -00BC00C2FFFFFFFF007600B200C000CBFFFFFFFFFFFFFFFFFFFFFFFF0081009400A600CC -00DA00EFFFFFFFFFFFFFFFFF0098009E00AB00B0FFFFFFFFFFFFFFFFFFFFFFFF00900098 -009E00A400A900AE00B300BA00C3FFFF00880091009800A500ACFFFFFFFFFFFFFFFFFFFF -006F0087008F009B00A000D3011DFFFFFFFFFFFF00C3021401C2FFFFFFFF00E9000C02D1 -0173018E001A002C0044005C0073007E008600B200C8014C001A003D00440050005C0072 -0078009200B200B900C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003D0056005D006A -006E00B100B900C1FFFFFFFF002A003D00540064006A00B100B9FFFFFFFFFFFF0071007A -008900A100A700BB006F007A00870091009AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -008102210221007400E500B900CA019502C600AC00A700850614000A000005D1001F0000 -045D001F00000000FFE10000FE64FFF50000036202F402A2029100AF026A004C08000100 -0000000002D0000002D000000326012303AC00A8068C00C30516009B089C009505D00073 -022600A403A200B503A20093051600A7068C00D202E9009303A2009902E900FD03A2FFE2 -0516008905160116051600A1051600A70516004D051600BB051600890516009A0516007A -0516007103A2015A03A200E6068C00FE068C00F5068C010C045D00A0080000B00578001A -057C00C805960073062A00C8050F00C8049900C806340073060300C8035E008903A3002C -058B00CD047400C806BE00C805FC00C8064C007304D300C8064C0073059000C805780086 -04EE000005DB00B20578001A07E9005C057B004404EC0006057B007E03A200EF03A20046 -03A200AB068C00BA0516FFFC0516015404CE006804FC00B9042B006904FC006C04C4006A -02D0004404FC006C051000B9023200AF02C1FFC204BC00C1023200BB07C800B9051000B9 -04DB006A04FC00B904FC006C036A00B9042B006E0327003E051000B104BC003D068C0056 -04BC003C04BC003D0434005D051400AD03A2017A051400BB068C00BB0578001A0578001A -05960073050F00C805FC00C8064C007005DB00B204CE006804CE006804CE006804CE0068 -04CE006804CE0068042B006904C4006A04C4006A04C4006A04C4006A023200A00232FFEB -0232FFF502320005051000B904DB006A04DB006A04DB006A04DB006A04DB006A051000B1 -051000B1051000B1051000B1051600BB0456009A0516009F05160089051600AC045D00B9 -0516008904F600B90800009F0800009F07D000AA0516021D0516015A068C00F507E0000E -064C0073080000A1068C00D7068C00FE068C010C0516006C052200BE0516009505D100BB -068C009005A900710516008A045D0097045D0079068C006B07A4006804DB005D045D0071 -03260123068C00D2068C00860516FFDC068C00F305D10032052800A6052800AE068C00B2 -0578001A0578001A064C0073088F007807DA006A051600990800009903ACFFED03AC0096 -0226FFED022600A0068C00D2068C00AC04BC003D04EC000602E4FF9A0516000003A200BA -03A200C20500004405020044051600BB02E900FD0226FFF603ACFFF60C2C00950578001A -050F00C80578001A050F00C8050F00C8035E0089035E005D035E007E035E0089064C0073 -064C0073064C007305DB00B205DB00B205DB00B2023200BB05160136051600ED05160118 -05160113051602210516012D05160161051601560516019F05160132047E001802460018 -05780086042B006E057B007E0434005D03A2017A0634000E04E5006A04EC000604BC003D -04D800C804FC00B9068C00DC068C012304560123045600CF045600CF080000AB080000AB -0800008C0516003C0634007304FC006C035E008905780086042B006E05960073042B0069 -05960073042B006904FC006C0516FFFC02E900FD0578001A04CE00680578001A04CE0068 -062A00C8052E006C0634000E050F00C804C4006A050F00C804C4006A047400C8023200AB -047400C8025E00BB047400C803AB00BB05FC00C8051000B905FC00C8051000B9064C0073 -04DB006A059000C8036A00B9059000C8036A009205780086042B006E04EE00000327003E -04EE00000327003E05DB00B2051000B105DB00B2051000B1057B007E0434005D057B007E -0434005D048800C8064C0073068D006904FC006C04DD006A041A006D050B006A03F8000A -065200680516FFFC04FF0123045D009A094F00C806F7008904E900AF05D8000002E400D5 -047500D5089C00950296000F04D5009202D6008302D6008304D500B102D600700578001A -04CE006805960073042B006905960073042B0069050F00C804C4006A050F00C804C4006A -050F00C804C4006A0634007304FC006C0634007304FC006C0634007304FC006C060300C8 -051000B90603002005100013035E002C0232FFF2035E005F0232FFFC035E008002320001 -035E00890232008E03A3002C02C1FFC2058B00CD04BC00C104BC00C1047400C802320005 -05FC00C8051000B905FC00C8051000B9064C007304DB006A064C007304DB006A059000C8 -036A001B05780086042B006E04EE00000327003E05DB00B2051000B105DB00B2051000B1 -05DB00B2050B00B105DB00B2050B00B107E9005C068C005604EC000604BC003D026700B9 -0578001A04CE006807E0000E07A40068064C007304DB005D03A2015A07E9005C068C0056 -07E9005C068C005607E9005C068C005604EC000604BC003D0226FFED0516FFD005160089 -05BE00B1080000AB0800008C0800008A0800009901B00061051601610516021205160100 -057800070602000006F6000004510000070C000006070000074300000232FFCB0578001A -057C00C805A0001A050F00C8057B007E060300C8035E0089058B00CD057C001A06BE00C8 -05FC00C805310072064C0073060300C804D300C80561007604EE000004EC0006057B0044 -06F700B3068C006C035E007E04EC000604FC006C041A006D051000B9023200A0050D00B1 -04F600B904BC003D03A9006C051000B904FE0089023200BB04BC00C104BC003D051E00B9 -04BC003D0406006804DB006A050000B904100069050D00B104B80030069300B006820071 -02320005050D00B104DB006A050D00B106820071050F00C80657FFFF048800C8059B0073 -05780086035E0089035E007E03A3002C08F2001208D300C8068BFFFF058B00CD04EC0006 -060300C80578001A057C00C8057C00C8048800C805F7000A050F00C807C9002004ED0051 -060100C8060100C8058B00CD05E0001206BE00C8060300C8064C0073060300C804D300C8 -0596007304EE000004EC0006068D0069057B0044061700C805B2008E083E00C8085C00C8 -06440000075D00C8057200C8059C0061084600C805A6002C04CE006804EA007404C200B9 -03C500B904F9000904C4006A0662003404320041051F00B9051F00B904BC00C104F7001D -059200B9051900B904DB006A051900B904FC00B90446006A03F8000A04BC003D06BA006F -04BC003C052800B904D8008E070200B9071A00B90520000A065B00B9049100B904600053 -06B600B904CC004304C4006A0510001303C500B90460006A042B006E023200AF02320005 -02C1FFC20750001D075000B90510001304BC00C104BC003D051900B9048800C803C500B9 -080000CB096000C8051900B904560119045600EF045600E6045600B3045600E6045600F3 -045600C5000000000000000000000000000000000674007304DB006A060D00B2054700B1 -0000020900000221000001540000021D0516013605160003051601360516012505160142 -051601420516014205160125051602090516013605160142051601420516014205160142 -051601360578001A04CE00680578001A04CE00680578001A04CE00680578001A04CEFFE3 -0578001A04CE00680578001A04CE00680578001A04CE00680578001A04CE00680578001A -04CE00680578001A04CE00680578001A04CE00680578001A04CE0068050F00C804C4006A -050F00C804C4006A050F00C804C4006A050F00C804C4006A050F002904C4FFFC050F00C8 -04C4006A050F00C804C4006A050F00C804C4006A035E008902320096035E0089023200AF -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000064C007304DB006A064C0073 -04DB006A064C007304DB006A064C007304DBFFE5064C007304DB006A064C007304DB006A -064C007304DB006A0674007304DB006A0674007304DB006A0674007304DB006A06740073 -04DB006A0674007304DB006A05DB00B2051000B105DB00B2051000B1060D00B2054700B1 -060D00B2054700B1060D00B2054700B1060D00B2054700B1060D00B2054700B104EC0006 -04BC003D04EC000604BC003D04EC000604BC003D04EC000604BC003D04FC006C000000ED -0516008A0000001F00000380090E09000303050507070B07030404070703050304070707 -070707070707070404070707060A08070808070608080505070609080907090707070808 -090707070404040706060606060606030606030306030906060606040604060607060605 -060506070808080708090806060606060606060606060303030306060606060606060606 -07050707060507060909090606070A090907070707060607070607050507090606050707 -0707070606070808090A0907090404020207070607030604040606070302040E08070807 -070505050509090908080803060606060606060606060603070607050508060706070607 -070505050909090608060507060806080606060308060806080608070607060603060306 -040806080609060704070407060704070408060806070507050609070606050605090606 -050B09060703050B03050303050308060806080607060706070608060806080608060806 -050305030503050305030706060603080608060906090607040706070408060806080608 -06090707060308060A090906040907090709070706020607060909090902060606080809 -060908090308070607070805070809080709080706070707090905070605060306060505 -060603060606060506060506050907030606060707080608070505050A0A070707070807 -070607070906080807070908090807080707070708070909080907080907060606040606 -070506060606070606060606050609060705090907080606080606060406060303030909 -060606060505090B06050505050505050000000009060806000000000606060606060606 -060606060606060806080608060806080608060806080608060806080608060706070607 -060706070607060706070605030503000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000090609060906 -090609060906090609060906090609060906080608060806080608060806080607060706 -07060706060007000A0F0A000404040508070B0703050507080405040507070707070707 -0707070505080808060A070708080606080805050706090709070908070708070B070707 -0505050806060707050707040707030307030B0707070704060407060707060606050608 -070708060709080707070707070507070707030303030707070707070707070707050707 -060507060A0A0A0606080A090A080808070706070807070505080A070604080807080706 -06080707090B0A070A0505030308080607040605050606070403050F0706070606050505 -050909090808080306060606060606060606060307060706050806070607070808050505 -0A0A0A060807050706080508050706040707070708070806070607060306030605070707 -0709070804080407060704070408070807070607060609090707050705090606050C0906 -0704060B0306040406040707080508050607060706070807080708070807080705030503 -0503050305030707070603070707070907090708040706070408070807080708070B0707 -060307070A0A0907050B070B070B070706030607070A0A0A0A0206060607070906090909 -030707070607080507070907070908070707070709090507070507030707070507070307 -0607060507070507060909030707070906080608070505050B0B08070708070707060706 -0906080807070908090807080707090709070B0B080907080A0707070605060707050707 -0706070707070705050609070706090A0708060608060707050606030303090907070607 -06050A0C0705050505050505000000000907080700000000060606060606060606060606 -060606070707070707070707070707070707070707070707070707060706070607060706 -070607060706070503050300000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000009070907090709070907 -090709070907090709070907090708070807080708070807080708070706070607060706 -070007000B110B000404040509070C080305050709040504050707070707070707070705 -05090909060A080809090706090805050806090809070908080708080B08070805050509 -07070707060707040707030407030B070707070506040707090707060705070908080907 -080908070707070707060707070703030303070707070707070707070706070707060707 -0B0B0B0707090B090B090909070707080908070606090B07060409090709080707090808 -090C0B070B05050303090907070407050507070704030511080708070705050505090909 -08080803070707070707070707070603080608060509070707070709090606060B0B0B07 -090705080609060906070704080708070907090707070706030603060508070807090708 -05080508060704070408070807080608060609090707060705090707060D0A070804060C -040704040704080709060906070707070707090709070907080708070503050305030503 -05040807070603080708070907090708050806070408070807080708070B090707030807 -0B0B0907050B090B090B090707030707080B0B0B0B02070707080809060A090903080808 -070808050808090807090807070707080909050707060703070707050707030707070706 -07070607070909030707070907090609080505050D0C090808080808080608070B070808 -08080908090807090708090809080B0C090A07090B080707070508070906070707070707 -07070706050709070807090A080907070A0707070507060303040A0B0707070706050B0D -070606060606060600000000090708070000000007070707070707070707070707070708 -070807080708070807080708070807080708070807080707070707070707070707070707 -070707050305030000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000907090709070907090709070907 -090709070907090709070807080708070807080708070807070707070707070707000700 -0C120C00040405060A080D09030505080904050405080808080808080808080505090909 -070C0808090908070909050508070A090A080A08080709080D0807080505050A08080808 -060808040808030407030B0808080805070508070B0707070805080A08080908090A0908 -08080808080608080808030303030808080808080808080808070808080708070C0C0C08 -08090C0A0C090909080808090A080807070A0B080705090A080A0908080A08080A0D0D08 -0C06060303090A070704080505080808040306120808080808050505050A0A0A09090903 -0808080808080808080807030807080705090707070808090A0707070C0C0C0809080508 -07090609060808040808080809090908080808070307040706090809080A080805080508 -07070507050908090808070807070A0B0808060807090808070E0A070904070D04070404 -070408080906090608080808080809080908090809080908050305030503050305040807 -070703090809080A080A0808050807070509080908090809080D0B07070408080C0B0A08 -050D0B0D0B0D0B0707030808090C0C0C0C0308080808090A060B090B0308080808080905 -08080A09080A0908080707080B0A05070806080308070706080803080708070608080608 -070B0B030808080B080A0709080505050D0D0A0808090808080709080D07090908090A09 -0A09080907080B0809090D0E090B08090C080808070608080B0608080707080808080806 -07070B0709080B0C080907080B0708080608070303040B0B0807070807060C0E08070707 -07070707000000000A080908000000000808080808080808080808080808080808080808 -080808080808080808080808080808080808080808080808080808080808080808080805 -030503000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000A080A080A080A080A080A080A080A080A08 -0A080A080A0809080908090809080908090809080707070707070707080008000D140D00 -050505050A080D09030606090905070506080808080808080808080606090909070D0908 -090908080909050608070B090A080A08090909090D0909090606060B0808080808080805 -0808030407030B0808080805070608080B0708070807080B09090908090A090808080808 -080808080808030303030808080808080808080808070808080708080D0D0D0808090C0A -0D090909080808090B090807070B0B080705090B080B0908080B09090A0E0D080D060603 -03090B080905080606080808050306140908090808050505050A0A0A0909090308080808 -08080808080807030907090707090809080808090B0707070D0D0D080908050907090809 -080808050908090809080908080808070307040706090809080A08080508050907090609 -060908090809070907070A0B08080708070B0808070F0B080A05070E0408050508050908 -090809080808080808080908090809080908090805030503050305030604080707070309 -0809080A080A0808050907090609080908090809080D0B09080409080C0B0A08060D0B0D -0B0D0B0908030808090D0D0D0D0308080809090A060B0A0C030908090809090508090B09 -080A0908090909090B0B05090807080308080906080803080808080708080708080B0B03 -0808080B080A0709090505060F0D0B080909090808070A080D080909080A0B090A090809 -09090B090A090D0E0A0C08090D080808080608080B070808080809080808080807080B07 -09080B0C080907080B0808080608070303040C0D0808080807060D0F0807070707070707 -000000000A08090900000000080808080808080808080808080808090809080908090809 -080908090809080908090809080908080808080808080808080808080808080503050300 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000A080A080A080A080A080A080A080A080A080A080A08 -0A0809080908090909090909090909090908090809080908080008000E150E0005050606 -0B090F0A040606090B050705060909090909090909090906060B0B0B080E0A0A0A0B0908 -0B0A05060A080B0A0B080B0A0A090A0A0F0A090A0606060B090908090709080509090305 -08030D0909090906080609080B0908080906090B0A0A0A090A0B0A080808080808070808 -0808030303030909090909090909090909080909090809090E0E0E09090B0E0B0E0B0B0B -0909090A0B0A0908080B0D0908060B0B090B0A09090B0A0A0B0F0E090E060604040B0B08 -0905090606090909050406150A090A0909050505050B0B0B0A0A0A030909090909090909 -090908030A080A08060B09090808090B0B0808080E0E0E090B09050A080A070A07090905 -0A080A080B090B090809080803080408060A090A090B090A060A060A08090609060A090A -090A080A08080B0B09090709070B090908100C080A05080F0508050508050A080A070A07 -0908090809080B090B090B090A090A09050305030503050306050A080808030A090A090B -090B090A060A0809060A090A090A090A090F0B0908040A080E0D0B09060F0B0F0B0F0B09 -080409090A0E0E0E0E030909090A0B0C070C0B0C030A0A0A090A0A050A0A0B0A090B0A08 -0909090A0B0B05090907090309090906090903080809080709090709080B0B030909090B -090B080A0A050506100F0B0A090B0A0A0A080A090F090B0B0A0A0B0A0B0A080A09090B0A -0B0A0D0E0B0D0A0A0E0A0809080709080B07090908090A090909090807080B090A080B0C -090B08080C0808090708080303050D0D0908080908070E10090808080808080800000000 -0B090B0A000000000909090909090909090909090909090A080A080A080A080A080A080A -080A080A080A080A080A0809080908090809080908090809080908050305030000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000B090B090B090B090B090B090B090B090B090B090B090B090A09 -0A090B0A0B0A0B0A0B0A0B0A0908090809080908090009000F170F00050506070C0A100B -0407070A0C050705070A0A0A0A0A0A0A0A0A0A07070C0C0C080F0A0A0B0B09090C0B0507 -0A080D0B0C090C0A0A090B0A0F0A090A0707070C0A0A0909080909050909030509030F09 -0A090906080609090D0909090A070A0C0A0A0B090B0C0B09090909090908090909090303 -0303090A0A0A0A0A090909090A080A0A0A080A090F0F0F0A0A0C0F0C0F0C0C0C0A090A0B -0C0B0A08080C0E0A08060C0C0A0C0B0A0A0C0A0A0C100F0A0F070704040C0C0909050A07 -0709090A050407170A090A0909050505050C0C0C0B0B0B030A0A0A0A0A0A0A0A0A0A0803 -0A080A09070B09090909090C0C0808080F0F0F0A0C09050A080B080B08090A050A090A09 -0B0A0B090909090803080408070B090B090C0A0A060A060A08090609060B090B090A090A -09090C0D090A080A070B0A0908110D080B0508100509050509050A090B080B0809090909 -09090C090C090C090B090B09050305030503050307050A090908030B090B090C0A0C0A0A -060A0809060B090B090B090B080F0D0909050A090F0E0C0A070F0D0F0D0F0D0909040A0A -0B0F0F0F0F030A0A0A0A0B0D070D0B0D030A0A0B090A0B050A0A0D0B0A0C0B090A09090A -0D0C0509090809030909090709090309090909080A0A0809090B0D03090A090D090C090B -0A05050711110C0A0A0B0A0A0A090B090F090B0B0A0B0D0B0C0B090B090A0D0A0B0B0F10 -0C0E0A0B100A0909090709090D08090909090A090A09090807090D090A090D0E0A0C0908 -0D0909090708080303050E0E0909090909070F120908080808080808000000000C0A0C0A -000000000A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A090A090A090A090A090A090A090A -090A090A090A090909090909090909090909090909090905030503000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B090B090C0A -0C0A0C0A0C0A0C0A090909090909090909000A0010181000060606070D0A110C0407070A -0D060706070A0A0A0A0A0A0A0A0A0A07070D0D0D09100B0B0B0C0A090C0C07070B090D0C -0D0A0D0B0A0A0C0B110B0B0B0707070D0A0A0A0A080A0A060A0A050609050F0A0A0A0A06 -09070A090D0909090A070A0D0B0B0B0A0C0D0C0A0A0A0A0A0A080A0A0A0A050505050A0A -0A0A0A0A0A0A0A0A0A090A0A0A090A0A1010100A0A0D100D100D0D0D0A0A0A0C0D0B0A09 -090D0F0A09060D0D0A0D0C0A0A0D0B0B0D11100A10070704040D0D090B060A07070A0A0A -060407180B0A0B0A0A070707070D0D0D0C0C0C050A0A0A0A0A0A0A0A0A0A09030A090B09 -070C0A0B090A0A0D0D0909091010100A0C0A070A090B080B080A0A060B0A0B0A0C0A0C0A -0A0A0A0905090509070C0A0C0A0D0A0B060B060A090A070A070C0A0C0A0B090B09090D0D -0A0A090A070D0A0A09130E0B0C060911050A06060A060B0A0B080B080A0A0A0A0A0A0C0A -0C0A0C0A0C0A0C0A070507050705070507060B090909050C0A0C0A0D0A0D0A0B060A090A -070C0A0C0A0C0A0C0A110D0B09050B0A100F0D0A07110D110D110D0B09040A0A0B101010 -10030A0A0A0B0C0E090E0C0E050B0B0B0A0B0C070B0B0D0C0A0D0C0A0B0A0B0B0D0D070B -0A090A050A0A09070A0A0509090A09080A0A080A090D0D050A0A0A0D0A0D090B0A070707 -12120D0B0B0B0B0B0B090C0A110A0C0C0B0C0D0C0D0C0A0B0A0B0D0B0C0B0F100D0E0B0B -110B0A0A0A080A0A0D090A0A090A0B0A0A0A0A0907090D090A0A0D0E0A0C09090D0A0A0A -0809090505060F0F0A09090A090810130A09090909090909000000000D0A0D0B00000000 -0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B -0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0705070500000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0A0C0A0D0B0D0B0D0B -0D0B0D0B0B090B090B090B090A000A00111A1100060607080E0B120C0508080B0E060806 -080B0B0B0B0B0B0B0B0B0B08080E0E0E09110C0C0C0D0B0A0D0D08080C090E0D0D0A0D0C -0C0A0C0C110C0A0C0808080E0B0B0A0B090B0A060B0B05060A05110B0A0B0B0709070B0A -0E0A0A090B080B0E0C0C0C0B0D0D0C0A0A0A0A0A0A090A0A0A0A050505050B0A0A0A0A0A -0B0B0B0B0B090B0B0B090B0B1111110B0B0E110D110E0E0E0B0B0B0C0E0C0B09090E100A -09070E0E0B0E0C0B0B0E0C0C0D12110B11080805050E0E0A0A060B08080B0B0B0605081A -0C0B0C0B0B080808080D0D0D0C0C0C050B0B0B0B0B0B0B0B0B0B0A050C090C09080D0A0A -0A0A0B0E0E0909091111110B0D0B080C090C090C090B0B060C0A0C0A0D0B0D0B0A0B0A09 -05090509080D0B0D0B0D0A0C070C070C090A070A070C0B0C0B0C090C090A0D0E0B0A080B -080D0B0B09140F0A0C060912060A06060A060C0A0C090C090B0A0B0A0B0A0D0B0D0B0D0B -0D0B0D0B080508050805080508060C0A0A09050D0B0D0B0D0A0D0A0C070C090A070C0B0C -0B0C0B0C0B110E0A0A050C0A11100D0A08110E110E110E0A0A050B0B0C11111111040B0B -0B0C0D0F090F0D10050C0C0C0B0C0D080C0C0E0D0B0D0D0A0B0A0A0C0F0E080A0B080B05 -0B0B0A080B0B050A0A0B0A090A0B090B0A0E0E050B0A0B0E0B0D0A0C0C08080813130E0C -0A0D0C0C0C0A0D0B110A0D0D0C0D0E0D0D0D0A0C0A0A0E0C0D0C12120D100C0C120C0A0A -0A080B0A0E080B0B0A0B0C0B0A0B0B09080A0D0A0C0A0F0F0B0E0A090E0A0A0B08090905 -050610100B0A0A0B0A0811140B09090909090909000000000D0A0D0B000000000B0B0B0B -0B0B0B0B0B0B0B0B0B0B0B0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B -0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A080508050000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000D0A -0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0B0C0B0D0B0D0B0D0B0D0B0D0B -0A0A0A0A0A0A0A0A0B000B00121B1200060607080F0B130D0508080B0F070807080B0B0B -0B0B0B0B0B0B0B08080F0F0F0A120C0C0D0E0B0A0E0E08080C0A0F0D0E0B0E0D0C0B0D0C -120C0B0C0808080F0B0B0B0B090B0B060B0B05060B05120B0B0B0B0809070B0B0F0B0B09 -0B080B0F0C0C0D0B0D0E0D0B0B0B0B0B0B090B0B0B0B050505050B0B0B0B0B0B0B0B0B0B -0B0A0B0B0B0A0B0B1212120B0B0F120E120F0F0F0B0C0B0D0F0D0B0A0A0F110B0A070F0F -0B0F0D0C0C0F0C0C0E13120B12080805050F0F0B0B070B08080B0B0B0705081B0C0B0C0B -0B080808080E0E0E0D0D0D050B0B0B0B0B0B0B0B0B0B0A050C090C09080E0B0B0B0B0B0F -0F0A0A0A1212120B0E0B080C090D090D090B0B070C0B0C0B0E0C0E0B0B0B0B0A050A050A -080D0B0D0B0E0B0D080D080C090B070B070D0B0D0B0C090C090A0E0E0B0B090B090E0B0B -0A15100B0D070A13060B06060B060C0B0D090D090B0B0B0B0B0B0E0B0E0B0E0B0E0B0E0B -080508050805080508060C0B0B0A050D0B0D0B0E0B0E0B0D080C090B070D0B0D0B0D0B0D -0B120F0B0B050C0B12110E0B08120F120F120F0B0B050B0B0D12121212040B0B0B0C0E10 -0A100E10050C0C0D0B0C0E080C0C0F0D0C0E0E0B0C0B0B0C100E080B0B090B050B0B0B08 -0B0B050B0B0B0B090B0B090B0B0F0F050B0B0B0F0B0E0A0D0C08080814140F0C0B0E0C0C -0C0A0D0B120B0E0E0C0D0F0E0E0E0B0D0B0B0E0C0E0D13130E110C0D130D0B0B0B080B0B -0E090C0C0B0B0D0B0B0B0B0A090B0F0B0C0B10100C0E0A0A0F0B0B0B080A090505061010 -0B0B0B0B0A0812150B0A0A0A0A0A0A0A000000000E0B0D0B000000000B0B0B0B0B0B0B0B -0B0B0B0B0B0B0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0B0B0B0B0B -0B0B0B0B0B0B0B0B0B0B0B08050805000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000E0B0E0B0E0B -0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0B0B0B0B -0B0B0B0B0B000B00131D130007070709100C140E0509090C10070907090C0C0C0C0C0C0C -0C0C0C09091010100A130D0D0D0F0C0B0F0E08090D0B100E0F0B0F0D0D0C0E0D130D0C0D -090909100C0C0B0C0A0C0B070C0C06070B06120C0C0C0C080A070C0B100B0B0A0C090C10 -0D0D0D0C0E0F0E0B0B0B0B0B0B0A0B0B0B0B060606060C0C0C0C0C0C0C0C0C0C0C0A0C0C -0C0A0C0C1313130C0C10130F131010100C0C0C0E100D0C0A0A10120C0A0710100C100E0C -0C100D0D0F14130C130909050510100B0C070C09090C0C0C0705091D0D0C0D0C0C080808 -080F0F0F0E0E0E060C0C0C0C0C0C0C0C0C0C0B060D0A0D0A090F0C0C0B0C0C10100A0A0A -1313130C0F0C080D0A0D0A0D0A0C0C070D0B0D0B0F0C0F0C0B0C0B0B060B060B090E0C0E -0C0F0C0D080D080D0A0C070C070E0C0E0C0D0A0D0A0B0F100C0C0A0C090F0C0C0A16110C -0E070B14060B07070B070D0B0D0A0D0A0C0B0C0B0C0B0F0C0F0C0F0C0E0C0E0C08060806 -0806080609070D0B0B0B060E0C0E0C0F0C0F0C0D080D0A0C070E0C0E0C0E0C0E0C13100C -0B060D0B13120F0C091310131013100C0B050C0C0E13131313040C0C0C0D0E110A110E11 -060D0D0D0C0D0E080D0D100E0C0F0E0B0D0C0C0D110F080C0C0A0C060C0C0B090C0C060B -0B0C0B0A0C0C0A0C0B100F060C0C0C0F0C0F0B0D0D0808091515100D0C0E0D0D0D0B0E0C -120C0E0E0D0E100E0F0E0B0D0C0C100D0E0E14140F110D0D140D0B0C0B090C0B0F0A0C0C -0B0C0D0C0C0C0C0A090B100B0D0C11110C0F0B0A100B0B0C090A0A06060711110C0B0B0C -0B0913160C0A0A0A0A0A0A0A000000000F0C0E0C000000000C0C0C0C0C0C0C0C0C0C0C0C -0C0C0C0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0C0B0C0B0C0B0C0B0C -0B0C0B0C0B0C0B0806080600000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000F0C0F0C0F0C0F0C0F0C -0F0C0F0C0F0C0F0C0F0C0F0C0F0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0C0B0C0B0C0B0C0B -0C000C00141E140007070809100D160F0509090D10070907090D0D0D0D0D0D0D0D0D0D09 -091010100B140E0E0E0F0D0C100F08090E0B110F100C100E0E0C0F0E140E0C0E09090910 -0D0D0C0C0A0C0C070C0D06070C06130D0C0C0C090A080D0C100C0C0B0D090D100E0E0E0D -0F100F0C0C0C0C0C0C0A0C0C0C0C060606060D0C0C0C0C0C0D0D0D0D0D0B0D0D0D0B0D0C -1414140D0D101310141010100D0D0D0F100E0D0B0B10130C0B0810100D100F0D0D100E0E -1015140D140909050510100C0C070D09090D0D0D0705091E0E0D0E0D0D08080808101010 -0F0F0F060D0D0D0D0D0D0D0D0D0D0B060E0A0E0B09100C0C0C0C0C10100B0B0B1414140D -100C080E0A0E0A0E0A0C0D070E0C0E0C0F0D100D0C0D0C0B060B060B090F0D0F0D100C0E -090E090E0A0C080C080F0D0F0D0E0B0E0B0B10100C0C0A0D0A100D0C0B17110C0F070B16 -060C07070C070E0C0E0A0E0A0D0C0D0C0D0C100C100C100C0F0D0F0D0806080608060806 -09070E0C0C0B060F0D0F0D100C100C0E090E0A0C080F0D0F0D0F0D0F0D14100C0C060E0C -1313100C091410141014100C0C050D0D0E14141414040D0D0D0E0F110B120F12060E0E0E -0D0E0F080E0E110F0D100F0C0D0C0C0E1110080C0C0A0D060D0C0C090D0C060C0C0D0C0A -0C0D0A0D0C1010060D0C0D100D100B0E0E0808091616100E0C0F0E0E0E0B0F0D130C0F0F -0E0F110F100F0C0E0C0C100E0F0E151510120E0E150E0C0C0C090C0C100A0D0D0C0C0E0D -0C0D0C0B0A0C110C0D0C12120D100B0B110C0C0D090B0A06060712120D0C0C0D0B091417 -0D0B0B0B0B0B0B0B00000000110C0F0D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E -0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0D0C0D0C0D0C0D0C0D0C0D0C0D -0C0D0C080608060000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000100C100C100C100C100C100C100C -110C110C110C110C110C0F0D0F0D0F0D0F0D0F0D0F0D0F0D0C0C0C0C0C0C0C0C0C000D00 -152015000707080A110D170F060A0A0D11080A080A0D0D0D0D0D0D0D0D0D0D0A0A111111 -0B150E0E0F100D0C1010080A0F0C1210110D110F0E0D0F0E150E0D0E0A0A0A110D0D0D0D -0B0D0D070D0D06070C06140D0D0D0D090B080D0C110C0C0B0D0A0D110E0E0F0D10110F0D -0D0D0D0D0D0B0D0D0D0D060606060D0D0D0D0D0D0D0D0D0D0D0B0D0D0D0B0D0D1515150D -0D111411151111110D0D0D0F110F0D0B0B11140D0B0811110D110F0E0E110E0E1116150D -150A0A060611110C0D080D0A0A0D0D0D08060A200E0D0E0D0D080808081111110F0F0F06 -0D0D0D0D0D0D0D0D0D0D0C060E0B0E0B0A100D0D0C0D0D11110B0B0B1515150D100D080E -0B0F0B0F0B0D0D080E0D0E0D100E100D0D0D0D0C060C060C0A100D100D110D0F090F090E -0B0D080D080F0D0F0D0E0B0E0B0C11110D0D0B0D0A110D0D0B18120D0F080C17070D0707 -0D070E0D0F0B0F0B0D0D0D0D0D0D100D100D100D100D100D08060806080608060A070F0C -0C0C06100D100D110D110D0F090E0B0D080F0D0F0D0F0D0F0D15110D0C060E0D1414110D -0A1511151115110D0C060D0D0F15151515040D0D0D0E10120B131013060E0E0F0D0E1008 -0F0E12100E11100D0E0D0D0E1211080D0D0B0D060D0D0C0A0D0D060C0C0D0C0B0D0D0B0D -0C1111060D0D0D110D110C0F0E08080A1717110F0D100E0E0E0C100D140D10100F0F1210 -11100D0F0D0D110E100F161610130E0F160F0D0D0C0A0D0D110B0D0D0C0D0F0D0D0D0D0B -0A0C120C0E0D12130D110C0B120D0D0D0A0B0B06060713130D0C0C0D0C0A15190D0B0B0B -0B0B0B0B00000000120D100D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0D0E0D0E -0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D08 -060806000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000110D110D110D110D110D110D110D120D120D -120D120D120D0F0D0F0D100D100D100D100D100D0D0C0D0C0D0C0D0C0D000D0016211600 -0808090A120E1810060A0A0E12080A080A0E0E0E0E0E0E0E0E0E0E0A0A1212120C160F0F -0F110E0D11110A0A0F0C1310110D110F0F0E100F160F0E0F0A0A0A120E0E0D0E0B0E0D08 -0E0E06080D06150E0D0E0E090B090E0D120D0D0C0E0A0E120F0F0F0E1011100D0D0D0D0D -0D0B0D0D0D0D060606060E0D0D0D0D0D0E0E0E0E0E0C0E0E0E0C0E0E1616150E0E121511 -161212120E0E0E1012100E0C0C12150D0C0912120E12100E0E120F0F1118160E160A0A06 -0612120D0E080E0A0A0E0E0E08060A210F0E0F0E0E0A0A0A0A111111101010060E0E0E0E -0E0E0E0E0E0E0C060F0B0F0C0A110D0E0D0D0E12120C0C0C1616160E110E0A0F0B0F0B0F -0B0E0E080F0D0F0D110E110E0D0E0D0C060C070C0A100E100E110D0F090F090F0B0E090E -09100E100E0F0C0F0C0C11120E0D0B0E0B110E0E0C1A130E10080C18070D08080D080F0D -0F0B0F0B0E0D0E0D0E0D110E110E110E110E110E0A060A060A060A060A080F0D0D0C0610 -0E100E110D110D0F090F0B0E09100E100E100E100E16120E0D070F0D1515110D0A161216 -1216120E0D060E0E1016161616050E0E0E0F11130C131114060F0F0F0E0F110A0F0F1310 -0E11110D0F0E0E0F13120A0E0E0B0E060E0E0D0A0E0E060D0D0E0D0B0D0E0B0E0D121206 -0E0D0E120E110C0F0F0A0A0A1918120F0E110F0F0F0C100E150E11110F10131111110D0F -0E0E120F1110171711140F0F17100D0E0D0A0E0D120C0E0E0D0E0F0E0D0E0E0C0B0D130D -0E0D13140E110D0C120D0D0E0A0C0B06060814140E0D0D0E0C0A161A0E0C0C0C0C0C0C0C -00000000120D110F000000000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0D0F0D0F0D0F0D0F -0D0F0D0F0D0F0D0F0D0F0D0F0D0F0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0A060A0600 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000110D110D110D110D110D110D110D120D120D120D120D -120D100E100E110F110F110F110F110F0E0D0E0D0E0D0E0D0E000E00172317000808090B -130F1911060A0A0F13080A080A0F0F0F0F0F0F0F0F0F0F0A0A1313130D17101010120F0D -12110A0A100D1311120E1210100E111017100E100A0A0A130F0F0E0E0C0E0E080E0F0608 -0E06160F0E0E0E0A0C090F0E130E0E0C0F0A0F131010100F1112110E0E0E0E0E0E0C0E0E -0E0E060606060F0E0E0E0E0E0F0F0F0F0F0C0F0F0F0D0F0E1717160F0F13161217131313 -0F0F0F1113100F0D0D13160E0D0913130F13110F0F1310101219170F170B0B060613130E -0E080F0A0A0E0E0F08060B23100F100F0F0A0A0A0A121212111111060F0F0F0F0F0F0F0F -0F0F0D06100C100C0A120E0E0E0E0E13130C0C0C1717170F120E0A100C100C100C0E0F08 -100E100E120F120F0E0F0E0D060D070D0B110F110F120E100A100A100C0E090E09110F11 -0F100C100C0D12130E0E0C0F0B120F0E0D1B140E11080D19070E08080E08100E100C100C -0F0E0F0E0F0E120E120E120E110F110F0A060A060A060A060A08100E0E0D06110F110F12 -0E120E100A100C0E09110F110F110F110F17130E0E07100E1616120E0A1713171317130E -0E060F0F1117171717050F0F0F1011140C141115061010100F10110A101013110F12110E -0F0E0E1014130A0E0E0C0F060F0E0E0B0F0E060E0E0F0E0C0E0E0C0F0E1313060F0E0F13 -0F120D10100A0A0A1A1913100E111010100D110F160E11111011131112110E100E0E1310 -121018181215101018100E0E0E0B0E0E120C0F0F0E0E100F0E0F0E0C0B0E130E0F0E1414 -0F120D0D130E0E0F0B0D0C06060815150F0E0E0F0D0B171B0F0C0C0C0C0C0C0C00000000 -130E1110000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E10 -0E100E100E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A060000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000120E120E120E120E120E120E120E130E130E130E130E130E110F -110F111011101110111011100E0E0E0E0E0E0E0E0E000F00182518000808090B140F1A11 -060B0B0F14090B090B0F0F0F0F0F0F0F0F0F0F0B0B1414140D18101011130F0E13120A0B -110D1412130E1311100F121018100F100B0B0B140F0F0E0F0D0F0E080F0F06080E06170F -0F0F0F0A0D090F0E140E0E0D0F0B0F141010110F1213120E0E0E0E0E0E0D0E0E0E0E0606 -06060F0F0F0F0F0F0F0F0F0F0F0D0F0F0F0D0F0F1818170F0F141713181414140F0F0F11 -14110F0D0D14170F0D0914140F14110F0F141010131A180F180B0B060614140E0F090F0B -0B0F0F0F09060B25100F100F0F0A0A0A0A131313121212060F0F0F0F0F0F0F0F0F0F0D06 -100D100D0B130F0F0E0F0F14140D0D0D1818180F130F0A100D110D110D0F0F09100E100E -1310130F0E0F0E0D060D070D0B120F120F130F110A110A100D0F090F09120F120F100D10 -0D0E13140F0F0C0F0C130F0F0D1C150F12090D1A080F09090F09100E110D110D0F0E0F0E -0F0E130F130F130F120F120F0A060A060A060A060B08110E0E0D06120F120F130F130F11 -0A100D0F09120F120F120F120F18140F0E07100E1717130F0B1814181418140F0E060F0F -1118181818050F0F0F1012150D151216061010110F10120A111014121013120E100F0F10 -15140A0F0F0C0F060F0F0E0B0F0F060E0E0F0E0C0F0F0C0F0E1414060F0F0F140F130E11 -100A0A0B1B1A14110F121010100E120F170F12121112141213120E110F0F141012111919 -1316101119110E0F0E0B0F0E130D0F0F0E0F110F0F0F0F0D0C0E140E0F0F15150F130E0D -140E0E0F0B0D0D06060816160F0E0E0F0E0B181C0F0D0D0D0D0D0D0D00000000130F1210 -000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E100E100E10 -0E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A06000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000130F130F130F130F130F130F130F130F130F130F130F130F120F120F1210 -12101210121012100F0E0F0E0F0E0F0E0F000F001B291B000A0A0B0C16111D14070C0C11 -160A0C0A0C111111111111111111110C0C1616160F1B12131315111015140B0C130F1714 -15101513121114121B1311130C0C0C16111110110E11100A1111070910071A111011110C -0E0B11101610100E110C1116121213111415141010101010100E10101010070707071110 -1010101011111111110F1111110F11111B1B1A1111161B151B161616111111141613110F -0F161A100F0B16161116141111161212151D1B111B0C0C0707161610110A110C0C111111 -0A070C2912111211110B0B0B0B15151514141407111111111111111111110F07120E130E -0C15111110101116160F0F0F1B1B1B1115110B120E130E130E11110A1210121015111511 -1011100F070F080F0C141114111510130C130C120E110B110B14111411130E130E0F1516 -11100E110D1511110F1F1811140A0F1D09100A0A100A1210130E130E1110111011101511 -15111511141114110B070B070B070B070C091310100F071411141115101510130C120E11 -0B14111411141114111B1611100812101B1A15100C1B161B161B161110071111131B1B1B -1B061111111214180F181419071213131113140B13131714121514101211111318160B11 -110E11071111100C111107101011100E10110E11101616071110111611150F13120B0B0C -1E1E161311141213130F14111A11141413141714151410131111161315131C1C15191213 -1C131011100D1110160E1111101113111011110E0D1017101110181811150F0F17101011 -0D0F0E0707091919111010110F0D1B20110F0F0F0F0F0F0F000000001610141200000000 -111111111111111111111111111111121012101210121012101210121012101210121012 -101210111011101110111011101110111011100B070B0700000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000015101510151015101510151015101610161016101610161014111411141214121412 -141214121110111011101110110011001D2C1D000A0A0B0D18121F15080D0D12180B0D0B -0D121212121212121212120D0D181818101D14141416121116160D0D1410181617111714 -141215141D1412140D0D0D18121211120F12110A1212090A11091C121212120C0F0B1211 -1811110F120D1218141414121617151111111111110F1111111109090909121212121212 -1212121212101212121012121D1D1C1212181D171D181818121312151815121010181C12 -100B18181218151313181414171F1C121D0D0D0808181811120A120D0D1212120B080D2C -14121412120D0D0D0D17171715151509121212121212121212121009140F140F0D161212 -11121218181010101D1D1D1216120D140F140F140F12120B141114111613161211121110 -091009100D161216121712140C140C140F120B120B15121512140F140F10171812120F12 -0E17121210221912150A101F09120A0A120A1411140F140F121112111211161216121612 -161216120D090D090D090D090D0A14111110091612161217121712140C140F120B151215 -12151215121D1812110914111D1C17120D1D181D181D181211081212151D1D1D1D061212 -12141619101A161A091414141214160D14141816131716111412121419180D12120F1209 -1212110D121209111113110F12120F12111818091212121812171014140D0D0D20201814 -12161414141016121C12161614151816171611141212181416151E1E171B14141E141112 -110E1211170F1313111214121212120F0E1118111312191A13171110181111120E100F09 -090A1B1B12111112100E1D22121010101010101000000000171216130000000012121212 -121212121212121212121214111411141114111411141114111411141114111411141112 -1112111211121112111211121112110D090D090000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000001712 -171217121712171217121712171217121712171217121512151216131613161316131613 -121112111211121112001200203120000B0B0D0F1A142217090F0F141A0C0F0C0F141414 -141414141414140F0F1A1A1A112016161619141219180D0F16121B181913191616141716 -201614160F0F0F1A141413141114130B1414090B13091F141314140E110D14131A131311 -140F141A1616161418191713131313131311131313130909090914131313131314141414 -141114141411141420201F14141A1F19201A1A1A141514171A171411111A1F13110D1A1A -141A1715151A161619221F14200F0F09091A1A13140C140F0F1414140C090F3116141614 -140D0D0D0D19191917171709141414141414141414141209161116110F1914141313141A -1A1111112020201419140D16111611161114140C16131613191519141314131209120912 -0F181418141913160E160E1611140D140D171417141611161112191A1413101410191414 -11251C14170C12220A130B0B130B16131611161114131413141319141914191418141814 -0D090D090D090D090F0B16131312091814181419131913160E1611140D17141714171417 -14201A14130A16131F1F19130F201A201A201A141309141417202020200714141416181C -111C181D091616171416180D16161B1815191813161414161C1A0D14141014091414130F -141409131314131013141014131A1A091413141A14191216160D0D0F24231A1614181616 -161218141F14181816181B181918131614141A1618172121191D161621171314130F1413 -1A111414131416141314141110131B1315131C1C151912121B1313140F121109090B1D1D -14131314120F20261411111111111111000000001A131815000000001414141414141414 -141414141414141613161316131613161316131613161316131613161316131413141314 -13141314131413141314130D090D09000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000191319131913 -19131913191319131A131A131A131A131A13171417141815181518151815181514131413 -1413141314001400213221000C0C0D0F1B152418090F0F151B0C0F0C0F15151515151515 -1515150F0F1B1B1B12211717171915131A190D0F17121C191A141A171714181721171417 -0F0F0F1B151514151115140C1515090B140920151415150E110D15141B141411150F151B -17171715191A181414141414141114141414090909091514141414141515151515121515 -1512151421212015151B201A211B1B1B151515181B171512121B2014120D1B1B151B1815 -151B17171A232015210F0F09091B1B14140C150F0F1515150C090F3217151715150D0D0D -0D1A1A1A18181809151515151515151515151309171117110F1A14141414151B1B121212 -212121151A150D17111711171115150C1714171419151A151415141209120A120F191519 -151A14170E170E1711140D140D1815181517111711131A1B15141115101A151512261D14 -180C12240B140C0C140C1714171117111514151415141A151A151A15191519150D090D09 -0D090D090F0B1714141209191519151A141A14170E1711140D1815181518151815211B14 -140A171420201A140F211B211B211B141409151518212121210715151517191D121D191E -091717171517190D17171C19151A1914161414171D1B0D14151115091514140F15150914 -1415141114151115131B1B091514151B151A1317170D0D0F25241B171419171717131915 -2014191917181C191A19141714141B17191822221A1E161722171414141015141A111515 -141417151415151210141C1415141D1D151A13121C14141510121109090B1E1E15141415 -131021271512121212121212000000001B14191600000000151515151515151515151515 -151515171417141714171417141714171417141714171417141714151415141514151415 -141514151415140D090D0900000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000001A141A141A141A141A14 -1A141A141B141B141B141B141B1418151815191619161916191619161414141414141414 -15001500253825000D0D0F111E18281B0A1111181E0D110D111818181818181818181811 -111E1E1E142519191A1D17151D1C10111A151F1C1D161D1A19171B19251917191111111E -181816171317160D17170A0D160A241716171710130F17161E1616131711171E19191A17 -1C1D1B16161616161613161616160A0A0A0A171616161616171717171814181818141817 -25252418181E241D251E1E1E1818181B1E1A1814141E2316140F1E1E181E1B18181E1919 -1D2824182511110A0A1E1E16170D1811111717180D0A11381917191717101010101D1D1D -1B1B1B0A18181818181818181818150A19131913111D17171616171E1E14141425252518 -1D171019131A131A1317180D191619161D181D17161716150A150B15111C171C171D161A -101A101913170F170F1B171B1719131913151D1E17171317121D1817142B20171B0D1528 -0C160D0D160D19161A131A131716171617161D171D171D171C171C17100A100A100A100A -110D1A1616150A1C171C171D161D161A101913170F1B171B171B171B17251E17160B1916 -24231D1611251E251E251E17160A18181B2525252508181818191C2014211C220A19191A -17191C101A191F1C181D1C1619171719201E10171713170A1717161117170A1616181613 -16171317161E1E0A1716171E171D151A1910101129291E1A171C191919151C1724171C1C -1A1B1F1C1D1C161A17171E191C1A26271D22191A261A1617161117161E13181816171A18 -1618171412161F1618162021181D15141F1616171114130A0A0D2222171616181511252B -1814141414141414000000001E161C180000000018181818181818181818181818181819 -161916191619161916191619161916191619161916191617161716171617161716171617 -161716100A100A0000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000001D161D161D161D161D161D161D16 -1E161E161E161E161E161B171B171C181C181C181C181C18171617161716171617001800 -2A402A000F0F1113221B2D1F0B13131B220F130F131B1B1B1B1B1B1B1B1B1B1313222222 -172A1D1D1D201B18212012131D17231F2119211D1D1A1F1D2A1D1A1D131313221B1B191A -161A190F1A1B0C0E190C291B191A1A1216111B19221919161B131B221D1D1D1B1F211F19 -191919191916191919190C0C0C0C1B19191919191B1B1B1B1B171B1B1B171B1A2A2A291B -1B222A212A2222221B1B1B1F221E1B1717222819171122221B221F1B1B221D1D212D291B -2A13130B0B2222191A0F1B13131A1A1B0F0B13401D1B1D1B1B121212122121211F1F1F0C -1B1B1B1B1B1B1B1B1B1B180C1D161D1613211A1A19191A22221717172A2A2A1B211A121D -161D161D161A1B0F1D191D19201B211B191B19170C170C17131F1B1F1B21191D121D121D -161A111A111F1B1F1B1D161D161821221A1A161A15211B1A1731251A1F0F172D0E190F0F -190F1D191D161D161B191B191B19211A211A211A201B201B120C120C120C120C130E1D19 -19170C1F1B1F1B211921191D121D161A111F1B1F1B1F1B1F1A2A221A190D1D192A282119 -132A222A222A221A190B1B1B1E2A2A2A2A091B1B1B1D2025172520260C1D1D1E1B1D2012 -1D1D231F1B2120191C1A1A1D2522121A1A161B0C1B1A19131B1A0C19191B1915191A151B -1923220C1B191B221B21181D1D1212132F2E221D1A201D1D1D181F1B291A20201D1F2320 -2120191D1A1A221D201E2B2C21271D1D2B1E191A19141A1922161B1B191A1D1B191B1A16 -151923191B1925251B2118172319191B1417160C0C0E26261B19191B18142A311B171717 -17171717000000002219201C000000001B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1D191D191D -191D191D191D191D191D191D191D191D191D191B191B191B191B191B191B191B191B1912 -0C120C000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000211921192119211921192119211922192219 -2219221922191F1B1F1B201C201C201C201C201C1A191A191A191A191A001B002E462E00 -10101215261D32210C15151D26111511151D1D1D1D1D1D1D1D1D1D1515262626192E1F20 -20231D1A24231215201A2722241C24201F1C221F2D201C20151515261D1D1C1D181D1B10 -1D1D0C101B0C2D1D1C1D1D1418121D1B261B1B181D151D261F1F201D2224221C1C1C1C1C -1C181B1B1B1B0C0C0C0C1D1C1C1C1C1C1D1D1D1D1D191D1D1D191D1D2E2E2D1D1D262E24 -2E2626261D1E1D2126211D1919262C1C191226261D26211E1E261F1F24312D1D2E15150C -0C26261B1C111D15151D1D1D110C15461F1D1F1D1D121212122424242222220C1D1D1D1D -1D1D1D1D1D1D1A0C1F18201815241C1C1B1C1D26261919192E2E2E1D241D121F18201820 -181D1D111F1C1F1C231E241D1B1D1B1A0C1A0E1A15221D221D241C201420141F181C121C -12221D221D201820181A24261D1C181D17241D1D1936281C22111A320F1C10101C101F1C -201820181D1B1D1B1D1B241D241D241D231D231D120C120C120C120C1510201B1B1A0C22 -1D221D241C241C20141F181C12221D221D221D221D2D261C1B0E1F1C2E2C241C152D262D -262D261C1B0C1D1D212E2E2E2E0A1D1D1D1F23281929232A0C1F20201D20231220202722 -1E24231C1F1C1C202826121C1D181D0C1D1D1B151D1D0C1B1B1D1B171C1D171D1B26250C -1D1C1D251D241A201F121215333326201C231F20201A221D2D1C23232022272324231C20 -1C1C262023212F30242A1F2030201C1C1B161D1B25181D1D1B1D201D1C1D1D19171B271B -1E1C28291D251A19271C1B1D1619180C0C102A2A1D1B1B1D1A162E361D19191919191919 -00000000251C231E000000001D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1F1C1F1C1F1C1F1C1F -1C1F1C1F1C1F1C1F1C1F1C1F1C1F1C1D1B1D1B1D1B1D1B1D1B1D1B1D1B1D1B120C120C00 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000241C241C241C241C241C241C241C251C251C251C251C -251C221D221D231E231E231E231E231E1C1B1C1B1C1B1C1B1D001D00324C320012121417 -292036240D17172029121712172020202020202020202017172929291B3222222327201D -27261517231C2A25271E2723221F252231221F221717172920201E1F1A1F1E121F200F11 -1E0F31201E1F1F151A14201E291E1E1A20172029222223202527251E1E1E1E1E1E1A1E1E -1E1E0F0F0F0F201E1E1E1E1E20202020201B2020201B201F323231202029322732292929 -202020242923201B1B29301E1B1429292029242020292222273531203217170D0D29291E -1F122017171F1F20120D174C2220222020151515152727272525250F2020202020202020 -20201C0F221A221A17271F1F1E1E1F29291B1B1B32323220271F15221A231A231A1F2012 -221E221E272027201E201E1C0F1C0F1C1725202520271E23152315221A1F141F14252025 -20221A221A1C27291F1E1A201928201F1B3A2C1F25121C36101E12121E12221E231A231A -201E201E201E271F271F271F26202620150F150F150F150F1711231E1E1C0F2520252027 -1E271E2315221A1F14252025202520252031291F1E0F221E3230271E173129312931291F -1E0D202024323232320B20202022262C1B2C262D0F2222232022261523222A252027261E -221F1F222C29151F1F1A200F201F1E17201F0F1E1E201E191E1F19201E29290F201E2029 -20281C2322151517383729231F262222221C2520311F262623252A2627261E231F1F2922 -26243434272E222334231E1F1E181F1E281A20201E1F23201E201F1B191E2A1E201E2C2C -20281D1B2A1E1E20181B1A0F0F112E2E201E1E201C18323B201B1B1B1B1B1B1B00000000 -281E262100000000202020202020202020202020202020221E221E221E221E221E221E22 -1E221E221E221E221E221E201E201E201E201E201E201E201E201E150F150F0000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000271E271E271E271E271E271E271E281E281E281E281E281E2520 -2520262126212621262126211F1E1F1E1F1E1F1E1F00200036523600131315192C223A27 -0F1919222C141914192222222222222222222219192C2C2C1D362525262A221F2A291719 -251E2E282B212B2625212825352521251919192C222220221C22201322220F13200F3522 -212222171C1522202C20201C2219222C25252622282B282020202020201C202020200F0F -0F0F22212121212122222222221D2222221D222136363522222C362B362C2C2C22232227 -2C26221D1D2C34211D152C2C222C2723232C25252B3A35223619190F0F2C2C2021142219 -19222222140F19522522252222171717172B2B2B2828280F222222222222222222221E0F -251C251C192A21212021222C2C1D1D1D363636222A2217251C261C261C22221425202520 -2A232A222022201E0F1E101E19282228222B2126172617251C2115211528222822251C25 -1C1F2B2C22211C221B2B22221D3F2F2127141E3A1121131321132520261C261C22202220 -22202A222A222A2229222922170F170F170F170F19132520201E0F282228222B212B2126 -17251C21152822282228222822352C212010252036342B2119352C352C352C21200F2222 -27363636360B22222225292F1D3029310F2525262225291725252E28232B292124212125 -2F2C1721221C220F2221201922220F202023201B21221B22202C2C0F2221222C222B1F26 -251717193C3C2C2521292525251F28223521292925282E292B29212621212C2529263838 -2A32252638262021201922202B1C2323202226222122221D1B202D2023212F30232B1F1E -2D202022191E1C0F0F133131222020221F19363F221D1D1D1D1D1D1D000000002C212924 -000000002222222222222222222222222222222520252025202520252025202520252025 -2025202520252022202220222022202220222022202220170F170F000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000002B212B212B212B212B212B212B212C212C212C212C212C21282228222924 -29242924292429242120212021202120220022003A583A001414171B2F253E2A101A1A25 -2F151A151A252525252525252525251A1A2F2F2F203A2828292D25212D2C181A2820312B -2E232E2828242A28392824281A1A1A2F252523241E24231424250F14220F382523242419 -1E1725222F22221E251A252F282829252B2E2A2323232323231E232323230F0F0F0F2523 -2323232325252525251F2525252025243A3A3925252F392E3A2F2F2F2525252A2F292520 -202F372320172F2F252F2A25252F28282E3E39253A1B1B10102F2F222415251A1A242425 -15101B582825282525181818182E2E2E2A2A2A0F25252525252525252525210F281E281E -1A2D23242223242F2F1F1F1F3A3A3A252D2418281E291E291E242515282328232D262D25 -232523200F2011201B2B252B252E2328192819281E241724172A252A25281E281E212E30 -24231E251D2E2524204333242A15203E1323151523152823291E291E2523252325232D24 -2D242D242C252C25180F180F180F180F1A14282222200F2B252B252E232E232819281E24 -172A252A252A252A25392F242211282339372E231A392F392F392F24221025252A3A3A3A -3A0C252525282C321F332C350F28282925282C182828312B262E2C2327242428332F1824 -241E250F2524221B25240F222225221D23241D2522302F0F2523252F252E21292818181A -41402F28242C282828212B2538242C2C282B312C2E2C2329242430282C293C3D2D352729 -3C292324231B24232E1E2525222428252325241F1D22312225233333252E212031232325 -1B201E0F0F14353525222225211B3A44251F1F1F1F1F1F1F000000002F232C2600000000 -252525252525252525252525252525282328232823282328232823282328232823282328 -23282325232523252325232523252325232523180F180F00000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00002E232E232E232E232E232E232E232F232F232F232F232F232A252A252C262C262C26 -2C262C262422242224222422240025004366430018181A1F372B4831121E1E2B37181E18 -1E2B2B2B2B2B2B2B2B2B2B1E1E37373725432E2E2F342A2734321D1E2E2538323528352F -2E29312E422E292E1E1E1E372B2B282A232A28182A2A12172812412A292A2A1D231A2A28 -372828232B1E2B372E2E2F2A3235312828282828282328282828121212122A2929292929 -2A2A2A2A2B242B2B2B252B2A4343412B2B374335433737372B2B2B31372F2B2525374029 -251A37372B37312B2B372E2E3548422B431F1F121237372829182B1E1E2A2A2B18121F66 -2E2A2E2A2A1D1D1D1D353535313131122B2B2B2B2B2B2B2B2B2B26122E232E231E342929 -28292A37372424244343432B342A1D2E232F232F232A2B182E282E28342B342A282A2825 -122514251F322A322A35292F1D2F1D2E23291A291A312A312A2E232E232635372A29222A -21352B2A254E3A29311825481628181828182E282F232F232A282A282A28342A342A342A -322A322A1D121D121D121D121E172E28282512322A322A352935292F1D2E23291A312A31 -2A312A312A42372928142E28434035291E4237423742372928122B2B30434343430E2B2B -2B2E323A243B323D122E2E2F2A2E321D2E2E38322B3532282D29292E3A371D292A222A12 -2A2A281F2A2A1228282B2822292A222A283737122A292A372A35262F2E1D1D1E4B4A372E -29322E2E2E26322A412932322E3138323532282F2929372E33304546343E2E2F452F2829 -28202A2835232B2B282A2F2B292B2A24212838282B293B3B2B3526253828282A20252312 -12173D3D2A28282B2620434F2B24242424242424000000003629332C000000002B2B2B2B -2B2B2B2B2B2B2B2B2B2B2B2E282E282E282E282E282E282E282E282E282E282E282E282A -282A282A282A282A282A282A282A281D121D120000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000003529 -35293529352935293529352936293629362936293629312A312A332C332C332C332C332C -29282928292829282A002B004B724B001A1A1E223D305137142222303D1B221B22303030 -3030303030303022223D3D3D294B3333343A2F2B3A381F22342A3F383B2D3B34332E3733 -4A332E332222223D30302D2F272F2D1A2F2F151A2C15492F2E2F2F20271E2F2C3D2C2C27 -3022303D3333342F383B372D2D2D2D2D2D272D2D2D2D151515152F2E2E2E2E2E2F2F2F2F -302930303029302F4B4B4930303D4A3B4B3D3D3D303030373D353029293D482E291E3D3D -303D3730303D33333B504A304B222214143D3D2C2E1B3022222F2F301B142272332F332F -2F1F1F1F1F3B3B3B37373715303030303030303030302A1533273327223A2E2E2C2D2F3D -3D2929294B4B4B303A2F1F3327342734272F301B332D332D3A313A2F2D2F2D2A152A162A -22382F382F3B2E3420342033272E1E2E1E372F372F332733272A3B3D2F2E262F253B302F -2957412E371B2A51182D1B1B2D1B332D342734272F2D2F2D2F2D3A2F3A2F3A2F382F382F -1F151F151F151F15221A342C2C2A15382F382F3B2E3B2E342033272E1E372F372F372F37 -2F4A3D2E2C17332D4A483B2E224A3D4A3D4A3D2E2C143030364B4B4B4B10303030333841 -28423944153333352F33381F34333F38313B382D322E2E33413D1F2E2F262F152F2F2C22 -2F2F152C2C302C262E2F262F2C3E3D152F2E2F3D2F3B2A35331F1F2254533D342E383333 -332A382F492E383834373F383B382D342E2E3D3339354D4E3B4533354E352D2E2D232F2D -3C2730302C2F34302E302F28252C3F2C302D4243303C2B293F2D2D2F23292715151A4545 -2F2C2C302A234B583029292929292929000000003D2E3931000000003030303030303030 -30303030303030332D332D332D332D332D332D332D332D332D332D332D332D2F2D2F2D2F -2D2F2D2F2D2F2D2F2D2F2D1F151F15000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000003B2E3B2E3B2E -3B2E3B2E3B2E3B2E3D2E3D2E3D2E3D2E3D2E372F372F393139313931393139312E2C2E2C -2E2C2E2C2F003000537E53001D1D21264435593C16262635441E261E2635353535353535 -35353526264444442D5339393A403430403E22263A2E463E4132413A39333D3952393339 -26262644353532342B34311D3435181D31185135323434232B2135314431312C35263544 -39393A343E413D3232323232322B313131311818181835323232323235353535352D3535 -352D35335353513535445241534444443535353C443B352D2D444F322D21444435443C36 -36443939415951355326261616444431331E3526263434351E16267E3934393434222222 -224141413D3D3D18353535353535353535352F18392B392C2640333331323444442D2D2D -53535335403422392B3A2B3A2B34351E39323932403640343134312E182E192E263E353E -3541323A233A23392B332133213D353D35392C392C2F414434322B34294235342D614833 -3D1E2E591B321D1D321D39323A2B3A2B3431343134314034403440343E353E3522182218 -22182218261D3A31312E183E353E35413241323A23392B33213D353D353D353D34524433 -31193932524F41322652445244524433311635353C5353535312353535393E482D493F4B -1839393A34393E223A39463E36413E323833333948442233342B35183433312635341831 -3135312A32342A34314444183432344434422F3A392222265D5C443A333E3939392F3E34 -51333E3E3A3D463E413E323A333344393F3B5657414C393A563B323331273431422C3535 -31343A353235342C293146313632494A35422F2D46323135272D2B18181D4C4C35313135 -2F275361352D2D2D2D2D2D2D0000000043323F3700000000353535353535353535353535 -353535393239323932393239323932393239323932393239323932343134313431343134 -313431343134312218221800000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000041324132413241324132 -41324132433243324332433243323D353D353F373F373F373F373F373331333133313331 -340035005C8C5C002020242A4B3A6343192A2A3A4B212A212A3A3A3A3A3A3A3A3A3A3A2A -2A4B4B4B325C3F3F40473A354745272A40334E45483748403F39433F5B3F393F2A2A2A4B -3A3A373930393720393A18203618593A3839392730243A364B3636303A2A3A4B3F3F403A -4548433737373737373037373737181818183A38383838383A3A3A3A3A323A3A3A323A39 -5C5C5A3A3A4B5B485C4B4B4B3A3B3A434B413A32324B583832244B4B3A4B433B3B4B3F3F -48625A3A5C2A2A19194B4B3639213A2A2A3A3A3A21192A8C3F3A3F3A3A27272727484848 -434343183A3A3A3A3A3A3A3A3A3A34183F303F302A4738393638394B4B3232325C5C5C3A -4739273F3040304030393A213F373F37473C473A373A373318331B332A453A453A483840 -2740273F3039243924433A433A3F303F3034484B39382F3A2E493A39326B503843213363 -1E38212138213F37403040303A373A373A37473947394739453A453A2718271827182718 -2A204036363318453A453A4838483840273F303924433A433A433A433A5B4B39361C3F37 -5B5848382A5B4B5B4B5B4B3936193A3A425C5C5C5C133A3A3A3F455032514554183F3F41 -3A3F4527403F4E453C4845373E39393F504B2739392F3A183A39362A3A391836363B362E -383A2F3A364C4B183A383A4B3A4934403F27272A67654B4039453F3F3F34453A5A394545 -40444E454845374039394B3F46425F6048553F415F413739372B393749303B3B3639403B -383B39312E364D363B3851523B4935324D37373A2B323018182054543A36363B342B5C6C -3B32323232323232000000004A38463D000000003A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3F -373F373F373F373F373F373F373F373F373F373F373F373A373A373A373A373A373A373A -373A37271827180000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000004838483848384838483848384838 -4A384A384A384A384A38433A433A463D463D463D463D463D393639363936393639003A00 -649864002323272E52406C491B2D2D4052242D242D404040404040404040402D2D525252 -37644445464D3F394E4B2A2D4538544B4F3C4F46443E494463453E452D2D2D5240403C3E -343E3C233E3F1B223B1B613F3D3E3E2B34273F3B523B3B353F2D3F524444463F4B4F493C -3C3C3C3C3C343C3C3C3C1B1B1B1B3F3D3D3D3D3D3F3F3F3F403640404037403E64646240 -4052634F6452525240404049524740373752603D3727525240524940405244444F6B6240 -642E2E1B1B52523B3E24402D2D3F3F40241B2E98443F443F3F2A2A2A2A4F4F4F4949491B -40404040404040404040381B443445352D4E3D3E3B3D3E5252363636646464404E3E2A44 -34463446343E4024443C443C4D414E3F3C3F3C381B381E382E4B3F4B3F4F3D462B462B44 -343E273E27493F493F45354535394F523E3D333F324F403E3774573D4924386C203C2323 -3C23443C463446343F3C3F3C3F3C4E3E4E3E4E3E4B3F4B3F2A1B2A1B2A1B2A1B2D22453B -3B381B4B3F4B3F4F3D4F3D462B44343E27493F493F493F493F63523E3B1E443C63604F3D -2D6352635263523E3B1B4040486464646415404040444B5736584B5B1B4445463F454B2A -4545544B414F4B3C433E3E4557522A3E3E333F1B3F3E3B2E3F3E1B3B3B403B323D3F333F -3B52511B3F3D3F513F4F3946442A2A2D706E52453E4B444545394B3F613E4B4B4549544B -4F4B3C463E3E52454C4767694E5C444667473C3D3B2F3E3C503440403B3E46403D403E35 -323B543B403D5859404F3937543C3C3F2F37341B1B225B5B3F3B3B40392F647540363636 -3636363600000000513D4C4200000000404040404040404040404040404040443C443C44 -3C443C443C443C443C443C443C443C443C443C3F3C3F3C3F3C3F3C3F3C3F3C3F3C3F3C2A -1B2A1B000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000004F3D4F3D4F3D4F3D4F3D4F3D4F3D513D513D -513D513D513D493F493F4C424C424C424C424C423E3B3E3B3E3B3E3B3E00400000020100 -000007000600000300070014B706020400060204002FCDDDCD002FCDDDCD313021112111 -2521112101000600FA800500FB000600FA0080050000000201230000020305D100030007 -0027401703030202075505080F0901005D042B035D0F051F0502052F5DE4FDE45D003FED -332F3F3130010323031323353302031AAA1CD6CCCC05D1FBC90437FA2FD3000200A803D1 -0304061400030007002640150206060307010F09400902032C0040000100042C072FED33 -5D2FED5D003F3C332F3C3130010323032303230303042B842BA82B842B0614FDBD0243FD -BD024300000200C3000005C905D1001B001F00B1407140215609740570097B137B167B17 -7B1A080A091E1D160F1501671501151E0C0F1013140B1407081F1C17001801681801181E -0502011A06190662191462700B010B03110B111903040D001B011B1B0D171A011D0410B5 -131E020509040CB50F070F1318040B00140114030F0B4F0B020B08003F5D3F5D1217392F -ED17392FED1739012F332F5D1217392F2F2F5DE42FE4313087C0C0C0C0FD5D71C0C0C0C0 -C08710C0C0C0C0FD5D71C0C0C0C0C0015D01210321152103231321032313213521132135 -2113330321133303210521032105C9FEB35C0134FEA9688168FEF2688168FED6014D5CFE -CC0157698169010E698169012AFE35FEEE5E011203A4FE8887FE5B01A5FE5B01A5870178 -8701A6FE5A01A6FE5A85FE840003009BFE9704880628002C0033003A00BC408D7D087E16 -70197620702C7A36060E16012B1B16122B230D350D3C163C24352B430D4A164C24432B5A -08532053335A356B0865206529632B6A30643A171D40090B371D382E11221D2226471B18 -312D1227373400030A067F1E011E050A11470A05060F3C1F3C0221210334207F00010031 -201818063F094F09020900112D1B1E263706031E0930064006700603062F5D33ED173932 -2F5D12392FED2F5DED12392F5D002F3333ED2F2F2F5D121739ED33332F1139392F2B3130 -5D5D011406071123112E012735331E01171E0117112E01272E01353436371133111E0117 -15232E0127111E01171E0125110E0115141601342627113E010488F2C47684E855101362 -2E348B4F28441DA38EE9D17665D4480E4BA3851E461A95A3FDD46B926C02007584788101 -7C9BCD13FE960165013127C60E351113210301B1080F0829A57994CC110110FEF2022C1D -C42E4709FE51051105209CE8019D08655A5B5CFE585E5719FE620C6200050095FFE30807 -05ED000B000F001B00270033009C40720908060A0918061A0F351808170A1818171A2908 -260A2918261A460D480F4035560D580F680E13791F7625792B76310425512F034F030203 -031F5109020F030E082B51201940190219193151130A4F0C400E020C0E2E2A0016011616 -282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D123939ED33 -2F5DED2F2F5D003FED332F5DED3F3F3FED332F5DED5D3130015D01140623222635343633 -321625012309011406232226353436333216013426232206151416333236013426232206 -1514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6BAFABB59 -64665858666459049359646658586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADC -DDE0DADA01B8AC8888ADAD8787FE17AC8888ADAD878700030073FFE1061305F0000B0018 -004500E1406F090F190F3C0C3015301D352D3E3D4F1A471D4F44791C0B6A25603F7B0576 -087B0F761D7A25703E703F090508062A06371408161D142A1437153F290C2A1D26373008 -300A4008400A490C41144F1C431D46204C21412D413C5108590D5B25690566086B0F601D -1E3F0C161D20231903B8FFC0403B12173703AA190D2C093E05233502163F230A1E082C0D -3E032F00143806142F3F0C4513201D2F38041A26001E011E1E45140D1A011A1A13152673 -4610F6ED332F5DED332F5D11121739111239392FED2FED121739003F3FED3F121739ED2B -2F12393912393931305D5D015D013426232206151416173E0113010E01070E0115141633 -323601151406070123270E01232224353436373E01372E01353436373E01333216151406 -070E0107013E0137362635031871585C744F836265C2FE221F3E1F1C24AB9D5DB7016B32 -3C017AF6E573F07FD0FEED34232368356E61353532A161ADD6181D20765E01730E0E0102 -0104A75F6D7B594B744F2387FD0001D20F312A276E4592B35B02AE6060F06DFE90E08E71 -F3C55C86312F531F48926F437932303CAF862C6F2C315A20FE96286034388A30000100A4 -03D10182061400030015400A020203010F0501002C032FED5D003F332F31300103230301 -822B882B0614FDBD0243000100B5FE64030F061400150048403709010907190119072803 -28054F01480348054F075F015F076F016F077F01780278067F07120701010C7A04010830 -000100000F1F04881610F4ED332F5D3C5D003F3F3130015D012326021110123733150E01 -070602151412171E0117030FE5B1C4C4B1E551933F3C4B493E3C9A4DFE64CB01E0012D01 -2D01E0CB0A49BF7F7BFED8A4ABFEE4807BC7450000010093FE6402ED06140015004E403D -060306131503151326012603261326154701400340134715500350136003601379007602 -700370137614151201040C750001123F040104040B1F00921710F6ED332F5D3C5D003F3F -3130015D0110020723353E01373612353402272E01273533161202EDC4B1E54D9B3B3E49 -4A3D3F9351E5B1C4023CFED3FE20CB0A45C77B80011CABA401287B7FBF490ACBFE200001 -00A70276047106140011009040094F1301114009103708B8FFC040580910375B025B0554 -0B540E6B026B05640B640E7B027B05730B730E0C01060F0A0B0E08110502060C064F0450 -0402040A0F0C01040C010F131F130200110D4010011008070C4F090109100E020304050B -060D2809700C010C2F5D33ED1739322F5D1239392F5D1239395D003F335D332F5D331217 -392F332F3331305D012B2B5D01072513231305272D013705033303251705047140FE9606 -8105FE9741017DFE8341016A068107016B40FE8403776ED5FE980168D66ECFCF6ED50167 -FE99D46ECD00000100D2001B05BA04FD000B0039402303AC01045408AC0A0F070107400D -01300D400D0200AB0A800101012A05AB07400401042F5D3CE4FD5D3CE45D5D002F5D3CE4 -FD3CE4313001211123112135211133112105BAFDDFA6FDDF0221A60221023CFDDF0221A0 -0221FDDF00010093FE8E023F011D0003003540261A012A012B0235003902450048025500 -590264007400C5030C0202035604000004021A0202022F5D332F0010F4322F3130015D09 -012313023FFEE692AE011DFD71028F00000100990231030902E600030020401401420F02 -01020F054F004F055F005F05050000022F332F5D002F5DED3130012135210309FD900270 -0231B500000100FD000001EC011D00030016400C02560108002D2F013F0102012F5DED00 -3FED31302123113301ECEFEF011D0001FFE2FED0035C0614000300364025030100050116 -01250138004900440156016701770186010A011202032F02010200010000022F332F003F -2F5D31300187ED5D87C009012301035CFD33AD02CA0614F8BC07440000020089FFE1048F -05EF000B0023004140303601390B340C3B123B18341E4501490B440C4B124B18441E0C15 -4909022149030A0F21009E250F251F25021B2106982410F6ED5D10F6ED003FED3FED3130 -5D011002212002111012212012013E01353426272E01232206070E01151416171E013332 -36048FFBFEF8FEF4F7FA0109010CF7FEF92319192423795F5E7B24221916242179645E7C -02E9FE6FFE89017C018A018D017BFE7FFCB551DB9A98E04E4D4E4E4F4AEE8E9CD2534E52 -4E00000101160000043C05D6000F003A4023054606060C030E034801080F111F11020502 -1F0F010F0F0C0E20023F036F03700303032F5D33ED39322F5D2F335D003FFD323F332FED -3130290135211121353236373E0137331121043CFCDA0136FECA3F90252E35049B013098 -03E6881514194D41FAC2000100A10000049105F000200097407B501F601F020503061116 -03151124113B05380D350E3F1D3F1E391F4B05480D450E4F1D4F1E491F5F035D045D055B -0956115F195E1B5D1C5F1D5F1E6A036406651162156F1E700274117F1A7F1C7F1E25000F -100F2D082F1C300F400F060F0F0B4A1302021F4A01081F0208211616209E220F221F2202 -101002992110F6322F5D10F6322FED1239003FFD323FED332F5D31305D015D2901353E01 -373E013534262322060723353E01333204151406070E01070E0107210491FC1069D35BC0 -8E99895BD4650A47ED6FE501042B2A27694B6BE4630321D15AB459BADB7F74834042D223 -3ADDBD5593423E784969C554000100A7FFE1047C05F0003D009540700B0B052F1A0B152F -290B262F293C3C0B35143122342F4A0B45144322432F56015905590B552F6A0B662F6A3C -780B762F74357B3C1A343A443A023B3A1E491F012D112D022D2D294A1F0931020F0D1F0D -020D0D114A090A2321371E2E1621032E1E3A37040C03A03F0F3F1F3F020C9A3E10E65D10 -E611173910ED2F2F2FED003FED332F5D3F1239ED332F5D2FFD39395D31305D011E011514 -06070E012322262735331E01333236373E01353426272E012B0135333236353426272E01 -2322060723353E01333216171E0115140607151E01040E303E4A434BCB797CF04D0F55E6 -6B3F8E2C2E2D332D2D804A5A4698B52E292B623E5FD65F0A47ED6F6DA643484AAF77307C -02CD2B826766AA3F46433B23D1384A2A292C6A5150691E1F17A67F7A36511A1A14443ED1 -233B282C30885B7CB9180E0833000002004D000004B305D1000A000D00684041040D140D -240D340D440D700D060C0D480606070C0607090D4901050503070303083F0A4F0A020A0F -0F1F0F02070C04200A090D064F060101010F061F063F0603062F5D332F5D12393333ED39 -395D2F5D003F3F12392F3CFD321239393130018710FD04C0015D01231123112135013311 -3321110104B3DDC0FD3702D1B8DDFE63FDBF01A3FE5D01A3E60348FC7202A0FD60000001 -00BBFFE1048505D1002A0070404E0A081A082B083D0835113D164B0844115A0854296A08 -7A080C1D1D1A490F251F2540250325214A25061E020F0A1F0A020A0A0E4A060A2022204F -1D011D142100201D09009F2C0F2C1F2C02099B2B10E65D10E611393910ED2F5DED2F003F -ED332F5D3F1239ED2F5DFD322F31305D011406070E012322262735331E01333236373E01 -353426272E012322060711211521113E01333216171E0104854C4248C7837AE24E0E52DC -6A4785342C2D352F34955C58A33B0380FD412B5A2179B64C505801D968BE41464B3324D3 -344928322B784F4D6A20261F180C02FFAFFE740404293437AE0000020089FFE104A705ED -0022003700644044060D160D3925333133374925423143375F01560D5020502165217531 -0E1A0329491D1313174A1D030F023549030A1A2C2F122321001209009C390F391F39022F -2109983810F6ED5D10E6113910ED2F123939003FED3F1239FD322F2FED123931305D0114 -002322262726023534123736243332161715232E01232200073E01333216171E01073426 -272E01232206070E01151416171E0133323604A7FED5D96EB445565D555D580116B93B50 -290A1C713BD7FF001554A36B5F914C5859CB373F2E703D55924D020241392E6B3F91A601 -E3E3FEE14443530112C1C6013277717F0A0DBF0F1BFEF3E5333523353DBA8D5D7A2D2014 -282A16291F9EB7352C29B1000001009A0000049505D10006004F403209010A0224014801 -4B0258027903070301000120020203000002034A050302080F081F087B02030300020204 -0F00010000042F332F5D12392F12395D003F3FFD11392F3130018710ED87C0015D090123 -012135210495FD5ED602CDFCB003FB04F2FB0E0522AF0003007AFFDE049C05F300190028 -0037009440702D2B3415332234273433441541224427453350155B195A1B5A1F54225F2B -592C5F31543354376008620E6212621960236027760E76127B2C86121DA926A62F022616 -0A2F04031D4710023548030A1A200013011313002F0A0D292100162620009D390F391F39 -0220210D0D322106973810F6ED332FED5D10E411393910ED11393911332F71ED003FED3F -ED1217395D31305D01140023222435343637352E0135342433320415140607151E010334 -26232206151416171E01173E01133426272E01270E01151416333236049CFED3E4F2FEE1 -908378730114D5DF010A7E7A8C94EDA5807EA15152258B42634C1F51762F705D5A6DBA8F -92AF019FC1FF00FAC37CC93B06409872A8E0D6A565C337063CB0024F6B7F786648692912 -3A13428EFD735C6F3816262231A86A87B09600020071FFE3048F05EF0022003700644045 -0804190429043C253C2B352E4C254C2B432E58045F175D18521B70017B250F111D324914 -294914061D020A0A0E4A060A351109232100091A009E390F391F39022C211A963810F6ED -5D10E6113910ED2F3939003FFD322F3F1239ED2FED123931305D01140207060423222627 -35331E01333212370E01232226272E01353400333216171612073426272E012322061514 -16171E01333236373E01048F595A5BFEEEB9345C240A1D6A41DDFB145DA4615C954B5859 -012CD86CB845555CCA40382F6C3F90A736402D6C424EA04601030342C3FEC270727C0B0C -BF0F1B0109E9383024343DBC83E4011E434353FEFBA49BBC342D27B4A35F782D1F152A28 -15290002015A00000249045D00030007001E4010015602050656050807002D0600010101 -2F5D3CFD3C003FED3FED313001231133112311330249EFEFEFEF0340011DFBA3011D0002 -00E6FE8E0292045D00030007004C40370A050A061A051A062A052B063504390645044806 -5504590664047404C5070F01560205060607560806063F044F04020404002D000101012F -5DFD322F5D332F0010F4322F3FED3130015D01231133130123130249EFEF49FEE692AE03 -40011DFCC0FD71028F00000100FE004D058004CB0006005E401073050105045403020306 -540001002C00B8FFE240260A1837031E0A1837031F002F0002030F000100400801300840 -080204050100004001500102012F5D332F1239395D5D002F5D335D2F2B2B31304B535887 -10FD8710FD05C059015D250135011509010580FB7E0482FC72038E4D02017C0201B4FE75 -FE75000200F5016A059703AE00030007003540200554060154060F020102400901300940 -09020405012F004000020000400101012F5D332F5D1239395D5D002F5D33ED2FED313001 -213521112135210597FB5E04A2FB5E04A2030EA0FDBCA0000001010C004D058E04CB0006 -006040107C030103045405050602540101002C01B8FFE240280A1837051E0A1837051F01 -2F0102050F010101400801300840080203050100002F013001400103012F5D332F123939 -5D5D002F5D335D2F2B2B31304B53588710FD8710FD05C059015D09013509013501058EFB -7E038EFC720482024EFDFFB4018B018BB4FDFF00000200A0000003ED05EF001C00200069 -40470F221F2224140335184F024F034F0544185C0554186904691064187418741C0C0870 -090109061A1E161612341A02081F551E08202B1F1F061F7F0901090F1509172000010000 -172F332F5D1239ED2F5DED332FED003FED333FFD322F111239395D2F31305D015D011406 -070E01071523113E01373E013534262322060723353E013332160123353303ED46393892 -52B34197303A4099796CC1380A46D760D7F9FE75CCCC047362993B39642FE1013125582D -346F56716F4423CC1B2BD1FAE2D3000200B0FF1E074E05EF0042004F00D640A206020F04 -0B050A090F1B0E1C0F3F0F4016021F041C051F1B1F1C142214271F3F1F4125022C042C05 -2F1B2F1C242220272F3F2F414740444856481D0A05052759496E09650D691A6821652766 -3F664174167B1B70277439743B0F120511081247520E1440151B371404044D53082D2D2A -510E083D311E51313D020F2D012D051143122D144A123F0B010B0F512051021829140B37 -0F0020007F000300002429376B5010F6ED332F5D123939ED5D2F5DED2F33FD32322F5D00 -3F33ED2F123939ED332F2FED332FCD2B2FED331239392F31305D015D0114020721270E01 -23222635341233321617353311333E013534022726242322040706021514121716043332 -3637150E0123222427260235341237362433320417161201112E01232206151416333236 -074E514BFE481B4A8858A8C9F6AB4970419FF32A2B5B5858FEFCA5A0FEF75F606D685F63 -010A9D56B75461A859BAFEC2727380867474013EB5C401346A6A71FD8F3F64398192747B -438602978BFEFC6B743C40FEE4E3010E212130FCB64BE159A4010C606067746262FEEF9A -A5FEEF61656716188E150F7F72730142C3B9013F7575867C7070FEC5FE4002061D19B4A6 -A3A73E000002001A0000055E05D10007000A009840694009014A0645070209090A080287 -01010114000700090A0387040104140505067C067307020334300A400A700A030A090A06 -03017A050105080F0C0106070903050C002400390042005A006A0074000700006E0C0F0C -010A052B0536054D05550565057B050705640B10E65D5D10F62F5D1217395D003F5D3C3F -39392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D005D2123032103230121 -130901055ED392FD7C92C9021E01087CFEFBFEFA019FFE6105D1FC7802DBFD25000300C8 -0000052B05D100150024003300524033050C150C270C550256157F190612112C341E1E07 -1D3408032D3407081615122C0F0F0725150071350F354035021E2C14076C3410F6FD325D -10F6ED12392F1239ED003FED3FED12392FED39393130015D011406070E01232111213216 -171E0115140607151E01013426272E012B0111213236373E01133426272E012321112132 -36373E01052B544754C99BFDF001B9A3A24A524A6C5A97AEFEB324282F8663EC01005D6E -2F2F277F3647308962FEC9010682A635383401CA6FAA37423805D118262B875E6A952D08 -1FCB0204364A171B0DFE52131E1E5FFD9A5A6A25190FFDD61B24276400010073FFE50546 -05EC002A0061404A05010D09061416011B0914152515361543145B08580A580E5B105B28 -600361147002760F70141316161A3412022A2A2634060A1600712C0F2C010F2C1F2C2F2C -3F2C6F2C0520150C682B10F6ED5D5D10F63C003FED332F3FED332F3130015D250E01070E -012322242726023534123736243332161715232E01232206070E01151416171E01333236 -373305463759483D8F56A2FEF762606C68625F010DA478EF920F7BF28A71B547454D5543 -46BB688FFA6D0E6C182A17131B5B615F0125C2B801226461663A49EB675E494D4BE5969D -E2474A476262000200C8000005B205D1000E001D003A4027391249126902680D04163408 -03173407087600010F1500741F0F1F2F1F401F601F041714076C1E10F6ED5D10F6ED5D00 -3FED3FED3130015D011402070E01232111213204171612073426272E012B011133323637 -3E0105B2B19366FBCDFE880174DA01015998AACF7A7958C68ABABA8FD5596F6F02E7CBFE -B65B3F3805D13F375FFEC4D6AFF0453227FB832A3947E800000100C80000049D05D1000B -003B402309350006100602060601053502030A350108040008010800730D0F0D01060914 -016C0C10F6FD325D10F63C5D3C003FED3FED12392F71ED31302901112115211121152111 -21049DFC2B03D5FCF1030FFCF1030F05D1B0FE68B0FDD700000100C80000047F05D10009 -0034401E053502020701350803070800034F0B02030300640B0F0B01020514076C0A10F6 -FD325D10F4322F5D003F3FED12392FED313001211121152111231121047FFD0F0287FD79 -C603B70521FE5CB0FD3305D100010073FFE305A205EC00240069404907010906060E1D06 -130E210E350E4901410E510E6506650B630E740E741C0F223540230123230C0310101734 -0C021D34030A7609012210220910216C0075260F264026021A1509682510F6ED5D10F6ED -3312392F2F5D003FED3FED332F1112392F5DED3130015D25060423222427260235100021 -32041715232E01272E01232200111000213236371121352105A27AFEDF87AEFEDE666770 -01A1016C7F010999121F763945AF6FFAFEDD0130010660BF48FE7102536E385360606101 -23C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAE00000100C80000053B -05D1000B003A4023033500081008020808050A070301050809021400780D0F0D400D500D -03080314056C0C10F6FD325D10F6FD32003F3C3F3C12392F71ED31302123112111231133 -11211133053BC6FD19C6C602E7C602D9FD2705D1FDB8024800010089000002D505D1000B -002E401909043206030A033201080D6D0A080B5A0A140305025A036D0C10F6F43210FDF4 -3210E6003FFD323FFD32313029013533112335211523113302D5FDB4C3C3024CC3C39804 -A19898FB5F000001002CFFEB02EA05D100150030401C6A017C01021233150307070B3403 -09131312140077170F170106651610E65D10F6ED332F003FFD322F3FED31305D01140623 -22262735331E01333236373E01351121352102EAEFC930A0360B29783F5C6D1A1B0FFEC5 -02010183C4D4110CB90E1E2A2728744C03659E00000100CD0000057505D1000B00A74075 -190956015C09030509280938094A0968098A09D809070F010A091E0119022A012B093901 -3909350B49014909450B5C01650B72007908100202038801C8010201B3000B000809B302 -0B0A030A840A010802050A07030105080B02030A0A0F0D20003000400004500001006E0D -400D01080314056C0C10F6FD325D10F65D5D322F123939003F3C3F3C1239393130015D87 -10C0C07AFD1804C00187107AFD5D1808C0015D71722901010711231133110133010575FE -FFFDB394C6C602D3F0FD6702979EFE0705D1FCF70309FD44000100C80000047605D10005 -002040110203043501080000070F07010414016C0610F6ED5D11332F003FED3F31302901 -113311210476FC52C602E805D1FADF00000100C8000005F605D1000C00794059560A0138 -023805360A6F0260036F05600A7F0270037F05700A0B5509560A5A0B0364037403750903 -050A020309000410043404440454046A04060404070B0903010708090A0B030502140078 -0E0F0E1F0E500E030513076C0D10F6ED5D10F6ED111739003F3C3F3C12392F5D12173931 -30015D72005D722123110123011123112109012105F6C6FE6276FE65B9010E018D018001 -130503FC970369FAFD05D1FCC3033D00000100C80000053805D10009006B404E0C071F07 -34074507510761077107077606010F0102061F0115063406440653066B0160067F017006 -0B0C010406025A01550602020701080603010408060102071300780B0F0B400B02021304 -6C0A10F6ED5D10F6FD113939003F3C3F3C12393931300172715D5D005D21230111231121 -0111330538F5FD3EB901330284B90534FACC05D1FB4004C000020073FFE105DA05F00017 -002300564042040004060B0C0B1217001706190C19125701570553075F0B580D58115F13 -53171076097915021B3415022134090A18150373250F25010F251F253F25031E150F6824 -10F6ED5D5D10F6ED003FED3FED5D3130015D011612151402070E01232224272602353412 -373624333216131000232200111000333200051E5B6163595CFBA19DFEFF5A5A61605C58 -01059AA0FF47FEFCE1E3FEFD0108DEDE0107052664FEDEB8B8FEDD6165666863630120B9 -B6012167626869FD610122013BFEC5FEDEFEDBFEC9013700000200C80000049605D10010 -001F0056403D3A143D1D4B144B1D500E540F650F071934000710070207070918340A0309 -080F211F21021115200030004000700004006F210F213F2102190714096C2010F6FD325D -10F45DED5D003F3FED12392F5DED3130015D011406070E012B01112311213216171E0107 -3426272E012B0111333236373E010496453E4DD2A0C6C6019486BA48555DCE3637307B5E -C4A778962F2F27040F63A93E4D4DFDD505D12D3039AA874D72241F1BFDAD2B2F306A0002 -0073FE7705F805F000250031008640610B0C0B120418041D190C19121518161D5C0B590D -59115C1353175719571D742010551F651F751D742D0425252135030B29341E0609760979 -150215022F34090A1E130600337326151B0009061D030F1B73330F33010F331F333F3303 -2C150F683210F6ED5D5D10E61117393210EDE62F2FED003FED3F5D123939ED3FFD322F31 -305D015D010E01232226270E01232224272602353412373624333216171612151002071E -01333236373303100023220011100033320005F83C753DAED309182D159DFEFF5A5A6160 -5C5801059AA0FF595B61DFBC0464842971181BECFEFCE1E3FEFD0108DEDE0107FE930F0D -BFB204036863630120B9B60121676268696164FEDEB8FEEFFE8A4B727E190A039F012201 -3BFEC5FEDEFEDBFEC9013700000200C80000059805D10010001F007A405408011D012D01 -3A01391D450F4814481D5A01560F59146F016902600A650B7E01750B110201B300100010 -071A34400201020205183407030105080F211F2140210311150F0D010D0D102000010019 -031400056C2010F632FD322F5D39392F5DED5D003F3C3FED12392F5DED12393130018710 -7AFD18C0015D29010121112311213216171E0115140607133426272E012B011133323637 -3E010598FEFFFE0EFEE9C601A187B448515BA28E612D342B7650E9C85E8C312D2B0250FD -B005D1232D339B77A1D93701A34063221D17FDCE212D2A6D00010086FFE5050205EC0030 -009A40790B09031F00231B08141F29082818241F242F390836103813351F362A4A084510 -4913451F4A27442A5802551B551F552D6B19661B651F662B602F7B16701F7020742A742D -86122309400E103708400E103700111A28041D06212125341D020A0A0E34060A2128151A -111500211A090074320F32703202096A3110E65D10E611393910ED2FED2F003FED332F3F -ED332F1112173931302B2B5D011406070E012322242735331604333236353426272E0127 -2E013534243332041715232624232206151416171E01171E010502514950D596A1FEFF85 -0E71012882B8CD61634BAF62C6BF013CF39D0106650E55FEEB919FC1607940EC52A6A801 -A957AA3B40483C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E28 -152CB20000010000000004EE05D1000700274018010435060303080F091F094F0903005B -0114045B4F0501052F5DF4FDE45D003F3FFD323130012111231121352104EEFDECC6FDEC -04EE0521FADF0521B000000100B2FFE1052905D1001D003A4029231223183D033D094C03 -4C0977137717081C0D031534060A1B1400761F0F1F1F1F401F030F140C6B1E10F6ED5D10 -F6ED003FED3F3C31305D011406070E01232226272E01351133111416171E01333236373E -01351133052947514DCE898CD0475147C621272C976A6B962D2721C60256A2F1504C464A -4852E8A9037BFC7B798C394142414239936D038A0001001A0000055E05D10006008C4066 -470148020205040507065706860603061400000105070457048604030414030203080144 -014B02580273017C02060005027503010303020845004A0302020103040024003A005A00 -6A00740006006E080F08010F08010B032B033503550365037B030603640710E65D5D5D10 -F65D1139395D003F3F5D1239393130015D8710FD5DC08710FD5D08C0015D090121013309 -01055EFDE2FEF8FDE2D401D301D305D1FA2F05D1FAE2051E0001005C0000078D05D1000C -00BB409E470367037903030D010B020404020505080C0B1701190318051908190B290329 -08290B3B023903320434083C09330A3A0B4B02440444084C09430A4B0B55015A0255045A -0557075909550A65016A0265046A056A09650A7F02700473087C09720A7C0B2E0C140001 -000714060506030301000300090205080B03090C0602060302083B0034064B0044067A00 -75060600720E1F0E3F0E5F0E7F0E0406670D10EE5D10E65D003F3F1217395D5D31300187 -10FD8710FD015D005D09012309012301330901330901078DFE7DDFFEC7FECEDAFE76CB01 -390134C90137013705D1FA2F04D4FB2C05D1FB2A04D6FB1E04E2000100440000053805D1 -000B00C2409775017A07020A04050A1A04150A2C04230A37094D04420A58035F04580557 -09500A570B68036D0468056709600A670B7B04730A170B14000100091408070803140201 -020514060607050407010A0B0602080302080F0D01060216022602360247020509081908 -290839084808050208070A04010406020D00160026003600470050000600660D08090619 -062906390648065F060606660C10F65D3210F65D321117392F2F5D5D5D003F3F12173931 -30018710ED8710ED8710ED8710ED005D015D09022309012309013309010538FDFE0201E5 -FE6AFE60D80207FE05E40191019A05D1FD20FD0F0265FD9B02E802E9FDA3025D00010006 -000004E605D10008007C405D2C012C04280735074001400440075007680470070A160619 -08270628085606590865066A08080814000100061405040502000D050200010004000703 -040107080402050302080F0A1F0A4F0A7F0A04005B01070114045B4F057F0502052F5DF4 -ED3910E45D003F3F1217395D3130015D8710ED8710ED015D005D09011123110133090104 -E6FDF4C6FDF2DB0197019B05D1FCBCFD7302780359FD66029A000001007E0000050805D1 -000900594036030708060813082608360846085608660876080808B30202030707033506 -03020208350108040803020707040209730B0F0B0102690A10E65D10E61139392F123939 -2F003FFD322F3FFD322F31300187107AED5D1887C0290135012135211501210508FB7603 -91FC910452FC6603B0B80469B0B3FB92000100EFFE7802F706140007001C400E05520201 -0652010B030000061F012FED332F3C003FED3FED3130012111211521112102F7FDF80208 -FEA6015AFE78079C8FF9820000010046FED003C006140003003A40280301020A0119012A -0138014B01590168017801890109011200032F000100030100006002700202022F5D332F -003F2F5D31300187ED5D87C00123013303C0ADFD33B0FED00744000100ABFE7802B30614 -0007001C400E045207010352010B031F000005012F3C332FED003FED3FED313001213521 -1121352102B3FDF8015AFEA60208FE788F067E8F000100BA02AA05D205D1000600474034 -3B0133034B0145035F0150036F0160037F0170030A69027B02020102050F031F033F035F -036F0305030305030000004F000200042F335D2F003F332F5D12393931305D015D012309 -0123013305D2C6FE39FE3AC5024D7E02AC0273FD8B0327000001FFFCFED4051AFF4C0003 -0011B6015002000005022F11332F002FED313001213521051AFAE2051EFED47800010154 -051602FA068C000300244016480159026902790204500360037003030303010000022F33 -2F002F332F5D3130015D0123013302FA95FEEFF30516017600020068FFE1041D04780026 -0033007A40540C0A0423190A152304590E511E5C2C690E601D6F2D7B0A7A14701D7B2C0A -0208283D3011401102111120084F1C011C1C183F20043141080A01080F1D011D1127021A -001D0B0091350F351F353F35032E1B0B853410F6ED5D10E6113910FD32322F5D003F3FED -3FED332F5D1112392F5DED123931305D015D2123350E01070E0123222635343637362437 -353426272E012322060723353E01333216171E011503110E01070E01151416333236041D -BB1955282F7A5297D26D6566011EA42D2A28703D4AB6610A37D06576AF403F42BB56E944 -5164747763A477113D12171FC89B7F9D2D2D20081D40541817102725BF0F24272F2E926C -FE1D013705141317615560614D00000200B9FFE10490061400130020005140393402350F -3B1530204402450F4B154020571267127F087B1C0C0E0906174211040C011E40060A0B08 -141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED3F3FED123939 -31305D011406070E012322262707231133113E0133321203342623220607111E01333236 -04904F4347AA665F8E450CB0BC4FB26FC6E5C2849352A8485073499CB102378CE04C4F4F -2D26340614FDD44153FED0FEE6C8CF4738FD80241CCD00010069FFE703F3047700210057 -40410F234F23022B01220E2A1624183A01350E3A16351849014F0A440E4F164118590155 -0E6901650E7A01730E131010143F0C0421211A3F03090F008D23171B09852210F6ED10F6 -3C003FED332F3FED332F31305D015D250E01232226272E013510003332161715232E0123 -2206151416333236373E01373303F35EA95F79CA484950012DF760B94D0A56B757A0B9B5 -A439762F2948150A462D32474848DC93011201383627D14348D7D0CAD91E18152F110002 -006CFFE10443061400130020004B40333C1A301C38204F1A421C48205806680670100912 -0102110518410E0401081E42050A1114021A0092221F223F22021B1B08852110F6ED5D10 -F6FD3232003FED3F3FED1239393F31305D2123350E01232202113436373E013332161711 -3303112E012322061514163332360443BC51B067C8EB514544B56158884BBCBC4C78479E -B0889650A475464E013401118EDE4E4C50252701E4FAFF0281221ADCCAC7CF470002006A -FFE60460047C0018001F005A404026042B0D30043B0D3C1E43044B0D4B1E5A0D50166A0D -6017780D7A1E0E013C1F1F0F1C3D15040B0B073F0F090C0C191A008F210F211F213F2103 -1F011B12852010F6FD325D10F4ED332F003FED332F3FED12392FED31305D01211416171E -013332363733150E0123200011100033321215272E01232206070460FCC93E36348F5672 -E7310A5FC66DFEEAFEC8012BF4E2F5B701939697B30C021B67993130305B2CCD2836012D -011501120142FEF8F32A94A2B2840001004400000312061E0018004B402D081439147505 -030000043F15000B0E3E0811050D080009400902090F090E00080B1A0F11000E400D1037 -0E891910F62B323232FD322F12392F2F5D003F3F33FD323FFD322F3130015D01232E0123 -22061D012115211123112335333534363332161703120A1F6426796D0153FEB3BC7F7FC6 -BB3F652A055E09136B8C269EFC4103BF9E25C7D50C080002006CFE590443047C00230030 -006E404E3D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C05 -702011220512211528401E0407070B40030D2E4115070F0601062124121A000618009232 -1F323F32022B1B18853110F4ED5D10E4113910FD32322F5D003FED3FED332F3FED123939 -3F31305D2510002122262735331E01333236373E013D010E01232202113436373E013332 -1617373303112E012322061514163332360443FEFEFEF459A9520A2EC864607E23231E55 -9B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A57FFEE4FEF61917C012352E29 -276E446644430121010790D14C474F272830FCD60261221DD0C6BCC23F00000100B90000 -045F061400160037402203151615751503100D084213040E01010D08021A0091181F1860 -1802100B1A0D881710F6FD325D10F6ED003F3C3F3FED123931305D2123113426272E0123 -22060711231133113E0133321615045FBC1218195E4B4DA84DBCBC58BC63B5BE027C4D87 -262A294C3BFCBE0614FDCD4952DACD00000200AF0000018305DB000300070030401E0144 -02400B0D370203060505087F090109920060041A01607F050105880810F65DE4FDE4E65D -003F3F3F2BED313001233533032311330183D4D40CBCBC0518C3FA25045D0002FFC2FE59 -021505DB000300190049402E0A051C0502014402400B0D370203163E19050B0B0F40070D -4F1701177F0A010A0160161A00600A1770190119921B10F65D3232E4FDE42F5D2F5D003F -FD322F3FED3F2BED31305D012335330314062322262735331E01333236373E0135112335 -210215D4D40CC8A828832C0A1C5F2D485816160DE901A50518C3FA0AC4C8100CB30B1C28 -2828715103849E00000100C1000004AF0614000B007D40512802D801DB090309010F0D1F -011D021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A -0802050A0507010105080B02600A700A020A0A00000D200D400D0208031A05890C10F6FD -325D11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0 -015D7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B0614FC -1A022FFDFC00000100BB0000017706140003001E4011020101087F05010592001A7F0101 -01880410F65DFDE65D003F3F3130212311330177BCBC0614000100B900000717047C002B -006A4048032403291324132944204426B72A07B62501251F1D1C0817422822041D050110 -1C08402D011F2D302D402D502D702D05001A016110250B1C0F1A101F1A1A1C611F104010 -801003102F5DF4FD3210FD11393910F4ED5D5D003F3C3C3F3F3CFD32111239395D31305D -2123113426272E01232206071E01151123113426272E012322060711231133153E013332 -16173E01333216150717BC0D151756514F9E4F0304BC0D151756514D9B4DBCBC58AF6372 -9F2772BC6BB8AF027C4886282B2C4F3D173D1EFD35027C4A85282B2B4C3BFCBE045D7C49 -5260556055DFC800000100B90000045F047C00160037402203151615751503100D084213 -040E05010D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3C3F3FED -123931305D2123113426272E012322060711231133153E0133321615045FBC1218195E4B -4DA84DBCBC58BC63B5BE027C4D87262A294C3BFCBE045D7C4952DACD0002006AFFE10471 -047C000B0017003E402C3B0E341034143B164B0E441044144B16080F3F0904153F030A0C -1B0090190F191F193F196F1904121B06851810F6ED5D10F6ED003FED3FED3130015D0110 -002322001110003332000334262322061514163332360471FEE8EBEDFEE90117EDEB0118 -C2AA9799A9AA9896AB022EFEEFFEC4013C01110111013DFEC3FEEFD9D3D3D9D2D9D70002 -00B9FE640490047C00130020004D4035320239153220430249154220561267127E087C1C -0A0E0906174211040C051E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD -32325D10F4ED003F3FED3F3FED12393931305D011406070E012322262711231133153E01 -33321203342623220607111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F -51A44B5073499DB0023C88E14E4A512628FE2C05F9753F55FECFFEECCAC84639FD87241A -D4000002006CFE640443047C00130020004B40333B033D1A301C3A204C034B1A461C4A20 -701009120502110418400E04010C1E4205091114021A0092221F223F22021B1B08852110 -F6ED5D10F4FD3232003FED3F3FED1239393F31305D0123110E01232202113436373E0133 -321617373303112E012322061514163332360443BC57AC64C7ED534442B2635A8B480CB0 -BC4E7846A3AA899352A4FE64021A4B490133010E90DD4B4950282730FCBF0278231CDDC2 -C4D34700000100B900000372045D001200384021000D100D200D030C090F000004430A0F -05090800001440147014020C071A09881310F6FD325D11332F003F3F3CFD322F11123931 -305D01232E012322060711231133153E013332161703720A2A4F3657A24BBCBC70AB5931 -2C2C03900A094D3DFCE7045DA55A4B0507000001006EFFE503D704780033009340710602 -091B1502191B26092A2432093C2442094C245E055D165321562F54326F056C166020642F -6532147A057F1174207928742B8A01880D851A872894019A1B0B000E1829041E03802201 -2222263E1E0407070B3E030921291B180E1B00211807008E350F351F353F355F357F3505 -07863410E65D10E611393910ED2FED2F003FED332F3FED332F5D1112173931305D015D01 -14062322262735331E0133323635342726272E01272E01353436373E013332161715232E -0123220615141716171E011716171603D7FDDB7CCF460A59DA647C8C26266C288135937B -393A38AD6B64CD440A48CE63678E2B2A5E34812B834747014299C43B23D3434F50564222 -221809180E27976E457A302F373123C935494F4E452323160C180A1E494A0001003EFFEA -02FD059E001B0048402C0C051A052B05030B10073E0D0B0A051B1B173F03094F1D7F1D02 -0E008C1D080D101A0A0807400D103707881C10F62B3232FD322F10F6325D003FFD322F3F -3333FD322F31305D250E012322263511233533113311211521111416171E013332363733 -02FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A0A0E12B8CB02529E0141FEBF9E -FE0358632B28251B0900000100B1FFE10457045D0016003740220B0619077A0703020515 -09051142050A010814021A0092181F186018020B1A08871710F6ED5D10F6FD32003F3FED -3F3C123931305D2123350E01232226351133111416171E013332363711330457BC5FAE69 -B0C4BC101A1B565249AD4BBC7C4B50D7D002D5FD8455792B2C284C3B03420001003D0000 -047F045D000600864041260429063604390646044906062905390540055105600505061A -000100041A03020328002703380037034A00470375017A02080005027503010305020802 -010300B8FFC0401E0910370C001C006A007A0004008D080F080103031303650375030403 -820710E65D5D10F45D2B113939003F3F5D1239393130015D8710FD8710FD005D015D0901 -2301330901047FFE3CBDFE3FCC015A0157045DFBA3045DFC870379000001005600000636 -045D000C0088406D0D031D032C012A0229032504260524082B0B34013B0544014B055701 -58045905570B6D02620464086A09640A6B0B79017D02720474087B09730A7A0B1E0C1A00 -0100071A060506000910090205080B03090C0602060502080F061F062F0603008E0E100E -3F0E6F0E030006830D10F6325D10E65D003F3F1217395D3130018710FD8710FD015D0901 -23090123013313013301130636FEDDAEFEE1FEE3ADFEDAC4CD01179B011EC2045DFBA303 -5DFCA3045DFC9F0361FC9F0361000001003C00000480045D000B00DA408C090B1B011403 -14071B09270327073C003B0134033404340634073B093D0A4C004B014403440444064407 -4B094D0A5A0155035A0555075A09550B6F016003690560076F09660B230F0200083F0230 -084F0240087D02700808091A0A0B0A071A060506011A000B00031A0405040102050B0809 -06047A047506020605040809060106020D010502080B04040A00B8FFC0401C0910370600 -01008D0D0F0D010F0D1F0D400D5F0D040602040104820C10F65D325D5D10F65D2B321117 -395D2F5D003F3F5D1217393130018710ED8710ED8710ED8710ED005D015D212309012309 -0133090133010480EDFEC3FEC1DB01B4FE50ED013B013CDCFE4901ADFE53022D0230FE5A -01A6FDDA0001003DFE64047F045D0007008C404104063406440650066006700606090307 -0519031705460149035800570179030902071A000100051A040304490046040200030204 -05020C02680101010203030400B8FFC040220910370C001C004A006A007A0005008D090F -0901030413044504650475040504820810E45D5D10F65D2B1117395D2F003F3F12393931 -30015D8710FD8710FDC0015D005D0901231301330901047FFD74C9D0FE43CC0157015A04 -5DFA0701D20427FCC4033C000001005D000003E3045D00090056403A15083A0335084A03 -45085C03540860087F0370080A0707033E06050202083E01080408030207070402098E0B -1F0B3F0B5F0B6F0B7F0B0502840A10E65D10E41139392F1239392F003FFD322F3FFD322F -3130015D2901350121352115012103E3FC7A028BFD830367FD72029F8B03359D86FCC800 -000100ADFE78045906140025005640382F1D3A074A07562367237523063A1D4A1D021D1C -09533F0A4F0A020A0A01145112012451010B140F00400002000919201F0E000940050105 -2F5D33333CFD3C2F2F5D3C003FED3FED12392F5DFD39395D3130015D012322263D013426 -2B01353332363D0134363B01152322061D01140607151E011D0114163B01045996B3DFA6 -AB3333ABA6DFB39672887B9A89899A7B8872FE78C7BC95A9BF9CBFA995BCC78A7E8CAF8B -BD371837BD8BAF8C7E000001017AFE78022806140003001B400F0F054F05020201010B00 -1F4F0101012F5DED003F3F3130015D012311330228AEAEFE78079C00000100BBFE780467 -0614002500544034211235023112400240127A0C06131200533F254F25022525091B511C -010A51090B1B0009010900170E1F050509004F200120202710D62F5D33333C10FD3C2F2F -5D3C003FED3FED12392F5DFD39393130015D012322061D0114062B01353332363D013436 -37352E013D0134262B01353332161D0114163B01046733ABA6DFB39672887B9A89899A7B -887296B3DFA6AB3301F8BFA995BCC78A7E8CAF8BBD371837BD8BAF8C7E8AC7BC95A9BF00 -000100BB018B05D1039F001F0056404206030609091309191908170A1518191A3B083418 -4B0844185A035A0A550D541B5B1D60056E14611875047A147518170F1C54060C54061F16 -1F2A000001000F2A00102F33ED2F5DED002F3333ED2FED333130015D010E01070E012322 -26272E0123220607233E01373E01333216171E013332363705D102292D2E82645E925466 -5C325E6409A702292C2B8A605D935550663D676103039F63C04B4D584F667D40AFC464BD -4D4A5B4D68625BCAA900FFFF001A0000055E07500236002400000117008E002F0175001A -40130320113011401170118011050200110E060725012B355D350003001A0000055E0801 -0012001E002100DF40442B2040205A18551A501E55206918651A651E09180B170D4A0646 -125906561278027703082020211F02870101011400120020210387040104140505067B06 -74120216510CB8FFC0405D0D10370C033470210121212006120405001C011C0301050813 -114F0F500F600F030F191140095F096F0903090F230106090F1204050C00240039004200 -5A006A0074000700006E230F23010A052B0536054D05550565057B050705642210E65D5D -10F62F5D1217395D2F5DED2F5DED003F3C3F5D1217392F5DED2F2BED3130015D8710FD5D -C0C0C08710FD5DC0C008C0015D005D212303210323012E01353436333216151406071334 -26232206151416333236130901055ED394FD8094C90207596BCC9293CB69592C72565672 -7355567236FEFEFEFD019FFE61057F2C9F668FC2C28F64A32A012F56737455567373FBF1 -02CBFD3500010073FE59054605EC00410097406F0A20032B1C20152B250B222B3402330B -342B4302430B452B5D1F582158255A275E3F6102602B70027626702B160B0B1B0B022D2D -313429021A061D41413D341D0A101014320C0D0F0F172A0009100920090309091D234371 -2C0071430F43010F431F432F433F436F4305371523684210F6ED5D5D10F43CE41239392F -5DED332F003FFD322F3FED332F1239393FED332F31305D015D250E01070E01071E011514 -062322262735331E01333236353426270E01232224272602353412373624333216171523 -2E01232206070E01151416171E01333236373305463759480B1A120203BB9326772D091A -5B326A620202132B12A2FEF762606C68625F010DA478EF920F7BF28A71B547454D554346 -BB688FFA6D0E6C182A17030903133317A2AC0E0CA20A1C5056132D1402025B615F0125C2 -B801226461663A49EB675E494D4BE5969DE2474A47626200FFFF00C80000049D08010236 -002800000117008D001E0175000BB601000D0D020325012B3500FFFF00C80000053807C8 -023600310000011700D7008C0175000BB60100170A050925012B3500FFFF0070FFE105D7 -075002360032FD000117008E009601750018401103002930295029702904020029240F03 -25012B355D35FFFF00B2FFE1052907500236003800000117008E00620175001840110210 -24202440246024040100241E0D1D25012B355D35FFFF0068FFE1041D068C023600440000 -0116008DE300000BB6020036371D2625012B3500FFFF0068FFE1041D068C023600440000 -01160043E800000BB6020035371D2325012B3500FFFF0068FFE1041D068C023600440000 -011600D6E000000BB6020038341D2625012B3500FFFF0068FFE1041D05DB023600440000 -0116008EE000001E4016030F39703902020039103920394039040039341D2625012B5D35 -5D35FFFF0068FFE1041D0653023600440000011600D7E200000BB6020041341D2525012B -3500FFFF0068FFE1041D07B1023600440000011600DBD300000DB70302003A341D262501 -2B35350000010069FE5903F3047700380080405B0F3A4F3A022A012A0726252A2D252F3B -01390735253B2D342F4B014F2140254F2D402F590153256C0166257A017525150B081B08 -0227272B3F230417031A3838313F1A090D0D113D090D0C0C142A06061A2026008D3A2E1B -20853910F6ED10F63C1139392FED332F003FFD322F3FED332F1239393FED332F31305D5D -015D250E01071E011514062322262735331E01333236353426270E01232226272E013510 -003332161715232E01232206151416333236373E01373303F3214D1D0305B79225742D09 -1A583268620302101D1979CA484950012DF760B94D0A56B757A0B9B5A439762F2948150A -460F1F0913391CA2AC0E0CA00A1A4E58162E140204474848DC93011201383627D14348D7 -D0CAD91E18152F11FFFF006AFFE60460068C0236004800000116008DFD00000BB6020022 -21121825012B3500FFFF006AFFE60460068C02360048000001160043FD00000BB6020021 -20121825012B3500FFFF006AFFE60460068C023600480000011600D6F900000BB6020024 -20120025012B3500FFFF006AFFE6046005DB0236004800000116008EF9000014400D0330 -2560250202002520120025012B355D35FFFF00A000000246068C023600D500000117008D -FE830000000BB601000505020325012B3500FFFFFFEB00000191068C023600D500000117 -0043FE970000000BB601000505020325012B35000002FFF50000023C068C0006000A003D -40247A0174037A057406040201030505030905080800047F0C01000C92071A047F080108 -880B10FD5D32FDE4335D2F2F003F3F2F332F1239393130015D01230B0123133303231133 -023C978F8E93B2E313BCBC0511010BFEF5017BF974045D00000300050000022D05DB0003 -0007000B0041402702010744600401040A050908011A7F000100041A700501057F0D0100 -0D92081A057F090109880C10F65D32FDE4335D2F5DED2F5DED003F3F2F5DED3939313001 -2335330523353313231133022DBDBDFE95BDBDB5BCBC0518C3C3C3FA25045D00FFFF00B9 -0000045F0653023600510000011600D70700000BB6010024170E1525012B3500FFFF006A -FFE10471068C0236005200000116008DE200000BB602001919060025012B3500FFFF006A -FFE10471068C02360052000001160043E200000BB602001919060025012B3500FFFF006A -FFE10471068C023600520000011600D6E200000BB602001C18060025012B3500FFFF006A -FFE1047105DB0236005200000116008EE2000014400D03301D501D0202001D1806002501 -2B355D35FFFF006AFFE104710653023600520000011600D7E200000BB602002518060025 -012B3500FFFF00B1FFE10457068C0236005800000116008DEE00000BB601001918101225 -012B3500FFFF00B1FFE10457068C023600580000011600430200000BB601001818091625 -012B3500FFFF00B1FFE10457068C023600580000011600D6F800000BB601001B17091625 -012B3500FFFF00B1FFE1045705DB0236005800000116008EFD000016400F02301C501C60 -1C0301001C17091625012B355D35000100BB0087045B0614000B003C4026070A0B000104 -0605AA0606080308010F0D1F0D02006302040708090A010602280563700301032F5DE6ED -173910E65D003F2F12392FED17393130012513231305350503330325045BFE6D058405FE -6D01930584050193040A05FC780388058105018EFE7205000002009A02CC03BC05EC000B -0017002840186A0F65157A0F751504155403030F5409020C2A0000122A062FED332FED00 -3FED332FED5D313001140623222635343633321607342623220615141633323603BCE8A9 -A9E8E8A9AAE7A58666668689636686045CA8E8E7A9A8E8E8A8668B8B6668898C0002009F -FE97046005C3001C0023007B40553C0A3F2030224B0A4F2040225A0153116C0164117901 -7611791F76230E1D1E180D3F134F130213130D1747060C030F0505201C301C401C031C18 -471C05030F251F2502130021202F090109001D0C0F1804031E09062F33ED1739322F5DED -2F3C5D002F3333ED2F5D2F3F123939ED33332F5D2F11393931305D250E01071123112600 -353400371133111E011715232E0127113E01373305110E01151416046047B46876E3FEFB -010BDD7668BA410B37AE7378AD330BFE2787A2984A1E2F03FE9D0167150120FAF2012B16 -0163FEA1032C1FCB2C5209FCB90A552985034214D2BDB5D2000100890000048B05EE0021 -00774050201D3415321D03031E151E251E410E530E5B16630E7302730E091B1805460F08 -1F084F0803081010144908010C0202204A01080F231F23021F02181B20080519060F0605 -190F040220004000020000022F332F5D1217392F2F2F2F33FD3211395D003FFD323F1239 -ED332F2F5DED393931305D015D2901353E01352335331134123332161715232E01232206 -1511211521151406071521048BFBFE7667B0B0FDCD6998400A3E98568C8B019FFE617C62 -0345CF20BDB98A0136C801012211CE2A30A590FEDD8A3D7EBB390B00000200ACFE7F0468 -05EF0043006100A9407F05050A2714051D273E2030424D104F20433240425C105E165132 -63096E106A2B63321152055F205F255F275B2D5B3950426B1F6A20653D654061427C097C -10742B7431107B50745F0218075F50293A062F0D3333373F2F021111153F0F0D1F0D020D -181B5F045607333A1B50262911471A1129330704221000010000561A222FED332F5D1217 -39ED2F2F3939ED2F2F123939ED002F5DFD322F3FFD322F111217395D31305D015D011406 -07151E01151406070E012322262735331E01333236353426272E01272627263534363735 -2E01353436373E013332161715232E01232206151416171E0117161716033E0135342627 -2E01272E01270E01070E01151416171E01171E01173E01046876636158424148C27C57A7 -5C0A4FB46C86A2272D299052D6525372666554404340C78057A85B0A3ABD797FA92B2B2B -845BC85A59F71C1E211D1C4E2C275D46123E1618261F1D1B512C266043144202596AA237 -072E915A4D8A3238361B1FC2253261573841191725143451518162A93907309259518334 -323A1C1DC21B3C5C573947171725152E4F4FFEAB21413A334617181F0C0B1514092D181A -563132461817200B0A18130B2F00000100B9012103A4040B000B0013B703030900000688 -0C10F6322F002F332F313001140623222635343633321603A4DC9A9ADBDB9A9ADC02969A -DBDB9A9ADBDB00010089FE95045205D1000D003B40245308610802010F0501054F060106 -0602AA0C030F0F1F0F020529040402290F0D010D0D092F332F5DED332FED5D003FED332F -5D2F5D3C31305D012311231123112E013534243321045294D695CEFC0104F301D2FE9506 -BAF94603BC05F8CCCFE8000100B9FFE8048D061E0036006D4048052E152E2E132C343913 -39343736490E4636532166217B1B0C3433143D151E3C15032D0007070B3D03092608181B -303400140C061C060206111B000614300325009038251A26883710F6ED10E611173910ED -2F5D2F12392FED003F3FFD322F3F1239ED2FED39393130015D0114002322262735331E01 -333236373E0135342623353236353426272E01232206070E01151123113436373E013332 -1615140607151E01048DFEF1DB2C73240A2A63384A6E21231FD3C69D9A161E1B583D395C -28252DBC48403CB35EB7E58E71A4BE01E1D6FEDD0F0DA518123A31347F4CA6A996778123 -421F1D231D2724845FFBC104387CB73E3A3BAE9770B2200925DF0004009FFF2E076105F0 -000B00170028003700AD407A7C0D7C11701370177A1A74277336070D1A04231E1A122314 -282C0E231022142C16211824233F1936234919472252186B0E641064146B166A19151A19 -2A182818292A25252818311B2A001D101D4F1D0318001D01901D011D0CAD1D06000012AD -06281AAA31311E19401D011D30AA1E15501D1E0903030F500902003FED332F123939ED2F -ED2F5D3C12392FED39012FED332F1239ED2F5D71335DFD3C2F39392FED8710FDC0313001 -5D005D011000212000111000212000031000212000111000212000072301231123112132 -16171E0115140607373426272E012B0111333236373E010761FE05FE9AFE9AFE0501FB01 -66016601FB74FE49FECAFECAFE4901B70136013601B7C0DFFEB5A2A501385E7A3B3F3B71 -63201C211F4635957F3E5A1D1F19028FFE9AFE0501FB0166016601FBFE05FE9A013601BC -FE44FECAFECAFE4401BC820163FE9D0393101F226149618126FD243812110AFECB131719 -3C000003009FFF2E076105F0000B001700330096406D7C0D7C117013701779197223062C -0E231022142C1633183324332A332E44184124442A442E54185424542A542E6B0E641064 -146B1662186A1D642417257F1801182C2A181E0CAD1E06000012AD06103320330233332F -521B1F252F2502252529522115501B210903030F500902003FED332F123939ED2FFD322F -5D2FFD322F5D012FED332F1239ED2F33ED2F5D3C3130015D005D01100021200011100021 -2000031000212000111000212000050E012322243534003332161715232E012322061514 -1633323637330761FE05FE9AFE9AFE0501FB0166016601FB74FE49FECAFECAFE4901B701 -36013601B7FE72569F4EE3FEF8010DDE59AC3E1036A9598E9F9994539D4810028FFE9AFE -0501FB0166016601FBFE05FE9A013601BCFE44FECAFECAFE4401BC572727F6EAE1010230 -1CB52846ABA59FAE3A34000200AA031106F105D1000E0016005240217B0478057A060379 -0C010B0C0D01030406080815121210135015030D280B0F370BB8FFC440110B0F37022800 -000728090FAE102814AE132FE4FDE42FED332FED2B2B003FFD3C332F1217395D3130005D -0123112303230323112311331B0133052311231123352106F17C14ED4FEF197BEEBFBFE3 -FC02E57FE5024903110269FE3D01CAFD9002C0FE82017E75FDB5024B75000001021D0516 -03C3068C000300244016470156006600760004500360037003030303010000022F332F00 -2F332F5D3130015D0901231303C3FEEF95B3068CFE8A01760002015A051803BE05DB0003 -000700264015020644016005010500140F010101041401000501052F5D33ED2F5DED002F -5D3CFD3C3130012335330523353303BEC7C7FE63C7C70518C3C3C300000100F5001B0597 -04FD0013008840541612010C0B080704030E111201020D80029002A002B0020402290303 -0C030D030112045307110E08530D070F0B010B40150130154015020407080B0112110E08 -030D0309030D1004062F004000020000400601062F5D332F5D1217392F2F1217395D5D00 -2F5D3333ED39392FED3939322F2F3130018710FD5D87C0C0C0C010C0C0C0C0C0015D0121 -0323132135211321352113330321152103210597FDA0689968FE5701DA54FDD2025E6999 -6901ABFE2453022F016AFEB1014F9C010C9C014FFEB19CFEF4000002000E0000076D05D1 -000F00130079404F04030B061B041B052A042B053B064A044A054D064D120B1213030414 -05050675057C06020A100E140115730601080B0440000100000F05010564140334130D35 -0A0A13050835123406030E35010508003F3CED3FEDED1239392FED2FED300110F65D322F -5D1739E62FED393931305D8710FDC0C0C0015D2901112103230121152111211521112101 -112303076DFC50FDF4D4CF0252050DFD1302EDFD1302EDFC50DBEF022CFDD405D1B0FE68 -B0FDD702230259FDA70000030073FF6E05DA064B001D002A003700A640850203000B0A0D -0C120F1A051C1103190D1F121F1A151C550254045A08590D59115B135017551C792A140B -090318061B1F0A1F0B1118161B2609272F75037F097F0A7F0B7F0C791270187019701A70 -1B132A2F1E2E043221340C09181B040615023234060A2A2F1E2E04272B15000C09181B04 -0F0073390F39010F391F393F390327150F683810F6ED5D5D10E411173910ED111739003F -ED3F121739FD11173931305D015D011402070E0123222627072313260235341237362433 -3216173733031612012E01232206070E011514161701342627011E01333236373E0105DA -63595CFBA173C94F9F84CD656D605C5801059A76C2528E84BC656FFE6F3990596EB44240 -453B3A035C3C3AFD683C91596EB73E434202E8B8FEDD6165663A37E4012664012CC4B601 -216762683737C9FEF464FED7013A2E2D4D4E4CE5938CE04C01B88BE44BFC432D2E504C52 -E100000300A1009D075F047C00170026003500724054051608311526192F2923262C3B34 -441C4B34510256075F0A5F0E5A1351165918553063026D0A631669236C24642C642D1821 -AF33AF0306120F09092AAF1BAF150F7B18743002272A0030180C0099371E2A0C993610F6 -ED10E411393910ED5D002F3CEDED332F1239393CEDED3130015D011402232226270E0123 -2202353412333216173E01333212052E01232206151416333236373E0125342623220607 -0E01071E01333236075FF5CF85DE454FD38FBFE2FACA86DE444FD58DBFE2FC683FB8608A -9C7F776E7C392225030C807658814A1E33133CBB608A9C0297EFFEF599929794010FD6EE -010C9A919695FEF1947575A79A85A6615E39470186A5477830672C7377A6000100D700B3 -05B505B6000F004540290E03540F010101010D045408AC0A070C401101301140110200AB -0A800D010D2A040105AB07400401042F5D3CF43C10FD5D3CF45D5D3C002F3CE4FD3C322F -5DFD3C31302521352111213521113311211521112105B5FB22021CFDE4021CA6021CFDE4 -021CB39E01A69E0221FDDF9EFE5A000200FE0000058005710006000A0061401605045403 -020306540001002C26012902360139020400B8FFE240240B1837031E0B18370954080303 -00400C01300C400C020504090A040100004001500102012F5D332F1217395D5D002F332F -2FED2B2B31305D4B53588710FD8710FD05C05909013501150901112135210580FB7E0482 -FC870379FB7E0482012F01E37C01E3B7FE96FE96FE1AA0000002010C0000058E05710006 -000A0063401603045405050602540101002C26002906360039060401B8FFE240260B1837 -051E0B1837095408050501400C01300C400C020503090A040100002F013001400103012F -5D332F1217395D5D002F332F2FED2B2B31305D4B53588710FD8710FD05C0590901350901 -350111213521058EFB7E0379FC870482FB7E04820312FE1DB7016A016AB7FE1DFC72A000 -0001006C000004A705D1001000834020300E3F10420E4F10540E5B10650E6A10730E7C10 -0A0020090B371020090B370EB8FFE0B3090B370DB8FFE04033090B374601550F700F0305 -0208320B0B0C010F0005070D0307080F121F1202030A005C0501030F05130D5C0C0A0F08 -BF0802082F5D3333E4ED39323210E42F2F5D003F3F1217392FED393931305D012B2B2B2B -5D090115211521112311213521350133090104A7FE400174FE8EBCFE8E0174FE3DD4014C -015005D1FCC15E8AFE5601AA8A490354FD6D0293000100BEFE640464045D001500384020 -080205140B051042050900080A0C0102131A0092171F176017020D091A0A881610F6FD3C -5D10F4FD3939003F3F3FED3F3C12393931302123270E012322262711231133111E013332 -363711330464B20A3B815B567F42BCBC209B5B5D8536BC76414A4640FDF305F9FCBA2752 -433C034000020095FFE0047905EF00220031006640481502151B162E2904241B310A351B -410A431B560A551A561F5020562A641A661E642A632E751B702E140F06263F0C0C061D19 -19153F1D022C3F060A1A0F232912141A0900002914092FED332F1239ED1139392F003FED -3FFD322F1112392FED123931305D011402070E01232226353400333216173E0135342623 -22060723353E01333216171E01032E01232206151416333236373E0104794E5255CB71C0 -F3010DCA5A9F4F02029E984EB74E0B51C96089CD3E2A1DCB3C98488DA8877080A322060B -0345A4FE987B7C62FDCBE4012134411A3B1AD9CA3F37C22C2D6D7C56CEFEC42F36B6AA91 -99C2BE215000000100BBFF43055905D1000C00A9406A01030F08450B8B03D903D30B0601 -08010B2B033208320B5D03660A600B08030203080908B3040304030B0A0BB30202030302 -03080908B3040304030B0A0BB30202030303610A010A07040304070A04020C0C0203090A -0A6B090109040202040309040B0835050301350B002FED3FED1117392F2F2F5D332F1239 -012F332F1217392F2F2F5D332F313087107AED87C0018710ED8708C00187107AED87C001 -8710ED8708C0015D71052135090135211521011501210559FB6202A1FD69046DFC850288 -FD6603B4BDBF029C0277BCB0FDA748FD730000010090FF3F05FC05D1000B003B40250307 -050009350A0270007F09020414005A6F017F010201010D0514095A00086008700803082F -5DE4ED11332F5DE4ED5D003FFD3C3C2F3C313001231123112111231123352105FCC8C6FD -B0C6C8056C0523FA1C05E4FA1C05E4AE0001007100000541045D000B002B401703070500 -093E0A05041A00B001010D051A09B0100801082F5DE4ED11332FE4ED003FFD3C3C2F3C31 -300123112311211123112335210541CABCFE3CBCCA04D003BFFC4103BFFC4103BF9E0001 -008AFE590490061E0021002C4018000004401E00111115400D0D0F231F2302001000091A -10192F33FD322F2F5D003FFD322F3FFD322F313001232E01232207061511140706232226 -2735331E013332373635113437363332161704900A2073208134356869BC346D310A216C -228135346868BD3A6636055708153D3D95FB9DCE6D6E0B0AB208153D3D950463CC6F6E0B -0A0000020097021303B005F000230030005740370A0A06211B0916212E0925215529600E -6029700E70290B02082552111120081C1C1853200201012E5308061D1125022A1D0B002B -2A000B2F33ED2F1239FD32322F003FED332F3FFD322F1112392FED12393130015D012335 -0E01070E01232226353436373E0137353426272E012322060723353E013332161503350E -01070E0115141633323603B0AA1C312C2D514980AF5D4D4EEF88242122573054A8270E2D -B84DD9BEAA45B736404E5B5E5283022A5E1425131415AA846A8724241F0612354013120A -300EAC0D20A99FFE74F504100F124D444C4C430000020079021303E405F0000B00170031 -40205D015D055207520B046A0F6515020F530902155303060C2A40000100122A00062F33 -ED2F5DED003FED3FED5D31305D0114022322023534123332120734262322061514163332 -3603E4F4C1C9EDEDC9C1F4B687787A86867A78870401EBFEFD0109E5E5010AFEFCEBACAC -AEAAAAADAB000001006B0000062105F00027006240440909090D1A091A0D2C092C0D3403 -300530113413460346136A1A641D64216A24101925140204160B341F0226183501160825 -1202191214081502141C272222290E15171C2FC4ED11332FC4123939ED2FED2FED003F3C -FD3C3FED12173931305D2901113E01373E01353426232206151416171E01171121352135 -26023510002120001114020715210621FDA443842D2F38F8E2E2F83A2F2F7F44FDA401B4 -A8D90172013601360172D9A801B40185275A373A9970C8FDFDC86E9E38395727FE7BAE7C -580132CC0116015AFEA6FEEACCFECE587C0000030068FFE3073F047C00390043005200B9 -40840B190B1D1C192604200D3604320D383D34414204420D4A3D4241520D5237554B630D -6137654B13161D4B2A512E622E7B0D7E137C1E7D24732E73387C4B0B47013C2170430143 -124333033018403D36042C2C283F30040B0B073F0F0A5041180A433A011A474412213304 -00470F2D012D0C0C3A1A00472D1B008F544054014D1B001B855310F632ED5D10E4113939 -10ED332F2F5D2F1217392FFD1139003FED3FED332F3FED332F3FED111217392F5D33FD32 -31305D015D01211416171E013332363733150E01232226270E01070E0123222635343637 -362437353426272E012322060723353E01333216173E0133321215272E01272E01232206> -<07032E01350E01070E01151416333236073FFCCD3C37348E566FD5420C4ED56DA6ED4C15 -5C323F947396D36C655F0124A22E2928703C4FB35A0D37CE659FD33945CA7DD9FBB60525 -20226D4F85B41991141569C0524F61747663C1022F72A234302D5334CD233B686713501C -242FC2987C992A271C033D41551717112A24BF0F265D5B5268FF00FB3E446625272C968C -FE6B35844B030915145B535F5C560003005DFF6C047104D900170021002B007840560008 -0F140A19292604001800250200180025020914001800253D1D322B4D1D422B0721261825 -04291B3E0609121504030F04293E030A21261825041E221B0009061215040C00902D0F2D -1F2D3F2D6F2D041E1B0C852C10F6ED5D10E411173910ED111739003FED3F121739FD1117 -3931305D5D5D015D011000232226270723132E01351000333216173733071E01252E0123 -22061514161701342627011E013332360471FEE8EB548F3B856EAB4B530117ED578E3674 -6F9B4C54FEBC2563379BAA222302442322FE40275F3B96AE022EFEEFFEC42A27C601004D -E2930111013D2C23ACE74CE0DC1D1DDCD2619436012B619836FD611F1ED900020071FFE2 -03BE05D100030020006D404C0F221F2202131E231E3A053A144B05400D400E400F43165C -05520F6F05650E651A7A057A0910127F1301131007120155030320201C34070A022B0303 -101F70130113130A200401041915040A2F33ED2F5D12392F5DED332FED003FFD322F3FED -331239395D2F31305D015D01233533130E01232226353436373E01373533110E01070E01 -151416333236373302C8CCCCF653BA70D7F9453B3A9D44B33C9E2E3644997967C5390A04 -FED3FA571E28D1AB62963E3E6529E1FECF2161282F7C4E716F4225000002012300000203 -05D1000300070027401707070055030305080F0901045D032B055D0F02200202022F5DE4 -FDE45D003F3FED332F3130012335331323133301F9CCCC0AE01AAA04FED3FA2F04370001 -00D2003905B002FA000500294018000002540F0401044007013007400702012A40000100 -00042F332F5DED5D5D002F5DFD322F313025231121352105B0ABFBCD04DE390221A00001 -0086FF6906C906FC0008004A402C15073307440772070407070806140302030207090829 -08590869080408000100010100040351060607080208002F2F1239392FED012F2F332F31 -308710DD5DC0C08710FD08C0005D09012301233521090106C9FC9066FE80ED0189013902 -DA06FCF86D03E18BFCCB065C0001FFDCFF37050005EF002B0077404D070B001F2E08270C -270F2E212925350D300F400E410F59226607660C0E0C0B0807201D1E21221D220F2D1F2D -020920201D2209041600160B081E462121281200000449280216161A4900120112002F5D -FD322F3FFD322F1112392FED393930012F2F1217392F2F5D8710C0C0C0FDC0C0C0313001 -5D01232E012322060F01211521030E01070E012322262735331E01333236371323353337 -3E01373E013332161705000A1D7229797E232A0141FEA3671D5C4041985C2950340A215E -2C7F812367D9F52A1A5C3E3E99573A4F3405290A1A77A0C28AFE1686B034352A0709B40E -1480A701EA8AC67BA833332C0A08000200F300CA0598045000190033006D40490A010606 -050E08130A1B06200528082D5B0452115B1E522B680B6432790B743210272730541D1A23 -541D1A002A012A0D0D1654030009542A0300101929000033291A0C290D26291A272F33ED -3CED2FED332FED002F333333ED2F2FED332F2F5D3333ED2F2FED332F31305D010E012322 -26272E0123220607233E01333216171E0133323637130E01232226272E0123220607233E -01333216171E0133323637059714B69E4D8C3841682C4B541C9B17B39F488E3B3D6B2D4C -59139E19AEA348903927802E4E56149D13B79E4D8A3A237C364B541B0450C2C64B2D3437 -607CB6C44A2E303B6D7DFDFCB8C34B2D1F4C6E7CC0C84A2E1C4F637A000200320000059E -05D100030006004F403148024703025A056A050205041A000003061A010102390236036B -0264037B02750306020305030000080105010203065401002FED3F1239012F11332F1739 -5D31308710FD8710FD04C0005D015D290101210902059EFA94023201080127FE50FE5105 -D1FAD7047BFB8500000200A600A2047A04760006000D005940107305730C0204400C1037 -0B400C103706B8FFC0B30C10370DB8FFC0401B0C103703000300070A0A07040500010100 -000C0B084007010707082F332F5D123939332F332F123939002F332F1239392F2F31302B -2B2B2B015D2501350115090105013501150901047AFDF00210FE9B0165FE52FDDA0226FE -8D0173BF01A35501A2BCFEEFFEEFD901BE5901BDC4FEDAFEDA00000200AE00A204820476 -0006000D005740107C037C0A0204400C10370B400C103702B8FFC0B30C103709B8FFC040 -1A0C10370C080C080505010403014000010000010A0B08070107082F33332F1239392F33 -2F5D123939002F332F39392F2F31302B2B2B2B015D090135090135010501350901350104 -82FDDA0173FE8D0226FE3CFDF00165FE9B02100260FE42C401260126C4FE4357FE5DBC01 -110111BCFE5E000300B2000005DA00DF00030007000B0025401405010206040A55090800 -2B0101042B0505082B092FED332FED332FED003FED173931302123353305233533052335 -3305DACCCCFDD2CCCCFDD2CCCCDFDFDFDFDFFFFF001A0000055E08010236002400000117 -004300640175000BB602000C0E050025012B3500FFFF001A0000055E07C8023600240000 -011700D700330175000BB60200180B050025012B3500FFFF0073FFE105DA07C802360032 -0000011700D7008B0175000BB6020031240F0325012B3500000200780000081C05D10016 -002500554039001C0022301C3022401C40227204720A721C741D72230B14351111011834 -10350D0317341535010811141417170E1203070073271F1507682610F6ED10E61117392F -FD32003FEDED3FEDED12392FED3130015D29012224272602353412373E01332115211121 -152111210511232206070E01151416171E0133081CFBCEC4FEFD6791B3AE984FF9E8042E -FD0502FBFD0502FBFC407A92B55F7481716D5BD09236415B0146CFD7013C603344B0FE68 -B0FDD7040479203642F8ABABEE4439280003006AFFE10776047C0024002B00370094406C -2604200D3204300D32293B2E323032343B364004400D40294D2E403040344D36530D5314 -5C165C1A531C5322620D621C6222700D72221B013C2B121E2B030F283D21042F3F1B040B -0B073F0F0A353F150A1E122B011A7F2C012C0C0C251A002C18008F393F3901321B188538 -10F6ED5D10E4113910ED332F2F5DFD323939003FED3FED332F3FED3FED1217392FED3130 -015D01211416171E013332363733150E01232226270E01232200111000333216173E0133 -321215272E012322060F0134262322061514163332360776FCDC3C34348D526DCD460C62 -BF69A8E84A45D183E9FEEF0117E38CC84447D78FE1ECB703918D8BAF10B8A49399A0A792 -92A5021B689831312F4F38CD2A347A686F78013C01110115013979726A81FEF4EF2A9B9B -A4927DD7D5E0CCD4D7D500010099023C047D02DC00030018400C0154020000050F051F05 -02022F5D11332F002FED313001213521047DFC1C03E4023CA00000010099023C076702DC -00030011B6015402000005022F11332F002FED3130012135210767F93206CE023CA00002 -FFED03E503160614000300070052B502180D103701B8FFE8B3090C3700B8FFE840090910 -3706180D103705B8FFE8B3090C3704B8FFE8401309103701000501050502060100B10202 -04B1062FED332FED003F3C332F5D3C3130012B2B2B2B2B2B0123013303230133031686FE -F1F0EF86FEF1F003E5022FFDD1022F000002009603E503BF0614000300070050B90004FF -E8400E0D10370518090C37061809103700B8FFE840200D10370118090C37021809103701 -000501050503070100B1020204B1000601062F5DED332FED003F3C332F5D3C3130012B2B -2B2B2B2B090123132301231303BFFEF186A5A4FEF186A50614FDD1022FFDD1022F000001 -FFED03E5018606140003002EB502180D103701B8FFE8B3090C3700B8FFE8400D09103701 -00010101020100B1022FED003F335D2F3130012B2B2B0123013301868AFEF1F403E5022F -000100A003E5023906140003002FB90000FFE8401A0D10370118090C3702180910370100 -010101030100B1000201022F5DED003F335D2F3130012B2B2B090123130239FEF18AA506 -14FDD1022F00000300D2000705BA051100030007000B00414029000B010B5608AC045407 -0F0101015602AC0F070107400D01300D400D0204AB000B2D05AB01400A010A2F5D3CE4FD -3CE45D5D002F5DF4ED5D10FDF4ED5D313001231133012135210123113303BDEEEE01FDFB -1804E8FE03EEEE03FE0113FD2BA0FD2B0113000200ACFFC805E00554000300070057403B -4804470658045706680467067F047006087F057007020705000301000330036003900304 -03B200023002600290020402B220010406020002000201192F3333182F2F123939002F1A -19FE5DEE5D11173931305D015D090705E0FD66FD66029A01BDFE43FE4301BD028EFD3A02 -C602C6FD3A01DDFE23FE2300FFFF003DFE64047F05DB0236005C00000116008EDD000016 -400F02100E600E700E0301000E0B040025012B355D35FFFF0006000004E607500236003C -00000117008EFFED01750019401302000E400E500E600E700E0501000E090500252B355D -35000001FF9A0000034B05D10003001D401138034803680065016903050100030000022F -332F003F2F3130015D09012301034BFCF4A5030C05D1FA2F05D100010000FFE504CA05EC -003300CC408758040102B52F0103B81D010237184718571867187718E718F71807013A00 -4A005A006A007A00FA0006032C06502998090109230F5020F71201081218122812581204 -00121203151827190119191D341502002833010133332F34030A272001022320292C0400 -0F12090604260C082A182A282A03002A21210C18007135103407073426150C683410F4ED -12392F103C10F63C11392FC45F5D111217391117395F5D003FED332F5F5D333FED332F5D -331112392F5F5D5D3CFD3CDD5D3CFD3C5F5D5F5D5F5D5F5D31305F5D250E012322000323 -37332E013534363723373312003332161715232E01232204072107210E01151416172107 -211604333236373304CA6CB97EF3FE8331862C4B02020202772C5D3A0174F38DBF541050 -C67C9DFF003001DB2CFE3C02030202017C2CFEC4310108969DB2440F3E3326012E010476 -152F161A34187601010128292DD1413DCFB17618341A172E1576B6D13F3D000100BA00AC -02E0046C0006002C400972050104400C103706B8FFC0400C0C1037030300040501000001 -2F332F123939002F332F31302B2B015D2501350115090102E0FDDA0226FE8D0173AC01B4 -5901B3C7FEE7FEE7000100C200AC02E8046C0006002C40097D030104400C103702B8FFC0 -400C0C10370505010403010000012F332F123939002F332F31302B2B015D090135090135 -0102E8FDDA0173FE8D02260260FE4CC701190119C7FE4D000002004400000453061E0003 -001E005B40370B103A10601A741A04014402031515193F1100070A3E1D0D050509080B14 -0160051A006004140A0492201D071A0B0D0A400D10370A891F10F62B3232FD3210E61139 -10E4FDE42F2F003F3C3F33FD323FFD322F3FED3130015D01233533032311211123112335 -333534363332161715232E012322061D01210453D0D011BCFDF9BC7F7FC8B73E65290A1C -6A22796A02C90518C3FA2503C2FC3E03BF9E31C1CF0D07AA08146B8C2800000100440000 -0447061E001A004E402D6C077A0702191A191A053E16000C0F3E091205010E08100A011A -000A0F00921C090C1A10120F400D10370F891B10F62B3232FD3210E6113910ED2F2F003F -3C3F33FD323FED33332F2F31305D2123112E012322061D01211521112311233533353436 -33321617370447BC2B8B35A2850149FEBDBC7F7FE9DE45902CBC056D080C6C8C2C9EFC41 -03BF9E31BFD10E040800000100BB007C045B06140013005740390B0E0F1011080609AA0A -0712130001040605AA060A060C030C010F151F150210630063020407080B0C0D0E111201 -0A022803090563700301032F5DF63C10ED173910E6E65D003F2F1239392FED17392FED17 -3931300125132313053505110535050333032515251125045BFE6D058405FE6D0193FE6D -01930584050193FE6D019301FB05FE7C018405810501A20581050184FE7C058105FE5E05 -000100FD01FF01EC031A00030016400C02560108002D2F013F0102012F5DED003FED3130 -0123113301ECEFEF01FF011B0001FFF6FEEC018F011B0003002EB90000FFE840190D1037 -0118090C370218091037010F0301011F03010300B1022FED002F5D335D2F3130012B2B2B -09012313018FFEF18AA5011BFDD1022F0002FFF6FEEC031F011B000300070051B90004FF -E8400E0D10370518090C37061809103700B8FFE840210D10370118090C37021809103701 -0005010505030F071F07020700B1020204B1062FED332FED002F5D3C332F5D3C3130012B -2B2B2B2B2B0901231323012313031FFEF186A5A4FEF186A5011BFDD1022FFDD1022F0007 -0095FFE30B9305ED000B000F001B00270033003F004B00C640900908060A0918061A083C -073E1808170A1818171A193C163E2908260A2918261A283C253E460D480F560D580F680E -17791F7625792B7631794376490625512F034F030203031F5109020F030E08432B513D20 -19401902191949315137130A4F0C400E020C0E462A003A013A402A3A003401342E2A0016 -01163416282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D12 -3939ED33332F5DED2F5D33ED2F5DED2F2F5D003F3CFD3C332F5D3CFD3C3F3F3FED332F5D -ED5D3130015D011406232226353436333216250123090114062322263534363332160134 -262322061514163332360134262322061514163332362514062322263534363332160734 -262322061514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6 -BAFABB596466585866645904935964665858666459043EBEB2B5BABDB2B6BAB259646658 -586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADCDDE0DADA01B8AC8888ADAD8787 -FE17AC8888ADAD8787AEE0DADCDDE0DADADFAC8888ADAD878700FFFF001A0000055E0801 -023600240000011700D600280175000BB602000F0B050025012B3500FFFF00C80000049D -0801023600280000011700D600260175000BB60100100C020325012B3500FFFF001A0000 -055E08010236002400000117008DFFF80175000BB602000C0C050025012B3500FFFF00C8 -0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500 -FFFF00C80000049D080102360028000001170043003C0175000BB601000D0D020325012B -3500FFFF0089000002D508010236002C00000117008DFF120175000BB601000D0D040925 -012B3500FFFF005D0000030808010236002C0000011700D6FF270175000BB60100100C04 -0925012B3500FFFF007E000002E207500236002C00000117008EFF240175001940130200 -104010501060107010050100100D0409252B355D3500FFFF0089000002D508010236002C -000001170043FF3E0175000BB601000D0D040925012B3500FFFF0073FFE105DA08010236 -003200000117008D00780175000BB6020025250F0325012B3500FFFF0073FFE105DA0801 -023600320000011700D6008F0175000BB6020028240F0325012B3500FFFF0073FFE105DA -08010236003200000117004300AA0175000BB6020025250F0325012B3500FFFF00B2FFE1 -052908010236003800000117008D006E0175000BB60100201F0D1D25012B3500FFFF00B2 -FFE105290801023600380000011700D6005B0175000BB60100221E0D1D25012B3500FFFF -00B2FFE1052908010236003800000117004300AA0175000BB601001F1F0D1D25012B3500 -000100BB00000177045D0003001E4011020501087F05010592001A7F010101880410F65D -FDE65D003F3F3130212311330177BCBC045D00010136051103E1068C0006003A40275905 -5606690566067A0573060601020350056005700503050560030103500060007000030000 -042F332F5D002F5D332F5D1239393130015D01230B0123133303E19FB9B89BE4E3051101 -00FF00017B00000100ED051D042C06530019003940233902350E4902450E04190D190952 -0F101F1002101652100D600301031928000C28000D2F33ED2FED002F5D3333ED2F5DED33 -2F2F31305D010E01232226272E0123220607233E01333216171E0133323637042C0B846F -365C292F412734340483088E67325D2A2F49213339030653989A27252B2B5A4C979A2724 -29295C4600010118053703FE05D10003001440090253100101010000022F332F002F5DED -31300121352103FEFD1A02E605379A0000010113050E0402068C000D0056403A6508650C -7508750C040D5006600670060306060AAA094003F00302D19003E003029003E003028B00 -03018950030150030159030D2A00072A00062F33ED2FED002F5E71725E5D5E5D715E5D5E -ED332F5D3C31305D010E0123222627331E013332363704020AC5A9A9C509A60C6B5B596B -0E068CA8D6D6A8847878840000010221051802F505DB0003000EB50244010015012FED00 -2FED31300123353302F5D4D40518C3000002012D050903E907B1000B00170045402E0F51 -090009300902313009015009600970090309091551030C29200030000200003000600003 -D0000100001229062FED332F5D7172ED002FED332F5D725E715EED313001140623222635 -343633321607342623220615141633323603E9CC9290CECC9293CB917558587576575875 -065E8FC6C5908FC4C48F567776575776760000010161FE59037000140014002440150B02 -1B012B013901041207070B53030D0E2A0000062F332FED003FFD322F2F31305D05140623 -22262735331E0133323635342627331E010370B79225742D091A58326862060399020659 -A2AC0E0CA00A1A4E581D491913340002015605160477068C000300070042B54500450402 -00B8FFE8B30E103704B8FFE840190E10370750036003700303030305019F000100000204 -0204062F33332F2F332F5D002F33332F5D333130012B2B5D09012313230123130477FEFE -8BA9B0FEFE8BA9068CFE8A0176FE8A0176000001019FFE5F037C000A0014002440150E04 -1E042B043B04040A14141053030D000D2A00062F33ED2F003FFD322F2F31305D010E0123 -222635343637330E011514163332363733037C344B2A8BA90D069B0606535A24511108FE -790E0C9E8F263E1A1B3C1E524E1B080000010132051103DD068C0006003A402754015902 -64016B0274017B020606050250036003700303030360020102500060007000030000032F -332F5D002F5D332F5D1239393130015D01032303331B0103DDE4E3E49FB9B8068CFE8501 -7BFF00010000000100180000048005D1000D0047402A3B0B4B0A5A0A7A0A04020B050804 -090309090106030C3501080A030A00000F0F0F01080B140503026C0E10F63232FD325D11 -332F392F2F003FED3F12392F2F12173931305D29011107353711331101150111210480FC -52BABAC6015DFEA302E8021798A395031AFD78011BA3FEE8FE0700010018000002360614 -000B003D4023490559056905030407010A040B05050B0B030801030800050D92000A011A -050704880C10F43232FD3232E62F2F003F3F12392F332F12173931305D01071123110735 -37113311370236B5BCADADBCB5037A91FD1702608D9F8A0318FD7194FFFF0086FFE50502 -0801023600360000011700DF004D0175000BB6010034311A0025012B3500FFFF006EFFE5 -03D7068C023600560000011600DFAE00000BB601003734180025012B3500FFFF007E0000 -050808010236003D0000011700DF00320175000BB601000D0A020625012B3500FFFF005D -000003E3068C0236005D0000011600DF9400000BB601000D0A050625012B35000002017A -FE780228061400030007002940160F094F090201060106050201050B00041F014F050105 -2F5D3CFD3C003F3F1239392F2F3130015D01231133112311330228AEAEAEAE02F6031EF8 -64031E000002000E000005BC05D100120025005240333816481666026811041B1E083C0B -0B071A340C031F3407087600011D1D0713150074270F274027602703091B1E140B09076C -2610F63232FD322F5D10F6ED12392F5D003FED3FED12392FFD393931305D011402070E01 -23211123353311213204171612073426272E012B011121152111333236373E0105BCB193 -66FBCDFE88C4C40174DA01025898AACF7A7958C68ABC0169FE97BC8FD5596F6F02E7CBFE -B65B3F3802E48F025E3F375FFEC4D6AFF0453227FE4C8FFDC62A3947E8000002006AFFE1 -0471061E001F00310084405B190D290D32013420392B362D45014C0D44204A2B442D5A2B -542D6F05741E7421100C03293F090F121A1D041B10100903161B1B3F164F160216022F3E -030A1C111A1D1C030011120F0C26051F162F160216231316090000092C14062FED11332F -1239ED2F5D17391217392F2F003FED3F5D332F111239392F1217392FED123931305D0110 -00232200353400333216172E01270527372E012735211E01173717071612013E01353426 -272E012322061514163332360471FEE4F1E5FEEB0112CA6C9B56208757FEF842ED54905D -0127236225D242BA99A6FEDE313403024BA55693A9A98F427B027DFEBCFEA8010EF5E201 -08353570D64AA2618E43512F1019431A80616D93FE9BFD8A3BA99620371E2D2BAF98B4AE -2C00FFFF0006000004E608010236003C00000117008DFFE40175000BB601000B0A050025 -012B3500FFFF003DFE64047F068C0236005C00000116008DDD00000BB601000A09040025 -012B3500000200C80000049605D100120021005C403E391F491F551180108011051B3400 -0701071A34200C010C0C07090A0309080F231F23021315200030004000700004006F230F -233F23020C1B071400096C2210F632FD32325D10F65DED5D003F3F1239392F5DED2F5DED -3130015D011406070E012B011123113311333216171E01073426272E012B011133323637 -3E010496463C4EDB97C6C6C6CD85C243535ECE343830805AC4A777982F2C2903135CA939 -4B48FEBE05D1FEF22D2C35AA7D486B231E19FDCD292D2966000200B9FE64049006140013 -0020004D4035320239153220430249154220561267127E087C1C0A0E0906174211040C01 -1E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED -3F3FED12393931305D011406070E012322262711231133113E0133321203342623220607 -111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F51A44B5073499DB0023C -88E14E4A512628FE2C07B0FDD43F55FECFFEECCAC84639FD87241AD4000100DC023C05B0 -02DC0003001E401100540F02010240050130054005020000012F332F5D5D002F5DED3130 -0121352105B0FB2C04D4023CA000000101230069056904AF000B00264017D702D80802A7 -0201D705D80B02A80B0105840294020202192F5D002F3130015D71005D71250709012709 -01370901170105696FFE4CFE4C6F01B8FE486F01B401B46FFE48D86F01B8FE486F01B401 -B46FFE4801B86FFE4C00000101230236039205D5000F002E4018055006060C030E03AA01 -0E0505020F0F0C0E2A02100301032F5D33ED39322F2F332F003FFD323F332FED31300121 -35331123353236373E01373311330392FD99EAF22D6C1E252C0387DD02367A0238700D0C -102C28FCDB00000100CF023603C705EF001D0045402D24152518361535184C105E106D10 -651866197D1075180B0F0F0B521302021C52010E00001C02082A16101610022F33332F2F -ED1239332F003FFD323FED332F3130015D0121353E01373E013534262322060723353E01 -333216151406070E01072103C7FD0864A733834A6B5A59AC300D47AF57B4BB6173379B42 -022002369C3E6E29676754454C3D1FB41A239D7D63975A2B6629000100CF020F03BC05F0 -002E007740162A033903450C4A1F540C5C1F6B0864237D0874230A27B8FFC040390B0E37 -2C2B15520F16010F161F164F165F16CF16FF16061621211D52160625020A0A0E52060F1A -2A281622112A2216282C04091000010000092F332F5D121739ED2F2F2FED003FED332F3F -1239ED332F2F5D71ED393931302B5D011406070E012322262735331E013332363534262B -01353332363534262322060723353E0133321615140607151E0103BC42383994595EA54A -0E29C35D648576708F80706B63684DC32C0E4AAD5AAFC16E595F8303314B712223211E1C -B3243B474B553C8D4D443D473E24B21B23886A59721A08116F00FFFF00AB000007A305D5 -0036023B9200003700BB023700000117023C0404FDC300204015020E08020E400E600E02 -010B2B0B5B0B6B0B7F0B045D11355D1135003F35FFFF00AB0000074105D50036023B9200 -003700BB023700000117023E0384FDC3002640190302100803020E1F0E5F0E7F0E03010B -2B0B5B0B6B0B7F0B045D11355D113535003F3535FFFF008C0000077905ED0026023DA600 -002700BB029100000107023E03BCFDC30036402603023608030236103630367F36030131 -003134314B315F316B317B3106000900093F094F09035D11355D11355D113535003F3535 -0001003C0000047405D10011005840330C0F09512F063F060206060B02344F0501050510 -0B01341003200301080803032F00010000130E01050A140F0E2F0B3F0B020B2F5D3333FD -32322F11332F5D332F392F5D003FED2F12392F5DED12392F5DED39393130012111211521 -1121152111231123353311210474FD3E028AFD76014AFEB6C0B6B603820526FE55ABFEEF -8BFECC01348B0412FFFF0073FFE305A208010236002A0000001700D900CF0175FFFF006C -FE590443068C0236004A0000011600D9FE00000BB6020037311A2325012B3500FFFF0089 -000002D507500236002C0000011700DAFF240175000BB601000D0C040925012B35000001 -0086FE59050205EC004700C240990B0B0A1F0036003A1B0B1B1F13362F0B2A1F292F2436 -24463F0B391F3427392A34363441481F4427482A43364B3E44415F035A05523257365544 -6B026F046A30643264366642604679057A2D703670377541754486292B20400E10371F40 -0E10371A060028313F06341D38383C343402212125341D0A101014530C0D0F0F172A0937 -3F153128150031371D0904200074490F49704902206A4810E65D10E611173910ED2FED2F -2FED332F003FFD322F3FED332F3FED332F1112173931302B2B5D011406070E01071E0115 -14062322262735331E01333236353426270E012322242735331604333236353426272E01 -272E013534243332041715232624232206151416171E01171E01050251492C683E0303B3 -9A25742D091A523868620302142515A1FEFF850E71012882B8CD61634BAF62C6BF013CF3 -9D0106650E55FEEB919FC1607940EC52A6A801A957AA3B233711162C199DB10E0CA20A1C -4E5818291201023C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E -28152CB20001006EFE5903D70478004A00AA40810820090C37090204321902173224202B -3B34203A3B43204B3B5A1C5C2D5237534652496B1C6B2D6237624662497C1C7C28743779 -3F74428B0188248531873F1D170300252F4006351A80390139393D3E35041E1E223E1A09 -0D0D1153090D0C0C142A0638401B2F251B002F381A06041D008E4C0F4C1F4C3F4C5F4C7F -4C051D864B10E65D10E611173910ED2FED2F2FED332F003FFD322F3FED332F3FED332F5D -1112173931305D2B011406071E011514062322262735331E01333236353426270E012322 -262735331E0133323635342726272E01272E01353436373E013332161715232E01232206 -15141716171E011716171603D77F6F0205B79225742D091A5832686203021528177CCF46 -0A59DA647C8C26266C288135937B393A38AD6B64CD440A48CE63678E2B2A5E34812B8347 -4701426BA32A13361AA2AC0E0CA00A1A4E58182D0F02023B23D3434F5056422222180918 -0E27976E457A302F373123C935494F4E452323160C180A1E494AFFFF0073FFE505460801 -0236002600000117008D006E0175000BB601002D2C0C1525012B3500FFFF0069FFE703F3 -068C0236004600000116008DCE00000BB601002423090F25012B3500FFFF0073FFE50546 -0801023600260000011700DF00A80175000BB601002E2B0E1525012B3500FFFF0069FFE7 -03F3068C023600460000011600DFF600000BB601002522090F25012B35000002006CFFE1 -04FB0614001B0028006F404A3B05380C3C2232243E284B054A0C4E2245244F2859086908 -70120D0114511A17171018011304072041100403082642070A160088011617131C041A1A -01922A1F2A3F2A02231B010A852910F632ED5D10F632FD3232323210E42F003FED3F3FED -1239393F12392F3CFD3C31305D01231123350E01232202113436373E0133321617352135 -213533153301112E0123220615141633323604FBB8BC4DAD6EC6ED524444B66059864CFE -95016BBCB8FE8C4F73499CB2879750A404F4FB0C754252012E01118EDB4D4C4F2427CE86 -9A9AFB9902792218D6CCC3CD47000001FFFC0684051A06FC00030011B601500200000502 -2F11332F002FED313001212721051AFAE705051E06847800000100FD01FF01EC031A0003 -0016400C02560108002D2F013F0102012F5DED003FED31300123113301ECEFEF01FF011B -FFFF001A0000055E0801023600240000011700D900310175000BB60200110B050025012B -3500FFFF0068FFE1041D068C023600440000011600D9D600000BB602003A340B2625012B -35000002001AFE5F062B05D1001B001E00C840900F051F052E053E05401D700806381C4A -0E450F590E570F051D1E1D1C0A77098709020914100F101D1E0B770C870C020C140D0D0E -570E580F7D0E730F040B34301E401E701E031E091E1D030D0E031B1B1753030D107A0D01 -0D080000142A060F20010E0F1D06040D0C102410391042105A106A1074100710106E200F -20010A0D2B0D360D4D0D550D650D7C0D070D641F10E65D5D10F42F5D1217395D2FED332F -003F5D3C3FFD322F3F1217392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D -005D010E012322263534363703210323012101230E0115141633323637330902062B344B -2A8BA91E0679FD7C92C9021E0108021E610607535A24511108FD91FEFBFEFAFE790E0C9D -90406A150154FE6105D1FA2F1B351B524E1B08033102DBFD250000020068FE5F052E0478 -003A00470099406A0B11052B1A12162B2A0544225F25544065166C2562407B127B1D7F25 -703F0F0C041B04390559166916053A3A3653030D0A103C3D301940190219192810242420 -3F28044541100A3009080000332A060F25012506193B091A2F25132F91490F491F493F49 -03421B13854810F6ED5D10E4113910FD3232322F5D2FED332F003F3C3FED3FED332F1112 -392F5DED12393FFD322F31305D015D010E0123222635343637350E01070E012322263534 -3637362437353426272E012322060723353E01333216171E011511230E01151416333236 -373301110E01070E01151416333236052E344B2A8BA90D041955282F7A5297D26D656601 -1EA42D2A28703D4AB6610A37D06576AF403F421D0607535A24511108FE3456E944516474 -7763A4FE790E0C9E8F263B1377113D12171FC89B7F9D2D2D20081D40541817102725BF0F -24272F2E926CFD0A1B321E524E1B0801FB013705141317615560614DFFFF00C8000005B2 -0801023600270000011700DF00280175000BB60200211E080F25012B35000003006CFFE1 -062706140003001700240072B90000FFC0404A0E10370118090D3702180910373D073D1E -34203B244D074F1E45204B245A0A6A0A70140B02020316011506091C4112040508224209 -0A0000021618061A02041F263F26021F1B040C852510F632ED5D2F33FD32322F332F003F -ED3F3FED1239393F33332F31305D012B2B2B010323130123350E01232202113436373E01 -33321617113303112E012322061514163332360627FA7F98FEFDBC51B067C8EB514544B5 -6158884BBCBC4C78479EB0889650A40614FE0701F9F9EC75464E013401118EDE4E4C5025 -2701E4FAFF0281221ADCCAC7CF47FFFF000E000005BC05D1021600E70000000100C8FE5F -04CD05D10020005C40390C041C042D043D04041235000F100F020F0F090E350B03133516 -090820201C53030D00192A0006060C10030A1473220F22010F1314140A6C2110F432FD32 -5D10E61117392F33ED2F003FFD322F3F3CED3FED12392F71ED31305D010E012322263534 -3637211121152111211521112115230E01151416333236373304CD344B2A8BA90B06FDC7 -03D5FCF1030FFCF1030FFE0607535A24511108FE790E0C9E8F24331D05D1B0FE68B0FDD7 -B01B351B524E1B080002006AFE5F0460047C002C0033007B40560D1E1A1E2604290D2B1E -34043A0D3C1E3B3244044B0D4B32590D502A6C0D602B790D783212191915531D0D013C33 -3323303D29040F230B0B073F2309122A20201A1A0C0C2D1A008F350F351F353F35033301 -1B26853410F6FD325D10F4ED332F3C11332FED003FED332F12393FED12392FED3FFD322F -31305D01211416171E013332363733150E01070E011514163332363733150E0123222635 -343637260011100033321215272E01232206070460FCC93E36348F5672E7310A4A9B5102 -03535A24511108344B2A8BA90604F8FEEB012BF4E2F5B701939697B30C021B6799313030 -5B2CCD1F3109143012524E1B089F0E0C9E8F18321212012A010401120142FEF8F32A94A2 -B284FFFF00C80000049D0801023600280000011700DF00220175000BB601000F0C020325 -012B3500FFFF006AFFE60460068C023600480000011600DFFD00000BB602002320120025 -012B3500FFFF00C80000047608010236002F00000117008DFEC00175000BB60100080702 -0325012B3500FFFF00AB0000025108010236004F00000117008DFE8E0175002FB5700270 -030203B8FFC0B3090C3702B8FFC04011090C3701044F049F040201000605020325012B35 -005D11352B2B5D00000200C80000047606140005000900464016070C0B0D370808090102 -030435010800000B0F0B0106B8FFEA40110E1037080C0B1037060608041408016C0A10F6 -32ED2F332F2B2B5D11332F003FED3F3F332F3130012B2901113311210B0123130476FC52 -C602E8C3FA7F9805D1FADF0564FE0701F900000200BB000003540614000300070042400D -010C0B0D370202030601050800B8FFEA40190E1037020C0B103700000F021F0202020204 -1A7F050105880810F65DFD322F5D332F2B2B003F3F33332F3130012B0103231303231133 -0354FA7F98FCBCBC0614FE0701F9F9EC0614000200C80000047605D1000500090036401E -07562F0801080801020304350108062D07070100000B0F0B010414016C0A10F6ED5D1133 -2F12392FED003FED3F12392F5DED3130290111331121032311330476FC52C602E89CE9E9 -05D1FADF0157010B000200BB00000362061400030007002D401A05560606010201010807 -2D6F067006020606001A7F010101880810F65DED332F5DED003F3F12392FED3130212311 -33012311330177BCBC01EBE7E70614FBF4010900FFFF00C8000005380801023600310000 -0117008D00780175000BB601000C0B050925012B3500FFFF00B90000045F068C02360051 -00000116008D0000000BB6010019180E1625012B3500FFFF00C800000538080102360031 -0000011700DF00A20175000BB601000D0A050925012B3500FFFF00B90000045F068C0236 -00510000011600DF1C00000BB601001A170E0225012B3500FFFF0073FFE105DA08010236 -00320000011700DD008C0175000DB703020029260F0325012B353500FFFF006AFFE10471 -068C023600520000011600DDD800000DB70302001D1A060025012B353500FFFF00C80000 -059808010236003500000117008DFFF60175000BB602002221060B25012B3500FFFF00B9 -00000372068C0236005500000117008DFF380000000BB6010015130A1225012B3500FFFF -00C8000005980801023600350000011700DF000A0175000BB602002320060B25012B3500 -FFFF009200000372068C023600550000011700DFFF600000000BB6010016130A0325012B -3500FFFF0086FFE5050208010236003600000117008D00140175000BB6010033321A1F25 -012B3500FFFF006EFFE503D7068C0236005600000116008D9400000BB601003635063225 -012B350000010000FE5904EE05D1001B0048402E0C071C072C073C07040C0C1053080D01 -18351A030216080B0B132A050F1D1F1D4F1D03005B050114185B4F1901192F5DF4FD32E4 -5D2FED332F003F333FFD323FFD322F31305D0121111E011514062322262735331E013332 -3635342627231121352104EEFDEC0309B79225742D091A58326862050332FDEC04EE0521 -FB04144822A2AC0E0CA00A1A4E581E36170521B00001003EFE5902FD059E0030006F4046 -0C080D1A19081E1A2B082F1A3C08070D0D1153090D20251C3E22201F0503171830302C3F -18094F327F32020C0C142A06182306031C008C321D22251A1F1D4F1C7F1C021C883110F6 -5D3232FD322F10E61117392FED332F5D003FFD322F1239393F3333FD322F3FFD322F3130 -5D250E01071E011514062322262735331E01333236353426272322263511233533113311 -211521111416171E01333236373302FD0C1C100204B79225742D091A58326862030214AB -B27F7FBC0184FE7C0818164D4F2E64160A0A030703122C18A2AC0E0CA00A1A4E58172F10 -B7CB02529E0141FEBF9EFE0358632B28251B0900FFFF0000000004EE0801023600370000 -011700DFFFEE0175000BB601000B08060725012B35000002003EFFEA037A0705001B001F -0073404C0B041C042A042A1D2A1E3A1D3A1E4A1D4A1E551C641C691E741C791E0E1F1F1E -0B10073E1E0D0B0A051B1B173F03094F217F21021C1C1E1E100E008C21080D101A0A0800 -4F077F070207882010F65D323232FD322F10F63211392F332F5D003FFD322F3F333333FD -322F2F332F3130015D250E012322263511233533113311211521111416171E0133323637 -331303231302FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A7DFA7F980A0E12B8 -CB02529E0141FEBF9EFE0358632B28251B090652FE1101EFFFFF00B2FFE1052908010236 -00380000011600DB63500079405B02010900210140215021A02103EF102101902101BD00 -210150218021028B10214021702103B021C021F021039021C02102599021C021E0210310 -21602190210331002101E021010F211F214021502180210521020100241E0D1D25012B35 -3500115D71725E71725E5D71725E5D725E5D725E5D715E353500FFFF00B1FFE1045707B1 -023600580000011600DB0000000DB70201001D17091625012B353500FFFF00B2FFE10529 -0801023600380000011700DD00780175000DB7020100241F0D1D25012B353500FFFF00B1 -FFE10481068C023600580000011600DD0A00000DB70201001D18091625012B353500FFFF -007E0000050808010236003D00000117008D00070175000BB601000B0D050625012B3500 -FFFF005D000003E3068C0236005D00000117008DFF680000000BB601000B0D050625012B -3500FFFF007E0000050807500236003D0000011700DA00390175000BB601000B0A050625 -012B3500FFFF005D000003E305DB0236005D0000011600DA9200000BB601000B0A050625 -012B3500000100C80000048A05D10005001F401003013504030000070F07010214036C06 -10F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D100030073 -FFE105DA05F0001700230027006D404F040004060B0C0B1217001706190C191257015705 -53075F0B580D58115F13531710253560260126260976097915021B3415022134090A2726 -27260F18150373290F29010F291F293F29031E150F682810F6ED5D5D10F6ED1239392F2F -003FED3FED5D12392F5DED3130015D011612151402070E01232224272602353412373624 -33321613100023220011100033320003213521051E5B6163595CFBA19DFEFF5A5A61605C -5801059AA0FF47FEFCE1E3FEFD0108DEDE0107ACFD8D0273052664FEDEB8B8FEDD616566 -6863630120B9B6012167626869FD610122013BFEC5FEDEFEDBFEC901370106B300030069 -FFF0062405E1001D002A00370058403624182C321525062B32091509081603082A1E2532 -65006A0F041E150032150F00072B1518250407140F080839381F393F396F399039045D11 -12392FC4ED173910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01 -071523352E01272E01353436373E01373533151E01171E01073426272E0127113E01373E -0101110E01070E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F -4B57CE403B3A8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A -524AD88C88CC4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01 -363737AA6170B63A2D3C0002006CFFE10443047C00130020005740162A032A203C1A301C -38204F1A421C4820580668060A10B8FFC040230B1037120502110518410E0401081E4205 -0A1114021A0092221F223F22021B1B08852110F6ED5D10F6FD3232003FED3F3FED123939 -3F31302B5D2123350E01232202113436373E0133321617353303112E0123220615141633 -32360443BC51B067C8EB514544B56158884BBCBC4C78479EB0889650A475464E01340111 -8EDE4E4C502C2734FCB6027C221FDCCAC7CF47000002006AFFE104730614001900280086 -4029031C0520171526153B0A3A0E3A1C3E214C0A490E4A1C4F2153176B0E7B0E7A207B21 -1136264626021DB8FFE04034121C371D180A11371D171D0C050F133E1001263F030A1111 -001D0C0F1A1B00140F00902A0F2A1F2A3F2A6F2A040F0F231B06852910F6ED332F5D10E4 -113910ED11393911332F003FED3FFD323F33332F2B2B5D31305D01100023220011343637 -3E01372E012735211521151E01171E01073426270E01070E011514163332360473FEEBEE -F1FEEB564045B45C4CB466032AFDCF44DE5D9676C26E6E4291423F55AA9C99A60227FEF0 -FECA012F01068DC5404852113F8748B39E0A2E9C5488FBA487E45608303532AE7FC9D0D3 -0001006DFFE603EE0478003D007C40432612263B363B49014418590154186A016F0B6418 -79017A0B7418792274350F0C2C3F2B2B03161A1A1E3E16043D3D393F0309192B40090C37 -2B241B10100C2B19040900B8FFC0401009143700003F7F3F803F02331B09863E10F6ED5D -11332F2B1217392FED2F2B2F003FED332F3FED332F1112392FED3931305D250E01232226 -272E0135343637352E01353436373E013332161715232E01232206070E01151416171E01 -3B0115232206070E01151416171E01333236373303EE6BCE734FA446455771795B6C5F41 -40A24F62A45A0D42C3642D4E2A233338302D68356F9E3E642A2931342925653866E8470D -40302A2028277F5E6090260718845C5975222120211CCF33380B140F432C3D440F0E03A6 -0911114A3B354A151314483E0002006AFFE1050F047C0011001D004D40163A15351B4A15 -451B040E3F0D05153E09041B3F030A0FB8FFC040190B0D370E0E090C0F0306121B00901F -1F1F6F1F02181B06851E10F6ED5D10F4ED121739332F2B003FED3FED3FED5D3130011000 -232200111000333216172115211E010734262322061514163332360471FEE7E9F1FEEC01 -1AED376A1D01E0FEE03E44C2A49AA1A4A79C98A8022EFEE7FECC013C01110113013B1609 -A549C27FD7D6E0CDD1DAD7000001000A000003EE045D0007003840230301043F06054000 -4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32 -2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A50002 -0068FE6405EA047A001D0024007840163515740F022110090C37213E1A040F0522037717 -0117B8FFF0400F090C37173E0609050C75147A1E0211B8FFC040250D103711112217041A -05050C1E1B3A0001008F260F261F264F266026040F2601141B0C852510F6ED5D5D10F45D -ED12392FED3939332F2B5D003F3FED2B5D39393F3FED2B31305D011000051123112E0127 -2E01353412373315060215141617113E0133200003342623113E0105EAFEA9FEF3BB82DD -51555E7685E58894E1BD214B270130015DC3E0C1CED30240FEFDFEC40FFE72018E065145 -4AC4869F01128A1163FEF6A7BDE60603E80201FED5FEFBB8DBFCB20AE8000002FFFCFE59 -051AFFAE000300070020400F02500101080650050D0400000905022F3311332F33003FED -12392FED31300521352111213521051AFAE2051EFAE2051ECA78FEAB7800FFFF01230000 -03DC05D10036000400000117000401D90000001E40140302200D5F0D6F0D030D01000005 -10057F0503052F5D35352F5D35350001009A022A03C605F00016004DB90014FFE0B3090C -3715B8FFE0B3090C3713B8FFF84017171B370110130D0D085313020E03012A000018100B -2A0DB8FFC0B3090A370D2F2BFD3211332FED003F3FED332F1239332B31302B012B012311 -3426272E012322060711231133153E013332161503C6AC0E15164D40418D41ABAB4BA254 -9AA6022A0215466A2424234332FD4503AB683E45B9AB000200C8FFE508CA05D1004E005D -00E240210B18044D19012E18204D55316A186631654D791375487952735A0D05200E1037 -3DB8FFE040310E103711001A46043B033F400B0D373F3F433E3B4F3501353B351E37213E -34243134032C573450290129292B56342C0307B8FFC0403C0B0D3707070E3E0309202B3A -4F4A4F0237341F1A20201A330606461A381D3E1A3E1A3E111A00005F0F5F014F13225F33 -7F33023333572A13702B012B2F5DFD32332F5D39ED5D11332FED33332F2F123939ED332F -1112392FED39395D002F2F3FED332F2B3FED12392F5DED1217392FED393933332F5D2FED -332F2B1112173931302B2B5D0114062322262735331E01171E01333236353426272E0127 -2E013534363723112311230E01070E012B01112311333216171E011733353315213E0133 -32161715232E01232206151416171E01171E01013426272E012B0111333236373E0108CA -E2BE6ABA3D0917472D356145667943552A62377E6E0F12DDB57C0C3B2F4DCCA030BCF486 -B44847580A78B5017F24733155B53E0940B15B59723B562E642E7284FA5E36372F83572E -1178962F2F2701429BC23C22D31331161A1E4C5A4844160B131026956E254426FC4E03B2 -45792F4D4DFDD505D12D302F9364DCDC12183024C935494E4F4648170C180C1E8E024F4D -75241F1DFDA32D2F306DFFFF0089FFEB063E05D10036002C00000117002D035400000005 -B20F23015D00FFFF00AFFE59043D05DB0036004C00000117004D02280000001840115023 -60237F23030302500C600C7F0C030C2F5D35355D000200000000052706140016001A0065 -B90017FFE8403F0D10371818090C3719180910370315161575150318181701100D084213 -040E05010D08171740190119100B1A19300D500D700DAF0DCF0D050D0D021A00911C10F6 -ED332F5D33FD322F5D332F003F3C3F3FED12393F332F31305D012B2B2B2123113426272E -012322060711231133153E0133321615090123130527BC1218195E4B4DA84DBCBC58BC63 -B5BEFC72FEF18AA5027C4D87262A294C3BFCBE045D7C4952DACD033FFDD1022F000100D5 -0366028705D100030027B90000FFE840140D10370118090C3702180910370101030300B1 -022FED003F332F3130012B2B2B090123130287FED688C205D1FD95026B00000200D50366 -041805D1000300070050B90004FFE8400E0D10370518090C37061809103700B8FFE84020 -0D10370118090C37021809103746000101050503070304B13F0601060600B1022FED332F -5DED003F3C332F3C3130015D2B2B2B2B2B2B09012313210123130287FED688C20281FED6 -88C205D1FD95026BFD95026B00040095FFE3080705ED001B001F002B003700CA400C471D -481F561D591F681E050BB8FFE040160E103701200E10371F1D1C071D171D021D291E1E1F -29B8FFF44012090B37230C090B374F0D401B7A2F75350417B8FFE8404A0E103711180E10 -371F031B1B17512F034F0302030D030D115109022F51202940290229293551230A1E0840 -1E011C1E322A00260126262C2A1C1E062020390F39010D2000010000142A062FED332F5D -335D11332F123939ED332F5DED2F2F5D003F3FED332F5DED3FED33332F2F5DED332F3F2B -2B5D2B2B3130018710ED5D87C0002B2B015D010E012322263534363332161715232E0123 -220615141633323637330901230901140623222635343633321607342623220615141633 -3236032D1E934EC0D9DDBC417F3F0E3C73396D7F7B71497A250E02F5FCF4A5030C028ABE -B2B5BABDB2B6BAB2596466585866645902BE1232E6D2C9F22121AD3233959C9698422302 -68FA2F05D1FBCCE0DADCDDE0DADADFAC8888ADAD87870002000FFFE8028605D3001B002B -006E400D531D621D701C0316180B113705B8FFF040310B0F37001A010B1C051B1B051612 -120F5216092550050347080112121F2908401114372F0801081C1B001A0008030B2A01B8 -FFC0B3101437012F2BED17332F33322F5D2BED332F5D003FED3FED332F1112392F17392B -2B31305D13371134363332161514020711141633323637150E012322263D0107133E0135 -3426272E01232206070E01150FB17B6F607C78A51D1B1A44693771395C6B4FF8622F0D0D -0A190F0F19060B0C01A6EB01C7E299826D5CFEF7E6FE61592B214AA22C2B727FE162022B -A980371E30110C0D0C0E156E5800000200920000044203B0000300070025401507CB0101 -05CB0307CB010105CB00031003300303032F5DED332FED002FED332FED31301321112113 -1121119203B0FC504C031803B0FC500364FCE80318000001008301BD0252038C00030017 -400B02020300000002300202022F5D332F002F332F3130011121110252FE31038CFE3101 -CF000002008301BD0252038C000300070023401306CB020205CB0304CB000006CB000230 -0202022F5DED332FED002FED332FED313001112111052111210252FE310183FEC9013703 -8CFE3101CF4CFEC9000100B10088042203F9000B0021401409090F032F034F0303030606 -00009000A00003002F5D332F002F5D332F3130133400333200151400232200B10102B7B6 -0102FEFEB6B7FEFE0240B70102FEFEB7B6FEFE0102000002007001AA026603A0000B0017 -0065400B06102326370610171A3700B8FFF0B323263700B8FFF04015171A3712CB06060C -CB000910171A3709100B0E3703B8FFF0B3171A3703B8FFF040130B0E3715CB03030FCB00 -0920093009600904092F5DED332FED2B2B2B2B002FED332FED2B2B2B2B31300132161514 -06232226353436172206151416333236353426016B689393686893926949666748486766 -03A093686893936868934C674849666649486700FFFF001A0000055E073C023600240000 -011700D80031016B000AB602000C0B0607252B35FFFF0068FFE1041D05D1023600440000 -011600D8D900000AB6020036371D26252B35FFFF0073FFE5054608010236002600000117 -00D600A90175000AB601002F2B0F15252B35FFFF0069FFE703F3068C0236004600000116 -00D6F4000011400C014026502602002622060F252B5D3500FFFF0073FFE5054607500236 -00260000011700DA00A80175000AB601002C2B0F15252B35FFFF0069FFE703F305DB0236 -00460000011600DAF5000011400C012024302402002425060F252B5D3500FFFF00C80000 -049D073C023600280000011700D80033016B000AB601000E0F0203252B35FFFF006AFFE6 -046005D1023600480000011600D8F700000AB6020022231200252B35FFFF00C80000049D -0801023600280000011700D900400175000AB60100120C0203252B35FFFF006AFFE60460 -068C023600480000011600D9FE00000F400A027026010026201515252B5D3500FFFF00C8 -0000049D0750023600280000011700DA004F0175000AB601000E0F0203252B35FFFF006A -FFE6046005DB023600480000011600DA0000000AB6020022231218252B35FFFF0073FFE3 -05A208010236002A0000011700D600D00175000AB601002925070F252B35FFFF006CFE59 -0443068C0236004A0000011600D6FB000011400C0230354035020035311A23252B5D3500 -FFFF0073FFE305A207500236002A0000011700DA00CE0175000AB601002728070F252B35 -FFFF006CFE59044305DB0236004A0000011600DAF5000011400C0250336033020033341A -23252B5D350000010073FE5905A205EC0038009540200906060E07261D06130E210E350E -4901410E510E6506650B630E740E741C0F2CB8FFE04043090C37323236532E0D28032235 -40230123230C03101017340C021D34030A3131002A0F2B1F2B022B760901221022042B27 -040910216C25753A0F3A403A021A1509683910F4ED5D10F4ED331217392F2F5D2F5DED33 -2F003FED3FED332F1112392F5DED12393FFD322F3130012B5D0534262722242726023510 -002132041715232E01272E012322001110002132363711213521110E01071E0115140623 -22262735331E0133323603820302ADFEE066677001A1016C7F010999121F763945AF6FFA -FEDD0130010660BF48FE7102535AD45E0103B79225742D091A583268626B152B0F5F6061 -0123C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAEFD8129460F0E2516 -A2AC0E0CA00A1A4E0003006CFE590443068C002300300034009F406F243234320233200D -10373D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C057020 -112F343F344F3403343433331E220512211528401E0407070B40030D2E41150731315033 -603302333300180F0601062124121A0006180092361F363F36022B1B18853510F6ED5D10 -E4113910FD32322F5D1112392F5D332F003FED3FED332F3FED1239393F11332F332F5D31 -305D012B5D2510002122262735331E01333236373E013D010E01232202113436373E0133 -321617373303112E01232206151416333236130323010443FEFEFEF459A9520A2EC86460 -7E23231E559B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A534B3F301117FFE -E4FEF61917C012352E29276E446644430121010790D14C474F272830FCD60261221DD0C6 -BCC23F058EFE8A017600FFFF00C80000053B08010236002B0000011700D600760175000A -B60100100C060B252B35FFFF00B90000045F08010236004B0000011700D600220175001A -4012014F1B6F1B9F1B031B112601001B170808252B35002B5D3500020020000005E305D1 -001300170060403D0E1201160408520B400C0F370B0B0C05350017101702170B10170304 -070C03070000120F150303140278190F19401950190309090B0E16030614076C1810F6ED -1739332F5D10F6ED1739332F002F3F1217392F71ED12392F2BED17393130012311231121 -11231123353335331521353315330135211505E3A8C6FD19C6A8A8C602E7C6A8FE92FD19 -0455FBAB02D9FD2704558CF0F0F0F0FEA8CCCC00000100130000045F0614001E00504030 -031D161D751D0317140E51111112180D08421B041201010D08150F021A0091201F206020 -02141517030B1A110F0D881F10F63232FD17325D10F6ED2F2F003F3C3F3FED123912392F -ED393931305D2123113426272E0123220607112311233533353315211521113E01333216 -15045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC63B5BE027C4D87262A294C3BFCBE -04F4869A9A86FEED4952DACD0002002C0000033307C8000B0025006DB9001BFFD040400B -10370E300B10370C0C15520F1C1F1C021C191C192252700F010F0F09043206030A033201 -0825280F0C1F0C020C1828190C276D080B5A0A1405025A19036D2610F432ED32FDED32E4 -332FED2F5DED003FED323FED32332F5DED33332F2F5DED332F31302B2B29013533112335 -2115231133130E01232226272E0123220607233E01333216171E013332363702D5FDB4C3 -C3024CC3C35E077D663453262D3C20302D0288037E683351282A431D2E31019804A19898 -FB5F0730989724262B2A5B4B88A6242528295B470002FFF200000241063C0003001D0054 -40347C0673130204040DAA1440090C37141114111AAA0707020501081DAD0440090F3704 -10AD117F1F011F9204001A117F010101881E10F65D32FD32ED5D2FED2F2BED003F3F332F -ED33332F2F2BED332F31305D21231133131406232226272E012322061523343633321617 -1E01333236350177BCBCCA6750283A1E202D17232170684E2F3220212C162421045D01DF -81821A202322454181821B1F2322483E0002005F000002FF073C000B000F004D40150E32 -0D0D09043206030A033201082F0F3F0F020F0EB8FFC040150B0D370E0F116D0A080B5A0A -140305025A0E036D1010F632F43210FDF43210E6332F2B2F5D003FFD323FFD32332FED31 -302901353311233521152311331321352102D5FDB4C3C3024CC3C32AFD6002A09804A198 -98FB5F060A9A0002FFFC0000023605D1000300070032401D025301010605057F00700202 -00027F0901099200041A027F050105880810F65D32FD32E65D2F2F5D002F3F332FED3130 -01213521032311330236FDC6023ABFBCBC05379AFA2F045D00020080000002DF07D3000B -00190059401F0C701201121216AA0F0F09043206030A0332010819290C400B0E370C1329 -12B8FFC040130B0F37120C1B6D080B5A0A1405025A12036D1A10F432ED32FDED32E4332F -2BED2F2BED003FED323FED32332FED332F5D333130290135331123352115231133131406 -232226353314163332363502D5FDB4C3C3024CC3C30A939C99979E454D49489804A19898 -FB5F073BA8CFCFA886726E8A00020001000002300668000D0011004840150006060A5003 -0310050F0D2900400B103700072906B8FFC040130B1037067F13011392000E1A067F0F01 -0F881210F65D32FD32E65D2F2BED2F2BED002F3F332FED332F3331300114062322263533 -1416333236350323113302308B8C8A8E924145414427BCBC06689AC0BE9C7A6B6283F998 -045D00010089FE5F031C05D10020004F402D1C20090C3709043206030A03320C01081717 -13531B0D1818102A1E1E0B02226D0A080B5A0A140305025A036D2110F4F43210FDF43210 -E61112392FED332F003FFD322F3F33FD323FFD3231302B21233533112335211523113315 -230E011514163332363733150E012322263534360174EBC3C3024CC3C3C2060942582141 -1309245122879A099804A19898FB5F981C29265150130B9E0A0BA08C22350002008EFE5F -024605DB0003001B0056401C0820090C371B1753070D014402400B0D3702030E050D1104 -04142A0AB8FFC040170B17370A0A0E7F1D011D9200600F1A01607F0E010E881C10F65DE4 -FDE4E65D11332F2BED332F002F333F3F2BED3FFD3231302B01233533130E012322263534 -3637113311230E0115141633323637330183D4D4C3245122859C2508BC3C060742582141 -13090518C3F8990A0B9E8E3F6F19040BFBA31A361B5150130B00FFFF002CFFEB034D0801 -0236002D0000011700D6FF6C01750014B1011AB8FFC040090B0E37001A160415252B2B35 -0002FFC2FE5902AF068C0015001C005540340A011C0102551B651B751B0318161A1B1B1A -1A123E150507070B40030D1A1A4F1301137F06010616121A1306160370150115921E10F4 -5D1732ED2F2F5D2F5D332F003FFD322F3FED332F332F1239395D31305D05140623222627 -35331E01333236373E01351123352137230B012313330209C8A828832C0A1C5F2D485816 -160DE901A5A69FB9B89BE4E31BC4C8100CB30B1C282828715103849EB40100FF00017B00 -FFFF00CDFE59057505D10236002E0000011600DCFB00000AB601001A0C0500252B35FFFF -00C1FE5904AF06140236004E0000011700DCFF7C00000011400C01301A401A02001A0C05 -0A252B5D3500000100C1000004AF045D000B007D40512802D801DB090309010F0D1F011D -021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A0802 -050A0507050105080B02600A700A020A0A00000D200D400D0208031A05890C10F4FD325D -11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0015D -7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B045DFDD102 -2FFDFC00000100C8FE59047605D1001A003F40240C20090C37111115530D0D0203043507 -01081010182A0A0A0105051C0F1C010414016C1B10F4ED5D11332F12392FED332F003F3C -ED3F3FFD322F31302B29011133112115211E011514062322262735331E01333236353426 -02BFFE09C602E8FEE30204B79225742D091A583268620605D1FADFB0122F18A2AC0E0CA0 -0A1A4E581E3E00010005FE5901E906140018003D40240A20090C370F0F13530B0D020104 -01080E0E082A1616017F1A011A92041A7F010101881910F45DFDE45D12392FFD322F003F -2F3F3FFD322F31302B2123113311331E011514062322262735331E013332363534260149 -8EBC6C0105AE8525642809184E285E52010614FA00123724A2AC0C0CA00B174F57153300 -FFFF00C8FE59053805D1023600310000011600DCFE000013400E01201630164016030016 -0A0400252B5D3500FFFF00B9FE59045F047C023600510000011600DC8B000013400E0100 -2310232023030023170D00252B5D3500000100C8FE59053805D10016009D401F00076107 -7107A107040C070B0C1B0736074607540765077507B001B0070A07B8FFC040510B113776 -06010F0102061F01150626013601340646014406560153066006790170060E0406015A01 -550602111115530D0D0207040806030A0104080110100A06010207130A78180F18401802 -0213046C1710F4ED5D10F4FD11393911332F2F003F33333F3C1239393FFD322F31300172 -715D5D002B5D71043501112311210111331114062322262735331E0133320480FD01B901 -330284B9CEB42751250B163A1E7F948A053EFACC05D1FBA00460FA18BFD10806A8050A00 -000100B9FE59045F047C00260045402B03150C191615751504100D084213040E050D081E -1E22531A0D1D1D021A1791281F28602802100B1A0D882710F4FD325D10F6ED332F003FFD -322F3F3F3FED123931305D0435113426272E012322060711231133153E01333216151114 -062322262735331E01333236373603A31218195E4B4DA84DBCBC58BC63B5BECCB4274E26 -0B163C1A4C6117162556024B4D87262A294C3BFCBE045D7C4952DACDFD0FBFCC0706A805 -0A262626FFFF0073FFE105DA0746023600320000011700D8009B0175000AB6020026270F -03252B35FFFF006AFFE1047105D1023600520000011600D8E300000AB602001A1B060025 -2B35FFFF0073FFE105DA0801023600320000011700D9009C0175000AB602002A240F0325 -2B35FFFF006AFFE10471068C023600520000011600D9E400000AB602001E180600252B35 -FFFF00C8FE59059805D1023600350000011600DCF600000AB602002420050D252B350001 -001BFE590372045D002700574034000D100D200D032120090C370C090F131317430A0F05 -1C090826260253220D25251F2A05050913132940297029020C1B1A09882810F4FD325D11 -332F11392FFD322F003FFD322F3F2F3F3CFD322F11123931302B5D1E0133323635342627 -231133153E013332161715232E012322060711331E011514062322262735333C4E285E52 -0102A6BC70AB59312C2C0A2A4F3657A24B840105AE8525642809FA174F57153323045DA5 -5A4B0507C10A094D3DFCFB123724A2AC0C0CA000FFFF0086FFE505020801023600360000 -011700D6004A0175000AB6010035311A00252B35FFFF006EFFE503D7068C023600560000 -011600D6AF00000F400A017F38010038341A00252B5D350000010000000004EE05D1000F -004140250D0A003203030F09043506030F0F111F114F11030B020B085B090D0009140204 -5B4F0501052F5DF432ED393910E4332F2F5D002F3FFD3212392FED393931300121352111 -21352115211121152111230214FEB4014CFDEC04EEFDEC014CFEB4C602E48F01AEB0B0FE -528FFD1C0001003EFFEA02FD059E0023006E40210420090D37181507510A0A0E030F140B -3E110F0E0523231F3F03094F257F250216B8FFC0401E090B3716160713008C250909070C -0A0E111504181A0C07400D103707882410F62B32ED17392F12392F10F63211392F2B5D00 -3FFD322F3F3333FD322F1112392FED393931302B250E012322263D012335331123353311 -331121152111211521151416171E01333236373302FD357D31ABB27F7F7F7FBC0184FE7C -012DFED30818164D4F2E64160A0A0E12B8CBA88601249E0141FEBF9EFEDC865358632B28 -251B0900FFFF00B2FFE1052907C8023600380000011700D700610175000AB601002B1E0D -1D252B35FFFF00B1FFE104570653023600580000011600D70600000AB601002417091625 -2B35FFFF00B2FFE105290746023600380000011700D800630175000AB6010020210D1D25 -2B35FFFF00B1FFE1045705D1023600580000011600D80100000AB60100191A0916252B35 -FFFF00B2FFE105290801023600380000011700D900630175000AB60100241E0D1D252B35 -FFFF00B1FFE10457068C023600580000011600D90100000AB601001D170916252B350001 -00B2FE5F052905D1003400634044231223183D093D2139224C094C214B22771377170A33 -20090C372E2E2A53320D1C24060D031534060A2F2F272A00060023030C1B141E76360F36 -1F364036030F140C6B3510F4ED5D10F6ED1217392FED332F003FED3F1239393FFD322F31 -302B5D053436372206232226272E01351133111416171E01333236373E01351133111406 -070E01070E011514163332363733150E012322260314050509190F8CD0475147C621272C -976A6B962D2721C647512D683D0405535A24511108344B2A8CA8741A271601494852E8A9 -037BFC7B798C394142414239936D038AFC85A2F1502C3B10143C17524E1B089F0E0C9F00 -000100B1FE5F0567045D002A005C40220B0619077A07032720090C370205150905114205 -0A010822221E53260D23231B2A29B8FFC04015091037292914021A17922C1F2C602C020B -1A08872B10F4ED5D10F4FD32322F2BED332F003FFD322F3F3FED3F3C123931302B5D0437 -350E01232226351133111416171E0133323637113311230E011514163332363733150E01 -23222635340395065FAE69B0C4BC101A1B565249AD4BBC1E0607535A24511108344B2A8C -A81D1D7C4B50D7D002D5FD8455792B2C284C3B0342FBA31B351B524E1B089F0E0CA08D24 -FFFF005C0000078D08010236003A0000011700D601690175000AB60100110D0600252B35 -FFFF005600000636068C0236005A0000011700D600BB0000000AB60100110D0600252B35 -FFFF0006000004E608010236003C0000011700D6FFEE0175000AB601000D090500252B35 -FFFF003DFE64047F068C0236005C0000011600D6DD00000AB601000C080400252B350001 -00B900000308061E0010002440140000043F0D0009080000081A6F097F090209891110F6 -5DED332F003F3FFD322F313001232E012322061511231134363332161703080A1F642679 -67BCC2BF3F652A055E09136B8CFB7D0482C2DA0C08000004001A0000055E08000012001E -00210025013F40862B20372040205A18551A501E55206918651A651E0A180B170D4A0646 -125906561278027703082020211F02370187010201140012002021033704870402041405 -05060606091226062912370638124606491258127A0675120B24240C702501251651A00C -F00C02060C160C3F0CF00C040C03340F2170210221212006120405201C401C020C1CB8FF -C0406C393937501C701C021C01050824400E10370F242F240222222440090D372413290F -0F2F0F4F0F8F0F9F0F050F19290009200940098009900905090F270106090F122405050C -0024003A0042005A006A0074000700006E270F27010A052B0535054D05550565057B0507 -05642610E65D5D10E62F5D1217395D2F5DED2F5DED2F2B332F5D2B003F3C2F5D2B335D12 -17392F5DED2F5D72ED2F5D12392F3130015D8710FD5DC0C0C08710FD5DC0C008C0015D00 -5D212303210323012E013534363332161514060727342623220615141633323613090207 -2337055ED394FD8094C901F83139A17373A039302A47393948493838487DFEFEFEFD021D -F39595019FFE6105571F65406D90906D40651FC4364B4A37394B4CFC6602CBFD3505B7CD -CD0000040068FFE1041D07330032003F004B004F00D6B50C0A190A0230B8FFC040880B0E -37590E51215C38690E63216F397B0A7A1474207B380A0208343D3011401102111149084F -4F4E4E43AA062916299F290329400B0D37292F0123494F1F011F291F184149043D41080A -01084E400D10374C4C4E40090C374E4E2640292F2C3F2C022C2C26297F468F4602464600 -0F1F011F1134021A001F0B0091510F511F513F51033A1B0B855010F6ED5D10E6113910FD -32322F5D12392F5DED332F5DED12392F2B332F2B003F3FED3FED33332F5D123911392F2B -5DED332F332F1112392F5DED123931305D012B5D2123350E01070E012322263534363736 -2437353426272E01232206070E010723353E01372E01353436333216151406071E011503 -110E01070E0115141633323603342623220615141633323613032313041DBB1955282F7A -5297D26D6566011EA42E29296D3F3A692A3150130A2369311C259F73739E2E237D87BB56 -E9445164747763A443473939484938384895F3959577113D12171FC89B7F9D2D2D20081D -4156171811140B0D1D07BF0914081E532E6D90906D335B1F22AA9AFE1D01370514131761 -5560614D042C364B4A37394C4D0262FEEE011200FFFF000E0000076D0801023600900000 -0117008D01DE01750011400C020F164F16020016140607252B5D3500FFFF0068FFE3073F -068C023600A000000117008D01690000000AB6030055541B00252B35FFFF0073FF6E05DA -08010236009100000117008D007801750013400E03303A403A603A03003A3B0F00252B5D -3500FFFF005DFF6C0471068C023600A100000116008DE2000011400C03302E402E02002E -2F0C00252B5D35000001015A03400249045D00030014400A01560205032D000201022F5D -ED003FED3130012311330249EFEF0340011DFFFF005C0000078D08010236003A00000117 -004301730175000AB60100100D0600252B35FFFF005600000636068C0236005A00000117 -004300C30000000AB60100100D0600252B35FFFF005C0000078D08010236003A00000117 -008D01690175000AB601000F100600252B35FFFF005600000636068C0236005A00000117 -008D00BF0000000AB601000F100600252B35FFFF005C0000078D07500236003A00000117 -008E016C01750020B10213B8FFC040120D10370F13010100135F13020013100600252B5D -355D2B35FFFF00560000063605DB0236005A00000117008E00BF0000001EB10213B8FFC0 -40100D10370F1301010013010013100600252B5D355D2B35FFFF0006000004E608010236 -003C000001170043000A01750014B1010AB8FFC040090D1037000A0A0500252B2B35FFFF -003DFE64047F068C0236005C000001160043FF000015401001200B300B600B700B04000B -090400252B5D35000001FFED03E40186061300030032B90003FFE4B70D10370101030100 -B8FFAEB30D103700B8FFE840090A0C3700007F0201022F5D332F2B2B003F332F3130012B -010323010186A5F4010F0613FDD1022F0001FFD00685051606FD00030011B60150020000 -05022F11332F002FED3130012135210516FABA0546068578000100890000048B05EE0028 -00934063411253125B1A6312730273129024B603B6240923200551000810082008030808 -1F1C09510F0C1F0C3F0C4F0C040C141418490C01100202284A01080F2A1F2A022327021C -1F20050C08215F1D6F1D7F1D031D0A061306081D13040220004000020000022F332F5D12 -17392F2F332F5D332F3333FD321139395D003FFD323F1239ED332F2F5DED3939332F5DED -393931305D2901353E0137233533352335333534123332161715232E012322061D012115 -21152115210E01071521048BFBFE67620E9DA4A4A3FDCD6998400A3E98568C8B016CFE93 -016DFE8F0F705A0345CF1B817B868C86A7C801012211CE2A30A59094868C86659F2C0B00 -000200B1FFE60511053200180022005F4013380D391C491C580D6A217A21060C100B0D37 -07B8FFF0402A090A37191F290F2615690F790F05013222220F1F32150B0B07330F090C0C -1913260001000024220114122FFD3211332F5DED332F003FED332F2FED12392FED5D2B2B -31305D01211416171E013332363733150E0123200011100021320011272E01272E012322 -06070511FC66423C3AA3607AEA590D82C07FFEC9FEAD01420113FF010CBE02262928875A -9FD50D027884B53E3C3B5648D53637015B0141013A0176FECDFEE92A549133333AD4B100 -FFFF00ABFFE1078305D50036023B9200003700BB023700000117024103F2FDC60016400C -040302100A010B400B7F0B025D1135003F353535FFFF008CFFE107A405ED0036023DA600 -003700BB02910000011702410413FDC600384026040302360A0403023900392039403980 -39FF3905013100315B317B3103000900093F094F09035D11355D11355D11353535003F35 -3535FFFF008AFFE107A405DA0036023FA400003700BB02910000011702410413FDC60038 -4026040302320A040302350035203540358035FF3505012D002D5B2D7B2D03000900093F -094F09035D11355D11355D11353535003F353535FFFF0099FFE1076F05DA00360240A600 -003700BB023100000117024103DEFDC6003640240403020E0A040302116F118011FF1103 -01092B093B0944095B097F0905000400043F04025D11355D11355D11353535003F353535 -00010061FE5901FA00880003002CB90002FFE840170D10370318090C3700180910370F01 -010101000D0202002F332F003F332F5D3130012B2B2B1B01330161A5F4FEF1FE59022FFD -D10000010161FE59037000140014002440150B021B012B013901041207070B53030D0E2A -0000062F332FED003FFD322F2F31305D0514062322262735331E0133323635342627331E -010370B79225742D091A58326862060399020659A2AC0E0CA00A1A4E581D491913340001 -0212050C0305068C000300144009030302002D100301032F5DED002F332F313001032303 -0305319131068CFE8001800000030100050C0418068C00030007000B003F401506050AAF -090902000002072B0640090A37060A2B0BB8FFC0400C090B370B06002D0B100301032F5D -33FD322F2BED2F2BED002F332F12392FED3939313001032303012335330523353302FD31 -803101FDBFBFFDA7BFBF068CFE800180FE8CC3C3C300FFFF00070000055E05D102360024 -00000117019DFDF5FF450012400A020E03020E1F0E4F0E025D1135003F35FFFF00000000 -059005D10037002800F300000117019DFDEEFF4500204014010F030F111011401103011F -0C010C00400101012F5D352F5D355D003F35FFFF00000000062E05D10037002B00F30000 -0117019DFDEEFF4500204014010F030F112011401103011F0C010C00400501052F5D352F -5D355D003F35FFFF0000000003C805D10037002C00F300000117019DFDEEFF4500244018 -010F03011F0C010C00400201020F111F11401150116011055D2F5D352F5D35003F35FFFF -0000FFE1069905F00037003200BF00000117019DFDEEFF45002240150227030F29010227 -1F270101000F000F100F700F035D1135355D11355D003F35FFFF00000000060105D10037 -003C011B00000117019DFDEEFF45002440180109030F0E1F0E2F0E03011F090109001F04 -4004700403042F5D352F5D355D003F35FFFF0000000006D705F0003701BB00B700000117 -019DFDEEFF45002A401E012B03011F2B012B00001C101C201C031C0F2D202D502D602D70 -2D8F2D065D2F5D35115D35003F350004FFCB00000267068C00030007000B000F005C401D -0A090FAF0C0C06070706060205010B2A0A40090F370A0A0404000E2A0FB8FFC04015090F -370F0F0707017F11011192001A7F010101881010F65DFDED5D11332F332F2BED11332F33 -2F2BED002F3F332F332F12392FED39393130212311331303230301233533052335330177 -BCBC0438543801B0ABABFE0FABAB045D022FFE800180FE8CC3C3C300FFFF001A0000055E -05D1021600240000FFFF00C80000052B05D10216002500000002001A0000058605D10003 -00060058403C49056A050205041A000003061A01010215001A0125002A0145004A014B02 -4403590256036B0264037B0275030E020305030000080105010203065401002FED3F1239 -012F11332F17395D31308710FD8710FD04C0005D2901012109020586FA94023201080127 -FE50FE5105D1FAD7047BFB85FFFF00C80000049D05D1021600280000FFFF007E00000508 -05D10216003D0000FFFF00C80000053B05D10216002B0000FFFF0089000002D505D10216 -002C0000FFFF00CD0000057505D10216002E00000001001A0000056205D10006006C404E -0902390258020378017703020203020114000600020314040405490546067C0573060405 -030405002400390042005A006A007400070000080F08010F08010A042B0436044D045504 -65047B0407042F5D5D5D11332F5D002F3F3130015D8710FDC08710FD08C0015D005D2123 -09012301330562D5FE2CFE2CCB022CF00505FAFB05D1FFFF00C8000005F605D102160030 -0000FFFF00C80000053805D102160031000000030072000004BF05D100030007000B0047 -40130535060609013502030A350908054009133704B8FFC0401609133704050504030204 -0908720D0F0D1F0D0209680C10E65D10E41117392F2F2B2B003FED3FED12392FED313001 -213521032135211321352104BFFBB3044D34FC1B03E534FBB3044D0521B0FD08B0FC77B0 -FFFF0073FFE105DA05F0021600320000000100C80000053B05D100070027401703350603 -010501140078090F0940095009030414056C0810F6ED5D10F6ED002F333FED3130212311 -2111231121053BC6FD19C604730521FADF05D100FFFF00C80000049605D1021600330000 -000100760000050005D1000C00EB404709040908450B540B6409640A660B9309930A960B -A409A30AA70B0D0608060B1608160B28032708340A340B430A430B5903550B670B760B8B -0399049908B804B808EB04EB08150BB8FFC0B32529370AB8FFC0B325293709B8FFC0B325 -293708B8FFC04030262937030203080908B3040304030B0A0BB302030264048D02020403 -0203080B3501083505030403A009B009D0090309B8FFC04023191E371009200960097209 -D009E00906090703040B0908070602000010000200000E022F11332F5D1217392F2F5D2B -71332F003FED2FED11173931305D011087ED87C01087ED8708C0012B2B2B2B5D71290135 -090135211521011501210500FB76026CFDA80448FCC0024AFD8A039AB80258020EB3B0FE -061AFDA3FFFF0000000004EE05D1021600370000FFFF0006000004E605D10216003C0000 -FFFF00440000053805D10216003B0000000100B30000064405D10023006240402515251E -021B067518011834380948096F090309192209030810030822142311141023071B180714 -108008A008B0080320255025702503080825240F253F25025D1112392F5D5DC4ED393910 -C42FED2FED002F3F1217392F5DED5D393931305D011406070E01071123112E01272E0135 -1133111416171E01171133113E01373E013511330644514D50E197C59AE24B4E51C63B34 -359A62C5619C353836C6038E9DD74345460AFEBE01420B484245D69C0243FDA66D8E2C2D -2F0703E4FC1C082D2E318571025A0001006C0000062005F00027007D40125B195B256C1A -641D64216C24791A79240821B8FFC0B3090B371DB8FFC0403B090B373002301440024014 -041925140204160B341F02261835011608251202191214081502141C272222290F29010F -291F299029A029040E15171C2FC4ED5D5D11332FC4123939ED2FED2FED003F3CFD3C3FED -1217395D31302B2B5D2901113E01373E01353426232206151416171E0117112135213526 -023510002120001114020715210620FDC03C772C2D34FEDCDCFE342D2D763CFDC0019A9D -CB0177013101310177CB9D019A01832658393B9F6ACEF9F9CE6A9F3B395826FE7DAE7C5A -0138C20114015EFEA2FEECC2FEC85A7CFFFF007E000002E207500236002C00000117008E -FF240175001940130200104010501060107010050100100D0409252B355D3500FFFF0006 -000004E607500236003C00000117008EFFED01750019401302000E400E500E600E700E05 -01000E090500252B355D3500FFFF006CFFE10443068C0236012E00000116019DE200000A -B6020024210800252B35FFFF006DFFE603EE068C0236013000000116019DCC000013400E -014041504170410300413E1219252B5D3500FFFF00B9FE64045F068C023601C600000116 -019D1D00000AB601001A170E16252B35FFFF00A000000193068C023600D500000117019D -FE8E0000000BB601000704020325012B3500FFFF00B1FFE2045C068C023601D100000116 -019EFB00000F400903020100221F0717252B35353500000200B9FE64048D061400180037 -0077404F16200D1037070F4A1B4326433756267929062E200D0F3733200D103705200D10 -371615203E5F21012121032B3E0C0135400309080C15120F200120281B12122008191B00 -90391F390132071A08883810F6FD325D10F6ED1239392FED2F5D1239003F3FED3FED1239 -2F5DED393931302B2B2B5D012B011400232226271123113436333216171E011514060715 -1E01073426272E012B0135333236373E01353426232206070E0115111E01333236048DFE -F3CD4FB03FBCFDDF5A953B39448B7F9FBCC2453A3B924924244282272E2D8A6D49682120 -1E42964895A101BCCAFEF82C2AFE2405D2E0FE2B2E2B8A5B7FBD25111AC797596F1F2016 -A01D1E2262557074352C2C753EFCA2261F9D0001003DFE64047F045D0008006940497507 -01070607081A00010007061A04050505030C0A001A002A004A0059006900750007000505 -15052505450556056605730507050001011A059004A0040204040A091F0A4F0A5F0A035D -1112392F5DC4ED10C42F5D2F5D003F3F31300187FDC08710FD08C0005D09011123110133 -0901047FFE37BCFE43CC0157015A045DFBDBFE2C01D40425FCC4033C0001006CFE6403D6 -0614002F0058401D4600570065287F1178207D21061D1A3E1B012D3F0F070C1A1A19121C -07B8FFE04018090C37000701071C070BB40303310F313F3102231B12853010F6ED5D1133 -2FED33332F5D2B2F1239392F003F2FED3FED3931305D251E011514060723353E01353426 -2B012226353412373E013735213521150E01070602151416171E01171E013B013216039A -201C5A43B35A4C3D2F91E5DE5C4E4BC56CFE3402E875E55A5972060C0A31272479385647 -664B285B2854A93F0E4F7745394CE8E58C01007770CD5E099E874ECE7875FEE88F224828 -264B18160534000100B9FE64045F047C00160038402303151615731503100D084213040E -05010C0D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3F3F3FED12 -3931305D0123113426272E012322060711231133153E0133321615045FBC1218195E4B4D -A84DBCBC58BC63B5BEFE6404184D87262A294C3BFCBE045D7C4952DACD0000030089FFE1 -04750614001700240031006CB9002FFFD6B30A0D3729B8FFD640400A0D37212A0B0D371B -2A0B0D37662C01263E0F241F24022424061E3E3A124A120212012C3E3506450602060A25 -181A0000331F333F330224261A800C900C020C2F5DFD325D11332FFD32003F5DED3F5DED -12392F5DED5D31302B2B2B2B011406070E01232226272E01353412373E01333216171612 -072E01272E01232206070E010705211416171E01333236373E0104752E243AD29898D23A -252D2D2639D39797D339252EBD043120296C4F4F6C29222F040272FD8E2E2428704F4F70 -28242E0300BEFD548789898754FDBEAE010753828A8A8254FEFA548FD6364639394637D5 -8FA18EE93E453E3E453EE900FFFF00BB00000177045D021600D50000000100C1000004A8 -045F001800D3403B0601060216182618451856186618071C023A0169027A029701A602A6 -18C70208020203C60101860101011A001800090801F90801080B0A03090109B8FFEE4040 -10183709B402181703177F0301091808020305010C1010143F0C05060505011A172A1736 -178017A417051517251777179417E917F917060917180201050F0F00B8FFF04013090E37 -00001A0F1A1F1A3F1A0308031A05891910F6FD3C5D11332F2B332F17395D71002F2F3F3F -FD322F111217395D3130018710C0C07AF52B7118C0C004C07172018710FD5D7108C0015D -71212301071123113311013E013332163315232E01232206070304A8F8FE3D70BCBC0180 -487F3F1C3C070B102F0D2F4D1DFB01E96DFE84045DFDDA01A14F3802A602022F21FEF100 -0001003D0000047F061400070085401305040502020306011A07000002031A04040505B8 -FFF0401C0C10372B002604200703050402030601000806680701070506030400B8FFC040 -260910370C001C004B005A006A00790006008D090F090103041304440455046504760406 -04820810E65D5D10F65D2B1117395D2F003F3F17393130015D2B8710FDC01087FDC008C0 -08C0012123090123010333047FCDFEB8FE97C401D1D7D3033DFCC3042001F400000100B9 -FE640465045D00150046402C12200B0D3703200B0D37080205140B051042050900080A0C -0102131A0092171F1760179017030D091A0A881610F6FD3C5D10F6FD3939003F3F3FED3F -3C12393931302B2B2123350E012322262711231133111E013332363711330465BA4A874E -4B7854BCBC209E5B5D8836BC764E3D3650FDF305F9FCBA2752433C034000FFFF003D0000 -047F045D02160059000000010068FE64041106140046008A403C0F020F06090E1B0E241E -24283415361E36284428473C562D563C691779170F1918333F32320C24213D22013F3F0C -030C191C3232232121122B1B1C04B8FFD6400E090C37040408B4231C1280000100B8FFC0 -400B090C370000483A1B12854710F4ED11332F2B5D123939ED332F2B2FED12392F2F332F -1239003F2FED3FFD3212392FED393931305D0514060723353E013534262B012226272E01 -353436373E0137352E01353436373523352115212206070E01151416171E013B01152122 -06070E01151416171E013B013216171E0104115B42B45C4B3A2E8C8CB93F424532302C89 -4C7D96575AE40338FF00446D302D3641332D7650AAFED942692F2B334B403F995A1C4467 -211F226055A83F0E4F7844374E36393C97584E84353145130B1CA56853873A069A9E1D22 -2066434F621A1716A52827256A3B66721919072F25235F00FFFF006AFFE10471047C0216 -00520000000200B9FE640494047C0011001E0042402C3A17351E4A17431E560D05060315 -3E0F041C400309080C121B3A004A00020090201F206F200219071A08881F10F4FD325D10 -F65DED003F3FED3FED123931305D011000232226271123113436373E0133320003342623 -220615111E013332360494FEEBDE41A348BC47423EBB66F30100C2A0929E8D49774BA2B0 -0241FEFEFEAB242BFE2B04227BB9423E42FEDAFEDFDACCC0B6FE6D221DDE00010069FE64 -03FA04770029005C40120C020C06201325233614362340237A1F0817B8FFE040140E1037 -3F194F190219191D3F1504030C263F0B04B8FFD64011090C370418180408B400002B201B -12852A10F4ED11332FED33332F2F2B002FED3F3FED332F5D31302B5D0514060723353E01 -3534262B012226272E013510002132161715232E01232206151416171E013B01321603FA -5E3EB1564D3C2D5C75C64B49530137010354A0430C5E9D44A6BD393232814B64738E6057 -AA3B0E4B7947364F3C4342D092010E0144251BD33E32EEC1708E2D2C2799000100B1FFE2 -045C045D00170030401F1607050F3E0903560366037903880305030A151A0091191F1901 -091A06871810F6ED5D10F6ED003F5DED3F333130011406232226351133111416171E0133 -3236373E01351133045CF4E2DFF6BC14201F6B5C56731E1D15BC0197DADBD7DE02C6FD7F -5D782E2B2B2C2C2C7B5A028100010030FE640488045D000B00A240492A02250839023408 -4B02440879020710091A0A0B0A071A060506011A000B00031A04050402050B080A000606 -0A0405064A0445066A0465067A04770608040C0605080B050204040A00B8FFE040100A10 -3700000D2F0D010604200A1037042F2BC45D11332F2BC4121739003F3F5D111739313001 -8710ED8710ED8710ED8710ED4B535840140B030A070002030A0601080409070005040906 -010F0F0F0F59005D0123090123090133090133010488D5FEA6FEA2CB01BCFE4FD5014F01 -53CBFE4FFE64026BFD95030202F7FDA80258FD11000100B0FE6405E3045D0023006B4047 -1B062618751802183D39094909020919220903081005080C221A3F237F230223111A3010 -7010021023071B18071A109008C008025025602502080825240F25010F251F253F25035D -5D1112392F5D5DC4ED393910C42F5DED2F5DED003F3F1217392F5DED5D39393130011406 -070E01071123112E01272E01351133111416171E01171133113E01373E0135113305E360 -4F52C873BB73C753505FBC4B34388643BB4386383B44BC01BE72A835373705FE68019806 -343936A772029FFD9C718723261E0403C7FC39051C27287B7802640000010071FFE20611 -045D003D0079402D361F3632441F4432551F55326804680F691A69377D1A7D370C283B28 -0903061605210D303E060A3A400C0E3718B8FFC040240C0E37361B001B1B13003A29090A -291A18139028A028C0280328283F3E1F3F3F3F6F3F035D1112392F5DC4C4ED393910C4C4 -2FED2FED2B2B003FED39393F1217392F31305D011406070E0123222627230E0123222627 -2E013534123733150602151416171E01333236373E01371133111E01171E01333236373E -01353402273533161206112F33379D7360A2250627946671A333332F7290E4879F101E1A -5D47334714161D06BA091C1518393A465E1B19169D89E4907201F760C14B505963434462 -5D4C4CBF61AA0115A7116CFECCB742713F37491911122C0F0248FDB8112C111316473937 -7A41B601346D11A7FEEBFFFF00050000022D05DB021600770000FFFF00B1FFE2045C05DB -023601D100000116008EFB000015400F02301D501D601D0301001D180717252B355D3500 -FFFF006AFFE10471068C0236005200000116019DE200000AB602001B180600252B35FFFF -00B1FFE2045C068C023601D100000116019DFB00000AB601001B180717252B35FFFF0071 -FFE20611068C023601D400000117019D00B60000000AB60100413E1300252B35FFFF00C8 -0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500 -0001FFFF0000060705D1002500614025652476240216341F1F061E1A351B03093506182F -073F074F077F0704070717590F010F1500B8FFC04014090D370000270F27011A1F1D011D -1D1F17141A182F33FD32322F5D2F5D11332F2BED5D12392F5D002F2FED3FFD3212392FED -31305D011406070E012B0135333236373E01353426272E01232111231121352115211121 -3216171E010607534957AF8A6E5D5B782F38343135329583FEEBC6FE520468FE0C015398 -BF554C4901CC6CB13A4530B11022286F4E4B73232213FD220521B0B0FE6824423BAEFFFF -00C80000048A07ED023601EB00000117008D003501610015401001300840086008700804 -0008070405252B5D350000010073FFE5053905EC002A006A400C3A1C491C58057606790C -0511B8FFE040370A103701200A103720341D1D0F032A2A26340309131317340F021E1E13 -000010000200002C0F2C010F2C1F2C2F2C3F2C041D206C09682B10F6FD325D5D11332F5D -33332F003FED332F3FED332F1112392FED31302B2B5D250E012322242726023534123736 -243332161715232E01232206070E01072115211416171E013332363733053963EC91A9FE -EE61616969625F0112A98CF65F104EF98D6DAE4846580F0334FCC258474AC4708AF75010 -4127356863630120B7AF011F66626C3427DF40523A3B3BAD72AD8BD94648494A4300FFFF -0086FFE5050205EC021600360000FFFF0089000002D505D10216002C0000FFFF007E0000 -02E207500236002C00000117008EFF240175001940130200104010501060107010050100 -100D0409252B355D3500FFFF002CFFEB02EA05D10216002D000000020012FFFD08A205D1 -000E003D0066B3460C0130B8FFACB30A10371EB8FFC0401D0B0E37073437371618353503 -28282C352408341637081416163500150FB8FFF440110E11370F713F2F3F011813003501 -3535282F332F5DED5D10F62BFD11392FFD32002FED2FFD322F3FED12392FED31302B2B5D -013426272E01232111213236373E01371406070E01232111210E01070602070E01070E01 -2322262335331E01333236373612133612372111213216171E0107D33235379083FEEC01 -0F858F363834CF554754C098FDEEFDF0030B0308251D1D492F306544153C0C0E0A1E0F24 -401647430E050B040391015298C0554C4901C94B72232510FDCB1A252769556CB0374238 -052171D955D6FEEC595A6B2B2C2603C001021617470146012D62014487FDB823423BAE00 -000200C80000088305D1000E002700554020171E07342121161F1B030834161A560F0120 -1F081400166F160216161900150FB8FFF4400F0E11370F71294029011D19141A6C2810F6 -FD325D10F62BFD11392F5DED39395D002F2FED3F3312392FED39393130013426272E0123 -2111213236373E01371406070E0123211121112311331121113311213216171E0107B432 -35379083FEEC010F858F363834CF554754C098FDEEFD65C6C6029BC6015298C0554C4901 -C94B72232510FDCB1A252769556CB037423802DEFD2205D1FDB80248FDB823423BAE0001 -FFFF000005FD05D1001D00504032000E48175817600E620F700E700F0708011A350B0B01 -07033504031301131412121F5F067F0602060306070014037F0101012F5D33FD32322F2F -5D11332FED002F333FFD3212392FED123931305D2123112135211521113E01333216171E -01151123113426272E01232206070273C6FE520468FE0C5FF66765AA3D3D45C6161E2079 -646AC3660521B0B0FE2D1F33323534A373FE11018C4A8C2B2E312622FFFF00CD00000575 -07ED023601F200000117008D003C01610010400A01702301002321050025012B5D350002 -0006FFF904E6078F001A002800AF405A29033801461955140419191A1814171617161716 -191A130001001617181A010500070B0B0F35071B0F21702102212175250125AA0F1E011E -1E0003281A1B221A702101211B2100700A010A360156016501760104160A01031700B8FF -E0401409103700002A502A012A400910371720091037172F2B2B5D11332F2B1217395D2F -5D1139392F5DED2FED003F332F5DED5D332F5D332FED322F11121739018710FDC008C001 -8710FD08C03130005D09010E01070E012322262735331E01333236373E013F0101330901 -030E0123222627331E013332363704E6FDCA225D3634612D2872100E0F462D14481C203F -1624FDD6DB01B301862105C9A8A8C905B602605E5F5F0205D1FB1B4C621B19110801B902 -09060B0C34324F044FFC92036E01BEA6A8A8A67063627100000100C8FEAF053B05D1000B -0032401C060203043409000B0913000002061407780D400D700D020314026C0C10F6ED5D -10F6ED12392FED002F2F33ED3F33313029011133112111331121112302A4FE24C602E7C6 -FE24BB05D1FADB0525FA2FFEAF00FFFF001A0000055E05D1021600240000000200C80000 -052C05D100120021003E40256311011A340C0C070B3508031B3407080A0A131556000100 -71230F234023020C1B14076C2210F6FD325D10F45DED332F003FED3FED12392FED31305D -011406070E0123211121152111213216171E01073426272E01232111213236373E01052C -554754C098FDE403E5FCE1015C98C0554C49CF3235379083FEE20119858F36383401CD6C -B037423805D1B0FE6823423BAE724B72232510FDCB1A25276900FFFF00C80000052B05D1 -021600250000000100C80000048A05D10005001F401003013504030000070F0701021403 -6C0610F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D10002 -000AFEAF059E05D1000D00130049402A09121A124A110310340A030C1307340301051013 -0A0A070E140C0C0113200001000015131307070413052FED392FED11332F5DED392FED12 -392FED002F332FFD32323FED31305D01231121112311333612112111332111210A010705 -9EBCFBE4BC78829B03728DFEADFE0E0E9476FEAF0155FEAB0201D602B1019AFADF0475FE -9BFDAFBFFFFF00C80000049D05D102160028000000010020000007A805D1003700C7402E -093318332933401D40244135541D54247518711D73240B27133333351A130E0C0E020116 -09103701130037000708B8FFEA405A091037081309090A271F1A032C223237070A0C0E33 -35072C02142D350409021521052C03002F0A20375F0A50376F0A6037062C2C0137022733 -350600C5220414051515080A070C0E1A0609C51F0505393810393F395F397F39045D1112 -392F33F41739322F10FD32F41739322F5D002F3F1739FD322F121739FD111739018710FD -2BC08710FD2BC08710FD8710FD3130005D21230123112311230123012E01272E01272E01 -2B0135333216171E01171E01171133113E01373E01373E013B0115232206070E01070E01 -0707A8F2FDF469C46BFDF4E6025158682013251C1B533C3C47A7B23D0B1E0F2C8F56C45C -912E121D093CB5A5473C424B1E1D25132A7D3E02A9FD5702A9FD5702FE3A9C693D571C1B -18B17FAD1E5824696608029DFD610663702C5519AC80B1171C1B5B3A8587270000010051 -FFE5048505EC0040007F40145401583B6701693B7F0B7F0C7031703274380932B8FFE040 -3F0B10370B200B10373E3D1D3420200934703001303029343402100D7F0D020D0D113409 -0A3D1E0B0D37171E0B0D37236C3A1E1E3D3A030C171503734231310C2F332F10F6ED1217 -392F2FED2B2B003FED332F5D3FED332F5D1112392FED393931302B2B5D011E0115140607 -0E012322262735331E01333236373E01353426272E012B0135333236353426272E012322 -06070E010723353E01333216171E0115140607151E010416303F5B4650E68593FB4A0F63 -F97148A83436313C33339159C9B3ADD2352E2D6F4C4E843B3064170D4BF87E7BB14B4E52 -A37D347602CD2A816669AA3C4444371EDE3B4B2A292D6F454F651F1E1BA97F7836521818 -151E1411340DDB2036272C30885A7FB01B0F092F000100C80000053905D1000900644023 -0B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D07B8 -FFE840240B0F3702100C0F3707060102040308030308030807021400780B0F0B400B0207 -14046C0A10F6ED5D10F6FD113939003F3F1217392B2B31305D7121231101231133110133 -0539C5FD1CC8C502DBD104A9FB5705D1FB690497000200C800000539078F000900170093 -40320B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D -0A0F10701002101014AA0F0D010D0D07B8FFE840330B0F3702100C0F3707060102040308 -030308171A500A600A020A111A100A10000403080702140078190F194019020714046C18 -10F6ED5D10F6ED113939111239392FED2F5DED003F3F1217392B2B332F5DED332F5D3331 -305D7121231101231133110133030E0123222627331E01333236370539C5FD1CC8C502DB -D1B505C9A8A8C905B602605E5F5F0204A9FB5705D1FB69049701BEA6A8A8A67063627100 -000100CD0000057505D1002000AF407909011F01290127203A0137204B0147205C016500 -6720760074200D1F200A0D370C200A0D370202038801C8010201B30020001E661B861B02 -1B13120D120D121B1E04152002322F08010808000716351503070305000D121B1E200504 -4F150115150F2220003000400004500001006E22402201080414056C2110F6FD325D10F6 -5D5D322F5D121739002F2F3F3FED1112392F5DFD39121739018710FD5DC031300187107A -FD5D1808C0012B2B5D2123012311231133113E01373E01373E01373E013B011523220607 -0E01070E01070575FEFDA387C6C6335A28284E1E0D231245B9B44F53454E1F1D2B17346B -5A02A7FD5905D1FD6401121917553E1B522DA686B1191D1A583B847C2E0000010012FFFD -051805D10021003DB9001BFFACB309103709B8FFC0401A0B0E370335200301131317350F -01140078238F230103132020122F332FED5D10F6ED002FFD322F2F3FED31302B2B212311 -210E01070602070E01070E012322262335331E0133323637361213361237210518C6FDE6 -030B0308251D1D492F306544153C0C0E0A1E0F24401647430E050B04039B052171D955D6 -FEEC595A6B2B2C2603C001021617470146012D6201448700FFFF00C8000005F605D10216 -00300000FFFF00C80000053B05D10216002B0000FFFF0073FFE105DA05F0021600320000 -000100C80000053B05D100070027401703350603010501140078090F0940095009030414 -056C0810F6ED5D10F6ED002F333FED31302123112111231121053BC6FD19C604730521FA -DF05D100FFFF00C80000049605D1021600330000FFFF0073FFE5054605EC021600260000 -FFFF0000000004EE05D102160037000000010006FFF904E605D1001A0080403C29033801 -461955140419191A1814171617161716191A130001001617181A010500070B0B0F350700 -03700A010A360156016501760104160A01031700B8FFE0401409103700001C501C011C40 -0910371720091037172F2B2B5D11332F2B1217395D2F5D003F2FFD322F11121739018710 -FDC008C0018710FD08C03130005D09010E01070E012322262735331E01333236373E013F -010133090104E6FDCA225D3634612D2872100E0F462D14481C203F1624FDD6DB01B30186 -05D1FB1B4C621B19110801B90209060B0C34324F044FFC92036E00030069FFF0062405E1 -001D002A00370058403624182C321525062B32091509081603082A1E253265006A0F041E -150032150F00072B1518250407140F080839381F393F396F399039045D1112392FC4ED17 -3910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01071523352E01 -272E01353436373E01373533151E01171E01073426272E0127113E01373E0101110E0107 -0E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F4B57CE403B3A -8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A524AD88C88CC -4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01363737AA6170 -B63A2D3CFFFF00440000053805D10216003B0000000100C8FEAF05BE05D1000B0032401C -0602030B08043501080514080800130D40090B370A0A0D0414016C0C10F6ED11332F2BED -392FED003FFD322F3F3331302901113311211133113311230502FBC6C602DDC68DBC05D1 -FADD0523FADDFE010001008E000004EA05D10019003B40243511451154116C0974160502 -0C1435050500180C030017011400781B0F1B010D140C6A1A10F6ED5D10F6FD32002F3F33 -12392FED123931305D2123110E01232226272E01351133111416171E0133323637113304 -EAC681DD6463AC3F3F47C6142323726B71D652C60276282A313535A47201FCFE67577930 -2F2F281E02B1000100C80000077605D1000B003640200A06020308043401091400C60814 -05041401C605050D0C1F0D3F0D500D700D045D1112392FF4ED10FDF4ED002FFD323F3333 -31302901113311211133112111330776F952C6022EC6022EC605D1FADB0525FADB052500 -000100C8FEAF080305D1000F004140260A0602030C080434010F0D13000009140CC60814 -05041401C6050511101F113F1150117011045D1112392FF4ED10FDF4ED332FED002F2FFD -32323F33333130290111331121113311211133113311230747F981C6022EC6022EC68DBC -05D1FADB0525FADB0525FADBFE0300020000000005F405D1000E00210046401D07341B1B -1618351903083416560F011B08144F167F160216161900150FB8FFF4400A0E11370F7123 -0F2301192F5D10F62BFD11392F5DFD325D002FED3FED12392FED3130013426272E012321 -11213236373E01371406070E0123211121352111213216171E0105253235379083FEEC01 -0F858F363834CF554754C098FDEEFE660260015298C0554C4901C94B72232510FDCB1A25 -2769556CB03742380521B0FDB823423BAE00000300C80000069505D1000E001F00230055 -4016440D0107341919161703083416220321560F0100150FB8FFF4B30E11370FB8FFC040 -150C10370F0F21142078250F25702502190814166C2410F6FD325D10F6FD322F2B2BED5D -002F3F2FED3F12392FED31305D013426272E01232111213236373E01371406070E012321 -113311213216171E010123113304533235379083FEEC010F858F363834CF554754C098FD -EEC6015298C0554C490173C6C601C94B72232510FDCB1A252769556CB037423805D1FDB8 -23423BAEFDC505D1000200C80000052205D1000E001F003C401007341919161703083416 -560F0100150FB8FFF440110E11370F71210F21402102190814166C2010F6FD325D10F62B -ED5D002FED3F12392FED3130013426272E01232111213236373E01371406070E01232111 -3311213216171E0104533235379083FEEC010F858F363834CF554754C098FDEEC6015298 -C0554C4901C94B72232510FDCB1A252769556CB037423805D1FDB823423BAE0000010061 -FFE5052905EC002A0070400A3A1C491C640676060426B8FFE0403E0A10370B200A103718 -34191928092424203428020D0D11340909060316035603031A24171403732C0F2C010F2C -1F2C2F2C3F2C04241824180F0C1F0C020C2F5D33332F2F5D5D10F6ED11395D003FED332F -3FED332F1112392FED31302B2B5D0116121514020706042322262735331E01333236373E -01352135212E01272E012322060723353E0133320404616068696366FEEFA38DFE571051 -F78D7BCC444849FCD303230E5C4747B46689F057115DFE85AC010F052C60FEE4C2ACFEDF -676A6B3625DB414D574B50C980AD77AF3939374D43DC27356000000200C8FFE107D305F0 -000B001E006240427814010903060915161A1C5616591C7916761C080C34131E1314031C -03341602100309341C090F13190615180C3F0C580C6F0C040C0C0F0015197320120E140F -6C1F10F6FD3210F6ED12392F5DED1239002F3FED3F3FED1217392FED5D31305D01100023 -2200111000333200012311231133113312002120001110002120000705FEFFDBDDFEFE01 -03DCDB0101FB79F0C6C6F924016A0113013F016CFE90FEC5FECCFE9102E801280135FECC -FED7FEDBFEC90136010EFD3005D1FDAC012D0146FE63FE95FE93FE6601890002002C0000 -04DE05D10010001F0066400C28033506471C5A0759170504B8FFE8403209103703041305 -0506060F113440030103030012340F03000519150904060309045F050105120114007821 -0F2140216021035D10F6FD322F5D17392FED002F2F3FED12392F5DED12393130018710FD -C02B005D212311210123012E01353436373E0133210311212206070E01151416171E0133 -04DEC6FEBFFE43EE01DE96A55F4E47BE7301EAC6FED256682B2E3425292D82560250FDB0 -026E33D5B372A5373228FD240232161D1F7043506A292C1EFFFF0068FFE1041D04780216 -0044000000020074FFE1047C061D00270039006440160C1F35043D29303940044B294039 -6512751273330A33B8FFC0402B0B0D3722062B41002510250225250619411800373F060A -223118180C281B03903B1F3B3F3B02311B0C863A10F6ED5D10F6ED12392F1239003FED3F -ED12392F5DED123931302B5D011E01151400232226272602353436373E01373E01373E01 -37150E01070E01070E01073E01333216133426232206070E01151416171E0133323603EE -4648FED4DB6CB640504F0E19144D3548EBC24F883642814080CF303535084BB3655EAE0F -B29257A04802033A352E6C3E97AA03B846C786FAFEB6494C5F0121D04B9B6C5DAC354959 -11070904AD0408060B3E3135AB4D36493EFE22B9B7372E19431CAED840362DDA000300B9 -00000453045D0015002400330061400C0A0305141A0315147623050CB8FFD6402F090C37 -12112C3C4F1E011E1E071D3D08052D3D0708161B122C0F0F07251B00100D10370090350F -35011E2C1A07883410F6FD325D10F42BED12392F1239ED003FED3FED12392F71ED393931 -302B5D011406070E01232111213216171E0115140607151E01033426272E012B01113332 -36373E01133426272E012B0111333236373E010453413940977BFE3201B07D7F383F3B5E -4A6381FD1F202A694DC4EB4A4724261D3B243D26584EF1B270792C2C2B0152517E2A2F2A -045D111D216A48537A220A1889017D243A101505FECE0B161841FE4237451D1207FE930F -19194800000100B9000003BB045D0005001F4010013F040503700001000007021A038806 -10F6ED11332F5D002F3FED313001211123112103BBFDBABC030203B8FC48045D00020009 -FEF404AF045D000D00130053401C3B124A12020105103E0A050C13073E0310C90A0A070E -1A0C0C01C900B8FFC040120B0E370000152F153F1502131A070704C9052FED392FED5D11 -332F2BED392FED12392FED002FFD32323FED2F3331305D01231121112311333612112111 -3321112106020704AFAFFCB8AF79757302BE87FEBDFEAF0D8053FEF4010FFEF101ACC101 -F90103FC43031FFBFE628600FFFF006AFFE60460047C0216004800000001003400000632 -045D003100D840123A0E3A2D4A0E4A2D5F0C5F2F6F0C6F2F0826B8FFE0B3090B3715B8FF -E0401A090B3724B42D2D2F17B40E0C0E020116091037011A0031000708B8FFEA405E0910 -37081A09090A241C1703291F3C31070A0C0E2F2D072902112A3F040902121D052905002E -0A21315E0A51316F0A60317F0A7031082929013102242D2F0600C71F041A051212080A07 -0C0E170609C71C0505333210333F334F336F33045D1112392F33F41739322F10FD32F417 -39322F5D002F3F1739FD322F121739FD111739018710FD2BC08710FD2BC08710FD8710FD -3130002B2B5D21230123112311230123012E01272E012B0135333216171E01171E011711 -33113E01373E01373E013B0115232206070E01070632E3FE9A5BBA51FE8AD901AF314B1F -1B4A5435457C962D091B0A216740BA4069210B1B082C947D4535554B191C4D2D01FEFE02 -01FEFE0202491A60615542A2647D1A43174C3F0401E4FE1C04404B1942197B66A2465159 -631900010041FFE603C20478003D007FB7263475127D3C032FB8FFE0404C0D103708200D -10373B1B3FAF1CBF1C021C1C06313F2D902DA02D032D2D293E3104200A300A020A0A0E3F -06091C2E231B372E1C373B0409141B00903F7F3F803F02800990090209400B0F37092F2B -5D5D10F6ED1217392FED2F2F003FED332F5D3FED332F5D1112392F5DED3931302B2B5D01 -1406070E012322262735331E01333236373E01353426272E012B0135333236373E013534 -26272E012322060723353E01333216171E0115140607151E0103C2574444A45274D2660D -49E26A326A272A32312A297430A371288128343D3024255B2366C5430D53BE5F4E9B4342 -546D5C677A01395E822827242C2ECE4046131518433A3C48121208A2060D113E442F3D11 -110C3734CF1B221C2222755658851D071989000100B900000466045D00090044402D0B02 -0407020D030103380B103702380E10370706010204030805030808021A00920B1F0B600B -0203071A04880A10F6ED395D10F4FD39003F3F12173931302B2B5D712123110123113311 -01330466BAFDB7AABA0243B00347FCB9045DFCC5033B000200B900000466061500090017 -0073404C0B020407020D030103380B103702380E10370A0F1001101014500D0D07060102 -04030805030817C91F0A2F0A020A11C900101010201003100A100408021A0092191F1960 -190203071A04881810F6ED395D10F6FD391239392F5DED2F5DED003F3F121739332FED33 -2F5D3331302B2B5D7121231101231133110133030E0123222627331E01333236370466BA -FDB7AABA0243B06B05B1A9A9B105AB015B58595A010347FCB9045DFCC5033B01B894A6A6 -94695E5C6B00000100C1000004A9045D001A0093404D0120090E371B02271A360E321635 -1A0502011A001A000A1B0F2B0F020FB41618160A0F181604121A023C2F08010808000713 -3F12050705010508561A9600961AB600B61A05021A181604121200B8FFC04011090E3700 -001C0F1C1F1C0208031A05891B10F6FD325D11332F2B332F17395D003F3C3F3FED111239 -2F5DFD39121739018710FD71C03130018710FDC0015D2B2123012311231133113236373E -01373E013B0115232206070E010704A9F6FE3066BCBC5D72280E1B0D349C9256534F5924 -2859320200FE00045DFE1E434A1B3D1C7170A243545E5D180001001DFFFE043E045D0021 -003FB9001BFFACB30D103709B8FFC0401C0D1037023E2105001313173F0F011A00922303 -1A20203020022020122F332F5DED10F6ED002FFD322F2F3FED31302B2B212311210E0107 -0E01070E01070E012322262335333216333236373E01373E013721043EBCFE5F03060307 -201A183B2222533111410A0A081E0A183312333E0A040703030103BF539A3EA7C7423E4D -1F1E1E02A4020E1332EEE152E166000100B9000004D9045D000C0078401335093A0B4503 -4A0470037F04060B400D103709B8FFC0403D0D10377B027B05790A030A2A090B37050A02 -030904400E103704200D0F373F04010404070B09050107090A0B0305021A00920E0F0E20 -0E02051A07880D10F6ED5D10F6ED111739002F333F3312392F5D2B2B1217393130002B5D -012B2B5D2123110123011123113309013304D9BAFEEA8CFEECB0E301300126E70372FDC2 -023EFC8E045DFD8F0271000100B900000460045D000B0032401C033F0808050A07050105 -0809021A00920D1F0D600D0208031A05880C10F6FD325D10F6FD32003F333F3312392FED -31302123112111231133112111330460BCFDD1BCBC022FBC01F7FE09045DFE3C01C4FFFF -006AFFE10471047C021600520000000100B900000460045D000700254015033F06050005 -011A0092091F09600902041A05880810F6ED5D10F6ED002F333FED313021231121112311 -210460BCFDD1BC03A703BBFC45045D00FFFF00B9FE640490047C0216005300000001006A -FFE703FD04770021005A40430F234F235F23032B01220E2A1624183A01350E3A16351849 -014F0A440E4F1641185901550E6901650E7A01730E131010143F0C0421211A3F03090F00 -0023171B09852210F6ED11332F3C003FED332F3FED332F31305D015D250E01232226272E -013510002132161715232E01232206151416333236373E01373303FD73A5527ACC494951 -0128010161BB4E0B5DB555A7B7B6A83B75302651100B463629474848DC93010B013F3627 -D14744E0C7C7DC1E1813350D0001000A000003EE045D0007003840230301043F06054000 -4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32 -2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A5FFFF -003DFE64047F045D0216005C00000003006FFE64064B061400230030003D007A40105622 -011D011B1E0C09040627353F2118B8FFF040400E0F3718043B2E3F0F06100E0F3706090B -0C392436384924463804241B00C809311B1E2B04091A0C381B12C8800C900C020C0C3F3E -0F3F1F3F3F3F503F803F055D1112392F5DFDED10ED173910FDED5D003F3F2B33FD323F2B -33FD321217393F31305D011406070E01232226271123110E01232202113436373E013332 -16171133113E0133321203342623220607111E0133323605112E01232206151416333236 -064B4C3F3EA259436327BA3D4F54C1F04E3F3DA5523C6331BA2E7C3FC6E2C18888374A3F -2F3F3A8D9BFD7627503187A18F87355B024C95E54A4A4E2E13FE3301CD1E23012E010D8D -DD4B494D251E01E1FE1F1B28FED5FEECBFDE1219FD171619D9AA02E91219CED2C3E01D00 -FFFF003C00000480045D0216005B0000000100B9FEF404DE045D000B0041400F0602050B -08043F01051A080800C90AB8FFC04015090D370A0A0D0D40090E378F0DAF0D02041A0188 -0C10F6ED5D2B11332F2BED392FED002FFD322F3F33313029011133112111331133112304 -2FFC8ABC0226BC87AF045DFC4503BBFC45FE52000001008E0000041F045D0016003C4025 -0C061C062C06750E040209113F0505001509050014011A0092183F18010A1A0009100902 -092F5DED5D10F6FD32002F3F3312392FED123931305D2123110E01232226351133111416 -171E01333236371133041FBC5BA662B4BEBC101A1A5E5445A23CBC01AD1C22B1A70196FE -CA40652524261B12021D000100B900000649045D000B003D40260A06020508043F010809 -1A00CA081A05041A01CA8005A0050205050D0C0F0D200D500D700D045D1112392F5DF4ED -10FDF4ED003FFD323F333331302901113311211133112111330649FA70BC01AEBC01AEBC -045DFC4503BBFC4503BB000100B9FEF406D0045D000F004A402E0A0602050C08043F0108 -0E0DC90000091A0CCA081A05041A01CA80059005A00503050511100F111F113F116F1104 -5D1112392F5DF4ED10FDF4ED392FED002F3FFD32323F3333313029011133112111331121 -1133113311230621FA98BC01AEBC01AEBC87AF045DFC4503BBFC4503BBFC45FE52000002 -000A000004C4045D000E0021004A4015750D01073D4F1B9F1B021B1B16183F1905083D16 -0FB8FFF04016090B371B081A161619001B0F8F230F231F232F2303192F5D10F6FD11392F -FD322B002FED3FED12392F5DED31305D013426272E012B0111333236373E01371406070E -0123211121352111333216171E01040223282A6B64B0AC646E282925C24138429676FE55 -FEB80204F47E8B453A3A0157334D18190AFE8411181A473A518429322A03B8A5FE4D1A33 -2B86000300B9000005A2045D000E001F0023005A4016200523073D4F199F190219191617 -05083D167900010FB8FFF04022090B37001B500F600F700F030F0F231A2292250F253025 -402570250419081A16882410F6FD325D10F6FD322F5DED2B5D002FED3F12392F5DED2F3F -3130013426272E012B0111333236373E01371406070E012321113311333216171E011333 -1123036923282A6B64B0AC646E282925C24138429676FE55BCF47E8B453A3ABBBCBC0157 -334D18190AFE8411181A473A518429322A045DFE4D1A332B8602B1FBA300000200B90000 -0435045D000E001F00424013073D4F199F19021919161705083D167900010FB8FFF04013 -090B37001B0F8F210F212F210219081A16882010F6FD325D10F6ED2B5D002FED3F12392F -5DED3130013426272E012B0111333236373E01371406070E012321113311333216171E01 -037323282A6B64BAB6646E282925C24138429676FE4BBCFE7E8B453A3A0157334D18190A -FE8411181A473A518429322A045DFE4D1A332B8600010053FFE703F604770021007DB532 -0442040210B8FFD640090B0D37152A0B0D371DB8FFD6403F0B1037082A0B1037123D1313 -061F1B1B173E1F049F0A010A0A0E3E0609141C111A0390232340090D371C2F133F134F13 -03131C1380099009020940090C37092F2B5D33332F5D2F2B10F6ED1139003FED332F5D3F -ED332F1112392FED31302B2B2B2B5D011E011510002122262735331E0133323637213521 -2E012322060723353E01333216035D4950FEC9FEFC66BF430D3CC66D9DC40CFDCC023314 -BE8E5BB4570D3FC2677CC803ED46D290FEEAFEB8301BCE2F49C0BA979E9F3D43CE193A44 -000200B9FFE1064C047C000B001E005640363A0335094A034509040C3E131E1314031C03 -3F16041005093F1C0A0F1319061A2F0C010C0C0F001B1990202F203F2002120E1A0F881F -10F6FD325D10F6ED12392F5DED1239002F3FED3F3FED1217392FED5D3130013426232206 -15141633323625231123113311333624333200111000232200058AA69399A1A89292A7FC -D3E8BCBCED190111C7E70112FEF2EBDEFEF5022ED7D5DFCDD4D7D5A2FE06045DFE3BE7FD -FEC4FEEEFEF1FEC201200002004300000413045D0010001F0069B3721C0104B8FFE8403D -0910370304B4050506060F113C030300123D0F0500050909190902191B70090109040603 -09040A051A054A055A0580059005060512011A0092210F21015D10F6FD322F5D17392F5D -ED5D002F2F3FED12392FED12393130018710FDC02B015D212311230123012E0135343637 -3E0133210311232206070E01151416171E01330413BCDDFEA6DD01789186503D3C9C5C01 -AEBCED4D442827251724256A4101BBFE4501CD28A586597C27261BFDF201780A16164B2C -37441E1D1500FFFF006AFFE6046005DB0236004800000116008EF9000014400D03302560 -250202002520120025012B355D3500010013FE6D046206140035006A4044051C1E261E28 -59056905721D0617140E51111112180D08421B0412012F3E2A2A012A0D150F5F2E6F2E7F -2E032E2E0D001A2191371F37603702141517030B1A110F0D883610F63232FD17325D10F6 -ED12392F5D2F2F002F2F5DED3F3FED123912392FED393931305D0026272E01272E012322 -0607112311233533353315211521113E01333216171416151406070602070E01232A0127 -35333236133E013503A501010113191A594650AC4CBCA6A6BC0141FEBF58C162B1BB0303 -020103544746B96A17182A44BB9C09010102064B2B5080292B294D3AFCBE04F4869A9A86 -FEED4952DEC92F6B4B3A703AB0FEFF50504E029EF60150224B2EFFFF00B9000003BB0682 -0236020B00000116008D9AF6000AB6010009070405252B350001006AFFE7040A04770021 -006EB53B0A4B0A021BB8FFD640090B0D37162A0B0D370EB8FFD640340B1037012A0B1037 -193D1818030C1010143E0C0421211D3E03092018301840180318171810031A008E232340 -090D371A1A09852210F6ED2B10E61117392F5D003FED332F3FED332F1112392FED31302B -2B2B2B5D250E01232226272E013510002132161715232E01232206072115211E01333236 -3733040A4E9F7B7DD14C4C52012B010D68BB450C40C2658FC719023CFDC10AC4A46CBD3E -0C302029474849DC92010501453620CB324E9CA197B2C8443200FFFF006EFFE503D70478 -021600560000FFFF00AF0000018305DB0216004C0000FFFF00050000022D05DB02160077 -0000FFFFFFC2FE59021505DB0216004D00000002001DFFFE06F4045D000E003D0072B900 -30FFACB30D10371EB8FFC0401D0D1037073D4F379F3702373716183E350528282C3F2409 -3D167900010FB8FFF0401E090B3737081A161635001B890F010F8F3F0F3F0118C9203530 -35023535282F332F5DED5D10F45DFD11392FFD322B5D002FED2FFD322F3FED12392F5DED -31302B2B00353426272E012B01113332363736371406070E01232111210E01070E01070E -01070E012322262335333216333236373E01373E01372111333216171E01063223282A6B -64B0AC646E2829E74138429676FE55FE5F03060307201A183B2222533111410A0A081E0A -183312333E0A0407030301F47E8B453A3A012037334D18190AFE8411181A81518429322A -03BF539A3EA7C7423E4D1F1E1E02A4020E1332EEE152E166FE4D1A332B86000200B90000 -06F4045D000E0027005D4017171E073D4F219F21022121161C20051A083D167900010FB8 -FFF0401F090B37211E081A16161A001B890F010F8F290F292F294F29031D191A1A882810 -F6FD325D10F65DED11392FED39392B5D002FED2F3F3312392F5DED39393130013426272E -012B0111333236373E01371406070E0123211121112311331121113311333216171E0106 -3223282A6B64B0AC646E282925C24138429676FE55FDF3BCBC020DBCF47E8B453A3A0157 -334D18190AFE8411181A473A518429322A0210FDF0045DFE4D01B3FE4D1A332B86000001 -00130000045F0614001E00504030031D161D751D0317140E51111112180D08421B041201 -010D08150F021A0091201F20602002141517030B1A110F0D881F10F63232FD17325D10F6 -ED2F2F003F3C3F3FED123912392FED393931305D2123113426272E012322060711231123 -3533353315211521113E0133321615045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC -63B5BE027C4D87262A294C3BFCBE04F4869A9A86FEED4952DACDFFFF00C1000004A90682 -0236021200000116008DF9F60011400C01001D401D02001D1C0611252B5D35000002003D -FE64047F06150007001500BD404C04063406440650066006700606090307051903170546 -0149035800570179030902071A000100051A0403044900460402080F0E010E0E12500B0B -0003020405020C15C908400B0E37080FC90EB8FFC040110B0E370E080E04026801010102 -03030400B8FFC040220910370C001C004A006A007A0005008D170F170103041304450465 -0475040504821610E65D5D10F65D2B1117395D2F1139392F2BED2F2BED003F3F12393933 -2FED332F5D333130015D8710FD8710FDC0015D005D0901231301330901130E0123222627 -331E0133323637047FFD74C9D0FE43CC0157015A0805B1A9A9B105AB015B58595A01045D -FA0701D20427FCC4033C01B894A6A694695E5C6B000100B9FEF40460045D000B003F4027 -0A060520030103083E00050802C93F034F037F0303030305091A00920D1F0D600D02081A -05880C10F6ED5D10F6ED12392F5DED003F33ED2F5D3F3331302901112311211133112111 -330460FE84AEFE83BC022FBCFEF4010C045DFC4403BC000100C80000048A076B0007002B -B90006FFC040140D10370606003503030205130606090114026C0810F6ED11332FED002F -3FED332F2B31300111231121113311018EC60308BA0521FADF05D1019AFDB600000100B9 -000003BB05CE00070033B90006FFC0401A0E10370606003F03050205C97006010606090F -0901011A02870810F6ED5D11332F5DED002F3FED332F2B313001112311211133110175BC -0254AE03B8FC48045D0171FDEA00000100CB023C073502DC00030011B601540200000501 -2F11332F002FED3130012135210735F996066A023CA0000400C8000008B905ED00090015 -0021002500A7403E080718073A014901440646075801540656076F0160067F0170060D09 -0D0613190D16137A19751F0625533F224F220222221F401214371F51300D010D0D19B8FF -C040321214371951130202030807040106030100220F2302232223220A1CC910100A0006 -0102071300000416C90A0A270213046C2610F6ED11332FED12392FFD1139391112392FED -1239392F2F5D002F3F1217393FED2B332F5DED2B332F5DED5D3130015D21230111231121 -0111330114062322263534363332160734262322061514163332360121152104FFF5FD72 -B401330250B403BABDB2B6BABEB2B5BAB25865675757676558FE6201B8FE480534FACC05 -D1FB4004C0FE63E0DADADFE0DADCDDAC8888ADAD8787FDE89E00000100B900000460045D -000700254015033F06050005011A0092091F09600902041A05880810F6ED5D10F6ED002F -333FED313021231121112311210460BCFDD1BC03A703BBFC45045D00000101190235028F -05D5000800214011035004040703010E0307002A03000101012F5D33ED392F003F3F332F -ED3130012311233532363733028FA5D1667E0989023502A9752C5600000100EF023D039F -05ED001D0043B90011FFE040250D10370F0F0B521302021C51010E00001C01082A261636 -166616761604160F160F000101012F5D33332F2F5DED1239332F003FFD323FED332F3130 -2B0121353E01373E013534262322060723353E01333216151406070E010721039FFD505B -86276D40584C468F290F41974D9DA9526A318D3701F2023D94456825676D52464A3C20B3 -1B229E7A5D945E2B6A29000100E6021C037305ED002E0074400F6C096C227E097E220455 -0C5A1F0226B8FFE0403B0B0E3703200B0D372C2B15510F16010F161F164F165F16CF16FF -16061621211D51160625020A0A0E51060F1A2A281622112A2216282C04090000092F332F -121739ED2F2F2FED003FED332F3F1239ED332F2F5D71ED393931302B2B5D015D01140607 -0E012322262735331E013332363534262B01353332363534262322060723353E01333216 -15140607151E0103733C30357B4F528F4111259A4F546E645B8C7D575F52574299251140 -964F98AA614D5075033A47702225201E1CAF233B4948533B8B4C423C473E23AF1B228C62 -57711A08106D000200B3023D03BD05ED000A000D003A401E6D067E06020609010D51050C -05030702030E00070B042A09000D060101062F332F12393333FD39392F003F3F1239392F -ED3939323130015D012315233521350133113321110103BDA396FE2F01D295A3FECBFE9F -0319DCDCB9021BFDB10190FE7000000100E6021C037505DA002A004840176F087F08021D -1D1A5125250621511E030A0A0E51060F00B8FFEA400F090C371F21291E1F1E09142A0000 -092F332FED1239392FED2F2B003FED332F3FED12392FFD322F31305D011406070E012322 -262735331E01333236373E01353426272E012322060711211521153E01333216171E0103 -75322F3088574E953C1025924E2C521C1D171F1D1E59353B6C260255FE4814310E547634 -373C0363457A2A2B331C1A9F1436171C1D43272A391415110E0601F08BCF02021722246F -000100F3023503A505DA000600414025560101030100012A020203630073000200000351 -0503020E030002100910370202040000042F332F12392F2B1239003F3FFD322F3130015D -8710ED87C0015D0901230121352103A5FE2AB901F0FDED02B2054EFCE7031A8B000300C5 -021B039105EE001900280037005D40420F0B0F151F0B1F152A022A0439023904492B582B -0A0F251F2526103610042F09261604031D5110023551030F1A2A13202A0D292A090D1316 -04067000010000322A062FED332F5D121739ED2FED2FED003FED3FED1217395D31305D01 -140623222635343637352E0135343633321615140607151E01033426232206151416171E -01173E01133426272E01270E011514163332360391CB9BA7BF5E595246B99095B5505261 -5BBE574F465D302D17482E392618374217582A3A387650516D033579A19F784F78260429 -64476A8D87683F7D2304276B016433483F36263D140A1F0B254FFE79323B1E0A1C0F205D -304A5F4E00020073FFE1068B05F0002800340075400978180176097915021BB8FFC04045 -0910371B694F0001002302031A090A0905151A0915155A095515062C3415023234090A22 -1E2926151B00030F291503360F361F3680369036BF36CF36060F36012F150F683510F6ED -5D5D10D6ED121739D4FDC4003FED3FED5D1239393FDD5DED2B5D31305D011E0115140207 -0E01232224272602353412373624333216171E01173E013534262735331E011514060110 -0023220011100033320005A11F1A63595CFBA19DFEFF5A5A61605C5801059AA0FF591819 -144F43160CA00D0B78FEF9FEFCE1E3FEFD0108DEDE0107044958A663B8FEDD6165666863 -630120B9B6012167626869611B2121044044245B17092F46326C82FE8D0122013BFEC5FE -DEFEDBFEC90137000002006AFFE104C30584001D0029005640391A20090C373A2135274A -21452704151B690D050003213F0904273F030A14102918090C1B03061E1B00902B0F2B1F -2B3F2B6F2B04241B06852A10F6ED5D10F6ED121739DCFDC4003FED3FED12393FFDCD5D31 -302B011000232200111000333216173332363534262735331E01151406071E0107342623 -22061514163332360471FEE8EBEDFEE90117ED33602B5D5A4A160CA00D0B736C4548C2AA -9799A9AA9896AB022EFEEFFEC4013C01110111013D0F104147245B17092F46326A80144D -D98BD9D3D3D9D2D9D700000100B2FFE1067506F8002B004C40342A20090F37252B6A1C03 -0D032615390649067615041534060A2420290F2801281B14002D0F2D402D6F2D7F2D902D -050F140C6B2C10F6ED5D10DEEDD45DFDC4003FED5D3F3FFDC431302B011406070E012322 -26272E01351133111416171E01333236373E0135113332363534262735331E0115140623 -052947514DCE898CD0475147C621272C976A6B962D2721D85A4A160CA00D0BACA00256A2 -F1504C464A4852E8A9037BFC7B798C394142414239936D038A4147245B17092F46328384 -000100B1FFE105A505840025005C403E0B0619077A070323200910371E246A1505020509 -051142050A011D19290F21012114021A40000100270F276F27025F279027A027C027EF27 -050B1A08872610F6ED5D7110D671ED32D45DFDC4002F3FED3F12393FFDC431302B5D2123 -350E01232226351133111416171E0133323637113332363534262735331E011514062B01 -0457BC5FAE69B0C4BC101A1B565249AD4BD05A4A160CA00D0BACA0027C4B50D7D002D5FD -8455792B2C284C3B03424147245B17092F46328384000001020905110342068C00160042 -4029BF0301030606050C50146005010504ADC005D005020540090D370505110940111437 -09290F000100112FDD5DED2B12392F2B5DED002F5DD4ED12392FC55D3130011406071523 -353E013534262322060723353E01333216034242426E2F3026211F251803134926516605 -F8404E1544790C27271827090969060C560000010221FE8202F5FF450003001340090144 -8F0201020015012FED002F5DED31300123353302F5D4D4FE82C3FFFF0154051602FA068C -001600430000FFFF021D051603C3068C0016008D00000002013605110514068C0006000A -004DB90006FFF040100E103705100E10370802010708040305B8FFC040110E1037050560 -0301036007700702070900B8FFC0B50E10370000042F332F2BD6CD5D002F5D332F2B1217 -392F3130012B2B01230B012313332103231303E19FB9B89BE4E30217DA817C05110100FF -00017BFEF6010A0000020003051103E1068C0006000A004AB90006FFF040100E10370510 -0E10370802010809040305B8FFC040180E1037050560030103006F097F0902090704400E -103700042F332BD6CD5D2F002F5D332F2B1217392F3130012B2B01230B01231333012303 -3303E19FB9B89BE4E3FE6181DADF05110100FF00017BFEF6010A00020136051104C00752 -0006001D008EB90006FFF040120E103705100E1037BF0A010A0D0D0C13501BB8FFC0400B -0E10371B0C02010C030305B8FFC0402A0E10370505600301030BADC00CD00C020C400910 -370C0C18104011143710290F07010718400C10371800B8FFC040090E1037000060040104 -2F5D332F2BD42BDD5DED2B12392F2B5DED002F5D332F2B1217392FD42BED12392FC55D31 -30012B2B01230B01231333251406071523353E013534262322060723353E0133321603E1 -9FB9B89BE4E301C342426E2F3026211F251803134926516605110100FF00017B32404E15 -44790C27271827090969060C560000020125051103F307DE000600200064B90006FFF040 -200E103705100E10370710520F171F17A0170317141D520A400D11370A01020305B8FFC0 -40110E10370505600301032029070013291400B8FFC0B40E103700042F332BD6ED2FD6ED -002F5D332F2B123939D62BED3CDD5DED3C3130012B2B01230B01231333130E0123222627 -2E0123220607233E01333216171E013332363703E19FB9B89BE4E3F606865F35491C183A -192B22058C05875F36491C163B192A240405110100FF00017B015289902919162D3E4788 -912A19142E3E47000002014204E703D506FB000D0011003C40251110400F1A3710001006 -0AAA3F030103600E700E020E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D -002F5DEDCD39392F2BCD313001140623222635331416333236353703231303D5B29897B2 -A2555253555EDA817C0646A3BCBCA37C64647CB5FEF6010A0002014204E703D506FB000D -0011003C4025100F400F1A370F000F060AAA3F0301036F107F1002100E0D2A0E0F001F00 -8F000300072A062FEDD45D39ED2FCD5D002F5DEDCD39392F2BCD31300114062322263533 -1416333236350723033303D5B29897B2A2555253555281DADF0646A3BCBCA37C64647C55 -010A0002014204E703D5071E000D002400634040111414131A0F2201221340091A371300 -13060AAA3F0301031213400910371313001F101F201F031F1728500E600E700E030E0D2A -0E0F001F008F000300072A062FEDD45D39ED2F5DEDCD5D392F2BCD002F5DEDCD39392F2B -D45DCD12392FC531300114062322263533141633323635271406071523353E0135342623 -22060723353E0133321603D5B29897B2A2555253551237375C272822191C1E1402103C21 -42570646A3BCBCA37C64647C5B34431238650A2120191D080757060A45000002012504E7 -03F307DE000D0027005840100E17520F1E1F1E021E1B245220110111B8FFC04025090C37 -11006006700602060AAA3F0301031A291B0627290E0D2A0F001F008F000300072A062FED -D45DEDD4ED10D6ED002F5DEDDD5D39D62B71ED3CDD5DED3C313001140623222635331416 -33323635130E01232226272E0123220607233E01333216171E013332363703D5B29897B2 -A255525355C006865F35491C183A192B22058C05875F36491C163B192A24040646A3BCBC -A37C64647C019889902919162D3E4788912A19142E3E47000001020905110342068C0016 -00524035BF0301030606050C50501460147014031409900501C76005010504ADC005D005 -020540091037050511094011143709290F000100112FDD5DED2B12392F2B5DED002F5D5E -5D5ED45DED12392FC55D3130011406071523353E013534262322060723353E0133321603 -4242426E2F3026211F251803134926516605F8404E1544790C27271827090969060C5600 -00020136065403E1080100060020007D404A0702170202141D50200A010A1050076F1701 -0F1770170217010205400D1137050920039003A003B003045910032003C00303C003D003 -0231D003E003025003010F037003020320280700B8FFC040090E10370013281400042F33 -D6ED2F2BD6ED002F5D71725E71725E715ECD2B39392F5D713CEDDD71ED3C31305D012327 -07233733130E01232226272E0123220607233E01333216171E013332363703E1A9AFAEA5 -F8BBEC0B705025491C1B3E141D2806860A6F5227432122301A1B2B0506545959AD010052 -6B190D0D1A202D4E6F17101016232A0000020142064803D50801000D0011005A403E5010 -6010020A50FF03015F030103007F0601060F109F10026F10FF1002106F11010F11701102 -11590E690E720E030E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D002F5D -71DD5D71D45D3CDD7172ED5D313001140623222635331416333236353707233703D5AB9E -9EACA24B5D5A4D4FC681680738589899573058592FC9D8D800020142064803D50801000D -001100644033500E600E020A50FF03015F030103007F0601060F0E9F0E026F0EFF0E020E -6F11010F1170110211561066107D1003100E0D2A0EB8FFC0400F090D370E0F001F008F00 -0300072A062FEDD45D392BED2FCD5D002F5D71DD5D71D45D3CDD7172ED5D313001140623 -222635331416333236350723273303D5AB9E9EACA24B5D5A4D5681C6DF07385898995730 -58592F0FD80000020142064803D50801000D0024008E4062111414131A6F22010F227022 -02223F134F13021340111537130013060A5009900301B0030159700301310F033F037003 -CF0304031213400915371313501F601F701F03001F101F201F301F401F051F17C00E010E -0D2A0E0F001F008F000300072A062FEDD45D39ED2F5DCDCD5D71392F2BCD002F5D5E715E -5D715EEDCD39392F2B712F5D71CD12392FC5313001140623222635331416333236352714 -06071523353E013534262322060723353E0133321603D5AB9E9EACA24B5D5A4D2E2E2E4D -231F1C15191A0E020E321B364A0738589899573058592F612B380F2F54091E1817160805 -4905083900020142064803D50801000D0027009240111B2450DF1101110E17506F1E010F -1E011EB8FFC040520D10371E00060A50099003B00302F0030159200330034003C003D003 -E003066003700302C003D0030231A003B003025003E003020F033F03CF0303031A281B1B -0627280E0E0D2A0F001F008F000300072A062FEDD45DED3C10ED103C10ED002F5D71725E -5D71725E5D715EEDCD322F2B5D71ED3CDD71ED3C31300114062322263533141633323635 -370E01232226272E0123220607233E01333216171E013332363703D5AE9B9BAFA26C3C3C -6BA20B705025491C1B3E141D2806860A6F5227432122301A1B2B050706546A67572E2828 -2EFB526B190D0D1A202D4E6F17101016232A000201360668051008010006001D0088B900 -06FFF0401A0E103705100E1037BF0A010A0D0D0C400E10370C13500F1B011BB8FFC0403A -0D10371B0102030F0570050205050F0301030BADC00CD00C020C400910370C0C18104011 -143710290F07010750006000700003180000600401042F5D332FD45DDD5DED2B12392F2B -5DED002F5D332F5D1239392F2B5DEDC42B392FC55D3130012B2B01232707231333051406 -071523353E013534262322060723353E0133321603E19FB9B89BE4E3021342426E2F3026 -211F25180313492651660668CECE014944404E1544790C27271827090969060C5600FFFF -001AFE82055E05D10236002400000116024B2F00000AB602000D0E0500252B35FFFF0068 -FE82041D04780236004400000116024BBA00000F400A027F36010036370B00252B5D3500 -FFFF001A0000055E080102360024000001170256002F0175001A401202501C0102101C40 -1C701C03001C0B0500252B5D35005D35FFFF0068FFE1041D068C0236004400000116024A -BA000011400C025F457F45021D45340B00252B5D3500FFFF001A0000055E07ED02360024 -00000117024E002F01610011400B0302400F01000F0B0500252B5D353500FFFF0068FFE1 -04F4068C0236004400000116024EE0000013400D030240385038022938340B00252B5D35 -3500FFFF001A0000055E07ED0236002400000117024F002F01610011400B03020F0F0100 -0F0B0500252B5D353500FFFFFFE3FFE1041D068C0236004400000116024FE0000013400D -030240385038022938340B00252B5D353500FFFF001A0000055E08010236002400000116 -025C2F00001740110302400FA00FB00FC00F04000F0B0500252B5D353500FFFF0068FFE1 -04A0075202360044000001160250E0000013400D030240385038022938340B00252B5D35 -3500FFFF001A0000055E0801023600240000011602572F00000CB70302000F0B0500252B -3535FFFF0068FFE1041D07DE02360044000001160251E0000013400D0302403850380229 -38340B00252B5D353500FFFF001AFE82055E07ED023600240000003700D6002F01610116 -024B2F00001840110300141505002502400F01000F0B0500252B5D352B35FFFF0068FE82 -041D068C023600440000003600D6E0000116024BBA00001E4016037F3D01003D3E0B0025 -0240385038022938340B00252B5D352B5D35FFFF001A0000055E08010236002400000116 -02582F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236004400000116 -0252E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000055E08010236 -00240000011602592F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236 -0044000001160253E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000 -055E08010236002400000116025A2F00000CB7030200110B0500252B3535FFFF0068FFE1 -041D071E02360044000001160254E0000011400B0302403A01293A340B00252B5D353500 -FFFF001A0000055E08010236002400000116025B2F00000CB7030200110B0500252B3535 -FFFF0068FFE1041D07DE02360044000001160255E0000011400B0302403A01293A340B00 -252B5D353500FFFF001AFE82055E0801023600240000003700D9002F01750116024B2F00 -001D4013025011011103001B1C0500250200110B0500252B352B3500115D3500FFFF0068 -FE82041D068C023600440000003600D9DD000116024BBA0000184011037F44010044450B -002502293A340B00252B352B5D35FFFF00C8FE82049D05D10236002800000116024B2600 -000AB601000E0F0100252B35FFFF006AFE820460047C0236004800000116024BF900000A -B6021F22231218252B35FFFF00C80000049D08010236002800000117025600260175001C -401401501D0101001D201D501D601D04001D0C0203252B5D35005D35FFFF006AFFE60460 -068C0236004800000116024AF9000018B4026F310131B8FFC040090A1137323120120025 -2B2B5D35FFFF00C80000049D07C8023600280000011700D7002601750012400B01501901 -0100190C0203252B35005D35FFFF006AFFE604600653023600480000011600D7F900000A -B602002D201200252B35FFFF00C80000053A08010236002800000117024E002601750016 -400D0201501001020100100C0203252B3535005D3535FFFF006AFFE6050D068C02360048 -00000116024EF900000CB703021E24201200252B3535FFFF00290000049D080102360028 -00000117024F002601750016400D0201501001020100100C0203252B3535005D3535FFFF -FFFCFFE60460068C0236004800000116024FF900000CB703021E24201200252B3535FFFF -00C80000053608010236002800000116025C26000013400D0201101020100200100C0203 -252B5D353500FFFF006AFFE604B9075202360048000001160250F9000013400D03020024 -2024021E24201200252B5D353500FFFF00C80000049D0801023600280000011602572600 -000CB7020100100C0203252B3535FFFF006AFFE6046007DE02360048000001160251F900 -000CB703021E24201200252B3535FFFF00C8FE82049D0801023600280000003700D60026 -01750116024B2600001D40130110501001020015160203250100100C0203252B352B3500 -5D113500FFFF006AFE820460068C023600480000003600D6F9000116024BF9000014400E -031E292A120025021E24201200252B352B35FFFF0089000002D508010236002C00000117 -0256FF2401750016400E01501101015011010011100409252B5D35005D35FFFF00960000 -01CF068C023600D500000117024AFE8D0000000AB6010009080203252B35FFFF0089FE82 -02D505D10236002C00000117024BFF240000000AB601000E0F0409252B35FFFF00AFFE82 -018305DB0236004C00000117024BFE8E0000000AB602000A0B0203252B35FFFF0073FE82 -05DA05F00236003200000117024B009B0000000AB6020026270F03252B35FFFF006AFE82 -0471047C0236005200000116024BE200000AB602001A1B0600252B35FFFF0073FFE105DA -080102360032000001170256009601750022400B0250340102503470340234B8FFC04009 -090B370034240F03252B2B5D35005D35FFFF006AFFE10471068C0236005200000116024A -E200000F400A02701D01001D1C0600252B5D3500FFFF0073FFE105DA0801023600320000 -0117024E00960175001E401403025028010302202850288028030028240F03252B5D3535 -005D3535FFFF006AFFE104F6068C0236005200000116024EE200001940130302001C201C -501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA08010236003200000117 -024F009601750016400D030250280103020028240F03252B3535005D3535FFFFFFE5FFE1 -0471068C0236005200000116024FE200000CB70302001C180600252B3535FFFF0073FFE1 -05DA08010236003200000117025C009600000015400F0302202850288028030028240F03 -252B5D353500FFFF006AFFE104A2075202360052000001160250E200001940130302001C -201C501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA0801023600320000 -01170257009600000015400F0302202850288028030028240F03252B5D353500FFFF006A -FFE1047107DE02360052000001160251E200001940130302001C201C501C801CB01C0500 -1C180600252B5D353500FFFF0073FE8205DA0801023600320000003700D6009601750117 -024B00960000001D4013025028012803002D2E0F0325020028240F03252B352B3500115D -3500FFFF006AFE820471068C023600520000003600D6E2000116024BE2000014400E0300 -212206002502001C180600252B352B35FFFF0073FFE1068B08010236024600000117008D -007801750014400D025036603602020036360F03252B35005D35FFFF006AFFE104C3068C -0236024700000116008DE200000AB602002B2B0600252B35FFFF0073FFE1068B08010236 -024600000117004300AA0175001A40120250366036020250367036020036360F03252B5D -35005D35FFFF006AFFE104C3068C02360247000001160043E2000011400C02502B602B02 -002B2B0600252B5D3500FFFF0073FFE1068B080102360246000001170256008F01750012 -400B02503A0102003A390F03252B35005D35FFFF006AFFE104C3068C0236024700000116 -024AE200000AB602002F2E0600252B35FFFF0073FFE1068B07C8023602460000011700D7 -008B01750012400B02504201020042350F03252B35005D35FFFF006AFFE104C306530236 -02470000011600D7C400001540100210372037403750370400372A0600252B5D3500FFFF -0073FE82068B05F00236024600000117024B009A0000000AB6020037380F03252B35FFFF -006AFE8204C305840236024700000116024BE200000AB602002C2D0600252B35FFFF00B2 -FE82052905D10236003800000116024B6200000AB6010020210C00252B35FFFF00B1FE82 -0457045D0236005800000116024BFD00000AB60100191A0916252B35FFFF00B2FFE10529 -080102360038000001170256006201750012400B01502301010023220C00252B35005D35 -FFFF00B1FFE10457068C0236005800000116024AFD00000AB601001C1B0916252B35FFFF -00B2FFE1067508010236024800000117008D007C01750014400D01502E602E0201002E2D -0C00252B35005D35FFFF00B1FFE105A5068C0236024900000116008DEE00001840100160 -28010130284028020028290900252B5D35005D35FFFF00B2FFE106750801023602480000 -0117004300AA0175001C401401502D602D0201402D602D802D03002D2D0C00252B5D3500 -5D35FFFF00B1FFE105A5068C023602490000011600430200001840100160270101502760 -27020027270800252B5D35005D35FFFF00B2FFE106750801023602480000011702560062 -01750012400B01503101010031300C00252B35005D35FFFF00B1FFE105A5068C02360249 -00000116024AFD00000AB601002B2A0800252B35FFFF00B2FFE1067507BE023602480000 -011700D70062016B000AB60100392C0C00252B35FFFF00B1FFE105A50653023602490000 -011600D7FD00000AB6010033260800252B35FFFF00B2FE82067506F80236024800000116 -024B6200000AB601002E2F0D00252B35FFFF00B1FE8205A505840236024900000116024B -FD00000AB6010028290800252B35FFFF0006000004E608010236003C000001170043FFE4 -0175001B400A01500A600A0201500A01B8FFD3B40A0A0401252B5D35005D3500FFFF003D -FE64047F068C0236005C000001160043DD000013B5016009700902B8FFDDB40909040025 -2B5D3500FFFF0006FE8204E605D10236003C00000116024BEC00000AB601000A09040125 -2B35FFFF003DFE64047F045D0236005C00000117024B010400000012400D010A0F0A2F0A -4F0A6F0A7F0A055D1135FFFF0006000004E608010236003C000001170256FFEC01750018 -401001500E0101C00ED00E02000E0D0302252B5D35005D35FFFF003DFE64047F068C0236 -005C00000116024AC900000F400A01500D01000D0C0400252B5D3500FFFF0006000004E6 -07C80236003C0000011700D7FFEC01750012400B01501601010016090500252B35005D35 -FFFF003DFE64047F06530236005C0000011600D7DD00000AB6010015080400252B350003 -006CFEBD04FB0614001B0028002C007E40523B05380C3C2232243E284B054A0C4E224524 -4F285908690870120D2AB52B0114511A17171018011304072041100403082642070A2C2B -2C2B010A1600881617131C041A1A01922E1F2E3F2E02231B010A852D10F632ED5D10F632 -ED32323232ED2F111239392F2F003FED3F3FED1239393F12392F3CFD3C2FED31305D0123 -1123350E01232202113436373E0133321617352135213533153301112E01232206151416 -3332361321352104FBB8BC4DAD6EC6ED524444B66059864CFE95016BBCB8FE8C4F73499C -B2879750A4EAFCB4034C04F4FB0C754252012E01118EDB4D4C4F2427CE869A9AFB990279 -2218D6CCC3CD47FDE286FFFF00ED051D042C0653001600D700000002008A009104900498 -0023002F004D40332D290B0802231D1A141108172F0501052729050F1701170F311F3102 -24290B0802231D1A1411080E202001202A29200F0E010E2F5D33ED2F5D121739ED5D002F -5D33ED2F5D121739ED31300107270E01232226270727372E01353436372737173E013332 -16173717071E011514060727342623220615141633323604906EEC2C4A342E5724EC6DE9 -1718161AEA6FEB24572D2C5825EA71EB1818191765694B496B694B496B01016EEA1A1619 -17EC71EA25592B34492BED6EEB17191817EA6DED2653302D5824A949706E4B4A6F6D0000 -0002000000000000FF4C00780000000000000000000000000000000000000000037D0000 -01020103010401050106010701080109010A010B010C010D010E010F0110011101120113 -011401150116011701180119011A011B011C011D011E011F012001210122012301240125 -0126012701280129012A012B012C012D012E012F01300131013201330134013501360137 -01380139013A013B013C013D013E013F0140014101420143014401450146014701480149 -014A014B014C014D014E014F0150015101520153015401550156015701580159015A015B -015C015D015E015F0160016101620163016401650166016701680169016A016B016C016D -016E016F0170017101720173017401750176017701780179017A017B017C017D017E017F -0180018101820183018401850186018701880189018A018B018C018D018E018F01900191 -01920193019401950196019701980199019A019B019C019D019E019F01A001A101A201A3 -01A401A501A601A701A801A901AA01AB01AC01AD01AE01AF01B001B101B201B301B401B5 -01B601B701B801B901BA01BB01BC01BD01BE01BF01C001C101C201C301C401C501C601C7 -01C801C901CA01CB01CC01CD01CE01CF01D001D101D201D301D401D501D601D701D801D9 -01DA01DB01DC01DD01DE01DF01E001E101E201E301E401E501E601E701E801E901EA01EB -01EC01ED01EE01EF01F001F101F201F301F401F501F601F701F801F901FA01FB01FC01FD -01FE01FF0200020102020203020402050206020702080209020A020B020C020D020E020F -0210021102120213021402150216021702180219021A021B021C021D021E021F02200221 -02220223022402250226022702280229022A022B022C022D022E022F0230023102320233 -023402350236023702380239023A023B023C023D023E023F024002410242024302440245 -0246024702480249024A024B024C024D024E024F02500251025202530254025502560257 -02580259025A025B025C025D025E025F0260026102620263026402650266026702680269 -026A026B026C026D026E026F0270027102720273027402750276027702780279027A027B -027C027D027E027F0280028102820283028402850286028702880289028A028B028C028D -028E028F0290029102920293029402950296029702980299029A029B029C029D029E029F -02A002A102A202A302A402A502A602A702A802A902AA02AB02AC02AD02AE02AF02B002B1 -02B202B302B402B502B602B702B802B902BA02BB02BC02BD02BE02BF02C002C102C202C3 -02C402C502C602C702C802C902CA02CB02CC02CD02CE02CF02D002D102D202D302D402D5 -02D602D702D802D902DA02DB02DC02DD02DE02DF02E002E102E202E302E402E502E602E7 -02E802E902EA02EB02EC02ED02EE02EF02F002F102F202F302F402F502F602F702F802F9 -02FA02FB02FC02FD02FE02FF0300030103020303030403050306030703080309030A030B -030C030D030E030F0310031103120313031403150316031703180319031A031B031C031D -031E031F0320032103220323032403250326032703280329032A032B032C032D032E032F -0330033103320333033403350336033703380339033A033B033C033D033E033F03400341 -03420343034403450346034703480349034A034B034C034D034E034F0350035103520353 -035403550356035703580359035A035B035C035D035E035F036003610362036303640365 -0366036703680369036A036B036C036D036E036F03700371037203730374037503760377 -03780379037A037B037C037D037E037F0380038103820383038403850386038703880389 -038A038B038C038D038E038F0390039103920393039403950396039703980399039A039B -039C039D039E039F03A003A103A203A303A403A503A603A703A803A903AA03AB03AC03AD -03AE03AF03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF -03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE03CF03D003D1 -03D203D303D403D503D603D703D803D903DA03DB03DC03DD03DE03DF03E003E103E203E3 -03E403E503E603E703E803E903EA03EB03EC03ED03EE03EF03F003F103F203F303F403F5 -03F603F703F803F903FA03FB03FC03FD03FE03FF04000401040204030404040504060407 -04080409040A040B040C040D040E040F0410041104120413041404150416041704180419 -041A041B041C041D041E041F0420042104220423042404250426042704280429042A042B -042C042D042E042F0430043104320433043404350436043704380439043A043B043C043D -043E043F0440044104420443044404450446044704480449044A044B044C044D044E044F -0450045104520453045404550456045704580459045A045B045C045D045E045F04600461 -04620463046404650466046704680469046A046B046C046D046E046F0470047104720473 -047404750476047704780479047A047B047C047D052E6E756C6C106E6F6E6D61726B696E -6772657475726E057370616365066578636C616D0871756F746564626C0A6E756D626572 -7369676E06646F6C6C61720770657263656E7409616D70657273616E640B71756F746573 -696E676C6509706172656E6C6566740A706172656E726967687408617374657269736B04 -706C757305636F6D6D610668797068656E06706572696F6405736C617368047A65726F03 -6F6E650374776F05746872656504666F757204666976650373697805736576656E056569 -676874046E696E6505636F6C6F6E0973656D69636F6C6F6E046C65737305657175616C07 -67726561746572087175657374696F6E0261740141014201430144014501460147014801 -49014A014B014C014D014E014F0150015101520153015401550156015701580159015A0B -627261636B65746C656674096261636B736C6173680C627261636B657472696768740B61 -7363696963697263756D0A756E64657273636F7265056772617665016101620163016401 -650166016701680169016A016B016C016D016E016F017001710172017301740175017601 -7701780179017A0962726163656C656674036261720A627261636572696768740A617363 -696974696C646509416469657265736973054172696E670843636564696C6C6106456163 -757465064E74696C6465094F646965726573697309556469657265736973066161637574 -65066167726176650B6163697263756D666C657809616469657265736973066174696C64 -65056172696E670863636564696C6C6106656163757465066567726176650B6563697263 -756D666C65780965646965726573697306696163757465066967726176650B6963697263 -756D666C657809696469657265736973066E74696C6465066F6163757465066F67726176 -650B6F63697263756D666C6578096F6469657265736973066F74696C6465067561637574 -65067567726176650B7563697263756D666C657809756469657265736973066461676765 -72066465677265650463656E7408737465726C696E670773656374696F6E0662756C6C65 -74097061726167726170680A6765726D616E64626C730A7265676973746572656409636F -707972696768740974726164656D61726B056163757465086469657265736973086E6F74 -657175616C024145064F736C61736808696E66696E69747909706C75736D696E7573096C -657373657175616C0C67726561746572657175616C0379656E036D75310B706172746961 -6C646966660973756D6D6174696F6E0770726F647563740370693108696E74656772616C -0B6F726466656D696E696E650C6F72646D617363756C696E65034F686D026165066F736C -6173680C7175657374696F6E646F776E0A6578636C616D646F776E0A6C6F676963616C6E -6F74077261646963616C06666C6F72696E0B617070726F78657175616C09696E6372656D -656E740D6775696C6C656D6F746C6566740E6775696C6C656D6F74726967687408656C6C -697073697306416772617665064174696C6465064F74696C6465024F45026F6506656E64 -61736806656D646173680C71756F746564626C6C6566740D71756F746564626C72696768 -740971756F74656C6566740A71756F7465726967687406646976696465076C6F7A656E67 -650979646965726573697309596469657265736973086672616374696F6E044575726F0D -6775696C73696E676C6C6566740E6775696C73696E676C726967687402666902666C0964 -616767657264626C0E706572696F6463656E74657265640E71756F746573696E676C6261 -73650C71756F746564626C626173650B70657274686F7573616E640B4163697263756D66 -6C65780B4563697263756D666C6578064161637574650945646965726573697306456772 -617665064961637574650B4963697263756D666C65780949646965726573697306496772 -617665064F61637574650B4F63697263756D666C6578064F677261766506556163757465 -0B5563697263756D666C65780655677261766508646F746C657373690A63697263756D66 -6C65780574696C6465066D6163726F6E05627265766509646F74616363656E740472696E -6707636564696C6C610C68756E676172756D6C617574066F676F6E656B056361726F6E06 -4C736C617368066C736C61736806536361726F6E06736361726F6E065A6361726F6E067A -6361726F6E0962726F6B656E626172034574680365746806596163757465067961637574 -650554686F726E0574686F726E056D696E7573086D756C7469706C790B6F6E6573757065 -72696F720B74776F7375706572696F720D74687265657375706572696F72076F6E656861 -6C660A6F6E65717561727465720D74687265657175617274657273056672616E63064762 -72657665066762726576650449646F740853636564696C6C610873636564696C6C610643 -61637574650663616375746506436361726F6E06636361726F6E07646D6163726F6E096F -76657273636F7265066D6964646F74064162726576650661627265766507416F676F6E65 -6B07616F676F6E656B06446361726F6E06646361726F6E0644736C61736807456F676F6E -656B07656F676F6E656B06456361726F6E06656361726F6E064C6163757465066C616375 -7465064C6361726F6E066C6361726F6E044C646F74046C646F74064E6163757465066E61 -63757465064E6361726F6E066E6361726F6E094F64626C6163757465096F64626C616375 -7465065261637574650672616375746506526361726F6E06726361726F6E065361637574 -65067361637574650854636564696C6C610874636564696C6C6106546361726F6E067463 -61726F6E055572696E67057572696E67095564626C6163757465097564626C6163757465 -065A6163757465067A6163757465045A646F74047A646F740547616D6D61055468657461 -0350686905616C7068610564656C746107657073696C6F6E057369676D61037461750370 -68690D756E64657273636F726564626C096578636C616D64626C096E7375706572696F72 -0670657365746102494A02696A0B6E61706F7374726F706865066D696E75746506736563 -6F6E64096166696936313234380961666969363132383906483232303733064831383534 -3306483138353531064831383533330A6F70656E62756C6C657407416D6163726F6E0761 -6D6163726F6E0B4363697263756D666C65780B6363697263756D666C65780443646F7404 -63646F7407456D6163726F6E07656D6163726F6E06456272657665066562726576650445 -646F740465646F740B4763697263756D666C65780B6763697263756D666C65780447646F -740467646F740847636564696C6C610867636564696C6C610B4863697263756D666C6578 -0B6863697263756D666C657804486261720468626172064974696C6465066974696C6465 -07496D6163726F6E07696D6163726F6E064962726576650669627265766507496F676F6E -656B07696F676F6E656B0B4A63697263756D666C65780B6A63697263756D666C6578084B -636564696C6C61086B636564696C6C610C6B677265656E6C616E646963084C636564696C -6C61086C636564696C6C61084E636564696C6C61086E636564696C6C6103456E6703656E -67074F6D6163726F6E076F6D6163726F6E064F6272657665066F62726576650852636564 -696C6C610872636564696C6C610B5363697263756D666C65780B7363697263756D666C65 -7804546261720474626172065574696C6465067574696C646507556D6163726F6E07756D -6163726F6E065562726576650675627265766507556F676F6E656B07756F676F6E656B0B -5763697263756D666C65780B7763697263756D666C65780B5963697263756D666C65780B -7963697263756D666C6578056C6F6E67730A4172696E6761637574650A6172696E676163 -757465074145616375746507616561637574650B4F736C61736861637574650B6F736C61 -7368616375746509616E6F74656C65696106576772617665067767726176650657616375 -746506776163757465095764696572657369730977646965726573697306596772617665 -067967726176650D71756F74657265766572736564097261646963616C65780961666969 -303839343109657374696D61746564096F6E656569676874680C74687265656569676874 -68730B66697665656967687468730C736576656E656967687468730B636F6D6D61616363 -656E7410756E646572636F6D6D61616363656E7405746F6E6F730D646965726573697374 -6F6E6F730A416C706861746F6E6F730C457073696C6F6E746F6E6F7308457461746F6E6F -7309496F7461746F6E6F730C4F6D6963726F6E746F6E6F730C557073696C6F6E746F6E6F -730A4F6D656761746F6E6F7311696F74616469657265736973746F6E6F7305416C706861 -04426574610544656C746107457073696C6F6E045A6574610345746104496F7461054B61 -707061064C616D626461024D75024E75025869074F6D6963726F6E0250690352686F0553 -69676D610354617507557073696C6F6E0343686903507369054F6D6567610C496F746164 -696572657369730F557073696C6F6E64696572657369730A616C706861746F6E6F730C65 -7073696C6F6E746F6E6F7308657461746F6E6F7309696F7461746F6E6F7314757073696C -6F6E6469657265736973746F6E6F7304626574610567616D6D61047A6574610365746105 -746865746104696F7461056B61707061066C616D626461026D75026E75027869076F6D69 -63726F6E0372686F067369676D613107757073696C6F6E0363686903707369056F6D6567 -610C696F746164696572657369730F757073696C6F6E64696572657369730C6F6D696372 -6F6E746F6E6F730C757073696C6F6E746F6E6F730A6F6D656761746F6E6F730961666969 -313030323309616669693130303531096166696931303035320961666969313030353309 -616669693130303534096166696931303035350961666969313030353609616669693130 -303537096166696931303035380961666969313030353909616669693130303630096166 -696931303036310961666969313030363209616669693130313435096166696931303031 -370961666969313030313809616669693130303139096166696931303032300961666969 -313030323109616669693130303232096166696931303032340961666969313030323509 -616669693130303236096166696931303032370961666969313030323809616669693130 -303239096166696931303033300961666969313030333109616669693130303332096166 -696931303033330961666969313030333409616669693130303335096166696931303033 -360961666969313030333709616669693130303338096166696931303033390961666969 -313030343009616669693130303431096166696931303034320961666969313030343309 -616669693130303434096166696931303034350961666969313030343609616669693130 -303437096166696931303034380961666969313030343909616669693130303635096166 -696931303036360961666969313030363709616669693130303638096166696931303036 -390961666969313030373009616669693130303732096166696931303037330961666969 -313030373409616669693130303735096166696931303037360961666969313030373709 -616669693130303738096166696931303037390961666969313030383009616669693130 -303831096166696931303038320961666969313030383309616669693130303834096166 -696931303038350961666969313030383609616669693130303837096166696931303038 -380961666969313030383909616669693130303930096166696931303039310961666969 -313030393209616669693130303933096166696931303039340961666969313030393509 -616669693130303936096166696931303039370961666969313030373109616669693130 -303939096166696931303130300961666969313031303109616669693130313032096166 -696931303130330961666969313031303409616669693130313035096166696931303130 -360961666969313031303709616669693130313038096166696931303130390961666969 -313031313009616669693130313933096166696931303035300961666969313030393809 -616669693030323038096166696936313335320270690C6F6E656E756D657261746F720C -74776F6E756D657261746F720E74687265656E756D657261746F720D666F75726E756D65 -7261746F720D666976656E756D657261746F720E736576656E6E756D657261746F720E65 -696768746E756D657261746F7210446F6E74436F6D707265737348544D5808676C797068 -35373908676C79706835383008676C797068353831054F686F726E056F686F726E055568 -6F726E0575686F726E0D686F6F6B61626F7665636F6D620C646F7462656C6F77636F6D62 -096772617665636F6D62096163757465636F6D6208676C79706835393008676C79706835 -393108676C79706835393208676C79706835393308676C79706835393408676C79706835 -393508676C79706835393608676C79706835393708676C79706835393808676C79706835 -393908676C79706836303008676C79706836303108676C79706836303208676C79706836 -303308676C7970683630340941646F7462656C6F770961646F7462656C6F770A41686F6F -6B61626F76650A61686F6F6B61626F7665104163697263756D666C657861637574651061 -63697263756D666C65786163757465104163697263756D666C6578677261766510616369 -7263756D666C65786772617665144163697263756D666C6578686F6F6B61626F76651461 -63697263756D666C6578686F6F6B61626F7665104163697263756D666C657874696C6465 -106163697263756D666C657874696C6465134163697263756D666C6578646F7462656C6F -77136163697263756D666C6578646F7462656C6F770B41627265766561637574650B6162 -7265766561637574650B41627265766567726176650B61627265766567726176650F4162 -72657665686F6F6B61626F76650F616272657665686F6F6B61626F76650B416272657665 -74696C64650B61627265766574696C64650E416272657665646F7462656C6F770E616272 -657665646F7462656C6F770945646F7462656C6F770965646F7462656C6F770A45686F6F -6B61626F76650A65686F6F6B61626F7665064574696C6465066574696C64651045636972 -63756D666C65786163757465106563697263756D666C6578616375746510456369726375 -6D666C65786772617665106563697263756D666C65786772617665144563697263756D66 -6C6578686F6F6B61626F7665146563697263756D666C6578686F6F6B61626F7665104563 -697263756D666C657874696C6465106563697263756D666C657874696C64651345636972 -63756D666C6578646F7462656C6F77136563697263756D666C6578646F7462656C6F770A -49686F6F6B61626F76650A69686F6F6B61626F76650949646F7462656C6F770969646F74 -62656C6F7708676C79706836343908676C79706836353008676C79706836353108676C79 -70683635320573686576610A68617461667365676F6C0A686174616670617461680B6861 -74616671616D617473056869726971057473657265057365676F6C057061746168067161 -6D61747305686F6C616D0671756275747306646167657368056D65746567056D61716166 -0472616665057061736571077368696E646F740673696E646F7408736F66706173757104 -616C6566036265740567696D656C0564616C657402686503766176057A6179696E036865 -740374657403796F640866696E616C6B6166036B6166056C616D65640866696E616C6D65 -6D036D656D0866696E616C6E756E036E756E0673616D656B68046179696E0766696E616C -70650270650A66696E616C747361646905747361646903716F660472657368047368696E -0374617609646F75626C6576617606766176796F6409646F75626C65796F640667657265 -73680967657273686179696D0D6E657773686571656C7369676E0A7661767368696E646F -740D66696E616C6B616673686576610E66696E616C6B616671616D6174730A6C616D6564 -686F6C616D106C616D6564686F6C616D64616765736807616C746179696E0B7368696E73 -68696E646F740A7368696E73696E646F74117368696E6461676573687368696E646F7410 -7368696E64616765736873696E646F7409616C656670617461680A616C656671616D6174 -7309616C65666D61706971096265746461676573680B67696D656C6461676573680B6461 -6C6574646167657368086865646167657368097661766461676573680B7A6179696E6461 -676573680974657464616765736809796F646461676573680E66696E616C6B6166646167 -657368096B61666461676573680B6C616D6564646167657368096D656D64616765736809 -6E756E6461676573680C73616D656B686461676573680D66696E616C7065646167657368 -0870656461676573680B747361646964616765736809716F666461676573680A72657368 -6461676573680A7368696E64616765736808746176646167657308766176686F6C616D07 -62657472616665076B6166726166650670657261666509616C65666C616D6564127A6572 -6F77696474686E6F6E6A6F696E65720F7A65726F77696474686A6F696E65720F6C656674 -746F72696768746D61726B0F7269676874746F6C6566746D61726B096166696935373338 -380961666969353734303309616669693537343037096166696935373430390961666969 -353734343009616669693537343531096166696935373435320961666969353734353309 -616669693537343534096166696935373435350961666969353734353609616669693537 -343537096166696935373435380961666969353733393209616669693537333933096166 -696935373339340961666969353733393509616669693537333936096166696935373339 -370961666969353733393809616669693537333939096166696935373430300961666969 -353734303109616669693537333831096166696935373436310961666969363331363709 -616669693537343539096166696935373534330961666969353735333409616669693537 -343934096166696936323834330961666969363238343409616669693632383435096166 -696936343234300961666969363432343109616669693633393534096166696935373338 -320961666969363432343209616669693632383831096166696935373530340961666969 -353733363909616669693537333730096166696935373337310961666969353733373209 -616669693537333733096166696935373337340961666969353733373509616669693537 -333931096166696935373437310961666969353734363009616669693532323538096166 -696935373530360961666969363239353809616669693632393536096166696935323935 -370961666969353735303509616669693632383839096166696936323838370961666969 -363238383809616669693537353037096166696936323936310961666969363239353909 -616669693632393630096166696935373530380961666969363239363209616669693537 -353637096166696936323936340961666969353233303509616669693532333036096166 -696935373530390961666969363239363709616669693632393635096166696936323936 -360961666969353735353509616669693532333634096166696936333735330961666969 -363337353409616669693633373539096166696936333736330961666969363337393509 -616669693632383931096166696936333830380961666969363239333809616669693633 -383130096166696936323934320961666969363239343709616669693633383133096166 -696936333832330961666969363338323409616669693633383333096166696936333834 -340961666969363238383209616669693632383833096166696936323838340961666969 -363238383509616669693632383836094F646F7462656C6F77096F646F7462656C6F770A -4F686F6F6B61626F76650A6F686F6F6B61626F7665104F63697263756D666C6578616375 -7465106F63697263756D666C65786163757465104F63697263756D666C65786772617665 -106F63697263756D666C65786772617665144F63697263756D666C6578686F6F6B61626F -7665146F63697263756D666C6578686F6F6B61626F7665104F63697263756D666C657874 -696C6465106F63697263756D666C657874696C6465134F63697263756D666C6578646F74 -62656C6F77136F63697263756D666C6578646F7462656C6F770A4F686F726E6163757465 -0A6F686F726E61637574650A4F686F726E67726176650A6F686F726E67726176650E4F68 -6F726E686F6F6B61626F76650E6F686F726E686F6F6B61626F76650A4F686F726E74696C -64650A6F686F726E74696C64650D4F686F726E646F7462656C6F770D6F686F726E646F74 -62656C6F770955646F7462656C6F770975646F7462656C6F770A55686F6F6B61626F7665> -<0A75686F6F6B61626F76650A55686F726E61637574650A75686F726E61637574650A5568 -6F726E67726176650A75686F726E67726176650E55686F726E686F6F6B61626F76650E75 -686F726E686F6F6B61626F76650A55686F726E74696C64650A75686F726E74696C64650D -55686F726E646F7462656C6F770D75686F726E646F7462656C6F7708676C797068383832 -08676C7970683838330959646F7462656C6F770979646F7462656C6F770A59686F6F6B61 -626F76650A79686F6F6B61626F7665065974696C6465067974696C646504646F6E670974 -696C6465636F6D620863757272656E63790000000000000100000C92000102160C000009 -0084000400B4FF9C000400B6FF9C000A0024FF9C000A0090FF9C000F00B4FF2E000F00B6 -FF2E00100024FFCE0010002CFFE20010002DFF9C00100036FFEC00100037FF6A00100039 -FFCE0010003AFFCE0010003BFFB00010003CFF740010003DFFE200100044FFEC00100059 -FFD80010005AFFEC0010005BFFCE0010005CFFD80010005DFFD800100090FFCE001000A0 -FFEC0011000FFF7E00110010FF60001100B1FF88001100B2FF88001100B4FF2E001100B6 -FF2E001D00B2FF7400240010FFCE00240036FFF600240037FF8800240038FFF600240039 -FFC40024003AFFCE0024003CFFB000240057FFEC00240058FFF600240059FFCE0024005A -FFE20024005CFFCE002400B1FFCE002400B2FFCE002400B3FFCE002400B4FF88002400B5 -FFCE002400B6FF880025000FFFEC00250010000A00250011FFEC00250037FFC4002500AB -FFEC002500B1000A002500B2000A00260010FFCE002600AFFFE7002600B1FFCE002600B2 -FFCE0027000FFFCE00270011FFCE00270037FFCE0027003AFFEC0027003BFFF60027003C -FFEC0027003DFFEC002700ABFFCE0029000FFED400290011FED40029001DFFC40029001E -FFC400290022003C00290024FF9C00290037001E00290044FF9C00290048FFCE00290052 -FFCE00290090FF92002900A0FF9C002900A1FFCE002900ABFED4002900B0FFCE002C0010 -FFE2002C00B1FFE2002C00B2FFE2002D000FFFEC002D0011FFEC002D0024FFF6002D0090 -FFF6002D00ABFFEC002E0010FF92002E0032FFEC002E0044FFC4002E0048FFBA002E0052 -FFBA002E0058FFCE002E0059FFB0002E005AFFBA002E005CFFB0002E0091FFEC002E00A0 -FFC4002E00A1FFBA002E00AFFFEC002E00B0FFBA002E00B1FF92002E00B2FF92002F000A -FF88002F0010FF60002F0026FFEC002F002AFFEC002F002D0064002F0032FFEC002F0037 -FF56002F0039FF92002F003AFF9C002F003CFF60002F0059FF92002F005CFF92002F0064 -FFEC002F0091FFEC002F00AFFFEC002F00B1FF60002F00B2FF60002F00B4FF60002F00B6 -FF600032000FFFE200320011FFE200320037FFCE0032003BFFF60032003CFFEC0032003D -FFEC003200ABFFE20033000FFED400330011FED400330024FFCE0033003C001400330044 -FFCE00330048FFCE00330052FFCE00330090FFBA003300A0FFCE003300A1FFCE003300AB -FED4003300B0FFCE0034000FFFE200340011FFE2003400ABFFE200350010FF9C00350037 -FFC40035003CFFEC00350044FFD800350048FFCE00350052FFCE00350058FFEC0035005C -FFC9003500A0FFCE003500A1FFCE003500B0FFC4003500B1FF9C003500B2FF9C003500B4 -FFBA003500B6FFBA0036000FFFEC00360011FFEC00360024FFEC00360036FFEA00360059 -FFE20036005AFFEC0036005CFFE200360090FFEC003600ABFFEC0037000FFEDE00370010 -FF6A00370011FEDE0037001DFF380037001EFF3800370022003C00370024FF8800370026 -FFD80037002AFFD800370032FFCE00370036FFF400370037FFBA00370044FF1000370046 -FF2400370048FF240037004AFF2E00370052FF2400370055FF3800370056FF4C00370058 -FF3800370059FF380037005AFF380037005CFF380037005DFF5600370064FFD800370090 -FF7E00370091FFCE003700A0FF10003700A1FF24003700ABFEDE003700AFFFCE003700B0 -FF24003700B1FF6A003700B2FF6A0038000FFFEC00380011FFEC00380024FFF600380090 -FFEC003800ABFFEC0039000FFEDE00390010FFCE00390011FEDE0039001DFFB00039001E -FFB000390024FFC400390044FF9C00390048FF9C00390052FF9C00390058FFC40039005C -FFBF00390090FFBA003900A0FF9C003900A1FF9C003900ABFEDE003900B0FF9C003900B1 -FFCE003900B2FFCE003A000FFEDE003A0010FFCE003A0011FF24003A001DFFB0003A001E -FFB0003A0024FFCE003A0044FF9C003A0048FF9C003A0052FF9C003A0055FFC4003A0058 -FFC4003A005CFFBF003A0090FFC4003A00A0FF9C003A00A1FF9C003A00ABFF24003A00B0 -FF9C003A00B1FFCE003A00B2FFCE003B0010FFB0003B0026FFF6003B002AFFF6003B0032 -FFF6003B0044FFCE003B0048FFC4003B0052FFC4003B0058FFE2003B005CFFB0003B0064 -FFF6003B0091FFF6003B00A0FFCE003B00A1FFC4003B00AFFFF6003B00B0FFC4003B00B1 -FFB0003B00B2FFB0003C000FFEDE003C0010FF74003C0011FEDE003C001DFF38003C001E -FF38003C0024FFB0003C0032FFEC003C0044FF74003C0047FF88003C0048FF7E003C004A -FF7E003C0050FF9C003C0051FF9C003C0052FF7E003C0053FF9C003C0054FF7E003C0055 -FF9C003C0056FF92003C0058FF92003C0059FF9C003C0090FFB0003C0091FFEC003C00A0 -FF74003C00A1FF7E003C00ABFEDE003C00AFFFEC003C00B0FF7E003C00B1FF74003C00B2 -FF74003D0010FFC4003D0026FFEC003D002AFFEC003D0032FFEC003D003DFFF6003D0044 -FFCE003D0048FFC4003D0052FFC4003D005AFFD8003D005CFFBF003D0064FFEC003D0091 -FFEC003D00A0FFCE003D00A1FFC4003D00AFFFEC003D00B0FFC4003D00B1FFCE003D00B2 -FFCE00440059FFF00044005AFFF60044005CFFF00045000FFFE200450011FFEC0045005C -FFFB004500ABFFEC00460010FFEC00460037FFC4004600B1FFEC004600B2FFEC00480037 -FF7400490005003C0049000A003C0049000C00640049000D00320049000FFF7E00490010 -FFCE00490011FF8800490022006E0049003F00640049004000640049005CFFF600490060 -0064004900ABFF88004900B1FFCE004900B2FFCE004900B40032004900B60032004B0059 -FFEC004B005AFFF6004B005CFFEC004E0010FF9C004E0048FFEC004E0052FFEC004E00A1 -FFEC004E00B0FFEC004E00B1FF9C004E00B2FF9C00500059FFEC0050005AFFF60050005C -FFEC00510059FFEC0051005AFFF60051005CFFEC0052000FFFE200520011FFEC00520059 -FFF10052005BFFEC0052005CFFF1005200ABFFEC0053000FFFE200530011FFEC0053005C -FFFB005300ABFFEC0055000FFEDE00550010FFEC00550011FEDE00550044FFDC005500A0 -FFD8005500ABFEDE005500B1FFEC005500B2FFEC005500B4001E005500B6001E00570010 -FFD80057005CFFF6005700B1FFD8005700B2FFD8005700B40014005700B600140059000F -FF4C00590010FFD800590011FF4C00590044FFD800590048FFEE00590052FFEE005900A0 -FFD8005900A1FFEE005900ABFF4C005900B0FFF1005900B1FFD8005900B2FFD8005A000F -FFBA005A0010FFEC005A0011FFBA005A0044FFEC005A00A0FFEC005A00ABFFBA005A00B1 -FFEC005A00B2FFEC005B0010FFCE005B0046FFEC005B0047FFF6005B0048FFE8005B004A -FFF6005B0052FFE8005B006FFFEC005B00A1FFE8005B00B0FFEC005B00B1FFCE005B00B2 -FFCE005C000FFF42005C0010FFD8005C0011FF42005C0044FFD8005C0046FFEE005C0047 -FFF6005C0048FFEE005C004AFFF6005C0052FFEE005C0054FFF6005C006FFFEE005C00A0 -FFD8005C00A1FFEE005C00ABFF4C005C00B0FFF1005C00B1FFD8005C00B2FFD8005D0010 -FFEC005D0046FFF6005D0047FFF6005D0048FFF4005D004AFFF6005D0052FFF4005D0054 -FFF6005D006FFFF6005D00A1FFF4005D00B1FFEC005D00B2FFEC00640010FFCE006400AF -FFE7006400B1FFCE006400B2FFCE006F0010FFEC006F00B1FFEC006F00B2FFEC0091000F -FFE200910011FFE200910037FFCE0091003BFFF60091003CFFEC0091003DFFEC009100AB -FFE200A1000FFFE200A10011FFEC00A10059FFF100A1005BFFEC00A1005CFFF100A100AB -FFEC00AB00B4FF2E00AB00B6FF2E00B10024FFCE00B1002CFFE200B1002DFF9C00B10036 -FFEC00B10037FF6A00B10039FFCE00B1003AFFCE00B1003BFFB000B1003CFF7400B1003D -FFF600B10044FFEC00B10059FFD800B1005AFFEC00B1005BFFCE00B1005CFFD800B1005D -FFD800B10090FFCE00B100A0FFEC00B20024FFCE00B2002CFFE200B2002DFF9C00B20036 -FFEC00B20037FF6A00B20039FFCE00B2003AFFCE00B2003BFFB000B2003CFF7400B2003D -FFF600B20044FFEC00B20059FFD800B2005AFFEC00B2005BFFCE00B2005CFFD800B2005D -FFD800B20090FFCE00B200A0FFEC00B30024FF9C00B30090FF9C00B4000FFF2E00B40011 -FF2E00B40024FF9C00B40037006E00B40039006400B4003A003C00B4003C006E00B40056 -FFBA00B40057002800B40090FF9C00B400ABFF2E00B50024FF9C00B50090FF9C00B6000F -FF2E00B60011FF2E00B60024FF9C00B60037006E00B60039006400B6003A003C00B6003C -006E00B60056FFBA00B60057002800B60090FF9C00B600ABFF2E00C30037FF2E00C30039 -FF2E00C3003AFF9C00C3003CFF2E00C40037FF2E00C40039FF2E00C4003AFF9C00C4003C -FF2E0000000000010001000100000001000013FF0000001400000000000013F7308213F3 -06092A864886F70D010702A08213E4308213E0020101310E300C06082A864886F70D0205 -05003060060A2B060104018237020104A0523050302C060A2B06010401823702011CA21E -801C003C003C003C004F00620073006F006C006500740065003E003E003E3020300C0608 -2A864886F70D020505000410503EEC935CE1D8D33511E69A791E4594A0820F3F308202C0 -3082022902141389B4D18AE8A7C4BD35C79B8D88CA1FCA535691300D06092A864886F70D -010104050030819E311F301D060355040A1316566572695369676E205472757374204E65 -74776F726B31173015060355040B130E566572695369676E2C20496E632E312C302A0603 -55040B1323566572695369676E2054696D65205374616D70696E67205365727669636520 -526F6F7431343032060355040B132B4E4F204C494142494C495459204143434550544544 -2C20286329393720566572695369676E2C20496E632E301E170D39373035313230373030 -30305A170D3939313233313037303030305A30819E311F301D060355040A131656657269 -5369676E205472757374204E6574776F726B31173015060355040B130E56657269536967 -6E2C20496E632E312C302A060355040B1323566572695369676E2054696D65205374616D -70696E67205365727669636520526F6F7431343032060355040B132B4E4F204C49414249 -4C4954592041434345505445442C20286329393720566572695369676E2C20496E632E30 -819F300D06092A864886F70D010101050003818D0030818902818100D32E20F0687C2C2D -2E811CB106B2A70BB7110D57DA53D875E3C9332AB2D4F6095B34F3E990FE090CD0DB1B5A -B9CDE7F688B19DC08725EB7D5810736A78CB7115FDC658F629AB585E9604FD2D62115881 -1CCA7194D522582FD5CC14058436BA94AAB44D4AE9EE3B22AD56997E219C6C86C04A4797 -6AB4A636D5FC092DD3B4399B0203010001300D06092A864886F70D010104050003818100 -3A119C85053ED2E980FB7BD5A9F4AC79FC05FC953D7123A92B28DF8C136589FE2C87018F -5A9A62CA11A780F4B7BE14B7D156996B086245C6A2A5DA357F0522DE722D048605A77C09 -16931443F0F7164DD6078E9B106C58FE0A3597CA899FDF04709C2A7D618EC1E80B719AA8 -C76662423D959422329822898AFA640824F5D2FA308202CD30820236021500BD119ADA43 -ED21FB46588489CA46889025EE1460300D06092A864886F70D010104050030819E311F30 -1D060355040A1316566572695369676E205472757374204E6574776F726B311730150603 -55040B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369 -676E2054696D65205374616D70696E67205365727669636520526F6F7431343032060355 -040B132B4E4F204C494142494C4954592041434345505445442C20286329393720566572 -695369676E2C20496E632E301E170D3937303531323037303030305A170D393931323331 -3037303030305A3081AC31273025060355040B131E566572695369676E2054696D652053 -74616D70696E672053657276696365311F301D060355040B1316566572695369676E2054 -72757374204E6574776F726B31343032060355040B132B4E4F204C494142494C49545920 -41434345505445442C20286329393720566572695369676E2C20496E632E311730150603 -55040A130E566572695369676E2C20496E632E3111300F06035504071308496E7465726E -657430819D300D06092A864886F70D010101050003818B0030818702818100AB61EDB4AD -8D904790DCB4115E69DC0A7F62900631CDCEFF889146D7493A94E9D4063F9DADA2785AEC -F9FC63454FB80B6E30EFA236AB2D09DFF16F27AB0D516005354F7FCE544FD0B72C42D80B -D08DB85EFFB680D0E396B47F224942106CD398B00156A3C3CF2E9F3AF47FA858A6D72265 -E58CAB789CBCD94742685B2D7DFDB5020103300D06092A864886F70D0101040500038181 -006D60FB995FA469B3D37B702B62231E442051AF2315C77402F949F2271A5CAC86713508 -2BF68FDEE0B596E88BA74BE373C848099DB0DA8BDA1592CA03E509255606E74EA447A5D1 -5746D43856F521CDC3263B2D2532CE9BE2BF4047EAD86D4776E5C030A30F80CE7FD83B7E -A0F9952A312B15FAC814EDDDB0E9554170462D2C7E308209A63082090FA0030201020210 -7966966E83B0D0B601126E9DC0B46571300D06092A864886F70D01010205003061311130 -0F06035504071308496E7465726E657431173015060355040A130E566572695369676E2C -20496E632E31333031060355040B132A566572695369676E20436F6D6D65726369616C20 -536F667477617265205075626C697368657273204341301E170D39383034313630303030 -30305A170D3939303431363233353935395A3082015D3111300F06035504071308496E74 -65726E657431173015060355040A130E566572695369676E2C20496E632E313330310603 -55040B132A566572695369676E20436F6D6D65726369616C20536F667477617265205075 -626C69736865727320434131463044060355040B133D7777772E766572697369676E2E63 -6F6D2F7265706F7369746F72792F43505320496E636F72702E206279205265662E2C4C49 -41422E4C54442863293936313E303C060355040B13354469676974616C20494420436C61 -73732033202D204D6963726F736F667420536F6674776172652056616C69646174696F6E -207632310B3009060355040613025553311330110603550408130A57617368696E67746F -6E3110300E060355040713075265646D6F6E64311E301C060355040314154D6963726F73 -6F667420436F72706F726174696F6E311E301C060355040B14154D6963726F736F667420 -436F72706F726174696F6E30820120300D06092A864886F70D01010105000382010D0030 -8201080282010100B490D226A864E6EB15C3FF6D7B414F0AF96F2A71CE2E1853A63236E0 -D468E135FD4912D896FC65CF531420BE04C97AF5C9706D94ECCCB3AF2A309A32587CB6A9 -6B256799C0E277EA05E5EFE396F7AD0B19A6AE3C8470E2F86F5C4F7D6F0F52458A15D765 -DC3B2005E33DA16C973A0E0B2513ED21CB208E397A628305C9231AFC529DAC9D4C96D73C -4E583D827BEE093556B568C04245A23B31A3FBD895FB55C72CA8A3C3294FCEF493F0031F -7BF1153AA9F8AA5083056D62F08B138838D9E31C0E73C10640BA28C3EBCD9271C7BE66B2 -A15422D60B677CF8877989AC660AAA51FAFD7221FC865DC6F44A0EEC5861234DD0B13A64 -E0139E5EC8856D4C16AF3D07020103A38205DD308205D930090603551D1304023000300B -0603551D0F0404030205A03081880603551D01048180307E80107B96E4D143FD6898F338 -CC6E3BF20B82A16330613111300F06035504071308496E7465726E657431173015060355 -040A130E566572695369676E2C20496E632E31333031060355040B132A56657269536967 -6E20436F6D6D65726369616C20536F667477617265205075626C69736865727320434182 -0502B400000130210603551D040101FF04173014300E300C060A2B060104018237020116 -0302078000300D0603551D0A040630040302064030820436060A2B06010401823702010A -0101FF048204233082041FA029802768747470733A2F2F7777772E766572697369676E2E -636F6D2F7265706F7369746F72792F435053A18203B8818203B454686973206365727469 -66696361746520696E636F72706F7261746573206279207265666572656E63652C20616E -642069747320757365206973207374726963746C790A7375626A65637420746F2C207468 -6520566572695369676E2043657274696669636174696F6E205072616374696365205374 -6174656D656E742028435053290A76657273696F6E20312E302C20617661696C61626C65 -20696E2074686520566572695369676E207265706F7369746F72792061743A0A68747470 -733A2F2F7777772E766572697369676E2E636F6D3B20627920452D6D61696C2061742043 -50532D726571756573747340766572697369676E2E636F6D3B206F720A6279206D61696C -20617420566572695369676E2C20496E632E2C203235393320436F617374204176652E2C -204D6F756E7461696E20566965772C2043412039343034330A55534120436F7079726967 -6874202863293139393620566572695369676E2C20496E632E2020416C6C205269676874 -732052657365727665642E204345525441494E0A57415252414E5449455320444953434C -41494D454420414E44204C494142494C495459204C494D495445442E0A0A5741524E494E -473A2054484520555345204F462054484953204345525449464943415445204953205354 -524943544C59205355424A45435420544F205448450A564552495349474E204345525449 -4649434154494F4E2050524143544943452053544154454D454E542E2020544845204953 -5355494E4720415554484F524954590A444953434C41494D53204345525441494E20494D -504C49454420414E4420455850524553532057415252414E544945532C20494E434C5544 -494E472057415252414E544945530A4F46204D45524348414E544142494C495459204F52 -204649544E45535320464F52204120504152544943554C415220505552504F53452C2041 -4E442057494C4C204E4F540A4245204C4941424C4520464F5220434F4E53455155454E54 -49414C2C2050554E49544956452C20414E44204345525441494E204F544845522044414D -414745532E205345450A5448452043505320464F522044455441494C532E0A0A436F6E74 -656E7473206F662074686520566572695369676E2072656769737465726564206E6F6E76 -657269666965645375626A656374417474726962757465730A657874656E73696F6E2076 -616C7565207368616C6C206E6F7420626520636F6E736964657265642061732061636375 -7261746520696E666F726D6174696F6E0A76616C69646174656420627920746865204941 -2E0AA336803468747470733A2F2F7777772E766572697369676E2E636F6D2F7265706F73 -69746F72792F766572697369676E6C6F676F2E6769663081AF0603551D200481A7308030 -80060B6086480186F845010701013080302806082B06010505070201161C68747470733A -2F2F7777772E766572697369676E2E636F6D2F435053306206082B060105050702023056 -3015160E566572695369676E2C20496E632E30030201011A3D566572695369676E277320 -43505320696E636F72702E206279207265666572656E6365206C6961622E206C74642E20 -286329393720566572695369676E0000000000003016060A2B06010401823702011B0408 -30060101FF0101FF300D06092A864886F70D010102050003818100954CA27955DA745C8B -25C2A620F06CB8B37B467B9E9F7ABA710648151265CC5D29F8513B8971B1F4143878DA8F -AE0B8036905D4897C500380A53BF4037FF8A13276D004734F7484C2E72F2C6D37EFD446F -228FD1929FE394EDE7FF00C9C2EE721CD99C036EB6C1637B3278443B9E858AFB84863728 -2EE7A638373EBAFCF382233182042430820420020101307530613111300F060355040713 -08496E7465726E657431173015060355040A130E566572695369676E2C20496E632E3133 -3031060355040B132A566572695369676E20436F6D6D65726369616C20536F6674776172 -65205075626C69736865727320434102107966966E83B0D0B601126E9DC0B46571300C06 -082A864886F70D02050500A081AE301906092A864886F70D010903310C060A2B06010401 -8237020104301C060A2B06010401823702010B310E300C060A2B06010401823702011630 -1F06092A864886F70D010904311204105BA6237427F8290EF09CCF5B63F749F83052060A -2B06010401823702010C31443042A01A801800560065007200640061006E006100200046 -006F006E0074A1248022687474703A2F2F7777772E6D6963726F736F66742E636F6D2F74 -727565747970652F300D06092A864886F70D0101010500048201003EFBA519B6A00C823F -B823EA3A1E5E6EBDBBF2C647D1F1093C66910B72FEA26B78E409E7750E62A559DAAC12F7 -CCA36B0725F8BB2E0409AEE1156BE3736F46D1B116DF2B18ABCF394DCF0EF8EE01A758E5 -E4872882FFDD5F04C39F3258358C3DE27BE8FC410AC11736DD19609E3BACBB2257C5E4A4 -836F811D07EC80DAB42FE9AC33537823FA2AC0D406166130C356085818B3CEC8A53763BF -88191B4E52ED790B57C924CEA670505AA2621C1121663215F15D1A9E89A6BC2AA35F5B1F -86E4FDEC2280203A57D736DD2C29A4D2D29F00BAF260927AB3B36EF1C4CC5100CAC54BAA -0AFB74D0101FBEC53815E46B3814DF7E5DFC4A121257608F59AA76D5F333A3A18201D030 -8201CC06092A864886F70D010906318201BD308201B90201013081B830819E311F301D06 -0355040A1316566572695369676E205472757374204E6574776F726B3117301506035504 -0B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369676E -2054696D65205374616D70696E67205365727669636520526F6F7431343032060355040B -132B4E4F204C494142494C4954592041434345505445442C202863293937205665726953 -69676E2C20496E632E021500BD119ADA43ED21FB46588489CA46889025EE1460300C0608 -2A864886F70D02050500A059301806092A864886F70D010903310B06092A864886F70D01 -0701301C06092A864886F70D010905310F170D3938313131323135313835305A301F0609 -2A864886F70D01090431120410641EED59DAFC3103655C9A2A4309D288300D06092A8648 -86F70D01010105000481809092A6C858A52E216E3E56A1C40477C3C63030D247298EF8EA -BFA1C4D5DDE8C375555276DDBB2761ADFC914D772AD331C04DDD675B9736F7D136CAA72D -41CF9F8377C51611E0D1B6EDD8C5AB73694109FD5312908B17319E96C22CCEDD65C9D342 -DC0E3B159C36E0FDA54B21C8DD968B90621C263E94F737AC1997B9D84E517C0000> -] def -/CharStrings 893 dict dup begin -/.notdef 0 def /.null 1 def /nonmarkingreturn 2 def /space 3 def /exclam 4 def -/quotedbl 5 def /numbersign 6 def /dollar 7 def /percent 8 def -/ampersand 9 def /quotesingle 10 def /parenleft 11 def /parenright 12 def -/asterisk 13 def /plus 14 def /comma 15 def /hyphen 16 def -/period 17 def /slash 18 def /zero 19 def /one 20 def -/two 21 def /three 22 def /four 23 def /five 24 def -/six 25 def /seven 26 def /eight 27 def /nine 28 def -/colon 29 def /semicolon 30 def /less 31 def /equal 32 def -/greater 33 def /question 34 def /at 35 def /A 36 def -/B 37 def /C 38 def /D 39 def /E 40 def -/F 41 def /G 42 def /H 43 def /I 44 def -/J 45 def /K 46 def /L 47 def /M 48 def -/N 49 def /O 50 def /P 51 def /Q 52 def -/R 53 def /S 54 def /T 55 def /U 56 def -/V 57 def /W 58 def /X 59 def /Y 60 def -/Z 61 def /bracketleft 62 def /backslash 63 def /bracketright 64 def -/asciicircum 65 def /underscore 66 def /grave 67 def /a 68 def -/b 69 def /c 70 def /d 71 def /e 72 def -/f 73 def /g 74 def /h 75 def /i 76 def -/j 77 def /k 78 def /l 79 def /m 80 def -/n 81 def /o 82 def /p 83 def /q 84 def -/r 85 def /s 86 def /t 87 def /u 88 def -/v 89 def /w 90 def /x 91 def /y 92 def -/z 93 def /braceleft 94 def /bar 95 def /braceright 96 def -/asciitilde 97 def /Adieresis 98 def /Aring 99 def /Ccedilla 100 def -/Eacute 101 def /Ntilde 102 def /Odieresis 103 def /Udieresis 104 def -/aacute 105 def /agrave 106 def /acircumflex 107 def /adieresis 108 def -/atilde 109 def /aring 110 def /ccedilla 111 def /eacute 112 def -/egrave 113 def /ecircumflex 114 def /edieresis 115 def /iacute 116 def -/igrave 117 def /icircumflex 118 def /idieresis 119 def /ntilde 120 def -/oacute 121 def /ograve 122 def /ocircumflex 123 def /odieresis 124 def -/otilde 125 def /uacute 126 def /ugrave 127 def /ucircumflex 128 def -/udieresis 129 def /dagger 130 def /degree 131 def /cent 132 def -/sterling 133 def /section 134 def /bullet 135 def /paragraph 136 def -/germandbls 137 def /registered 138 def /copyright 139 def /trademark 140 def -/acute 141 def /dieresis 142 def /notequal 143 def /AE 144 def -/Oslash 145 def /infinity 146 def /plusminus 147 def /lessequal 148 def -/greaterequal 149 def /yen 150 def /mu1 151 def /partialdiff 152 def -/summation 153 def /product 154 def /pi1 155 def /integral 156 def -/ordfeminine 157 def /ordmasculine 158 def /Ohm 159 def /ae 160 def -/oslash 161 def /questiondown 162 def /exclamdown 163 def /logicalnot 164 def -/radical 165 def /florin 166 def /approxequal 167 def /increment 168 def -/guillemotleft 169 def /guillemotright 170 def /ellipsis 171 def /Agrave 172 def -/Atilde 173 def /Otilde 174 def /OE 175 def /oe 176 def -/endash 177 def /emdash 178 def /quotedblleft 179 def /quotedblright 180 def -/quoteleft 181 def /quoteright 182 def /divide 183 def /lozenge 184 def -/ydieresis 185 def /Ydieresis 186 def /fraction 187 def /Euro 188 def -/guilsinglleft 189 def /guilsinglright 190 def /fi 191 def /fl 192 def -/daggerdbl 193 def /periodcentered 194 def /quotesinglbase 195 def /quotedblbase 196 def -/perthousand 197 def /Acircumflex 198 def /Ecircumflex 199 def /Aacute 200 def -/Edieresis 201 def /Egrave 202 def /Iacute 203 def /Icircumflex 204 def -/Idieresis 205 def /Igrave 206 def /Oacute 207 def /Ocircumflex 208 def -/Ograve 209 def /Uacute 210 def /Ucircumflex 211 def /Ugrave 212 def -/dotlessi 213 def /circumflex 214 def /tilde 215 def /macron 216 def -/breve 217 def /dotaccent 218 def /ring 219 def /cedilla 220 def -/hungarumlaut 221 def /ogonek 222 def /caron 223 def /Lslash 224 def -/lslash 225 def /Scaron 226 def /scaron 227 def /Zcaron 228 def -/zcaron 229 def /brokenbar 230 def /Eth 231 def /eth 232 def -/Yacute 233 def /yacute 234 def /Thorn 235 def /thorn 236 def -/minus 237 def /multiply 238 def /onesuperior 239 def /twosuperior 240 def -/threesuperior 241 def /onehalf 242 def /onequarter 243 def /threequarters 244 def -/franc 245 def /Gbreve 246 def /gbreve 247 def /Idot 248 def -/Scedilla 249 def /scedilla 250 def /Cacute 251 def /cacute 252 def -/Ccaron 253 def /ccaron 254 def /dmacron 255 def /overscore 256 def -/middot 257 def /Abreve 258 def /abreve 259 def /Aogonek 260 def -/aogonek 261 def /Dcaron 262 def /dcaron 263 def /Dslash 264 def -/Eogonek 265 def /eogonek 266 def /Ecaron 267 def /ecaron 268 def -/Lacute 269 def /lacute 270 def /Lcaron 271 def /lcaron 272 def -/Ldot 273 def /ldot 274 def /Nacute 275 def /nacute 276 def -/Ncaron 277 def /ncaron 278 def /Odblacute 279 def /odblacute 280 def -/Racute 281 def /racute 282 def /Rcaron 283 def /rcaron 284 def -/Sacute 285 def /sacute 286 def /Tcedilla 287 def /tcedilla 288 def -/Tcaron 289 def /tcaron 290 def /Uring 291 def /uring 292 def -/Udblacute 293 def /udblacute 294 def /Zacute 295 def /zacute 296 def -/Zdot 297 def /zdot 298 def /Gamma 299 def /Theta 300 def -/Phi 301 def /alpha 302 def /delta 303 def /epsilon 304 def -/sigma 305 def /tau 306 def /phi 307 def /underscoredbl 308 def -/exclamdbl 309 def /nsuperior 310 def /peseta 311 def /IJ 312 def -/ij 313 def /napostrophe 314 def /minute 315 def /second 316 def -/afii61248 317 def /afii61289 318 def /H22073 319 def /H18543 320 def -/H18551 321 def /H18533 322 def /openbullet 323 def /Amacron 324 def -/amacron 325 def /Ccircumflex 326 def /ccircumflex 327 def /Cdot 328 def -/cdot 329 def /Emacron 330 def /emacron 331 def /Ebreve 332 def -/ebreve 333 def /Edot 334 def /edot 335 def /Gcircumflex 336 def -/gcircumflex 337 def /Gdot 338 def /gdot 339 def /Gcedilla 340 def -/gcedilla 341 def /Hcircumflex 342 def /hcircumflex 343 def /Hbar 344 def -/hbar 345 def /Itilde 346 def /itilde 347 def /Imacron 348 def -/imacron 349 def /Ibreve 350 def /ibreve 351 def /Iogonek 352 def -/iogonek 353 def /Jcircumflex 354 def /jcircumflex 355 def /Kcedilla 356 def -/kcedilla 357 def /kgreenlandic 358 def /Lcedilla 359 def /lcedilla 360 def -/Ncedilla 361 def /ncedilla 362 def /Eng 363 def /eng 364 def -/Omacron 365 def /omacron 366 def /Obreve 367 def /obreve 368 def -/Rcedilla 369 def /rcedilla 370 def /Scircumflex 371 def /scircumflex 372 def -/Tbar 373 def /tbar 374 def /Utilde 375 def /utilde 376 def -/Umacron 377 def /umacron 378 def /Ubreve 379 def /ubreve 380 def -/Uogonek 381 def /uogonek 382 def /Wcircumflex 383 def /wcircumflex 384 def -/Ycircumflex 385 def /ycircumflex 386 def /longs 387 def /Aringacute 388 def -/aringacute 389 def /AEacute 390 def /aeacute 391 def /Oslashacute 392 def -/oslashacute 393 def /anoteleia 394 def /Wgrave 395 def /wgrave 396 def -/Wacute 397 def /wacute 398 def /Wdieresis 399 def /wdieresis 400 def -/Ygrave 401 def /ygrave 402 def /quotereversed 403 def /radicalex 404 def -/afii08941 405 def /estimated 406 def /oneeighth 407 def /threeeighths 408 def -/fiveeighths 409 def /seveneighths 410 def /commaaccent 411 def /undercommaaccent 412 def -/tonos 413 def /dieresistonos 414 def /Alphatonos 415 def /Epsilontonos 416 def -/Etatonos 417 def /Iotatonos 418 def /Omicrontonos 419 def /Upsilontonos 420 def -/Omegatonos 421 def /iotadieresistonos 422 def /Alpha 423 def /Beta 424 def -/Delta 425 def /Epsilon 426 def /Zeta 427 def /Eta 428 def -/Iota 429 def /Kappa 430 def /Lambda 431 def /Mu 432 def -/Nu 433 def /Xi 434 def /Omicron 435 def /Pi 436 def -/Rho 437 def /Sigma 438 def /Tau 439 def /Upsilon 440 def -/Chi 441 def /Psi 442 def /Omega 443 def /Iotadieresis 444 def -/Upsilondieresis 445 def /alphatonos 446 def /epsilontonos 447 def /etatonos 448 def -/iotatonos 449 def /upsilondieresistonos 450 def /beta 451 def /gamma 452 def -/zeta 453 def /eta 454 def /theta 455 def /iota 456 def -/kappa 457 def /lambda 458 def /mu 459 def /nu 460 def -/xi 461 def /omicron 462 def /rho 463 def /sigma1 464 def -/upsilon 465 def /chi 466 def /psi 467 def /omega 468 def -/iotadieresis 469 def /upsilondieresis 470 def /omicrontonos 471 def /upsilontonos 472 def -/omegatonos 473 def /afii10023 474 def /afii10051 475 def /afii10052 476 def -/afii10053 477 def /afii10054 478 def /afii10055 479 def /afii10056 480 def -/afii10057 481 def /afii10058 482 def /afii10059 483 def /afii10060 484 def -/afii10061 485 def /afii10062 486 def /afii10145 487 def /afii10017 488 def -/afii10018 489 def /afii10019 490 def /afii10020 491 def /afii10021 492 def -/afii10022 493 def /afii10024 494 def /afii10025 495 def /afii10026 496 def -/afii10027 497 def /afii10028 498 def /afii10029 499 def /afii10030 500 def -/afii10031 501 def /afii10032 502 def /afii10033 503 def /afii10034 504 def -/afii10035 505 def /afii10036 506 def /afii10037 507 def /afii10038 508 def -/afii10039 509 def /afii10040 510 def /afii10041 511 def /afii10042 512 def -/afii10043 513 def /afii10044 514 def /afii10045 515 def /afii10046 516 def -/afii10047 517 def /afii10048 518 def /afii10049 519 def /afii10065 520 def -/afii10066 521 def /afii10067 522 def /afii10068 523 def /afii10069 524 def -/afii10070 525 def /afii10072 526 def /afii10073 527 def /afii10074 528 def -/afii10075 529 def /afii10076 530 def /afii10077 531 def /afii10078 532 def -/afii10079 533 def /afii10080 534 def /afii10081 535 def /afii10082 536 def -/afii10083 537 def /afii10084 538 def /afii10085 539 def /afii10086 540 def -/afii10087 541 def /afii10088 542 def /afii10089 543 def /afii10090 544 def -/afii10091 545 def /afii10092 546 def /afii10093 547 def /afii10094 548 def -/afii10095 549 def /afii10096 550 def /afii10097 551 def /afii10071 552 def -/afii10099 553 def /afii10100 554 def /afii10101 555 def /afii10102 556 def -/afii10103 557 def /afii10104 558 def /afii10105 559 def /afii10106 560 def -/afii10107 561 def /afii10108 562 def /afii10109 563 def /afii10110 564 def -/afii10193 565 def /afii10050 566 def /afii10098 567 def /afii00208 568 def -/afii61352 569 def /pi 570 def /onenumerator 571 def /twonumerator 572 def -/threenumerator 573 def /fournumerator 574 def /fivenumerator 575 def /sevennumerator 576 def -/eightnumerator 577 def /DontCompressHTMX 578 def /glyph579 579 def /glyph580 580 def -/glyph581 581 def /Ohorn 582 def /ohorn 583 def /Uhorn 584 def -/uhorn 585 def /hookabovecomb 586 def /dotbelowcomb 587 def /gravecomb 588 def -/acutecomb 589 def /glyph590 590 def /glyph591 591 def /glyph592 592 def -/glyph593 593 def /glyph594 594 def /glyph595 595 def /glyph596 596 def -/glyph597 597 def /glyph598 598 def /glyph599 599 def /glyph600 600 def -/glyph601 601 def /glyph602 602 def /glyph603 603 def /glyph604 604 def -/Adotbelow 605 def /adotbelow 606 def /Ahookabove 607 def /ahookabove 608 def -/Acircumflexacute 609 def /acircumflexacute 610 def /Acircumflexgrave 611 def /acircumflexgrave 612 def -/Acircumflexhookabove 613 def /acircumflexhookabove 614 def /Acircumflextilde 615 def /acircumflextilde 616 def -/Acircumflexdotbelow 617 def /acircumflexdotbelow 618 def /Abreveacute 619 def /abreveacute 620 def -/Abrevegrave 621 def /abrevegrave 622 def /Abrevehookabove 623 def /abrevehookabove 624 def -/Abrevetilde 625 def /abrevetilde 626 def /Abrevedotbelow 627 def /abrevedotbelow 628 def -/Edotbelow 629 def /edotbelow 630 def /Ehookabove 631 def /ehookabove 632 def -/Etilde 633 def /etilde 634 def /Ecircumflexacute 635 def /ecircumflexacute 636 def -/Ecircumflexgrave 637 def /ecircumflexgrave 638 def /Ecircumflexhookabove 639 def /ecircumflexhookabove 640 def -/Ecircumflextilde 641 def /ecircumflextilde 642 def /Ecircumflexdotbelow 643 def /ecircumflexdotbelow 644 def -/Ihookabove 645 def /ihookabove 646 def /Idotbelow 647 def /idotbelow 648 def -/glyph649 649 def /glyph650 650 def /glyph651 651 def /glyph652 652 def -/sheva 653 def /hatafsegol 654 def /hatafpatah 655 def /hatafqamats 656 def -/hiriq 657 def /tsere 658 def /segol 659 def /patah 660 def -/qamats 661 def /holam 662 def /qubuts 663 def /dagesh 664 def -/meteg 665 def /maqaf 666 def /rafe 667 def /paseq 668 def -/shindot 669 def /sindot 670 def /sofpasuq 671 def /alef 672 def -/bet 673 def /gimel 674 def /dalet 675 def /he 676 def -/vav 677 def /zayin 678 def /het 679 def /tet 680 def -/yod 681 def /finalkaf 682 def /kaf 683 def /lamed 684 def -/finalmem 685 def /mem 686 def /finalnun 687 def /nun 688 def -/samekh 689 def /ayin 690 def /finalpe 691 def /pe 692 def -/finaltsadi 693 def /tsadi 694 def /qof 695 def /resh 696 def -/shin 697 def /tav 698 def /doublevav 699 def /vavyod 700 def -/doubleyod 701 def /geresh 702 def /gershayim 703 def /newsheqelsign 704 def -/vavshindot 705 def /finalkafsheva 706 def /finalkafqamats 707 def /lamedholam 708 def -/lamedholamdagesh 709 def /altayin 710 def /shinshindot 711 def /shinsindot 712 def -/shindageshshindot 713 def /shindageshsindot 714 def /alefpatah 715 def /alefqamats 716 def -/alefmapiq 717 def /betdagesh 718 def /gimeldagesh 719 def /daletdagesh 720 def -/hedagesh 721 def /vavdagesh 722 def /zayindagesh 723 def /tetdagesh 724 def -/yoddagesh 725 def /finalkafdagesh 726 def /kafdagesh 727 def /lameddagesh 728 def -/memdagesh 729 def /nundagesh 730 def /samekhdagesh 731 def /finalpedagesh 732 def -/pedagesh 733 def /tsadidagesh 734 def /qofdagesh 735 def /reshdagesh 736 def -/shindagesh 737 def /tavdages 738 def /vavholam 739 def /betrafe 740 def -/kafrafe 741 def /perafe 742 def /aleflamed 743 def /zerowidthnonjoiner 744 def -/zerowidthjoiner 745 def /lefttorightmark 746 def /righttoleftmark 747 def /afii57388 748 def -/afii57403 749 def /afii57407 750 def /afii57409 751 def /afii57440 752 def -/afii57451 753 def /afii57452 754 def /afii57453 755 def /afii57454 756 def -/afii57455 757 def /afii57456 758 def /afii57457 759 def /afii57458 760 def -/afii57392 761 def /afii57393 762 def /afii57394 763 def /afii57395 764 def -/afii57396 765 def /afii57397 766 def /afii57398 767 def /afii57399 768 def -/afii57400 769 def /afii57401 770 def /afii57381 771 def /afii57461 772 def -/afii63167 773 def /afii57459 774 def /afii57543 775 def /afii57534 776 def -/afii57494 777 def /afii62843 778 def /afii62844 779 def /afii62845 780 def -/afii64240 781 def /afii64241 782 def /afii63954 783 def /afii57382 784 def -/afii64242 785 def /afii62881 786 def /afii57504 787 def /afii57369 788 def -/afii57370 789 def /afii57371 790 def /afii57372 791 def /afii57373 792 def -/afii57374 793 def /afii57375 794 def /afii57391 795 def /afii57471 796 def -/afii57460 797 def /afii52258 798 def /afii57506 799 def /afii62958 800 def -/afii62956 801 def /afii52957 802 def /afii57505 803 def /afii62889 804 def -/afii62887 805 def /afii62888 806 def /afii57507 807 def /afii62961 808 def -/afii62959 809 def /afii62960 810 def /afii57508 811 def /afii62962 812 def -/afii57567 813 def /afii62964 814 def /afii52305 815 def /afii52306 816 def -/afii57509 817 def /afii62967 818 def /afii62965 819 def /afii62966 820 def -/afii57555 821 def /afii52364 822 def /afii63753 823 def /afii63754 824 def -/afii63759 825 def /afii63763 826 def /afii63795 827 def /afii62891 828 def -/afii63808 829 def /afii62938 830 def /afii63810 831 def /afii62942 832 def -/afii62947 833 def /afii63813 834 def /afii63823 835 def /afii63824 836 def -/afii63833 837 def /afii63844 838 def /afii62882 839 def /afii62883 840 def -/afii62884 841 def /afii62885 842 def /afii62886 843 def /Odotbelow 844 def -/odotbelow 845 def /Ohookabove 846 def /ohookabove 847 def /Ocircumflexacute 848 def -/ocircumflexacute 849 def /Ocircumflexgrave 850 def /ocircumflexgrave 851 def /Ocircumflexhookabove 852 def -/ocircumflexhookabove 853 def /Ocircumflextilde 854 def /ocircumflextilde 855 def /Ocircumflexdotbelow 856 def -/ocircumflexdotbelow 857 def /Ohornacute 858 def /ohornacute 859 def /Ohorngrave 860 def -/ohorngrave 861 def /Ohornhookabove 862 def /ohornhookabove 863 def /Ohorntilde 864 def -/ohorntilde 865 def /Ohorndotbelow 866 def /ohorndotbelow 867 def /Udotbelow 868 def -/udotbelow 869 def /Uhookabove 870 def /uhookabove 871 def /Uhornacute 872 def -/uhornacute 873 def /Uhorngrave 874 def /uhorngrave 875 def /Uhornhookabove 876 def -/uhornhookabove 877 def /Uhorntilde 878 def /uhorntilde 879 def /Uhorndotbelow 880 def -/uhorndotbelow 881 def /glyph882 882 def /glyph883 883 def /Ydotbelow 884 def -/ydotbelow 885 def /Yhookabove 886 def /yhookabove 887 def /Ytilde 888 def -/ytilde 889 def /dong 890 def /tildecomb 891 def /currency 892 def - -end readonly def -FontName currentdict end definefont pop -%%EndFont -%%EndProlog -mpldict begin -13.5 175.5 translate -585 441 0 0 clipbox -% polygon -1.000 setgray -1.000 setlinewidth -0 setlinejoin -2 setlinecap -[] 0 setdash -0 0 m -0 441 l -585 441 l -585 0 l -closepath -gsave -fill -grestore -stroke -% polygon -0.000 setgray -73.125 44.1 m -73.125 396.9 l -526.5 396.9 l -526.5 44.1 l -closepath -gsave -1.000 setgray -fill -grestore -stroke -% draw_lines -0.000 0.000 1.000 setrgbcolor -gsave -453.375 352.800 73.125 44.100 clipbox -73.125 341.084 m -76.667 340.708 l -80.209 339.574 l -83.751 337.667 l -87.293 334.958 l -90.835 331.405 l -94.377 326.949 l -97.919 321.506 l -101.461 314.959 l -105.003 307.144 l -108.545 297.819 l -112.087 286.607 l -115.629 272.882 l -119.171 255.463 l -122.713 231.623 l -126.255 191.605 l -129.797 103.027 l -133.339 189.379 l -136.881 202.932 l -140.423 203.284 l -143.965 191.777 l -147.507 147.593 l -151.049 193.483 l -154.591 200.946 l -158.133 199.387 l -161.675 188.957 l -165.217 143.486 l -168.759 180.998 l -172.301 191.170 l -175.843 191.200 l -179.385 183.119 l -182.927 155.818 l -186.469 166.661 l -190.011 181.010 l -193.553 182.971 l -197.095 177.076 l -200.637 157.567 l -204.179 150.322 l -207.721 171.053 l -211.263 175.126 l -214.805 171.229 l -218.347 156.530 l -221.889 128.062 l -225.431 161.185 l -228.973 167.631 l -232.515 165.609 l -236.057 154.358 l -239.599 74.463 l -243.141 151.102 l -246.683 160.365 l -250.225 160.169 l -253.767 151.622 l -257.309 119.107 l -260.851 140.326 l -264.393 153.187 l -267.935 154.839 l -271.477 148.556 l -275.019 126.619 l -278.561 127.980 l -282.103 145.946 l -285.645 149.548 l -289.187 145.259 l -292.729 129.081 l -296.271 111.844 l -299.812 138.465 l -303.354 144.220 l -306.896 141.769 l -310.438 129.466 l -313.980 80.114 l -317.522 130.512 l -321.064 138.774 l -324.606 138.087 l -328.148 128.702 l -331.690 86.924 l -335.232 121.741 l -338.774 133.118 l -342.316 134.191 l -345.858 127.176 l -349.400 101.638 l -352.942 111.541 l -356.484 127.140 l -360.026 130.041 l -363.568 125.064 l -367.110 106.776 l -370.652 98.551 l -374.194 120.692 l -377.736 125.577 l -381.278 122.435 l -384.820 108.642 l -388.362 78.089 l -391.904 113.570 l -395.446 120.713 l -398.988 119.291 l -402.530 108.713 l -406.072 43.008 l -409.614 105.462 l -413.156 115.325 l -416.698 115.577 l -420.240 107.501 l -423.782 76.568 l -427.324 95.836 l -430.866 109.233 l -434.408 111.171 l -437.950 105.155 l -441.492 83.904 l -445.034 83.647 l -448.576 102.154 l -452.118 105.845 l -455.660 101.582 l -459.202 85.611 l -462.744 66.167 l -466.286 93.605 l -469.828 99.169 l -473.370 96.397 l -476.912 83.814 l -480.454 27.509 l -483.996 82.648 l -487.538 90.217 l -491.080 88.573 l -494.622 78.102 l -498.164 37.173 l -501.706 66.931 l -505.248 76.324 l -508.790 74.675 l -512.332 64.142 l -515.874 34.431 l -519.416 35.180 l -522.958 37.945 l -stroke -grestore -% draw_lines -1.000 0.000 0.000 setrgbcolor -gsave -453.375 352.800 73.125 44.100 clipbox -73.125 344.638 m -76.667 344.021 l -80.209 342.148 l -83.751 338.946 l -87.293 334.276 l -90.835 327.903 l -94.377 319.427 l -97.919 308.120 l -101.461 292.475 l -105.003 268.454 l -108.545 213.072 l -112.087 218.519 l -115.629 259.152 l -119.171 273.925 l -122.713 280.520 l -126.255 282.309 l -129.797 280.332 l -133.339 274.683 l -136.881 264.621 l -140.423 247.681 l -143.965 212.929 l -147.507 184.774 l -151.049 218.234 l -154.591 243.484 l -158.133 254.844 l -161.675 259.959 l -165.217 260.773 l -168.759 257.793 l -172.301 250.665 l -175.843 237.757 l -179.385 212.685 l -182.927 178.994 l -186.469 -424.877 l -190.011 217.746 l -193.553 235.408 l -197.095 243.801 l -200.637 247.028 l -204.179 246.206 l -207.721 241.360 l -211.263 231.429 l -214.805 212.332 l -218.347 138.495 l -221.889 185.787 l -225.431 183.612 l -228.973 217.038 l -232.515 229.873 l -236.057 235.734 l -239.599 237.005 l -243.141 234.198 l -246.683 226.722 l -250.225 211.859 l -253.767 169.476 l -257.309 186.593 l -260.851 173.823 l -264.393 194.732 l -267.935 216.079 l -271.477 225.369 l -275.019 228.930 l -278.561 228.116 l -282.103 222.822 l -285.645 211.246 l -289.187 183.443 l -292.729 181.050 l -296.271 187.513 l -299.812 178.164 l -303.354 199.915 l -306.896 214.825 l -310.438 221.217 l -313.980 222.524 l -317.522 219.301 l -321.064 210.468 l -324.606 190.157 l -328.148 169.944 l -331.690 189.675 l -335.232 181.582 l -338.774 172.547 l -342.316 202.663 l -345.858 213.205 l -349.400 216.995 l -352.942 215.878 l -356.484 209.487 l -360.026 194.151 l -363.568 141.332 l -367.110 188.290 l -370.652 190.018 l -374.194 168.185 l -377.736 185.194 l -381.278 203.994 l -384.820 211.108 l -388.362 212.316 l -391.904 208.247 l -395.446 196.681 l -398.988 154.875 l -402.530 184.658 l -406.072 192.833 l -409.614 186.663 l -413.156 -460.889 l -416.698 191.640 l -420.240 204.277 l -423.782 208.351 l -427.324 206.663 l -430.866 198.243 l -434.408 172.764 l -437.950 178.651 l -441.492 193.308 l -445.034 193.407 l -448.576 179.767 l -452.118 167.615 l -455.660 195.351 l -459.202 203.595 l -462.744 204.597 l -466.286 199.048 l -469.828 181.359 l -473.370 168.699 l -476.912 192.336 l -480.454 196.765 l -483.996 191.640 l -487.538 166.317 l -491.080 180.819 l -494.622 197.324 l -498.164 201.811 l -501.706 199.150 l -505.248 186.669 l -508.790 146.473 l -512.332 190.158 l -515.874 198.473 l -519.416 197.844 l -522.958 187.711 l -stroke -grestore -% draw_lines -0.000 0.500 0.000 setrgbcolor -gsave -453.375 352.800 73.125 44.100 clipbox -73.125 344.646 m -76.667 344.163 l -80.209 342.697 l -83.751 340.206 l -87.293 336.608 l -90.835 331.765 l -94.377 325.450 l -97.919 317.263 l -101.461 306.406 l -105.003 290.855 l -108.545 260.984 l -112.087 257.910 l -115.629 270.113 l -119.171 268.975 l -122.713 260.468 l -126.255 240.233 l -129.797 221.580 l -133.339 244.142 l -136.881 246.939 l -140.423 241.790 l -143.965 226.836 l -147.507 180.268 l -151.049 224.403 l -154.591 230.521 l -158.133 227.898 l -161.675 216.607 l -165.217 170.426 l -168.759 207.344 l -172.301 217.011 l -175.843 216.608 l -179.385 208.152 l -182.927 180.524 l -186.469 191.080 l -190.011 205.174 l -193.553 206.908 l -197.095 200.811 l -200.637 181.119 l -204.179 173.710 l -207.721 194.292 l -211.263 198.229 l -214.805 194.208 l -218.347 179.396 l -221.889 150.824 l -225.431 183.851 l -228.973 190.209 l -232.515 188.106 l -236.057 176.779 l -239.599 96.814 l -243.141 173.388 l -246.683 182.589 l -250.225 182.337 l -253.767 173.737 l -257.309 141.172 l -260.851 162.345 l -264.393 175.162 l -267.935 176.773 l -271.477 170.451 l -275.019 148.477 l -278.561 149.804 l -282.103 167.738 l -285.645 171.309 l -289.187 166.991 l -292.729 150.785 l -296.271 133.522 l -299.812 160.118 l -303.354 165.850 l -306.896 163.377 l -310.438 151.052 l -313.980 101.679 l -317.522 152.059 l -321.064 160.303 l -324.606 159.598 l -328.148 150.196 l -331.690 108.402 l -335.232 143.204 l -338.774 154.567 l -342.316 155.626 l -345.858 148.598 l -349.400 123.046 l -352.942 132.938 l -356.484 148.525 l -360.026 151.416 l -363.568 146.427 l -367.110 128.129 l -370.652 119.895 l -374.194 142.026 l -377.736 146.903 l -381.278 143.752 l -384.820 129.951 l -388.362 99.390 l -391.904 134.864 l -395.446 141.999 l -398.988 140.570 l -402.530 129.986 l -406.072 64.275 l -409.614 126.723 l -413.156 136.580 l -416.698 136.826 l -420.240 128.745 l -423.782 97.807 l -427.324 117.071 l -430.866 130.463 l -434.408 132.397 l -437.950 126.376 l -441.492 105.122 l -445.034 104.861 l -448.576 123.364 l -452.118 127.052 l -455.660 122.786 l -459.202 106.813 l -462.744 87.365 l -466.286 114.801 l -469.828 120.363 l -473.370 117.588 l -476.912 105.003 l -480.454 48.696 l -483.996 103.833 l -487.538 111.400 l -491.080 109.755 l -494.622 99.282 l -498.164 58.352 l -501.706 88.110 l -505.248 97.502 l -508.790 95.852 l -512.332 85.318 l -515.874 55.606 l -519.416 56.356 l -522.958 59.120 l -stroke -grestore -% draw_lines -0.750 0.000 0.750 setrgbcolor -gsave -453.375 352.800 73.125 44.100 clipbox -73.125 346.280 m -76.667 345.676 l -80.209 343.845 l -83.751 340.736 l -87.293 336.248 l -90.835 330.224 l -94.377 322.407 l -97.919 312.371 l -101.461 299.341 l -105.003 281.601 l -108.545 253.253 l -112.087 220.282 l -115.629 233.441 l -119.171 220.121 l -122.713 198.594 l -126.255 213.622 l -129.797 232.741 l -133.339 242.085 l -136.881 243.804 l -140.423 237.025 l -143.965 203.960 l -147.507 230.388 l -151.049 244.073 l -154.591 246.690 l -158.133 241.191 l -161.675 219.125 l -165.217 223.903 l -168.759 241.739 l -172.301 245.662 l -175.843 241.477 l -179.385 224.009 l -182.927 215.555 l -186.469 238.476 l -190.011 243.766 l -193.553 240.795 l -197.095 226.371 l -200.637 204.635 l -204.179 234.918 l -207.721 241.638 l -211.263 239.805 l -214.805 227.701 l -218.347 187.148 l -221.889 231.207 l -225.431 239.460 l -228.973 238.716 l -232.515 228.509 l -236.057 142.756 l -239.599 227.342 l -243.141 237.284 l -246.683 237.602 l -250.225 229.015 l -253.767 188.027 l -257.309 223.261 l -260.851 235.117 l -264.393 236.489 l -267.935 229.330 l -271.477 199.520 l -275.019 218.852 l -278.561 232.949 l -282.103 235.386 l -285.645 229.515 l -289.187 205.946 l -292.729 213.941 l -296.271 230.761 l -299.812 234.290 l -303.354 229.607 l -306.896 210.254 l -310.438 208.235 l -313.980 228.529 l -317.522 233.195 l -321.064 229.626 l -324.606 213.410 l -328.148 201.185 l -331.690 226.226 l -335.232 232.097 l -338.774 229.588 l -342.316 215.852 l -345.858 191.524 l -349.400 223.818 l -352.942 230.985 l -356.484 229.500 l -360.026 217.812 l -363.568 174.865 l -367.110 221.263 l -370.652 229.851 l -374.194 229.371 l -377.736 219.429 l -381.278 138.835 l -384.820 218.509 l -388.362 228.686 l -391.904 229.202 l -395.446 220.789 l -398.988 179.721 l -402.530 215.482 l -406.072 227.478 l -409.614 228.996 l -413.156 221.953 l -416.698 191.902 l -420.240 212.081 l -423.782 226.215 l -427.324 228.754 l -430.866 222.960 l -434.408 199.153 l -437.950 208.147 l -441.492 224.884 l -445.034 228.476 l -448.576 223.841 l -452.118 204.278 l -455.660 203.420 l -459.202 223.466 l -462.744 228.160 l -466.286 224.618 l -469.828 208.221 l -473.370 197.415 l -476.912 221.941 l -480.454 227.805 l -483.996 225.308 l -487.538 211.417 l -491.080 189.040 l -494.622 220.282 l -498.164 227.408 l -501.706 225.922 l -505.248 214.102 l -508.790 174.825 l -512.332 218.457 l -515.874 226.966 l -519.416 226.472 l -522.958 216.418 l -stroke -grestore -% text -0.000 setgray -/Verdana findfont -18.000 scalefont -setfont -119.312 403.956 m -0 4 rmoveto -(Smoothing window in frequency-domain) show -% text -/Verdana findfont -14.000 scalefont -setfont -62.469 30.1 m -(0.0) show -% line -0.500 setlinewidth -0 setlinecap -163.800 44.100 m 163.800 48.100 l -stroke -% line -163.800 392.900 m 163.800 396.900 l -stroke -% text -153.175 30.1 m -(0.1) show -% line -254.475 44.100 m 254.475 48.100 l -stroke -% line -254.475 392.900 m 254.475 396.900 l -stroke -% text -243.85 30.1 m -(0.2) show -% line -345.150 44.100 m 345.150 48.100 l -stroke -% line -345.150 392.900 m 345.150 396.900 l -stroke -% text -334.994 30.1 m -(0.3) show -% line -435.825 44.100 m 435.825 48.100 l -stroke -% line -435.825 392.900 m 435.825 396.900 l -stroke -% text -424.825 30.1 m -(0.4) show -% text -515.844 30.1 m -(0.5) show -% text -221.875 11.1 m -0 3 rmoveto -(Normalized Frequency) show -% text -37.062 39.1 m -(-100) show -% line -73.125 91.140 m 77.125 91.140 l -stroke -% line -522.500 91.140 m 526.500 91.140 l -stroke -% text -47.062 86.14 m -(-80) show -% line -73.125 138.180 m 77.125 138.180 l -stroke -% line -522.500 138.180 m 526.500 138.180 l -stroke -% text -47.062 133.18 m -(-60) show -% line -73.125 185.220 m 77.125 185.220 l -stroke -% line -522.500 185.220 m 526.500 185.220 l -stroke -% text -47.062 180.22 m -(-40) show -% line -73.125 232.260 m 77.125 232.260 l -stroke -% line -522.500 232.260 m 526.500 232.260 l -stroke -% text -47.062 227.26 m -(-20) show -% line -73.125 279.300 m 77.125 279.300 l -stroke -% line -522.500 279.300 m 526.500 279.300 l -stroke -% text -61.812 274.3 m -(0) show -% line -73.125 326.340 m 77.125 326.340 l -stroke -% line -522.500 326.340 m 526.500 326.340 l -stroke -% text -53.062 321.34 m -(20) show -% line -73.125 373.380 m 77.125 373.380 l -stroke -% line -522.500 373.380 m 526.500 373.380 l -stroke -% text -52.938 368.38 m -(40) show -% text -32.062 168.461 m -gsave -90 rotate -0 3 rmoveto -(Magnitude \(dB\)) show -grestore -% polygon -1.000 setlinewidth -2 setlinecap -346.389 279.264 m -346.389 389.844 l -517.433 389.844 l -517.433 279.264 l -closepath -gsave -1.000 setgray -fill -grestore -stroke -% draw_lines -0.000 0.000 1.000 setrgbcolor -362.443 371.629 m -369.999 371.629 l -377.555 371.629 l -385.111 371.629 l -stroke -% draw_lines -1.000 0.000 0.000 setrgbcolor -362.443 349.712 m -369.999 349.712 l -377.555 349.712 l -385.111 349.712 l -stroke -% draw_lines -0.000 0.500 0.000 setrgbcolor -362.443 325.795 m -369.999 325.795 l -377.555 325.795 l -385.111 325.795 l -stroke -% draw_lines -0.750 0.000 0.750 setrgbcolor -362.443 299.479 m -369.999 299.479 l -377.555 299.479 l -385.111 299.479 l -stroke -% text -0.000 setgray -/Verdana findfont -24.000 scalefont -setfont -394.179 362.629 m -(Blackman) show -% text -394.179 340.712 m -(Bartlett) show -% text -394.179 314.795 m -0 5 rmoveto -(Hanning) show -% text -394.179 288.479 m -0 5 rmoveto -(Hamming) show - -end -showpage diff --git a/numpy/doc/numpybook/Figures/fig2bw.eps b/numpy/doc/numpybook/Figures/fig2bw.eps deleted file mode 100644 index f6ab19621..000000000 --- a/numpy/doc/numpybook/Figures/fig2bw.eps +++ /dev/null @@ -1,4919 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Title: fig2bw.eps -%%Creator: matplotlib version 0.85.1.cvs, http://matplotlib.sourceforge.net/ -%%CreationDate: Fri Jan 6 00:30:17 2006 -%%BoundingBox: 13 175 598 616 -%%EndComments -%%BeginProlog -/mpldict 7 dict def -mpldict begin -/m { moveto } bind def -/l { lineto } bind def -/r { rlineto } bind def -/box { -m -1 index 0 r -0 exch r -neg 0 r -closepath -} bind def -/clipbox { -box -clip -newpath -} bind def -/ellipse { -newpath -matrix currentmatrix 7 1 roll -translate -scale -0 0 1 5 3 roll arc -setmatrix -closepath -} bind def -%%BeginFont: Verdana -%!PS-TrueType-1.0-1.0 -8 dict begin -/FontName /Verdana def -/FontMatrix [1 0 0 1 0 0] def -/FontType 42 def -/Encoding StandardEncoding def -/FontBBox [-102 -423 2963 2049] def -/PaintType 0 def -/FontInfo 7 dict dup begin -/Notice (Typeface and data © 1996 Microsoft Corporation. All Rights Reserved) def -/FamilyName (Verdana) def -/FullName (Verdana) def -/version (Version 2.35) def -/isFixedPitch false def -/UnderlinePosition -180 def -/UnderlineThickness 120 def -end readonly def -/sfnts [ -<00010000001301000004003044534947CD5006A400020D64000014144C5453485694D82F -00001530000003814F532F32477590C3000001B80000005656444D5874F17C6D000018B4 -000005E0636D6170E84D8B8B000007A80000068C637674204CA740E3000022AC00000198 -6670676DEE371553000021740000013867617370001700090000021000000010676C7966 -01F195F700009EC000013BB668646D7809490ECD0000323800006C8868656164C748722C -0000013C0000003668686561133B09D00000017400000024686D7478C905723E00002444 -00000DF46B65726E75BF7E53000200CC00000C966C6F63616784B57700000E34000006FC -6D617870086A023E00000198000000206E616D65A93B95720000022000000587706F7374 -C58F55450001DA7800002651707265701240C02F00001E94000002E00001000000010000 -16FBFC3A5F0F3CF5001B080000000000AA7E442900000000B26DE2ABFF9AFE590B930801 -00000009000200000000000000010000080BFE5200000C2CFF9AFBD40B93000100000000 -00000000000000000000037D00010000037D00620007006B000500020010002F00380000 -0495013F0003000100010411019000050000059A053300000125059A0533000003A00078 -02A70800020B0604030504040204000002870000000000000000000000004D5320200040 -0020FB02061EFE5900CA080B01AE2000019F000000000000000000030008000200100001 -FFFF00030000002801E60001000000000000004300000001000000000001000700430001 -0000000000020007004A0001000000000003002F00510001000000000004000700800001 -000000000005000C00870001000000000006000700930001000000000007002F009A0003 -000104030002000C00C90003000104050002001000D50003000104060002000C00E50003 -000104070002001000F10003000104080002001001010003000104090000008601110003 -000104090001000E01970003000104090002000E01A50003000104090003005E01B30003 -000104090004000E021100030001040900050018021F0003000104090006000E02370003 -000104090007005E024500030001040A0002000C02A300030001040B0002001002AF0003 -0001040C0002000C02BF00030001040E0002000C02CB0003000104100002000E02D70003 -000104130002001202E50003000104140002000C02F70003000104150002001003030003 -000104160002000C03130003000104190002000E031F00030001041B00020010032D0003 -0001041D0002000C033D00030001041F0002000C03490003000104240002000E03550003 -0001042D0002000E036300030001080A0002000C03710003000108160002000C037D0003 -00010C0A0002000C0389000300010C0C0002000C0395547970656661636520616E642064 -61746120A92031393936204D6963726F736F667420436F72706F726174696F6E2E20416C -6C2052696768747320526573657276656456657264616E61526567756C61724D6963726F -736F66743A56657264616E6120526567756C61723A56657273696F6E203120284D696372 -6F736F66742956657264616E6156657273696F6E20322E333556657264616E6156657264 -616E6120697320612074726164656D61726B206F66204D6963726F736F667420436F7270 -6F726174696F6E004E006F0072006D0061006C006F00620079010D0065006A006E00E900 -6E006F0072006D0061006C005300740061006E0064006100720064039A03B103BD03BF03 -BD03B903BA03AC0054007900700065006600610063006500200061006E00640020006400 -6100740061002000A9002000310039003900360020004D006900630072006F0073006F00 -66007400200043006F00720070006F0072006100740069006F006E002E00200041006C00 -6C0020005200690067006800740073002000520065007300650072007600650064005600 -65007200640061006E00610052006500670075006C00610072004D006900630072006F00 -73006F00660074003A00560065007200640061006E006100200052006500670075006C00 -610072003A00560065007200730069006F006E0020003100200028004D00690063007200 -6F0073006F00660074002900560065007200640061006E00610056006500720073006900 -6F006E00200032002E0033003500560065007200640061006E0061005600650072006400 -61006E006100200069007300200061002000740072006100640065006D00610072006B00 -20006F00660020004D006900630072006F0073006F0066007400200043006F0072007000 -6F0072006100740069006F006E004E006F0072006D0061006C004E006F0072006D006100 -61006C0069004E006F0072006D0061006C004E006F0072006D00E1006C004E006F007200 -6D0061006C0065005300740061006E00640061006100720064004E006F0072006D006100 -6C004E006F0072006D0061006C006E0079004E006F0072006D0061006C041E0431044B04 -47043D044B0439004E006F0072006D00E1006C006E0065004E006F0072006D0061006C00 -4E006F0072006D0061006C004E0061007600610064006E006F0041007200720075006E00 -740061004E006F0072006D0061006C004E006F0072006D0061006C004E006F0072006D00 -61006C004E006F0072006D0061006C00000000020001000000000014000300010000011A -000001060000010000000000000001020000000200000000000000000000000000000001 -0000030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F2021222324 -25262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748 -494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F60610062636465666768696A6B -6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F -909192939495969798999A9B9C9D9E9FA0A1A2A3A4A5A6A7A8A9AAAB03ACADAEAFB0B1B2 -B3B4B5B6B7B8B9BABBBCBDBEBFC0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD000D1D2D3D4D5 -D6D7D8D9DADBDCDDDEDF0004057200000084008000060004007E017F019201A101B001FF -02C702C902DD0301030303090323037E038A038C03A103CE040C044F045C045F04911E85 -1EF92015201E2022202620302033203A203C203E2044207F20A420A720AC210521132116 -21222126212E215E22022206220F22122215221A221E222B22482260226525A125AB25CA -25CF25E6F002F00DFB02FFFF0000002000A0019201A001AF01FA02C602C902D803000303 -03090323037E0384038C038E03A30401040E0451045E04901E801EA02013201720202026 -203020322039203C203E2044207F20A320A720AB21052113211621222126212E215B2202 -2206220F221122152219221E222B22482260226425A125AA25CA25CF25E6F001F004FB01 -FFFFFFE30000FF1400A60099FF8A0000FE0F0000FF4C0078FF41FF28FCA00000FE170000 -0000FDD9FDD8FDD7FDD6FDA6E30B0000000000000000E085E095E109E084E0F9E156E077 -E0B70000E0900000E038E02BE123DF6ADF79E068E03CDE96DEA2DE8B0000DEA60000DE74 -DE71DE5FDE2FDE30DB9EDB96DAEEDB73DB5D10BE000005BE000100000082000000000000 -000002380000023800000000000000000000023800000242026800000000000000000000 -000002B203640368037600000000000000000000000000000000036A0000036A00000000 -000000000000000000000000000000000358000003580000000000000000000000000000 -0000000000000000034400000000000300A300840085037C009600E60086008E008B009D -00A900A40010008A01000083009300F000F1008D00970088010100DC00EF009E00AA00F3 -00F200F400A200AC00C800C600AD006200630090006400CA006500C700C900CE00CB00CC -00CD00E7006600D100CF00D000AE006700EE009100D400D200D3006800E900EB0089006A -0069006B006D006C006E00A0006F0071007000720073007500740076007700E80078007A -0079007B007D007C00B700A1007F007E0080008100EA00EC00B901440145010201030104 -010500FB00FC014601470148014900FD00FE01060107010800FF014A014B014C014D014E -014F0109010A010B010C0150015100F600F701520153015401550156015701580159015A -015B015C015D015E015F0160016100F800D50138013901620163016401650166010D010E -01670168010F01100111011200E000E1011301140169016A01150116013A016B016C016D -016E016F01700117011800AF00B00119011A01710172011B011C011D011E0173017400F9 -00FA00E200E3011F01200121012201750176017701780179017A017B017C012301240125 -0126017D017E017F01800181018200BA012701280129012A00E400E5018300D600DF00D9 -00DA00DB00DE00D700DD019D019E019F018A01A001A101A201A401A501A601A701A8012B -01A901AA01AB01AC012C01AD01AE01AF01B001B101B201B301B401B501B601B701B8012D -01B901BA01BB01BC01BD01BE01BF01C001C101C2012E01C301C4012F013001C501C601C7 -01C801C901CA01CB01CC01CD01CE023A01CF01D00131013201D1013301D201D301D401D5 -01D601D701D801D9025D025E025F0260026102620263026402650266026702680269026A -026B026C026D026E026F0270027102720273027402750276027702780279027A027B027C -027D027E027F028002810282028302840285028602870288034C034D034E034F03500351 -03520353035403550356035703580359035A035B035C035D035E035F0360036103620363 -036403650366036703680369036A036B036C036D036E036F037003710191019203740375 -037603770378037900B100B20238013400B500B600C3019300B300B400C4008200C10087 -00F50195037A00BC009900ED00C200A5019B019C023B023C023D023E023F024002410242 -0000001F001F001F001F00470070010401C0025F033C035503A203F10461049604C004DE -04F50520057F05B9063806DB072D07A70830086B090B099309B509F10A350A640AAA0B13 -0BF80C600CDC0D4F0DA00DD60E060E7A0EAE0EDB0F180F860FA61000104C10B8111711AE -122012B812DF132C13881407148814DF15221544156F159015C815DE15FE168916E71747 -17A01803184F18D11912193D198C19E51A001A761AB61B011B5D1BB81BF51C8B1CDB1D1B -1D741DD91E641EC21F041F631F7E1FDC203B205520FE21AA21BD21D021E9220222142226 -2238225322652278230A231C232E234023562369237C23B423EE2400241224242436244C -245E24702482249424AB24E62520259A260826EB270B274327C928832929297B299C29C2 -2A2D2A912B412BCD2C0D2C5A2CA82D0C2D4C2DCB2E3D2E722E9F2EE92F5E2F9F301130E7 -316D31D831FF3223326032DF336433A233F33443346D3480349334A6350E35AD35C735DD -361C365B368036A736E33728373F37593777382D3858388438E139313986399E39C43A03 -3AD73AEA3AFD3B103B243B373B4A3B5D3B773B8A3B9D3BB03BC33BD63BE93BFC3C173C47 -3C8E3CA63CEC3D003D493D7D3DB53DEA3E1B3E5B3E923EA53EB73ECA3EDC3F043F6B3FFF -40124024408840E441014135416941BB4239425A427E42AA42F643024314432743F044AF -44C244D444E744F9456F4586459E45B145C3465F47144727479D47A54806489348A648B8 -48CB48F0492B4961499249BC49CF49E149F44A064A1A4A2D4A404A534A664A794A8C4A9E -4AEE4B6C4B7F4BEC4C354C484C5C4C6F4C824C954CA84CBA4CDA4D584DDD4E3C4EC24F58 -4FB24FE1505D5081509D50E951DF51EF52085268528B52CA538353FD5425543F54665491 -54EA54FC550D551F55345546555B556D557E559055A455B655C755D955EE5600561556B8 -575B576D578757DE583458A458FC593F596C59C05A035A595AB15AC85B225B335B495BA2 -5BEB5C305C465C5C5CD25D2E5D405D515D635D745D855DEA5DFC5E105E4E5EBA5ECC5EDD -5EEF5F005F125F235FA2600E6020603260446055608561656246625C626E6285629A62B1 -62C362D562E762F963166332634963606388639E6422648E64AA64D76504653065556589 -65A265DD65F36611662F664F666E668E66B16700670867106752675A6762676A6772677A -67C367CB67D36812681A6840684868DA68E268EA68F2695D69DC69F66A106A216A376A48 -6A5B6A6F6AFD6B4A6BBD6BFF6C866C8E6D226D7A6DC16DC96E726E7A6ECF6F3B6F7A6FEA -705A70F370FB7112712371347146715A71C571DD7255725D7265727F7287731C738773DE -73F3749074C174C97521752975497594759C765676F2773A77AE783B7892789A78A278AA -78D078D878E078E8795979DE79E67A167A5D7A907ACD7B297B907BE47C5F7CCD7D367D3E -7DCA7E4C7E6C7EBC7EC47F7D8015804D80B18126817B81D38203820B82308238829A82C9 -82D1836C837483AC83EF8425846784C3852B858085F4865386BD86D38757876887D587DD -87E587ED87F5888B88F9894F896489EE8A258A4E8A7B8A918B238B488B6C8BBD8C398C73 -8CD88D0C8D8E8D8E8D8E8D8E8D8E8E208E8D8EF48F598F9F8FB58FBD8FC59006904590BD -9126916491A19209927292C09334938093D1944E94D395479558956C9586959B95B195C7 -95DD95F3960B96219633964996659683969596AA96BC96D196E396F8970A971F973E9759 -976A977B979697AE97C497D597ED97FF98179829983F985598679879989898B198C998DB -98ED98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF -98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF98FF9911 -9922994099549970998999A199B399CB99E499FC9A159A359A4E9A659A769A909AA59ABB -9ACC9AE29AF99B0B9B1C9B2D9B3E9B549B659B7C9B949BAF9BC79BDD9BEE9C009C119C22 -9C339C4E9C649C759C8B9CA49CB89CCE9CDF9D639D6B9DDB0000037D01011C1C300E0E0B -0E010A01010E0E010F01010B0B0B0B0B0B0B0B0B0B01010E0E0E0B0C320E101923150E0F -740A0E2D240E0D0D0D0E322C1D322E1C111C0101010101010D0D0E0D0D1C0D0BB4010EB4 -110B100D0D2A11110B0A100F0A11010E0101323210230E0D1D0D0D0D0D0D0D0E0D0D0D0D -B4B4B4B40B10101010100B0B0B0B0B010B0B01010B0101010101010E330D010E0E0E0B10 -010101010B0101010E100B300E010B010127270132320D011C0B01010101010E010A1101 -01010101010B010101013223322323747474740D0D0D1D1D1DB401010101010101010101 -0AD732111C110E1001110A0D0D0E01010101010101010E0D743211100E100E0D0101320D -320D190D10230D230D2DB42D322D010E0B0E0B0D100E2A0E2A32112C112C111D0B1D0B1C -111C11100D130D2612181110010D010A0A110E01240A121901011901320D100E100E230D -230D230D0E0D0E0D0E0D0F0B0F0B74B474B474B474B40A010E0E0E2DB40E0B0E0B0D100D -100E2A32112C111D0B1D0B1D491D182E10110A01320D330E0D10012E102E102E10110A01 -010B01010101012E010101320E1C10160C27B4320E01231C0F740E0A240E300D0F0D1E2C -111C111474110D120BB40B0B0F0D0B0DB40D0A130A011010010B0C1010B40B100B10230A -100D3274740A0C0E010E1111320E0E10012311010E0E0E12240F0D0F0D102C11131C2D22 -11111F2D0E0D01100D240A010D0D301210100B011D1010100D0F110A170F270D11320C11 -0C0E0D0A0D0B010E11B4B4010A0E0B0B0A10100A01011001010101010101010101012D10 -282001010101010101010101010101010101010101320D320D320D320D320D320D320D32 -0D320D320D320D320D230D230D230D230D230D230D230D230D74B474B401010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -010101010101010101010101010101010101010101010101010101010101010101010101 -01010101010101010D100D100D100D100D100D100D102D102D102D102D102D101D0B1D0B -28202820282028202820110A110A110A110A0D010B00000000000001000101010101000C -00F808FF00080008FFFE0009000AFFFE000A000AFFFE000B000BFFFE000C000CFFFE000D -000DFFFD000E000EFFFD000F000FFFFD0010000FFFFD00110011FFFD00120012FFFC0013 -0013FFFC00140015FFFC00150015FFFC00160016FFFC00170017FFFB00180018FFFB0019 -001AFFFB001A001BFFFB001B001BFFFB001C001CFFFA001D001DFFFA001E001EFFFA001F -0020FFFA00200020FFFA00210021FFF900220022FFF900230023FFF900240025FFF90025 -0026FFF900260026FFF800270027FFF800280028FFF800290029FFF8002A002BFFF8002B -002BFFF7002C002CFFF7002D002DFFF7002E002EFFF7002F0030FFF700300031FFF60031 -0031FFF600320032FFF600330033FFF600340034FFF600350036FFF500360036FFF50037 -0037FFF500380038FFF500390039FFF5003A003BFFF4003B003CFFF4003C003DFFF4003D -003DFFF4003E003EFFF4003F003FFFF300400041FFF300410041FFF300420042FFF30043 -0043FFF300440044FFF200450046FFF200460047FFF200470047FFF200480048FFF20049 -0049FFF1004A004AFFF1004B004CFFF1004C004DFFF1004D004DFFF1004E004EFFF0004F -004FFFF000500051FFF000510052FFF000520052FFEF00530053FFEF00540054FFEF0055 -0055FFEF00560057FFEF00570058FFEE00580058FFEE00590059FFEE005A005AFFEE005B -005CFFEE005C005DFFEC005D005DFFEC005E005EFFEC005F005FFFEC00600060FFEC0061 -0062FFEB00620062FFEB00630063FFEB00640064FFEB00650065FFEB00660067FFEA0067 -0068FFEA00680068FFEA00690069FFEA006A006AFFEA006B006BFFE9006C006DFFE9006D -006DFFE9006E006EFFE9006F006FFFE900700070FFE800710072FFE800720072FFE80073 -0073FFE800740074FFE800750075FFE700760076FFE700770078FFE700780078FFE70079 -0079FFE7007A007AFFE6007B007BFFE6007C007DFFE6007D007DFFE6007E007EFFE6007F -007FFFE500800080FFE500810082FFE500820083FFE500830083FFE500840084FFE40085 -0085FFE400860086FFE400870088FFE400880088FFE400890089FFE3008A008AFFE3008B -008BFFE3008C008DFFE3008D008EFFE3008E008EFFE2008F008FFFE200900090FFE20091 -0091FFE200920093FFE200930093FFE100940094FFE100950095FFE100960096FFE10097 -0098FFE100980099FFE000990099FFE0009A009BFFE0009B009BFFE0009C009CFFE0009D -009EFFDF009E009EFFDF009F00A0FFDF00A000A0FFDF00A100A1FFDF00A200A3FFDE00A3 -00A4FFDE00A400A4FFDE00A500A6FFDE00A600A6FFDE00A700A7FFDD00A800A9FFDD00A9 -00A9FFDD00AA00ABFFDD00AB00ABFFDD00AC00ACFFDC00AD00AEFFDC00AE00AFFFDC00AF -00B0FFDC00B000B0FFDC00B100B1FFDB00B200B2FFDB00B300B4FFDB00B400B5FFDB00B5 -00B6FFDB00B600B6FFDA00B700B7FFDA00B800B9FFDA00B900BAFFDA00BA00BBFFDA00BB -00BBFFD900BC00BCFFD900BD00BDFFD900BE00BFFFD900BF00C0FFD900C000C1FFD800C1 -00C1FFD800C200C2FFD800C300C4FFD800C400C5FFD800C500C5FFD700C600C6FFD700C7 -00C7FFD700C800C8FFD700C900CAFFD700CA00CBFFD600CB00CCFFD600CC00CCFFD600CD -00CDFFD600CE00CFFFD600CF00D0FFD500D000D0FFD500D100D1FFD500D200D2FFD500D3 -00D3FFD500D400D5FFD400D500D5FFD400D600D7FFD400D700D7FFD400D800D8FFD400D9 -00DAFFD300DA00DBFFD300DB00DCFFD300DC00DCFFD300DD00DDFFD300DE00DEFFD200DF -00E0FFD200E000E0FFD200E100E2FFD200E200E2FFD200E300E3FFD100E400E5FFD100E5 -00E6FFD100E600E7FFD100E700E7FFD100E800E8FFD000E900E9FFD000EA00EBFFD000EB -00EBFFD000EC00ECFFD000ED00EDFFCF00EE00EEFFCF00EF00F0FFCF00F000F1FFCF00F1 -00F2FFCF00F200F2FFCE00F300F3FFCE00F400F4FFCE00F500F6FFCE00F600F7FFCE00F7 -00F7FFCD00F800F8FFCD00F900F9FFCD00FA00FBFFCD00FB00FCFFCC00FC00FDFFCC00FD -00FEFFCC00FE00FEFFCC00FF00FFFFCCB8FFC0401EB229323610B220B240B250B270B280 -B2A0B2B0B2D0B2E0B20AC0B2F0B202B8FFC04070B51718361F44010F561F56024F555F55 -026F54019F54AF54025153170452531604535215044A4952044649370447493204484932 -04493539043C3F32043D3F3D043E3F2104433F1D04423F5204413F5204403F52043F3532 -0432336404333534043534540434351E04D034E034F03403B8FFEEB3B4254836B8FFE0B3 -B4102336B8FFEE400DB4090F36B41A480476B386B302B8FFF0B3B3254836B8FFFA40FFB3 -092436B314480489881304706C7078020F9CDF9E02409D161936409C161B364097171936 -4096171B368685131F0F840F850F8E0F8F0F901F841F8E1F8F2F8E808580888F91908590 -8790880F40820910360F721F72024071090C360F6D0120C80120C7013FC6EFC60220C540 -C50200620100621062024061A061020F5B012D1411042C1425042B1439042A1413042914 -15041F141E042120430420143C04C91A45041A1B47041B1A3C041A143204151439041314 -480412141A0411141A0470140140144143360F0E2A1F0006010DC34B1F0CC24B1F0AC04B -1F09C04B1F05BC4B1F04BD4B1F03B94B1F02BA4B1F01B64B1F00B74B1FC3C22A1FC0BF2A -1FBD4056BC211FBAB9211FB7B6211FC2C3C40DBFC0C10DBCBDBE0CB9BABB0CB6B7B80C10 -BC80BC0240B980B9020FB63FB64FB67FB6040FB62FB63FB66FB67FB6BFB6CFB6FFB6080A -0937040C0D02050402030202010002500501B801FF858D8D1DB0964B5258B0801D59B808 -004B5458B001B0018E59B0084B5358B001B0018E59002B2B2B2B2B737473732B2B2B2B2B -2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB00345B006456861B006234473B00345B00E456861 -B00E2344B00E45B00F456861B00F23442B01B0144568B01423442B732B2B2B2B2B2B2B2B -2B2B2B2B2B2B2B2B7373737373737373732B732B732B2B2B2B2B73732B2B2B2B732B2B2B -2B00752B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73747373742B73742B400C3736 -26251F13120D0C0504022C20B003254523452361688A204568208A234460442D2C4B5258 -45441B2121592D2C202045684420B001602045B0467668188A4560442D2CB0122BB00225 -45B00225456AB0408B60B0022523442121212D2CB0132BB0022545B00225456AB8FFC08C -60B0022523442121212D2CB100032545685458B0032545B0032545606820B004252344B0 -042523441BB00325204568208A2344B00325456860B003252344592D2CB0032520456820 -8A2344B00325456860B0032523442D2C4B525845441B2121592D2C462346608A8A462320 -468A608A61B8FF8062232010238AB14B4B8A70456020B0005058B00161B8FFBA8B1BB046 -8C59B0106068013A2D2C2045B003254652583F1B2111592D2C4B53234B515A5820458A60 -441B2121592D2C4B53234B515A58381B2121592D061E061405F005D1047C045D03DD0010 -0000FFE7FFE1FE78FE64FE590394001FFFFF009600AA00B900C600CEFFFFFFFFFFFFFFFF -00BC00C2FFFFFFFF007600B200C000CBFFFFFFFFFFFFFFFFFFFFFFFF0081009400A600CC -00DA00EFFFFFFFFFFFFFFFFF0098009E00AB00B0FFFFFFFFFFFFFFFFFFFFFFFF00900098 -009E00A400A900AE00B300BA00C3FFFF00880091009800A500ACFFFFFFFFFFFFFFFFFFFF -006F0087008F009B00A000D3011DFFFFFFFFFFFF00C3021401C2FFFFFFFF00E9000C02D1 -0173018E001A002C0044005C0073007E008600B200C8014C001A003D00440050005C0072 -0078009200B200B900C8FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003D0056005D006A -006E00B100B900C1FFFFFFFF002A003D00540064006A00B100B9FFFFFFFFFFFF0071007A -008900A100A700BB006F007A00870091009AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -008102210221007400E500B900CA019502C600AC00A700850614000A000005D1001F0000 -045D001F00000000FFE10000FE64FFF50000036202F402A2029100AF026A004C08000100 -0000000002D0000002D000000326012303AC00A8068C00C30516009B089C009505D00073 -022600A403A200B503A20093051600A7068C00D202E9009303A2009902E900FD03A2FFE2 -0516008905160116051600A1051600A70516004D051600BB051600890516009A0516007A -0516007103A2015A03A200E6068C00FE068C00F5068C010C045D00A0080000B00578001A -057C00C805960073062A00C8050F00C8049900C806340073060300C8035E008903A3002C -058B00CD047400C806BE00C805FC00C8064C007304D300C8064C0073059000C805780086 -04EE000005DB00B20578001A07E9005C057B004404EC0006057B007E03A200EF03A20046 -03A200AB068C00BA0516FFFC0516015404CE006804FC00B9042B006904FC006C04C4006A -02D0004404FC006C051000B9023200AF02C1FFC204BC00C1023200BB07C800B9051000B9 -04DB006A04FC00B904FC006C036A00B9042B006E0327003E051000B104BC003D068C0056 -04BC003C04BC003D0434005D051400AD03A2017A051400BB068C00BB0578001A0578001A -05960073050F00C805FC00C8064C007005DB00B204CE006804CE006804CE006804CE0068 -04CE006804CE0068042B006904C4006A04C4006A04C4006A04C4006A023200A00232FFEB -0232FFF502320005051000B904DB006A04DB006A04DB006A04DB006A04DB006A051000B1 -051000B1051000B1051000B1051600BB0456009A0516009F05160089051600AC045D00B9 -0516008904F600B90800009F0800009F07D000AA0516021D0516015A068C00F507E0000E -064C0073080000A1068C00D7068C00FE068C010C0516006C052200BE0516009505D100BB -068C009005A900710516008A045D0097045D0079068C006B07A4006804DB005D045D0071 -03260123068C00D2068C00860516FFDC068C00F305D10032052800A6052800AE068C00B2 -0578001A0578001A064C0073088F007807DA006A051600990800009903ACFFED03AC0096 -0226FFED022600A0068C00D2068C00AC04BC003D04EC000602E4FF9A0516000003A200BA -03A200C20500004405020044051600BB02E900FD0226FFF603ACFFF60C2C00950578001A -050F00C80578001A050F00C8050F00C8035E0089035E005D035E007E035E0089064C0073 -064C0073064C007305DB00B205DB00B205DB00B2023200BB05160136051600ED05160118 -05160113051602210516012D05160161051601560516019F05160132047E001802460018 -05780086042B006E057B007E0434005D03A2017A0634000E04E5006A04EC000604BC003D -04D800C804FC00B9068C00DC068C012304560123045600CF045600CF080000AB080000AB -0800008C0516003C0634007304FC006C035E008905780086042B006E05960073042B0069 -05960073042B006904FC006C0516FFFC02E900FD0578001A04CE00680578001A04CE0068 -062A00C8052E006C0634000E050F00C804C4006A050F00C804C4006A047400C8023200AB -047400C8025E00BB047400C803AB00BB05FC00C8051000B905FC00C8051000B9064C0073 -04DB006A059000C8036A00B9059000C8036A009205780086042B006E04EE00000327003E -04EE00000327003E05DB00B2051000B105DB00B2051000B1057B007E0434005D057B007E -0434005D048800C8064C0073068D006904FC006C04DD006A041A006D050B006A03F8000A -065200680516FFFC04FF0123045D009A094F00C806F7008904E900AF05D8000002E400D5 -047500D5089C00950296000F04D5009202D6008302D6008304D500B102D600700578001A -04CE006805960073042B006905960073042B0069050F00C804C4006A050F00C804C4006A -050F00C804C4006A0634007304FC006C0634007304FC006C0634007304FC006C060300C8 -051000B90603002005100013035E002C0232FFF2035E005F0232FFFC035E008002320001 -035E00890232008E03A3002C02C1FFC2058B00CD04BC00C104BC00C1047400C802320005 -05FC00C8051000B905FC00C8051000B9064C007304DB006A064C007304DB006A059000C8 -036A001B05780086042B006E04EE00000327003E05DB00B2051000B105DB00B2051000B1 -05DB00B2050B00B105DB00B2050B00B107E9005C068C005604EC000604BC003D026700B9 -0578001A04CE006807E0000E07A40068064C007304DB005D03A2015A07E9005C068C0056 -07E9005C068C005607E9005C068C005604EC000604BC003D0226FFED0516FFD005160089 -05BE00B1080000AB0800008C0800008A0800009901B00061051601610516021205160100 -057800070602000006F6000004510000070C000006070000074300000232FFCB0578001A -057C00C805A0001A050F00C8057B007E060300C8035E0089058B00CD057C001A06BE00C8 -05FC00C805310072064C0073060300C804D300C80561007604EE000004EC0006057B0044 -06F700B3068C006C035E007E04EC000604FC006C041A006D051000B9023200A0050D00B1 -04F600B904BC003D03A9006C051000B904FE0089023200BB04BC00C104BC003D051E00B9 -04BC003D0406006804DB006A050000B904100069050D00B104B80030069300B006820071 -02320005050D00B104DB006A050D00B106820071050F00C80657FFFF048800C8059B0073 -05780086035E0089035E007E03A3002C08F2001208D300C8068BFFFF058B00CD04EC0006 -060300C80578001A057C00C8057C00C8048800C805F7000A050F00C807C9002004ED0051 -060100C8060100C8058B00CD05E0001206BE00C8060300C8064C0073060300C804D300C8 -0596007304EE000004EC0006068D0069057B0044061700C805B2008E083E00C8085C00C8 -06440000075D00C8057200C8059C0061084600C805A6002C04CE006804EA007404C200B9 -03C500B904F9000904C4006A0662003404320041051F00B9051F00B904BC00C104F7001D -059200B9051900B904DB006A051900B904FC00B90446006A03F8000A04BC003D06BA006F -04BC003C052800B904D8008E070200B9071A00B90520000A065B00B9049100B904600053 -06B600B904CC004304C4006A0510001303C500B90460006A042B006E023200AF02320005 -02C1FFC20750001D075000B90510001304BC00C104BC003D051900B9048800C803C500B9 -080000CB096000C8051900B904560119045600EF045600E6045600B3045600E6045600F3 -045600C5000000000000000000000000000000000674007304DB006A060D00B2054700B1 -0000020900000221000001540000021D0516013605160003051601360516012505160142 -051601420516014205160125051602090516013605160142051601420516014205160142 -051601360578001A04CE00680578001A04CE00680578001A04CE00680578001A04CEFFE3 -0578001A04CE00680578001A04CE00680578001A04CE00680578001A04CE00680578001A -04CE00680578001A04CE00680578001A04CE00680578001A04CE0068050F00C804C4006A -050F00C804C4006A050F00C804C4006A050F00C804C4006A050F002904C4FFFC050F00C8 -04C4006A050F00C804C4006A050F00C804C4006A035E008902320096035E0089023200AF -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000064C007304DB006A064C0073 -04DB006A064C007304DB006A064C007304DBFFE5064C007304DB006A064C007304DB006A -064C007304DB006A0674007304DB006A0674007304DB006A0674007304DB006A06740073 -04DB006A0674007304DB006A05DB00B2051000B105DB00B2051000B1060D00B2054700B1 -060D00B2054700B1060D00B2054700B1060D00B2054700B1060D00B2054700B104EC0006 -04BC003D04EC000604BC003D04EC000604BC003D04EC000604BC003D04FC006C000000ED -0516008A0000001F00000380090E09000303050507070B07030404070703050304070707 -070707070707070404070707060A08070808070608080505070609080907090707070808 -090707070404040706060606060606030606030306030906060606040604060607060605 -060506070808080708090806060606060606060606060303030306060606060606060606 -07050707060507060909090606070A090907070707060607070607050507090606050707 -0707070606070808090A0907090404020207070607030604040606070302040E08070807 -070505050509090908080803060606060606060606060603070607050508060706070607 -070505050909090608060507060806080606060308060806080608070607060603060306 -040806080609060704070407060704070408060806070507050609070606050605090606 -050B09060703050B03050303050308060806080607060706070608060806080608060806 -050305030503050305030706060603080608060906090607040706070408060806080608 -06090707060308060A090906040907090709070706020607060909090902060606080809 -060908090308070607070805070809080709080706070707090905070605060306060505 -060603060606060506060506050907030606060707080608070505050A0A070707070807 -070607070906080807070908090807080707070708070909080907080907060606040606 -070506060606070606060606050609060705090907080606080606060406060303030909 -060606060505090B06050505050505050000000009060806000000000606060606060606 -060606060606060806080608060806080608060806080608060806080608060706070607 -060706070607060706070605030503000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000090609060906 -090609060906090609060906090609060906080608060806080608060806080607060706 -07060706060007000A0F0A000404040508070B0703050507080405040507070707070707 -0707070505080808060A070708080606080805050706090709070908070708070B070707 -0505050806060707050707040707030307030B0707070704060407060707060606050608 -070708060709080707070707070507070707030303030707070707070707070707050707 -060507060A0A0A0606080A090A080808070706070807070505080A070604080807080706 -06080707090B0A070A0505030308080607040605050606070403050F0706070606050505 -050909090808080306060606060606060606060307060706050806070607070808050505 -0A0A0A060807050706080508050706040707070708070806070607060306030605070707 -0709070804080407060704070408070807070607060609090707050705090606050C0906 -0704060B0306040406040707080508050607060706070807080708070807080705030503 -0503050305030707070603070707070907090708040706070408070807080708070B0707 -060307070A0A0907050B070B070B070706030607070A0A0A0A0206060607070906090909 -030707070607080507070907070908070707070709090507070507030707070507070307 -0607060507070507060909030707070906080608070505050B0B08070708070707060706 -0906080807070908090807080707090709070B0B080907080A0707070605060707050707 -0706070707070705050609070706090A0708060608060707050606030303090907070607 -06050A0C0705050505050505000000000907080700000000060606060606060606060606 -060606070707070707070707070707070707070707070707070707060706070607060706 -070607060706070503050300000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000009070907090709070907 -090709070907090709070907090708070807080708070807080708070706070607060706 -070007000B110B000404040509070C080305050709040504050707070707070707070705 -05090909060A080809090706090805050806090809070908080708080B08070805050509 -07070707060707040707030407030B070707070506040707090707060705070908080907 -080908070707070707060707070703030303070707070707070707070706070707060707 -0B0B0B0707090B090B090909070707080908070606090B07060409090709080707090808 -090C0B070B05050303090907070407050507070704030511080708070705050505090909 -08080803070707070707070707070603080608060509070707070709090606060B0B0B07 -090705080609060906070704080708070907090707070706030603060508070807090708 -05080508060704070408070807080608060609090707060705090707060D0A070804060C -040704040704080709060906070707070707090709070907080708070503050305030503 -05040807070603080708070907090708050806070408070807080708070B090707030807 -0B0B0907050B090B090B090707030707080B0B0B0B02070707080809060A090903080808 -070808050808090807090807070707080909050707060703070707050707030707070706 -07070607070909030707070907090609080505050D0C090808080808080608070B070808 -08080908090807090708090809080B0C090A07090B080707070508070906070707070707 -07070706050709070807090A080907070A0707070507060303040A0B0707070706050B0D -070606060606060600000000090708070000000007070707070707070707070707070708 -070807080708070807080708070807080708070807080707070707070707070707070707 -070707050305030000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000907090709070907090709070907 -090709070907090709070807080708070807080708070807070707070707070707000700 -0C120C00040405060A080D09030505080904050405080808080808080808080505090909 -070C0808090908070909050508070A090A080A08080709080D0807080505050A08080808 -060808040808030407030B0808080805070508070B0707070805080A08080908090A0908 -08080808080608080808030303030808080808080808080808070808080708070C0C0C08 -08090C0A0C090909080808090A080807070A0B080705090A080A0908080A08080A0D0D08 -0C06060303090A070704080505080808040306120808080808050505050A0A0A09090903 -0808080808080808080807030807080705090707070808090A0707070C0C0C0809080508 -07090609060808040808080809090908080808070307040706090809080A080805080508 -07070507050908090808070807070A0B0808060807090808070E0A070904070D04070404 -070408080906090608080808080809080908090809080908050305030503050305040807 -070703090809080A080A0808050807070509080908090809080D0B07070408080C0B0A08 -050D0B0D0B0D0B0707030808090C0C0C0C0308080808090A060B090B0308080808080905 -08080A09080A0908080707080B0A05070806080308070706080803080708070608080608 -070B0B030808080B080A0709080505050D0D0A0808090808080709080D07090908090A09 -0A09080907080B0809090D0E090B08090C080808070608080B0608080707080808080806 -07070B0709080B0C080907080B0708080608070303040B0B0807070807060C0E08070707 -07070707000000000A080908000000000808080808080808080808080808080808080808 -080808080808080808080808080808080808080808080808080808080808080808080805 -030503000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000A080A080A080A080A080A080A080A080A08 -0A080A080A0809080908090809080908090809080707070707070707080008000D140D00 -050505050A080D09030606090905070506080808080808080808080606090909070D0908 -090908080909050608070B090A080A08090909090D0909090606060B0808080808080805 -0808030407030B0808080805070608080B0708070807080B09090908090A090808080808 -080808080808030303030808080808080808080808070808080708080D0D0D0808090C0A -0D090909080808090B090807070B0B080705090B080B0908080B09090A0E0D080D060603 -03090B080905080606080808050306140908090808050505050A0A0A0909090308080808 -08080808080807030907090707090809080808090B0707070D0D0D080908050907090809 -080808050908090809080908080808070307040706090809080A08080508050907090609 -060908090809070907070A0B08080708070B0808070F0B080A05070E0408050508050908 -090809080808080808080908090809080908090805030503050305030604080707070309 -0809080A080A0808050907090609080908090809080D0B09080409080C0B0A08060D0B0D -0B0D0B0908030808090D0D0D0D0308080809090A060B0A0C030908090809090508090B09 -080A0908090909090B0B05090807080308080906080803080808080708080708080B0B03 -0808080B080A0709090505060F0D0B080909090808070A080D080909080A0B090A090809 -09090B090A090D0E0A0C08090D080808080608080B070808080809080808080807080B07 -09080B0C080907080B0808080608070303040C0D0808080807060D0F0807070707070707 -000000000A08090900000000080808080808080808080808080808090809080908090809 -080908090809080908090809080908080808080808080808080808080808080503050300 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000A080A080A080A080A080A080A080A080A080A080A08 -0A0809080908090909090909090909090908090809080908080008000E150E0005050606 -0B090F0A040606090B050705060909090909090909090906060B0B0B080E0A0A0A0B0908 -0B0A05060A080B0A0B080B0A0A090A0A0F0A090A0606060B090908090709080509090305 -08030D0909090906080609080B0908080906090B0A0A0A090A0B0A080808080808070808 -0808030303030909090909090909090909080909090809090E0E0E09090B0E0B0E0B0B0B -0909090A0B0A0908080B0D0908060B0B090B0A09090B0A0A0B0F0E090E060604040B0B08 -0905090606090909050406150A090A0909050505050B0B0B0A0A0A030909090909090909 -090908030A080A08060B09090808090B0B0808080E0E0E090B09050A080A070A07090905 -0A080A080B090B090809080803080408060A090A090B090A060A060A08090609060A090A -090A080A08080B0B09090709070B090908100C080A05080F0508050508050A080A070A07 -0908090809080B090B090B090A090A09050305030503050306050A080808030A090A090B -090B090A060A0809060A090A090A090A090F0B0908040A080E0D0B09060F0B0F0B0F0B09 -080409090A0E0E0E0E030909090A0B0C070C0B0C030A0A0A090A0A050A0A0B0A090B0A08 -0909090A0B0B05090907090309090906090903080809080709090709080B0B030909090B -090B080A0A050506100F0B0A090B0A0A0A080A090F090B0B0A0A0B0A0B0A080A09090B0A -0B0A0D0E0B0D0A0A0E0A0809080709080B07090908090A090909090807080B090A080B0C -090B08080C0808090708080303050D0D0908080908070E10090808080808080800000000 -0B090B0A000000000909090909090909090909090909090A080A080A080A080A080A080A -080A080A080A080A080A0809080908090809080908090809080908050305030000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000B090B090B090B090B090B090B090B090B090B090B090B090A09 -0A090B0A0B0A0B0A0B0A0B0A0908090809080908090009000F170F00050506070C0A100B -0407070A0C050705070A0A0A0A0A0A0A0A0A0A07070C0C0C080F0A0A0B0B09090C0B0507 -0A080D0B0C090C0A0A090B0A0F0A090A0707070C0A0A0909080909050909030509030F09 -0A090906080609090D0909090A070A0C0A0A0B090B0C0B09090909090908090909090303 -0303090A0A0A0A0A090909090A080A0A0A080A090F0F0F0A0A0C0F0C0F0C0C0C0A090A0B -0C0B0A08080C0E0A08060C0C0A0C0B0A0A0C0A0A0C100F0A0F070704040C0C0909050A07 -0709090A050407170A090A0909050505050C0C0C0B0B0B030A0A0A0A0A0A0A0A0A0A0803 -0A080A09070B09090909090C0C0808080F0F0F0A0C09050A080B080B08090A050A090A09 -0B0A0B090909090803080408070B090B090C0A0A060A060A08090609060B090B090A090A -09090C0D090A080A070B0A0908110D080B0508100509050509050A090B080B0809090909 -09090C090C090C090B090B09050305030503050307050A090908030B090B090C0A0C0A0A -060A0809060B090B090B090B080F0D0909050A090F0E0C0A070F0D0F0D0F0D0909040A0A -0B0F0F0F0F030A0A0A0A0B0D070D0B0D030A0A0B090A0B050A0A0D0B0A0C0B090A09090A -0D0C0509090809030909090709090309090909080A0A0809090B0D03090A090D090C090B -0A05050711110C0A0A0B0A0A0A090B090F090B0B0A0B0D0B0C0B090B090A0D0A0B0B0F10 -0C0E0A0B100A0909090709090D08090909090A090A09090807090D090A090D0E0A0C0908 -0D0909090708080303050E0E0909090909070F120908080808080808000000000C0A0C0A -000000000A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A090A090A090A090A090A090A090A090A -090A090A090A090909090909090909090909090909090905030503000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B090B090C0A -0C0A0C0A0C0A0C0A090909090909090909000A0010181000060606070D0A110C0407070A -0D060706070A0A0A0A0A0A0A0A0A0A07070D0D0D09100B0B0B0C0A090C0C07070B090D0C -0D0A0D0B0A0A0C0B110B0B0B0707070D0A0A0A0A080A0A060A0A050609050F0A0A0A0A06 -09070A090D0909090A070A0D0B0B0B0A0C0D0C0A0A0A0A0A0A080A0A0A0A050505050A0A -0A0A0A0A0A0A0A0A0A090A0A0A090A0A1010100A0A0D100D100D0D0D0A0A0A0C0D0B0A09 -090D0F0A09060D0D0A0D0C0A0A0D0B0B0D11100A10070704040D0D090B060A07070A0A0A -060407180B0A0B0A0A070707070D0D0D0C0C0C050A0A0A0A0A0A0A0A0A0A09030A090B09 -070C0A0B090A0A0D0D0909091010100A0C0A070A090B080B080A0A060B0A0B0A0C0A0C0A -0A0A0A0905090509070C0A0C0A0D0A0B060B060A090A070A070C0A0C0A0B090B09090D0D -0A0A090A070D0A0A09130E0B0C060911050A06060A060B0A0B080B080A0A0A0A0A0A0C0A -0C0A0C0A0C0A0C0A070507050705070507060B090909050C0A0C0A0D0A0D0A0B060A090A -070C0A0C0A0C0A0C0A110D0B09050B0A100F0D0A07110D110D110D0B09040A0A0B101010 -10030A0A0A0B0C0E090E0C0E050B0B0B0A0B0C070B0B0D0C0A0D0C0A0B0A0B0B0D0D070B -0A090A050A0A09070A0A0509090A09080A0A080A090D0D050A0A0A0D0A0D090B0A070707 -12120D0B0B0B0B0B0B090C0A110A0C0C0B0C0D0C0D0C0A0B0A0B0D0B0C0B0F100D0E0B0B -110B0A0A0A080A0A0D090A0A090A0B0A0A0A0A0907090D090A0A0D0E0A0C09090D0A0A0A -0809090505060F0F0A09090A090810130A09090909090909000000000D0A0D0B00000000 -0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A0B -0A0B0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0705070500000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0A0C0A0D0B0D0B0D0B -0D0B0D0B0B090B090B090B090A000A00111A1100060607080E0B120C0508080B0E060806 -080B0B0B0B0B0B0B0B0B0B08080E0E0E09110C0C0C0D0B0A0D0D08080C090E0D0D0A0D0C -0C0A0C0C110C0A0C0808080E0B0B0A0B090B0A060B0B05060A05110B0A0B0B0709070B0A -0E0A0A090B080B0E0C0C0C0B0D0D0C0A0A0A0A0A0A090A0A0A0A050505050B0A0A0A0A0A -0B0B0B0B0B090B0B0B090B0B1111110B0B0E110D110E0E0E0B0B0B0C0E0C0B09090E100A -09070E0E0B0E0C0B0B0E0C0C0D12110B11080805050E0E0A0A060B08080B0B0B0605081A -0C0B0C0B0B080808080D0D0D0C0C0C050B0B0B0B0B0B0B0B0B0B0A050C090C09080D0A0A -0A0A0B0E0E0909091111110B0D0B080C090C090C090B0B060C0A0C0A0D0B0D0B0A0B0A09 -05090509080D0B0D0B0D0A0C070C070C090A070A070C0B0C0B0C090C090A0D0E0B0A080B -080D0B0B09140F0A0C060912060A06060A060C0A0C090C090B0A0B0A0B0A0D0B0D0B0D0B -0D0B0D0B080508050805080508060C0A0A09050D0B0D0B0D0A0D0A0C070C090A070C0B0C -0B0C0B0C0B110E0A0A050C0A11100D0A08110E110E110E0A0A050B0B0C11111111040B0B -0B0C0D0F090F0D10050C0C0C0B0C0D080C0C0E0D0B0D0D0A0B0A0A0C0F0E080A0B080B05 -0B0B0A080B0B050A0A0B0A090A0B090B0A0E0E050B0A0B0E0B0D0A0C0C08080813130E0C -0A0D0C0C0C0A0D0B110A0D0D0C0D0E0D0D0D0A0C0A0A0E0C0D0C12120D100C0C120C0A0A -0A080B0A0E080B0B0A0B0C0B0A0B0B09080A0D0A0C0A0F0F0B0E0A090E0A0A0B08090905 -050610100B0A0A0B0A0811140B09090909090909000000000D0A0D0B000000000B0B0B0B -0B0B0B0B0B0B0B0B0B0B0B0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0C0A0B -0A0B0A0B0A0B0A0B0A0B0A0B0A0B0A080508050000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000D0A -0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0D0A0C0B0C0B0D0B0D0B0D0B0D0B0D0B -0A0A0A0A0A0A0A0A0B000B00121B1200060607080F0B130D0508080B0F070807080B0B0B -0B0B0B0B0B0B0B08080F0F0F0A120C0C0D0E0B0A0E0E08080C0A0F0D0E0B0E0D0C0B0D0C -120C0B0C0808080F0B0B0B0B090B0B060B0B05060B05120B0B0B0B0809070B0B0F0B0B09 -0B080B0F0C0C0D0B0D0E0D0B0B0B0B0B0B090B0B0B0B050505050B0B0B0B0B0B0B0B0B0B -0B0A0B0B0B0A0B0B1212120B0B0F120E120F0F0F0B0C0B0D0F0D0B0A0A0F110B0A070F0F -0B0F0D0C0C0F0C0C0E13120B12080805050F0F0B0B070B08080B0B0B0705081B0C0B0C0B -0B080808080E0E0E0D0D0D050B0B0B0B0B0B0B0B0B0B0A050C090C09080E0B0B0B0B0B0F -0F0A0A0A1212120B0E0B080C090D090D090B0B070C0B0C0B0E0C0E0B0B0B0B0A050A050A -080D0B0D0B0E0B0D080D080C090B070B070D0B0D0B0C090C090A0E0E0B0B090B090E0B0B -0A15100B0D070A13060B06060B060C0B0D090D090B0B0B0B0B0B0E0B0E0B0E0B0E0B0E0B -080508050805080508060C0B0B0A050D0B0D0B0E0B0E0B0D080C090B070D0B0D0B0D0B0D -0B120F0B0B050C0B12110E0B08120F120F120F0B0B050B0B0D12121212040B0B0B0C0E10 -0A100E10050C0C0D0B0C0E080C0C0F0D0C0E0E0B0C0B0B0C100E080B0B090B050B0B0B08 -0B0B050B0B0B0B090B0B090B0B0F0F050B0B0B0F0B0E0A0D0C08080814140F0C0B0E0C0C -0C0A0D0B120B0E0E0C0D0F0E0E0E0B0D0B0B0E0C0E0D13130E110C0D130D0B0B0B080B0B -0E090C0C0B0B0D0B0B0B0B0A090B0F0B0C0B10100C0E0A0A0F0B0B0B080A090505061010 -0B0B0B0B0A0812150B0A0A0A0A0A0A0A000000000E0B0D0B000000000B0B0B0B0B0B0B0B -0B0B0B0B0B0B0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0C0B0B0B0B0B0B -0B0B0B0B0B0B0B0B0B0B0B08050805000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000E0B0E0B0E0B -0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0E0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0B0B0B0B -0B0B0B0B0B000B00131D130007070709100C140E0509090C10070907090C0C0C0C0C0C0C -0C0C0C09091010100A130D0D0D0F0C0B0F0E08090D0B100E0F0B0F0D0D0C0E0D130D0C0D -090909100C0C0B0C0A0C0B070C0C06070B06120C0C0C0C080A070C0B100B0B0A0C090C10 -0D0D0D0C0E0F0E0B0B0B0B0B0B0A0B0B0B0B060606060C0C0C0C0C0C0C0C0C0C0C0A0C0C -0C0A0C0C1313130C0C10130F131010100C0C0C0E100D0C0A0A10120C0A0710100C100E0C -0C100D0D0F14130C130909050510100B0C070C09090C0C0C0705091D0D0C0D0C0C080808 -080F0F0F0E0E0E060C0C0C0C0C0C0C0C0C0C0B060D0A0D0A090F0C0C0B0C0C10100A0A0A -1313130C0F0C080D0A0D0A0D0A0C0C070D0B0D0B0F0C0F0C0B0C0B0B060B060B090E0C0E -0C0F0C0D080D080D0A0C070C070E0C0E0C0D0A0D0A0B0F100C0C0A0C090F0C0C0A16110C -0E070B14060B07070B070D0B0D0A0D0A0C0B0C0B0C0B0F0C0F0C0F0C0E0C0E0C08060806 -0806080609070D0B0B0B060E0C0E0C0F0C0F0C0D080D0A0C070E0C0E0C0E0C0E0C13100C -0B060D0B13120F0C091310131013100C0B050C0C0E13131313040C0C0C0D0E110A110E11 -060D0D0D0C0D0E080D0D100E0C0F0E0B0D0C0C0D110F080C0C0A0C060C0C0B090C0C060B -0B0C0B0A0C0C0A0C0B100F060C0C0C0F0C0F0B0D0D0808091515100D0C0E0D0D0D0B0E0C -120C0E0E0D0E100E0F0E0B0D0C0C100D0E0E14140F110D0D140D0B0C0B090C0B0F0A0C0C -0B0C0D0C0C0C0C0A090B100B0D0C11110C0F0B0A100B0B0C090A0A06060711110C0B0B0C -0B0913160C0A0A0A0A0A0A0A000000000F0C0E0C000000000C0C0C0C0C0C0C0C0C0C0C0C -0C0C0C0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0D0B0C0B0C0B0C0B0C0B0C -0B0C0B0C0B0C0B0806080600000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000F0C0F0C0F0C0F0C0F0C -0F0C0F0C0F0C0F0C0F0C0F0C0F0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0C0B0C0B0C0B0C0B -0C000C00141E140007070809100D160F0509090D10070907090D0D0D0D0D0D0D0D0D0D09 -091010100B140E0E0E0F0D0C100F08090E0B110F100C100E0E0C0F0E140E0C0E09090910 -0D0D0C0C0A0C0C070C0D06070C06130D0C0C0C090A080D0C100C0C0B0D090D100E0E0E0D -0F100F0C0C0C0C0C0C0A0C0C0C0C060606060D0C0C0C0C0C0D0D0D0D0D0B0D0D0D0B0D0C -1414140D0D101310141010100D0D0D0F100E0D0B0B10130C0B0810100D100F0D0D100E0E -1015140D140909050510100C0C070D09090D0D0D0705091E0E0D0E0D0D08080808101010 -0F0F0F060D0D0D0D0D0D0D0D0D0D0B060E0A0E0B09100C0C0C0C0C10100B0B0B1414140D -100C080E0A0E0A0E0A0C0D070E0C0E0C0F0D100D0C0D0C0B060B060B090F0D0F0D100C0E -090E090E0A0C080C080F0D0F0D0E0B0E0B0B10100C0C0A0D0A100D0C0B17110C0F070B16 -060C07070C070E0C0E0A0E0A0D0C0D0C0D0C100C100C100C0F0D0F0D0806080608060806 -09070E0C0C0B060F0D0F0D100C100C0E090E0A0C080F0D0F0D0F0D0F0D14100C0C060E0C -1313100C091410141014100C0C050D0D0E14141414040D0D0D0E0F110B120F12060E0E0E -0D0E0F080E0E110F0D100F0C0D0C0C0E1110080C0C0A0D060D0C0C090D0C060C0C0D0C0A -0C0D0A0D0C1010060D0C0D100D100B0E0E0808091616100E0C0F0E0E0E0B0F0D130C0F0F -0E0F110F100F0C0E0C0C100E0F0E151510120E0E150E0C0C0C090C0C100A0D0D0C0C0E0D -0C0D0C0B0A0C110C0D0C12120D100B0B110C0C0D090B0A06060712120D0C0C0D0B091417 -0D0B0B0B0B0B0B0B00000000110C0F0D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E -0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0E0C0D0C0D0C0D0C0D0C0D0C0D0C0D -0C0D0C080608060000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000100C100C100C100C100C100C100C -110C110C110C110C110C0F0D0F0D0F0D0F0D0F0D0F0D0F0D0C0C0C0C0C0C0C0C0C000D00 -152015000707080A110D170F060A0A0D11080A080A0D0D0D0D0D0D0D0D0D0D0A0A111111 -0B150E0E0F100D0C1010080A0F0C1210110D110F0E0D0F0E150E0D0E0A0A0A110D0D0D0D -0B0D0D070D0D06070C06140D0D0D0D090B080D0C110C0C0B0D0A0D110E0E0F0D10110F0D -0D0D0D0D0D0B0D0D0D0D060606060D0D0D0D0D0D0D0D0D0D0D0B0D0D0D0B0D0D1515150D -0D111411151111110D0D0D0F110F0D0B0B11140D0B0811110D110F0E0E110E0E1116150D -150A0A060611110C0D080D0A0A0D0D0D08060A200E0D0E0D0D080808081111110F0F0F06 -0D0D0D0D0D0D0D0D0D0D0C060E0B0E0B0A100D0D0C0D0D11110B0B0B1515150D100D080E -0B0F0B0F0B0D0D080E0D0E0D100E100D0D0D0D0C060C060C0A100D100D110D0F090F090E -0B0D080D080F0D0F0D0E0B0E0B0C11110D0D0B0D0A110D0D0B18120D0F080C17070D0707 -0D070E0D0F0B0F0B0D0D0D0D0D0D100D100D100D100D100D08060806080608060A070F0C -0C0C06100D100D110D110D0F090E0B0D080F0D0F0D0F0D0F0D15110D0C060E0D1414110D -0A1511151115110D0C060D0D0F15151515040D0D0D0E10120B131013060E0E0F0D0E1008 -0F0E12100E11100D0E0D0D0E1211080D0D0B0D060D0D0C0A0D0D060C0C0D0C0B0D0D0B0D -0C1111060D0D0D110D110C0F0E08080A1717110F0D100E0E0E0C100D140D10100F0F1210 -11100D0F0D0D110E100F161610130E0F160F0D0D0C0A0D0D110B0D0D0C0D0F0D0D0D0D0B -0A0C120C0E0D12130D110C0B120D0D0D0A0B0B06060713130D0C0C0D0C0A15190D0B0B0B -0B0B0B0B00000000120D100D000000000D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0E0D0E0D0E -0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D08 -060806000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000110D110D110D110D110D110D110D120D120D -120D120D120D0F0D0F0D100D100D100D100D100D0D0C0D0C0D0C0D0C0D000D0016211600 -0808090A120E1810060A0A0E12080A080A0E0E0E0E0E0E0E0E0E0E0A0A1212120C160F0F -0F110E0D11110A0A0F0C1310110D110F0F0E100F160F0E0F0A0A0A120E0E0D0E0B0E0D08 -0E0E06080D06150E0D0E0E090B090E0D120D0D0C0E0A0E120F0F0F0E1011100D0D0D0D0D -0D0B0D0D0D0D060606060E0D0D0D0D0D0E0E0E0E0E0C0E0E0E0C0E0E1616150E0E121511 -161212120E0E0E1012100E0C0C12150D0C0912120E12100E0E120F0F1118160E160A0A06 -0612120D0E080E0A0A0E0E0E08060A210F0E0F0E0E0A0A0A0A111111101010060E0E0E0E -0E0E0E0E0E0E0C060F0B0F0C0A110D0E0D0D0E12120C0C0C1616160E110E0A0F0B0F0B0F -0B0E0E080F0D0F0D110E110E0D0E0D0C060C070C0A100E100E110D0F090F090F0B0E090E -09100E100E0F0C0F0C0C11120E0D0B0E0B110E0E0C1A130E10080C18070D08080D080F0D -0F0B0F0B0E0D0E0D0E0D110E110E110E110E110E0A060A060A060A060A080F0D0D0C0610 -0E100E110D110D0F090F0B0E09100E100E100E100E16120E0D070F0D1515110D0A161216 -1216120E0D060E0E1016161616050E0E0E0F11130C131114060F0F0F0E0F110A0F0F1310 -0E11110D0F0E0E0F13120A0E0E0B0E060E0E0D0A0E0E060D0D0E0D0B0D0E0B0E0D121206 -0E0D0E120E110C0F0F0A0A0A1918120F0E110F0F0F0C100E150E11110F10131111110D0F -0E0E120F1110171711140F0F17100D0E0D0A0E0D120C0E0E0D0E0F0E0D0E0E0C0B0D130D -0E0D13140E110D0C120D0D0E0A0C0B06060814140E0D0D0E0C0A161A0E0C0C0C0C0C0C0C -00000000120D110F000000000E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0F0D0F0D0F0D0F0D0F -0D0F0D0F0D0F0D0F0D0F0D0F0D0F0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0E0D0A060A0600 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000110D110D110D110D110D110D110D120D120D120D120D -120D100E100E110F110F110F110F110F0E0D0E0D0E0D0E0D0E000E00172317000808090B -130F1911060A0A0F13080A080A0F0F0F0F0F0F0F0F0F0F0A0A1313130D17101010120F0D -12110A0A100D1311120E1210100E111017100E100A0A0A130F0F0E0E0C0E0E080E0F0608 -0E06160F0E0E0E0A0C090F0E130E0E0C0F0A0F131010100F1112110E0E0E0E0E0E0C0E0E -0E0E060606060F0E0E0E0E0E0F0F0F0F0F0C0F0F0F0D0F0E1717160F0F13161217131313 -0F0F0F1113100F0D0D13160E0D0913130F13110F0F1310101219170F170B0B060613130E -0E080F0A0A0E0E0F08060B23100F100F0F0A0A0A0A121212111111060F0F0F0F0F0F0F0F -0F0F0D06100C100C0A120E0E0E0E0E13130C0C0C1717170F120E0A100C100C100C0E0F08 -100E100E120F120F0E0F0E0D060D070D0B110F110F120E100A100A100C0E090E09110F11 -0F100C100C0D12130E0E0C0F0B120F0E0D1B140E11080D19070E08080E08100E100C100C -0F0E0F0E0F0E120E120E120E110F110F0A060A060A060A060A08100E0E0D06110F110F12 -0E120E100A100C0E09110F110F110F110F17130E0E07100E1616120E0A1713171317130E -0E060F0F1117171717050F0F0F1011140C141115061010100F10110A101013110F12110E -0F0E0E1014130A0E0E0C0F060F0E0E0B0F0E060E0E0F0E0C0E0E0C0F0E1313060F0E0F13 -0F120D10100A0A0A1A1913100E111010100D110F160E11111011131112110E100E0E1310 -121018181215101018100E0E0E0B0E0E120C0F0F0E0E100F0E0F0E0C0B0E130E0F0E1414 -0F120D0D130E0E0F0B0D0C06060815150F0E0E0F0D0B171B0F0C0C0C0C0C0C0C00000000 -130E1110000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E10 -0E100E100E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A060000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000120E120E120E120E120E120E120E130E130E130E130E130E110F -110F111011101110111011100E0E0E0E0E0E0E0E0E000F00182518000808090B140F1A11 -060B0B0F14090B090B0F0F0F0F0F0F0F0F0F0F0B0B1414140D18101011130F0E13120A0B -110D1412130E1311100F121018100F100B0B0B140F0F0E0F0D0F0E080F0F06080E06170F -0F0F0F0A0D090F0E140E0E0D0F0B0F141010110F1213120E0E0E0E0E0E0D0E0E0E0E0606 -06060F0F0F0F0F0F0F0F0F0F0F0D0F0F0F0D0F0F1818170F0F141713181414140F0F0F11 -14110F0D0D14170F0D0914140F14110F0F141010131A180F180B0B060614140E0F090F0B -0B0F0F0F09060B25100F100F0F0A0A0A0A131313121212060F0F0F0F0F0F0F0F0F0F0D06 -100D100D0B130F0F0E0F0F14140D0D0D1818180F130F0A100D110D110D0F0F09100E100E -1310130F0E0F0E0D060D070D0B120F120F130F110A110A100D0F090F09120F120F100D10 -0D0E13140F0F0C0F0C130F0F0D1C150F12090D1A080F09090F09100E110D110D0F0E0F0E -0F0E130F130F130F120F120F0A060A060A060A060B08110E0E0D06120F120F130F130F11 -0A100D0F09120F120F120F120F18140F0E07100E1717130F0B1814181418140F0E060F0F -1118181818050F0F0F1012150D151216061010110F10120A111014121013120E100F0F10 -15140A0F0F0C0F060F0F0E0B0F0F060E0E0F0E0C0F0F0C0F0E1414060F0F0F140F130E11 -100A0A0B1B1A14110F121010100E120F170F12121112141213120E110F0F141012111919 -1316101119110E0F0E0B0F0E130D0F0F0E0F110F0F0F0F0D0C0E140E0F0F15150F130E0D -140E0E0F0B0D0D06060816160F0E0E0F0E0B181C0F0D0D0D0D0D0D0D00000000130F1210 -000000000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F100E100E100E100E100E100E100E100E10 -0E100E100E100E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0F0E0A060A06000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000130F130F130F130F130F130F130F130F130F130F130F130F120F120F1210 -12101210121012100F0E0F0E0F0E0F0E0F000F001B291B000A0A0B0C16111D14070C0C11 -160A0C0A0C111111111111111111110C0C1616160F1B12131315111015140B0C130F1714 -15101513121114121B1311130C0C0C16111110110E11100A1111070910071A111011110C -0E0B11101610100E110C1116121213111415141010101010100E10101010070707071110 -1010101011111111110F1111110F11111B1B1A1111161B151B161616111111141613110F -0F161A100F0B16161116141111161212151D1B111B0C0C0707161610110A110C0C111111 -0A070C2912111211110B0B0B0B15151514141407111111111111111111110F07120E130E -0C15111110101116160F0F0F1B1B1B1115110B120E130E130E11110A1210121015111511 -1011100F070F080F0C141114111510130C130C120E110B110B14111411130E130E0F1516 -11100E110D1511110F1F1811140A0F1D09100A0A100A1210130E130E1110111011101511 -15111511141114110B070B070B070B070C091310100F071411141115101510130C120E11 -0B14111411141114111B1611100812101B1A15100C1B161B161B161110071111131B1B1B -1B061111111214180F181419071213131113140B13131714121514101211111318160B11 -110E11071111100C111107101011100E10110E11101616071110111611150F13120B0B0C -1E1E161311141213130F14111A11141413141714151410131111161315131C1C15191213 -1C131011100D1110160E1111101113111011110E0D1017101110181811150F0F17101011 -0D0F0E0707091919111010110F0D1B20110F0F0F0F0F0F0F000000001610141200000000 -111111111111111111111111111111121012101210121012101210121012101210121012 -101210111011101110111011101110111011100B070B0700000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000015101510151015101510151015101610161016101610161014111411141214121412 -141214121110111011101110110011001D2C1D000A0A0B0D18121F15080D0D12180B0D0B -0D121212121212121212120D0D181818101D14141416121116160D0D1410181617111714 -141215141D1412140D0D0D18121211120F12110A1212090A11091C121212120C0F0B1211 -1811110F120D1218141414121617151111111111110F1111111109090909121212121212 -1212121212101212121012121D1D1C1212181D171D181818121312151815121010181C12 -100B18181218151313181414171F1C121D0D0D0808181811120A120D0D1212120B080D2C -14121412120D0D0D0D17171715151509121212121212121212121009140F140F0D161212 -11121218181010101D1D1D1216120D140F140F140F12120B141114111613161211121110 -091009100D161216121712140C140C140F120B120B15121512140F140F10171812120F12 -0E17121210221912150A101F09120A0A120A1411140F140F121112111211161216121612 -161216120D090D090D090D090D0A14111110091612161217121712140C140F120B151215 -12151215121D1812110914111D1C17120D1D181D181D181211081212151D1D1D1D061212 -12141619101A161A091414141214160D14141816131716111412121419180D12120F1209 -1212110D121209111113110F12120F12111818091212121812171014140D0D0D20201814 -12161414141016121C12161614151816171611141212181416151E1E171B14141E141112 -110E1211170F1313111214121212120F0E1118111312191A13171110181111120E100F09 -090A1B1B12111112100E1D22121010101010101000000000171216130000000012121212 -121212121212121212121214111411141114111411141114111411141114111411141112 -1112111211121112111211121112110D090D090000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000001712 -171217121712171217121712171217121712171217121512151216131613161316131613 -121112111211121112001200203120000B0B0D0F1A142217090F0F141A0C0F0C0F141414 -141414141414140F0F1A1A1A112016161619141219180D0F16121B181913191616141716 -201614160F0F0F1A141413141114130B1414090B13091F141314140E110D14131A131311 -140F141A1616161418191713131313131311131313130909090914131313131314141414 -141114141411141420201F14141A1F19201A1A1A141514171A171411111A1F13110D1A1A -141A1715151A161619221F14200F0F09091A1A13140C140F0F1414140C090F3116141614 -140D0D0D0D19191917171709141414141414141414141209161116110F1914141313141A -1A1111112020201419140D16111611161114140C16131613191519141314131209120912 -0F181418141913160E160E1611140D140D171417141611161112191A1413101410191414 -11251C14170C12220A130B0B130B16131611161114131413141319141914191418141814 -0D090D090D090D090F0B16131312091814181419131913160E1611140D17141714171417 -14201A14130A16131F1F19130F201A201A201A141309141417202020200714141416181C -111C181D091616171416180D16161B1815191813161414161C1A0D14141014091414130F -141409131314131013141014131A1A091413141A14191216160D0D0F24231A1614181616 -161218141F14181816181B181918131614141A1618172121191D161621171314130F1413 -1A111414131416141314141110131B1315131C1C151912121B1313140F121109090B1D1D -14131314120F20261411111111111111000000001A131815000000001414141414141414 -141414141414141613161316131613161316131613161316131613161316131413141314 -13141314131413141314130D090D09000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000191319131913 -19131913191319131A131A131A131A131A13171417141815181518151815181514131413 -1413141314001400213221000C0C0D0F1B152418090F0F151B0C0F0C0F15151515151515 -1515150F0F1B1B1B12211717171915131A190D0F17121C191A141A171714181721171417 -0F0F0F1B151514151115140C1515090B140920151415150E110D15141B141411150F151B -17171715191A181414141414141114141414090909091514141414141515151515121515 -1512151421212015151B201A211B1B1B151515181B171512121B2014120D1B1B151B1815 -151B17171A232015210F0F09091B1B14140C150F0F1515150C090F3217151715150D0D0D -0D1A1A1A18181809151515151515151515151309171117110F1A14141414151B1B121212 -212121151A150D17111711171115150C1714171419151A151415141209120A120F191519 -151A14170E170E1711140D140D1815181517111711131A1B15141115101A151512261D14 -180C12240B140C0C140C1714171117111514151415141A151A151A15191519150D090D09 -0D090D090F0B1714141209191519151A141A14170E1711140D1815181518151815211B14 -140A171420201A140F211B211B211B141409151518212121210715151517191D121D191E -091717171517190D17171C19151A1914161414171D1B0D14151115091514140F15150914 -1415141114151115131B1B091514151B151A1317170D0D0F25241B171419171717131915 -2014191917181C191A19141714141B17191822221A1E161722171414141015141A111515 -141417151415151210141C1415141D1D151A13121C14141510121109090B1E1E15141415 -131021271512121212121212000000001B14191600000000151515151515151515151515 -151515171417141714171417141714171417141714171417141714151415141514151415 -141514151415140D090D0900000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000001A141A141A141A141A14 -1A141A141B141B141B141B141B1418151815191619161916191619161414141414141414 -15001500253825000D0D0F111E18281B0A1111181E0D110D111818181818181818181811 -111E1E1E142519191A1D17151D1C10111A151F1C1D161D1A19171B19251917191111111E -181816171317160D17170A0D160A241716171710130F17161E1616131711171E19191A17 -1C1D1B16161616161613161616160A0A0A0A171616161616171717171814181818141817 -25252418181E241D251E1E1E1818181B1E1A1814141E2316140F1E1E181E1B18181E1919 -1D2824182511110A0A1E1E16170D1811111717180D0A11381917191717101010101D1D1D -1B1B1B0A18181818181818181818150A19131913111D17171616171E1E14141425252518 -1D171019131A131A1317180D191619161D181D17161716150A150B15111C171C171D161A -101A101913170F170F1B171B1719131913151D1E17171317121D1817142B20171B0D1528 -0C160D0D160D19161A131A131716171617161D171D171D171C171C17100A100A100A100A -110D1A1616150A1C171C171D161D161A101913170F1B171B171B171B17251E17160B1916 -24231D1611251E251E251E17160A18181B2525252508181818191C2014211C220A19191A -17191C101A191F1C181D1C1619171719201E10171713170A1717161117170A1616181613 -16171317161E1E0A1716171E171D151A1910101129291E1A171C191919151C1724171C1C -1A1B1F1C1D1C161A17171E191C1A26271D22191A261A1617161117161E13181816171A18 -1618171412161F1618162021181D15141F1616171114130A0A0D2222171616181511252B -1814141414141414000000001E161C180000000018181818181818181818181818181819 -161916191619161916191619161916191619161916191617161716171617161716171617 -161716100A100A0000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000001D161D161D161D161D161D161D16 -1E161E161E161E161E161B171B171C181C181C181C181C18171617161716171617001800 -2A402A000F0F1113221B2D1F0B13131B220F130F131B1B1B1B1B1B1B1B1B1B1313222222 -172A1D1D1D201B18212012131D17231F2119211D1D1A1F1D2A1D1A1D131313221B1B191A -161A190F1A1B0C0E190C291B191A1A1216111B19221919161B131B221D1D1D1B1F211F19 -191919191916191919190C0C0C0C1B19191919191B1B1B1B1B171B1B1B171B1A2A2A291B -1B222A212A2222221B1B1B1F221E1B1717222819171122221B221F1B1B221D1D212D291B -2A13130B0B2222191A0F1B13131A1A1B0F0B13401D1B1D1B1B121212122121211F1F1F0C -1B1B1B1B1B1B1B1B1B1B180C1D161D1613211A1A19191A22221717172A2A2A1B211A121D -161D161D161A1B0F1D191D19201B211B191B19170C170C17131F1B1F1B21191D121D121D -161A111A111F1B1F1B1D161D161821221A1A161A15211B1A1731251A1F0F172D0E190F0F -190F1D191D161D161B191B191B19211A211A211A201B201B120C120C120C120C130E1D19 -19170C1F1B1F1B211921191D121D161A111F1B1F1B1F1B1F1A2A221A190D1D192A282119 -132A222A222A221A190B1B1B1E2A2A2A2A091B1B1B1D2025172520260C1D1D1E1B1D2012 -1D1D231F1B2120191C1A1A1D2522121A1A161B0C1B1A19131B1A0C19191B1915191A151B -1923220C1B191B221B21181D1D1212132F2E221D1A201D1D1D181F1B291A20201D1F2320 -2120191D1A1A221D201E2B2C21271D1D2B1E191A19141A1922161B1B191A1D1B191B1A16 -151923191B1925251B2118172319191B1417160C0C0E26261B19191B18142A311B171717 -17171717000000002219201C000000001B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1D191D191D -191D191D191D191D191D191D191D191D191D191B191B191B191B191B191B191B191B1912 -0C120C000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000211921192119211921192119211922192219 -2219221922191F1B1F1B201C201C201C201C201C1A191A191A191A191A001B002E462E00 -10101215261D32210C15151D26111511151D1D1D1D1D1D1D1D1D1D1515262626192E1F20 -20231D1A24231215201A2722241C24201F1C221F2D201C20151515261D1D1C1D181D1B10 -1D1D0C101B0C2D1D1C1D1D1418121D1B261B1B181D151D261F1F201D2224221C1C1C1C1C -1C181B1B1B1B0C0C0C0C1D1C1C1C1C1C1D1D1D1D1D191D1D1D191D1D2E2E2D1D1D262E24 -2E2626261D1E1D2126211D1919262C1C191226261D26211E1E261F1F24312D1D2E15150C -0C26261B1C111D15151D1D1D110C15461F1D1F1D1D121212122424242222220C1D1D1D1D -1D1D1D1D1D1D1A0C1F18201815241C1C1B1C1D26261919192E2E2E1D241D121F18201820 -181D1D111F1C1F1C231E241D1B1D1B1A0C1A0E1A15221D221D241C201420141F181C121C -12221D221D201820181A24261D1C181D17241D1D1936281C22111A320F1C10101C101F1C -201820181D1B1D1B1D1B241D241D241D231D231D120C120C120C120C1510201B1B1A0C22 -1D221D241C241C20141F181C12221D221D221D221D2D261C1B0E1F1C2E2C241C152D262D -262D261C1B0C1D1D212E2E2E2E0A1D1D1D1F23281929232A0C1F20201D20231220202722 -1E24231C1F1C1C202826121C1D181D0C1D1D1B151D1D0C1B1B1D1B171C1D171D1B26250C -1D1C1D251D241A201F121215333326201C231F20201A221D2D1C23232022272324231C20 -1C1C262023212F30242A1F2030201C1C1B161D1B25181D1D1B1D201D1C1D1D19171B271B -1E1C28291D251A19271C1B1D1619180C0C102A2A1D1B1B1D1A162E361D19191919191919 -00000000251C231E000000001D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1F1C1F1C1F1C1F1C1F -1C1F1C1F1C1F1C1F1C1F1C1F1C1F1C1D1B1D1B1D1B1D1B1D1B1D1B1D1B1D1B120C120C00 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000241C241C241C241C241C241C241C251C251C251C251C -251C221D221D231E231E231E231E231E1C1B1C1B1C1B1C1B1D001D00324C320012121417 -292036240D17172029121712172020202020202020202017172929291B3222222327201D -27261517231C2A25271E2723221F252231221F221717172920201E1F1A1F1E121F200F11 -1E0F31201E1F1F151A14201E291E1E1A20172029222223202527251E1E1E1E1E1E1A1E1E -1E1E0F0F0F0F201E1E1E1E1E20202020201B2020201B201F323231202029322732292929 -202020242923201B1B29301E1B1429292029242020292222273531203217170D0D29291E -1F122017171F1F20120D174C2220222020151515152727272525250F2020202020202020 -20201C0F221A221A17271F1F1E1E1F29291B1B1B32323220271F15221A231A231A1F2012 -221E221E272027201E201E1C0F1C0F1C1725202520271E23152315221A1F141F14252025 -20221A221A1C27291F1E1A201928201F1B3A2C1F25121C36101E12121E12221E231A231A -201E201E201E271F271F271F26202620150F150F150F150F1711231E1E1C0F2520252027 -1E271E2315221A1F14252025202520252031291F1E0F221E3230271E173129312931291F -1E0D202024323232320B20202022262C1B2C262D0F2222232022261523222A252027261E -221F1F222C29151F1F1A200F201F1E17201F0F1E1E201E191E1F19201E29290F201E2029 -20281C2322151517383729231F262222221C2520311F262623252A2627261E231F1F2922 -26243434272E222334231E1F1E181F1E281A20201E1F23201E201F1B191E2A1E201E2C2C -20281D1B2A1E1E20181B1A0F0F112E2E201E1E201C18323B201B1B1B1B1B1B1B00000000 -281E262100000000202020202020202020202020202020221E221E221E221E221E221E22 -1E221E221E221E221E221E201E201E201E201E201E201E201E201E150F150F0000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000271E271E271E271E271E271E271E281E281E281E281E281E2520 -2520262126212621262126211F1E1F1E1F1E1F1E1F00200036523600131315192C223A27 -0F1919222C141914192222222222222222222219192C2C2C1D362525262A221F2A291719 -251E2E282B212B2625212825352521251919192C222220221C22201322220F13200F3522 -212222171C1522202C20201C2219222C25252622282B282020202020201C202020200F0F -0F0F22212121212122222222221D2222221D222136363522222C362B362C2C2C22232227 -2C26221D1D2C34211D152C2C222C2723232C25252B3A35223619190F0F2C2C2021142219 -19222222140F19522522252222171717172B2B2B2828280F222222222222222222221E0F -251C251C192A21212021222C2C1D1D1D363636222A2217251C261C261C22221425202520 -2A232A222022201E0F1E101E19282228222B2126172617251C2115211528222822251C25 -1C1F2B2C22211C221B2B22221D3F2F2127141E3A1121131321132520261C261C22202220 -22202A222A222A2229222922170F170F170F170F19132520201E0F282228222B212B2126 -17251C21152822282228222822352C212010252036342B2119352C352C352C21200F2222 -27363636360B22222225292F1D3029310F2525262225291725252E28232B292124212125 -2F2C1721221C220F2221201922220F202023201B21221B22202C2C0F2221222C222B1F26 -251717193C3C2C2521292525251F28223521292925282E292B29212621212C2529263838 -2A32252638262021201922202B1C2323202226222122221D1B202D2023212F30232B1F1E -2D202022191E1C0F0F133131222020221F19363F221D1D1D1D1D1D1D000000002C212924 -000000002222222222222222222222222222222520252025202520252025202520252025 -2025202520252022202220222022202220222022202220170F170F000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000002B212B212B212B212B212B212B212C212C212C212C212C21282228222924 -29242924292429242120212021202120220022003A583A001414171B2F253E2A101A1A25 -2F151A151A252525252525252525251A1A2F2F2F203A2828292D25212D2C181A2820312B -2E232E2828242A28392824281A1A1A2F252523241E24231424250F14220F382523242419 -1E1725222F22221E251A252F282829252B2E2A2323232323231E232323230F0F0F0F2523 -2323232325252525251F2525252025243A3A3925252F392E3A2F2F2F2525252A2F292520 -202F372320172F2F252F2A25252F28282E3E39253A1B1B10102F2F222415251A1A242425 -15101B582825282525181818182E2E2E2A2A2A0F25252525252525252525210F281E281E -1A2D23242223242F2F1F1F1F3A3A3A252D2418281E291E291E242515282328232D262D25 -232523200F2011201B2B252B252E2328192819281E241724172A252A25281E281E212E30 -24231E251D2E2524204333242A15203E1323151523152823291E291E2523252325232D24 -2D242D242C252C25180F180F180F180F1A14282222200F2B252B252E232E232819281E24 -172A252A252A252A25392F242211282339372E231A392F392F392F24221025252A3A3A3A -3A0C252525282C321F332C350F28282925282C182828312B262E2C2327242428332F1824 -241E250F2524221B25240F222225221D23241D2522302F0F2523252F252E21292818181A -41402F28242C282828212B2538242C2C282B312C2E2C2329242430282C293C3D2D352729 -3C292324231B24232E1E2525222428252325241F1D22312225233333252E212031232325 -1B201E0F0F14353525222225211B3A44251F1F1F1F1F1F1F000000002F232C2600000000 -252525252525252525252525252525282328232823282328232823282328232823282328 -23282325232523252325232523252325232523180F180F00000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00002E232E232E232E232E232E232E232F232F232F232F232F232A252A252C262C262C26 -2C262C262422242224222422240025004366430018181A1F372B4831121E1E2B37181E18 -1E2B2B2B2B2B2B2B2B2B2B1E1E37373725432E2E2F342A2734321D1E2E2538323528352F -2E29312E422E292E1E1E1E372B2B282A232A28182A2A12172812412A292A2A1D231A2A28 -372828232B1E2B372E2E2F2A3235312828282828282328282828121212122A2929292929 -2A2A2A2A2B242B2B2B252B2A4343412B2B374335433737372B2B2B31372F2B2525374029 -251A37372B37312B2B372E2E3548422B431F1F121237372829182B1E1E2A2A2B18121F66 -2E2A2E2A2A1D1D1D1D353535313131122B2B2B2B2B2B2B2B2B2B26122E232E231E342929 -28292A37372424244343432B342A1D2E232F232F232A2B182E282E28342B342A282A2825 -122514251F322A322A35292F1D2F1D2E23291A291A312A312A2E232E232635372A29222A -21352B2A254E3A29311825481628181828182E282F232F232A282A282A28342A342A342A -322A322A1D121D121D121D121E172E28282512322A322A352935292F1D2E23291A312A31 -2A312A312A42372928142E28434035291E4237423742372928122B2B30434343430E2B2B -2B2E323A243B323D122E2E2F2A2E321D2E2E38322B3532282D29292E3A371D292A222A12 -2A2A281F2A2A1228282B2822292A222A283737122A292A372A35262F2E1D1D1E4B4A372E -29322E2E2E26322A412932322E3138323532282F2929372E33304546343E2E2F452F2829 -28202A2835232B2B282A2F2B292B2A24212838282B293B3B2B3526253828282A20252312 -12173D3D2A28282B2620434F2B24242424242424000000003629332C000000002B2B2B2B -2B2B2B2B2B2B2B2B2B2B2B2E282E282E282E282E282E282E282E282E282E282E282E282A -282A282A282A282A282A282A282A281D121D120000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000003529 -35293529352935293529352936293629362936293629312A312A332C332C332C332C332C -29282928292829282A002B004B724B001A1A1E223D305137142222303D1B221B22303030 -3030303030303022223D3D3D294B3333343A2F2B3A381F22342A3F383B2D3B34332E3733 -4A332E332222223D30302D2F272F2D1A2F2F151A2C15492F2E2F2F20271E2F2C3D2C2C27 -3022303D3333342F383B372D2D2D2D2D2D272D2D2D2D151515152F2E2E2E2E2E2F2F2F2F -302930303029302F4B4B4930303D4A3B4B3D3D3D303030373D353029293D482E291E3D3D -303D3730303D33333B504A304B222214143D3D2C2E1B3022222F2F301B142272332F332F -2F1F1F1F1F3B3B3B37373715303030303030303030302A1533273327223A2E2E2C2D2F3D -3D2929294B4B4B303A2F1F3327342734272F301B332D332D3A313A2F2D2F2D2A152A162A -22382F382F3B2E3420342033272E1E2E1E372F372F332733272A3B3D2F2E262F253B302F -2957412E371B2A51182D1B1B2D1B332D342734272F2D2F2D2F2D3A2F3A2F3A2F382F382F -1F151F151F151F15221A342C2C2A15382F382F3B2E3B2E342033272E1E372F372F372F37 -2F4A3D2E2C17332D4A483B2E224A3D4A3D4A3D2E2C143030364B4B4B4B10303030333841 -28423944153333352F33381F34333F38313B382D322E2E33413D1F2E2F262F152F2F2C22 -2F2F152C2C302C262E2F262F2C3E3D152F2E2F3D2F3B2A35331F1F2254533D342E383333 -332A382F492E383834373F383B382D342E2E3D3339354D4E3B4533354E352D2E2D232F2D -3C2730302C2F34302E302F28252C3F2C302D4243303C2B293F2D2D2F23292715151A4545 -2F2C2C302A234B583029292929292929000000003D2E3931000000003030303030303030 -30303030303030332D332D332D332D332D332D332D332D332D332D332D332D2F2D2F2D2F -2D2F2D2F2D2F2D2F2D2F2D1F151F15000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000003B2E3B2E3B2E -3B2E3B2E3B2E3B2E3D2E3D2E3D2E3D2E3D2E372F372F393139313931393139312E2C2E2C -2E2C2E2C2F003000537E53001D1D21264435593C16262635441E261E2635353535353535 -35353526264444442D5339393A403430403E22263A2E463E4132413A39333D3952393339 -26262644353532342B34311D3435181D31185135323434232B2135314431312C35263544 -39393A343E413D3232323232322B313131311818181835323232323235353535352D3535 -352D35335353513535445241534444443535353C443B352D2D444F322D21444435443C36 -36443939415951355326261616444431331E3526263434351E16267E3934393434222222 -224141413D3D3D18353535353535353535352F18392B392C2640333331323444442D2D2D -53535335403422392B3A2B3A2B34351E39323932403640343134312E182E192E263E353E -3541323A233A23392B332133213D353D35392C392C2F414434322B34294235342D614833 -3D1E2E591B321D1D321D39323A2B3A2B3431343134314034403440343E353E3522182218 -22182218261D3A31312E183E353E35413241323A23392B33213D353D353D353D34524433 -31193932524F41322652445244524433311635353C5353535312353535393E482D493F4B -1839393A34393E223A39463E36413E323833333948442233342B35183433312635341831 -3135312A32342A34314444183432344434422F3A392222265D5C443A333E3939392F3E34 -51333E3E3A3D463E413E323A333344393F3B5657414C393A563B323331273431422C3535 -31343A353235342C293146313632494A35422F2D46323135272D2B18181D4C4C35313135 -2F275361352D2D2D2D2D2D2D0000000043323F3700000000353535353535353535353535 -353535393239323932393239323932393239323932393239323932343134313431343134 -313431343134312218221800000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000041324132413241324132 -41324132433243324332433243323D353D353F373F373F373F373F373331333133313331 -340035005C8C5C002020242A4B3A6343192A2A3A4B212A212A3A3A3A3A3A3A3A3A3A3A2A -2A4B4B4B325C3F3F40473A354745272A40334E45483748403F39433F5B3F393F2A2A2A4B -3A3A373930393720393A18203618593A3839392730243A364B3636303A2A3A4B3F3F403A -4548433737373737373037373737181818183A38383838383A3A3A3A3A323A3A3A323A39 -5C5C5A3A3A4B5B485C4B4B4B3A3B3A434B413A32324B583832244B4B3A4B433B3B4B3F3F -48625A3A5C2A2A19194B4B3639213A2A2A3A3A3A21192A8C3F3A3F3A3A27272727484848 -434343183A3A3A3A3A3A3A3A3A3A34183F303F302A4738393638394B4B3232325C5C5C3A -4739273F3040304030393A213F373F37473C473A373A373318331B332A453A453A483840 -2740273F3039243924433A433A3F303F3034484B39382F3A2E493A39326B503843213363 -1E38212138213F37403040303A373A373A37473947394739453A453A2718271827182718 -2A204036363318453A453A4838483840273F303924433A433A433A433A5B4B39361C3F37 -5B5848382A5B4B5B4B5B4B3936193A3A425C5C5C5C133A3A3A3F455032514554183F3F41 -3A3F4527403F4E453C4845373E39393F504B2739392F3A183A39362A3A391836363B362E -383A2F3A364C4B183A383A4B3A4934403F27272A67654B4039453F3F3F34453A5A394545 -40444E454845374039394B3F46425F6048553F415F413739372B393749303B3B3639403B -383B39312E364D363B3851523B4935324D37373A2B323018182054543A36363B342B5C6C -3B32323232323232000000004A38463D000000003A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3F -373F373F373F373F373F373F373F373F373F373F373F373A373A373A373A373A373A373A -373A37271827180000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000004838483848384838483848384838 -4A384A384A384A384A38433A433A463D463D463D463D463D393639363936393639003A00 -649864002323272E52406C491B2D2D4052242D242D404040404040404040402D2D525252 -37644445464D3F394E4B2A2D4538544B4F3C4F46443E494463453E452D2D2D5240403C3E -343E3C233E3F1B223B1B613F3D3E3E2B34273F3B523B3B353F2D3F524444463F4B4F493C -3C3C3C3C3C343C3C3C3C1B1B1B1B3F3D3D3D3D3D3F3F3F3F403640404037403E64646240 -4052634F6452525240404049524740373752603D3727525240524940405244444F6B6240 -642E2E1B1B52523B3E24402D2D3F3F40241B2E98443F443F3F2A2A2A2A4F4F4F4949491B -40404040404040404040381B443445352D4E3D3E3B3D3E5252363636646464404E3E2A44 -34463446343E4024443C443C4D414E3F3C3F3C381B381E382E4B3F4B3F4F3D462B462B44 -343E273E27493F493F45354535394F523E3D333F324F403E3774573D4924386C203C2323 -3C23443C463446343F3C3F3C3F3C4E3E4E3E4E3E4B3F4B3F2A1B2A1B2A1B2A1B2D22453B -3B381B4B3F4B3F4F3D4F3D462B44343E27493F493F493F493F63523E3B1E443C63604F3D -2D6352635263523E3B1B4040486464646415404040444B5736584B5B1B4445463F454B2A -4545544B414F4B3C433E3E4557522A3E3E333F1B3F3E3B2E3F3E1B3B3B403B323D3F333F -3B52511B3F3D3F513F4F3946442A2A2D706E52453E4B444545394B3F613E4B4B4549544B -4F4B3C463E3E52454C4767694E5C444667473C3D3B2F3E3C503440403B3E46403D403E35 -323B543B403D5859404F3937543C3C3F2F37341B1B225B5B3F3B3B40392F647540363636 -3636363600000000513D4C4200000000404040404040404040404040404040443C443C44 -3C443C443C443C443C443C443C443C443C443C3F3C3F3C3F3C3F3C3F3C3F3C3F3C3F3C2A -1B2A1B000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000004F3D4F3D4F3D4F3D4F3D4F3D4F3D513D513D -513D513D513D493F493F4C424C424C424C424C423E3B3E3B3E3B3E3B3E00400000020100 -000007000600000300070014B706020400060204002FCDDDCD002FCDDDCD313021112111 -2521112101000600FA800500FB000600FA0080050000000201230000020305D100030007 -0027401703030202075505080F0901005D042B035D0F051F0502052F5DE4FDE45D003FED -332F3F3130010323031323353302031AAA1CD6CCCC05D1FBC90437FA2FD3000200A803D1 -0304061400030007002640150206060307010F09400902032C0040000100042C072FED33 -5D2FED5D003F3C332F3C3130010323032303230303042B842BA82B842B0614FDBD0243FD -BD024300000200C3000005C905D1001B001F00B1407140215609740570097B137B167B17 -7B1A080A091E1D160F1501671501151E0C0F1013140B1407081F1C17001801681801181E -0502011A06190662191462700B010B03110B111903040D001B011B1B0D171A011D0410B5 -131E020509040CB50F070F1318040B00140114030F0B4F0B020B08003F5D3F5D1217392F -ED17392FED1739012F332F5D1217392F2F2F5DE42FE4313087C0C0C0C0FD5D71C0C0C0C0 -C08710C0C0C0C0FD5D71C0C0C0C0C0015D01210321152103231321032313213521132135 -2113330321133303210521032105C9FEB35C0134FEA9688168FEF2688168FED6014D5CFE -CC0157698169010E698169012AFE35FEEE5E011203A4FE8887FE5B01A5FE5B01A5870178 -8701A6FE5A01A6FE5A85FE840003009BFE9704880628002C0033003A00BC408D7D087E16 -70197620702C7A36060E16012B1B16122B230D350D3C163C24352B430D4A164C24432B5A -08532053335A356B0865206529632B6A30643A171D40090B371D382E11221D2226471B18 -312D1227373400030A067F1E011E050A11470A05060F3C1F3C0221210334207F00010031 -201818063F094F09020900112D1B1E263706031E0930064006700603062F5D33ED173932 -2F5D12392FED2F5DED12392F5D002F3333ED2F2F2F5D121739ED33332F1139392F2B3130 -5D5D011406071123112E012735331E01171E0117112E01272E01353436371133111E0117 -15232E0127111E01171E0125110E0115141601342627113E010488F2C47684E855101362 -2E348B4F28441DA38EE9D17665D4480E4BA3851E461A95A3FDD46B926C02007584788101 -7C9BCD13FE960165013127C60E351113210301B1080F0829A57994CC110110FEF2022C1D -C42E4709FE51051105209CE8019D08655A5B5CFE585E5719FE620C6200050095FFE30807 -05ED000B000F001B00270033009C40720908060A0918061A0F351808170A1818171A2908 -260A2918261A460D480F4035560D580F680E13791F7625792B76310425512F034F030203 -031F5109020F030E082B51201940190219193151130A4F0C400E020C0E2E2A0016011616 -282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D123939ED33 -2F5DED2F2F5D003FED332F5DED3F3F3FED332F5DED5D3130015D01140623222635343633 -321625012309011406232226353436333216013426232206151416333236013426232206 -1514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6BAFABB59 -64665858666459049359646658586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADC -DDE0DADA01B8AC8888ADAD8787FE17AC8888ADAD878700030073FFE1061305F0000B0018 -004500E1406F090F190F3C0C3015301D352D3E3D4F1A471D4F44791C0B6A25603F7B0576 -087B0F761D7A25703E703F090508062A06371408161D142A1437153F290C2A1D26373008 -300A4008400A490C41144F1C431D46204C21412D413C5108590D5B25690566086B0F601D -1E3F0C161D20231903B8FFC0403B12173703AA190D2C093E05233502163F230A1E082C0D -3E032F00143806142F3F0C4513201D2F38041A26001E011E1E45140D1A011A1A13152673 -4610F6ED332F5DED332F5D11121739111239392FED2FED121739003F3FED3F121739ED2B -2F12393912393931305D5D015D013426232206151416173E0113010E01070E0115141633 -323601151406070123270E01232224353436373E01372E01353436373E01333216151406 -070E0107013E0137362635031871585C744F836265C2FE221F3E1F1C24AB9D5DB7016B32 -3C017AF6E573F07FD0FEED34232368356E61353532A161ADD6181D20765E01730E0E0102 -0104A75F6D7B594B744F2387FD0001D20F312A276E4592B35B02AE6060F06DFE90E08E71 -F3C55C86312F531F48926F437932303CAF862C6F2C315A20FE96286034388A30000100A4 -03D10182061400030015400A020203010F0501002C032FED5D003F332F31300103230301 -822B882B0614FDBD0243000100B5FE64030F061400150048403709010907190119072803 -28054F01480348054F075F015F076F016F077F01780278067F07120701010C7A04010830 -000100000F1F04881610F4ED332F5D3C5D003F3F3130015D012326021110123733150E01 -070602151412171E0117030FE5B1C4C4B1E551933F3C4B493E3C9A4DFE64CB01E0012D01 -2D01E0CB0A49BF7F7BFED8A4ABFEE4807BC7450000010093FE6402ED06140015004E403D -060306131503151326012603261326154701400340134715500350136003601379007602 -700370137614151201040C750001123F040104040B1F00921710F6ED332F5D3C5D003F3F -3130015D0110020723353E01373612353402272E01273533161202EDC4B1E54D9B3B3E49 -4A3D3F9351E5B1C4023CFED3FE20CB0A45C77B80011CABA401287B7FBF490ACBFE200001 -00A70276047106140011009040094F1301114009103708B8FFC040580910375B025B0554 -0B540E6B026B05640B640E7B027B05730B730E0C01060F0A0B0E08110502060C064F0450 -0402040A0F0C01040C010F131F130200110D4010011008070C4F090109100E020304050B -060D2809700C010C2F5D33ED1739322F5D1239392F5D1239395D003F335D332F5D331217 -392F332F3331305D012B2B5D01072513231305272D013705033303251705047140FE9606 -8105FE9741017DFE8341016A068107016B40FE8403776ED5FE980168D66ECFCF6ED50167 -FE99D46ECD00000100D2001B05BA04FD000B0039402303AC01045408AC0A0F070107400D -01300D400D0200AB0A800101012A05AB07400401042F5D3CE4FD5D3CE45D5D002F5D3CE4 -FD3CE4313001211123112135211133112105BAFDDFA6FDDF0221A60221023CFDDF0221A0 -0221FDDF00010093FE8E023F011D0003003540261A012A012B0235003902450048025500 -590264007400C5030C0202035604000004021A0202022F5D332F0010F4322F3130015D09 -012313023FFEE692AE011DFD71028F00000100990231030902E600030020401401420F02 -01020F054F004F055F005F05050000022F332F5D002F5DED3130012135210309FD900270 -0231B500000100FD000001EC011D00030016400C02560108002D2F013F0102012F5DED00 -3FED31302123113301ECEFEF011D0001FFE2FED0035C0614000300364025030100050116 -01250138004900440156016701770186010A011202032F02010200010000022F332F003F -2F5D31300187ED5D87C009012301035CFD33AD02CA0614F8BC07440000020089FFE1048F -05EF000B0023004140303601390B340C3B123B18341E4501490B440C4B124B18441E0C15 -4909022149030A0F21009E250F251F25021B2106982410F6ED5D10F6ED003FED3FED3130 -5D011002212002111012212012013E01353426272E01232206070E01151416171E013332 -36048FFBFEF8FEF4F7FA0109010CF7FEF92319192423795F5E7B24221916242179645E7C -02E9FE6FFE89017C018A018D017BFE7FFCB551DB9A98E04E4D4E4E4F4AEE8E9CD2534E52 -4E00000101160000043C05D6000F003A4023054606060C030E034801080F111F11020502 -1F0F010F0F0C0E20023F036F03700303032F5D33ED39322F5D2F335D003FFD323F332FED -3130290135211121353236373E0137331121043CFCDA0136FECA3F90252E35049B013098 -03E6881514194D41FAC2000100A10000049105F000200097407B501F601F020503061116 -03151124113B05380D350E3F1D3F1E391F4B05480D450E4F1D4F1E491F5F035D045D055B -0956115F195E1B5D1C5F1D5F1E6A036406651162156F1E700274117F1A7F1C7F1E25000F -100F2D082F1C300F400F060F0F0B4A1302021F4A01081F0208211616209E220F221F2202 -101002992110F6322F5D10F6322FED1239003FFD323FED332F5D31305D015D2901353E01 -373E013534262322060723353E01333204151406070E01070E0107210491FC1069D35BC0 -8E99895BD4650A47ED6FE501042B2A27694B6BE4630321D15AB459BADB7F74834042D223 -3ADDBD5593423E784969C554000100A7FFE1047C05F0003D009540700B0B052F1A0B152F -290B262F293C3C0B35143122342F4A0B45144322432F56015905590B552F6A0B662F6A3C -780B762F74357B3C1A343A443A023B3A1E491F012D112D022D2D294A1F0931020F0D1F0D -020D0D114A090A2321371E2E1621032E1E3A37040C03A03F0F3F1F3F020C9A3E10E65D10 -E611173910ED2F2F2FED003FED332F5D3F1239ED332F5D2FFD39395D31305D011E011514 -06070E012322262735331E01333236373E01353426272E012B0135333236353426272E01 -2322060723353E01333216171E0115140607151E01040E303E4A434BCB797CF04D0F55E6 -6B3F8E2C2E2D332D2D804A5A4698B52E292B623E5FD65F0A47ED6F6DA643484AAF77307C -02CD2B826766AA3F46433B23D1384A2A292C6A5150691E1F17A67F7A36511A1A14443ED1 -233B282C30885B7CB9180E0833000002004D000004B305D1000A000D00684041040D140D -240D340D440D700D060C0D480606070C0607090D4901050503070303083F0A4F0A020A0F -0F1F0F02070C04200A090D064F060101010F061F063F0603062F5D332F5D12393333ED39 -395D2F5D003F3F12392F3CFD321239393130018710FD04C0015D01231123112135013311 -3321110104B3DDC0FD3702D1B8DDFE63FDBF01A3FE5D01A3E60348FC7202A0FD60000001 -00BBFFE1048505D1002A0070404E0A081A082B083D0835113D164B0844115A0854296A08 -7A080C1D1D1A490F251F2540250325214A25061E020F0A1F0A020A0A0E4A060A2022204F -1D011D142100201D09009F2C0F2C1F2C02099B2B10E65D10E611393910ED2F5DED2F003F -ED332F5D3F1239ED2F5DFD322F31305D011406070E012322262735331E01333236373E01 -353426272E012322060711211521113E01333216171E0104854C4248C7837AE24E0E52DC -6A4785342C2D352F34955C58A33B0380FD412B5A2179B64C505801D968BE41464B3324D3 -344928322B784F4D6A20261F180C02FFAFFE740404293437AE0000020089FFE104A705ED -0022003700644044060D160D3925333133374925423143375F01560D5020502165217531 -0E1A0329491D1313174A1D030F023549030A1A2C2F122321001209009C390F391F39022F -2109983810F6ED5D10E6113910ED2F123939003FED3F1239FD322F2FED123931305D0114 -002322262726023534123736243332161715232E01232200073E01333216171E01073426 -272E01232206070E01151416171E0133323604A7FED5D96EB445565D555D580116B93B50 -290A1C713BD7FF001554A36B5F914C5859CB373F2E703D55924D020241392E6B3F91A601 -E3E3FEE14443530112C1C6013277717F0A0DBF0F1BFEF3E5333523353DBA8D5D7A2D2014 -282A16291F9EB7352C29B1000001009A0000049505D10006004F403209010A0224014801 -4B0258027903070301000120020203000002034A050302080F081F087B02030300020204 -0F00010000042F332F5D12392F12395D003F3FFD11392F3130018710ED87C0015D090123 -012135210495FD5ED602CDFCB003FB04F2FB0E0522AF0003007AFFDE049C05F300190028 -0037009440702D2B3415332234273433441541224427453350155B195A1B5A1F54225F2B -592C5F31543354376008620E6212621960236027760E76127B2C86121DA926A62F022616 -0A2F04031D4710023548030A1A200013011313002F0A0D292100162620009D390F391F39 -0220210D0D322106973810F6ED332FED5D10E411393910ED11393911332F71ED003FED3F -ED1217395D31305D01140023222435343637352E0135342433320415140607151E010334 -26232206151416171E01173E01133426272E01270E01151416333236049CFED3E4F2FEE1 -908378730114D5DF010A7E7A8C94EDA5807EA15152258B42634C1F51762F705D5A6DBA8F -92AF019FC1FF00FAC37CC93B06409872A8E0D6A565C337063CB0024F6B7F786648692912 -3A13428EFD735C6F3816262231A86A87B09600020071FFE3048F05EF0022003700644045 -0804190429043C253C2B352E4C254C2B432E58045F175D18521B70017B250F111D324914 -294914061D020A0A0E4A060A351109232100091A009E390F391F39022C211A963810F6ED -5D10E6113910ED2F3939003FFD322F3F1239ED2FED123931305D01140207060423222627 -35331E01333212370E01232226272E01353400333216171612073426272E012322061514 -16171E01333236373E01048F595A5BFEEEB9345C240A1D6A41DDFB145DA4615C954B5859 -012CD86CB845555CCA40382F6C3F90A736402D6C424EA04601030342C3FEC270727C0B0C -BF0F1B0109E9383024343DBC83E4011E434353FEFBA49BBC342D27B4A35F782D1F152A28 -15290002015A00000249045D00030007001E4010015602050656050807002D0600010101 -2F5D3CFD3C003FED3FED313001231133112311330249EFEFEFEF0340011DFBA3011D0002 -00E6FE8E0292045D00030007004C40370A050A061A051A062A052B063504390645044806 -5504590664047404C5070F01560205060607560806063F044F04020404002D000101012F -5DFD322F5D332F0010F4322F3FED3130015D01231133130123130249EFEF49FEE692AE03 -40011DFCC0FD71028F00000100FE004D058004CB0006005E401073050105045403020306 -540001002C00B8FFE240260A1837031E0A1837031F002F0002030F000100400801300840 -080204050100004001500102012F5D332F1239395D5D002F5D335D2F2B2B31304B535887 -10FD8710FD05C059015D250135011509010580FB7E0482FC72038E4D02017C0201B4FE75 -FE75000200F5016A059703AE00030007003540200554060154060F020102400901300940 -09020405012F004000020000400101012F5D332F5D1239395D5D002F5D33ED2FED313001 -213521112135210597FB5E04A2FB5E04A2030EA0FDBCA0000001010C004D058E04CB0006 -006040107C030103045405050602540101002C01B8FFE240280A1837051E0A1837051F01 -2F0102050F010101400801300840080203050100002F013001400103012F5D332F123939 -5D5D002F5D335D2F2B2B31304B53588710FD8710FD05C059015D09013509013501058EFB -7E038EFC720482024EFDFFB4018B018BB4FDFF00000200A0000003ED05EF001C00200069 -40470F221F2224140335184F024F034F0544185C0554186904691064187418741C0C0870 -090109061A1E161612341A02081F551E08202B1F1F061F7F0901090F1509172000010000 -172F332F5D1239ED2F5DED332FED003FED333FFD322F111239395D2F31305D015D011406 -070E01071523113E01373E013534262322060723353E013332160123353303ED46393892 -52B34197303A4099796CC1380A46D760D7F9FE75CCCC047362993B39642FE1013125582D -346F56716F4423CC1B2BD1FAE2D3000200B0FF1E074E05EF0042004F00D640A206020F04 -0B050A090F1B0E1C0F3F0F4016021F041C051F1B1F1C142214271F3F1F4125022C042C05 -2F1B2F1C242220272F3F2F414740444856481D0A05052759496E09650D691A6821652766 -3F664174167B1B70277439743B0F120511081247520E1440151B371404044D53082D2D2A -510E083D311E51313D020F2D012D051143122D144A123F0B010B0F512051021829140B37 -0F0020007F000300002429376B5010F6ED332F5D123939ED5D2F5DED2F33FD32322F5D00 -3F33ED2F123939ED332F2FED332FCD2B2FED331239392F31305D015D0114020721270E01 -23222635341233321617353311333E013534022726242322040706021514121716043332 -3637150E0123222427260235341237362433320417161201112E01232206151416333236 -074E514BFE481B4A8858A8C9F6AB4970419FF32A2B5B5858FEFCA5A0FEF75F606D685F63 -010A9D56B75461A859BAFEC2727380867474013EB5C401346A6A71FD8F3F64398192747B -438602978BFEFC6B743C40FEE4E3010E212130FCB64BE159A4010C606067746262FEEF9A -A5FEEF61656716188E150F7F72730142C3B9013F7575867C7070FEC5FE4002061D19B4A6 -A3A73E000002001A0000055E05D10007000A009840694009014A0645070209090A080287 -01010114000700090A0387040104140505067C067307020334300A400A700A030A090A06 -03017A050105080F0C0106070903050C002400390042005A006A0074000700006E0C0F0C -010A052B0536054D05550565057B050705640B10E65D5D10F62F5D1217395D003F5D3C3F -39392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D005D2123032103230121 -130901055ED392FD7C92C9021E01087CFEFBFEFA019FFE6105D1FC7802DBFD25000300C8 -0000052B05D100150024003300524033050C150C270C550256157F190612112C341E1E07 -1D3408032D3407081615122C0F0F0725150071350F354035021E2C14076C3410F6FD325D -10F6ED12392F1239ED003FED3FED12392FED39393130015D011406070E01232111213216 -171E0115140607151E01013426272E012B0111213236373E01133426272E012321112132 -36373E01052B544754C99BFDF001B9A3A24A524A6C5A97AEFEB324282F8663EC01005D6E -2F2F277F3647308962FEC9010682A635383401CA6FAA37423805D118262B875E6A952D08 -1FCB0204364A171B0DFE52131E1E5FFD9A5A6A25190FFDD61B24276400010073FFE50546 -05EC002A0061404A05010D09061416011B0914152515361543145B08580A580E5B105B28 -600361147002760F70141316161A3412022A2A2634060A1600712C0F2C010F2C1F2C2F2C -3F2C6F2C0520150C682B10F6ED5D5D10F63C003FED332F3FED332F3130015D250E01070E -012322242726023534123736243332161715232E01232206070E01151416171E01333236 -373305463759483D8F56A2FEF762606C68625F010DA478EF920F7BF28A71B547454D5543 -46BB688FFA6D0E6C182A17131B5B615F0125C2B801226461663A49EB675E494D4BE5969D -E2474A476262000200C8000005B205D1000E001D003A4027391249126902680D04163408 -03173407087600010F1500741F0F1F2F1F401F601F041714076C1E10F6ED5D10F6ED5D00 -3FED3FED3130015D011402070E01232111213204171612073426272E012B011133323637 -3E0105B2B19366FBCDFE880174DA01015998AACF7A7958C68ABABA8FD5596F6F02E7CBFE -B65B3F3805D13F375FFEC4D6AFF0453227FB832A3947E800000100C80000049D05D1000B -003B402309350006100602060601053502030A350108040008010800730D0F0D01060914 -016C0C10F6FD325D10F63C5D3C003FED3FED12392F71ED31302901112115211121152111 -21049DFC2B03D5FCF1030FFCF1030F05D1B0FE68B0FDD700000100C80000047F05D10009 -0034401E053502020701350803070800034F0B02030300640B0F0B01020514076C0A10F6 -FD325D10F4322F5D003F3FED12392FED313001211121152111231121047FFD0F0287FD79 -C603B70521FE5CB0FD3305D100010073FFE305A205EC00240069404907010906060E1D06 -130E210E350E4901410E510E6506650B630E740E741C0F223540230123230C0310101734 -0C021D34030A7609012210220910216C0075260F264026021A1509682510F6ED5D10F6ED -3312392F2F5D003FED3FED332F1112392F5DED3130015D25060423222427260235100021 -32041715232E01272E01232200111000213236371121352105A27AFEDF87AEFEDE666770 -01A1016C7F010999121F763945AF6FFAFEDD0130010660BF48FE7102536E385360606101 -23C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAE00000100C80000053B -05D1000B003A4023033500081008020808050A070301050809021400780D0F0D400D500D -03080314056C0C10F6FD325D10F6FD32003F3C3F3C12392F71ED31302123112111231133 -11211133053BC6FD19C6C602E7C602D9FD2705D1FDB8024800010089000002D505D1000B -002E401909043206030A033201080D6D0A080B5A0A140305025A036D0C10F6F43210FDF4 -3210E6003FFD323FFD32313029013533112335211523113302D5FDB4C3C3024CC3C39804 -A19898FB5F000001002CFFEB02EA05D100150030401C6A017C01021233150307070B3403 -09131312140077170F170106651610E65D10F6ED332F003FFD322F3FED31305D01140623 -22262735331E01333236373E01351121352102EAEFC930A0360B29783F5C6D1A1B0FFEC5 -02010183C4D4110CB90E1E2A2728744C03659E00000100CD0000057505D1000B00A74075 -190956015C09030509280938094A0968098A09D809070F010A091E0119022A012B093901 -3909350B49014909450B5C01650B72007908100202038801C8010201B3000B000809B302 -0B0A030A840A010802050A07030105080B02030A0A0F0D20003000400004500001006E0D -400D01080314056C0C10F6FD325D10F65D5D322F123939003F3C3F3C1239393130015D87 -10C0C07AFD1804C00187107AFD5D1808C0015D71722901010711231133110133010575FE -FFFDB394C6C602D3F0FD6702979EFE0705D1FCF70309FD44000100C80000047605D10005 -002040110203043501080000070F07010414016C0610F6ED5D11332F003FED3F31302901 -113311210476FC52C602E805D1FADF00000100C8000005F605D1000C00794059560A0138 -023805360A6F0260036F05600A7F0270037F05700A0B5509560A5A0B0364037403750903 -050A020309000410043404440454046A04060404070B0903010708090A0B030502140078 -0E0F0E1F0E500E030513076C0D10F6ED5D10F6ED111739003F3C3F3C12392F5D12173931 -30015D72005D722123110123011123112109012105F6C6FE6276FE65B9010E018D018001 -130503FC970369FAFD05D1FCC3033D00000100C80000053805D10009006B404E0C071F07 -34074507510761077107077606010F0102061F0115063406440653066B0160067F017006 -0B0C010406025A01550602020701080603010408060102071300780B0F0B400B02021304 -6C0A10F6ED5D10F6FD113939003F3C3F3C12393931300172715D5D005D21230111231121 -0111330538F5FD3EB901330284B90534FACC05D1FB4004C000020073FFE105DA05F00017 -002300564042040004060B0C0B1217001706190C19125701570553075F0B580D58115F13 -53171076097915021B3415022134090A18150373250F25010F251F253F25031E150F6824 -10F6ED5D5D10F6ED003FED3FED5D3130015D011612151402070E01232224272602353412 -373624333216131000232200111000333200051E5B6163595CFBA19DFEFF5A5A61605C58 -01059AA0FF47FEFCE1E3FEFD0108DEDE0107052664FEDEB8B8FEDD6165666863630120B9 -B6012167626869FD610122013BFEC5FEDEFEDBFEC9013700000200C80000049605D10010 -001F0056403D3A143D1D4B144B1D500E540F650F071934000710070207070918340A0309 -080F211F21021115200030004000700004006F210F213F2102190714096C2010F6FD325D -10F45DED5D003F3FED12392F5DED3130015D011406070E012B01112311213216171E0107 -3426272E012B0111333236373E010496453E4DD2A0C6C6019486BA48555DCE3637307B5E -C4A778962F2F27040F63A93E4D4DFDD505D12D3039AA874D72241F1BFDAD2B2F306A0002 -0073FE7705F805F000250031008640610B0C0B120418041D190C19121518161D5C0B590D -59115C1353175719571D742010551F651F751D742D0425252135030B29341E0609760979 -150215022F34090A1E130600337326151B0009061D030F1B73330F33010F331F333F3303 -2C150F683210F6ED5D5D10E61117393210EDE62F2FED003FED3F5D123939ED3FFD322F31 -305D015D010E01232226270E01232224272602353412373624333216171612151002071E -01333236373303100023220011100033320005F83C753DAED309182D159DFEFF5A5A6160 -5C5801059AA0FF595B61DFBC0464842971181BECFEFCE1E3FEFD0108DEDE0107FE930F0D -BFB204036863630120B9B60121676268696164FEDEB8FEEFFE8A4B727E190A039F012201 -3BFEC5FEDEFEDBFEC9013700000200C80000059805D10010001F007A405408011D012D01 -3A01391D450F4814481D5A01560F59146F016902600A650B7E01750B110201B300100010 -071A34400201020205183407030105080F211F2140210311150F0D010D0D102000010019 -031400056C2010F632FD322F5D39392F5DED5D003F3C3FED12392F5DED12393130018710 -7AFD18C0015D29010121112311213216171E0115140607133426272E012B011133323637 -3E010598FEFFFE0EFEE9C601A187B448515BA28E612D342B7650E9C85E8C312D2B0250FD -B005D1232D339B77A1D93701A34063221D17FDCE212D2A6D00010086FFE5050205EC0030 -009A40790B09031F00231B08141F29082818241F242F390836103813351F362A4A084510 -4913451F4A27442A5802551B551F552D6B19661B651F662B602F7B16701F7020742A742D -86122309400E103708400E103700111A28041D06212125341D020A0A0E34060A2128151A -111500211A090074320F32703202096A3110E65D10E611393910ED2FED2F003FED332F3F -ED332F1112173931302B2B5D011406070E012322242735331604333236353426272E0127 -2E013534243332041715232624232206151416171E01171E010502514950D596A1FEFF85 -0E71012882B8CD61634BAF62C6BF013CF39D0106650E55FEEB919FC1607940EC52A6A801 -A957AA3B40483C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E28 -152CB20000010000000004EE05D1000700274018010435060303080F091F094F0903005B -0114045B4F0501052F5DF4FDE45D003F3FFD323130012111231121352104EEFDECC6FDEC -04EE0521FADF0521B000000100B2FFE1052905D1001D003A4029231223183D033D094C03 -4C0977137717081C0D031534060A1B1400761F0F1F1F1F401F030F140C6B1E10F6ED5D10 -F6ED003FED3F3C31305D011406070E01232226272E01351133111416171E01333236373E -01351133052947514DCE898CD0475147C621272C976A6B962D2721C60256A2F1504C464A -4852E8A9037BFC7B798C394142414239936D038A0001001A0000055E05D10006008C4066 -470148020205040507065706860603061400000105070457048604030414030203080144 -014B02580273017C02060005027503010303020845004A0302020103040024003A005A00 -6A00740006006E080F08010F08010B032B033503550365037B030603640710E65D5D5D10 -F65D1139395D003F3F5D1239393130015D8710FD5DC08710FD5D08C0015D090121013309 -01055EFDE2FEF8FDE2D401D301D305D1FA2F05D1FAE2051E0001005C0000078D05D1000C -00BB409E470367037903030D010B020404020505080C0B1701190318051908190B290329 -08290B3B023903320434083C09330A3A0B4B02440444084C09430A4B0B55015A0255045A -0557075909550A65016A0265046A056A09650A7F02700473087C09720A7C0B2E0C140001 -000714060506030301000300090205080B03090C0602060302083B0034064B0044067A00 -75060600720E1F0E3F0E5F0E7F0E0406670D10EE5D10E65D003F3F1217395D5D31300187 -10FD8710FD015D005D09012309012301330901330901078DFE7DDFFEC7FECEDAFE76CB01 -390134C90137013705D1FA2F04D4FB2C05D1FB2A04D6FB1E04E2000100440000053805D1 -000B00C2409775017A07020A04050A1A04150A2C04230A37094D04420A58035F04580557 -09500A570B68036D0468056709600A670B7B04730A170B14000100091408070803140201 -020514060607050407010A0B0602080302080F0D01060216022602360247020509081908 -290839084808050208070A04010406020D00160026003600470050000600660D08090619 -062906390648065F060606660C10F65D3210F65D321117392F2F5D5D5D003F3F12173931 -30018710ED8710ED8710ED8710ED005D015D09022309012309013309010538FDFE0201E5 -FE6AFE60D80207FE05E40191019A05D1FD20FD0F0265FD9B02E802E9FDA3025D00010006 -000004E605D10008007C405D2C012C04280735074001400440075007680470070A160619 -08270628085606590865066A08080814000100061405040502000D050200010004000703 -040107080402050302080F0A1F0A4F0A7F0A04005B01070114045B4F057F0502052F5DF4 -ED3910E45D003F3F1217395D3130015D8710ED8710ED015D005D09011123110133090104 -E6FDF4C6FDF2DB0197019B05D1FCBCFD7302780359FD66029A000001007E0000050805D1 -000900594036030708060813082608360846085608660876080808B30202030707033506 -03020208350108040803020707040209730B0F0B0102690A10E65D10E61139392F123939 -2F003FFD322F3FFD322F31300187107AED5D1887C0290135012135211501210508FB7603 -91FC910452FC6603B0B80469B0B3FB92000100EFFE7802F706140007001C400E05520201 -0652010B030000061F012FED332F3C003FED3FED3130012111211521112102F7FDF80208 -FEA6015AFE78079C8FF9820000010046FED003C006140003003A40280301020A0119012A -0138014B01590168017801890109011200032F000100030100006002700202022F5D332F -003F2F5D31300187ED5D87C00123013303C0ADFD33B0FED00744000100ABFE7802B30614 -0007001C400E045207010352010B031F000005012F3C332FED003FED3FED313001213521 -1121352102B3FDF8015AFEA60208FE788F067E8F000100BA02AA05D205D1000600474034 -3B0133034B0145035F0150036F0160037F0170030A69027B02020102050F031F033F035F -036F0305030305030000004F000200042F335D2F003F332F5D12393931305D015D012309 -0123013305D2C6FE39FE3AC5024D7E02AC0273FD8B0327000001FFFCFED4051AFF4C0003 -0011B6015002000005022F11332F002FED313001213521051AFAE2051EFED47800010154 -051602FA068C000300244016480159026902790204500360037003030303010000022F33 -2F002F332F5D3130015D0123013302FA95FEEFF30516017600020068FFE1041D04780026 -0033007A40540C0A0423190A152304590E511E5C2C690E601D6F2D7B0A7A14701D7B2C0A -0208283D3011401102111120084F1C011C1C183F20043141080A01080F1D011D1127021A -001D0B0091350F351F353F35032E1B0B853410F6ED5D10E6113910FD32322F5D003F3FED -3FED332F5D1112392F5DED123931305D015D2123350E01070E0123222635343637362437 -353426272E012322060723353E01333216171E011503110E01070E01151416333236041D -BB1955282F7A5297D26D6566011EA42D2A28703D4AB6610A37D06576AF403F42BB56E944 -5164747763A477113D12171FC89B7F9D2D2D20081D40541817102725BF0F24272F2E926C -FE1D013705141317615560614D00000200B9FFE10490061400130020005140393402350F -3B1530204402450F4B154020571267127F087B1C0C0E0906174211040C011E40060A0B08 -141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED3F3FED123939 -31305D011406070E012322262707231133113E0133321203342623220607111E01333236 -04904F4347AA665F8E450CB0BC4FB26FC6E5C2849352A8485073499CB102378CE04C4F4F -2D26340614FDD44153FED0FEE6C8CF4738FD80241CCD00010069FFE703F3047700210057 -40410F234F23022B01220E2A1624183A01350E3A16351849014F0A440E4F164118590155 -0E6901650E7A01730E131010143F0C0421211A3F03090F008D23171B09852210F6ED10F6 -3C003FED332F3FED332F31305D015D250E01232226272E013510003332161715232E0123 -2206151416333236373E01373303F35EA95F79CA484950012DF760B94D0A56B757A0B9B5 -A439762F2948150A462D32474848DC93011201383627D14348D7D0CAD91E18152F110002 -006CFFE10443061400130020004B40333C1A301C38204F1A421C48205806680670100912 -0102110518410E0401081E42050A1114021A0092221F223F22021B1B08852110F6ED5D10 -F6FD3232003FED3F3FED1239393F31305D2123350E01232202113436373E013332161711 -3303112E012322061514163332360443BC51B067C8EB514544B56158884BBCBC4C78479E -B0889650A475464E013401118EDE4E4C50252701E4FAFF0281221ADCCAC7CF470002006A -FFE60460047C0018001F005A404026042B0D30043B0D3C1E43044B0D4B1E5A0D50166A0D -6017780D7A1E0E013C1F1F0F1C3D15040B0B073F0F090C0C191A008F210F211F213F2103 -1F011B12852010F6FD325D10F4ED332F003FED332F3FED12392FED31305D01211416171E -013332363733150E0123200011100033321215272E01232206070460FCC93E36348F5672 -E7310A5FC66DFEEAFEC8012BF4E2F5B701939697B30C021B67993130305B2CCD2836012D -011501120142FEF8F32A94A2B2840001004400000312061E0018004B402D081439147505 -030000043F15000B0E3E0811050D080009400902090F090E00080B1A0F11000E400D1037 -0E891910F62B323232FD322F12392F2F5D003F3F33FD323FFD322F3130015D01232E0123 -22061D012115211123112335333534363332161703120A1F6426796D0153FEB3BC7F7FC6 -BB3F652A055E09136B8C269EFC4103BF9E25C7D50C080002006CFE590443047C00230030 -006E404E3D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C05 -702011220512211528401E0407070B40030D2E4115070F0601062124121A000618009232 -1F323F32022B1B18853110F4ED5D10E4113910FD32322F5D003FED3FED332F3FED123939 -3F31305D2510002122262735331E01333236373E013D010E01232202113436373E013332 -1617373303112E012322061514163332360443FEFEFEF459A9520A2EC864607E23231E55 -9B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A57FFEE4FEF61917C012352E29 -276E446644430121010790D14C474F272830FCD60261221DD0C6BCC23F00000100B90000 -045F061400160037402203151615751503100D084213040E01010D08021A0091181F1860 -1802100B1A0D881710F6FD325D10F6ED003F3C3F3FED123931305D2123113426272E0123 -22060711231133113E0133321615045FBC1218195E4B4DA84DBCBC58BC63B5BE027C4D87 -262A294C3BFCBE0614FDCD4952DACD00000200AF0000018305DB000300070030401E0144 -02400B0D370203060505087F090109920060041A01607F050105880810F65DE4FDE4E65D -003F3F3F2BED313001233533032311330183D4D40CBCBC0518C3FA25045D0002FFC2FE59 -021505DB000300190049402E0A051C0502014402400B0D370203163E19050B0B0F40070D -4F1701177F0A010A0160161A00600A1770190119921B10F65D3232E4FDE42F5D2F5D003F -FD322F3FED3F2BED31305D012335330314062322262735331E01333236373E0135112335 -210215D4D40CC8A828832C0A1C5F2D485816160DE901A50518C3FA0AC4C8100CB30B1C28 -2828715103849E00000100C1000004AF0614000B007D40512802D801DB090309010F0D1F -011D021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A -0802050A0507010105080B02600A700A020A0A00000D200D400D0208031A05890C10F6FD -325D11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0 -015D7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B0614FC -1A022FFDFC00000100BB0000017706140003001E4011020101087F05010592001A7F0101 -01880410F65DFDE65D003F3F3130212311330177BCBC0614000100B900000717047C002B -006A4048032403291324132944204426B72A07B62501251F1D1C0817422822041D050110 -1C08402D011F2D302D402D502D702D05001A016110250B1C0F1A101F1A1A1C611F104010 -801003102F5DF4FD3210FD11393910F4ED5D5D003F3C3C3F3F3CFD32111239395D31305D -2123113426272E01232206071E01151123113426272E012322060711231133153E013332 -16173E01333216150717BC0D151756514F9E4F0304BC0D151756514D9B4DBCBC58AF6372 -9F2772BC6BB8AF027C4886282B2C4F3D173D1EFD35027C4A85282B2B4C3BFCBE045D7C49 -5260556055DFC800000100B90000045F047C00160037402203151615751503100D084213 -040E05010D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3C3F3FED -123931305D2123113426272E012322060711231133153E0133321615045FBC1218195E4B -4DA84DBCBC58BC63B5BE027C4D87262A294C3BFCBE045D7C4952DACD0002006AFFE10471 -047C000B0017003E402C3B0E341034143B164B0E441044144B16080F3F0904153F030A0C -1B0090190F191F193F196F1904121B06851810F6ED5D10F6ED003FED3FED3130015D0110 -002322001110003332000334262322061514163332360471FEE8EBEDFEE90117EDEB0118 -C2AA9799A9AA9896AB022EFEEFFEC4013C01110111013DFEC3FEEFD9D3D3D9D2D9D70002 -00B9FE640490047C00130020004D4035320239153220430249154220561267127E087C1C -0A0E0906174211040C051E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD -32325D10F4ED003F3FED3F3FED12393931305D011406070E012322262711231133153E01 -33321203342623220607111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F -51A44B5073499DB0023C88E14E4A512628FE2C05F9753F55FECFFEECCAC84639FD87241A -D4000002006CFE640443047C00130020004B40333B033D1A301C3A204C034B1A461C4A20 -701009120502110418400E04010C1E4205091114021A0092221F223F22021B1B08852110 -F6ED5D10F4FD3232003FED3F3FED1239393F31305D0123110E01232202113436373E0133 -321617373303112E012322061514163332360443BC57AC64C7ED534442B2635A8B480CB0 -BC4E7846A3AA899352A4FE64021A4B490133010E90DD4B4950282730FCBF0278231CDDC2 -C4D34700000100B900000372045D001200384021000D100D200D030C090F000004430A0F -05090800001440147014020C071A09881310F6FD325D11332F003F3F3CFD322F11123931 -305D01232E012322060711231133153E013332161703720A2A4F3657A24BBCBC70AB5931 -2C2C03900A094D3DFCE7045DA55A4B0507000001006EFFE503D704780033009340710602 -091B1502191B26092A2432093C2442094C245E055D165321562F54326F056C166020642F -6532147A057F1174207928742B8A01880D851A872894019A1B0B000E1829041E03802201 -2222263E1E0407070B3E030921291B180E1B00211807008E350F351F353F355F357F3505 -07863410E65D10E611393910ED2FED2F003FED332F3FED332F5D1112173931305D015D01 -14062322262735331E0133323635342726272E01272E01353436373E013332161715232E -0123220615141716171E011716171603D7FDDB7CCF460A59DA647C8C26266C288135937B -393A38AD6B64CD440A48CE63678E2B2A5E34812B834747014299C43B23D3434F50564222 -221809180E27976E457A302F373123C935494F4E452323160C180A1E494A0001003EFFEA -02FD059E001B0048402C0C051A052B05030B10073E0D0B0A051B1B173F03094F1D7F1D02 -0E008C1D080D101A0A0807400D103707881C10F62B3232FD322F10F6325D003FFD322F3F -3333FD322F31305D250E012322263511233533113311211521111416171E013332363733 -02FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A0A0E12B8CB02529E0141FEBF9E -FE0358632B28251B0900000100B1FFE10457045D0016003740220B0619077A0703020515 -09051142050A010814021A0092181F186018020B1A08871710F6ED5D10F6FD32003F3FED -3F3C123931305D2123350E01232226351133111416171E013332363711330457BC5FAE69 -B0C4BC101A1B565249AD4BBC7C4B50D7D002D5FD8455792B2C284C3B03420001003D0000 -047F045D000600864041260429063604390646044906062905390540055105600505061A -000100041A03020328002703380037034A00470375017A02080005027503010305020802 -010300B8FFC0401E0910370C001C006A007A0004008D080F080103031303650375030403 -820710E65D5D10F45D2B113939003F3F5D1239393130015D8710FD8710FD005D015D0901 -2301330901047FFE3CBDFE3FCC015A0157045DFBA3045DFC870379000001005600000636 -045D000C0088406D0D031D032C012A0229032504260524082B0B34013B0544014B055701 -58045905570B6D02620464086A09640A6B0B79017D02720474087B09730A7A0B1E0C1A00 -0100071A060506000910090205080B03090C0602060502080F061F062F0603008E0E100E -3F0E6F0E030006830D10F6325D10E65D003F3F1217395D3130018710FD8710FD015D0901 -23090123013313013301130636FEDDAEFEE1FEE3ADFEDAC4CD01179B011EC2045DFBA303 -5DFCA3045DFC9F0361FC9F0361000001003C00000480045D000B00DA408C090B1B011403 -14071B09270327073C003B0134033404340634073B093D0A4C004B014403440444064407 -4B094D0A5A0155035A0555075A09550B6F016003690560076F09660B230F0200083F0230 -084F0240087D02700808091A0A0B0A071A060506011A000B00031A0405040102050B0809 -06047A047506020605040809060106020D010502080B04040A00B8FFC0401C0910370600 -01008D0D0F0D010F0D1F0D400D5F0D040602040104820C10F65D325D5D10F65D2B321117 -395D2F5D003F3F5D1217393130018710ED8710ED8710ED8710ED005D015D212309012309 -0133090133010480EDFEC3FEC1DB01B4FE50ED013B013CDCFE4901ADFE53022D0230FE5A -01A6FDDA0001003DFE64047F045D0007008C404104063406440650066006700606090307 -0519031705460149035800570179030902071A000100051A040304490046040200030204 -05020C02680101010203030400B8FFC040220910370C001C004A006A007A0005008D090F -0901030413044504650475040504820810E45D5D10F65D2B1117395D2F003F3F12393931 -30015D8710FD8710FDC0015D005D0901231301330901047FFD74C9D0FE43CC0157015A04 -5DFA0701D20427FCC4033C000001005D000003E3045D00090056403A15083A0335084A03 -45085C03540860087F0370080A0707033E06050202083E01080408030207070402098E0B -1F0B3F0B5F0B6F0B7F0B0502840A10E65D10E41139392F1239392F003FFD322F3FFD322F -3130015D2901350121352115012103E3FC7A028BFD830367FD72029F8B03359D86FCC800 -000100ADFE78045906140025005640382F1D3A074A07562367237523063A1D4A1D021D1C -09533F0A4F0A020A0A01145112012451010B140F00400002000919201F0E000940050105 -2F5D33333CFD3C2F2F5D3C003FED3FED12392F5DFD39395D3130015D012322263D013426 -2B01353332363D0134363B01152322061D01140607151E011D0114163B01045996B3DFA6 -AB3333ABA6DFB39672887B9A89899A7B8872FE78C7BC95A9BF9CBFA995BCC78A7E8CAF8B -BD371837BD8BAF8C7E000001017AFE78022806140003001B400F0F054F05020201010B00 -1F4F0101012F5DED003F3F3130015D012311330228AEAEFE78079C00000100BBFE780467 -0614002500544034211235023112400240127A0C06131200533F254F25022525091B511C -010A51090B1B0009010900170E1F050509004F200120202710D62F5D33333C10FD3C2F2F -5D3C003FED3FED12392F5DFD39393130015D012322061D0114062B01353332363D013436 -37352E013D0134262B01353332161D0114163B01046733ABA6DFB39672887B9A89899A7B -887296B3DFA6AB3301F8BFA995BCC78A7E8CAF8BBD371837BD8BAF8C7E8AC7BC95A9BF00 -000100BB018B05D1039F001F0056404206030609091309191908170A1518191A3B083418 -4B0844185A035A0A550D541B5B1D60056E14611875047A147518170F1C54060C54061F16 -1F2A000001000F2A00102F33ED2F5DED002F3333ED2FED333130015D010E01070E012322 -26272E0123220607233E01373E01333216171E013332363705D102292D2E82645E925466 -5C325E6409A702292C2B8A605D935550663D676103039F63C04B4D584F667D40AFC464BD -4D4A5B4D68625BCAA900FFFF001A0000055E07500236002400000117008E002F0175001A -40130320113011401170118011050200110E060725012B355D350003001A0000055E0801 -0012001E002100DF40442B2040205A18551A501E55206918651A651E09180B170D4A0646 -125906561278027703082020211F02870101011400120020210387040104140505067B06 -74120216510CB8FFC0405D0D10370C033470210121212006120405001C011C0301050813 -114F0F500F600F030F191140095F096F0903090F230106090F1204050C00240039004200 -5A006A0074000700006E230F23010A052B0536054D05550565057B050705642210E65D5D -10F62F5D1217395D2F5DED2F5DED003F3C3F5D1217392F5DED2F2BED3130015D8710FD5D -C0C0C08710FD5DC0C008C0015D005D212303210323012E01353436333216151406071334 -26232206151416333236130901055ED394FD8094C90207596BCC9293CB69592C72565672 -7355567236FEFEFEFD019FFE61057F2C9F668FC2C28F64A32A012F56737455567373FBF1 -02CBFD3500010073FE59054605EC00410097406F0A20032B1C20152B250B222B3402330B -342B4302430B452B5D1F582158255A275E3F6102602B70027626702B160B0B1B0B022D2D -313429021A061D41413D341D0A101014320C0D0F0F172A0009100920090309091D234371 -2C0071430F43010F431F432F433F436F4305371523684210F6ED5D5D10F43CE41239392F -5DED332F003FFD322F3FED332F1239393FED332F31305D015D250E01070E01071E011514 -062322262735331E01333236353426270E01232224272602353412373624333216171523 -2E01232206070E01151416171E01333236373305463759480B1A120203BB9326772D091A -5B326A620202132B12A2FEF762606C68625F010DA478EF920F7BF28A71B547454D554346 -BB688FFA6D0E6C182A17030903133317A2AC0E0CA20A1C5056132D1402025B615F0125C2 -B801226461663A49EB675E494D4BE5969DE2474A47626200FFFF00C80000049D08010236 -002800000117008D001E0175000BB601000D0D020325012B3500FFFF00C80000053807C8 -023600310000011700D7008C0175000BB60100170A050925012B3500FFFF0070FFE105D7 -075002360032FD000117008E009601750018401103002930295029702904020029240F03 -25012B355D35FFFF00B2FFE1052907500236003800000117008E00620175001840110210 -24202440246024040100241E0D1D25012B355D35FFFF0068FFE1041D068C023600440000 -0116008DE300000BB6020036371D2625012B3500FFFF0068FFE1041D068C023600440000 -01160043E800000BB6020035371D2325012B3500FFFF0068FFE1041D068C023600440000 -011600D6E000000BB6020038341D2625012B3500FFFF0068FFE1041D05DB023600440000 -0116008EE000001E4016030F39703902020039103920394039040039341D2625012B5D35 -5D35FFFF0068FFE1041D0653023600440000011600D7E200000BB6020041341D2525012B -3500FFFF0068FFE1041D07B1023600440000011600DBD300000DB70302003A341D262501 -2B35350000010069FE5903F3047700380080405B0F3A4F3A022A012A0726252A2D252F3B -01390735253B2D342F4B014F2140254F2D402F590153256C0166257A017525150B081B08 -0227272B3F230417031A3838313F1A090D0D113D090D0C0C142A06061A2026008D3A2E1B -20853910F6ED10F63C1139392FED332F003FFD322F3FED332F1239393FED332F31305D5D -015D250E01071E011514062322262735331E01333236353426270E01232226272E013510 -003332161715232E01232206151416333236373E01373303F3214D1D0305B79225742D09 -1A583268620302101D1979CA484950012DF760B94D0A56B757A0B9B5A439762F2948150A -460F1F0913391CA2AC0E0CA00A1A4E58162E140204474848DC93011201383627D14348D7 -D0CAD91E18152F11FFFF006AFFE60460068C0236004800000116008DFD00000BB6020022 -21121825012B3500FFFF006AFFE60460068C02360048000001160043FD00000BB6020021 -20121825012B3500FFFF006AFFE60460068C023600480000011600D6F900000BB6020024 -20120025012B3500FFFF006AFFE6046005DB0236004800000116008EF9000014400D0330 -2560250202002520120025012B355D35FFFF00A000000246068C023600D500000117008D -FE830000000BB601000505020325012B3500FFFFFFEB00000191068C023600D500000117 -0043FE970000000BB601000505020325012B35000002FFF50000023C068C0006000A003D -40247A0174037A057406040201030505030905080800047F0C01000C92071A047F080108 -880B10FD5D32FDE4335D2F2F003F3F2F332F1239393130015D01230B0123133303231133 -023C978F8E93B2E313BCBC0511010BFEF5017BF974045D00000300050000022D05DB0003 -0007000B0041402702010744600401040A050908011A7F000100041A700501057F0D0100 -0D92081A057F090109880C10F65D32FDE4335D2F5DED2F5DED003F3F2F5DED3939313001 -2335330523353313231133022DBDBDFE95BDBDB5BCBC0518C3C3C3FA25045D00FFFF00B9 -0000045F0653023600510000011600D70700000BB6010024170E1525012B3500FFFF006A -FFE10471068C0236005200000116008DE200000BB602001919060025012B3500FFFF006A -FFE10471068C02360052000001160043E200000BB602001919060025012B3500FFFF006A -FFE10471068C023600520000011600D6E200000BB602001C18060025012B3500FFFF006A -FFE1047105DB0236005200000116008EE2000014400D03301D501D0202001D1806002501 -2B355D35FFFF006AFFE104710653023600520000011600D7E200000BB602002518060025 -012B3500FFFF00B1FFE10457068C0236005800000116008DEE00000BB601001918101225 -012B3500FFFF00B1FFE10457068C023600580000011600430200000BB601001818091625 -012B3500FFFF00B1FFE10457068C023600580000011600D6F800000BB601001B17091625 -012B3500FFFF00B1FFE1045705DB0236005800000116008EFD000016400F02301C501C60 -1C0301001C17091625012B355D35000100BB0087045B0614000B003C4026070A0B000104 -0605AA0606080308010F0D1F0D02006302040708090A010602280563700301032F5DE6ED -173910E65D003F2F12392FED17393130012513231305350503330325045BFE6D058405FE -6D01930584050193040A05FC780388058105018EFE7205000002009A02CC03BC05EC000B -0017002840186A0F65157A0F751504155403030F5409020C2A0000122A062FED332FED00 -3FED332FED5D313001140623222635343633321607342623220615141633323603BCE8A9 -A9E8E8A9AAE7A58666668689636686045CA8E8E7A9A8E8E8A8668B8B6668898C0002009F -FE97046005C3001C0023007B40553C0A3F2030224B0A4F2040225A0153116C0164117901 -7611791F76230E1D1E180D3F134F130213130D1747060C030F0505201C301C401C031C18 -471C05030F251F2502130021202F090109001D0C0F1804031E09062F33ED1739322F5DED -2F3C5D002F3333ED2F5D2F3F123939ED33332F5D2F11393931305D250E01071123112600 -353400371133111E011715232E0127113E01373305110E01151416046047B46876E3FEFB -010BDD7668BA410B37AE7378AD330BFE2787A2984A1E2F03FE9D0167150120FAF2012B16 -0163FEA1032C1FCB2C5209FCB90A552985034214D2BDB5D2000100890000048B05EE0021 -00774050201D3415321D03031E151E251E410E530E5B16630E7302730E091B1805460F08 -1F084F0803081010144908010C0202204A01080F231F23021F02181B20080519060F0605 -190F040220004000020000022F332F5D1217392F2F2F2F33FD3211395D003FFD323F1239 -ED332F2F5DED393931305D015D2901353E01352335331134123332161715232E01232206 -1511211521151406071521048BFBFE7667B0B0FDCD6998400A3E98568C8B019FFE617C62 -0345CF20BDB98A0136C801012211CE2A30A590FEDD8A3D7EBB390B00000200ACFE7F0468 -05EF0043006100A9407F05050A2714051D273E2030424D104F20433240425C105E165132 -63096E106A2B63321152055F205F255F275B2D5B3950426B1F6A20653D654061427C097C -10742B7431107B50745F0218075F50293A062F0D3333373F2F021111153F0F0D1F0D020D -181B5F045607333A1B50262911471A1129330704221000010000561A222FED332F5D1217 -39ED2F2F3939ED2F2F123939ED002F5DFD322F3FFD322F111217395D31305D015D011406 -07151E01151406070E012322262735331E01333236353426272E01272627263534363735 -2E01353436373E013332161715232E01232206151416171E0117161716033E0135342627 -2E01272E01270E01070E01151416171E01171E01173E01046876636158424148C27C57A7 -5C0A4FB46C86A2272D299052D6525372666554404340C78057A85B0A3ABD797FA92B2B2B -845BC85A59F71C1E211D1C4E2C275D46123E1618261F1D1B512C266043144202596AA237 -072E915A4D8A3238361B1FC2253261573841191725143451518162A93907309259518334 -323A1C1DC21B3C5C573947171725152E4F4FFEAB21413A334617181F0C0B1514092D181A -563132461817200B0A18130B2F00000100B9012103A4040B000B0013B703030900000688 -0C10F6322F002F332F313001140623222635343633321603A4DC9A9ADBDB9A9ADC02969A -DBDB9A9ADBDB00010089FE95045205D1000D003B40245308610802010F0501054F060106 -0602AA0C030F0F1F0F020529040402290F0D010D0D092F332F5DED332FED5D003FED332F -5D2F5D3C31305D012311231123112E013534243321045294D695CEFC0104F301D2FE9506 -BAF94603BC05F8CCCFE8000100B9FFE8048D061E0036006D4048052E152E2E132C343913 -39343736490E4636532166217B1B0C3433143D151E3C15032D0007070B3D03092608181B -303400140C061C060206111B000614300325009038251A26883710F6ED10E611173910ED -2F5D2F12392FED003F3FFD322F3F1239ED2FED39393130015D0114002322262735331E01 -333236373E0135342623353236353426272E01232206070E01151123113436373E013332 -1615140607151E01048DFEF1DB2C73240A2A63384A6E21231FD3C69D9A161E1B583D395C -28252DBC48403CB35EB7E58E71A4BE01E1D6FEDD0F0DA518123A31347F4CA6A996778123 -421F1D231D2724845FFBC104387CB73E3A3BAE9770B2200925DF0004009FFF2E076105F0 -000B00170028003700AD407A7C0D7C11701370177A1A74277336070D1A04231E1A122314 -282C0E231022142C16211824233F1936234919472252186B0E641064146B166A19151A19 -2A182818292A25252818311B2A001D101D4F1D0318001D01901D011D0CAD1D06000012AD -06281AAA31311E19401D011D30AA1E15501D1E0903030F500902003FED332F123939ED2F -ED2F5D3C12392FED39012FED332F1239ED2F5D71335DFD3C2F39392FED8710FDC0313001 -5D005D011000212000111000212000031000212000111000212000072301231123112132 -16171E0115140607373426272E012B0111333236373E010761FE05FE9AFE9AFE0501FB01 -66016601FB74FE49FECAFECAFE4901B70136013601B7C0DFFEB5A2A501385E7A3B3F3B71 -63201C211F4635957F3E5A1D1F19028FFE9AFE0501FB0166016601FBFE05FE9A013601BC -FE44FECAFECAFE4401BC820163FE9D0393101F226149618126FD243812110AFECB131719 -3C000003009FFF2E076105F0000B001700330096406D7C0D7C117013701779197223062C -0E231022142C1633183324332A332E44184124442A442E54185424542A542E6B0E641064 -146B1662186A1D642417257F1801182C2A181E0CAD1E06000012AD06103320330233332F -521B1F252F2502252529522115501B210903030F500902003FED332F123939ED2FFD322F -5D2FFD322F5D012FED332F1239ED2F33ED2F5D3C3130015D005D01100021200011100021 -2000031000212000111000212000050E012322243534003332161715232E012322061514 -1633323637330761FE05FE9AFE9AFE0501FB0166016601FB74FE49FECAFECAFE4901B701 -36013601B7FE72569F4EE3FEF8010DDE59AC3E1036A9598E9F9994539D4810028FFE9AFE -0501FB0166016601FBFE05FE9A013601BCFE44FECAFECAFE4401BC572727F6EAE1010230 -1CB52846ABA59FAE3A34000200AA031106F105D1000E0016005240217B0478057A060379 -0C010B0C0D01030406080815121210135015030D280B0F370BB8FFC440110B0F37022800 -000728090FAE102814AE132FE4FDE42FED332FED2B2B003FFD3C332F1217395D3130005D -0123112303230323112311331B0133052311231123352106F17C14ED4FEF197BEEBFBFE3 -FC02E57FE5024903110269FE3D01CAFD9002C0FE82017E75FDB5024B75000001021D0516 -03C3068C000300244016470156006600760004500360037003030303010000022F332F00 -2F332F5D3130015D0901231303C3FEEF95B3068CFE8A01760002015A051803BE05DB0003 -000700264015020644016005010500140F010101041401000501052F5D33ED2F5DED002F -5D3CFD3C3130012335330523353303BEC7C7FE63C7C70518C3C3C300000100F5001B0597 -04FD0013008840541612010C0B080704030E111201020D80029002A002B0020402290303 -0C030D030112045307110E08530D070F0B010B40150130154015020407080B0112110E08 -030D0309030D1004062F004000020000400601062F5D332F5D1217392F2F1217395D5D00 -2F5D3333ED39392FED3939322F2F3130018710FD5D87C0C0C0C010C0C0C0C0C0015D0121 -0323132135211321352113330321152103210597FDA0689968FE5701DA54FDD2025E6999 -6901ABFE2453022F016AFEB1014F9C010C9C014FFEB19CFEF4000002000E0000076D05D1 -000F00130079404F04030B061B041B052A042B053B064A044A054D064D120B1213030414 -05050675057C06020A100E140115730601080B0440000100000F05010564140334130D35 -0A0A13050835123406030E35010508003F3CED3FEDED1239392FED2FED300110F65D322F -5D1739E62FED393931305D8710FDC0C0C0015D2901112103230121152111211521112101 -112303076DFC50FDF4D4CF0252050DFD1302EDFD1302EDFC50DBEF022CFDD405D1B0FE68 -B0FDD702230259FDA70000030073FF6E05DA064B001D002A003700A640850203000B0A0D -0C120F1A051C1103190D1F121F1A151C550254045A08590D59115B135017551C792A140B -090318061B1F0A1F0B1118161B2609272F75037F097F0A7F0B7F0C791270187019701A70 -1B132A2F1E2E043221340C09181B040615023234060A2A2F1E2E04272B15000C09181B04 -0F0073390F39010F391F393F390327150F683810F6ED5D5D10E411173910ED111739003F -ED3F121739FD11173931305D015D011402070E0123222627072313260235341237362433 -3216173733031612012E01232206070E011514161701342627011E01333236373E0105DA -63595CFBA173C94F9F84CD656D605C5801059A76C2528E84BC656FFE6F3990596EB44240 -453B3A035C3C3AFD683C91596EB73E434202E8B8FEDD6165663A37E4012664012CC4B601 -216762683737C9FEF464FED7013A2E2D4D4E4CE5938CE04C01B88BE44BFC432D2E504C52 -E100000300A1009D075F047C00170026003500724054051608311526192F2923262C3B34 -441C4B34510256075F0A5F0E5A1351165918553063026D0A631669236C24642C642D1821 -AF33AF0306120F09092AAF1BAF150F7B18743002272A0030180C0099371E2A0C993610F6 -ED10E411393910ED5D002F3CEDED332F1239393CEDED3130015D011402232226270E0123 -2202353412333216173E01333212052E01232206151416333236373E0125342623220607 -0E01071E01333236075FF5CF85DE454FD38FBFE2FACA86DE444FD58DBFE2FC683FB8608A -9C7F776E7C392225030C807658814A1E33133CBB608A9C0297EFFEF599929794010FD6EE -010C9A919695FEF1947575A79A85A6615E39470186A5477830672C7377A6000100D700B3 -05B505B6000F004540290E03540F010101010D045408AC0A070C401101301140110200AB -0A800D010D2A040105AB07400401042F5D3CF43C10FD5D3CF45D5D3C002F3CE4FD3C322F -5DFD3C31302521352111213521113311211521112105B5FB22021CFDE4021CA6021CFDE4 -021CB39E01A69E0221FDDF9EFE5A000200FE0000058005710006000A0061401605045403 -020306540001002C26012902360139020400B8FFE240240B1837031E0B18370954080303 -00400C01300C400C020504090A040100004001500102012F5D332F1217395D5D002F332F -2FED2B2B31305D4B53588710FD8710FD05C05909013501150901112135210580FB7E0482 -FC870379FB7E0482012F01E37C01E3B7FE96FE96FE1AA0000002010C0000058E05710006 -000A0063401603045405050602540101002C26002906360039060401B8FFE240260B1837 -051E0B1837095408050501400C01300C400C020503090A040100002F013001400103012F -5D332F1217395D5D002F332F2FED2B2B31305D4B53588710FD8710FD05C0590901350901 -350111213521058EFB7E0379FC870482FB7E04820312FE1DB7016A016AB7FE1DFC72A000 -0001006C000004A705D1001000834020300E3F10420E4F10540E5B10650E6A10730E7C10 -0A0020090B371020090B370EB8FFE0B3090B370DB8FFE04033090B374601550F700F0305 -0208320B0B0C010F0005070D0307080F121F1202030A005C0501030F05130D5C0C0A0F08 -BF0802082F5D3333E4ED39323210E42F2F5D003F3F1217392FED393931305D012B2B2B2B -5D090115211521112311213521350133090104A7FE400174FE8EBCFE8E0174FE3DD4014C -015005D1FCC15E8AFE5601AA8A490354FD6D0293000100BEFE640464045D001500384020 -080205140B051042050900080A0C0102131A0092171F176017020D091A0A881610F6FD3C -5D10F4FD3939003F3F3FED3F3C12393931302123270E012322262711231133111E013332 -363711330464B20A3B815B567F42BCBC209B5B5D8536BC76414A4640FDF305F9FCBA2752 -433C034000020095FFE0047905EF00220031006640481502151B162E2904241B310A351B -410A431B560A551A561F5020562A641A661E642A632E751B702E140F06263F0C0C061D19 -19153F1D022C3F060A1A0F232912141A0900002914092FED332F1239ED1139392F003FED -3FFD322F1112392FED123931305D011402070E01232226353400333216173E0135342623 -22060723353E01333216171E01032E01232206151416333236373E0104794E5255CB71C0 -F3010DCA5A9F4F02029E984EB74E0B51C96089CD3E2A1DCB3C98488DA8877080A322060B -0345A4FE987B7C62FDCBE4012134411A3B1AD9CA3F37C22C2D6D7C56CEFEC42F36B6AA91 -99C2BE215000000100BBFF43055905D1000C00A9406A01030F08450B8B03D903D30B0601 -08010B2B033208320B5D03660A600B08030203080908B3040304030B0A0BB30202030302 -03080908B3040304030B0A0BB30202030303610A010A07040304070A04020C0C0203090A -0A6B090109040202040309040B0835050301350B002FED3FED1117392F2F2F5D332F1239 -012F332F1217392F2F2F5D332F313087107AED87C0018710ED8708C00187107AED87C001 -8710ED8708C0015D71052135090135211521011501210559FB6202A1FD69046DFC850288 -FD6603B4BDBF029C0277BCB0FDA748FD730000010090FF3F05FC05D1000B003B40250307 -050009350A0270007F09020414005A6F017F010201010D0514095A00086008700803082F -5DE4ED11332F5DE4ED5D003FFD3C3C2F3C313001231123112111231123352105FCC8C6FD -B0C6C8056C0523FA1C05E4FA1C05E4AE0001007100000541045D000B002B401703070500 -093E0A05041A00B001010D051A09B0100801082F5DE4ED11332FE4ED003FFD3C3C2F3C31 -300123112311211123112335210541CABCFE3CBCCA04D003BFFC4103BFFC4103BF9E0001 -008AFE590490061E0021002C4018000004401E00111115400D0D0F231F2302001000091A -10192F33FD322F2F5D003FFD322F3FFD322F313001232E01232207061511140706232226 -2735331E013332373635113437363332161704900A2073208134356869BC346D310A216C -228135346868BD3A6636055708153D3D95FB9DCE6D6E0B0AB208153D3D950463CC6F6E0B -0A0000020097021303B005F000230030005740370A0A06211B0916212E0925215529600E -6029700E70290B02082552111120081C1C1853200201012E5308061D1125022A1D0B002B -2A000B2F33ED2F1239FD32322F003FED332F3FFD322F1112392FED12393130015D012335 -0E01070E01232226353436373E0137353426272E012322060723353E013332161503350E -01070E0115141633323603B0AA1C312C2D514980AF5D4D4EEF88242122573054A8270E2D -B84DD9BEAA45B736404E5B5E5283022A5E1425131415AA846A8724241F0612354013120A -300EAC0D20A99FFE74F504100F124D444C4C430000020079021303E405F0000B00170031 -40205D015D055207520B046A0F6515020F530902155303060C2A40000100122A00062F33 -ED2F5DED003FED3FED5D31305D0114022322023534123332120734262322061514163332 -3603E4F4C1C9EDEDC9C1F4B687787A86867A78870401EBFEFD0109E5E5010AFEFCEBACAC -AEAAAAADAB000001006B0000062105F00027006240440909090D1A091A0D2C092C0D3403 -300530113413460346136A1A641D64216A24101925140204160B341F0226183501160825 -1202191214081502141C272222290E15171C2FC4ED11332FC4123939ED2FED2FED003F3C -FD3C3FED12173931305D2901113E01373E01353426232206151416171E01171121352135 -26023510002120001114020715210621FDA443842D2F38F8E2E2F83A2F2F7F44FDA401B4 -A8D90172013601360172D9A801B40185275A373A9970C8FDFDC86E9E38395727FE7BAE7C -580132CC0116015AFEA6FEEACCFECE587C0000030068FFE3073F047C00390043005200B9 -40840B190B1D1C192604200D3604320D383D34414204420D4A3D4241520D5237554B630D -6137654B13161D4B2A512E622E7B0D7E137C1E7D24732E73387C4B0B47013C2170430143 -124333033018403D36042C2C283F30040B0B073F0F0A5041180A433A011A474412213304 -00470F2D012D0C0C3A1A00472D1B008F544054014D1B001B855310F632ED5D10E4113939 -10ED332F2F5D2F1217392FFD1139003FED3FED332F3FED332F3FED111217392F5D33FD32 -31305D015D01211416171E013332363733150E01232226270E01070E0123222635343637 -362437353426272E012322060723353E01333216173E0133321215272E01272E01232206> -<07032E01350E01070E01151416333236073FFCCD3C37348E566FD5420C4ED56DA6ED4C15 -5C323F947396D36C655F0124A22E2928703C4FB35A0D37CE659FD33945CA7DD9FBB60525 -20226D4F85B41991141569C0524F61747663C1022F72A234302D5334CD233B686713501C -242FC2987C992A271C033D41551717112A24BF0F265D5B5268FF00FB3E446625272C968C -FE6B35844B030915145B535F5C560003005DFF6C047104D900170021002B007840560008 -0F140A19292604001800250200180025020914001800253D1D322B4D1D422B0721261825 -04291B3E0609121504030F04293E030A21261825041E221B0009061215040C00902D0F2D -1F2D3F2D6F2D041E1B0C852C10F6ED5D10E411173910ED111739003FED3F121739FD1117 -3931305D5D5D015D011000232226270723132E01351000333216173733071E01252E0123 -22061514161701342627011E013332360471FEE8EB548F3B856EAB4B530117ED578E3674 -6F9B4C54FEBC2563379BAA222302442322FE40275F3B96AE022EFEEFFEC42A27C601004D -E2930111013D2C23ACE74CE0DC1D1DDCD2619436012B619836FD611F1ED900020071FFE2 -03BE05D100030020006D404C0F221F2202131E231E3A053A144B05400D400E400F43165C -05520F6F05650E651A7A057A0910127F1301131007120155030320201C34070A022B0303 -101F70130113130A200401041915040A2F33ED2F5D12392F5DED332FED003FFD322F3FED -331239395D2F31305D015D01233533130E01232226353436373E01373533110E01070E01 -151416333236373302C8CCCCF653BA70D7F9453B3A9D44B33C9E2E3644997967C5390A04 -FED3FA571E28D1AB62963E3E6529E1FECF2161282F7C4E716F4225000002012300000203 -05D1000300070027401707070055030305080F0901045D032B055D0F02200202022F5DE4 -FDE45D003F3FED332F3130012335331323133301F9CCCC0AE01AAA04FED3FA2F04370001 -00D2003905B002FA000500294018000002540F0401044007013007400702012A40000100 -00042F332F5DED5D5D002F5DFD322F313025231121352105B0ABFBCD04DE390221A00001 -0086FF6906C906FC0008004A402C15073307440772070407070806140302030207090829 -08590869080408000100010100040351060607080208002F2F1239392FED012F2F332F31 -308710DD5DC0C08710FD08C0005D09012301233521090106C9FC9066FE80ED0189013902 -DA06FCF86D03E18BFCCB065C0001FFDCFF37050005EF002B0077404D070B001F2E08270C -270F2E212925350D300F400E410F59226607660C0E0C0B0807201D1E21221D220F2D1F2D -020920201D2209041600160B081E462121281200000449280216161A4900120112002F5D -FD322F3FFD322F1112392FED393930012F2F1217392F2F5D8710C0C0C0FDC0C0C0313001 -5D01232E012322060F01211521030E01070E012322262735331E01333236371323353337 -3E01373E013332161705000A1D7229797E232A0141FEA3671D5C4041985C2950340A215E -2C7F812367D9F52A1A5C3E3E99573A4F3405290A1A77A0C28AFE1686B034352A0709B40E -1480A701EA8AC67BA833332C0A08000200F300CA0598045000190033006D40490A010606 -050E08130A1B06200528082D5B0452115B1E522B680B6432790B743210272730541D1A23 -541D1A002A012A0D0D1654030009542A0300101929000033291A0C290D26291A272F33ED -3CED2FED332FED002F333333ED2F2FED332F2F5D3333ED2F2FED332F31305D010E012322 -26272E0123220607233E01333216171E0133323637130E01232226272E0123220607233E -01333216171E0133323637059714B69E4D8C3841682C4B541C9B17B39F488E3B3D6B2D4C -59139E19AEA348903927802E4E56149D13B79E4D8A3A237C364B541B0450C2C64B2D3437 -607CB6C44A2E303B6D7DFDFCB8C34B2D1F4C6E7CC0C84A2E1C4F637A000200320000059E -05D100030006004F403148024703025A056A050205041A000003061A010102390236036B -0264037B02750306020305030000080105010203065401002FED3F1239012F11332F1739 -5D31308710FD8710FD04C0005D015D290101210902059EFA94023201080127FE50FE5105 -D1FAD7047BFB8500000200A600A2047A04760006000D005940107305730C0204400C1037 -0B400C103706B8FFC0B30C10370DB8FFC0401B0C103703000300070A0A07040500010100 -000C0B084007010707082F332F5D123939332F332F123939002F332F1239392F2F31302B -2B2B2B015D2501350115090105013501150901047AFDF00210FE9B0165FE52FDDA0226FE -8D0173BF01A35501A2BCFEEFFEEFD901BE5901BDC4FEDAFEDA00000200AE00A204820476 -0006000D005740107C037C0A0204400C10370B400C103702B8FFC0B30C103709B8FFC040 -1A0C10370C080C080505010403014000010000010A0B08070107082F33332F1239392F33 -2F5D123939002F332F39392F2F31302B2B2B2B015D090135090135010501350901350104 -82FDDA0173FE8D0226FE3CFDF00165FE9B02100260FE42C401260126C4FE4357FE5DBC01 -110111BCFE5E000300B2000005DA00DF00030007000B0025401405010206040A55090800 -2B0101042B0505082B092FED332FED332FED003FED173931302123353305233533052335 -3305DACCCCFDD2CCCCFDD2CCCCDFDFDFDFDFFFFF001A0000055E08010236002400000117 -004300640175000BB602000C0E050025012B3500FFFF001A0000055E07C8023600240000 -011700D700330175000BB60200180B050025012B3500FFFF0073FFE105DA07C802360032 -0000011700D7008B0175000BB6020031240F0325012B3500000200780000081C05D10016 -002500554039001C0022301C3022401C40227204720A721C741D72230B14351111011834 -10350D0317341535010811141417170E1203070073271F1507682610F6ED10E61117392F -FD32003FEDED3FEDED12392FED3130015D29012224272602353412373E01332115211121 -152111210511232206070E01151416171E0133081CFBCEC4FEFD6791B3AE984FF9E8042E -FD0502FBFD0502FBFC407A92B55F7481716D5BD09236415B0146CFD7013C603344B0FE68 -B0FDD7040479203642F8ABABEE4439280003006AFFE10776047C0024002B00370094406C -2604200D3204300D32293B2E323032343B364004400D40294D2E403040344D36530D5314 -5C165C1A531C5322620D621C6222700D72221B013C2B121E2B030F283D21042F3F1B040B -0B073F0F0A353F150A1E122B011A7F2C012C0C0C251A002C18008F393F3901321B188538 -10F6ED5D10E4113910ED332F2F5DFD323939003FED3FED332F3FED3FED1217392FED3130 -015D01211416171E013332363733150E01232226270E01232200111000333216173E0133 -321215272E012322060F0134262322061514163332360776FCDC3C34348D526DCD460C62 -BF69A8E84A45D183E9FEEF0117E38CC84447D78FE1ECB703918D8BAF10B8A49399A0A792 -92A5021B689831312F4F38CD2A347A686F78013C01110115013979726A81FEF4EF2A9B9B -A4927DD7D5E0CCD4D7D500010099023C047D02DC00030018400C0154020000050F051F05 -02022F5D11332F002FED313001213521047DFC1C03E4023CA00000010099023C076702DC -00030011B6015402000005022F11332F002FED3130012135210767F93206CE023CA00002 -FFED03E503160614000300070052B502180D103701B8FFE8B3090C3700B8FFE840090910 -3706180D103705B8FFE8B3090C3704B8FFE8401309103701000501050502060100B10202 -04B1062FED332FED003F3C332F5D3C3130012B2B2B2B2B2B0123013303230133031686FE -F1F0EF86FEF1F003E5022FFDD1022F000002009603E503BF0614000300070050B90004FF -E8400E0D10370518090C37061809103700B8FFE840200D10370118090C37021809103701 -000501050503070100B1020204B1000601062F5DED332FED003F3C332F5D3C3130012B2B -2B2B2B2B090123132301231303BFFEF186A5A4FEF186A50614FDD1022FFDD1022F000001 -FFED03E5018606140003002EB502180D103701B8FFE8B3090C3700B8FFE8400D09103701 -00010101020100B1022FED003F335D2F3130012B2B2B0123013301868AFEF1F403E5022F -000100A003E5023906140003002FB90000FFE8401A0D10370118090C3702180910370100 -010101030100B1000201022F5DED003F335D2F3130012B2B2B090123130239FEF18AA506 -14FDD1022F00000300D2000705BA051100030007000B00414029000B010B5608AC045407 -0F0101015602AC0F070107400D01300D400D0204AB000B2D05AB01400A010A2F5D3CE4FD -3CE45D5D002F5DF4ED5D10FDF4ED5D313001231133012135210123113303BDEEEE01FDFB -1804E8FE03EEEE03FE0113FD2BA0FD2B0113000200ACFFC805E00554000300070057403B -4804470658045706680467067F047006087F057007020705000301000330036003900304 -03B200023002600290020402B220010406020002000201192F3333182F2F123939002F1A -19FE5DEE5D11173931305D015D090705E0FD66FD66029A01BDFE43FE4301BD028EFD3A02 -C602C6FD3A01DDFE23FE2300FFFF003DFE64047F05DB0236005C00000116008EDD000016 -400F02100E600E700E0301000E0B040025012B355D35FFFF0006000004E607500236003C -00000117008EFFED01750019401302000E400E500E600E700E0501000E090500252B355D -35000001FF9A0000034B05D10003001D401138034803680065016903050100030000022F -332F003F2F3130015D09012301034BFCF4A5030C05D1FA2F05D100010000FFE504CA05EC -003300CC408758040102B52F0103B81D010237184718571867187718E718F71807013A00 -4A005A006A007A00FA0006032C06502998090109230F5020F71201081218122812581204 -00121203151827190119191D341502002833010133332F34030A272001022320292C0400 -0F12090604260C082A182A282A03002A21210C18007135103407073426150C683410F4ED -12392F103C10F63C11392FC45F5D111217391117395F5D003FED332F5F5D333FED332F5D -331112392F5F5D5D3CFD3CDD5D3CFD3C5F5D5F5D5F5D5F5D31305F5D250E012322000323 -37332E013534363723373312003332161715232E01232204072107210E01151416172107 -211604333236373304CA6CB97EF3FE8331862C4B02020202772C5D3A0174F38DBF541050 -C67C9DFF003001DB2CFE3C02030202017C2CFEC4310108969DB2440F3E3326012E010476 -152F161A34187601010128292DD1413DCFB17618341A172E1576B6D13F3D000100BA00AC -02E0046C0006002C400972050104400C103706B8FFC0400C0C1037030300040501000001 -2F332F123939002F332F31302B2B015D2501350115090102E0FDDA0226FE8D0173AC01B4 -5901B3C7FEE7FEE7000100C200AC02E8046C0006002C40097D030104400C103702B8FFC0 -400C0C10370505010403010000012F332F123939002F332F31302B2B015D090135090135 -0102E8FDDA0173FE8D02260260FE4CC701190119C7FE4D000002004400000453061E0003 -001E005B40370B103A10601A741A04014402031515193F1100070A3E1D0D050509080B14 -0160051A006004140A0492201D071A0B0D0A400D10370A891F10F62B3232FD3210E61139 -10E4FDE42F2F003F3C3F33FD323FFD322F3FED3130015D01233533032311211123112335 -333534363332161715232E012322061D01210453D0D011BCFDF9BC7F7FC8B73E65290A1C -6A22796A02C90518C3FA2503C2FC3E03BF9E31C1CF0D07AA08146B8C2800000100440000 -0447061E001A004E402D6C077A0702191A191A053E16000C0F3E091205010E08100A011A -000A0F00921C090C1A10120F400D10370F891B10F62B3232FD3210E6113910ED2F2F003F -3C3F33FD323FED33332F2F31305D2123112E012322061D01211521112311233533353436 -33321617370447BC2B8B35A2850149FEBDBC7F7FE9DE45902CBC056D080C6C8C2C9EFC41 -03BF9E31BFD10E040800000100BB007C045B06140013005740390B0E0F1011080609AA0A -0712130001040605AA060A060C030C010F151F150210630063020407080B0C0D0E111201 -0A022803090563700301032F5DF63C10ED173910E6E65D003F2F1239392FED17392FED17 -3931300125132313053505110535050333032515251125045BFE6D058405FE6D0193FE6D -01930584050193FE6D019301FB05FE7C018405810501A20581050184FE7C058105FE5E05 -000100FD01FF01EC031A00030016400C02560108002D2F013F0102012F5DED003FED3130 -0123113301ECEFEF01FF011B0001FFF6FEEC018F011B0003002EB90000FFE840190D1037 -0118090C370218091037010F0301011F03010300B1022FED002F5D335D2F3130012B2B2B -09012313018FFEF18AA5011BFDD1022F0002FFF6FEEC031F011B000300070051B90004FF -E8400E0D10370518090C37061809103700B8FFE840210D10370118090C37021809103701 -0005010505030F071F07020700B1020204B1062FED332FED002F5D3C332F5D3C3130012B -2B2B2B2B2B0901231323012313031FFEF186A5A4FEF186A5011BFDD1022FFDD1022F0007 -0095FFE30B9305ED000B000F001B00270033003F004B00C640900908060A0918061A083C -073E1808170A1818171A193C163E2908260A2918261A283C253E460D480F560D580F680E -17791F7625792B7631794376490625512F034F030203031F5109020F030E08432B513D20 -19401902191949315137130A4F0C400E020C0E462A003A013A402A3A003401342E2A0016 -01163416282A0C0E060F10401002101C2A0F00010000222A10062F33ED332F5DED2F5D12 -3939ED33332F5DED2F5D33ED2F5DED2F2F5D003F3CFD3C332F5D3CFD3C3F3F3FED332F5D -ED5D3130015D011406232226353436333216250123090114062322263534363332160134 -262322061514163332360134262322061514163332362514062322263534363332160734 -262322061514163332360374BDB2B6BABEB2B5BA02B3FCF4A5030C0285BEB2B5BABDB2B6 -BAFABB596466585866645904935964665858666459043EBEB2B5BABDB2B6BAB259646658 -586664590434E0DADADFE0DADCC0FA2F05D1FBCCE0DADCDDE0DADA01B8AC8888ADAD8787 -FE17AC8888ADAD8787AEE0DADCDDE0DADADFAC8888ADAD878700FFFF001A0000055E0801 -023600240000011700D600280175000BB602000F0B050025012B3500FFFF00C80000049D -0801023600280000011700D600260175000BB60100100C020325012B3500FFFF001A0000 -055E08010236002400000117008DFFF80175000BB602000C0C050025012B3500FFFF00C8 -0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500 -FFFF00C80000049D080102360028000001170043003C0175000BB601000D0D020325012B -3500FFFF0089000002D508010236002C00000117008DFF120175000BB601000D0D040925 -012B3500FFFF005D0000030808010236002C0000011700D6FF270175000BB60100100C04 -0925012B3500FFFF007E000002E207500236002C00000117008EFF240175001940130200 -104010501060107010050100100D0409252B355D3500FFFF0089000002D508010236002C -000001170043FF3E0175000BB601000D0D040925012B3500FFFF0073FFE105DA08010236 -003200000117008D00780175000BB6020025250F0325012B3500FFFF0073FFE105DA0801 -023600320000011700D6008F0175000BB6020028240F0325012B3500FFFF0073FFE105DA -08010236003200000117004300AA0175000BB6020025250F0325012B3500FFFF00B2FFE1 -052908010236003800000117008D006E0175000BB60100201F0D1D25012B3500FFFF00B2 -FFE105290801023600380000011700D6005B0175000BB60100221E0D1D25012B3500FFFF -00B2FFE1052908010236003800000117004300AA0175000BB601001F1F0D1D25012B3500 -000100BB00000177045D0003001E4011020501087F05010592001A7F010101880410F65D -FDE65D003F3F3130212311330177BCBC045D00010136051103E1068C0006003A40275905 -5606690566067A0573060601020350056005700503050560030103500060007000030000 -042F332F5D002F5D332F5D1239393130015D01230B0123133303E19FB9B89BE4E3051101 -00FF00017B00000100ED051D042C06530019003940233902350E4902450E04190D190952 -0F101F1002101652100D600301031928000C28000D2F33ED2FED002F5D3333ED2F5DED33 -2F2F31305D010E01232226272E0123220607233E01333216171E0133323637042C0B846F -365C292F412734340483088E67325D2A2F49213339030653989A27252B2B5A4C979A2724 -29295C4600010118053703FE05D10003001440090253100101010000022F332F002F5DED -31300121352103FEFD1A02E605379A0000010113050E0402068C000D0056403A6508650C -7508750C040D5006600670060306060AAA094003F00302D19003E003029003E003028B00 -03018950030150030159030D2A00072A00062F33ED2FED002F5E71725E5D5E5D715E5D5E -ED332F5D3C31305D010E0123222627331E013332363704020AC5A9A9C509A60C6B5B596B -0E068CA8D6D6A8847878840000010221051802F505DB0003000EB50244010015012FED00 -2FED31300123353302F5D4D40518C3000002012D050903E907B1000B00170045402E0F51 -090009300902313009015009600970090309091551030C29200030000200003000600003 -D0000100001229062FED332F5D7172ED002FED332F5D725E715EED313001140623222635 -343633321607342623220615141633323603E9CC9290CECC9293CB917558587576575875 -065E8FC6C5908FC4C48F567776575776760000010161FE59037000140014002440150B02 -1B012B013901041207070B53030D0E2A0000062F332FED003FFD322F2F31305D05140623 -22262735331E0133323635342627331E010370B79225742D091A58326862060399020659 -A2AC0E0CA00A1A4E581D491913340002015605160477068C000300070042B54500450402 -00B8FFE8B30E103704B8FFE840190E10370750036003700303030305019F000100000204 -0204062F33332F2F332F5D002F33332F5D333130012B2B5D09012313230123130477FEFE -8BA9B0FEFE8BA9068CFE8A0176FE8A0176000001019FFE5F037C000A0014002440150E04 -1E042B043B04040A14141053030D000D2A00062F33ED2F003FFD322F2F31305D010E0123 -222635343637330E011514163332363733037C344B2A8BA90D069B0606535A24511108FE -790E0C9E8F263E1A1B3C1E524E1B080000010132051103DD068C0006003A402754015902 -64016B0274017B020606050250036003700303030360020102500060007000030000032F -332F5D002F5D332F5D1239393130015D01032303331B0103DDE4E3E49FB9B8068CFE8501 -7BFF00010000000100180000048005D1000D0047402A3B0B4B0A5A0A7A0A04020B050804 -090309090106030C3501080A030A00000F0F0F01080B140503026C0E10F63232FD325D11 -332F392F2F003FED3F12392F2F12173931305D29011107353711331101150111210480FC -52BABAC6015DFEA302E8021798A395031AFD78011BA3FEE8FE0700010018000002360614 -000B003D4023490559056905030407010A040B05050B0B030801030800050D92000A011A -050704880C10F43232FD3232E62F2F003F3F12392F332F12173931305D01071123110735 -37113311370236B5BCADADBCB5037A91FD1702608D9F8A0318FD7194FFFF0086FFE50502 -0801023600360000011700DF004D0175000BB6010034311A0025012B3500FFFF006EFFE5 -03D7068C023600560000011600DFAE00000BB601003734180025012B3500FFFF007E0000 -050808010236003D0000011700DF00320175000BB601000D0A020625012B3500FFFF005D -000003E3068C0236005D0000011600DF9400000BB601000D0A050625012B35000002017A -FE780228061400030007002940160F094F090201060106050201050B00041F014F050105 -2F5D3CFD3C003F3F1239392F2F3130015D01231133112311330228AEAEAEAE02F6031EF8 -64031E000002000E000005BC05D100120025005240333816481666026811041B1E083C0B -0B071A340C031F3407087600011D1D0713150074270F274027602703091B1E140B09076C -2610F63232FD322F5D10F6ED12392F5D003FED3FED12392FFD393931305D011402070E01 -23211123353311213204171612073426272E012B011121152111333236373E0105BCB193 -66FBCDFE88C4C40174DA01025898AACF7A7958C68ABC0169FE97BC8FD5596F6F02E7CBFE -B65B3F3802E48F025E3F375FFEC4D6AFF0453227FE4C8FFDC62A3947E8000002006AFFE1 -0471061E001F00310084405B190D290D32013420392B362D45014C0D44204A2B442D5A2B -542D6F05741E7421100C03293F090F121A1D041B10100903161B1B3F164F160216022F3E -030A1C111A1D1C030011120F0C26051F162F160216231316090000092C14062FED11332F -1239ED2F5D17391217392F2F003FED3F5D332F111239392F1217392FED123931305D0110 -00232200353400333216172E01270527372E012735211E01173717071612013E01353426 -272E012322061514163332360471FEE4F1E5FEEB0112CA6C9B56208757FEF842ED54905D -0127236225D242BA99A6FEDE313403024BA55693A9A98F427B027DFEBCFEA8010EF5E201 -08353570D64AA2618E43512F1019431A80616D93FE9BFD8A3BA99620371E2D2BAF98B4AE -2C00FFFF0006000004E608010236003C00000117008DFFE40175000BB601000B0A050025 -012B3500FFFF003DFE64047F068C0236005C00000116008DDD00000BB601000A09040025 -012B3500000200C80000049605D100120021005C403E391F491F551180108011051B3400 -0701071A34200C010C0C07090A0309080F231F23021315200030004000700004006F230F -233F23020C1B071400096C2210F632FD32325D10F65DED5D003F3F1239392F5DED2F5DED -3130015D011406070E012B011123113311333216171E01073426272E012B011133323637 -3E010496463C4EDB97C6C6C6CD85C243535ECE343830805AC4A777982F2C2903135CA939 -4B48FEBE05D1FEF22D2C35AA7D486B231E19FDCD292D2966000200B9FE64049006140013 -0020004D4035320239153220430249154220561267127E087C1C0A0E0906174211040C01 -1E4006090B0C141B0090221F223F22020E1B091A0C882110F6FD32325D10F4ED003F3FED -3F3FED12393931305D011406070E012322262711231133113E0133321203342623220607 -111E0133323604904E4742B364578D49BCBC4BBB6ACAE1C28A8F51A44B5073499DB0023C -88E14E4A512628FE2C07B0FDD43F55FECFFEECCAC84639FD87241AD4000100DC023C05B0 -02DC0003001E401100540F02010240050130054005020000012F332F5D5D002F5DED3130 -0121352105B0FB2C04D4023CA000000101230069056904AF000B00264017D702D80802A7 -0201D705D80B02A80B0105840294020202192F5D002F3130015D71005D71250709012709 -01370901170105696FFE4CFE4C6F01B8FE486F01B401B46FFE48D86F01B8FE486F01B401 -B46FFE4801B86FFE4C00000101230236039205D5000F002E4018055006060C030E03AA01 -0E0505020F0F0C0E2A02100301032F5D33ED39322F2F332F003FFD323F332FED31300121 -35331123353236373E01373311330392FD99EAF22D6C1E252C0387DD02367A0238700D0C -102C28FCDB00000100CF023603C705EF001D0045402D24152518361535184C105E106D10 -651866197D1075180B0F0F0B521302021C52010E00001C02082A16101610022F33332F2F -ED1239332F003FFD323FED332F3130015D0121353E01373E013534262322060723353E01 -333216151406070E01072103C7FD0864A733834A6B5A59AC300D47AF57B4BB6173379B42 -022002369C3E6E29676754454C3D1FB41A239D7D63975A2B6629000100CF020F03BC05F0 -002E007740162A033903450C4A1F540C5C1F6B0864237D0874230A27B8FFC040390B0E37 -2C2B15520F16010F161F164F165F16CF16FF16061621211D52160625020A0A0E52060F1A -2A281622112A2216282C04091000010000092F332F5D121739ED2F2F2FED003FED332F3F -1239ED332F2F5D71ED393931302B5D011406070E012322262735331E013332363534262B -01353332363534262322060723353E0133321615140607151E0103BC42383994595EA54A -0E29C35D648576708F80706B63684DC32C0E4AAD5AAFC16E595F8303314B712223211E1C -B3243B474B553C8D4D443D473E24B21B23886A59721A08116F00FFFF00AB000007A305D5 -0036023B9200003700BB023700000117023C0404FDC300204015020E08020E400E600E02 -010B2B0B5B0B6B0B7F0B045D11355D1135003F35FFFF00AB0000074105D50036023B9200 -003700BB023700000117023E0384FDC3002640190302100803020E1F0E5F0E7F0E03010B -2B0B5B0B6B0B7F0B045D11355D113535003F3535FFFF008C0000077905ED0026023DA600 -002700BB029100000107023E03BCFDC30036402603023608030236103630367F36030131 -003134314B315F316B317B3106000900093F094F09035D11355D11355D113535003F3535 -0001003C0000047405D10011005840330C0F09512F063F060206060B02344F0501050510 -0B01341003200301080803032F00010000130E01050A140F0E2F0B3F0B020B2F5D3333FD -32322F11332F5D332F392F5D003FED2F12392F5DED12392F5DED39393130012111211521 -1121152111231123353311210474FD3E028AFD76014AFEB6C0B6B603820526FE55ABFEEF -8BFECC01348B0412FFFF0073FFE305A208010236002A0000001700D900CF0175FFFF006C -FE590443068C0236004A0000011600D9FE00000BB6020037311A2325012B3500FFFF0089 -000002D507500236002C0000011700DAFF240175000BB601000D0C040925012B35000001 -0086FE59050205EC004700C240990B0B0A1F0036003A1B0B1B1F13362F0B2A1F292F2436 -24463F0B391F3427392A34363441481F4427482A43364B3E44415F035A05523257365544 -6B026F046A30643264366642604679057A2D703670377541754486292B20400E10371F40 -0E10371A060028313F06341D38383C343402212125341D0A101014530C0D0F0F172A0937 -3F153128150031371D0904200074490F49704902206A4810E65D10E611173910ED2FED2F -2FED332F003FFD322F3FED332F3FED332F1112173931302B2B5D011406070E01071E0115 -14062322262735331E01333236353426270E012322242735331604333236353426272E01 -272E013534243332041715232624232206151416171E01171E01050251492C683E0303B3 -9A25742D091A523868620302142515A1FEFF850E71012882B8CD61634BAF62C6BF013CF3 -9D0106650E55FEEB919FC1607940EC52A6A801A957AA3B233711162C199DB10E0CA20A1C -4E5818291201023C3BF85E668A73635E1A141A142ACBA3BBEF3C2CEA485F84685D6A1C0E -28152CB20001006EFE5903D70478004A00AA40810820090C37090204321902173224202B -3B34203A3B43204B3B5A1C5C2D5237534652496B1C6B2D6237624662497C1C7C28743779 -3F74428B0188248531873F1D170300252F4006351A80390139393D3E35041E1E223E1A09 -0D0D1153090D0C0C142A0638401B2F251B002F381A06041D008E4C0F4C1F4C3F4C5F4C7F -4C051D864B10E65D10E611173910ED2FED2F2FED332F003FFD322F3FED332F3FED332F5D -1112173931305D2B011406071E011514062322262735331E01333236353426270E012322 -262735331E0133323635342726272E01272E01353436373E013332161715232E01232206 -15141716171E011716171603D77F6F0205B79225742D091A5832686203021528177CCF46 -0A59DA647C8C26266C288135937B393A38AD6B64CD440A48CE63678E2B2A5E34812B8347 -4701426BA32A13361AA2AC0E0CA00A1A4E58182D0F02023B23D3434F5056422222180918 -0E27976E457A302F373123C935494F4E452323160C180A1E494AFFFF0073FFE505460801 -0236002600000117008D006E0175000BB601002D2C0C1525012B3500FFFF0069FFE703F3 -068C0236004600000116008DCE00000BB601002423090F25012B3500FFFF0073FFE50546 -0801023600260000011700DF00A80175000BB601002E2B0E1525012B3500FFFF0069FFE7 -03F3068C023600460000011600DFF600000BB601002522090F25012B35000002006CFFE1 -04FB0614001B0028006F404A3B05380C3C2232243E284B054A0C4E2245244F2859086908 -70120D0114511A17171018011304072041100403082642070A160088011617131C041A1A -01922A1F2A3F2A02231B010A852910F632ED5D10F632FD3232323210E42F003FED3F3FED -1239393F12392F3CFD3C31305D01231123350E01232202113436373E0133321617352135 -213533153301112E0123220615141633323604FBB8BC4DAD6EC6ED524444B66059864CFE -95016BBCB8FE8C4F73499CB2879750A404F4FB0C754252012E01118EDB4D4C4F2427CE86 -9A9AFB9902792218D6CCC3CD47000001FFFC0684051A06FC00030011B601500200000502 -2F11332F002FED313001212721051AFAE705051E06847800000100FD01FF01EC031A0003 -0016400C02560108002D2F013F0102012F5DED003FED31300123113301ECEFEF01FF011B -FFFF001A0000055E0801023600240000011700D900310175000BB60200110B050025012B -3500FFFF0068FFE1041D068C023600440000011600D9D600000BB602003A340B2625012B -35000002001AFE5F062B05D1001B001E00C840900F051F052E053E05401D700806381C4A -0E450F590E570F051D1E1D1C0A77098709020914100F101D1E0B770C870C020C140D0D0E -570E580F7D0E730F040B34301E401E701E031E091E1D030D0E031B1B1753030D107A0D01 -0D080000142A060F20010E0F1D06040D0C102410391042105A106A1074100710106E200F -20010A0D2B0D360D4D0D550D650D7C0D070D641F10E65D5D10F42F5D1217395D2FED332F -003F5D3C3FFD322F3F1217392F5DED3130015D8710FD5DC0C0C08710FD5DC0C008C0015D -005D010E012322263534363703210323012101230E0115141633323637330902062B344B -2A8BA91E0679FD7C92C9021E0108021E610607535A24511108FD91FEFBFEFAFE790E0C9D -90406A150154FE6105D1FA2F1B351B524E1B08033102DBFD250000020068FE5F052E0478 -003A00470099406A0B11052B1A12162B2A0544225F25544065166C2562407B127B1D7F25 -703F0F0C041B04390559166916053A3A3653030D0A103C3D301940190219192810242420 -3F28044541100A3009080000332A060F25012506193B091A2F25132F91490F491F493F49 -03421B13854810F6ED5D10E4113910FD3232322F5D2FED332F003F3C3FED3FED332F1112 -392F5DED12393FFD322F31305D015D010E0123222635343637350E01070E012322263534 -3637362437353426272E012322060723353E01333216171E011511230E01151416333236 -373301110E01070E01151416333236052E344B2A8BA90D041955282F7A5297D26D656601 -1EA42D2A28703D4AB6610A37D06576AF403F421D0607535A24511108FE3456E944516474 -7763A4FE790E0C9E8F263B1377113D12171FC89B7F9D2D2D20081D40541817102725BF0F -24272F2E926CFD0A1B321E524E1B0801FB013705141317615560614DFFFF00C8000005B2 -0801023600270000011700DF00280175000BB60200211E080F25012B35000003006CFFE1 -062706140003001700240072B90000FFC0404A0E10370118090D3702180910373D073D1E -34203B244D074F1E45204B245A0A6A0A70140B02020316011506091C4112040508224209 -0A0000021618061A02041F263F26021F1B040C852510F632ED5D2F33FD32322F332F003F -ED3F3FED1239393F33332F31305D012B2B2B010323130123350E01232202113436373E01 -33321617113303112E012322061514163332360627FA7F98FEFDBC51B067C8EB514544B5 -6158884BBCBC4C78479EB0889650A40614FE0701F9F9EC75464E013401118EDE4E4C5025 -2701E4FAFF0281221ADCCAC7CF47FFFF000E000005BC05D1021600E70000000100C8FE5F -04CD05D10020005C40390C041C042D043D04041235000F100F020F0F090E350B03133516 -090820201C53030D00192A0006060C10030A1473220F22010F1314140A6C2110F432FD32 -5D10E61117392F33ED2F003FFD322F3F3CED3FED12392F71ED31305D010E012322263534 -3637211121152111211521112115230E01151416333236373304CD344B2A8BA90B06FDC7 -03D5FCF1030FFCF1030FFE0607535A24511108FE790E0C9E8F24331D05D1B0FE68B0FDD7 -B01B351B524E1B080002006AFE5F0460047C002C0033007B40560D1E1A1E2604290D2B1E -34043A0D3C1E3B3244044B0D4B32590D502A6C0D602B790D783212191915531D0D013C33 -3323303D29040F230B0B073F2309122A20201A1A0C0C2D1A008F350F351F353F35033301 -1B26853410F6FD325D10F4ED332F3C11332FED003FED332F12393FED12392FED3FFD322F -31305D01211416171E013332363733150E01070E011514163332363733150E0123222635 -343637260011100033321215272E01232206070460FCC93E36348F5672E7310A4A9B5102 -03535A24511108344B2A8BA90604F8FEEB012BF4E2F5B701939697B30C021B6799313030 -5B2CCD1F3109143012524E1B089F0E0C9E8F18321212012A010401120142FEF8F32A94A2 -B284FFFF00C80000049D0801023600280000011700DF00220175000BB601000F0C020325 -012B3500FFFF006AFFE60460068C023600480000011600DFFD00000BB602002320120025 -012B3500FFFF00C80000047608010236002F00000117008DFEC00175000BB60100080702 -0325012B3500FFFF00AB0000025108010236004F00000117008DFE8E0175002FB5700270 -030203B8FFC0B3090C3702B8FFC04011090C3701044F049F040201000605020325012B35 -005D11352B2B5D00000200C80000047606140005000900464016070C0B0D370808090102 -030435010800000B0F0B0106B8FFEA40110E1037080C0B1037060608041408016C0A10F6 -32ED2F332F2B2B5D11332F003FED3F3F332F3130012B2901113311210B0123130476FC52 -C602E8C3FA7F9805D1FADF0564FE0701F900000200BB000003540614000300070042400D -010C0B0D370202030601050800B8FFEA40190E1037020C0B103700000F021F0202020204 -1A7F050105880810F65DFD322F5D332F2B2B003F3F33332F3130012B0103231303231133 -0354FA7F98FCBCBC0614FE0701F9F9EC0614000200C80000047605D1000500090036401E -07562F0801080801020304350108062D07070100000B0F0B010414016C0A10F6ED5D1133 -2F12392FED003FED3F12392F5DED3130290111331121032311330476FC52C602E89CE9E9 -05D1FADF0157010B000200BB00000362061400030007002D401A05560606010201010807 -2D6F067006020606001A7F010101880810F65DED332F5DED003F3F12392FED3130212311 -33012311330177BCBC01EBE7E70614FBF4010900FFFF00C8000005380801023600310000 -0117008D00780175000BB601000C0B050925012B3500FFFF00B90000045F068C02360051 -00000116008D0000000BB6010019180E1625012B3500FFFF00C800000538080102360031 -0000011700DF00A20175000BB601000D0A050925012B3500FFFF00B90000045F068C0236 -00510000011600DF1C00000BB601001A170E0225012B3500FFFF0073FFE105DA08010236 -00320000011700DD008C0175000DB703020029260F0325012B353500FFFF006AFFE10471 -068C023600520000011600DDD800000DB70302001D1A060025012B353500FFFF00C80000 -059808010236003500000117008DFFF60175000BB602002221060B25012B3500FFFF00B9 -00000372068C0236005500000117008DFF380000000BB6010015130A1225012B3500FFFF -00C8000005980801023600350000011700DF000A0175000BB602002320060B25012B3500 -FFFF009200000372068C023600550000011700DFFF600000000BB6010016130A0325012B -3500FFFF0086FFE5050208010236003600000117008D00140175000BB6010033321A1F25 -012B3500FFFF006EFFE503D7068C0236005600000116008D9400000BB601003635063225 -012B350000010000FE5904EE05D1001B0048402E0C071C072C073C07040C0C1053080D01 -18351A030216080B0B132A050F1D1F1D4F1D03005B050114185B4F1901192F5DF4FD32E4 -5D2FED332F003F333FFD323FFD322F31305D0121111E011514062322262735331E013332 -3635342627231121352104EEFDEC0309B79225742D091A58326862050332FDEC04EE0521 -FB04144822A2AC0E0CA00A1A4E581E36170521B00001003EFE5902FD059E0030006F4046 -0C080D1A19081E1A2B082F1A3C08070D0D1153090D20251C3E22201F0503171830302C3F -18094F327F32020C0C142A06182306031C008C321D22251A1F1D4F1C7F1C021C883110F6 -5D3232FD322F10E61117392FED332F5D003FFD322F1239393F3333FD322F3FFD322F3130 -5D250E01071E011514062322262735331E01333236353426272322263511233533113311 -211521111416171E01333236373302FD0C1C100204B79225742D091A58326862030214AB -B27F7FBC0184FE7C0818164D4F2E64160A0A030703122C18A2AC0E0CA00A1A4E58172F10 -B7CB02529E0141FEBF9EFE0358632B28251B0900FFFF0000000004EE0801023600370000 -011700DFFFEE0175000BB601000B08060725012B35000002003EFFEA037A0705001B001F -0073404C0B041C042A042A1D2A1E3A1D3A1E4A1D4A1E551C641C691E741C791E0E1F1F1E -0B10073E1E0D0B0A051B1B173F03094F217F21021C1C1E1E100E008C21080D101A0A0800 -4F077F070207882010F65D323232FD322F10F63211392F332F5D003FFD322F3F333333FD -322F2F332F3130015D250E012322263511233533113311211521111416171E0133323637 -331303231302FD357D31ABB27F7FBC0184FE7C0818164D4F2E64160A7DFA7F980A0E12B8 -CB02529E0141FEBF9EFE0358632B28251B090652FE1101EFFFFF00B2FFE1052908010236 -00380000011600DB63500079405B02010900210140215021A02103EF102101902101BD00 -210150218021028B10214021702103B021C021F021039021C02102599021C021E0210310 -21602190210331002101E021010F211F214021502180210521020100241E0D1D25012B35 -3500115D71725E71725E5D71725E5D725E5D725E5D715E353500FFFF00B1FFE1045707B1 -023600580000011600DB0000000DB70201001D17091625012B353500FFFF00B2FFE10529 -0801023600380000011700DD00780175000DB7020100241F0D1D25012B353500FFFF00B1 -FFE10481068C023600580000011600DD0A00000DB70201001D18091625012B353500FFFF -007E0000050808010236003D00000117008D00070175000BB601000B0D050625012B3500 -FFFF005D000003E3068C0236005D00000117008DFF680000000BB601000B0D050625012B -3500FFFF007E0000050807500236003D0000011700DA00390175000BB601000B0A050625 -012B3500FFFF005D000003E305DB0236005D0000011600DA9200000BB601000B0A050625 -012B3500000100C80000048A05D10005001F401003013504030000070F07010214036C06 -10F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D100030073 -FFE105DA05F0001700230027006D404F040004060B0C0B1217001706190C191257015705 -53075F0B580D58115F13531710253560260126260976097915021B3415022134090A2726 -27260F18150373290F29010F291F293F29031E150F682810F6ED5D5D10F6ED1239392F2F -003FED3FED5D12392F5DED3130015D011612151402070E01232224272602353412373624 -33321613100023220011100033320003213521051E5B6163595CFBA19DFEFF5A5A61605C -5801059AA0FF47FEFCE1E3FEFD0108DEDE0107ACFD8D0273052664FEDEB8B8FEDD616566 -6863630120B9B6012167626869FD610122013BFEC5FEDEFEDBFEC901370106B300030069 -FFF0062405E1001D002A00370058403624182C321525062B32091509081603082A1E2532 -65006A0F041E150032150F00072B1518250407140F080839381F393F396F399039045D11 -12392FC4ED173910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01 -071523352E01272E01353436373E01373533151E01171E01073426272E0127113E01373E -0101110E01070E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F -4B57CE403B3A8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A -524AD88C88CC4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01 -363737AA6170B63A2D3C0002006CFFE10443047C00130020005740162A032A203C1A301C -38204F1A421C4820580668060A10B8FFC040230B1037120502110518410E0401081E4205 -0A1114021A0092221F223F22021B1B08852110F6ED5D10F6FD3232003FED3F3FED123939 -3F31302B5D2123350E01232202113436373E0133321617353303112E0123220615141633 -32360443BC51B067C8EB514544B56158884BBCBC4C78479EB0889650A475464E01340111 -8EDE4E4C502C2734FCB6027C221FDCCAC7CF47000002006AFFE104730614001900280086 -4029031C0520171526153B0A3A0E3A1C3E214C0A490E4A1C4F2153176B0E7B0E7A207B21 -1136264626021DB8FFE04034121C371D180A11371D171D0C050F133E1001263F030A1111 -001D0C0F1A1B00140F00902A0F2A1F2A3F2A6F2A040F0F231B06852910F6ED332F5D10E4 -113910ED11393911332F003FED3FFD323F33332F2B2B5D31305D01100023220011343637 -3E01372E012735211521151E01171E01073426270E01070E011514163332360473FEEBEE -F1FEEB564045B45C4CB466032AFDCF44DE5D9676C26E6E4291423F55AA9C99A60227FEF0 -FECA012F01068DC5404852113F8748B39E0A2E9C5488FBA487E45608303532AE7FC9D0D3 -0001006DFFE603EE0478003D007C40432612263B363B49014418590154186A016F0B6418 -79017A0B7418792274350F0C2C3F2B2B03161A1A1E3E16043D3D393F0309192B40090C37 -2B241B10100C2B19040900B8FFC0401009143700003F7F3F803F02331B09863E10F6ED5D -11332F2B1217392FED2F2B2F003FED332F3FED332F1112392FED3931305D250E01232226 -272E0135343637352E01353436373E013332161715232E01232206070E01151416171E01 -3B0115232206070E01151416171E01333236373303EE6BCE734FA446455771795B6C5F41 -40A24F62A45A0D42C3642D4E2A233338302D68356F9E3E642A2931342925653866E8470D -40302A2028277F5E6090260718845C5975222120211CCF33380B140F432C3D440F0E03A6 -0911114A3B354A151314483E0002006AFFE1050F047C0011001D004D40163A15351B4A15 -451B040E3F0D05153E09041B3F030A0FB8FFC040190B0D370E0E090C0F0306121B00901F -1F1F6F1F02181B06851E10F6ED5D10F4ED121739332F2B003FED3FED3FED5D3130011000 -232200111000333216172115211E010734262322061514163332360471FEE7E9F1FEEC01 -1AED376A1D01E0FEE03E44C2A49AA1A4A79C98A8022EFEE7FECC013C01110113013B1609 -A549C27FD7D6E0CDD1DAD7000001000A000003EE045D0007003840230301043F06054000 -4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32 -2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A50002 -0068FE6405EA047A001D0024007840163515740F022110090C37213E1A040F0522037717 -0117B8FFF0400F090C37173E0609050C75147A1E0211B8FFC040250D103711112217041A -05050C1E1B3A0001008F260F261F264F266026040F2601141B0C852510F6ED5D5D10F45D -ED12392FED3939332F2B5D003F3FED2B5D39393F3FED2B31305D011000051123112E0127 -2E01353412373315060215141617113E0133200003342623113E0105EAFEA9FEF3BB82DD -51555E7685E58894E1BD214B270130015DC3E0C1CED30240FEFDFEC40FFE72018E065145 -4AC4869F01128A1163FEF6A7BDE60603E80201FED5FEFBB8DBFCB20AE8000002FFFCFE59 -051AFFAE000300070020400F02500101080650050D0400000905022F3311332F33003FED -12392FED31300521352111213521051AFAE2051EFAE2051ECA78FEAB7800FFFF01230000 -03DC05D10036000400000117000401D90000001E40140302200D5F0D6F0D030D01000005 -10057F0503052F5D35352F5D35350001009A022A03C605F00016004DB90014FFE0B3090C -3715B8FFE0B3090C3713B8FFF84017171B370110130D0D085313020E03012A000018100B -2A0DB8FFC0B3090A370D2F2BFD3211332FED003F3FED332F1239332B31302B012B012311 -3426272E012322060711231133153E013332161503C6AC0E15164D40418D41ABAB4BA254 -9AA6022A0215466A2424234332FD4503AB683E45B9AB000200C8FFE508CA05D1004E005D -00E240210B18044D19012E18204D55316A186631654D791375487952735A0D05200E1037 -3DB8FFE040310E103711001A46043B033F400B0D373F3F433E3B4F3501353B351E37213E -34243134032C573450290129292B56342C0307B8FFC0403C0B0D3707070E3E0309202B3A -4F4A4F0237341F1A20201A330606461A381D3E1A3E1A3E111A00005F0F5F014F13225F33 -7F33023333572A13702B012B2F5DFD32332F5D39ED5D11332FED33332F2F123939ED332F -1112392FED39395D002F2F3FED332F2B3FED12392F5DED1217392FED393933332F5D2FED -332F2B1112173931302B2B5D0114062322262735331E01171E01333236353426272E0127 -2E013534363723112311230E01070E012B01112311333216171E011733353315213E0133 -32161715232E01232206151416171E01171E01013426272E012B0111333236373E0108CA -E2BE6ABA3D0917472D356145667943552A62377E6E0F12DDB57C0C3B2F4DCCA030BCF486 -B44847580A78B5017F24733155B53E0940B15B59723B562E642E7284FA5E36372F83572E -1178962F2F2701429BC23C22D31331161A1E4C5A4844160B131026956E254426FC4E03B2 -45792F4D4DFDD505D12D302F9364DCDC12183024C935494E4F4648170C180C1E8E024F4D -75241F1DFDA32D2F306DFFFF0089FFEB063E05D10036002C00000117002D035400000005 -B20F23015D00FFFF00AFFE59043D05DB0036004C00000117004D02280000001840115023 -60237F23030302500C600C7F0C030C2F5D35355D000200000000052706140016001A0065 -B90017FFE8403F0D10371818090C3719180910370315161575150318181701100D084213 -040E05010D08171740190119100B1A19300D500D700DAF0DCF0D050D0D021A00911C10F6 -ED332F5D33FD322F5D332F003F3C3F3FED12393F332F31305D012B2B2B2123113426272E -012322060711231133153E0133321615090123130527BC1218195E4B4DA84DBCBC58BC63 -B5BEFC72FEF18AA5027C4D87262A294C3BFCBE045D7C4952DACD033FFDD1022F000100D5 -0366028705D100030027B90000FFE840140D10370118090C3702180910370101030300B1 -022FED003F332F3130012B2B2B090123130287FED688C205D1FD95026B00000200D50366 -041805D1000300070050B90004FFE8400E0D10370518090C37061809103700B8FFE84020 -0D10370118090C37021809103746000101050503070304B13F0601060600B1022FED332F -5DED003F3C332F3C3130015D2B2B2B2B2B2B09012313210123130287FED688C20281FED6 -88C205D1FD95026BFD95026B00040095FFE3080705ED001B001F002B003700CA400C471D -481F561D591F681E050BB8FFE040160E103701200E10371F1D1C071D171D021D291E1E1F -29B8FFF44012090B37230C090B374F0D401B7A2F75350417B8FFE8404A0E103711180E10 -371F031B1B17512F034F0302030D030D115109022F51202940290229293551230A1E0840 -1E011C1E322A00260126262C2A1C1E062020390F39010D2000010000142A062FED332F5D -335D11332F123939ED332F5DED2F2F5D003F3FED332F5DED3FED33332F2F5DED332F3F2B -2B5D2B2B3130018710ED5D87C0002B2B015D010E012322263534363332161715232E0123 -220615141633323637330901230901140623222635343633321607342623220615141633 -3236032D1E934EC0D9DDBC417F3F0E3C73396D7F7B71497A250E02F5FCF4A5030C028ABE -B2B5BABDB2B6BAB2596466585866645902BE1232E6D2C9F22121AD3233959C9698422302 -68FA2F05D1FBCCE0DADCDDE0DADADFAC8888ADAD87870002000FFFE8028605D3001B002B -006E400D531D621D701C0316180B113705B8FFF040310B0F37001A010B1C051B1B051612 -120F5216092550050347080112121F2908401114372F0801081C1B001A0008030B2A01B8 -FFC0B3101437012F2BED17332F33322F5D2BED332F5D003FED3FED332F1112392F17392B -2B31305D13371134363332161514020711141633323637150E012322263D0107133E0135 -3426272E01232206070E01150FB17B6F607C78A51D1B1A44693771395C6B4FF8622F0D0D -0A190F0F19060B0C01A6EB01C7E299826D5CFEF7E6FE61592B214AA22C2B727FE162022B -A980371E30110C0D0C0E156E5800000200920000044203B0000300070025401507CB0101 -05CB0307CB010105CB00031003300303032F5DED332FED002FED332FED31301321112113 -1121119203B0FC504C031803B0FC500364FCE80318000001008301BD0252038C00030017 -400B02020300000002300202022F5D332F002F332F3130011121110252FE31038CFE3101 -CF000002008301BD0252038C000300070023401306CB020205CB0304CB000006CB000230 -0202022F5DED332FED002FED332FED313001112111052111210252FE310183FEC9013703 -8CFE3101CF4CFEC9000100B10088042203F9000B0021401409090F032F034F0303030606 -00009000A00003002F5D332F002F5D332F3130133400333200151400232200B10102B7B6 -0102FEFEB6B7FEFE0240B70102FEFEB7B6FEFE0102000002007001AA026603A0000B0017 -0065400B06102326370610171A3700B8FFF0B323263700B8FFF04015171A3712CB06060C -CB000910171A3709100B0E3703B8FFF0B3171A3703B8FFF040130B0E3715CB03030FCB00 -0920093009600904092F5DED332FED2B2B2B2B002FED332FED2B2B2B2B31300132161514 -06232226353436172206151416333236353426016B689393686893926949666748486766 -03A093686893936868934C674849666649486700FFFF001A0000055E073C023600240000 -011700D80031016B000AB602000C0B0607252B35FFFF0068FFE1041D05D1023600440000 -011600D8D900000AB6020036371D26252B35FFFF0073FFE5054608010236002600000117 -00D600A90175000AB601002F2B0F15252B35FFFF0069FFE703F3068C0236004600000116 -00D6F4000011400C014026502602002622060F252B5D3500FFFF0073FFE5054607500236 -00260000011700DA00A80175000AB601002C2B0F15252B35FFFF0069FFE703F305DB0236 -00460000011600DAF5000011400C012024302402002425060F252B5D3500FFFF00C80000 -049D073C023600280000011700D80033016B000AB601000E0F0203252B35FFFF006AFFE6 -046005D1023600480000011600D8F700000AB6020022231200252B35FFFF00C80000049D -0801023600280000011700D900400175000AB60100120C0203252B35FFFF006AFFE60460 -068C023600480000011600D9FE00000F400A027026010026201515252B5D3500FFFF00C8 -0000049D0750023600280000011700DA004F0175000AB601000E0F0203252B35FFFF006A -FFE6046005DB023600480000011600DA0000000AB6020022231218252B35FFFF0073FFE3 -05A208010236002A0000011700D600D00175000AB601002925070F252B35FFFF006CFE59 -0443068C0236004A0000011600D6FB000011400C0230354035020035311A23252B5D3500 -FFFF0073FFE305A207500236002A0000011700DA00CE0175000AB601002728070F252B35 -FFFF006CFE59044305DB0236004A0000011600DAF5000011400C0250336033020033341A -23252B5D350000010073FE5905A205EC0038009540200906060E07261D06130E210E350E -4901410E510E6506650B630E740E741C0F2CB8FFE04043090C37323236532E0D28032235 -40230123230C03101017340C021D34030A3131002A0F2B1F2B022B760901221022042B27 -040910216C25753A0F3A403A021A1509683910F4ED5D10F4ED331217392F2F5D2F5DED33 -2F003FED3FED332F1112392F5DED12393FFD322F3130012B5D0534262722242726023510 -002132041715232E01272E012322001110002132363711213521110E01071E0115140623 -22262735331E0133323603820302ADFEE066677001A1016C7F010999121F763945AF6FFA -FEDD0130010660BF48FE7102535AD45E0103B79225742D091A583268626B152B0F5F6061 -0123C30165019D3D49EB184E1A1F29FEBFFEEEFEDFFEBF261E016DAEFD8129460F0E2516 -A2AC0E0CA00A1A4E0003006CFE590443068C002300300034009F406F243234320233200D -10373D133E2A322C3A3044094B134C2A422C4B305B015D055A166A016C056A167C057020 -112F343F344F3403343433331E220512211528401E0407070B40030D2E41150731315033 -603302333300180F0601062124121A0006180092361F363F36022B1B18853510F6ED5D10 -E4113910FD32322F5D1112392F5D332F003FED3FED332F3FED1239393F11332F332F5D31 -305D012B5D2510002122262735331E01333236373E013D010E01232202113436373E0133 -321617373303112E01232206151416333236130323010443FEFEFEF459A9520A2EC86460 -7E23231E559B78C8EB514641BA5C6183490CB0BC4B81409BB2849952A534B3F301117FFE -E4FEF61917C012352E29276E446644430121010790D14C474F272830FCD60261221DD0C6 -BCC23F058EFE8A017600FFFF00C80000053B08010236002B0000011700D600760175000A -B60100100C060B252B35FFFF00B90000045F08010236004B0000011700D600220175001A -4012014F1B6F1B9F1B031B112601001B170808252B35002B5D3500020020000005E305D1 -001300170060403D0E1201160408520B400C0F370B0B0C05350017101702170B10170304 -070C03070000120F150303140278190F19401950190309090B0E16030614076C1810F6ED -1739332F5D10F6ED1739332F002F3F1217392F71ED12392F2BED17393130012311231121 -11231123353335331521353315330135211505E3A8C6FD19C6A8A8C602E7C6A8FE92FD19 -0455FBAB02D9FD2704558CF0F0F0F0FEA8CCCC00000100130000045F0614001E00504030 -031D161D751D0317140E51111112180D08421B041201010D08150F021A0091201F206020 -02141517030B1A110F0D881F10F63232FD17325D10F6ED2F2F003F3C3F3FED123912392F -ED393931305D2123113426272E0123220607112311233533353315211521113E01333216 -15045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC63B5BE027C4D87262A294C3BFCBE -04F4869A9A86FEED4952DACD0002002C0000033307C8000B0025006DB9001BFFD040400B -10370E300B10370C0C15520F1C1F1C021C191C192252700F010F0F09043206030A033201 -0825280F0C1F0C020C1828190C276D080B5A0A1405025A19036D2610F432ED32FDED32E4 -332FED2F5DED003FED323FED32332F5DED33332F2F5DED332F31302B2B29013533112335 -2115231133130E01232226272E0123220607233E01333216171E013332363702D5FDB4C3 -C3024CC3C35E077D663453262D3C20302D0288037E683351282A431D2E31019804A19898 -FB5F0730989724262B2A5B4B88A6242528295B470002FFF200000241063C0003001D0054 -40347C0673130204040DAA1440090C37141114111AAA0707020501081DAD0440090F3704 -10AD117F1F011F9204001A117F010101881E10F65D32FD32ED5D2FED2F2BED003F3F332F -ED33332F2F2BED332F31305D21231133131406232226272E012322061523343633321617 -1E01333236350177BCBCCA6750283A1E202D17232170684E2F3220212C162421045D01DF -81821A202322454181821B1F2322483E0002005F000002FF073C000B000F004D40150E32 -0D0D09043206030A033201082F0F3F0F020F0EB8FFC040150B0D370E0F116D0A080B5A0A -140305025A0E036D1010F632F43210FDF43210E6332F2B2F5D003FFD323FFD32332FED31 -302901353311233521152311331321352102D5FDB4C3C3024CC3C32AFD6002A09804A198 -98FB5F060A9A0002FFFC0000023605D1000300070032401D025301010605057F00700202 -00027F0901099200041A027F050105880810F65D32FD32E65D2F2F5D002F3F332FED3130 -01213521032311330236FDC6023ABFBCBC05379AFA2F045D00020080000002DF07D3000B -00190059401F0C701201121216AA0F0F09043206030A0332010819290C400B0E370C1329 -12B8FFC040130B0F37120C1B6D080B5A0A1405025A12036D1A10F432ED32FDED32E4332F -2BED2F2BED003FED323FED32332FED332F5D333130290135331123352115231133131406 -232226353314163332363502D5FDB4C3C3024CC3C30A939C99979E454D49489804A19898 -FB5F073BA8CFCFA886726E8A00020001000002300668000D0011004840150006060A5003 -0310050F0D2900400B103700072906B8FFC040130B1037067F13011392000E1A067F0F01 -0F881210F65D32FD32E65D2F2BED2F2BED002F3F332FED332F3331300114062322263533 -1416333236350323113302308B8C8A8E924145414427BCBC06689AC0BE9C7A6B6283F998 -045D00010089FE5F031C05D10020004F402D1C20090C3709043206030A03320C01081717 -13531B0D1818102A1E1E0B02226D0A080B5A0A140305025A036D2110F4F43210FDF43210 -E61112392FED332F003FFD322F3F33FD323FFD3231302B21233533112335211523113315 -230E011514163332363733150E012322263534360174EBC3C3024CC3C3C2060942582141 -1309245122879A099804A19898FB5F981C29265150130B9E0A0BA08C22350002008EFE5F -024605DB0003001B0056401C0820090C371B1753070D014402400B0D3702030E050D1104 -04142A0AB8FFC040170B17370A0A0E7F1D011D9200600F1A01607F0E010E881C10F65DE4 -FDE4E65D11332F2BED332F002F333F3F2BED3FFD3231302B01233533130E012322263534 -3637113311230E0115141633323637330183D4D4C3245122859C2508BC3C060742582141 -13090518C3F8990A0B9E8E3F6F19040BFBA31A361B5150130B00FFFF002CFFEB034D0801 -0236002D0000011700D6FF6C01750014B1011AB8FFC040090B0E37001A160415252B2B35 -0002FFC2FE5902AF068C0015001C005540340A011C0102551B651B751B0318161A1B1B1A -1A123E150507070B40030D1A1A4F1301137F06010616121A1306160370150115921E10F4 -5D1732ED2F2F5D2F5D332F003FFD322F3FED332F332F1239395D31305D05140623222627 -35331E01333236373E01351123352137230B012313330209C8A828832C0A1C5F2D485816 -160DE901A5A69FB9B89BE4E31BC4C8100CB30B1C282828715103849EB40100FF00017B00 -FFFF00CDFE59057505D10236002E0000011600DCFB00000AB601001A0C0500252B35FFFF -00C1FE5904AF06140236004E0000011700DCFF7C00000011400C01301A401A02001A0C05 -0A252B5D3500000100C1000004AF045D000B007D40512802D801DB090309010F0D1F011D -021F0D2D012F0D300B400B540B69027A010C020203011A000B000809B4020B0A030A0802 -050A0507050105080B02600A700A020A0A00000D200D400D0208031A05890C10F4FD325D -11332F332F5D3939003F3C3F3F1239393130018710C0C07AF51804C0018710FD08C0015D -7121230107112311331101330104AFF8FE407ABCBC021FEDFDF901E974FE8B045DFDD102 -2FFDFC00000100C8FE59047605D1001A003F40240C20090C37111115530D0D0203043507 -01081010182A0A0A0105051C0F1C010414016C1B10F4ED5D11332F12392FED332F003F3C -ED3F3FFD322F31302B29011133112115211E011514062322262735331E01333236353426 -02BFFE09C602E8FEE30204B79225742D091A583268620605D1FADFB0122F18A2AC0E0CA0 -0A1A4E581E3E00010005FE5901E906140018003D40240A20090C370F0F13530B0D020104 -01080E0E082A1616017F1A011A92041A7F010101881910F45DFDE45D12392FFD322F003F -2F3F3FFD322F31302B2123113311331E011514062322262735331E013332363534260149 -8EBC6C0105AE8525642809184E285E52010614FA00123724A2AC0C0CA00B174F57153300 -FFFF00C8FE59053805D1023600310000011600DCFE000013400E01201630164016030016 -0A0400252B5D3500FFFF00B9FE59045F047C023600510000011600DC8B000013400E0100 -2310232023030023170D00252B5D3500000100C8FE59053805D10016009D401F00076107 -7107A107040C070B0C1B0736074607540765077507B001B0070A07B8FFC040510B113776 -06010F0102061F01150626013601340646014406560153066006790170060E0406015A01 -550602111115530D0D0207040806030A0104080110100A06010207130A78180F18401802 -0213046C1710F4ED5D10F4FD11393911332F2F003F33333F3C1239393FFD322F31300172 -715D5D002B5D71043501112311210111331114062322262735331E0133320480FD01B901 -330284B9CEB42751250B163A1E7F948A053EFACC05D1FBA00460FA18BFD10806A8050A00 -000100B9FE59045F047C00260045402B03150C191615751504100D084213040E050D081E -1E22531A0D1D1D021A1791281F28602802100B1A0D882710F4FD325D10F6ED332F003FFD -322F3F3F3FED123931305D0435113426272E012322060711231133153E01333216151114 -062322262735331E01333236373603A31218195E4B4DA84DBCBC58BC63B5BECCB4274E26 -0B163C1A4C6117162556024B4D87262A294C3BFCBE045D7C4952DACDFD0FBFCC0706A805 -0A262626FFFF0073FFE105DA0746023600320000011700D8009B0175000AB6020026270F -03252B35FFFF006AFFE1047105D1023600520000011600D8E300000AB602001A1B060025 -2B35FFFF0073FFE105DA0801023600320000011700D9009C0175000AB602002A240F0325 -2B35FFFF006AFFE10471068C023600520000011600D9E400000AB602001E180600252B35 -FFFF00C8FE59059805D1023600350000011600DCF600000AB602002420050D252B350001 -001BFE590372045D002700574034000D100D200D032120090C370C090F131317430A0F05 -1C090826260253220D25251F2A05050913132940297029020C1B1A09882810F4FD325D11 -332F11392FFD322F003FFD322F3F2F3F3CFD322F11123931302B5D1E0133323635342627 -231133153E013332161715232E012322060711331E011514062322262735333C4E285E52 -0102A6BC70AB59312C2C0A2A4F3657A24B840105AE8525642809FA174F57153323045DA5 -5A4B0507C10A094D3DFCFB123724A2AC0C0CA000FFFF0086FFE505020801023600360000 -011700D6004A0175000AB6010035311A00252B35FFFF006EFFE503D7068C023600560000 -011600D6AF00000F400A017F38010038341A00252B5D350000010000000004EE05D1000F -004140250D0A003203030F09043506030F0F111F114F11030B020B085B090D0009140204 -5B4F0501052F5DF432ED393910E4332F2F5D002F3FFD3212392FED393931300121352111 -21352115211121152111230214FEB4014CFDEC04EEFDEC014CFEB4C602E48F01AEB0B0FE -528FFD1C0001003EFFEA02FD059E0023006E40210420090D37181507510A0A0E030F140B -3E110F0E0523231F3F03094F257F250216B8FFC0401E090B3716160713008C250909070C -0A0E111504181A0C07400D103707882410F62B32ED17392F12392F10F63211392F2B5D00 -3FFD322F3F3333FD322F1112392FED393931302B250E012322263D012335331123353311 -331121152111211521151416171E01333236373302FD357D31ABB27F7F7F7FBC0184FE7C -012DFED30818164D4F2E64160A0A0E12B8CBA88601249E0141FEBF9EFEDC865358632B28 -251B0900FFFF00B2FFE1052907C8023600380000011700D700610175000AB601002B1E0D -1D252B35FFFF00B1FFE104570653023600580000011600D70600000AB601002417091625 -2B35FFFF00B2FFE105290746023600380000011700D800630175000AB6010020210D1D25 -2B35FFFF00B1FFE1045705D1023600580000011600D80100000AB60100191A0916252B35 -FFFF00B2FFE105290801023600380000011700D900630175000AB60100241E0D1D252B35 -FFFF00B1FFE10457068C023600580000011600D90100000AB601001D170916252B350001 -00B2FE5F052905D1003400634044231223183D093D2139224C094C214B22771377170A33 -20090C372E2E2A53320D1C24060D031534060A2F2F272A00060023030C1B141E76360F36 -1F364036030F140C6B3510F4ED5D10F6ED1217392FED332F003FED3F1239393FFD322F31 -302B5D053436372206232226272E01351133111416171E01333236373E01351133111406 -070E01070E011514163332363733150E012322260314050509190F8CD0475147C621272C -976A6B962D2721C647512D683D0405535A24511108344B2A8CA8741A271601494852E8A9 -037BFC7B798C394142414239936D038AFC85A2F1502C3B10143C17524E1B089F0E0C9F00 -000100B1FE5F0567045D002A005C40220B0619077A07032720090C370205150905114205 -0A010822221E53260D23231B2A29B8FFC04015091037292914021A17922C1F2C602C020B -1A08872B10F4ED5D10F4FD32322F2BED332F003FFD322F3F3FED3F3C123931302B5D0437 -350E01232226351133111416171E0133323637113311230E011514163332363733150E01 -23222635340395065FAE69B0C4BC101A1B565249AD4BBC1E0607535A24511108344B2A8C -A81D1D7C4B50D7D002D5FD8455792B2C284C3B0342FBA31B351B524E1B089F0E0CA08D24 -FFFF005C0000078D08010236003A0000011700D601690175000AB60100110D0600252B35 -FFFF005600000636068C0236005A0000011700D600BB0000000AB60100110D0600252B35 -FFFF0006000004E608010236003C0000011700D6FFEE0175000AB601000D090500252B35 -FFFF003DFE64047F068C0236005C0000011600D6DD00000AB601000C080400252B350001 -00B900000308061E0010002440140000043F0D0009080000081A6F097F090209891110F6 -5DED332F003F3FFD322F313001232E012322061511231134363332161703080A1F642679 -67BCC2BF3F652A055E09136B8CFB7D0482C2DA0C08000004001A0000055E08000012001E -00210025013F40862B20372040205A18551A501E55206918651A651E0A180B170D4A0646 -125906561278027703082020211F02370187010201140012002021033704870402041405 -05060606091226062912370638124606491258127A0675120B24240C702501251651A00C -F00C02060C160C3F0CF00C040C03340F2170210221212006120405201C401C020C1CB8FF -C0406C393937501C701C021C01050824400E10370F242F240222222440090D372413290F -0F2F0F4F0F8F0F9F0F050F19290009200940098009900905090F270106090F122405050C -0024003A0042005A006A0074000700006E270F27010A052B0535054D05550565057B0507 -05642610E65D5D10E62F5D1217395D2F5DED2F5DED2F2B332F5D2B003F3C2F5D2B335D12 -17392F5DED2F5D72ED2F5D12392F3130015D8710FD5DC0C0C08710FD5DC0C008C0015D00 -5D212303210323012E013534363332161514060727342623220615141633323613090207 -2337055ED394FD8094C901F83139A17373A039302A47393948493838487DFEFEFEFD021D -F39595019FFE6105571F65406D90906D40651FC4364B4A37394B4CFC6602CBFD3505B7CD -CD0000040068FFE1041D07330032003F004B004F00D6B50C0A190A0230B8FFC040880B0E -37590E51215C38690E63216F397B0A7A1474207B380A0208343D3011401102111149084F -4F4E4E43AA062916299F290329400B0D37292F0123494F1F011F291F184149043D41080A -01084E400D10374C4C4E40090C374E4E2640292F2C3F2C022C2C26297F468F4602464600 -0F1F011F1134021A001F0B0091510F511F513F51033A1B0B855010F6ED5D10E6113910FD -32322F5D12392F5DED332F5DED12392F2B332F2B003F3FED3FED33332F5D123911392F2B -5DED332F332F1112392F5DED123931305D012B5D2123350E01070E012322263534363736 -2437353426272E01232206070E010723353E01372E01353436333216151406071E011503 -110E01070E0115141633323603342623220615141633323613032313041DBB1955282F7A -5297D26D6566011EA42E29296D3F3A692A3150130A2369311C259F73739E2E237D87BB56 -E9445164747763A443473939484938384895F3959577113D12171FC89B7F9D2D2D20081D -4156171811140B0D1D07BF0914081E532E6D90906D335B1F22AA9AFE1D01370514131761 -5560614D042C364B4A37394C4D0262FEEE011200FFFF000E0000076D0801023600900000 -0117008D01DE01750011400C020F164F16020016140607252B5D3500FFFF0068FFE3073F -068C023600A000000117008D01690000000AB6030055541B00252B35FFFF0073FF6E05DA -08010236009100000117008D007801750013400E03303A403A603A03003A3B0F00252B5D -3500FFFF005DFF6C0471068C023600A100000116008DE2000011400C03302E402E02002E -2F0C00252B5D35000001015A03400249045D00030014400A01560205032D000201022F5D -ED003FED3130012311330249EFEF0340011DFFFF005C0000078D08010236003A00000117 -004301730175000AB60100100D0600252B35FFFF005600000636068C0236005A00000117 -004300C30000000AB60100100D0600252B35FFFF005C0000078D08010236003A00000117 -008D01690175000AB601000F100600252B35FFFF005600000636068C0236005A00000117 -008D00BF0000000AB601000F100600252B35FFFF005C0000078D07500236003A00000117 -008E016C01750020B10213B8FFC040120D10370F13010100135F13020013100600252B5D -355D2B35FFFF00560000063605DB0236005A00000117008E00BF0000001EB10213B8FFC0 -40100D10370F1301010013010013100600252B5D355D2B35FFFF0006000004E608010236 -003C000001170043000A01750014B1010AB8FFC040090D1037000A0A0500252B2B35FFFF -003DFE64047F068C0236005C000001160043FF000015401001200B300B600B700B04000B -090400252B5D35000001FFED03E40186061300030032B90003FFE4B70D10370101030100 -B8FFAEB30D103700B8FFE840090A0C3700007F0201022F5D332F2B2B003F332F3130012B -010323010186A5F4010F0613FDD1022F0001FFD00685051606FD00030011B60150020000 -05022F11332F002FED3130012135210516FABA0546068578000100890000048B05EE0028 -00934063411253125B1A6312730273129024B603B6240923200551000810082008030808 -1F1C09510F0C1F0C3F0C4F0C040C141418490C01100202284A01080F2A1F2A022327021C -1F20050C08215F1D6F1D7F1D031D0A061306081D13040220004000020000022F332F5D12 -17392F2F332F5D332F3333FD321139395D003FFD323F1239ED332F2F5DED3939332F5DED -393931305D2901353E0137233533352335333534123332161715232E012322061D012115 -21152115210E01071521048BFBFE67620E9DA4A4A3FDCD6998400A3E98568C8B016CFE93 -016DFE8F0F705A0345CF1B817B868C86A7C801012211CE2A30A59094868C86659F2C0B00 -000200B1FFE60511053200180022005F4013380D391C491C580D6A217A21060C100B0D37 -07B8FFF0402A090A37191F290F2615690F790F05013222220F1F32150B0B07330F090C0C -1913260001000024220114122FFD3211332F5DED332F003FED332F2FED12392FED5D2B2B -31305D01211416171E013332363733150E0123200011100021320011272E01272E012322 -06070511FC66423C3AA3607AEA590D82C07FFEC9FEAD01420113FF010CBE02262928875A -9FD50D027884B53E3C3B5648D53637015B0141013A0176FECDFEE92A549133333AD4B100 -FFFF00ABFFE1078305D50036023B9200003700BB023700000117024103F2FDC60016400C -040302100A010B400B7F0B025D1135003F353535FFFF008CFFE107A405ED0036023DA600 -003700BB02910000011702410413FDC600384026040302360A0403023900392039403980 -39FF3905013100315B317B3103000900093F094F09035D11355D11355D11353535003F35 -3535FFFF008AFFE107A405DA0036023FA400003700BB02910000011702410413FDC60038 -4026040302320A040302350035203540358035FF3505012D002D5B2D7B2D03000900093F -094F09035D11355D11355D11353535003F353535FFFF0099FFE1076F05DA00360240A600 -003700BB023100000117024103DEFDC6003640240403020E0A040302116F118011FF1103 -01092B093B0944095B097F0905000400043F04025D11355D11355D11353535003F353535 -00010061FE5901FA00880003002CB90002FFE840170D10370318090C3700180910370F01 -010101000D0202002F332F003F332F5D3130012B2B2B1B01330161A5F4FEF1FE59022FFD -D10000010161FE59037000140014002440150B021B012B013901041207070B53030D0E2A -0000062F332FED003FFD322F2F31305D0514062322262735331E0133323635342627331E -010370B79225742D091A58326862060399020659A2AC0E0CA00A1A4E581D491913340001 -0212050C0305068C000300144009030302002D100301032F5DED002F332F313001032303 -0305319131068CFE8001800000030100050C0418068C00030007000B003F401506050AAF -090902000002072B0640090A37060A2B0BB8FFC0400C090B370B06002D0B100301032F5D -33FD322F2BED2F2BED002F332F12392FED3939313001032303012335330523353302FD31 -803101FDBFBFFDA7BFBF068CFE800180FE8CC3C3C300FFFF00070000055E05D102360024 -00000117019DFDF5FF450012400A020E03020E1F0E4F0E025D1135003F35FFFF00000000 -059005D10037002800F300000117019DFDEEFF4500204014010F030F111011401103011F -0C010C00400101012F5D352F5D355D003F35FFFF00000000062E05D10037002B00F30000 -0117019DFDEEFF4500204014010F030F112011401103011F0C010C00400501052F5D352F -5D355D003F35FFFF0000000003C805D10037002C00F300000117019DFDEEFF4500244018 -010F03011F0C010C00400201020F111F11401150116011055D2F5D352F5D35003F35FFFF -0000FFE1069905F00037003200BF00000117019DFDEEFF45002240150227030F29010227 -1F270101000F000F100F700F035D1135355D11355D003F35FFFF00000000060105D10037 -003C011B00000117019DFDEEFF45002440180109030F0E1F0E2F0E03011F090109001F04 -4004700403042F5D352F5D355D003F35FFFF0000000006D705F0003701BB00B700000117 -019DFDEEFF45002A401E012B03011F2B012B00001C101C201C031C0F2D202D502D602D70 -2D8F2D065D2F5D35115D35003F350004FFCB00000267068C00030007000B000F005C401D -0A090FAF0C0C06070706060205010B2A0A40090F370A0A0404000E2A0FB8FFC04015090F -370F0F0707017F11011192001A7F010101881010F65DFDED5D11332F332F2BED11332F33 -2F2BED002F3F332F332F12392FED39393130212311331303230301233533052335330177 -BCBC0438543801B0ABABFE0FABAB045D022FFE800180FE8CC3C3C300FFFF001A0000055E -05D1021600240000FFFF00C80000052B05D10216002500000002001A0000058605D10003 -00060058403C49056A050205041A000003061A01010215001A0125002A0145004A014B02 -4403590256036B0264037B0275030E020305030000080105010203065401002FED3F1239 -012F11332F17395D31308710FD8710FD04C0005D2901012109020586FA94023201080127 -FE50FE5105D1FAD7047BFB85FFFF00C80000049D05D1021600280000FFFF007E00000508 -05D10216003D0000FFFF00C80000053B05D10216002B0000FFFF0089000002D505D10216 -002C0000FFFF00CD0000057505D10216002E00000001001A0000056205D10006006C404E -0902390258020378017703020203020114000600020314040405490546067C0573060405 -030405002400390042005A006A007400070000080F08010F08010A042B0436044D045504 -65047B0407042F5D5D5D11332F5D002F3F3130015D8710FDC08710FD08C0015D005D2123 -09012301330562D5FE2CFE2CCB022CF00505FAFB05D1FFFF00C8000005F605D102160030 -0000FFFF00C80000053805D102160031000000030072000004BF05D100030007000B0047 -40130535060609013502030A350908054009133704B8FFC0401609133704050504030204 -0908720D0F0D1F0D0209680C10E65D10E41117392F2F2B2B003FED3FED12392FED313001 -213521032135211321352104BFFBB3044D34FC1B03E534FBB3044D0521B0FD08B0FC77B0 -FFFF0073FFE105DA05F0021600320000000100C80000053B05D100070027401703350603 -010501140078090F0940095009030414056C0810F6ED5D10F6ED002F333FED3130212311 -2111231121053BC6FD19C604730521FADF05D100FFFF00C80000049605D1021600330000 -000100760000050005D1000C00EB404709040908450B540B6409640A660B9309930A960B -A409A30AA70B0D0608060B1608160B28032708340A340B430A430B5903550B670B760B8B -0399049908B804B808EB04EB08150BB8FFC0B32529370AB8FFC0B325293709B8FFC0B325 -293708B8FFC04030262937030203080908B3040304030B0A0BB302030264048D02020403 -0203080B3501083505030403A009B009D0090309B8FFC04023191E371009200960097209 -D009E00906090703040B0908070602000010000200000E022F11332F5D1217392F2F5D2B -71332F003FED2FED11173931305D011087ED87C01087ED8708C0012B2B2B2B5D71290135 -090135211521011501210500FB76026CFDA80448FCC0024AFD8A039AB80258020EB3B0FE -061AFDA3FFFF0000000004EE05D1021600370000FFFF0006000004E605D10216003C0000 -FFFF00440000053805D10216003B0000000100B30000064405D10023006240402515251E -021B067518011834380948096F090309192209030810030822142311141023071B180714 -108008A008B0080320255025702503080825240F253F25025D1112392F5D5DC4ED393910 -C42FED2FED002F3F1217392F5DED5D393931305D011406070E01071123112E01272E0135 -1133111416171E01171133113E01373E013511330644514D50E197C59AE24B4E51C63B34 -359A62C5619C353836C6038E9DD74345460AFEBE01420B484245D69C0243FDA66D8E2C2D -2F0703E4FC1C082D2E318571025A0001006C0000062005F00027007D40125B195B256C1A -641D64216C24791A79240821B8FFC0B3090B371DB8FFC0403B090B373002301440024014 -041925140204160B341F02261835011608251202191214081502141C272222290F29010F -291F299029A029040E15171C2FC4ED5D5D11332FC4123939ED2FED2FED003F3CFD3C3FED -1217395D31302B2B5D2901113E01373E01353426232206151416171E0117112135213526 -023510002120001114020715210620FDC03C772C2D34FEDCDCFE342D2D763CFDC0019A9D -CB0177013101310177CB9D019A01832658393B9F6ACEF9F9CE6A9F3B395826FE7DAE7C5A -0138C20114015EFEA2FEECC2FEC85A7CFFFF007E000002E207500236002C00000117008E -FF240175001940130200104010501060107010050100100D0409252B355D3500FFFF0006 -000004E607500236003C00000117008EFFED01750019401302000E400E500E600E700E05 -01000E090500252B355D3500FFFF006CFFE10443068C0236012E00000116019DE200000A -B6020024210800252B35FFFF006DFFE603EE068C0236013000000116019DCC000013400E -014041504170410300413E1219252B5D3500FFFF00B9FE64045F068C023601C600000116 -019D1D00000AB601001A170E16252B35FFFF00A000000193068C023600D500000117019D -FE8E0000000BB601000704020325012B3500FFFF00B1FFE2045C068C023601D100000116 -019EFB00000F400903020100221F0717252B35353500000200B9FE64048D061400180037 -0077404F16200D1037070F4A1B4326433756267929062E200D0F3733200D103705200D10 -371615203E5F21012121032B3E0C0135400309080C15120F200120281B12122008191B00 -90391F390132071A08883810F6FD325D10F6ED1239392FED2F5D1239003F3FED3FED1239 -2F5DED393931302B2B2B5D012B011400232226271123113436333216171E011514060715 -1E01073426272E012B0135333236373E01353426232206070E0115111E01333236048DFE -F3CD4FB03FBCFDDF5A953B39448B7F9FBCC2453A3B924924244282272E2D8A6D49682120 -1E42964895A101BCCAFEF82C2AFE2405D2E0FE2B2E2B8A5B7FBD25111AC797596F1F2016 -A01D1E2262557074352C2C753EFCA2261F9D0001003DFE64047F045D0008006940497507 -01070607081A00010007061A04050505030C0A001A002A004A0059006900750007000505 -15052505450556056605730507050001011A059004A0040204040A091F0A4F0A5F0A035D -1112392F5DC4ED10C42F5D2F5D003F3F31300187FDC08710FD08C0005D09011123110133 -0901047FFE37BCFE43CC0157015A045DFBDBFE2C01D40425FCC4033C0001006CFE6403D6 -0614002F0058401D4600570065287F1178207D21061D1A3E1B012D3F0F070C1A1A19121C -07B8FFE04018090C37000701071C070BB40303310F313F3102231B12853010F6ED5D1133 -2FED33332F5D2B2F1239392F003F2FED3FED3931305D251E011514060723353E01353426 -2B012226353412373E013735213521150E01070602151416171E01171E013B013216039A -201C5A43B35A4C3D2F91E5DE5C4E4BC56CFE3402E875E55A5972060C0A31272479385647 -664B285B2854A93F0E4F7745394CE8E58C01007770CD5E099E874ECE7875FEE88F224828 -264B18160534000100B9FE64045F047C00160038402303151615731503100D084213040E -05010C0D08021A0091181F18601802100B1A0D881710F6FD325D10F6ED003F3F3F3FED12 -3931305D0123113426272E012322060711231133153E0133321615045FBC1218195E4B4D -A84DBCBC58BC63B5BEFE6404184D87262A294C3BFCBE045D7C4952DACD0000030089FFE1 -04750614001700240031006CB9002FFFD6B30A0D3729B8FFD640400A0D37212A0B0D371B -2A0B0D37662C01263E0F241F24022424061E3E3A124A120212012C3E3506450602060A25 -181A0000331F333F330224261A800C900C020C2F5DFD325D11332FFD32003F5DED3F5DED -12392F5DED5D31302B2B2B2B011406070E01232226272E01353412373E01333216171612 -072E01272E01232206070E010705211416171E01333236373E0104752E243AD29898D23A -252D2D2639D39797D339252EBD043120296C4F4F6C29222F040272FD8E2E2428704F4F70 -28242E0300BEFD548789898754FDBEAE010753828A8A8254FEFA548FD6364639394637D5 -8FA18EE93E453E3E453EE900FFFF00BB00000177045D021600D50000000100C1000004A8 -045F001800D3403B0601060216182618451856186618071C023A0169027A029701A602A6 -18C70208020203C60101860101011A001800090801F90801080B0A03090109B8FFEE4040 -10183709B402181703177F0301091808020305010C1010143F0C05060505011A172A1736 -178017A417051517251777179417E917F917060917180201050F0F00B8FFF04013090E37 -00001A0F1A1F1A3F1A0308031A05891910F6FD3C5D11332F2B332F17395D71002F2F3F3F -FD322F111217395D3130018710C0C07AF52B7118C0C004C07172018710FD5D7108C0015D -71212301071123113311013E013332163315232E01232206070304A8F8FE3D70BCBC0180 -487F3F1C3C070B102F0D2F4D1DFB01E96DFE84045DFDDA01A14F3802A602022F21FEF100 -0001003D0000047F061400070085401305040502020306011A07000002031A04040505B8 -FFF0401C0C10372B002604200703050402030601000806680701070506030400B8FFC040 -260910370C001C004B005A006A00790006008D090F090103041304440455046504760406 -04820810E65D5D10F65D2B1117395D2F003F3F17393130015D2B8710FDC01087FDC008C0 -08C0012123090123010333047FCDFEB8FE97C401D1D7D3033DFCC3042001F400000100B9 -FE640465045D00150046402C12200B0D3703200B0D37080205140B051042050900080A0C -0102131A0092171F1760179017030D091A0A881610F6FD3C5D10F6FD3939003F3F3FED3F -3C12393931302B2B2123350E012322262711231133111E013332363711330465BA4A874E -4B7854BCBC209E5B5D8836BC764E3D3650FDF305F9FCBA2752433C034000FFFF003D0000 -047F045D02160059000000010068FE64041106140046008A403C0F020F06090E1B0E241E -24283415361E36284428473C562D563C691779170F1918333F32320C24213D22013F3F0C -030C191C3232232121122B1B1C04B8FFD6400E090C37040408B4231C1280000100B8FFC0 -400B090C370000483A1B12854710F4ED11332F2B5D123939ED332F2B2FED12392F2F332F -1239003F2FED3FFD3212392FED393931305D0514060723353E013534262B012226272E01 -353436373E0137352E01353436373523352115212206070E01151416171E013B01152122 -06070E01151416171E013B013216171E0104115B42B45C4B3A2E8C8CB93F424532302C89 -4C7D96575AE40338FF00446D302D3641332D7650AAFED942692F2B334B403F995A1C4467 -211F226055A83F0E4F7844374E36393C97584E84353145130B1CA56853873A069A9E1D22 -2066434F621A1716A52827256A3B66721919072F25235F00FFFF006AFFE10471047C0216 -00520000000200B9FE640494047C0011001E0042402C3A17351E4A17431E560D05060315 -3E0F041C400309080C121B3A004A00020090201F206F200219071A08881F10F4FD325D10 -F65DED003F3FED3FED123931305D011000232226271123113436373E0133320003342623 -220615111E013332360494FEEBDE41A348BC47423EBB66F30100C2A0929E8D49774BA2B0 -0241FEFEFEAB242BFE2B04227BB9423E42FEDAFEDFDACCC0B6FE6D221DDE00010069FE64 -03FA04770029005C40120C020C06201325233614362340237A1F0817B8FFE040140E1037 -3F194F190219191D3F1504030C263F0B04B8FFD64011090C370418180408B400002B201B -12852A10F4ED11332FED33332F2F2B002FED3F3FED332F5D31302B5D0514060723353E01 -3534262B012226272E013510002132161715232E01232206151416171E013B01321603FA -5E3EB1564D3C2D5C75C64B49530137010354A0430C5E9D44A6BD393232814B64738E6057 -AA3B0E4B7947364F3C4342D092010E0144251BD33E32EEC1708E2D2C2799000100B1FFE2 -045C045D00170030401F1607050F3E0903560366037903880305030A151A0091191F1901 -091A06871810F6ED5D10F6ED003F5DED3F333130011406232226351133111416171E0133 -3236373E01351133045CF4E2DFF6BC14201F6B5C56731E1D15BC0197DADBD7DE02C6FD7F -5D782E2B2B2C2C2C7B5A028100010030FE640488045D000B00A240492A02250839023408 -4B02440879020710091A0A0B0A071A060506011A000B00031A04050402050B080A000606 -0A0405064A0445066A0465067A04770608040C0605080B050204040A00B8FFE040100A10 -3700000D2F0D010604200A1037042F2BC45D11332F2BC4121739003F3F5D111739313001 -8710ED8710ED8710ED8710ED4B535840140B030A070002030A0601080409070005040906 -010F0F0F0F59005D0123090123090133090133010488D5FEA6FEA2CB01BCFE4FD5014F01 -53CBFE4FFE64026BFD95030202F7FDA80258FD11000100B0FE6405E3045D0023006B4047 -1B062618751802183D39094909020919220903081005080C221A3F237F230223111A3010 -7010021023071B18071A109008C008025025602502080825240F25010F251F253F25035D -5D1112392F5D5DC4ED393910C42F5DED2F5DED003F3F1217392F5DED5D39393130011406 -070E01071123112E01272E01351133111416171E01171133113E01373E0135113305E360 -4F52C873BB73C753505FBC4B34388643BB4386383B44BC01BE72A835373705FE68019806 -343936A772029FFD9C718723261E0403C7FC39051C27287B7802640000010071FFE20611 -045D003D0079402D361F3632441F4432551F55326804680F691A69377D1A7D370C283B28 -0903061605210D303E060A3A400C0E3718B8FFC040240C0E37361B001B1B13003A29090A -291A18139028A028C0280328283F3E1F3F3F3F6F3F035D1112392F5DC4C4ED393910C4C4 -2FED2FED2B2B003FED39393F1217392F31305D011406070E0123222627230E0123222627 -2E013534123733150602151416171E01333236373E01371133111E01171E01333236373E -01353402273533161206112F33379D7360A2250627946671A333332F7290E4879F101E1A -5D47334714161D06BA091C1518393A465E1B19169D89E4907201F760C14B505963434462 -5D4C4CBF61AA0115A7116CFECCB742713F37491911122C0F0248FDB8112C111316473937 -7A41B601346D11A7FEEBFFFF00050000022D05DB021600770000FFFF00B1FFE2045C05DB -023601D100000116008EFB000015400F02301D501D601D0301001D180717252B355D3500 -FFFF006AFFE10471068C0236005200000116019DE200000AB602001B180600252B35FFFF -00B1FFE2045C068C023601D100000116019DFB00000AB601001B180717252B35FFFF0071 -FFE20611068C023601D400000117019D00B60000000AB60100413E1300252B35FFFF00C8 -0000049D07500236002800000117008E00500175000DB7020100110C020325012B353500 -0001FFFF0000060705D1002500614025652476240216341F1F061E1A351B03093506182F -073F074F077F0704070717590F010F1500B8FFC04014090D370000270F27011A1F1D011D -1D1F17141A182F33FD32322F5D2F5D11332F2BED5D12392F5D002F2FED3FFD3212392FED -31305D011406070E012B0135333236373E01353426272E01232111231121352115211121 -3216171E010607534957AF8A6E5D5B782F38343135329583FEEBC6FE520468FE0C015398 -BF554C4901CC6CB13A4530B11022286F4E4B73232213FD220521B0B0FE6824423BAEFFFF -00C80000048A07ED023601EB00000117008D003501610015401001300840086008700804 -0008070405252B5D350000010073FFE5053905EC002A006A400C3A1C491C58057606790C -0511B8FFE040370A103701200A103720341D1D0F032A2A26340309131317340F021E1E13 -000010000200002C0F2C010F2C1F2C2F2C3F2C041D206C09682B10F6FD325D5D11332F5D -33332F003FED332F3FED332F1112392FED31302B2B5D250E012322242726023534123736 -243332161715232E01232206070E01072115211416171E013332363733053963EC91A9FE -EE61616969625F0112A98CF65F104EF98D6DAE4846580F0334FCC258474AC4708AF75010 -4127356863630120B7AF011F66626C3427DF40523A3B3BAD72AD8BD94648494A4300FFFF -0086FFE5050205EC021600360000FFFF0089000002D505D10216002C0000FFFF007E0000 -02E207500236002C00000117008EFF240175001940130200104010501060107010050100 -100D0409252B355D3500FFFF002CFFEB02EA05D10216002D000000020012FFFD08A205D1 -000E003D0066B3460C0130B8FFACB30A10371EB8FFC0401D0B0E37073437371618353503 -28282C352408341637081416163500150FB8FFF440110E11370F713F2F3F011813003501 -3535282F332F5DED5D10F62BFD11392FFD32002FED2FFD322F3FED12392FED31302B2B5D -013426272E01232111213236373E01371406070E01232111210E01070602070E01070E01 -2322262335331E01333236373612133612372111213216171E0107D33235379083FEEC01 -0F858F363834CF554754C098FDEEFDF0030B0308251D1D492F306544153C0C0E0A1E0F24 -401647430E050B040391015298C0554C4901C94B72232510FDCB1A252769556CB0374238 -052171D955D6FEEC595A6B2B2C2603C001021617470146012D62014487FDB823423BAE00 -000200C80000088305D1000E002700554020171E07342121161F1B030834161A560F0120 -1F081400166F160216161900150FB8FFF4400F0E11370F71294029011D19141A6C2810F6 -FD325D10F62BFD11392F5DED39395D002F2FED3F3312392FED39393130013426272E0123 -2111213236373E01371406070E0123211121112311331121113311213216171E0107B432 -35379083FEEC010F858F363834CF554754C098FDEEFD65C6C6029BC6015298C0554C4901 -C94B72232510FDCB1A252769556CB037423802DEFD2205D1FDB80248FDB823423BAE0001 -FFFF000005FD05D1001D00504032000E48175817600E620F700E700F0708011A350B0B01 -07033504031301131412121F5F067F0602060306070014037F0101012F5D33FD32322F2F -5D11332FED002F333FFD3212392FED123931305D2123112135211521113E01333216171E -01151123113426272E01232206070273C6FE520468FE0C5FF66765AA3D3D45C6161E2079 -646AC3660521B0B0FE2D1F33323534A373FE11018C4A8C2B2E312622FFFF00CD00000575 -07ED023601F200000117008D003C01610010400A01702301002321050025012B5D350002 -0006FFF904E6078F001A002800AF405A29033801461955140419191A1814171617161716 -191A130001001617181A010500070B0B0F35071B0F21702102212175250125AA0F1E011E -1E0003281A1B221A702101211B2100700A010A360156016501760104160A01031700B8FF -E0401409103700002A502A012A400910371720091037172F2B2B5D11332F2B1217395D2F -5D1139392F5DED2FED003F332F5DED5D332F5D332FED322F11121739018710FDC008C001 -8710FD08C03130005D09010E01070E012322262735331E01333236373E013F0101330901 -030E0123222627331E013332363704E6FDCA225D3634612D2872100E0F462D14481C203F -1624FDD6DB01B301862105C9A8A8C905B602605E5F5F0205D1FB1B4C621B19110801B902 -09060B0C34324F044FFC92036E01BEA6A8A8A67063627100000100C8FEAF053B05D1000B -0032401C060203043409000B0913000002061407780D400D700D020314026C0C10F6ED5D -10F6ED12392FED002F2F33ED3F33313029011133112111331121112302A4FE24C602E7C6 -FE24BB05D1FADB0525FA2FFEAF00FFFF001A0000055E05D1021600240000000200C80000 -052C05D100120021003E40256311011A340C0C070B3508031B3407080A0A131556000100 -71230F234023020C1B14076C2210F6FD325D10F45DED332F003FED3FED12392FED31305D -011406070E0123211121152111213216171E01073426272E01232111213236373E01052C -554754C098FDE403E5FCE1015C98C0554C49CF3235379083FEE20119858F36383401CD6C -B037423805D1B0FE6823423BAE724B72232510FDCB1A25276900FFFF00C80000052B05D1 -021600250000000100C80000048A05D10005001F401003013504030000070F0701021403 -6C0610F6ED5D11332F003FED2F3130012111231121048AFD04C603C20521FADF05D10002 -000AFEAF059E05D1000D00130049402A09121A124A110310340A030C1307340301051013 -0A0A070E140C0C0113200001000015131307070413052FED392FED11332F5DED392FED12 -392FED002F332FFD32323FED31305D01231121112311333612112111332111210A010705 -9EBCFBE4BC78829B03728DFEADFE0E0E9476FEAF0155FEAB0201D602B1019AFADF0475FE -9BFDAFBFFFFF00C80000049D05D102160028000000010020000007A805D1003700C7402E -093318332933401D40244135541D54247518711D73240B27133333351A130E0C0E020116 -09103701130037000708B8FFEA405A091037081309090A271F1A032C223237070A0C0E33 -35072C02142D350409021521052C03002F0A20375F0A50376F0A6037062C2C0137022733 -350600C5220414051515080A070C0E1A0609C51F0505393810393F395F397F39045D1112 -392F33F41739322F10FD32F41739322F5D002F3F1739FD322F121739FD111739018710FD -2BC08710FD2BC08710FD8710FD3130005D21230123112311230123012E01272E01272E01 -2B0135333216171E01171E01171133113E01373E01373E013B0115232206070E01070E01 -0707A8F2FDF469C46BFDF4E6025158682013251C1B533C3C47A7B23D0B1E0F2C8F56C45C -912E121D093CB5A5473C424B1E1D25132A7D3E02A9FD5702A9FD5702FE3A9C693D571C1B -18B17FAD1E5824696608029DFD610663702C5519AC80B1171C1B5B3A8587270000010051 -FFE5048505EC0040007F40145401583B6701693B7F0B7F0C7031703274380932B8FFE040 -3F0B10370B200B10373E3D1D3420200934703001303029343402100D7F0D020D0D113409 -0A3D1E0B0D37171E0B0D37236C3A1E1E3D3A030C171503734231310C2F332F10F6ED1217 -392F2FED2B2B003FED332F5D3FED332F5D1112392FED393931302B2B5D011E0115140607 -0E012322262735331E01333236373E01353426272E012B0135333236353426272E012322 -06070E010723353E01333216171E0115140607151E010416303F5B4650E68593FB4A0F63 -F97148A83436313C33339159C9B3ADD2352E2D6F4C4E843B3064170D4BF87E7BB14B4E52 -A37D347602CD2A816669AA3C4444371EDE3B4B2A292D6F454F651F1E1BA97F7836521818 -151E1411340DDB2036272C30885A7FB01B0F092F000100C80000053905D1000900644023 -0B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D07B8 -FFE840240B0F3702100C0F3707060102040308030308030807021400780B0F0B400B0207 -14046C0A10F6ED5D10F6FD113939003F3F1217392B2B31305D7121231101231133110133 -0539C5FD1CC8C502DBD104A9FB5705D1FB690497000200C800000539078F000900170093 -40320B020407190703070715075B0253076C0262077F0270077608C802E602E707F6070D -0A0F10701002101014AA0F0D010D0D07B8FFE840330B0F3702100C0F3707060102040308 -030308171A500A600A020A111A100A10000403080702140078190F194019020714046C18 -10F6ED5D10F6ED113939111239392FED2F5DED003F3F1217392B2B332F5DED332F5D3331 -305D7121231101231133110133030E0123222627331E01333236370539C5FD1CC8C502DB -D1B505C9A8A8C905B602605E5F5F0204A9FB5705D1FB69049701BEA6A8A8A67063627100 -000100CD0000057505D1002000AF407909011F01290127203A0137204B0147205C016500 -6720760074200D1F200A0D370C200A0D370202038801C8010201B30020001E661B861B02 -1B13120D120D121B1E04152002322F08010808000716351503070305000D121B1E200504 -4F150115150F2220003000400004500001006E22402201080414056C2110F6FD325D10F6 -5D5D322F5D121739002F2F3F3FED1112392F5DFD39121739018710FD5DC031300187107A -FD5D1808C0012B2B5D2123012311231133113E01373E01373E01373E013B011523220607 -0E01070E01070575FEFDA387C6C6335A28284E1E0D231245B9B44F53454E1F1D2B17346B -5A02A7FD5905D1FD6401121917553E1B522DA686B1191D1A583B847C2E0000010012FFFD -051805D10021003DB9001BFFACB309103709B8FFC0401A0B0E370335200301131317350F -01140078238F230103132020122F332FED5D10F6ED002FFD322F2F3FED31302B2B212311 -210E01070602070E01070E012322262335331E0133323637361213361237210518C6FDE6 -030B0308251D1D492F306544153C0C0E0A1E0F24401647430E050B04039B052171D955D6 -FEEC595A6B2B2C2603C001021617470146012D6201448700FFFF00C8000005F605D10216 -00300000FFFF00C80000053B05D10216002B0000FFFF0073FFE105DA05F0021600320000 -000100C80000053B05D100070027401703350603010501140078090F0940095009030414 -056C0810F6ED5D10F6ED002F333FED31302123112111231121053BC6FD19C604730521FA -DF05D100FFFF00C80000049605D1021600330000FFFF0073FFE5054605EC021600260000 -FFFF0000000004EE05D102160037000000010006FFF904E605D1001A0080403C29033801 -461955140419191A1814171617161716191A130001001617181A010500070B0B0F350700 -03700A010A360156016501760104160A01031700B8FFE0401409103700001C501C011C40 -0910371720091037172F2B2B5D11332F2B1217395D2F5D003F2FFD322F11121739018710 -FDC008C0018710FD08C03130005D09010E01070E012322262735331E01333236373E013F -010133090104E6FDCA225D3634612D2872100E0F462D14481C203F1624FDD6DB01B30186 -05D1FB1B4C621B19110801B90209060B0C34324F044FFC92036E00030069FFF0062405E1 -001D002A00370058403624182C321525062B32091509081603082A1E253265006A0F041E -150032150F00072B1518250407140F080839381F393F396F399039045D1112392FC4ED17 -3910C42FED2FED5D002F3F1239392FED39392FED39393130011406070E01071523352E01 -272E01353436373E01373533151E01171E01073426272E0127113E01373E0101110E0107 -0E01151416171E010624594F55F48AC586F6574F59564C51F395C594F64F4B57CE403B3A -8E6A5E9A324142FD8E6A8E3A3A414340319B02F38CD9494F5D03A6A6035A524AD88C88CC -4C515E049B9B03624E49D07F63A639383402FC8602392F3CAEFEAC037A01363737AA6170 -B63A2D3CFFFF00440000053805D10216003B0000000100C8FEAF05BE05D1000B0032401C -0602030B08043501080514080800130D40090B370A0A0D0414016C0C10F6ED11332F2BED -392FED003FFD322F3F3331302901113311211133113311230502FBC6C602DDC68DBC05D1 -FADD0523FADDFE010001008E000004EA05D10019003B40243511451154116C0974160502 -0C1435050500180C030017011400781B0F1B010D140C6A1A10F6ED5D10F6FD32002F3F33 -12392FED123931305D2123110E01232226272E01351133111416171E0133323637113304 -EAC681DD6463AC3F3F47C6142323726B71D652C60276282A313535A47201FCFE67577930 -2F2F281E02B1000100C80000077605D1000B003640200A06020308043401091400C60814 -05041401C605050D0C1F0D3F0D500D700D045D1112392FF4ED10FDF4ED002FFD323F3333 -31302901113311211133112111330776F952C6022EC6022EC605D1FADB0525FADB052500 -000100C8FEAF080305D1000F004140260A0602030C080434010F0D13000009140CC60814 -05041401C6050511101F113F1150117011045D1112392FF4ED10FDF4ED332FED002F2FFD -32323F33333130290111331121113311211133113311230747F981C6022EC6022EC68DBC -05D1FADB0525FADB0525FADBFE0300020000000005F405D1000E00210046401D07341B1B -1618351903083416560F011B08144F167F160216161900150FB8FFF4400A0E11370F7123 -0F2301192F5D10F62BFD11392F5DFD325D002FED3FED12392FED3130013426272E012321 -11213236373E01371406070E0123211121352111213216171E0105253235379083FEEC01 -0F858F363834CF554754C098FDEEFE660260015298C0554C4901C94B72232510FDCB1A25 -2769556CB03742380521B0FDB823423BAE00000300C80000069505D1000E001F00230055 -4016440D0107341919161703083416220321560F0100150FB8FFF4B30E11370FB8FFC040 -150C10370F0F21142078250F25702502190814166C2410F6FD325D10F6FD322F2B2BED5D -002F3F2FED3F12392FED31305D013426272E01232111213236373E01371406070E012321 -113311213216171E010123113304533235379083FEEC010F858F363834CF554754C098FD -EEC6015298C0554C490173C6C601C94B72232510FDCB1A252769556CB037423805D1FDB8 -23423BAEFDC505D1000200C80000052205D1000E001F003C401007341919161703083416 -560F0100150FB8FFF440110E11370F71210F21402102190814166C2010F6FD325D10F62B -ED5D002FED3F12392FED3130013426272E01232111213236373E01371406070E01232111 -3311213216171E0104533235379083FEEC010F858F363834CF554754C098FDEEC6015298 -C0554C4901C94B72232510FDCB1A252769556CB037423805D1FDB823423BAE0000010061 -FFE5052905EC002A0070400A3A1C491C640676060426B8FFE0403E0A10370B200A103718 -34191928092424203428020D0D11340909060316035603031A24171403732C0F2C010F2C -1F2C2F2C3F2C04241824180F0C1F0C020C2F5D33332F2F5D5D10F6ED11395D003FED332F -3FED332F1112392FED31302B2B5D0116121514020706042322262735331E01333236373E -01352135212E01272E012322060723353E0133320404616068696366FEEFA38DFE571051 -F78D7BCC444849FCD303230E5C4747B46689F057115DFE85AC010F052C60FEE4C2ACFEDF -676A6B3625DB414D574B50C980AD77AF3939374D43DC27356000000200C8FFE107D305F0 -000B001E006240427814010903060915161A1C5616591C7916761C080C34131E1314031C -03341602100309341C090F13190615180C3F0C580C6F0C040C0C0F0015197320120E140F -6C1F10F6FD3210F6ED12392F5DED1239002F3FED3F3FED1217392FED5D31305D01100023 -2200111000333200012311231133113312002120001110002120000705FEFFDBDDFEFE01 -03DCDB0101FB79F0C6C6F924016A0113013F016CFE90FEC5FECCFE9102E801280135FECC -FED7FEDBFEC90136010EFD3005D1FDAC012D0146FE63FE95FE93FE6601890002002C0000 -04DE05D10010001F0066400C28033506471C5A0759170504B8FFE8403209103703041305 -0506060F113440030103030012340F03000519150904060309045F050105120114007821 -0F2140216021035D10F6FD322F5D17392FED002F2F3FED12392F5DED12393130018710FD -C02B005D212311210123012E01353436373E0133210311212206070E01151416171E0133 -04DEC6FEBFFE43EE01DE96A55F4E47BE7301EAC6FED256682B2E3425292D82560250FDB0 -026E33D5B372A5373228FD240232161D1F7043506A292C1EFFFF0068FFE1041D04780216 -0044000000020074FFE1047C061D00270039006440160C1F35043D29303940044B294039 -6512751273330A33B8FFC0402B0B0D3722062B41002510250225250619411800373F060A -223118180C281B03903B1F3B3F3B02311B0C863A10F6ED5D10F6ED12392F1239003FED3F -ED12392F5DED123931302B5D011E01151400232226272602353436373E01373E01373E01 -37150E01070E01070E01073E01333216133426232206070E01151416171E0133323603EE -4648FED4DB6CB640504F0E19144D3548EBC24F883642814080CF303535084BB3655EAE0F -B29257A04802033A352E6C3E97AA03B846C786FAFEB6494C5F0121D04B9B6C5DAC354959 -11070904AD0408060B3E3135AB4D36493EFE22B9B7372E19431CAED840362DDA000300B9 -00000453045D0015002400330061400C0A0305141A0315147623050CB8FFD6402F090C37 -12112C3C4F1E011E1E071D3D08052D3D0708161B122C0F0F07251B00100D10370090350F -35011E2C1A07883410F6FD325D10F42BED12392F1239ED003FED3FED12392F71ED393931 -302B5D011406070E01232111213216171E0115140607151E01033426272E012B01113332 -36373E01133426272E012B0111333236373E010453413940977BFE3201B07D7F383F3B5E -4A6381FD1F202A694DC4EB4A4724261D3B243D26584EF1B270792C2C2B0152517E2A2F2A -045D111D216A48537A220A1889017D243A101505FECE0B161841FE4237451D1207FE930F -19194800000100B9000003BB045D0005001F4010013F040503700001000007021A038806 -10F6ED11332F5D002F3FED313001211123112103BBFDBABC030203B8FC48045D00020009 -FEF404AF045D000D00130053401C3B124A12020105103E0A050C13073E0310C90A0A070E -1A0C0C01C900B8FFC040120B0E370000152F153F1502131A070704C9052FED392FED5D11 -332F2BED392FED12392FED002FFD32323FED2F3331305D01231121112311333612112111 -3321112106020704AFAFFCB8AF79757302BE87FEBDFEAF0D8053FEF4010FFEF101ACC101 -F90103FC43031FFBFE628600FFFF006AFFE60460047C0216004800000001003400000632 -045D003100D840123A0E3A2D4A0E4A2D5F0C5F2F6F0C6F2F0826B8FFE0B3090B3715B8FF -E0401A090B3724B42D2D2F17B40E0C0E020116091037011A0031000708B8FFEA405E0910 -37081A09090A241C1703291F3C31070A0C0E2F2D072902112A3F040902121D052905002E -0A21315E0A51316F0A60317F0A7031082929013102242D2F0600C71F041A051212080A07 -0C0E170609C71C0505333210333F334F336F33045D1112392F33F41739322F10FD32F417 -39322F5D002F3F1739FD322F121739FD111739018710FD2BC08710FD2BC08710FD8710FD -3130002B2B5D21230123112311230123012E01272E012B0135333216171E01171E011711 -33113E01373E01373E013B0115232206070E01070632E3FE9A5BBA51FE8AD901AF314B1F -1B4A5435457C962D091B0A216740BA4069210B1B082C947D4535554B191C4D2D01FEFE02 -01FEFE0202491A60615542A2647D1A43174C3F0401E4FE1C04404B1942197B66A2465159 -631900010041FFE603C20478003D007FB7263475127D3C032FB8FFE0404C0D103708200D -10373B1B3FAF1CBF1C021C1C06313F2D902DA02D032D2D293E3104200A300A020A0A0E3F -06091C2E231B372E1C373B0409141B00903F7F3F803F02800990090209400B0F37092F2B -5D5D10F6ED1217392FED2F2F003FED332F5D3FED332F5D1112392F5DED3931302B2B5D01 -1406070E012322262735331E01333236373E01353426272E012B0135333236373E013534 -26272E012322060723353E01333216171E0115140607151E0103C2574444A45274D2660D -49E26A326A272A32312A297430A371288128343D3024255B2366C5430D53BE5F4E9B4342 -546D5C677A01395E822827242C2ECE4046131518433A3C48121208A2060D113E442F3D11 -110C3734CF1B221C2222755658851D071989000100B900000466045D00090044402D0B02 -0407020D030103380B103702380E10370706010204030805030808021A00920B1F0B600B -0203071A04880A10F6ED395D10F4FD39003F3F12173931302B2B5D712123110123113311 -01330466BAFDB7AABA0243B00347FCB9045DFCC5033B000200B900000466061500090017 -0073404C0B020407020D030103380B103702380E10370A0F1001101014500D0D07060102 -04030805030817C91F0A2F0A020A11C900101010201003100A100408021A0092191F1960 -190203071A04881810F6ED395D10F6FD391239392F5DED2F5DED003F3F121739332FED33 -2F5D3331302B2B5D7121231101231133110133030E0123222627331E01333236370466BA -FDB7AABA0243B06B05B1A9A9B105AB015B58595A010347FCB9045DFCC5033B01B894A6A6 -94695E5C6B00000100C1000004A9045D001A0093404D0120090E371B02271A360E321635 -1A0502011A001A000A1B0F2B0F020FB41618160A0F181604121A023C2F08010808000713 -3F12050705010508561A9600961AB600B61A05021A181604121200B8FFC04011090E3700 -001C0F1C1F1C0208031A05891B10F6FD325D11332F2B332F17395D003F3C3F3FED111239 -2F5DFD39121739018710FD71C03130018710FDC0015D2B2123012311231133113236373E -01373E013B0115232206070E010704A9F6FE3066BCBC5D72280E1B0D349C9256534F5924 -2859320200FE00045DFE1E434A1B3D1C7170A243545E5D180001001DFFFE043E045D0021 -003FB9001BFFACB30D103709B8FFC0401C0D1037023E2105001313173F0F011A00922303 -1A20203020022020122F332F5DED10F6ED002FFD322F2F3FED31302B2B212311210E0107 -0E01070E01070E012322262335333216333236373E01373E013721043EBCFE5F03060307 -201A183B2222533111410A0A081E0A183312333E0A040703030103BF539A3EA7C7423E4D -1F1E1E02A4020E1332EEE152E166000100B9000004D9045D000C0078401335093A0B4503 -4A0470037F04060B400D103709B8FFC0403D0D10377B027B05790A030A2A090B37050A02 -030904400E103704200D0F373F04010404070B09050107090A0B0305021A00920E0F0E20 -0E02051A07880D10F6ED5D10F6ED111739002F333F3312392F5D2B2B1217393130002B5D -012B2B5D2123110123011123113309013304D9BAFEEA8CFEECB0E301300126E70372FDC2 -023EFC8E045DFD8F0271000100B900000460045D000B0032401C033F0808050A07050105 -0809021A00920D1F0D600D0208031A05880C10F6FD325D10F6FD32003F333F3312392FED -31302123112111231133112111330460BCFDD1BCBC022FBC01F7FE09045DFE3C01C4FFFF -006AFFE10471047C021600520000000100B900000460045D000700254015033F06050005 -011A0092091F09600902041A05880810F6ED5D10F6ED002F333FED313021231121112311 -210460BCFDD1BC03A703BBFC45045D00FFFF00B9FE640490047C0216005300000001006A -FFE703FD04770021005A40430F234F235F23032B01220E2A1624183A01350E3A16351849 -014F0A440E4F1641185901550E6901650E7A01730E131010143F0C0421211A3F03090F00 -0023171B09852210F6ED11332F3C003FED332F3FED332F31305D015D250E01232226272E -013510002132161715232E01232206151416333236373E01373303FD73A5527ACC494951 -0128010161BB4E0B5DB555A7B7B6A83B75302651100B463629474848DC93010B013F3627 -D14744E0C7C7DC1E1813350D0001000A000003EE045D0007003840230301043F06054000 -4F0502000500021A05A003B00302030309080F093F094F097009045D1112392F5D33FD32 -2F2F5D003FFD322F3130012111231121352103EEFE6CBCFE6C03E403B8FC4803B8A5FFFF -003DFE64047F045D0216005C00000003006FFE64064B061400230030003D007A40105622 -011D011B1E0C09040627353F2118B8FFF040400E0F3718043B2E3F0F06100E0F3706090B -0C392436384924463804241B00C809311B1E2B04091A0C381B12C8800C900C020C0C3F3E -0F3F1F3F3F3F503F803F055D1112392F5DFDED10ED173910FDED5D003F3F2B33FD323F2B -33FD321217393F31305D011406070E01232226271123110E01232202113436373E013332 -16171133113E0133321203342623220607111E0133323605112E01232206151416333236 -064B4C3F3EA259436327BA3D4F54C1F04E3F3DA5523C6331BA2E7C3FC6E2C18888374A3F -2F3F3A8D9BFD7627503187A18F87355B024C95E54A4A4E2E13FE3301CD1E23012E010D8D -DD4B494D251E01E1FE1F1B28FED5FEECBFDE1219FD171619D9AA02E91219CED2C3E01D00 -FFFF003C00000480045D0216005B0000000100B9FEF404DE045D000B0041400F0602050B -08043F01051A080800C90AB8FFC04015090D370A0A0D0D40090E378F0DAF0D02041A0188 -0C10F6ED5D2B11332F2BED392FED002FFD322F3F33313029011133112111331133112304 -2FFC8ABC0226BC87AF045DFC4503BBFC45FE52000001008E0000041F045D0016003C4025 -0C061C062C06750E040209113F0505001509050014011A0092183F18010A1A0009100902 -092F5DED5D10F6FD32002F3F3312392FED123931305D2123110E01232226351133111416 -171E01333236371133041FBC5BA662B4BEBC101A1A5E5445A23CBC01AD1C22B1A70196FE -CA40652524261B12021D000100B900000649045D000B003D40260A06020508043F010809 -1A00CA081A05041A01CA8005A0050205050D0C0F0D200D500D700D045D1112392F5DF4ED -10FDF4ED003FFD323F333331302901113311211133112111330649FA70BC01AEBC01AEBC -045DFC4503BBFC4503BB000100B9FEF406D0045D000F004A402E0A0602050C08043F0108 -0E0DC90000091A0CCA081A05041A01CA80059005A00503050511100F111F113F116F1104 -5D1112392F5DF4ED10FDF4ED392FED002F3FFD32323F3333313029011133112111331121 -1133113311230621FA98BC01AEBC01AEBC87AF045DFC4503BBFC4503BBFC45FE52000002 -000A000004C4045D000E0021004A4015750D01073D4F1B9F1B021B1B16183F1905083D16 -0FB8FFF04016090B371B081A161619001B0F8F230F231F232F2303192F5D10F6FD11392F -FD322B002FED3FED12392F5DED31305D013426272E012B0111333236373E01371406070E -0123211121352111333216171E01040223282A6B64B0AC646E282925C24138429676FE55 -FEB80204F47E8B453A3A0157334D18190AFE8411181A473A518429322A03B8A5FE4D1A33 -2B86000300B9000005A2045D000E001F0023005A4016200523073D4F199F190219191617 -05083D167900010FB8FFF04022090B37001B500F600F700F030F0F231A2292250F253025 -402570250419081A16882410F6FD325D10F6FD322F5DED2B5D002FED3F12392F5DED2F3F -3130013426272E012B0111333236373E01371406070E012321113311333216171E011333 -1123036923282A6B64B0AC646E282925C24138429676FE55BCF47E8B453A3ABBBCBC0157 -334D18190AFE8411181A473A518429322A045DFE4D1A332B8602B1FBA300000200B90000 -0435045D000E001F00424013073D4F199F19021919161705083D167900010FB8FFF04013 -090B37001B0F8F210F212F210219081A16882010F6FD325D10F6ED2B5D002FED3F12392F -5DED3130013426272E012B0111333236373E01371406070E012321113311333216171E01 -037323282A6B64BAB6646E282925C24138429676FE4BBCFE7E8B453A3A0157334D18190A -FE8411181A473A518429322A045DFE4D1A332B8600010053FFE703F604770021007DB532 -0442040210B8FFD640090B0D37152A0B0D371DB8FFD6403F0B1037082A0B1037123D1313 -061F1B1B173E1F049F0A010A0A0E3E0609141C111A0390232340090D371C2F133F134F13 -03131C1380099009020940090C37092F2B5D33332F5D2F2B10F6ED1139003FED332F5D3F -ED332F1112392FED31302B2B2B2B5D011E011510002122262735331E0133323637213521 -2E012322060723353E01333216035D4950FEC9FEFC66BF430D3CC66D9DC40CFDCC023314 -BE8E5BB4570D3FC2677CC803ED46D290FEEAFEB8301BCE2F49C0BA979E9F3D43CE193A44 -000200B9FFE1064C047C000B001E005640363A0335094A034509040C3E131E1314031C03 -3F16041005093F1C0A0F1319061A2F0C010C0C0F001B1990202F203F2002120E1A0F881F -10F6FD325D10F6ED12392F5DED1239002F3FED3F3FED1217392FED5D3130013426232206 -15141633323625231123113311333624333200111000232200058AA69399A1A89292A7FC -D3E8BCBCED190111C7E70112FEF2EBDEFEF5022ED7D5DFCDD4D7D5A2FE06045DFE3BE7FD -FEC4FEEEFEF1FEC201200002004300000413045D0010001F0069B3721C0104B8FFE8403D -0910370304B4050506060F113C030300123D0F0500050909190902191B70090109040603 -09040A051A054A055A0580059005060512011A0092210F21015D10F6FD322F5D17392F5D -ED5D002F2F3FED12392FED12393130018710FDC02B015D212311230123012E0135343637 -3E0133210311232206070E01151416171E01330413BCDDFEA6DD01789186503D3C9C5C01 -AEBCED4D442827251724256A4101BBFE4501CD28A586597C27261BFDF201780A16164B2C -37441E1D1500FFFF006AFFE6046005DB0236004800000116008EF9000014400D03302560 -250202002520120025012B355D3500010013FE6D046206140035006A4044051C1E261E28 -59056905721D0617140E51111112180D08421B0412012F3E2A2A012A0D150F5F2E6F2E7F -2E032E2E0D001A2191371F37603702141517030B1A110F0D883610F63232FD17325D10F6 -ED12392F5D2F2F002F2F5DED3F3FED123912392FED393931305D0026272E01272E012322 -0607112311233533353315211521113E01333216171416151406070602070E01232A0127 -35333236133E013503A501010113191A594650AC4CBCA6A6BC0141FEBF58C162B1BB0303 -020103544746B96A17182A44BB9C09010102064B2B5080292B294D3AFCBE04F4869A9A86 -FEED4952DEC92F6B4B3A703AB0FEFF50504E029EF60150224B2EFFFF00B9000003BB0682 -0236020B00000116008D9AF6000AB6010009070405252B350001006AFFE7040A04770021 -006EB53B0A4B0A021BB8FFD640090B0D37162A0B0D370EB8FFD640340B1037012A0B1037 -193D1818030C1010143E0C0421211D3E03092018301840180318171810031A008E232340 -090D371A1A09852210F6ED2B10E61117392F5D003FED332F3FED332F1112392FED31302B -2B2B2B5D250E01232226272E013510002132161715232E01232206072115211E01333236 -3733040A4E9F7B7DD14C4C52012B010D68BB450C40C2658FC719023CFDC10AC4A46CBD3E -0C302029474849DC92010501453620CB324E9CA197B2C8443200FFFF006EFFE503D70478 -021600560000FFFF00AF0000018305DB0216004C0000FFFF00050000022D05DB02160077 -0000FFFFFFC2FE59021505DB0216004D00000002001DFFFE06F4045D000E003D0072B900 -30FFACB30D10371EB8FFC0401D0D1037073D4F379F3702373716183E350528282C3F2409 -3D167900010FB8FFF0401E090B3737081A161635001B890F010F8F3F0F3F0118C9203530 -35023535282F332F5DED5D10F45DFD11392FFD322B5D002FED2FFD322F3FED12392F5DED -31302B2B00353426272E012B01113332363736371406070E01232111210E01070E01070E -01070E012322262335333216333236373E01373E01372111333216171E01063223282A6B -64B0AC646E2829E74138429676FE55FE5F03060307201A183B2222533111410A0A081E0A -183312333E0A0407030301F47E8B453A3A012037334D18190AFE8411181A81518429322A -03BF539A3EA7C7423E4D1F1E1E02A4020E1332EEE152E166FE4D1A332B86000200B90000 -06F4045D000E0027005D4017171E073D4F219F21022121161C20051A083D167900010FB8 -FFF0401F090B37211E081A16161A001B890F010F8F290F292F294F29031D191A1A882810 -F6FD325D10F65DED11392FED39392B5D002FED2F3F3312392F5DED39393130013426272E -012B0111333236373E01371406070E0123211121112311331121113311333216171E0106 -3223282A6B64B0AC646E282925C24138429676FE55FDF3BCBC020DBCF47E8B453A3A0157 -334D18190AFE8411181A473A518429322A0210FDF0045DFE4D01B3FE4D1A332B86000001 -00130000045F0614001E00504030031D161D751D0317140E51111112180D08421B041201 -010D08150F021A0091201F20602002141517030B1A110F0D881F10F63232FD17325D10F6 -ED2F2F003F3C3F3FED123912392FED393931305D2123113426272E012322060711231123 -3533353315211521113E0133321615045FBC1218195E4B4DA84DBCA6A6BC0141FEBF58BC -63B5BE027C4D87262A294C3BFCBE04F4869A9A86FEED4952DACDFFFF00C1000004A90682 -0236021200000116008DF9F60011400C01001D401D02001D1C0611252B5D35000002003D -FE64047F06150007001500BD404C04063406440650066006700606090307051903170546 -0149035800570179030902071A000100051A0403044900460402080F0E010E0E12500B0B -0003020405020C15C908400B0E37080FC90EB8FFC040110B0E370E080E04026801010102 -03030400B8FFC040220910370C001C004A006A007A0005008D170F170103041304450465 -0475040504821610E65D5D10F65D2B1117395D2F1139392F2BED2F2BED003F3F12393933 -2FED332F5D333130015D8710FD8710FDC0015D005D0901231301330901130E0123222627 -331E0133323637047FFD74C9D0FE43CC0157015A0805B1A9A9B105AB015B58595A01045D -FA0701D20427FCC4033C01B894A6A694695E5C6B000100B9FEF40460045D000B003F4027 -0A060520030103083E00050802C93F034F037F0303030305091A00920D1F0D600D02081A -05880C10F6ED5D10F6ED12392F5DED003F33ED2F5D3F3331302901112311211133112111 -330460FE84AEFE83BC022FBCFEF4010C045DFC4403BC000100C80000048A076B0007002B -B90006FFC040140D10370606003503030205130606090114026C0810F6ED11332FED002F -3FED332F2B31300111231121113311018EC60308BA0521FADF05D1019AFDB600000100B9 -000003BB05CE00070033B90006FFC0401A0E10370606003F03050205C97006010606090F -0901011A02870810F6ED5D11332F5DED002F3FED332F2B313001112311211133110175BC -0254AE03B8FC48045D0171FDEA00000100CB023C073502DC00030011B601540200000501 -2F11332F002FED3130012135210735F996066A023CA0000400C8000008B905ED00090015 -0021002500A7403E080718073A014901440646075801540656076F0160067F0170060D09 -0D0613190D16137A19751F0625533F224F220222221F401214371F51300D010D0D19B8FF -C040321214371951130202030807040106030100220F2302232223220A1CC910100A0006 -0102071300000416C90A0A270213046C2610F6ED11332FED12392FFD1139391112392FED -1239392F2F5D002F3F1217393FED2B332F5DED2B332F5DED5D3130015D21230111231121 -0111330114062322263534363332160734262322061514163332360121152104FFF5FD72 -B401330250B403BABDB2B6BABEB2B5BAB25865675757676558FE6201B8FE480534FACC05 -D1FB4004C0FE63E0DADADFE0DADCDDAC8888ADAD8787FDE89E00000100B900000460045D -000700254015033F06050005011A0092091F09600902041A05880810F6ED5D10F6ED002F -333FED313021231121112311210460BCFDD1BC03A703BBFC45045D00000101190235028F -05D5000800214011035004040703010E0307002A03000101012F5D33ED392F003F3F332F -ED3130012311233532363733028FA5D1667E0989023502A9752C5600000100EF023D039F -05ED001D0043B90011FFE040250D10370F0F0B521302021C51010E00001C01082A261636 -166616761604160F160F000101012F5D33332F2F5DED1239332F003FFD323FED332F3130 -2B0121353E01373E013534262322060723353E01333216151406070E010721039FFD505B -86276D40584C468F290F41974D9DA9526A318D3701F2023D94456825676D52464A3C20B3 -1B229E7A5D945E2B6A29000100E6021C037305ED002E0074400F6C096C227E097E220455 -0C5A1F0226B8FFE0403B0B0E3703200B0D372C2B15510F16010F161F164F165F16CF16FF -16061621211D51160625020A0A0E51060F1A2A281622112A2216282C04090000092F332F -121739ED2F2F2FED003FED332F3F1239ED332F2F5D71ED393931302B2B5D015D01140607 -0E012322262735331E013332363534262B01353332363534262322060723353E01333216 -15140607151E0103733C30357B4F528F4111259A4F546E645B8C7D575F52574299251140 -964F98AA614D5075033A47702225201E1CAF233B4948533B8B4C423C473E23AF1B228C62 -57711A08106D000200B3023D03BD05ED000A000D003A401E6D067E06020609010D51050C -05030702030E00070B042A09000D060101062F332F12393333FD39392F003F3F1239392F -ED3939323130015D012315233521350133113321110103BDA396FE2F01D295A3FECBFE9F -0319DCDCB9021BFDB10190FE7000000100E6021C037505DA002A004840176F087F08021D -1D1A5125250621511E030A0A0E51060F00B8FFEA400F090C371F21291E1F1E09142A0000 -092F332FED1239392FED2F2B003FED332F3FED12392FFD322F31305D011406070E012322 -262735331E01333236373E01353426272E012322060711211521153E01333216171E0103 -75322F3088574E953C1025924E2C521C1D171F1D1E59353B6C260255FE4814310E547634 -373C0363457A2A2B331C1A9F1436171C1D43272A391415110E0601F08BCF02021722246F -000100F3023503A505DA000600414025560101030100012A020203630073000200000351 -0503020E030002100910370202040000042F332F12392F2B1239003F3FFD322F3130015D -8710ED87C0015D0901230121352103A5FE2AB901F0FDED02B2054EFCE7031A8B000300C5 -021B039105EE001900280037005D40420F0B0F151F0B1F152A022A0439023904492B582B -0A0F251F2526103610042F09261604031D5110023551030F1A2A13202A0D292A090D1316 -04067000010000322A062FED332F5D121739ED2FED2FED003FED3FED1217395D31305D01 -140623222635343637352E0135343633321615140607151E01033426232206151416171E -01173E01133426272E01270E011514163332360391CB9BA7BF5E595246B99095B5505261 -5BBE574F465D302D17482E392618374217582A3A387650516D033579A19F784F78260429 -64476A8D87683F7D2304276B016433483F36263D140A1F0B254FFE79323B1E0A1C0F205D -304A5F4E00020073FFE1068B05F0002800340075400978180176097915021BB8FFC04045 -0910371B694F0001002302031A090A0905151A0915155A095515062C3415023234090A22 -1E2926151B00030F291503360F361F3680369036BF36CF36060F36012F150F683510F6ED -5D5D10D6ED121739D4FDC4003FED3FED5D1239393FDD5DED2B5D31305D011E0115140207 -0E01232224272602353412373624333216171E01173E013534262735331E011514060110 -0023220011100033320005A11F1A63595CFBA19DFEFF5A5A61605C5801059AA0FF591819 -144F43160CA00D0B78FEF9FEFCE1E3FEFD0108DEDE0107044958A663B8FEDD6165666863 -630120B9B6012167626869611B2121044044245B17092F46326C82FE8D0122013BFEC5FE -DEFEDBFEC90137000002006AFFE104C30584001D0029005640391A20090C373A2135274A -21452704151B690D050003213F0904273F030A14102918090C1B03061E1B00902B0F2B1F -2B3F2B6F2B04241B06852A10F6ED5D10F6ED121739DCFDC4003FED3FED12393FFDCD5D31 -302B011000232200111000333216173332363534262735331E01151406071E0107342623 -22061514163332360471FEE8EBEDFEE90117ED33602B5D5A4A160CA00D0B736C4548C2AA -9799A9AA9896AB022EFEEFFEC4013C01110111013D0F104147245B17092F46326A80144D -D98BD9D3D3D9D2D9D700000100B2FFE1067506F8002B004C40342A20090F37252B6A1C03 -0D032615390649067615041534060A2420290F2801281B14002D0F2D402D6F2D7F2D902D -050F140C6B2C10F6ED5D10DEEDD45DFDC4003FED5D3F3FFDC431302B011406070E012322 -26272E01351133111416171E01333236373E0135113332363534262735331E0115140623 -052947514DCE898CD0475147C621272C976A6B962D2721D85A4A160CA00D0BACA00256A2 -F1504C464A4852E8A9037BFC7B798C394142414239936D038A4147245B17092F46328384 -000100B1FFE105A505840025005C403E0B0619077A070323200910371E246A1505020509 -051142050A011D19290F21012114021A40000100270F276F27025F279027A027C027EF27 -050B1A08872610F6ED5D7110D671ED32D45DFDC4002F3FED3F12393FFDC431302B5D2123 -350E01232226351133111416171E0133323637113332363534262735331E011514062B01 -0457BC5FAE69B0C4BC101A1B565249AD4BD05A4A160CA00D0BACA0027C4B50D7D002D5FD -8455792B2C284C3B03424147245B17092F46328384000001020905110342068C00160042 -4029BF0301030606050C50146005010504ADC005D005020540090D370505110940111437 -09290F000100112FDD5DED2B12392F2B5DED002F5DD4ED12392FC55D3130011406071523 -353E013534262322060723353E01333216034242426E2F3026211F251803134926516605 -F8404E1544790C27271827090969060C560000010221FE8202F5FF450003001340090144 -8F0201020015012FED002F5DED31300123353302F5D4D4FE82C3FFFF0154051602FA068C -001600430000FFFF021D051603C3068C0016008D00000002013605110514068C0006000A -004DB90006FFF040100E103705100E10370802010708040305B8FFC040110E1037050560 -0301036007700702070900B8FFC0B50E10370000042F332F2BD6CD5D002F5D332F2B1217 -392F3130012B2B01230B012313332103231303E19FB9B89BE4E30217DA817C05110100FF -00017BFEF6010A0000020003051103E1068C0006000A004AB90006FFF040100E10370510 -0E10370802010809040305B8FFC040180E1037050560030103006F097F0902090704400E -103700042F332BD6CD5D2F002F5D332F2B1217392F3130012B2B01230B01231333012303 -3303E19FB9B89BE4E3FE6181DADF05110100FF00017BFEF6010A00020136051104C00752 -0006001D008EB90006FFF040120E103705100E1037BF0A010A0D0D0C13501BB8FFC0400B -0E10371B0C02010C030305B8FFC0402A0E10370505600301030BADC00CD00C020C400910 -370C0C18104011143710290F07010718400C10371800B8FFC040090E1037000060040104 -2F5D332F2BD42BDD5DED2B12392F2B5DED002F5D332F2B1217392FD42BED12392FC55D31 -30012B2B01230B01231333251406071523353E013534262322060723353E0133321603E1 -9FB9B89BE4E301C342426E2F3026211F251803134926516605110100FF00017B32404E15 -44790C27271827090969060C560000020125051103F307DE000600200064B90006FFF040 -200E103705100E10370710520F171F17A0170317141D520A400D11370A01020305B8FFC0 -40110E10370505600301032029070013291400B8FFC0B40E103700042F332BD6ED2FD6ED -002F5D332F2B123939D62BED3CDD5DED3C3130012B2B01230B01231333130E0123222627 -2E0123220607233E01333216171E013332363703E19FB9B89BE4E3F606865F35491C183A -192B22058C05875F36491C163B192A240405110100FF00017B015289902919162D3E4788 -912A19142E3E47000002014204E703D506FB000D0011003C40251110400F1A3710001006 -0AAA3F030103600E700E020E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D -002F5DEDCD39392F2BCD313001140623222635331416333236353703231303D5B29897B2 -A2555253555EDA817C0646A3BCBCA37C64647CB5FEF6010A0002014204E703D506FB000D -0011003C4025100F400F1A370F000F060AAA3F0301036F107F1002100E0D2A0E0F001F00 -8F000300072A062FEDD45D39ED2FCD5D002F5DEDCD39392F2BCD31300114062322263533 -1416333236350723033303D5B29897B2A2555253555281DADF0646A3BCBCA37C64647C55 -010A0002014204E703D5071E000D002400634040111414131A0F2201221340091A371300 -13060AAA3F0301031213400910371313001F101F201F031F1728500E600E700E030E0D2A -0E0F001F008F000300072A062FEDD45D39ED2F5DEDCD5D392F2BCD002F5DEDCD39392F2B -D45DCD12392FC531300114062322263533141633323635271406071523353E0135342623 -22060723353E0133321603D5B29897B2A2555253551237375C272822191C1E1402103C21 -42570646A3BCBCA37C64647C5B34431238650A2120191D080757060A45000002012504E7 -03F307DE000D0027005840100E17520F1E1F1E021E1B245220110111B8FFC04025090C37 -11006006700602060AAA3F0301031A291B0627290E0D2A0F001F008F000300072A062FED -D45DEDD4ED10D6ED002F5DEDDD5D39D62B71ED3CDD5DED3C313001140623222635331416 -33323635130E01232226272E0123220607233E01333216171E013332363703D5B29897B2 -A255525355C006865F35491C183A192B22058C05875F36491C163B192A24040646A3BCBC -A37C64647C019889902919162D3E4788912A19142E3E47000001020905110342068C0016 -00524035BF0301030606050C50501460147014031409900501C76005010504ADC005D005 -020540091037050511094011143709290F000100112FDD5DED2B12392F2B5DED002F5D5E -5D5ED45DED12392FC55D3130011406071523353E013534262322060723353E0133321603 -4242426E2F3026211F251803134926516605F8404E1544790C27271827090969060C5600 -00020136065403E1080100060020007D404A0702170202141D50200A010A1050076F1701 -0F1770170217010205400D1137050920039003A003B003045910032003C00303C003D003 -0231D003E003025003010F037003020320280700B8FFC040090E10370013281400042F33 -D6ED2F2BD6ED002F5D71725E71725E715ECD2B39392F5D713CEDDD71ED3C31305D012327 -07233733130E01232226272E0123220607233E01333216171E013332363703E1A9AFAEA5 -F8BBEC0B705025491C1B3E141D2806860A6F5227432122301A1B2B0506545959AD010052 -6B190D0D1A202D4E6F17101016232A0000020142064803D50801000D0011005A403E5010 -6010020A50FF03015F030103007F0601060F109F10026F10FF1002106F11010F11701102 -11590E690E720E030E100D2A100F001F008F000300072A062FEDD45D39ED2FCD5D002F5D -71DD5D71D45D3CDD7172ED5D313001140623222635331416333236353707233703D5AB9E -9EACA24B5D5A4D4FC681680738589899573058592FC9D8D800020142064803D50801000D -001100644033500E600E020A50FF03015F030103007F0601060F0E9F0E026F0EFF0E020E -6F11010F1170110211561066107D1003100E0D2A0EB8FFC0400F090D370E0F001F008F00 -0300072A062FEDD45D392BED2FCD5D002F5D71DD5D71D45D3CDD7172ED5D313001140623 -222635331416333236350723273303D5AB9E9EACA24B5D5A4D5681C6DF07385898995730 -58592F0FD80000020142064803D50801000D0024008E4062111414131A6F22010F227022 -02223F134F13021340111537130013060A5009900301B0030159700301310F033F037003 -CF0304031213400915371313501F601F701F03001F101F201F301F401F051F17C00E010E -0D2A0E0F001F008F000300072A062FEDD45D39ED2F5DCDCD5D71392F2BCD002F5D5E715E -5D715EEDCD39392F2B712F5D71CD12392FC5313001140623222635331416333236352714 -06071523353E013534262322060723353E0133321603D5AB9E9EACA24B5D5A4D2E2E2E4D -231F1C15191A0E020E321B364A0738589899573058592F612B380F2F54091E1817160805 -4905083900020142064803D50801000D0027009240111B2450DF1101110E17506F1E010F -1E011EB8FFC040520D10371E00060A50099003B00302F0030159200330034003C003D003 -E003066003700302C003D0030231A003B003025003E003020F033F03CF0303031A281B1B -0627280E0E0D2A0F001F008F000300072A062FEDD45DED3C10ED103C10ED002F5D71725E -5D71725E5D715EEDCD322F2B5D71ED3CDD71ED3C31300114062322263533141633323635 -370E01232226272E0123220607233E01333216171E013332363703D5AE9B9BAFA26C3C3C -6BA20B705025491C1B3E141D2806860A6F5227432122301A1B2B050706546A67572E2828 -2EFB526B190D0D1A202D4E6F17101016232A000201360668051008010006001D0088B900 -06FFF0401A0E103705100E1037BF0A010A0D0D0C400E10370C13500F1B011BB8FFC0403A -0D10371B0102030F0570050205050F0301030BADC00CD00C020C400910370C0C18104011 -143710290F07010750006000700003180000600401042F5D332FD45DDD5DED2B12392F2B -5DED002F5D332F5D1239392F2B5DEDC42B392FC55D3130012B2B01232707231333051406 -071523353E013534262322060723353E0133321603E19FB9B89BE4E3021342426E2F3026 -211F25180313492651660668CECE014944404E1544790C27271827090969060C5600FFFF -001AFE82055E05D10236002400000116024B2F00000AB602000D0E0500252B35FFFF0068 -FE82041D04780236004400000116024BBA00000F400A027F36010036370B00252B5D3500 -FFFF001A0000055E080102360024000001170256002F0175001A401202501C0102101C40 -1C701C03001C0B0500252B5D35005D35FFFF0068FFE1041D068C0236004400000116024A -BA000011400C025F457F45021D45340B00252B5D3500FFFF001A0000055E07ED02360024 -00000117024E002F01610011400B0302400F01000F0B0500252B5D353500FFFF0068FFE1 -04F4068C0236004400000116024EE0000013400D030240385038022938340B00252B5D35 -3500FFFF001A0000055E07ED0236002400000117024F002F01610011400B03020F0F0100 -0F0B0500252B5D353500FFFFFFE3FFE1041D068C0236004400000116024FE0000013400D -030240385038022938340B00252B5D353500FFFF001A0000055E08010236002400000116 -025C2F00001740110302400FA00FB00FC00F04000F0B0500252B5D353500FFFF0068FFE1 -04A0075202360044000001160250E0000013400D030240385038022938340B00252B5D35 -3500FFFF001A0000055E0801023600240000011602572F00000CB70302000F0B0500252B -3535FFFF0068FFE1041D07DE02360044000001160251E0000013400D0302403850380229 -38340B00252B5D353500FFFF001AFE82055E07ED023600240000003700D6002F01610116 -024B2F00001840110300141505002502400F01000F0B0500252B5D352B35FFFF0068FE82 -041D068C023600440000003600D6E0000116024BBA00001E4016037F3D01003D3E0B0025 -0240385038022938340B00252B5D352B5D35FFFF001A0000055E08010236002400000116 -02582F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236004400000116 -0252E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000055E08010236 -00240000011602592F00000CB7030200110B0500252B3535FFFF0068FFE1041D06FB0236 -0044000001160253E0000011400B0302403A01293A340B00252B5D353500FFFF001A0000 -055E08010236002400000116025A2F00000CB7030200110B0500252B3535FFFF0068FFE1 -041D071E02360044000001160254E0000011400B0302403A01293A340B00252B5D353500 -FFFF001A0000055E08010236002400000116025B2F00000CB7030200110B0500252B3535 -FFFF0068FFE1041D07DE02360044000001160255E0000011400B0302403A01293A340B00 -252B5D353500FFFF001AFE82055E0801023600240000003700D9002F01750116024B2F00 -001D4013025011011103001B1C0500250200110B0500252B352B3500115D3500FFFF0068 -FE82041D068C023600440000003600D9DD000116024BBA0000184011037F44010044450B -002502293A340B00252B352B5D35FFFF00C8FE82049D05D10236002800000116024B2600 -000AB601000E0F0100252B35FFFF006AFE820460047C0236004800000116024BF900000A -B6021F22231218252B35FFFF00C80000049D08010236002800000117025600260175001C -401401501D0101001D201D501D601D04001D0C0203252B5D35005D35FFFF006AFFE60460 -068C0236004800000116024AF9000018B4026F310131B8FFC040090A1137323120120025 -2B2B5D35FFFF00C80000049D07C8023600280000011700D7002601750012400B01501901 -0100190C0203252B35005D35FFFF006AFFE604600653023600480000011600D7F900000A -B602002D201200252B35FFFF00C80000053A08010236002800000117024E002601750016 -400D0201501001020100100C0203252B3535005D3535FFFF006AFFE6050D068C02360048 -00000116024EF900000CB703021E24201200252B3535FFFF00290000049D080102360028 -00000117024F002601750016400D0201501001020100100C0203252B3535005D3535FFFF -FFFCFFE60460068C0236004800000116024FF900000CB703021E24201200252B3535FFFF -00C80000053608010236002800000116025C26000013400D0201101020100200100C0203 -252B5D353500FFFF006AFFE604B9075202360048000001160250F9000013400D03020024 -2024021E24201200252B5D353500FFFF00C80000049D0801023600280000011602572600 -000CB7020100100C0203252B3535FFFF006AFFE6046007DE02360048000001160251F900 -000CB703021E24201200252B3535FFFF00C8FE82049D0801023600280000003700D60026 -01750116024B2600001D40130110501001020015160203250100100C0203252B352B3500 -5D113500FFFF006AFE820460068C023600480000003600D6F9000116024BF9000014400E -031E292A120025021E24201200252B352B35FFFF0089000002D508010236002C00000117 -0256FF2401750016400E01501101015011010011100409252B5D35005D35FFFF00960000 -01CF068C023600D500000117024AFE8D0000000AB6010009080203252B35FFFF0089FE82 -02D505D10236002C00000117024BFF240000000AB601000E0F0409252B35FFFF00AFFE82 -018305DB0236004C00000117024BFE8E0000000AB602000A0B0203252B35FFFF0073FE82 -05DA05F00236003200000117024B009B0000000AB6020026270F03252B35FFFF006AFE82 -0471047C0236005200000116024BE200000AB602001A1B0600252B35FFFF0073FFE105DA -080102360032000001170256009601750022400B0250340102503470340234B8FFC04009 -090B370034240F03252B2B5D35005D35FFFF006AFFE10471068C0236005200000116024A -E200000F400A02701D01001D1C0600252B5D3500FFFF0073FFE105DA0801023600320000 -0117024E00960175001E401403025028010302202850288028030028240F03252B5D3535 -005D3535FFFF006AFFE104F6068C0236005200000116024EE200001940130302001C201C -501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA08010236003200000117 -024F009601750016400D030250280103020028240F03252B3535005D3535FFFFFFE5FFE1 -0471068C0236005200000116024FE200000CB70302001C180600252B3535FFFF0073FFE1 -05DA08010236003200000117025C009600000015400F0302202850288028030028240F03 -252B5D353500FFFF006AFFE104A2075202360052000001160250E200001940130302001C -201C501C801CB01C05001C180600252B5D353500FFFF0073FFE105DA0801023600320000 -01170257009600000015400F0302202850288028030028240F03252B5D353500FFFF006A -FFE1047107DE02360052000001160251E200001940130302001C201C501C801CB01C0500 -1C180600252B5D353500FFFF0073FE8205DA0801023600320000003700D6009601750117 -024B00960000001D4013025028012803002D2E0F0325020028240F03252B352B3500115D -3500FFFF006AFE820471068C023600520000003600D6E2000116024BE2000014400E0300 -212206002502001C180600252B352B35FFFF0073FFE1068B08010236024600000117008D -007801750014400D025036603602020036360F03252B35005D35FFFF006AFFE104C3068C -0236024700000116008DE200000AB602002B2B0600252B35FFFF0073FFE1068B08010236 -024600000117004300AA0175001A40120250366036020250367036020036360F03252B5D -35005D35FFFF006AFFE104C3068C02360247000001160043E2000011400C02502B602B02 -002B2B0600252B5D3500FFFF0073FFE1068B080102360246000001170256008F01750012 -400B02503A0102003A390F03252B35005D35FFFF006AFFE104C3068C0236024700000116 -024AE200000AB602002F2E0600252B35FFFF0073FFE1068B07C8023602460000011700D7 -008B01750012400B02504201020042350F03252B35005D35FFFF006AFFE104C306530236 -02470000011600D7C400001540100210372037403750370400372A0600252B5D3500FFFF -0073FE82068B05F00236024600000117024B009A0000000AB6020037380F03252B35FFFF -006AFE8204C305840236024700000116024BE200000AB602002C2D0600252B35FFFF00B2 -FE82052905D10236003800000116024B6200000AB6010020210C00252B35FFFF00B1FE82 -0457045D0236005800000116024BFD00000AB60100191A0916252B35FFFF00B2FFE10529 -080102360038000001170256006201750012400B01502301010023220C00252B35005D35 -FFFF00B1FFE10457068C0236005800000116024AFD00000AB601001C1B0916252B35FFFF -00B2FFE1067508010236024800000117008D007C01750014400D01502E602E0201002E2D -0C00252B35005D35FFFF00B1FFE105A5068C0236024900000116008DEE00001840100160 -28010130284028020028290900252B5D35005D35FFFF00B2FFE106750801023602480000 -0117004300AA0175001C401401502D602D0201402D602D802D03002D2D0C00252B5D3500 -5D35FFFF00B1FFE105A5068C023602490000011600430200001840100160270101502760 -27020027270800252B5D35005D35FFFF00B2FFE106750801023602480000011702560062 -01750012400B01503101010031300C00252B35005D35FFFF00B1FFE105A5068C02360249 -00000116024AFD00000AB601002B2A0800252B35FFFF00B2FFE1067507BE023602480000 -011700D70062016B000AB60100392C0C00252B35FFFF00B1FFE105A50653023602490000 -011600D7FD00000AB6010033260800252B35FFFF00B2FE82067506F80236024800000116 -024B6200000AB601002E2F0D00252B35FFFF00B1FE8205A505840236024900000116024B -FD00000AB6010028290800252B35FFFF0006000004E608010236003C000001170043FFE4 -0175001B400A01500A600A0201500A01B8FFD3B40A0A0401252B5D35005D3500FFFF003D -FE64047F068C0236005C000001160043DD000013B5016009700902B8FFDDB40909040025 -2B5D3500FFFF0006FE8204E605D10236003C00000116024BEC00000AB601000A09040125 -2B35FFFF003DFE64047F045D0236005C00000117024B010400000012400D010A0F0A2F0A -4F0A6F0A7F0A055D1135FFFF0006000004E608010236003C000001170256FFEC01750018 -401001500E0101C00ED00E02000E0D0302252B5D35005D35FFFF003DFE64047F068C0236 -005C00000116024AC900000F400A01500D01000D0C0400252B5D3500FFFF0006000004E6 -07C80236003C0000011700D7FFEC01750012400B01501601010016090500252B35005D35 -FFFF003DFE64047F06530236005C0000011600D7DD00000AB6010015080400252B350003 -006CFEBD04FB0614001B0028002C007E40523B05380C3C2232243E284B054A0C4E224524 -4F285908690870120D2AB52B0114511A17171018011304072041100403082642070A2C2B -2C2B010A1600881617131C041A1A01922E1F2E3F2E02231B010A852D10F632ED5D10F632 -ED32323232ED2F111239392F2F003FED3F3FED1239393F12392F3CFD3C2FED31305D0123 -1123350E01232202113436373E0133321617352135213533153301112E01232206151416 -3332361321352104FBB8BC4DAD6EC6ED524444B66059864CFE95016BBCB8FE8C4F73499C -B2879750A4EAFCB4034C04F4FB0C754252012E01118EDB4D4C4F2427CE869A9AFB990279 -2218D6CCC3CD47FDE286FFFF00ED051D042C0653001600D700000002008A009104900498 -0023002F004D40332D290B0802231D1A141108172F0501052729050F1701170F311F3102 -24290B0802231D1A1411080E202001202A29200F0E010E2F5D33ED2F5D121739ED5D002F -5D33ED2F5D121739ED31300107270E01232226270727372E01353436372737173E013332 -16173717071E011514060727342623220615141633323604906EEC2C4A342E5724EC6DE9 -1718161AEA6FEB24572D2C5825EA71EB1818191765694B496B694B496B01016EEA1A1619 -17EC71EA25592B34492BED6EEB17191817EA6DED2653302D5824A949706E4B4A6F6D0000 -0002000000000000FF4C00780000000000000000000000000000000000000000037D0000 -01020103010401050106010701080109010A010B010C010D010E010F0110011101120113 -011401150116011701180119011A011B011C011D011E011F012001210122012301240125 -0126012701280129012A012B012C012D012E012F01300131013201330134013501360137 -01380139013A013B013C013D013E013F0140014101420143014401450146014701480149 -014A014B014C014D014E014F0150015101520153015401550156015701580159015A015B -015C015D015E015F0160016101620163016401650166016701680169016A016B016C016D -016E016F0170017101720173017401750176017701780179017A017B017C017D017E017F -0180018101820183018401850186018701880189018A018B018C018D018E018F01900191 -01920193019401950196019701980199019A019B019C019D019E019F01A001A101A201A3 -01A401A501A601A701A801A901AA01AB01AC01AD01AE01AF01B001B101B201B301B401B5 -01B601B701B801B901BA01BB01BC01BD01BE01BF01C001C101C201C301C401C501C601C7 -01C801C901CA01CB01CC01CD01CE01CF01D001D101D201D301D401D501D601D701D801D9 -01DA01DB01DC01DD01DE01DF01E001E101E201E301E401E501E601E701E801E901EA01EB -01EC01ED01EE01EF01F001F101F201F301F401F501F601F701F801F901FA01FB01FC01FD -01FE01FF0200020102020203020402050206020702080209020A020B020C020D020E020F -0210021102120213021402150216021702180219021A021B021C021D021E021F02200221 -02220223022402250226022702280229022A022B022C022D022E022F0230023102320233 -023402350236023702380239023A023B023C023D023E023F024002410242024302440245 -0246024702480249024A024B024C024D024E024F02500251025202530254025502560257 -02580259025A025B025C025D025E025F0260026102620263026402650266026702680269 -026A026B026C026D026E026F0270027102720273027402750276027702780279027A027B -027C027D027E027F0280028102820283028402850286028702880289028A028B028C028D -028E028F0290029102920293029402950296029702980299029A029B029C029D029E029F -02A002A102A202A302A402A502A602A702A802A902AA02AB02AC02AD02AE02AF02B002B1 -02B202B302B402B502B602B702B802B902BA02BB02BC02BD02BE02BF02C002C102C202C3 -02C402C502C602C702C802C902CA02CB02CC02CD02CE02CF02D002D102D202D302D402D5 -02D602D702D802D902DA02DB02DC02DD02DE02DF02E002E102E202E302E402E502E602E7 -02E802E902EA02EB02EC02ED02EE02EF02F002F102F202F302F402F502F602F702F802F9 -02FA02FB02FC02FD02FE02FF0300030103020303030403050306030703080309030A030B -030C030D030E030F0310031103120313031403150316031703180319031A031B031C031D -031E031F0320032103220323032403250326032703280329032A032B032C032D032E032F -0330033103320333033403350336033703380339033A033B033C033D033E033F03400341 -03420343034403450346034703480349034A034B034C034D034E034F0350035103520353 -035403550356035703580359035A035B035C035D035E035F036003610362036303640365 -0366036703680369036A036B036C036D036E036F03700371037203730374037503760377 -03780379037A037B037C037D037E037F0380038103820383038403850386038703880389 -038A038B038C038D038E038F0390039103920393039403950396039703980399039A039B -039C039D039E039F03A003A103A203A303A403A503A603A703A803A903AA03AB03AC03AD -03AE03AF03B003B103B203B303B403B503B603B703B803B903BA03BB03BC03BD03BE03BF -03C003C103C203C303C403C503C603C703C803C903CA03CB03CC03CD03CE03CF03D003D1 -03D203D303D403D503D603D703D803D903DA03DB03DC03DD03DE03DF03E003E103E203E3 -03E403E503E603E703E803E903EA03EB03EC03ED03EE03EF03F003F103F203F303F403F5 -03F603F703F803F903FA03FB03FC03FD03FE03FF04000401040204030404040504060407 -04080409040A040B040C040D040E040F0410041104120413041404150416041704180419 -041A041B041C041D041E041F0420042104220423042404250426042704280429042A042B -042C042D042E042F0430043104320433043404350436043704380439043A043B043C043D -043E043F0440044104420443044404450446044704480449044A044B044C044D044E044F -0450045104520453045404550456045704580459045A045B045C045D045E045F04600461 -04620463046404650466046704680469046A046B046C046D046E046F0470047104720473 -047404750476047704780479047A047B047C047D052E6E756C6C106E6F6E6D61726B696E -6772657475726E057370616365066578636C616D0871756F746564626C0A6E756D626572 -7369676E06646F6C6C61720770657263656E7409616D70657273616E640B71756F746573 -696E676C6509706172656E6C6566740A706172656E726967687408617374657269736B04 -706C757305636F6D6D610668797068656E06706572696F6405736C617368047A65726F03 -6F6E650374776F05746872656504666F757204666976650373697805736576656E056569 -676874046E696E6505636F6C6F6E0973656D69636F6C6F6E046C65737305657175616C07 -67726561746572087175657374696F6E0261740141014201430144014501460147014801 -49014A014B014C014D014E014F0150015101520153015401550156015701580159015A0B -627261636B65746C656674096261636B736C6173680C627261636B657472696768740B61 -7363696963697263756D0A756E64657273636F7265056772617665016101620163016401 -650166016701680169016A016B016C016D016E016F017001710172017301740175017601 -7701780179017A0962726163656C656674036261720A627261636572696768740A617363 -696974696C646509416469657265736973054172696E670843636564696C6C6106456163 -757465064E74696C6465094F646965726573697309556469657265736973066161637574 -65066167726176650B6163697263756D666C657809616469657265736973066174696C64 -65056172696E670863636564696C6C6106656163757465066567726176650B6563697263 -756D666C65780965646965726573697306696163757465066967726176650B6963697263 -756D666C657809696469657265736973066E74696C6465066F6163757465066F67726176 -650B6F63697263756D666C6578096F6469657265736973066F74696C6465067561637574 -65067567726176650B7563697263756D666C657809756469657265736973066461676765 -72066465677265650463656E7408737465726C696E670773656374696F6E0662756C6C65 -74097061726167726170680A6765726D616E64626C730A7265676973746572656409636F -707972696768740974726164656D61726B056163757465086469657265736973086E6F74 -657175616C024145064F736C61736808696E66696E69747909706C75736D696E7573096C -657373657175616C0C67726561746572657175616C0379656E036D75310B706172746961 -6C646966660973756D6D6174696F6E0770726F647563740370693108696E74656772616C -0B6F726466656D696E696E650C6F72646D617363756C696E65034F686D026165066F736C -6173680C7175657374696F6E646F776E0A6578636C616D646F776E0A6C6F676963616C6E -6F74077261646963616C06666C6F72696E0B617070726F78657175616C09696E6372656D -656E740D6775696C6C656D6F746C6566740E6775696C6C656D6F74726967687408656C6C -697073697306416772617665064174696C6465064F74696C6465024F45026F6506656E64 -61736806656D646173680C71756F746564626C6C6566740D71756F746564626C72696768 -740971756F74656C6566740A71756F7465726967687406646976696465076C6F7A656E67 -650979646965726573697309596469657265736973086672616374696F6E044575726F0D -6775696C73696E676C6C6566740E6775696C73696E676C726967687402666902666C0964 -616767657264626C0E706572696F6463656E74657265640E71756F746573696E676C6261 -73650C71756F746564626C626173650B70657274686F7573616E640B4163697263756D66 -6C65780B4563697263756D666C6578064161637574650945646965726573697306456772 -617665064961637574650B4963697263756D666C65780949646965726573697306496772 -617665064F61637574650B4F63697263756D666C6578064F677261766506556163757465 -0B5563697263756D666C65780655677261766508646F746C657373690A63697263756D66 -6C65780574696C6465066D6163726F6E05627265766509646F74616363656E740472696E -6707636564696C6C610C68756E676172756D6C617574066F676F6E656B056361726F6E06 -4C736C617368066C736C61736806536361726F6E06736361726F6E065A6361726F6E067A -6361726F6E0962726F6B656E626172034574680365746806596163757465067961637574 -650554686F726E0574686F726E056D696E7573086D756C7469706C790B6F6E6573757065 -72696F720B74776F7375706572696F720D74687265657375706572696F72076F6E656861 -6C660A6F6E65717561727465720D74687265657175617274657273056672616E63064762 -72657665066762726576650449646F740853636564696C6C610873636564696C6C610643 -61637574650663616375746506436361726F6E06636361726F6E07646D6163726F6E096F -76657273636F7265066D6964646F74064162726576650661627265766507416F676F6E65 -6B07616F676F6E656B06446361726F6E06646361726F6E0644736C61736807456F676F6E -656B07656F676F6E656B06456361726F6E06656361726F6E064C6163757465066C616375 -7465064C6361726F6E066C6361726F6E044C646F74046C646F74064E6163757465066E61 -63757465064E6361726F6E066E6361726F6E094F64626C6163757465096F64626C616375 -7465065261637574650672616375746506526361726F6E06726361726F6E065361637574 -65067361637574650854636564696C6C610874636564696C6C6106546361726F6E067463 -61726F6E055572696E67057572696E67095564626C6163757465097564626C6163757465 -065A6163757465067A6163757465045A646F74047A646F740547616D6D61055468657461 -0350686905616C7068610564656C746107657073696C6F6E057369676D61037461750370 -68690D756E64657273636F726564626C096578636C616D64626C096E7375706572696F72 -0670657365746102494A02696A0B6E61706F7374726F706865066D696E75746506736563 -6F6E64096166696936313234380961666969363132383906483232303733064831383534 -3306483138353531064831383533330A6F70656E62756C6C657407416D6163726F6E0761 -6D6163726F6E0B4363697263756D666C65780B6363697263756D666C65780443646F7404 -63646F7407456D6163726F6E07656D6163726F6E06456272657665066562726576650445 -646F740465646F740B4763697263756D666C65780B6763697263756D666C65780447646F -740467646F740847636564696C6C610867636564696C6C610B4863697263756D666C6578 -0B6863697263756D666C657804486261720468626172064974696C6465066974696C6465 -07496D6163726F6E07696D6163726F6E064962726576650669627265766507496F676F6E -656B07696F676F6E656B0B4A63697263756D666C65780B6A63697263756D666C6578084B -636564696C6C61086B636564696C6C610C6B677265656E6C616E646963084C636564696C -6C61086C636564696C6C61084E636564696C6C61086E636564696C6C6103456E6703656E -67074F6D6163726F6E076F6D6163726F6E064F6272657665066F62726576650852636564 -696C6C610872636564696C6C610B5363697263756D666C65780B7363697263756D666C65 -7804546261720474626172065574696C6465067574696C646507556D6163726F6E07756D -6163726F6E065562726576650675627265766507556F676F6E656B07756F676F6E656B0B -5763697263756D666C65780B7763697263756D666C65780B5963697263756D666C65780B -7963697263756D666C6578056C6F6E67730A4172696E6761637574650A6172696E676163 -757465074145616375746507616561637574650B4F736C61736861637574650B6F736C61 -7368616375746509616E6F74656C65696106576772617665067767726176650657616375 -746506776163757465095764696572657369730977646965726573697306596772617665 -067967726176650D71756F74657265766572736564097261646963616C65780961666969 -303839343109657374696D61746564096F6E656569676874680C74687265656569676874 -68730B66697665656967687468730C736576656E656967687468730B636F6D6D61616363 -656E7410756E646572636F6D6D61616363656E7405746F6E6F730D646965726573697374 -6F6E6F730A416C706861746F6E6F730C457073696C6F6E746F6E6F7308457461746F6E6F -7309496F7461746F6E6F730C4F6D6963726F6E746F6E6F730C557073696C6F6E746F6E6F -730A4F6D656761746F6E6F7311696F74616469657265736973746F6E6F7305416C706861 -04426574610544656C746107457073696C6F6E045A6574610345746104496F7461054B61 -707061064C616D626461024D75024E75025869074F6D6963726F6E0250690352686F0553 -69676D610354617507557073696C6F6E0343686903507369054F6D6567610C496F746164 -696572657369730F557073696C6F6E64696572657369730A616C706861746F6E6F730C65 -7073696C6F6E746F6E6F7308657461746F6E6F7309696F7461746F6E6F7314757073696C -6F6E6469657265736973746F6E6F7304626574610567616D6D61047A6574610365746105 -746865746104696F7461056B61707061066C616D626461026D75026E75027869076F6D69 -63726F6E0372686F067369676D613107757073696C6F6E0363686903707369056F6D6567 -610C696F746164696572657369730F757073696C6F6E64696572657369730C6F6D696372 -6F6E746F6E6F730C757073696C6F6E746F6E6F730A6F6D656761746F6E6F730961666969 -313030323309616669693130303531096166696931303035320961666969313030353309 -616669693130303534096166696931303035350961666969313030353609616669693130 -303537096166696931303035380961666969313030353909616669693130303630096166 -696931303036310961666969313030363209616669693130313435096166696931303031 -370961666969313030313809616669693130303139096166696931303032300961666969 -313030323109616669693130303232096166696931303032340961666969313030323509 -616669693130303236096166696931303032370961666969313030323809616669693130 -303239096166696931303033300961666969313030333109616669693130303332096166 -696931303033330961666969313030333409616669693130303335096166696931303033 -360961666969313030333709616669693130303338096166696931303033390961666969 -313030343009616669693130303431096166696931303034320961666969313030343309 -616669693130303434096166696931303034350961666969313030343609616669693130 -303437096166696931303034380961666969313030343909616669693130303635096166 -696931303036360961666969313030363709616669693130303638096166696931303036 -390961666969313030373009616669693130303732096166696931303037330961666969 -313030373409616669693130303735096166696931303037360961666969313030373709 -616669693130303738096166696931303037390961666969313030383009616669693130 -303831096166696931303038320961666969313030383309616669693130303834096166 -696931303038350961666969313030383609616669693130303837096166696931303038 -380961666969313030383909616669693130303930096166696931303039310961666969 -313030393209616669693130303933096166696931303039340961666969313030393509 -616669693130303936096166696931303039370961666969313030373109616669693130 -303939096166696931303130300961666969313031303109616669693130313032096166 -696931303130330961666969313031303409616669693130313035096166696931303130 -360961666969313031303709616669693130313038096166696931303130390961666969 -313031313009616669693130313933096166696931303035300961666969313030393809 -616669693030323038096166696936313335320270690C6F6E656E756D657261746F720C -74776F6E756D657261746F720E74687265656E756D657261746F720D666F75726E756D65 -7261746F720D666976656E756D657261746F720E736576656E6E756D657261746F720E65 -696768746E756D657261746F7210446F6E74436F6D707265737348544D5808676C797068 -35373908676C79706835383008676C797068353831054F686F726E056F686F726E055568 -6F726E0575686F726E0D686F6F6B61626F7665636F6D620C646F7462656C6F77636F6D62 -096772617665636F6D62096163757465636F6D6208676C79706835393008676C79706835 -393108676C79706835393208676C79706835393308676C79706835393408676C79706835 -393508676C79706835393608676C79706835393708676C79706835393808676C79706835 -393908676C79706836303008676C79706836303108676C79706836303208676C79706836 -303308676C7970683630340941646F7462656C6F770961646F7462656C6F770A41686F6F -6B61626F76650A61686F6F6B61626F7665104163697263756D666C657861637574651061 -63697263756D666C65786163757465104163697263756D666C6578677261766510616369 -7263756D666C65786772617665144163697263756D666C6578686F6F6B61626F76651461 -63697263756D666C6578686F6F6B61626F7665104163697263756D666C657874696C6465 -106163697263756D666C657874696C6465134163697263756D666C6578646F7462656C6F -77136163697263756D666C6578646F7462656C6F770B41627265766561637574650B6162 -7265766561637574650B41627265766567726176650B61627265766567726176650F4162 -72657665686F6F6B61626F76650F616272657665686F6F6B61626F76650B416272657665 -74696C64650B61627265766574696C64650E416272657665646F7462656C6F770E616272 -657665646F7462656C6F770945646F7462656C6F770965646F7462656C6F770A45686F6F -6B61626F76650A65686F6F6B61626F7665064574696C6465066574696C64651045636972 -63756D666C65786163757465106563697263756D666C6578616375746510456369726375 -6D666C65786772617665106563697263756D666C65786772617665144563697263756D66 -6C6578686F6F6B61626F7665146563697263756D666C6578686F6F6B61626F7665104563 -697263756D666C657874696C6465106563697263756D666C657874696C64651345636972 -63756D666C6578646F7462656C6F77136563697263756D666C6578646F7462656C6F770A -49686F6F6B61626F76650A69686F6F6B61626F76650949646F7462656C6F770969646F74 -62656C6F7708676C79706836343908676C79706836353008676C79706836353108676C79 -70683635320573686576610A68617461667365676F6C0A686174616670617461680B6861 -74616671616D617473056869726971057473657265057365676F6C057061746168067161 -6D61747305686F6C616D0671756275747306646167657368056D65746567056D61716166 -0472616665057061736571077368696E646F740673696E646F7408736F66706173757104 -616C6566036265740567696D656C0564616C657402686503766176057A6179696E036865 -740374657403796F640866696E616C6B6166036B6166056C616D65640866696E616C6D65 -6D036D656D0866696E616C6E756E036E756E0673616D656B68046179696E0766696E616C -70650270650A66696E616C747361646905747361646903716F660472657368047368696E -0374617609646F75626C6576617606766176796F6409646F75626C65796F640667657265 -73680967657273686179696D0D6E657773686571656C7369676E0A7661767368696E646F -740D66696E616C6B616673686576610E66696E616C6B616671616D6174730A6C616D6564 -686F6C616D106C616D6564686F6C616D64616765736807616C746179696E0B7368696E73 -68696E646F740A7368696E73696E646F74117368696E6461676573687368696E646F7410 -7368696E64616765736873696E646F7409616C656670617461680A616C656671616D6174 -7309616C65666D61706971096265746461676573680B67696D656C6461676573680B6461 -6C6574646167657368086865646167657368097661766461676573680B7A6179696E6461 -676573680974657464616765736809796F646461676573680E66696E616C6B6166646167 -657368096B61666461676573680B6C616D6564646167657368096D656D64616765736809 -6E756E6461676573680C73616D656B686461676573680D66696E616C7065646167657368 -0870656461676573680B747361646964616765736809716F666461676573680A72657368 -6461676573680A7368696E64616765736808746176646167657308766176686F6C616D07 -62657472616665076B6166726166650670657261666509616C65666C616D6564127A6572 -6F77696474686E6F6E6A6F696E65720F7A65726F77696474686A6F696E65720F6C656674 -746F72696768746D61726B0F7269676874746F6C6566746D61726B096166696935373338 -380961666969353734303309616669693537343037096166696935373430390961666969 -353734343009616669693537343531096166696935373435320961666969353734353309 -616669693537343534096166696935373435350961666969353734353609616669693537 -343537096166696935373435380961666969353733393209616669693537333933096166 -696935373339340961666969353733393509616669693537333936096166696935373339 -370961666969353733393809616669693537333939096166696935373430300961666969 -353734303109616669693537333831096166696935373436310961666969363331363709 -616669693537343539096166696935373534330961666969353735333409616669693537 -343934096166696936323834330961666969363238343409616669693632383435096166 -696936343234300961666969363432343109616669693633393534096166696935373338 -320961666969363432343209616669693632383831096166696935373530340961666969 -353733363909616669693537333730096166696935373337310961666969353733373209 -616669693537333733096166696935373337340961666969353733373509616669693537 -333931096166696935373437310961666969353734363009616669693532323538096166 -696935373530360961666969363239353809616669693632393536096166696935323935 -370961666969353735303509616669693632383839096166696936323838370961666969 -363238383809616669693537353037096166696936323936310961666969363239353909 -616669693632393630096166696935373530380961666969363239363209616669693537 -353637096166696936323936340961666969353233303509616669693532333036096166 -696935373530390961666969363239363709616669693632393635096166696936323936 -360961666969353735353509616669693532333634096166696936333735330961666969 -363337353409616669693633373539096166696936333736330961666969363337393509 -616669693632383931096166696936333830380961666969363239333809616669693633 -383130096166696936323934320961666969363239343709616669693633383133096166 -696936333832330961666969363338323409616669693633383333096166696936333834 -340961666969363238383209616669693632383833096166696936323838340961666969 -363238383509616669693632383836094F646F7462656C6F77096F646F7462656C6F770A -4F686F6F6B61626F76650A6F686F6F6B61626F7665104F63697263756D666C6578616375 -7465106F63697263756D666C65786163757465104F63697263756D666C65786772617665 -106F63697263756D666C65786772617665144F63697263756D666C6578686F6F6B61626F -7665146F63697263756D666C6578686F6F6B61626F7665104F63697263756D666C657874 -696C6465106F63697263756D666C657874696C6465134F63697263756D666C6578646F74 -62656C6F77136F63697263756D666C6578646F7462656C6F770A4F686F726E6163757465 -0A6F686F726E61637574650A4F686F726E67726176650A6F686F726E67726176650E4F68 -6F726E686F6F6B61626F76650E6F686F726E686F6F6B61626F76650A4F686F726E74696C -64650A6F686F726E74696C64650D4F686F726E646F7462656C6F770D6F686F726E646F74 -62656C6F770955646F7462656C6F770975646F7462656C6F770A55686F6F6B61626F7665> -<0A75686F6F6B61626F76650A55686F726E61637574650A75686F726E61637574650A5568 -6F726E67726176650A75686F726E67726176650E55686F726E686F6F6B61626F76650E75 -686F726E686F6F6B61626F76650A55686F726E74696C64650A75686F726E74696C64650D -55686F726E646F7462656C6F770D75686F726E646F7462656C6F7708676C797068383832 -08676C7970683838330959646F7462656C6F770979646F7462656C6F770A59686F6F6B61 -626F76650A79686F6F6B61626F7665065974696C6465067974696C646504646F6E670974 -696C6465636F6D620863757272656E63790000000000000100000C92000102160C000009 -0084000400B4FF9C000400B6FF9C000A0024FF9C000A0090FF9C000F00B4FF2E000F00B6 -FF2E00100024FFCE0010002CFFE20010002DFF9C00100036FFEC00100037FF6A00100039 -FFCE0010003AFFCE0010003BFFB00010003CFF740010003DFFE200100044FFEC00100059 -FFD80010005AFFEC0010005BFFCE0010005CFFD80010005DFFD800100090FFCE001000A0 -FFEC0011000FFF7E00110010FF60001100B1FF88001100B2FF88001100B4FF2E001100B6 -FF2E001D00B2FF7400240010FFCE00240036FFF600240037FF8800240038FFF600240039 -FFC40024003AFFCE0024003CFFB000240057FFEC00240058FFF600240059FFCE0024005A -FFE20024005CFFCE002400B1FFCE002400B2FFCE002400B3FFCE002400B4FF88002400B5 -FFCE002400B6FF880025000FFFEC00250010000A00250011FFEC00250037FFC4002500AB -FFEC002500B1000A002500B2000A00260010FFCE002600AFFFE7002600B1FFCE002600B2 -FFCE0027000FFFCE00270011FFCE00270037FFCE0027003AFFEC0027003BFFF60027003C -FFEC0027003DFFEC002700ABFFCE0029000FFED400290011FED40029001DFFC40029001E -FFC400290022003C00290024FF9C00290037001E00290044FF9C00290048FFCE00290052 -FFCE00290090FF92002900A0FF9C002900A1FFCE002900ABFED4002900B0FFCE002C0010 -FFE2002C00B1FFE2002C00B2FFE2002D000FFFEC002D0011FFEC002D0024FFF6002D0090 -FFF6002D00ABFFEC002E0010FF92002E0032FFEC002E0044FFC4002E0048FFBA002E0052 -FFBA002E0058FFCE002E0059FFB0002E005AFFBA002E005CFFB0002E0091FFEC002E00A0 -FFC4002E00A1FFBA002E00AFFFEC002E00B0FFBA002E00B1FF92002E00B2FF92002F000A -FF88002F0010FF60002F0026FFEC002F002AFFEC002F002D0064002F0032FFEC002F0037 -FF56002F0039FF92002F003AFF9C002F003CFF60002F0059FF92002F005CFF92002F0064 -FFEC002F0091FFEC002F00AFFFEC002F00B1FF60002F00B2FF60002F00B4FF60002F00B6 -FF600032000FFFE200320011FFE200320037FFCE0032003BFFF60032003CFFEC0032003D -FFEC003200ABFFE20033000FFED400330011FED400330024FFCE0033003C001400330044 -FFCE00330048FFCE00330052FFCE00330090FFBA003300A0FFCE003300A1FFCE003300AB -FED4003300B0FFCE0034000FFFE200340011FFE2003400ABFFE200350010FF9C00350037 -FFC40035003CFFEC00350044FFD800350048FFCE00350052FFCE00350058FFEC0035005C -FFC9003500A0FFCE003500A1FFCE003500B0FFC4003500B1FF9C003500B2FF9C003500B4 -FFBA003500B6FFBA0036000FFFEC00360011FFEC00360024FFEC00360036FFEA00360059 -FFE20036005AFFEC0036005CFFE200360090FFEC003600ABFFEC0037000FFEDE00370010 -FF6A00370011FEDE0037001DFF380037001EFF3800370022003C00370024FF8800370026 -FFD80037002AFFD800370032FFCE00370036FFF400370037FFBA00370044FF1000370046 -FF2400370048FF240037004AFF2E00370052FF2400370055FF3800370056FF4C00370058 -FF3800370059FF380037005AFF380037005CFF380037005DFF5600370064FFD800370090 -FF7E00370091FFCE003700A0FF10003700A1FF24003700ABFEDE003700AFFFCE003700B0 -FF24003700B1FF6A003700B2FF6A0038000FFFEC00380011FFEC00380024FFF600380090 -FFEC003800ABFFEC0039000FFEDE00390010FFCE00390011FEDE0039001DFFB00039001E -FFB000390024FFC400390044FF9C00390048FF9C00390052FF9C00390058FFC40039005C -FFBF00390090FFBA003900A0FF9C003900A1FF9C003900ABFEDE003900B0FF9C003900B1 -FFCE003900B2FFCE003A000FFEDE003A0010FFCE003A0011FF24003A001DFFB0003A001E -FFB0003A0024FFCE003A0044FF9C003A0048FF9C003A0052FF9C003A0055FFC4003A0058 -FFC4003A005CFFBF003A0090FFC4003A00A0FF9C003A00A1FF9C003A00ABFF24003A00B0 -FF9C003A00B1FFCE003A00B2FFCE003B0010FFB0003B0026FFF6003B002AFFF6003B0032 -FFF6003B0044FFCE003B0048FFC4003B0052FFC4003B0058FFE2003B005CFFB0003B0064 -FFF6003B0091FFF6003B00A0FFCE003B00A1FFC4003B00AFFFF6003B00B0FFC4003B00B1 -FFB0003B00B2FFB0003C000FFEDE003C0010FF74003C0011FEDE003C001DFF38003C001E -FF38003C0024FFB0003C0032FFEC003C0044FF74003C0047FF88003C0048FF7E003C004A -FF7E003C0050FF9C003C0051FF9C003C0052FF7E003C0053FF9C003C0054FF7E003C0055 -FF9C003C0056FF92003C0058FF92003C0059FF9C003C0090FFB0003C0091FFEC003C00A0 -FF74003C00A1FF7E003C00ABFEDE003C00AFFFEC003C00B0FF7E003C00B1FF74003C00B2 -FF74003D0010FFC4003D0026FFEC003D002AFFEC003D0032FFEC003D003DFFF6003D0044 -FFCE003D0048FFC4003D0052FFC4003D005AFFD8003D005CFFBF003D0064FFEC003D0091 -FFEC003D00A0FFCE003D00A1FFC4003D00AFFFEC003D00B0FFC4003D00B1FFCE003D00B2 -FFCE00440059FFF00044005AFFF60044005CFFF00045000FFFE200450011FFEC0045005C -FFFB004500ABFFEC00460010FFEC00460037FFC4004600B1FFEC004600B2FFEC00480037 -FF7400490005003C0049000A003C0049000C00640049000D00320049000FFF7E00490010 -FFCE00490011FF8800490022006E0049003F00640049004000640049005CFFF600490060 -0064004900ABFF88004900B1FFCE004900B2FFCE004900B40032004900B60032004B0059 -FFEC004B005AFFF6004B005CFFEC004E0010FF9C004E0048FFEC004E0052FFEC004E00A1 -FFEC004E00B0FFEC004E00B1FF9C004E00B2FF9C00500059FFEC0050005AFFF60050005C -FFEC00510059FFEC0051005AFFF60051005CFFEC0052000FFFE200520011FFEC00520059 -FFF10052005BFFEC0052005CFFF1005200ABFFEC0053000FFFE200530011FFEC0053005C -FFFB005300ABFFEC0055000FFEDE00550010FFEC00550011FEDE00550044FFDC005500A0 -FFD8005500ABFEDE005500B1FFEC005500B2FFEC005500B4001E005500B6001E00570010 -FFD80057005CFFF6005700B1FFD8005700B2FFD8005700B40014005700B600140059000F -FF4C00590010FFD800590011FF4C00590044FFD800590048FFEE00590052FFEE005900A0 -FFD8005900A1FFEE005900ABFF4C005900B0FFF1005900B1FFD8005900B2FFD8005A000F -FFBA005A0010FFEC005A0011FFBA005A0044FFEC005A00A0FFEC005A00ABFFBA005A00B1 -FFEC005A00B2FFEC005B0010FFCE005B0046FFEC005B0047FFF6005B0048FFE8005B004A -FFF6005B0052FFE8005B006FFFEC005B00A1FFE8005B00B0FFEC005B00B1FFCE005B00B2 -FFCE005C000FFF42005C0010FFD8005C0011FF42005C0044FFD8005C0046FFEE005C0047 -FFF6005C0048FFEE005C004AFFF6005C0052FFEE005C0054FFF6005C006FFFEE005C00A0 -FFD8005C00A1FFEE005C00ABFF4C005C00B0FFF1005C00B1FFD8005C00B2FFD8005D0010 -FFEC005D0046FFF6005D0047FFF6005D0048FFF4005D004AFFF6005D0052FFF4005D0054 -FFF6005D006FFFF6005D00A1FFF4005D00B1FFEC005D00B2FFEC00640010FFCE006400AF -FFE7006400B1FFCE006400B2FFCE006F0010FFEC006F00B1FFEC006F00B2FFEC0091000F -FFE200910011FFE200910037FFCE0091003BFFF60091003CFFEC0091003DFFEC009100AB -FFE200A1000FFFE200A10011FFEC00A10059FFF100A1005BFFEC00A1005CFFF100A100AB -FFEC00AB00B4FF2E00AB00B6FF2E00B10024FFCE00B1002CFFE200B1002DFF9C00B10036 -FFEC00B10037FF6A00B10039FFCE00B1003AFFCE00B1003BFFB000B1003CFF7400B1003D -FFF600B10044FFEC00B10059FFD800B1005AFFEC00B1005BFFCE00B1005CFFD800B1005D -FFD800B10090FFCE00B100A0FFEC00B20024FFCE00B2002CFFE200B2002DFF9C00B20036 -FFEC00B20037FF6A00B20039FFCE00B2003AFFCE00B2003BFFB000B2003CFF7400B2003D -FFF600B20044FFEC00B20059FFD800B2005AFFEC00B2005BFFCE00B2005CFFD800B2005D -FFD800B20090FFCE00B200A0FFEC00B30024FF9C00B30090FF9C00B4000FFF2E00B40011 -FF2E00B40024FF9C00B40037006E00B40039006400B4003A003C00B4003C006E00B40056 -FFBA00B40057002800B40090FF9C00B400ABFF2E00B50024FF9C00B50090FF9C00B6000F -FF2E00B60011FF2E00B60024FF9C00B60037006E00B60039006400B6003A003C00B6003C -006E00B60056FFBA00B60057002800B60090FF9C00B600ABFF2E00C30037FF2E00C30039 -FF2E00C3003AFF9C00C3003CFF2E00C40037FF2E00C40039FF2E00C4003AFF9C00C4003C -FF2E0000000000010001000100000001000013FF0000001400000000000013F7308213F3 -06092A864886F70D010702A08213E4308213E0020101310E300C06082A864886F70D0205 -05003060060A2B060104018237020104A0523050302C060A2B06010401823702011CA21E -801C003C003C003C004F00620073006F006C006500740065003E003E003E3020300C0608 -2A864886F70D020505000410503EEC935CE1D8D33511E69A791E4594A0820F3F308202C0 -3082022902141389B4D18AE8A7C4BD35C79B8D88CA1FCA535691300D06092A864886F70D -010104050030819E311F301D060355040A1316566572695369676E205472757374204E65 -74776F726B31173015060355040B130E566572695369676E2C20496E632E312C302A0603 -55040B1323566572695369676E2054696D65205374616D70696E67205365727669636520 -526F6F7431343032060355040B132B4E4F204C494142494C495459204143434550544544 -2C20286329393720566572695369676E2C20496E632E301E170D39373035313230373030 -30305A170D3939313233313037303030305A30819E311F301D060355040A131656657269 -5369676E205472757374204E6574776F726B31173015060355040B130E56657269536967 -6E2C20496E632E312C302A060355040B1323566572695369676E2054696D65205374616D -70696E67205365727669636520526F6F7431343032060355040B132B4E4F204C49414249 -4C4954592041434345505445442C20286329393720566572695369676E2C20496E632E30 -819F300D06092A864886F70D010101050003818D0030818902818100D32E20F0687C2C2D -2E811CB106B2A70BB7110D57DA53D875E3C9332AB2D4F6095B34F3E990FE090CD0DB1B5A -B9CDE7F688B19DC08725EB7D5810736A78CB7115FDC658F629AB585E9604FD2D62115881 -1CCA7194D522582FD5CC14058436BA94AAB44D4AE9EE3B22AD56997E219C6C86C04A4797 -6AB4A636D5FC092DD3B4399B0203010001300D06092A864886F70D010104050003818100 -3A119C85053ED2E980FB7BD5A9F4AC79FC05FC953D7123A92B28DF8C136589FE2C87018F -5A9A62CA11A780F4B7BE14B7D156996B086245C6A2A5DA357F0522DE722D048605A77C09 -16931443F0F7164DD6078E9B106C58FE0A3597CA899FDF04709C2A7D618EC1E80B719AA8 -C76662423D959422329822898AFA640824F5D2FA308202CD30820236021500BD119ADA43 -ED21FB46588489CA46889025EE1460300D06092A864886F70D010104050030819E311F30 -1D060355040A1316566572695369676E205472757374204E6574776F726B311730150603 -55040B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369 -676E2054696D65205374616D70696E67205365727669636520526F6F7431343032060355 -040B132B4E4F204C494142494C4954592041434345505445442C20286329393720566572 -695369676E2C20496E632E301E170D3937303531323037303030305A170D393931323331 -3037303030305A3081AC31273025060355040B131E566572695369676E2054696D652053 -74616D70696E672053657276696365311F301D060355040B1316566572695369676E2054 -72757374204E6574776F726B31343032060355040B132B4E4F204C494142494C49545920 -41434345505445442C20286329393720566572695369676E2C20496E632E311730150603 -55040A130E566572695369676E2C20496E632E3111300F06035504071308496E7465726E -657430819D300D06092A864886F70D010101050003818B0030818702818100AB61EDB4AD -8D904790DCB4115E69DC0A7F62900631CDCEFF889146D7493A94E9D4063F9DADA2785AEC -F9FC63454FB80B6E30EFA236AB2D09DFF16F27AB0D516005354F7FCE544FD0B72C42D80B -D08DB85EFFB680D0E396B47F224942106CD398B00156A3C3CF2E9F3AF47FA858A6D72265 -E58CAB789CBCD94742685B2D7DFDB5020103300D06092A864886F70D0101040500038181 -006D60FB995FA469B3D37B702B62231E442051AF2315C77402F949F2271A5CAC86713508 -2BF68FDEE0B596E88BA74BE373C848099DB0DA8BDA1592CA03E509255606E74EA447A5D1 -5746D43856F521CDC3263B2D2532CE9BE2BF4047EAD86D4776E5C030A30F80CE7FD83B7E -A0F9952A312B15FAC814EDDDB0E9554170462D2C7E308209A63082090FA0030201020210 -7966966E83B0D0B601126E9DC0B46571300D06092A864886F70D01010205003061311130 -0F06035504071308496E7465726E657431173015060355040A130E566572695369676E2C -20496E632E31333031060355040B132A566572695369676E20436F6D6D65726369616C20 -536F667477617265205075626C697368657273204341301E170D39383034313630303030 -30305A170D3939303431363233353935395A3082015D3111300F06035504071308496E74 -65726E657431173015060355040A130E566572695369676E2C20496E632E313330310603 -55040B132A566572695369676E20436F6D6D65726369616C20536F667477617265205075 -626C69736865727320434131463044060355040B133D7777772E766572697369676E2E63 -6F6D2F7265706F7369746F72792F43505320496E636F72702E206279205265662E2C4C49 -41422E4C54442863293936313E303C060355040B13354469676974616C20494420436C61 -73732033202D204D6963726F736F667420536F6674776172652056616C69646174696F6E -207632310B3009060355040613025553311330110603550408130A57617368696E67746F -6E3110300E060355040713075265646D6F6E64311E301C060355040314154D6963726F73 -6F667420436F72706F726174696F6E311E301C060355040B14154D6963726F736F667420 -436F72706F726174696F6E30820120300D06092A864886F70D01010105000382010D0030 -8201080282010100B490D226A864E6EB15C3FF6D7B414F0AF96F2A71CE2E1853A63236E0 -D468E135FD4912D896FC65CF531420BE04C97AF5C9706D94ECCCB3AF2A309A32587CB6A9 -6B256799C0E277EA05E5EFE396F7AD0B19A6AE3C8470E2F86F5C4F7D6F0F52458A15D765 -DC3B2005E33DA16C973A0E0B2513ED21CB208E397A628305C9231AFC529DAC9D4C96D73C -4E583D827BEE093556B568C04245A23B31A3FBD895FB55C72CA8A3C3294FCEF493F0031F -7BF1153AA9F8AA5083056D62F08B138838D9E31C0E73C10640BA28C3EBCD9271C7BE66B2 -A15422D60B677CF8877989AC660AAA51FAFD7221FC865DC6F44A0EEC5861234DD0B13A64 -E0139E5EC8856D4C16AF3D07020103A38205DD308205D930090603551D1304023000300B -0603551D0F0404030205A03081880603551D01048180307E80107B96E4D143FD6898F338 -CC6E3BF20B82A16330613111300F06035504071308496E7465726E657431173015060355 -040A130E566572695369676E2C20496E632E31333031060355040B132A56657269536967 -6E20436F6D6D65726369616C20536F667477617265205075626C69736865727320434182 -0502B400000130210603551D040101FF04173014300E300C060A2B060104018237020116 -0302078000300D0603551D0A040630040302064030820436060A2B06010401823702010A -0101FF048204233082041FA029802768747470733A2F2F7777772E766572697369676E2E -636F6D2F7265706F7369746F72792F435053A18203B8818203B454686973206365727469 -66696361746520696E636F72706F7261746573206279207265666572656E63652C20616E -642069747320757365206973207374726963746C790A7375626A65637420746F2C207468 -6520566572695369676E2043657274696669636174696F6E205072616374696365205374 -6174656D656E742028435053290A76657273696F6E20312E302C20617661696C61626C65 -20696E2074686520566572695369676E207265706F7369746F72792061743A0A68747470 -733A2F2F7777772E766572697369676E2E636F6D3B20627920452D6D61696C2061742043 -50532D726571756573747340766572697369676E2E636F6D3B206F720A6279206D61696C -20617420566572695369676E2C20496E632E2C203235393320436F617374204176652E2C -204D6F756E7461696E20566965772C2043412039343034330A55534120436F7079726967 -6874202863293139393620566572695369676E2C20496E632E2020416C6C205269676874 -732052657365727665642E204345525441494E0A57415252414E5449455320444953434C -41494D454420414E44204C494142494C495459204C494D495445442E0A0A5741524E494E -473A2054484520555345204F462054484953204345525449464943415445204953205354 -524943544C59205355424A45435420544F205448450A564552495349474E204345525449 -4649434154494F4E2050524143544943452053544154454D454E542E2020544845204953 -5355494E4720415554484F524954590A444953434C41494D53204345525441494E20494D -504C49454420414E4420455850524553532057415252414E544945532C20494E434C5544 -494E472057415252414E544945530A4F46204D45524348414E544142494C495459204F52 -204649544E45535320464F52204120504152544943554C415220505552504F53452C2041 -4E442057494C4C204E4F540A4245204C4941424C4520464F5220434F4E53455155454E54 -49414C2C2050554E49544956452C20414E44204345525441494E204F544845522044414D -414745532E205345450A5448452043505320464F522044455441494C532E0A0A436F6E74 -656E7473206F662074686520566572695369676E2072656769737465726564206E6F6E76 -657269666965645375626A656374417474726962757465730A657874656E73696F6E2076 -616C7565207368616C6C206E6F7420626520636F6E736964657265642061732061636375 -7261746520696E666F726D6174696F6E0A76616C69646174656420627920746865204941 -2E0AA336803468747470733A2F2F7777772E766572697369676E2E636F6D2F7265706F73 -69746F72792F766572697369676E6C6F676F2E6769663081AF0603551D200481A7308030 -80060B6086480186F845010701013080302806082B06010505070201161C68747470733A -2F2F7777772E766572697369676E2E636F6D2F435053306206082B060105050702023056 -3015160E566572695369676E2C20496E632E30030201011A3D566572695369676E277320 -43505320696E636F72702E206279207265666572656E6365206C6961622E206C74642E20 -286329393720566572695369676E0000000000003016060A2B06010401823702011B0408 -30060101FF0101FF300D06092A864886F70D010102050003818100954CA27955DA745C8B -25C2A620F06CB8B37B467B9E9F7ABA710648151265CC5D29F8513B8971B1F4143878DA8F -AE0B8036905D4897C500380A53BF4037FF8A13276D004734F7484C2E72F2C6D37EFD446F -228FD1929FE394EDE7FF00C9C2EE721CD99C036EB6C1637B3278443B9E858AFB84863728 -2EE7A638373EBAFCF382233182042430820420020101307530613111300F060355040713 -08496E7465726E657431173015060355040A130E566572695369676E2C20496E632E3133 -3031060355040B132A566572695369676E20436F6D6D65726369616C20536F6674776172 -65205075626C69736865727320434102107966966E83B0D0B601126E9DC0B46571300C06 -082A864886F70D02050500A081AE301906092A864886F70D010903310C060A2B06010401 -8237020104301C060A2B06010401823702010B310E300C060A2B06010401823702011630 -1F06092A864886F70D010904311204105BA6237427F8290EF09CCF5B63F749F83052060A -2B06010401823702010C31443042A01A801800560065007200640061006E006100200046 -006F006E0074A1248022687474703A2F2F7777772E6D6963726F736F66742E636F6D2F74 -727565747970652F300D06092A864886F70D0101010500048201003EFBA519B6A00C823F -B823EA3A1E5E6EBDBBF2C647D1F1093C66910B72FEA26B78E409E7750E62A559DAAC12F7 -CCA36B0725F8BB2E0409AEE1156BE3736F46D1B116DF2B18ABCF394DCF0EF8EE01A758E5 -E4872882FFDD5F04C39F3258358C3DE27BE8FC410AC11736DD19609E3BACBB2257C5E4A4 -836F811D07EC80DAB42FE9AC33537823FA2AC0D406166130C356085818B3CEC8A53763BF -88191B4E52ED790B57C924CEA670505AA2621C1121663215F15D1A9E89A6BC2AA35F5B1F -86E4FDEC2280203A57D736DD2C29A4D2D29F00BAF260927AB3B36EF1C4CC5100CAC54BAA -0AFB74D0101FBEC53815E46B3814DF7E5DFC4A121257608F59AA76D5F333A3A18201D030 -8201CC06092A864886F70D010906318201BD308201B90201013081B830819E311F301D06 -0355040A1316566572695369676E205472757374204E6574776F726B3117301506035504 -0B130E566572695369676E2C20496E632E312C302A060355040B1323566572695369676E -2054696D65205374616D70696E67205365727669636520526F6F7431343032060355040B -132B4E4F204C494142494C4954592041434345505445442C202863293937205665726953 -69676E2C20496E632E021500BD119ADA43ED21FB46588489CA46889025EE1460300C0608 -2A864886F70D02050500A059301806092A864886F70D010903310B06092A864886F70D01 -0701301C06092A864886F70D010905310F170D3938313131323135313835305A301F0609 -2A864886F70D01090431120410641EED59DAFC3103655C9A2A4309D288300D06092A8648 -86F70D01010105000481809092A6C858A52E216E3E56A1C40477C3C63030D247298EF8EA -BFA1C4D5DDE8C375555276DDBB2761ADFC914D772AD331C04DDD675B9736F7D136CAA72D -41CF9F8377C51611E0D1B6EDD8C5AB73694109FD5312908B17319E96C22CCEDD65C9D342 -DC0E3B159C36E0FDA54B21C8DD968B90621C263E94F737AC1997B9D84E517C0000> -] def -/CharStrings 893 dict dup begin -/.notdef 0 def /.null 1 def /nonmarkingreturn 2 def /space 3 def /exclam 4 def -/quotedbl 5 def /numbersign 6 def /dollar 7 def /percent 8 def -/ampersand 9 def /quotesingle 10 def /parenleft 11 def /parenright 12 def -/asterisk 13 def /plus 14 def /comma 15 def /hyphen 16 def -/period 17 def /slash 18 def /zero 19 def /one 20 def -/two 21 def /three 22 def /four 23 def /five 24 def -/six 25 def /seven 26 def /eight 27 def /nine 28 def -/colon 29 def /semicolon 30 def /less 31 def /equal 32 def -/greater 33 def /question 34 def /at 35 def /A 36 def -/B 37 def /C 38 def /D 39 def /E 40 def -/F 41 def /G 42 def /H 43 def /I 44 def -/J 45 def /K 46 def /L 47 def /M 48 def -/N 49 def /O 50 def /P 51 def /Q 52 def -/R 53 def /S 54 def /T 55 def /U 56 def -/V 57 def /W 58 def /X 59 def /Y 60 def -/Z 61 def /bracketleft 62 def /backslash 63 def /bracketright 64 def -/asciicircum 65 def /underscore 66 def /grave 67 def /a 68 def -/b 69 def /c 70 def /d 71 def /e 72 def -/f 73 def /g 74 def /h 75 def /i 76 def -/j 77 def /k 78 def /l 79 def /m 80 def -/n 81 def /o 82 def /p 83 def /q 84 def -/r 85 def /s 86 def /t 87 def /u 88 def -/v 89 def /w 90 def /x 91 def /y 92 def -/z 93 def /braceleft 94 def /bar 95 def /braceright 96 def -/asciitilde 97 def /Adieresis 98 def /Aring 99 def /Ccedilla 100 def -/Eacute 101 def /Ntilde 102 def /Odieresis 103 def /Udieresis 104 def -/aacute 105 def /agrave 106 def /acircumflex 107 def /adieresis 108 def -/atilde 109 def /aring 110 def /ccedilla 111 def /eacute 112 def -/egrave 113 def /ecircumflex 114 def /edieresis 115 def /iacute 116 def -/igrave 117 def /icircumflex 118 def /idieresis 119 def /ntilde 120 def -/oacute 121 def /ograve 122 def /ocircumflex 123 def /odieresis 124 def -/otilde 125 def /uacute 126 def /ugrave 127 def /ucircumflex 128 def -/udieresis 129 def /dagger 130 def /degree 131 def /cent 132 def -/sterling 133 def /section 134 def /bullet 135 def /paragraph 136 def -/germandbls 137 def /registered 138 def /copyright 139 def /trademark 140 def -/acute 141 def /dieresis 142 def /notequal 143 def /AE 144 def -/Oslash 145 def /infinity 146 def /plusminus 147 def /lessequal 148 def -/greaterequal 149 def /yen 150 def /mu1 151 def /partialdiff 152 def -/summation 153 def /product 154 def /pi1 155 def /integral 156 def -/ordfeminine 157 def /ordmasculine 158 def /Ohm 159 def /ae 160 def -/oslash 161 def /questiondown 162 def /exclamdown 163 def /logicalnot 164 def -/radical 165 def /florin 166 def /approxequal 167 def /increment 168 def -/guillemotleft 169 def /guillemotright 170 def /ellipsis 171 def /Agrave 172 def -/Atilde 173 def /Otilde 174 def /OE 175 def /oe 176 def -/endash 177 def /emdash 178 def /quotedblleft 179 def /quotedblright 180 def -/quoteleft 181 def /quoteright 182 def /divide 183 def /lozenge 184 def -/ydieresis 185 def /Ydieresis 186 def /fraction 187 def /Euro 188 def -/guilsinglleft 189 def /guilsinglright 190 def /fi 191 def /fl 192 def -/daggerdbl 193 def /periodcentered 194 def /quotesinglbase 195 def /quotedblbase 196 def -/perthousand 197 def /Acircumflex 198 def /Ecircumflex 199 def /Aacute 200 def -/Edieresis 201 def /Egrave 202 def /Iacute 203 def /Icircumflex 204 def -/Idieresis 205 def /Igrave 206 def /Oacute 207 def /Ocircumflex 208 def -/Ograve 209 def /Uacute 210 def /Ucircumflex 211 def /Ugrave 212 def -/dotlessi 213 def /circumflex 214 def /tilde 215 def /macron 216 def -/breve 217 def /dotaccent 218 def /ring 219 def /cedilla 220 def -/hungarumlaut 221 def /ogonek 222 def /caron 223 def /Lslash 224 def -/lslash 225 def /Scaron 226 def /scaron 227 def /Zcaron 228 def -/zcaron 229 def /brokenbar 230 def /Eth 231 def /eth 232 def -/Yacute 233 def /yacute 234 def /Thorn 235 def /thorn 236 def -/minus 237 def /multiply 238 def /onesuperior 239 def /twosuperior 240 def -/threesuperior 241 def /onehalf 242 def /onequarter 243 def /threequarters 244 def -/franc 245 def /Gbreve 246 def /gbreve 247 def /Idot 248 def -/Scedilla 249 def /scedilla 250 def /Cacute 251 def /cacute 252 def -/Ccaron 253 def /ccaron 254 def /dmacron 255 def /overscore 256 def -/middot 257 def /Abreve 258 def /abreve 259 def /Aogonek 260 def -/aogonek 261 def /Dcaron 262 def /dcaron 263 def /Dslash 264 def -/Eogonek 265 def /eogonek 266 def /Ecaron 267 def /ecaron 268 def -/Lacute 269 def /lacute 270 def /Lcaron 271 def /lcaron 272 def -/Ldot 273 def /ldot 274 def /Nacute 275 def /nacute 276 def -/Ncaron 277 def /ncaron 278 def /Odblacute 279 def /odblacute 280 def -/Racute 281 def /racute 282 def /Rcaron 283 def /rcaron 284 def -/Sacute 285 def /sacute 286 def /Tcedilla 287 def /tcedilla 288 def -/Tcaron 289 def /tcaron 290 def /Uring 291 def /uring 292 def -/Udblacute 293 def /udblacute 294 def /Zacute 295 def /zacute 296 def -/Zdot 297 def /zdot 298 def /Gamma 299 def /Theta 300 def -/Phi 301 def /alpha 302 def /delta 303 def /epsilon 304 def -/sigma 305 def /tau 306 def /phi 307 def /underscoredbl 308 def -/exclamdbl 309 def /nsuperior 310 def /peseta 311 def /IJ 312 def -/ij 313 def /napostrophe 314 def /minute 315 def /second 316 def -/afii61248 317 def /afii61289 318 def /H22073 319 def /H18543 320 def -/H18551 321 def /H18533 322 def /openbullet 323 def /Amacron 324 def -/amacron 325 def /Ccircumflex 326 def /ccircumflex 327 def /Cdot 328 def -/cdot 329 def /Emacron 330 def /emacron 331 def /Ebreve 332 def -/ebreve 333 def /Edot 334 def /edot 335 def /Gcircumflex 336 def -/gcircumflex 337 def /Gdot 338 def /gdot 339 def /Gcedilla 340 def -/gcedilla 341 def /Hcircumflex 342 def /hcircumflex 343 def /Hbar 344 def -/hbar 345 def /Itilde 346 def /itilde 347 def /Imacron 348 def -/imacron 349 def /Ibreve 350 def /ibreve 351 def /Iogonek 352 def -/iogonek 353 def /Jcircumflex 354 def /jcircumflex 355 def /Kcedilla 356 def -/kcedilla 357 def /kgreenlandic 358 def /Lcedilla 359 def /lcedilla 360 def -/Ncedilla 361 def /ncedilla 362 def /Eng 363 def /eng 364 def -/Omacron 365 def /omacron 366 def /Obreve 367 def /obreve 368 def -/Rcedilla 369 def /rcedilla 370 def /Scircumflex 371 def /scircumflex 372 def -/Tbar 373 def /tbar 374 def /Utilde 375 def /utilde 376 def -/Umacron 377 def /umacron 378 def /Ubreve 379 def /ubreve 380 def -/Uogonek 381 def /uogonek 382 def /Wcircumflex 383 def /wcircumflex 384 def -/Ycircumflex 385 def /ycircumflex 386 def /longs 387 def /Aringacute 388 def -/aringacute 389 def /AEacute 390 def /aeacute 391 def /Oslashacute 392 def -/oslashacute 393 def /anoteleia 394 def /Wgrave 395 def /wgrave 396 def -/Wacute 397 def /wacute 398 def /Wdieresis 399 def /wdieresis 400 def -/Ygrave 401 def /ygrave 402 def /quotereversed 403 def /radicalex 404 def -/afii08941 405 def /estimated 406 def /oneeighth 407 def /threeeighths 408 def -/fiveeighths 409 def /seveneighths 410 def /commaaccent 411 def /undercommaaccent 412 def -/tonos 413 def /dieresistonos 414 def /Alphatonos 415 def /Epsilontonos 416 def -/Etatonos 417 def /Iotatonos 418 def /Omicrontonos 419 def /Upsilontonos 420 def -/Omegatonos 421 def /iotadieresistonos 422 def /Alpha 423 def /Beta 424 def -/Delta 425 def /Epsilon 426 def /Zeta 427 def /Eta 428 def -/Iota 429 def /Kappa 430 def /Lambda 431 def /Mu 432 def -/Nu 433 def /Xi 434 def /Omicron 435 def /Pi 436 def -/Rho 437 def /Sigma 438 def /Tau 439 def /Upsilon 440 def -/Chi 441 def /Psi 442 def /Omega 443 def /Iotadieresis 444 def -/Upsilondieresis 445 def /alphatonos 446 def /epsilontonos 447 def /etatonos 448 def -/iotatonos 449 def /upsilondieresistonos 450 def /beta 451 def /gamma 452 def -/zeta 453 def /eta 454 def /theta 455 def /iota 456 def -/kappa 457 def /lambda 458 def /mu 459 def /nu 460 def -/xi 461 def /omicron 462 def /rho 463 def /sigma1 464 def -/upsilon 465 def /chi 466 def /psi 467 def /omega 468 def -/iotadieresis 469 def /upsilondieresis 470 def /omicrontonos 471 def /upsilontonos 472 def -/omegatonos 473 def /afii10023 474 def /afii10051 475 def /afii10052 476 def -/afii10053 477 def /afii10054 478 def /afii10055 479 def /afii10056 480 def -/afii10057 481 def /afii10058 482 def /afii10059 483 def /afii10060 484 def -/afii10061 485 def /afii10062 486 def /afii10145 487 def /afii10017 488 def -/afii10018 489 def /afii10019 490 def /afii10020 491 def /afii10021 492 def -/afii10022 493 def /afii10024 494 def /afii10025 495 def /afii10026 496 def -/afii10027 497 def /afii10028 498 def /afii10029 499 def /afii10030 500 def -/afii10031 501 def /afii10032 502 def /afii10033 503 def /afii10034 504 def -/afii10035 505 def /afii10036 506 def /afii10037 507 def /afii10038 508 def -/afii10039 509 def /afii10040 510 def /afii10041 511 def /afii10042 512 def -/afii10043 513 def /afii10044 514 def /afii10045 515 def /afii10046 516 def -/afii10047 517 def /afii10048 518 def /afii10049 519 def /afii10065 520 def -/afii10066 521 def /afii10067 522 def /afii10068 523 def /afii10069 524 def -/afii10070 525 def /afii10072 526 def /afii10073 527 def /afii10074 528 def -/afii10075 529 def /afii10076 530 def /afii10077 531 def /afii10078 532 def -/afii10079 533 def /afii10080 534 def /afii10081 535 def /afii10082 536 def -/afii10083 537 def /afii10084 538 def /afii10085 539 def /afii10086 540 def -/afii10087 541 def /afii10088 542 def /afii10089 543 def /afii10090 544 def -/afii10091 545 def /afii10092 546 def /afii10093 547 def /afii10094 548 def -/afii10095 549 def /afii10096 550 def /afii10097 551 def /afii10071 552 def -/afii10099 553 def /afii10100 554 def /afii10101 555 def /afii10102 556 def -/afii10103 557 def /afii10104 558 def /afii10105 559 def /afii10106 560 def -/afii10107 561 def /afii10108 562 def /afii10109 563 def /afii10110 564 def -/afii10193 565 def /afii10050 566 def /afii10098 567 def /afii00208 568 def -/afii61352 569 def /pi 570 def /onenumerator 571 def /twonumerator 572 def -/threenumerator 573 def /fournumerator 574 def /fivenumerator 575 def /sevennumerator 576 def -/eightnumerator 577 def /DontCompressHTMX 578 def /glyph579 579 def /glyph580 580 def -/glyph581 581 def /Ohorn 582 def /ohorn 583 def /Uhorn 584 def -/uhorn 585 def /hookabovecomb 586 def /dotbelowcomb 587 def /gravecomb 588 def -/acutecomb 589 def /glyph590 590 def /glyph591 591 def /glyph592 592 def -/glyph593 593 def /glyph594 594 def /glyph595 595 def /glyph596 596 def -/glyph597 597 def /glyph598 598 def /glyph599 599 def /glyph600 600 def -/glyph601 601 def /glyph602 602 def /glyph603 603 def /glyph604 604 def -/Adotbelow 605 def /adotbelow 606 def /Ahookabove 607 def /ahookabove 608 def -/Acircumflexacute 609 def /acircumflexacute 610 def /Acircumflexgrave 611 def /acircumflexgrave 612 def -/Acircumflexhookabove 613 def /acircumflexhookabove 614 def /Acircumflextilde 615 def /acircumflextilde 616 def -/Acircumflexdotbelow 617 def /acircumflexdotbelow 618 def /Abreveacute 619 def /abreveacute 620 def -/Abrevegrave 621 def /abrevegrave 622 def /Abrevehookabove 623 def /abrevehookabove 624 def -/Abrevetilde 625 def /abrevetilde 626 def /Abrevedotbelow 627 def /abrevedotbelow 628 def -/Edotbelow 629 def /edotbelow 630 def /Ehookabove 631 def /ehookabove 632 def -/Etilde 633 def /etilde 634 def /Ecircumflexacute 635 def /ecircumflexacute 636 def -/Ecircumflexgrave 637 def /ecircumflexgrave 638 def /Ecircumflexhookabove 639 def /ecircumflexhookabove 640 def -/Ecircumflextilde 641 def /ecircumflextilde 642 def /Ecircumflexdotbelow 643 def /ecircumflexdotbelow 644 def -/Ihookabove 645 def /ihookabove 646 def /Idotbelow 647 def /idotbelow 648 def -/glyph649 649 def /glyph650 650 def /glyph651 651 def /glyph652 652 def -/sheva 653 def /hatafsegol 654 def /hatafpatah 655 def /hatafqamats 656 def -/hiriq 657 def /tsere 658 def /segol 659 def /patah 660 def -/qamats 661 def /holam 662 def /qubuts 663 def /dagesh 664 def -/meteg 665 def /maqaf 666 def /rafe 667 def /paseq 668 def -/shindot 669 def /sindot 670 def /sofpasuq 671 def /alef 672 def -/bet 673 def /gimel 674 def /dalet 675 def /he 676 def -/vav 677 def /zayin 678 def /het 679 def /tet 680 def -/yod 681 def /finalkaf 682 def /kaf 683 def /lamed 684 def -/finalmem 685 def /mem 686 def /finalnun 687 def /nun 688 def -/samekh 689 def /ayin 690 def /finalpe 691 def /pe 692 def -/finaltsadi 693 def /tsadi 694 def /qof 695 def /resh 696 def -/shin 697 def /tav 698 def /doublevav 699 def /vavyod 700 def -/doubleyod 701 def /geresh 702 def /gershayim 703 def /newsheqelsign 704 def -/vavshindot 705 def /finalkafsheva 706 def /finalkafqamats 707 def /lamedholam 708 def -/lamedholamdagesh 709 def /altayin 710 def /shinshindot 711 def /shinsindot 712 def -/shindageshshindot 713 def /shindageshsindot 714 def /alefpatah 715 def /alefqamats 716 def -/alefmapiq 717 def /betdagesh 718 def /gimeldagesh 719 def /daletdagesh 720 def -/hedagesh 721 def /vavdagesh 722 def /zayindagesh 723 def /tetdagesh 724 def -/yoddagesh 725 def /finalkafdagesh 726 def /kafdagesh 727 def /lameddagesh 728 def -/memdagesh 729 def /nundagesh 730 def /samekhdagesh 731 def /finalpedagesh 732 def -/pedagesh 733 def /tsadidagesh 734 def /qofdagesh 735 def /reshdagesh 736 def -/shindagesh 737 def /tavdages 738 def /vavholam 739 def /betrafe 740 def -/kafrafe 741 def /perafe 742 def /aleflamed 743 def /zerowidthnonjoiner 744 def -/zerowidthjoiner 745 def /lefttorightmark 746 def /righttoleftmark 747 def /afii57388 748 def -/afii57403 749 def /afii57407 750 def /afii57409 751 def /afii57440 752 def -/afii57451 753 def /afii57452 754 def /afii57453 755 def /afii57454 756 def -/afii57455 757 def /afii57456 758 def /afii57457 759 def /afii57458 760 def -/afii57392 761 def /afii57393 762 def /afii57394 763 def /afii57395 764 def -/afii57396 765 def /afii57397 766 def /afii57398 767 def /afii57399 768 def -/afii57400 769 def /afii57401 770 def /afii57381 771 def /afii57461 772 def -/afii63167 773 def /afii57459 774 def /afii57543 775 def /afii57534 776 def -/afii57494 777 def /afii62843 778 def /afii62844 779 def /afii62845 780 def -/afii64240 781 def /afii64241 782 def /afii63954 783 def /afii57382 784 def -/afii64242 785 def /afii62881 786 def /afii57504 787 def /afii57369 788 def -/afii57370 789 def /afii57371 790 def /afii57372 791 def /afii57373 792 def -/afii57374 793 def /afii57375 794 def /afii57391 795 def /afii57471 796 def -/afii57460 797 def /afii52258 798 def /afii57506 799 def /afii62958 800 def -/afii62956 801 def /afii52957 802 def /afii57505 803 def /afii62889 804 def -/afii62887 805 def /afii62888 806 def /afii57507 807 def /afii62961 808 def -/afii62959 809 def /afii62960 810 def /afii57508 811 def /afii62962 812 def -/afii57567 813 def /afii62964 814 def /afii52305 815 def /afii52306 816 def -/afii57509 817 def /afii62967 818 def /afii62965 819 def /afii62966 820 def -/afii57555 821 def /afii52364 822 def /afii63753 823 def /afii63754 824 def -/afii63759 825 def /afii63763 826 def /afii63795 827 def /afii62891 828 def -/afii63808 829 def /afii62938 830 def /afii63810 831 def /afii62942 832 def -/afii62947 833 def /afii63813 834 def /afii63823 835 def /afii63824 836 def -/afii63833 837 def /afii63844 838 def /afii62882 839 def /afii62883 840 def -/afii62884 841 def /afii62885 842 def /afii62886 843 def /Odotbelow 844 def -/odotbelow 845 def /Ohookabove 846 def /ohookabove 847 def /Ocircumflexacute 848 def -/ocircumflexacute 849 def /Ocircumflexgrave 850 def /ocircumflexgrave 851 def /Ocircumflexhookabove 852 def -/ocircumflexhookabove 853 def /Ocircumflextilde 854 def /ocircumflextilde 855 def /Ocircumflexdotbelow 856 def -/ocircumflexdotbelow 857 def /Ohornacute 858 def /ohornacute 859 def /Ohorngrave 860 def -/ohorngrave 861 def /Ohornhookabove 862 def /ohornhookabove 863 def /Ohorntilde 864 def -/ohorntilde 865 def /Ohorndotbelow 866 def /ohorndotbelow 867 def /Udotbelow 868 def -/udotbelow 869 def /Uhookabove 870 def /uhookabove 871 def /Uhornacute 872 def -/uhornacute 873 def /Uhorngrave 874 def /uhorngrave 875 def /Uhornhookabove 876 def -/uhornhookabove 877 def /Uhorntilde 878 def /uhorntilde 879 def /Uhorndotbelow 880 def -/uhorndotbelow 881 def /glyph882 882 def /glyph883 883 def /Ydotbelow 884 def -/ydotbelow 885 def /Yhookabove 886 def /yhookabove 887 def /Ytilde 888 def -/ytilde 889 def /dong 890 def /tildecomb 891 def /currency 892 def - -end readonly def -FontName currentdict end definefont pop -%%EndFont -%%EndProlog -mpldict begin -13.5 175.5 translate -585 441 0 0 clipbox -% polygon -1.000 setgray -1.000 setlinewidth -0 setlinejoin -2 setlinecap -[] 0 setdash -0 0 m -0 441 l -585 441 l -585 0 l -closepath -gsave -fill -grestore -stroke -% polygon -0.000 setgray -73.125 44.1 m -73.125 396.9 l -526.5 396.9 l -526.5 44.1 l -closepath -gsave -1.000 setgray -fill -grestore -stroke -% draw_lines -gsave -453.375 352.800 73.125 44.100 clipbox -73.125 341.084 m -76.667 340.708 l -80.209 339.574 l -83.751 337.667 l -87.293 334.958 l -90.835 331.405 l -94.377 326.949 l -97.919 321.506 l -101.461 314.959 l -105.003 307.144 l -108.545 297.819 l -112.087 286.607 l -115.629 272.882 l -119.171 255.463 l -122.713 231.623 l -126.255 191.605 l -129.797 103.027 l -133.339 189.379 l -136.881 202.932 l -140.423 203.284 l -143.965 191.777 l -147.507 147.593 l -151.049 193.483 l -154.591 200.946 l -158.133 199.387 l -161.675 188.957 l -165.217 143.486 l -168.759 180.998 l -172.301 191.170 l -175.843 191.200 l -179.385 183.119 l -182.927 155.818 l -186.469 166.661 l -190.011 181.010 l -193.553 182.971 l -197.095 177.076 l -200.637 157.567 l -204.179 150.322 l -207.721 171.053 l -211.263 175.126 l -214.805 171.229 l -218.347 156.530 l -221.889 128.062 l -225.431 161.185 l -228.973 167.631 l -232.515 165.609 l -236.057 154.358 l -239.599 74.463 l -243.141 151.102 l -246.683 160.365 l -250.225 160.169 l -253.767 151.622 l -257.309 119.107 l -260.851 140.326 l -264.393 153.187 l -267.935 154.839 l -271.477 148.556 l -275.019 126.619 l -278.561 127.980 l -282.103 145.946 l -285.645 149.548 l -289.187 145.259 l -292.729 129.081 l -296.271 111.844 l -299.812 138.465 l -303.354 144.220 l -306.896 141.769 l -310.438 129.466 l -313.980 80.114 l -317.522 130.512 l -321.064 138.774 l -324.606 138.087 l -328.148 128.702 l -331.690 86.924 l -335.232 121.741 l -338.774 133.118 l -342.316 134.191 l -345.858 127.176 l -349.400 101.638 l -352.942 111.541 l -356.484 127.140 l -360.026 130.041 l -363.568 125.064 l -367.110 106.776 l -370.652 98.551 l -374.194 120.692 l -377.736 125.577 l -381.278 122.435 l -384.820 108.642 l -388.362 78.089 l -391.904 113.570 l -395.446 120.713 l -398.988 119.291 l -402.530 108.713 l -406.072 43.008 l -409.614 105.462 l -413.156 115.325 l -416.698 115.577 l -420.240 107.501 l -423.782 76.568 l -427.324 95.836 l -430.866 109.233 l -434.408 111.171 l -437.950 105.155 l -441.492 83.904 l -445.034 83.647 l -448.576 102.154 l -452.118 105.845 l -455.660 101.582 l -459.202 85.611 l -462.744 66.167 l -466.286 93.605 l -469.828 99.169 l -473.370 96.397 l -476.912 83.814 l -480.454 27.509 l -483.996 82.648 l -487.538 90.217 l -491.080 88.573 l -494.622 78.102 l -498.164 37.173 l -501.706 66.931 l -505.248 76.324 l -508.790 74.675 l -512.332 64.142 l -515.874 34.431 l -519.416 35.180 l -522.958 37.945 l -stroke -grestore -% draw_lines -0 setlinecap -[6 6] 0 setdash -gsave -453.375 352.800 73.125 44.100 clipbox -73.125 344.638 m -76.667 344.021 l -80.209 342.148 l -83.751 338.946 l -87.293 334.276 l -90.835 327.903 l -94.377 319.427 l -97.919 308.120 l -101.461 292.475 l -105.003 268.454 l -108.545 213.072 l -112.087 218.519 l -115.629 259.152 l -119.171 273.925 l -122.713 280.520 l -126.255 282.309 l -129.797 280.332 l -133.339 274.683 l -136.881 264.621 l -140.423 247.681 l -143.965 212.929 l -147.507 184.774 l -151.049 218.234 l -154.591 243.484 l -158.133 254.844 l -161.675 259.959 l -165.217 260.773 l -168.759 257.793 l -172.301 250.665 l -175.843 237.757 l -179.385 212.685 l -182.927 178.994 l -186.469 -424.877 l -190.011 217.746 l -193.553 235.408 l -197.095 243.801 l -200.637 247.028 l -204.179 246.206 l -207.721 241.360 l -211.263 231.429 l -214.805 212.332 l -218.347 138.495 l -221.889 185.787 l -225.431 183.612 l -228.973 217.038 l -232.515 229.873 l -236.057 235.734 l -239.599 237.005 l -243.141 234.198 l -246.683 226.722 l -250.225 211.859 l -253.767 169.476 l -257.309 186.593 l -260.851 173.823 l -264.393 194.732 l -267.935 216.079 l -271.477 225.369 l -275.019 228.930 l -278.561 228.116 l -282.103 222.822 l -285.645 211.246 l -289.187 183.443 l -292.729 181.050 l -296.271 187.513 l -299.812 178.164 l -303.354 199.915 l -306.896 214.825 l -310.438 221.217 l -313.980 222.524 l -317.522 219.301 l -321.064 210.468 l -324.606 190.157 l -328.148 169.944 l -331.690 189.675 l -335.232 181.582 l -338.774 172.547 l -342.316 202.663 l -345.858 213.205 l -349.400 216.995 l -352.942 215.878 l -356.484 209.487 l -360.026 194.151 l -363.568 141.332 l -367.110 188.290 l -370.652 190.018 l -374.194 168.185 l -377.736 185.194 l -381.278 203.994 l -384.820 211.108 l -388.362 212.316 l -391.904 208.247 l -395.446 196.681 l -398.988 154.875 l -402.530 184.658 l -406.072 192.833 l -409.614 186.663 l -413.156 -460.889 l -416.698 191.640 l -420.240 204.277 l -423.782 208.351 l -427.324 206.663 l -430.866 198.243 l -434.408 172.764 l -437.950 178.651 l -441.492 193.308 l -445.034 193.407 l -448.576 179.767 l -452.118 167.615 l -455.660 195.351 l -459.202 203.595 l -462.744 204.597 l -466.286 199.048 l -469.828 181.359 l -473.370 168.699 l -476.912 192.336 l -480.454 196.765 l -483.996 191.640 l -487.538 166.317 l -491.080 180.819 l -494.622 197.324 l -498.164 201.811 l -501.706 199.150 l -505.248 186.669 l -508.790 146.473 l -512.332 190.158 l -515.874 198.473 l -519.416 197.844 l -522.958 187.711 l -stroke -grestore -% draw_lines -[3 5 1 5] 0 setdash -gsave -453.375 352.800 73.125 44.100 clipbox -73.125 344.646 m -76.667 344.163 l -80.209 342.697 l -83.751 340.206 l -87.293 336.608 l -90.835 331.765 l -94.377 325.450 l -97.919 317.263 l -101.461 306.406 l -105.003 290.855 l -108.545 260.984 l -112.087 257.910 l -115.629 270.113 l -119.171 268.975 l -122.713 260.468 l -126.255 240.233 l -129.797 221.580 l -133.339 244.142 l -136.881 246.939 l -140.423 241.790 l -143.965 226.836 l -147.507 180.268 l -151.049 224.403 l -154.591 230.521 l -158.133 227.898 l -161.675 216.607 l -165.217 170.426 l -168.759 207.344 l -172.301 217.011 l -175.843 216.608 l -179.385 208.152 l -182.927 180.524 l -186.469 191.080 l -190.011 205.174 l -193.553 206.908 l -197.095 200.811 l -200.637 181.119 l -204.179 173.710 l -207.721 194.292 l -211.263 198.229 l -214.805 194.208 l -218.347 179.396 l -221.889 150.824 l -225.431 183.851 l -228.973 190.209 l -232.515 188.106 l -236.057 176.779 l -239.599 96.814 l -243.141 173.388 l -246.683 182.589 l -250.225 182.337 l -253.767 173.737 l -257.309 141.172 l -260.851 162.345 l -264.393 175.162 l -267.935 176.773 l -271.477 170.451 l -275.019 148.477 l -278.561 149.804 l -282.103 167.738 l -285.645 171.309 l -289.187 166.991 l -292.729 150.785 l -296.271 133.522 l -299.812 160.118 l -303.354 165.850 l -306.896 163.377 l -310.438 151.052 l -313.980 101.679 l -317.522 152.059 l -321.064 160.303 l -324.606 159.598 l -328.148 150.196 l -331.690 108.402 l -335.232 143.204 l -338.774 154.567 l -342.316 155.626 l -345.858 148.598 l -349.400 123.046 l -352.942 132.938 l -356.484 148.525 l -360.026 151.416 l -363.568 146.427 l -367.110 128.129 l -370.652 119.895 l -374.194 142.026 l -377.736 146.903 l -381.278 143.752 l -384.820 129.951 l -388.362 99.390 l -391.904 134.864 l -395.446 141.999 l -398.988 140.570 l -402.530 129.986 l -406.072 64.275 l -409.614 126.723 l -413.156 136.580 l -416.698 136.826 l -420.240 128.745 l -423.782 97.807 l -427.324 117.071 l -430.866 130.463 l -434.408 132.397 l -437.950 126.376 l -441.492 105.122 l -445.034 104.861 l -448.576 123.364 l -452.118 127.052 l -455.660 122.786 l -459.202 106.813 l -462.744 87.365 l -466.286 114.801 l -469.828 120.363 l -473.370 117.588 l -476.912 105.003 l -480.454 48.696 l -483.996 103.833 l -487.538 111.400 l -491.080 109.755 l -494.622 99.282 l -498.164 58.352 l -501.706 88.110 l -505.248 97.502 l -508.790 95.852 l -512.332 85.318 l -515.874 55.606 l -519.416 56.356 l -522.958 59.120 l -stroke -grestore -% draw_lines -[1 3] 0 setdash -gsave -453.375 352.800 73.125 44.100 clipbox -73.125 346.280 m -76.667 345.676 l -80.209 343.845 l -83.751 340.736 l -87.293 336.248 l -90.835 330.224 l -94.377 322.407 l -97.919 312.371 l -101.461 299.341 l -105.003 281.601 l -108.545 253.253 l -112.087 220.282 l -115.629 233.441 l -119.171 220.121 l -122.713 198.594 l -126.255 213.622 l -129.797 232.741 l -133.339 242.085 l -136.881 243.804 l -140.423 237.025 l -143.965 203.960 l -147.507 230.388 l -151.049 244.073 l -154.591 246.690 l -158.133 241.191 l -161.675 219.125 l -165.217 223.903 l -168.759 241.739 l -172.301 245.662 l -175.843 241.477 l -179.385 224.009 l -182.927 215.555 l -186.469 238.476 l -190.011 243.766 l -193.553 240.795 l -197.095 226.371 l -200.637 204.635 l -204.179 234.918 l -207.721 241.638 l -211.263 239.805 l -214.805 227.701 l -218.347 187.148 l -221.889 231.207 l -225.431 239.460 l -228.973 238.716 l -232.515 228.509 l -236.057 142.756 l -239.599 227.342 l -243.141 237.284 l -246.683 237.602 l -250.225 229.015 l -253.767 188.027 l -257.309 223.261 l -260.851 235.117 l -264.393 236.489 l -267.935 229.330 l -271.477 199.520 l -275.019 218.852 l -278.561 232.949 l -282.103 235.386 l -285.645 229.515 l -289.187 205.946 l -292.729 213.941 l -296.271 230.761 l -299.812 234.290 l -303.354 229.607 l -306.896 210.254 l -310.438 208.235 l -313.980 228.529 l -317.522 233.195 l -321.064 229.626 l -324.606 213.410 l -328.148 201.185 l -331.690 226.226 l -335.232 232.097 l -338.774 229.588 l -342.316 215.852 l -345.858 191.524 l -349.400 223.818 l -352.942 230.985 l -356.484 229.500 l -360.026 217.812 l -363.568 174.865 l -367.110 221.263 l -370.652 229.851 l -374.194 229.371 l -377.736 219.429 l -381.278 138.835 l -384.820 218.509 l -388.362 228.686 l -391.904 229.202 l -395.446 220.789 l -398.988 179.721 l -402.530 215.482 l -406.072 227.478 l -409.614 228.996 l -413.156 221.953 l -416.698 191.902 l -420.240 212.081 l -423.782 226.215 l -427.324 228.754 l -430.866 222.960 l -434.408 199.153 l -437.950 208.147 l -441.492 224.884 l -445.034 228.476 l -448.576 223.841 l -452.118 204.278 l -455.660 203.420 l -459.202 223.466 l -462.744 228.160 l -466.286 224.618 l -469.828 208.221 l -473.370 197.415 l -476.912 221.941 l -480.454 227.805 l -483.996 225.308 l -487.538 211.417 l -491.080 189.040 l -494.622 220.282 l -498.164 227.408 l -501.706 225.922 l -505.248 214.102 l -508.790 174.825 l -512.332 218.457 l -515.874 226.966 l -519.416 226.472 l -522.958 216.418 l -stroke -grestore -% text -/Verdana findfont -18.000 scalefont -setfont -119.312 403.956 m -0 4 rmoveto -(Smoothing window in frequency-domain) show -% text -/Verdana findfont -14.000 scalefont -setfont -62.469 30.1 m -(0.0) show -% line -0.500 setlinewidth -[] 0 setdash -163.800 44.100 m 163.800 48.100 l -stroke -% line -163.800 392.900 m 163.800 396.900 l -stroke -% text -153.175 30.1 m -(0.1) show -% line -254.475 44.100 m 254.475 48.100 l -stroke -% line -254.475 392.900 m 254.475 396.900 l -stroke -% text -243.85 30.1 m -(0.2) show -% line -345.150 44.100 m 345.150 48.100 l -stroke -% line -345.150 392.900 m 345.150 396.900 l -stroke -% text -334.994 30.1 m -(0.3) show -% line -435.825 44.100 m 435.825 48.100 l -stroke -% line -435.825 392.900 m 435.825 396.900 l -stroke -% text -424.825 30.1 m -(0.4) show -% text -515.844 30.1 m -(0.5) show -% text -221.875 11.1 m -0 3 rmoveto -(Normalized Frequency) show -% text -37.062 39.1 m -(-100) show -% line -73.125 91.140 m 77.125 91.140 l -stroke -% line -522.500 91.140 m 526.500 91.140 l -stroke -% text -47.062 86.14 m -(-80) show -% line -73.125 138.180 m 77.125 138.180 l -stroke -% line -522.500 138.180 m 526.500 138.180 l -stroke -% text -47.062 133.18 m -(-60) show -% line -73.125 185.220 m 77.125 185.220 l -stroke -% line -522.500 185.220 m 526.500 185.220 l -stroke -% text -47.062 180.22 m -(-40) show -% line -73.125 232.260 m 77.125 232.260 l -stroke -% line -522.500 232.260 m 526.500 232.260 l -stroke -% text -47.062 227.26 m -(-20) show -% line -73.125 279.300 m 77.125 279.300 l -stroke -% line -522.500 279.300 m 526.500 279.300 l -stroke -% text -61.812 274.3 m -(0) show -% line -73.125 326.340 m 77.125 326.340 l -stroke -% line -522.500 326.340 m 526.500 326.340 l -stroke -% text -53.062 321.34 m -(20) show -% line -73.125 373.380 m 77.125 373.380 l -stroke -% line -522.500 373.380 m 526.500 373.380 l -stroke -% text -52.938 368.38 m -(40) show -% text -32.062 168.461 m -gsave -90 rotate -0 3 rmoveto -(Magnitude \(dB\)) show -grestore -% polygon -1.000 setlinewidth -2 setlinecap -346.389 279.264 m -346.389 389.844 l -517.433 389.844 l -517.433 279.264 l -closepath -gsave -1.000 setgray -fill -grestore -stroke -% draw_lines -362.443 371.629 m -369.999 371.629 l -377.555 371.629 l -385.111 371.629 l -stroke -% draw_lines -0 setlinecap -[6 6] 0 setdash -362.443 349.712 m -369.999 349.712 l -377.555 349.712 l -385.111 349.712 l -stroke -% draw_lines -[3 5 1 5] 0 setdash -362.443 325.795 m -369.999 325.795 l -377.555 325.795 l -385.111 325.795 l -stroke -% draw_lines -[1 3] 0 setdash -362.443 299.479 m -369.999 299.479 l -377.555 299.479 l -385.111 299.479 l -stroke -% text -/Verdana findfont -24.000 scalefont -setfont -394.179 362.629 m -(Blackman) show -% text -394.179 340.712 m -(Bartlett) show -% text -394.179 314.795 m -0 5 rmoveto -(Hanning) show -% text -394.179 288.479 m -0 5 rmoveto -(Hamming) show - -end -showpage diff --git a/numpy/doc/numpybook/Figures/hierarchy.dia b/numpy/doc/numpybook/Figures/hierarchy.dia Binary files differdeleted file mode 100644 index 65379b880..000000000 --- a/numpy/doc/numpybook/Figures/hierarchy.dia +++ /dev/null diff --git a/numpy/doc/numpybook/Figures/hierarchy.eps b/numpy/doc/numpybook/Figures/hierarchy.eps deleted file mode 100644 index f7538c764..000000000 --- a/numpy/doc/numpybook/Figures/hierarchy.eps +++ /dev/null @@ -1,5596 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: hierarchy.dia -%%Creator: Dia v0.94 -%%CreationDate: Wed Jan 4 16:44:07 2006 -%%For: oliphant -%%Orientation: Portrait -%%Magnification: 1.0000 -%%BoundingBox: 0 0 743 584 -%%BeginSetup -%%EndSetup -%%EndComments -%%BeginProlog -[ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright -/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one -/two /three /four /five /six /seven /eight /nine /colon /semicolon -/less /equal /greater /question /at /A /B /C /D /E -/F /G /H /I /J /K /L /M /N /O -/P /Q /R /S /T /U /V /W /X /Y -/Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c -/d /e /f /g /h /i /j /k /l /m -/n /o /p /q /r /s /t /u /v /w -/x /y /z /braceleft /bar /braceright /asciitilde /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef -/space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright -/ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior -/acute /mu /paragraph /periodcentered /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf -/threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla -/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde -/Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex -/Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring -/ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis -/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave -/uacute /ucircumflex /udieresis /yacute /thorn /ydieresis] /isolatin1encoding exch def -/cp {closepath} bind def -/c {curveto} bind def -/f {fill} bind def -/a {arc} bind def -/ef {eofill} bind def -/ex {exch} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth pop} bind def -/tr {translate} bind def - -/ellipsedict 8 dict def -ellipsedict /mtrx matrix put -/ellipse -{ ellipsedict begin - /endangle exch def - /startangle exch def - /yrad exch def - /xrad exch def - /y exch def - /x exch def /savematrix mtrx currentmatrix def - x y tr xrad yrad sc - 0 0 1 startangle endangle arc - savematrix setmatrix - end -} def - -/mergeprocs { -dup length -3 -1 roll -dup -length -dup -5 1 roll -3 -1 roll -add -array cvx -dup -3 -1 roll -0 exch -putinterval -dup -4 2 roll -putinterval -} bind def -/dpi_x 300 def -/dpi_y 300 def -/conicto { - /to_y exch def - /to_x exch def - /conic_cntrl_y exch def - /conic_cntrl_x exch def - currentpoint - /p0_y exch def - /p0_x exch def - /p1_x p0_x conic_cntrl_x p0_x sub 2 3 div mul add def - /p1_y p0_y conic_cntrl_y p0_y sub 2 3 div mul add def - /p2_x p1_x to_x p0_x sub 1 3 div mul add def - /p2_y p1_y to_y p0_y sub 1 3 div mul add def - p1_x p1_y p2_x p2_y to_x to_y curveto -} bind def -/start_ol { gsave 1.1 dpi_x div dup scale} bind def -/end_ol { closepath fill grestore } bind def -28.346000 -28.346000 scale --1.702375 -22.793875 translate -%%EndProlog - - -0.095250 slw -[1.000000] 0 sd -[0.127000] 0 sd -0 slj -0.000000 0.000000 0.000000 srgb -n 11.500000 2.250000 m 11.500000 3.750000 l 14.357500 3.750000 l 14.357500 2.250000 l cp s -gsave 12.000000 3.250000 translate 0.035278 -0.035278 scale -start_ol -204 -201 moveto -583 -259 lineto -607 -441 714 -525 conicto -859 -637 1109 -637 conicto -1379 -637 1526 -526 conicto -1673 -415 1724 -215 conicto -1755 -93 1755 298 conicto -1500 -3 1120 -3 conicto -646 -3 387 342 conicto -128 687 128 1169 conicto -128 1501 247 1781 conicto -366 2062 591 2215 conicto -817 2368 1122 2368 conicto -1528 2368 1792 2038 conicto -1792 2304 lineto -2176 2304 lineto -2176 297 lineto -2176 -245 2066 -471 conicto -1956 -697 1717 -828 conicto -1479 -960 1130 -960 conicto -714 -960 459 -771 conicto -204 -582 204 -201 conicto -527 1198 moveto -527 740 707 530 conicto -887 320 1158 320 conicto -1427 320 1609 529 conicto -1792 738 1792 1185 conicto -1792 1611 1604 1828 conicto -1417 2045 1151 2045 conicto -891 2045 709 1831 conicto -527 1618 527 1198 conicto -end_ol grestore -gsave 12.330200 3.250000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 12.660400 3.250000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 12.990600 3.250000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 13.320800 3.250000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 2304 lineto -576 2304 lineto -576 1986 lineto -709 2209 822 2288 conicto -936 2368 1072 2368 conicto -1268 2368 1471 2237 conicto -1337 1898 lineto -1195 1984 1053 1984 conicto -925 1984 823 1905 conicto -722 1827 679 1689 conicto -614 1477 614 1226 conicto -614 0 lineto -256 0 lineto -end_ol grestore -gsave 13.507067 3.250000 translate 0.035278 -0.035278 scale -start_ol -320 2752 moveto -320 3200 lineto -719 3200 lineto -719 2752 lineto -320 2752 lineto -320 0 moveto -320 2304 lineto -719 2304 lineto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 13.642533 3.250000 translate 0.035278 -0.035278 scale -start_ol -1806 840 moveto -2188 790 lineto -2125 389 1867 162 conicto -1610 -64 1234 -64 conicto -764 -64 478 248 conicto -192 560 192 1143 conicto -192 1520 315 1802 conicto -438 2085 689 2226 conicto -941 2368 1236 2368 conicto -1610 2368 1847 2176 conicto -2084 1985 2151 1633 conicto -1774 1573 lineto -1720 1808 1583 1926 conicto -1446 2045 1251 2045 conicto -958 2045 774 1831 conicto -591 1617 591 1155 conicto -591 685 768 472 conicto -945 259 1230 259 conicto -1458 259 1611 401 conicto -1765 544 1806 840 conicto -end_ol grestore -0.095250 slw -[0.127000] 0 sd -[0.127000] 0 sd -0 slj -n 12.500000 6.000000 m 12.500000 7.500000 l 15.357500 7.500000 l 15.357500 6.000000 l cp s -gsave 13.000000 7.000000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 13.330200 7.000000 translate 0.035278 -0.035278 scale -start_ol -1792 0 moveto -1792 314 lineto -1521 -64 1053 -64 conicto -847 -64 668 11 conicto -489 87 402 201 conicto -316 316 280 490 conicto -256 606 256 859 conicto -256 2304 lineto -655 2304 lineto -655 1010 lineto -655 701 679 593 conicto -717 437 837 348 conicto -957 259 1135 259 conicto -1312 259 1467 350 conicto -1622 441 1686 598 conicto -1751 755 1751 1054 conicto -1751 2304 lineto -2112 2304 lineto -2112 0 lineto -1792 0 lineto -end_ol grestore -gsave 13.651933 7.000000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2008 lineto -749 2165 930 2266 conicto -1112 2368 1344 2368 conicto -1602 2368 1767 2263 conicto -1932 2159 2001 1979 conicto -2280 2368 2728 2368 conicto -3079 2368 3267 2177 conicto -3456 1986 3456 1589 conicto -3456 0 lineto -3057 0 lineto -3057 1471 lineto -3057 1709 3018 1813 conicto -2979 1918 2877 1981 conicto -2775 2045 2638 2045 conicto -2390 2045 2226 1881 conicto -2063 1717 2063 1357 conicto -2063 0 lineto -1664 0 lineto -1664 1517 lineto -1664 1781 1568 1913 conicto -1472 2045 1254 2045 conicto -1088 2045 947 1957 conicto -807 1869 744 1699 conicto -681 1530 681 1212 conicto -681 0 lineto -320 0 lineto -end_ol grestore -gsave 14.143000 7.000000 translate 0.035278 -0.035278 scale -start_ol -719 0 moveto -320 0 lineto -320 3200 lineto -747 3200 lineto -747 2056 lineto -984 2368 1357 2368 conicto -1563 2368 1747 2281 conicto -1931 2194 2050 2038 conicto -2169 1882 2236 1660 conicto -2304 1438 2304 1186 conicto -2304 588 2019 262 conicto -1735 -64 1337 -64 conicto -942 -64 719 279 conicto -719 0 lineto -719 1170 moveto -719 751 827 564 conicto -1003 259 1304 259 conicto -1549 259 1727 484 conicto -1905 709 1905 1155 conicto -1905 1610 1734 1827 conicto -1563 2045 1320 2045 conicto -1075 2045 897 1820 conicto -719 1595 719 1170 conicto -end_ol grestore -gsave 14.473200 7.000000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 14.803400 7.000000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 2304 lineto -576 2304 lineto -576 1986 lineto -709 2209 822 2288 conicto -936 2368 1072 2368 conicto -1268 2368 1471 2237 conicto -1337 1898 lineto -1195 1984 1053 1984 conicto -925 1984 823 1905 conicto -722 1827 679 1689 conicto -614 1477 614 1226 conicto -614 0 lineto -256 0 lineto -end_ol grestore -0.095250 slw -[0.127000] 0 sd -[0.127000] 0 sd -0 slj -n 22.000000 6.000000 m 22.000000 7.500000 l 24.765000 7.500000 l 24.765000 6.000000 l cp s -0.095250 slw -[0.127000] 0 sd -[0.127000] 0 sd -0 slj -n 21.500000 9.500000 m 21.500000 11.000000 l 24.357500 11.000000 l 24.357500 9.500000 l cp s -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 25.000000 9.500000 m 25.000000 10.943875 l 27.857500 10.943875 l 27.857500 9.500000 l cp s -0.095250 slw -[1.000000] 0 sd -[0.127000] 0 sd -0 slj -n 6.000000 9.500000 m 6.000000 11.000000 l 8.750000 11.000000 l 8.750000 9.500000 l cp s -0.095250 slw -[0.127000] 0 sd -[0.127000] 0 sd -0 slj -n 12.750000 11.500000 m 12.750000 13.000000 l 15.607500 13.000000 l 15.607500 11.500000 l cp s -0.095250 slw -[0.127000] 0 sd -[0.127000] 0 sd -0 slj -n 16.700000 11.500000 m 16.700000 13.052375 l 21.227375 13.052375 l 21.227375 11.500000 l cp s -gsave 22.500000 7.000000 translate 0.035278 -0.035278 scale -start_ol -384 0 moveto -384 1984 lineto -64 1984 lineto -64 2307 lineto -384 2307 lineto -384 2552 lineto -384 2785 425 2889 conicto -481 3029 622 3116 conicto -764 3203 1018 3203 conicto -1182 3203 1380 3168 conicto -1322 2858 lineto -1201 2880 1096 2880 conicto -925 2880 854 2804 conicto -783 2728 783 2520 conicto -783 2307 lineto -1216 2307 lineto -1216 1984 lineto -783 1984 lineto -783 0 lineto -384 0 lineto -end_ol grestore -gsave 22.660867 7.000000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 3200 lineto -655 3200 lineto -655 0 lineto -256 0 lineto -end_ol grestore -gsave 22.787867 7.000000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 23.118067 7.000000 translate 0.035278 -0.035278 scale -start_ol -32 0 moveto -870 1198 lineto -95 2304 lineto -581 2304 lineto -932 1763 lineto -1032 1610 1092 1506 conicto -1187 1649 1267 1759 conicto -1653 2304 lineto -2117 2304 lineto -1325 1219 lineto -2178 0 lineto -1701 0 lineto -1230 716 lineto -1105 909 lineto -503 0 lineto -32 0 lineto -end_ol grestore -gsave 23.414400 7.000000 translate 0.035278 -0.035278 scale -start_ol -320 2752 moveto -320 3200 lineto -719 3200 lineto -719 2752 lineto -320 2752 lineto -320 0 moveto -320 2304 lineto -719 2304 lineto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 23.549867 7.000000 translate 0.035278 -0.035278 scale -start_ol -719 0 moveto -320 0 lineto -320 3200 lineto -747 3200 lineto -747 2056 lineto -984 2368 1357 2368 conicto -1563 2368 1747 2281 conicto -1931 2194 2050 2038 conicto -2169 1882 2236 1660 conicto -2304 1438 2304 1186 conicto -2304 588 2019 262 conicto -1735 -64 1337 -64 conicto -942 -64 719 279 conicto -719 0 lineto -719 1170 moveto -719 751 827 564 conicto -1003 259 1304 259 conicto -1549 259 1727 484 conicto -1905 709 1905 1155 conicto -1905 1610 1734 1827 conicto -1563 2045 1320 2045 conicto -1075 2045 897 1820 conicto -719 1595 719 1170 conicto -end_ol grestore -gsave 23.880067 7.000000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 3200 lineto -655 3200 lineto -655 0 lineto -256 0 lineto -end_ol grestore -gsave 24.007067 7.000000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 6.500000 10.500000 translate 0.035278 -0.035278 scale -start_ol -320 2752 moveto -320 3200 lineto -719 3200 lineto -719 2752 lineto -320 2752 lineto -320 0 moveto -320 2304 lineto -719 2304 lineto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 6.635467 10.500000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 6.965667 10.500000 translate 0.035278 -0.035278 scale -start_ol -1152 399 moveto -1209 37 lineto -1034 0 895 0 conicto -670 0 545 71 conicto -421 142 370 257 conicto -320 373 320 724 conicto -320 2045 lineto -64 2045 lineto -64 2368 lineto -320 2368 lineto -320 2942 lineto -719 3177 lineto -719 2368 lineto -1152 2368 lineto -1152 2045 lineto -719 2045 lineto -719 702 lineto -719 535 742 487 conicto -765 440 816 412 conicto -868 384 963 384 conicto -1035 384 1152 399 conicto -end_ol grestore -gsave 7.126533 10.500000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 7.456733 10.500000 translate 0.035278 -0.035278 scale -start_ol -204 -201 moveto -583 -259 lineto -607 -441 714 -525 conicto -859 -637 1109 -637 conicto -1379 -637 1526 -526 conicto -1673 -415 1724 -215 conicto -1755 -93 1755 298 conicto -1500 -3 1120 -3 conicto -646 -3 387 342 conicto -128 687 128 1169 conicto -128 1501 247 1781 conicto -366 2062 591 2215 conicto -817 2368 1122 2368 conicto -1528 2368 1792 2038 conicto -1792 2304 lineto -2176 2304 lineto -2176 297 lineto -2176 -245 2066 -471 conicto -1956 -697 1717 -828 conicto -1479 -960 1130 -960 conicto -714 -960 459 -771 conicto -204 -582 204 -201 conicto -527 1198 moveto -527 740 707 530 conicto -887 320 1158 320 conicto -1427 320 1609 529 conicto -1792 738 1792 1185 conicto -1792 1611 1604 1828 conicto -1417 2045 1151 2045 conicto -891 2045 709 1831 conicto -527 1618 527 1198 conicto -end_ol grestore -gsave 7.786933 10.500000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 8.117133 10.500000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 2304 lineto -576 2304 lineto -576 1986 lineto -709 2209 822 2288 conicto -936 2368 1072 2368 conicto -1268 2368 1471 2237 conicto -1337 1898 lineto -1195 1984 1053 1984 conicto -925 1984 823 1905 conicto -722 1827 679 1689 conicto -614 1477 614 1226 conicto -614 0 lineto -256 0 lineto -end_ol grestore -gsave 13.250000 12.500000 translate 0.035278 -0.035278 scale -start_ol -423 0 moveto -423 2048 lineto -64 2048 lineto -64 2379 lineto -423 2379 lineto -423 2644 lineto -423 2894 465 3003 conicto -522 3148 668 3238 conicto -814 3328 1076 3328 conicto -1244 3328 1448 3292 conicto -1389 2974 lineto -1265 2997 1157 2997 conicto -980 2997 906 2915 conicto -832 2833 832 2608 conicto -832 2379 lineto -1280 2379 lineto -1280 2048 lineto -832 2048 lineto -832 0 lineto -423 0 lineto -end_ol grestore -gsave 13.419333 12.500000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 3264 lineto -729 3264 lineto -729 0 lineto -320 0 lineto -end_ol grestore -gsave 13.554800 12.500000 translate 0.035278 -0.035278 scale -start_ol -128 1184 moveto -128 1847 491 2166 conicto -794 2432 1230 2432 conicto -1714 2432 2021 2109 conicto -2329 1786 2329 1218 conicto -2329 757 2193 492 conicto -2057 228 1797 82 conicto -1537 -64 1230 -64 conicto -737 -64 432 258 conicto -128 580 128 1184 conicto -537 1185 moveto -537 724 734 495 conicto -931 267 1230 267 conicto -1526 267 1723 497 conicto -1920 727 1920 1198 conicto -1920 1643 1722 1872 conicto -1524 2101 1230 2101 conicto -931 2101 734 1873 conicto -537 1646 537 1185 conicto -end_ol grestore -gsave 13.885000 12.500000 translate 0.035278 -0.035278 scale -start_ol -1865 298 moveto -1640 105 1435 20 conicto -1230 -64 995 -64 conicto -608 -64 400 129 conicto -192 323 192 624 conicto -192 801 269 946 conicto -347 1091 472 1179 conicto -597 1268 754 1314 conicto -869 1345 1109 1374 conicto -1599 1432 1831 1513 conicto -1831 1596 1831 1618 conicto -1831 1864 1716 1964 conicto -1562 2101 1256 2101 conicto -971 2101 835 2001 conicto -700 1902 635 1649 conicto -258 1703 lineto -311 1955 434 2110 conicto -557 2265 788 2348 conicto -1020 2432 1325 2432 conicto -1628 2432 1817 2360 conicto -2006 2289 2095 2181 conicto -2185 2073 2220 1908 conicto -2240 1806 2240 1537 conicto -2240 1001 lineto -2240 439 2265 289 conicto -2291 139 2366 0 conicto -1946 0 lineto -1883 127 1865 298 conicto -1831 1197 moveto -1611 1108 1170 1045 conicto -920 1010 817 965 conicto -714 921 657 834 conicto -601 748 601 643 conicto -601 482 723 374 conicto -846 267 1082 267 conicto -1316 267 1498 369 conicto -1681 471 1766 648 conicto -1831 783 1831 1050 conicto -1831 1197 lineto -end_ol grestore -gsave 14.223667 12.500000 translate 0.035278 -0.035278 scale -start_ol -1152 400 moveto -1209 37 lineto -1042 0 909 0 conicto -694 0 575 70 conicto -456 141 407 257 conicto -359 373 359 735 conicto -359 2101 lineto -64 2101 lineto -64 2432 lineto -359 2432 lineto -359 3021 lineto -768 3263 lineto -768 2432 lineto -1152 2432 lineto -1152 2101 lineto -768 2101 lineto -768 713 lineto -768 541 788 491 conicto -808 442 853 413 conicto -899 384 984 384 conicto -1048 384 1152 400 conicto -end_ol grestore -gsave 14.384533 12.500000 translate 0.035278 -0.035278 scale -start_ol -320 2816 moveto -320 3264 lineto -729 3264 lineto -729 2816 lineto -320 2816 lineto -320 0 moveto -320 2368 lineto -729 2368 lineto -729 0 lineto -320 0 lineto -end_ol grestore -gsave 14.520000 12.500000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2368 lineto -704 2368 lineto -704 2058 lineto -958 2432 1443 2432 conicto -1654 2432 1831 2354 conicto -2008 2277 2095 2151 conicto -2183 2026 2218 1854 conicto -2240 1742 2240 1462 conicto -2240 0 lineto -1831 0 lineto -1831 1459 lineto -1831 1708 1785 1831 conicto -1740 1955 1624 2028 conicto -1508 2101 1353 2101 conicto -1105 2101 924 1936 conicto -744 1771 744 1310 conicto -744 0 lineto -320 0 lineto -end_ol grestore -gsave 14.858667 12.500000 translate 0.035278 -0.035278 scale -start_ol -183 -196 moveto -594 -254 lineto -618 -435 726 -517 conicto -872 -629 1124 -629 conicto -1396 -629 1543 -518 conicto -1691 -407 1743 -206 conicto -1773 -83 1773 309 conicto -1516 0 1131 0 conicto -653 0 390 354 conicto -128 708 128 1202 conicto -128 1543 248 1830 conicto -368 2118 596 2275 conicto -825 2432 1134 2432 conicto -1545 2432 1811 2094 conicto -1811 2368 lineto -2176 2368 lineto -2176 321 lineto -2176 -231 2064 -461 conicto -1953 -692 1711 -826 conicto -1470 -960 1117 -960 conicto -698 -960 440 -769 conicto -183 -579 183 -196 conicto -537 1231 moveto -537 762 718 546 conicto -900 331 1174 331 conicto -1444 331 1627 545 conicto -1811 759 1811 1218 conicto -1811 1656 1622 1878 conicto -1433 2101 1167 2101 conicto -905 2101 721 1882 conicto -537 1663 537 1231 conicto -end_ol grestore -gsave 16.950000 12.500000 translate 0.035278 -0.035278 scale -start_ol -1806 840 moveto -2188 790 lineto -2125 389 1867 162 conicto -1610 -64 1234 -64 conicto -764 -64 478 248 conicto -192 560 192 1143 conicto -192 1520 315 1802 conicto -438 2085 689 2226 conicto -941 2368 1236 2368 conicto -1610 2368 1847 2176 conicto -2084 1985 2151 1633 conicto -1774 1573 lineto -1720 1808 1583 1926 conicto -1446 2045 1251 2045 conicto -958 2045 774 1831 conicto -591 1617 591 1155 conicto -591 685 768 472 conicto -945 259 1230 259 conicto -1458 259 1611 401 conicto -1765 544 1806 840 conicto -end_ol grestore -gsave 17.246333 12.500000 translate 0.035278 -0.035278 scale -start_ol -128 1152 moveto -128 1798 479 2109 conicto -771 2368 1192 2368 conicto -1661 2368 1958 2053 conicto -2255 1739 2255 1184 conicto -2255 735 2123 477 conicto -1992 220 1740 78 conicto -1489 -64 1192 -64 conicto -715 -64 421 249 conicto -128 562 128 1152 conicto -527 1154 moveto -527 705 716 482 conicto -905 259 1192 259 conicto -1478 259 1667 483 conicto -1856 707 1856 1167 conicto -1856 1599 1666 1822 conicto -1476 2045 1192 2045 conicto -905 2045 716 1823 conicto -527 1601 527 1154 conicto -end_ol grestore -gsave 17.568067 12.500000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2008 lineto -749 2165 930 2266 conicto -1112 2368 1344 2368 conicto -1602 2368 1767 2263 conicto -1932 2159 2001 1979 conicto -2280 2368 2728 2368 conicto -3079 2368 3267 2177 conicto -3456 1986 3456 1589 conicto -3456 0 lineto -3057 0 lineto -3057 1471 lineto -3057 1709 3018 1813 conicto -2979 1918 2877 1981 conicto -2775 2045 2638 2045 conicto -2390 2045 2226 1881 conicto -2063 1717 2063 1357 conicto -2063 0 lineto -1664 0 lineto -1664 1517 lineto -1664 1781 1568 1913 conicto -1472 2045 1254 2045 conicto -1088 2045 947 1957 conicto -807 1869 744 1699 conicto -681 1530 681 1212 conicto -681 0 lineto -320 0 lineto -end_ol grestore -gsave 18.059133 12.500000 translate 0.035278 -0.035278 scale -start_ol -320 -896 moveto -320 2304 lineto -704 2304 lineto -704 1999 lineto -827 2178 981 2273 conicto -1136 2368 1355 2368 conicto -1641 2368 1860 2214 conicto -2080 2060 2192 1781 conicto -2304 1502 2304 1169 conicto -2304 812 2181 526 conicto -2058 241 1822 88 conicto -1586 -64 1327 -64 conicto -1137 -64 986 19 conicto -835 102 739 228 conicto -739 -896 lineto -320 -896 lineto -704 1132 moveto -704 686 877 472 conicto -1050 259 1297 259 conicto -1548 259 1726 480 conicto -1905 701 1905 1164 conicto -1905 1606 1731 1825 conicto -1557 2045 1314 2045 conicto -1074 2045 889 1811 conicto -704 1577 704 1132 conicto -end_ol grestore -gsave 18.389333 12.500000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 3200 lineto -655 3200 lineto -655 0 lineto -256 0 lineto -end_ol grestore -gsave 18.516333 12.500000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 18.846533 12.500000 translate 0.035278 -0.035278 scale -start_ol -32 0 moveto -870 1198 lineto -95 2304 lineto -581 2304 lineto -932 1763 lineto -1032 1610 1092 1506 conicto -1187 1649 1267 1759 conicto -1653 2304 lineto -2117 2304 lineto -1325 1219 lineto -2178 0 lineto -1701 0 lineto -1230 716 lineto -1105 909 lineto -503 0 lineto -32 0 lineto -end_ol grestore -gsave 19.142867 12.500000 translate 0.035278 -0.035278 scale -start_ol -384 0 moveto -384 1984 lineto -64 1984 lineto -64 2307 lineto -384 2307 lineto -384 2552 lineto -384 2785 425 2889 conicto -481 3029 622 3116 conicto -764 3203 1018 3203 conicto -1182 3203 1380 3168 conicto -1322 2858 lineto -1201 2880 1096 2880 conicto -925 2880 854 2804 conicto -783 2728 783 2520 conicto -783 2307 lineto -1216 2307 lineto -1216 1984 lineto -783 1984 lineto -783 0 lineto -384 0 lineto -end_ol grestore -gsave 19.303733 12.500000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 3200 lineto -655 3200 lineto -655 0 lineto -256 0 lineto -end_ol grestore -gsave 19.430733 12.500000 translate 0.035278 -0.035278 scale -start_ol -128 1152 moveto -128 1798 479 2109 conicto -771 2368 1192 2368 conicto -1661 2368 1958 2053 conicto -2255 1739 2255 1184 conicto -2255 735 2123 477 conicto -1992 220 1740 78 conicto -1489 -64 1192 -64 conicto -715 -64 421 249 conicto -128 562 128 1152 conicto -527 1154 moveto -527 705 716 482 conicto -905 259 1192 259 conicto -1478 259 1667 483 conicto -1856 707 1856 1167 conicto -1856 1599 1666 1822 conicto -1476 2045 1192 2045 conicto -905 2045 716 1823 conicto -527 1601 527 1154 conicto -end_ol grestore -gsave 19.752467 12.500000 translate 0.035278 -0.035278 scale -start_ol -1746 289 moveto -1529 102 1331 19 conicto -1133 -64 905 -64 conicto -530 -64 329 124 conicto -128 312 128 605 conicto -128 777 203 919 conicto -278 1062 399 1148 conicto -521 1234 672 1278 conicto -785 1309 1017 1337 conicto -1490 1394 1713 1472 conicto -1713 1553 1713 1575 conicto -1713 1814 1603 1912 conicto -1453 2045 1158 2045 conicto -884 2045 753 1948 conicto -622 1851 560 1605 conicto -192 1657 lineto -243 1902 362 2053 conicto -481 2204 705 2286 conicto -930 2368 1225 2368 conicto -1519 2368 1702 2298 conicto -1886 2229 1972 2124 conicto -2058 2019 2093 1858 conicto -2112 1758 2112 1496 conicto -2112 973 lineto -2112 427 2137 281 conicto -2162 135 2235 0 conicto -1825 0 lineto -1763 123 1746 289 conicto -1713 1165 moveto -1501 1078 1076 1017 conicto -835 982 735 938 conicto -635 895 581 811 conicto -527 727 527 624 conicto -527 468 645 363 conicto -763 259 991 259 conicto -1216 259 1391 358 conicto -1567 457 1650 630 conicto -1713 762 1713 1021 conicto -1713 1165 lineto -end_ol grestore -gsave 20.074200 12.500000 translate 0.035278 -0.035278 scale -start_ol -1152 399 moveto -1209 37 lineto -1034 0 895 0 conicto -670 0 545 71 conicto -421 142 370 257 conicto -320 373 320 724 conicto -320 2045 lineto -64 2045 lineto -64 2368 lineto -320 2368 lineto -320 2942 lineto -719 3177 lineto -719 2368 lineto -1152 2368 lineto -1152 2045 lineto -719 2045 lineto -719 702 lineto -719 535 742 487 conicto -765 440 816 412 conicto -868 384 963 384 conicto -1035 384 1152 399 conicto -end_ol grestore -gsave 20.235067 12.500000 translate 0.035278 -0.035278 scale -start_ol -320 2752 moveto -320 3200 lineto -719 3200 lineto -719 2752 lineto -320 2752 lineto -320 0 moveto -320 2304 lineto -719 2304 lineto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 20.370533 12.500000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 20.700733 12.500000 translate 0.035278 -0.035278 scale -start_ol -204 -201 moveto -583 -259 lineto -607 -441 714 -525 conicto -859 -637 1109 -637 conicto -1379 -637 1526 -526 conicto -1673 -415 1724 -215 conicto -1755 -93 1755 298 conicto -1500 -3 1120 -3 conicto -646 -3 387 342 conicto -128 687 128 1169 conicto -128 1501 247 1781 conicto -366 2062 591 2215 conicto -817 2368 1122 2368 conicto -1528 2368 1792 2038 conicto -1792 2304 lineto -2176 2304 lineto -2176 297 lineto -2176 -245 2066 -471 conicto -1956 -697 1717 -828 conicto -1479 -960 1130 -960 conicto -714 -960 459 -771 conicto -204 -582 204 -201 conicto -527 1198 moveto -527 740 707 530 conicto -887 320 1158 320 conicto -1427 320 1609 529 conicto -1792 738 1792 1185 conicto -1792 1611 1604 1828 conicto -1417 2045 1151 2045 conicto -891 2045 709 1831 conicto -527 1618 527 1198 conicto -end_ol grestore -gsave 25.750000 10.500000 translate 0.035278 -0.035278 scale -start_ol -132 2432 moveto -552 2432 lineto -1308 391 lineto -2063 2432 lineto -2484 2432 lineto -1578 0 lineto -1038 0 lineto -132 2432 lineto -end_ol grestore -gsave 26.097133 10.500000 translate 0.035278 -0.035278 scale -start_ol -1362 2157 moveto -1044 2157 859 1905 conicto -675 1654 675 1216 conicto -675 779 858 527 conicto -1042 275 1362 275 conicto -1678 275 1863 528 conicto -2048 781 2048 1216 conicto -2048 1649 1863 1903 conicto -1678 2157 1362 2157 conicto -1362 2496 moveto -1878 2496 2172 2156 conicto -2467 1817 2467 1215 conicto -2467 617 2172 276 conicto -1878 -64 1361 -64 conicto -843 -64 549 276 conicto -256 617 256 1215 conicto -256 1817 549 2156 conicto -843 2496 1362 2496 conicto -end_ol grestore -gsave 26.452733 10.500000 translate 0.035278 -0.035278 scale -start_ol -448 2432 moveto -867 2432 lineto -867 0 lineto -448 0 lineto -448 2432 lineto -448 3392 moveto -867 3392 lineto -867 2880 lineto -448 2880 lineto -448 3392 lineto -end_ol grestore -gsave 26.622067 10.500000 translate 0.035278 -0.035278 scale -start_ol -2013 2064 moveto -2013 3392 lineto -2432 3392 lineto -2432 0 lineto -2013 0 lineto -2013 368 lineto -1889 150 1698 43 conicto -1508 -64 1241 -64 conicto -804 -64 530 288 conicto -256 641 256 1215 conicto -256 1791 530 2143 conicto -804 2496 1241 2496 conicto -1508 2496 1698 2390 conicto -1888 2284 2013 2064 conicto -675 1216 moveto -675 776 853 525 conicto -1031 275 1343 275 conicto -1654 275 1833 525 conicto -2013 776 2013 1216 conicto -2013 1656 1833 1906 conicto -1654 2157 1343 2157 conicto -1031 2157 853 1906 conicto -675 1656 675 1216 conicto -end_ol grestore -gsave 21.750000 10.500000 translate 0.035278 -0.035278 scale -start_ol -1806 840 moveto -2188 790 lineto -2125 389 1867 162 conicto -1610 -64 1234 -64 conicto -764 -64 478 248 conicto -192 560 192 1143 conicto -192 1520 315 1802 conicto -438 2085 689 2226 conicto -941 2368 1236 2368 conicto -1610 2368 1847 2176 conicto -2084 1985 2151 1633 conicto -1774 1573 lineto -1720 1808 1583 1926 conicto -1446 2045 1251 2045 conicto -958 2045 774 1831 conicto -591 1617 591 1155 conicto -591 685 768 472 conicto -945 259 1230 259 conicto -1458 259 1611 401 conicto -1765 544 1806 840 conicto -end_ol grestore -gsave 22.046333 10.500000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 3200 lineto -719 3200 lineto -719 2064 lineto -987 2368 1400 2368 conicto -1655 2368 1842 2266 conicto -2029 2165 2110 1986 conicto -2191 1807 2191 1467 conicto -2191 0 lineto -1792 0 lineto -1792 1478 lineto -1792 1775 1667 1910 conicto -1543 2045 1316 2045 conicto -1146 2045 996 1954 conicto -846 1863 782 1707 conicto -719 1551 719 1276 conicto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 22.376533 10.500000 translate 0.035278 -0.035278 scale -start_ol -1746 289 moveto -1529 102 1331 19 conicto -1133 -64 905 -64 conicto -530 -64 329 124 conicto -128 312 128 605 conicto -128 777 203 919 conicto -278 1062 399 1148 conicto -521 1234 672 1278 conicto -785 1309 1017 1337 conicto -1490 1394 1713 1472 conicto -1713 1553 1713 1575 conicto -1713 1814 1603 1912 conicto -1453 2045 1158 2045 conicto -884 2045 753 1948 conicto -622 1851 560 1605 conicto -192 1657 lineto -243 1902 362 2053 conicto -481 2204 705 2286 conicto -930 2368 1225 2368 conicto -1519 2368 1702 2298 conicto -1886 2229 1972 2124 conicto -2058 2019 2093 1858 conicto -2112 1758 2112 1496 conicto -2112 973 lineto -2112 427 2137 281 conicto -2162 135 2235 0 conicto -1825 0 lineto -1763 123 1746 289 conicto -1713 1165 moveto -1501 1078 1076 1017 conicto -835 982 735 938 conicto -635 895 581 811 conicto -527 727 527 624 conicto -527 468 645 363 conicto -763 259 991 259 conicto -1216 259 1391 358 conicto -1567 457 1650 630 conicto -1713 762 1713 1021 conicto -1713 1165 lineto -end_ol grestore -gsave 22.698267 10.500000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 2304 lineto -576 2304 lineto -576 1986 lineto -709 2209 822 2288 conicto -936 2368 1072 2368 conicto -1268 2368 1471 2237 conicto -1337 1898 lineto -1195 1984 1053 1984 conicto -925 1984 823 1905 conicto -722 1827 679 1689 conicto -614 1477 614 1226 conicto -614 0 lineto -256 0 lineto -end_ol grestore -gsave 22.884533 10.500000 translate 0.035278 -0.035278 scale -start_ol -1746 289 moveto -1529 102 1331 19 conicto -1133 -64 905 -64 conicto -530 -64 329 124 conicto -128 312 128 605 conicto -128 777 203 919 conicto -278 1062 399 1148 conicto -521 1234 672 1278 conicto -785 1309 1017 1337 conicto -1490 1394 1713 1472 conicto -1713 1553 1713 1575 conicto -1713 1814 1603 1912 conicto -1453 2045 1158 2045 conicto -884 2045 753 1948 conicto -622 1851 560 1605 conicto -192 1657 lineto -243 1902 362 2053 conicto -481 2204 705 2286 conicto -930 2368 1225 2368 conicto -1519 2368 1702 2298 conicto -1886 2229 1972 2124 conicto -2058 2019 2093 1858 conicto -2112 1758 2112 1496 conicto -2112 973 lineto -2112 427 2137 281 conicto -2162 135 2235 0 conicto -1825 0 lineto -1763 123 1746 289 conicto -1713 1165 moveto -1501 1078 1076 1017 conicto -835 982 735 938 conicto -635 895 581 811 conicto -527 727 527 624 conicto -527 468 645 363 conicto -763 259 991 259 conicto -1216 259 1391 358 conicto -1567 457 1650 630 conicto -1713 762 1713 1021 conicto -1713 1165 lineto -end_ol grestore -gsave 23.206267 10.500000 translate 0.035278 -0.035278 scale -start_ol -1806 840 moveto -2188 790 lineto -2125 389 1867 162 conicto -1610 -64 1234 -64 conicto -764 -64 478 248 conicto -192 560 192 1143 conicto -192 1520 315 1802 conicto -438 2085 689 2226 conicto -941 2368 1236 2368 conicto -1610 2368 1847 2176 conicto -2084 1985 2151 1633 conicto -1774 1573 lineto -1720 1808 1583 1926 conicto -1446 2045 1251 2045 conicto -958 2045 774 1831 conicto -591 1617 591 1155 conicto -591 685 768 472 conicto -945 259 1230 259 conicto -1458 259 1611 401 conicto -1765 544 1806 840 conicto -end_ol grestore -gsave 23.502600 10.500000 translate 0.035278 -0.035278 scale -start_ol -1152 399 moveto -1209 37 lineto -1034 0 895 0 conicto -670 0 545 71 conicto -421 142 370 257 conicto -320 373 320 724 conicto -320 2045 lineto -64 2045 lineto -64 2368 lineto -320 2368 lineto -320 2942 lineto -719 3177 lineto -719 2368 lineto -1152 2368 lineto -1152 2045 lineto -719 2045 lineto -719 702 lineto -719 535 742 487 conicto -765 440 816 412 conicto -868 384 963 384 conicto -1035 384 1152 399 conicto -end_ol grestore -gsave 23.663467 10.500000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 23.993667 10.500000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 2304 lineto -576 2304 lineto -576 1986 lineto -709 2209 822 2288 conicto -936 2368 1072 2368 conicto -1268 2368 1471 2237 conicto -1337 1898 lineto -1195 1984 1053 1984 conicto -925 1984 823 1905 conicto -722 1827 679 1689 conicto -614 1477 614 1226 conicto -614 0 lineto -256 0 lineto -end_ol grestore -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 5.500000 6.000000 m 5.500000 7.417500 l 8.437500 7.417500 l 8.437500 6.000000 l cp s -gsave 6.000000 7.000000 translate 0.035278 -0.035278 scale -start_ol -128 1152 moveto -128 1798 479 2109 conicto -771 2368 1192 2368 conicto -1661 2368 1958 2053 conicto -2255 1739 2255 1184 conicto -2255 735 2123 477 conicto -1992 220 1740 78 conicto -1489 -64 1192 -64 conicto -715 -64 421 249 conicto -128 562 128 1152 conicto -527 1154 moveto -527 705 716 482 conicto -905 259 1192 259 conicto -1478 259 1667 483 conicto -1856 707 1856 1167 conicto -1856 1599 1666 1822 conicto -1476 2045 1192 2045 conicto -905 2045 716 1823 conicto -527 1601 527 1154 conicto -end_ol grestore -gsave 6.321733 7.000000 translate 0.035278 -0.035278 scale -start_ol -719 0 moveto -320 0 lineto -320 3200 lineto -747 3200 lineto -747 2056 lineto -984 2368 1357 2368 conicto -1563 2368 1747 2281 conicto -1931 2194 2050 2038 conicto -2169 1882 2236 1660 conicto -2304 1438 2304 1186 conicto -2304 588 2019 262 conicto -1735 -64 1337 -64 conicto -942 -64 719 279 conicto -719 0 lineto -719 1170 moveto -719 751 827 564 conicto -1003 259 1304 259 conicto -1549 259 1727 484 conicto -1905 709 1905 1155 conicto -1905 1610 1734 1827 conicto -1563 2045 1320 2045 conicto -1075 2045 897 1820 conicto -719 1595 719 1170 conicto -end_ol grestore -gsave 6.651933 7.000000 translate 0.035278 -0.035278 scale -start_ol -320 2752 moveto -320 3200 lineto -719 3200 lineto -719 2752 lineto -320 2752 lineto --172 -921 moveto --98 -606 lineto -18 -637 85 -637 conicto -204 -637 262 -557 conicto -320 -478 320 -160 conicto -320 2273 lineto -719 2273 lineto -719 -168 lineto -719 -596 606 -756 conicto -462 -960 134 -960 conicto --24 -960 -172 -921 conicto -end_ol grestore -gsave 6.787400 7.000000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 7.117600 7.000000 translate 0.035278 -0.035278 scale -start_ol -1806 840 moveto -2188 790 lineto -2125 389 1867 162 conicto -1610 -64 1234 -64 conicto -764 -64 478 248 conicto -192 560 192 1143 conicto -192 1520 315 1802 conicto -438 2085 689 2226 conicto -941 2368 1236 2368 conicto -1610 2368 1847 2176 conicto -2084 1985 2151 1633 conicto -1774 1573 lineto -1720 1808 1583 1926 conicto -1446 2045 1251 2045 conicto -958 2045 774 1831 conicto -591 1617 591 1155 conicto -591 685 768 472 conicto -945 259 1230 259 conicto -1458 259 1611 401 conicto -1765 544 1806 840 conicto -end_ol grestore -gsave 7.413933 7.000000 translate 0.035278 -0.035278 scale -start_ol -1152 399 moveto -1209 37 lineto -1034 0 895 0 conicto -670 0 545 71 conicto -421 142 370 257 conicto -320 373 320 724 conicto -320 2045 lineto -64 2045 lineto -64 2368 lineto -320 2368 lineto -320 2942 lineto -719 3177 lineto -719 2368 lineto -1152 2368 lineto -1152 2045 lineto -719 2045 lineto -719 702 lineto -719 535 742 487 conicto -765 440 816 412 conicto -868 384 963 384 conicto -1035 384 1152 399 conicto -end_ol grestore -gsave 7.574800 7.000000 translate 0.035278 -0.035278 scale -start_ol --64 -896 moveto --64 -640 lineto -2496 -640 lineto -2496 -896 lineto --64 -896 lineto -end_ol grestore -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 1.750000 6.000000 m 1.750000 7.500000 l 4.627500 7.500000 l 4.627500 6.000000 l cp s -gsave 2.502510 7.000000 translate 0.035278 -0.035278 scale -start_ol -729 0 moveto -320 0 lineto -320 3264 lineto -757 3264 lineto -757 2112 lineto -1003 2432 1389 2432 conicto -1602 2432 1792 2343 conicto -1983 2254 2106 2093 conicto -2229 1933 2298 1705 conicto -2368 1478 2368 1220 conicto -2368 606 2074 271 conicto -1781 -64 1369 -64 conicto -960 -64 729 287 conicto -729 0 lineto -729 1202 moveto -729 771 841 580 conicto -1024 267 1336 267 conicto -1590 267 1774 498 conicto -1959 729 1959 1186 conicto -1959 1655 1781 1878 conicto -1604 2101 1353 2101 conicto -1099 2101 914 1870 conicto -729 1639 729 1202 conicto -end_ol grestore -gsave 2.841177 7.000000 translate 0.035278 -0.035278 scale -start_ol -128 1184 moveto -128 1847 491 2166 conicto -794 2432 1230 2432 conicto -1714 2432 2021 2109 conicto -2329 1786 2329 1218 conicto -2329 757 2193 492 conicto -2057 228 1797 82 conicto -1537 -64 1230 -64 conicto -737 -64 432 258 conicto -128 580 128 1184 conicto -537 1185 moveto -537 724 734 495 conicto -931 267 1230 267 conicto -1526 267 1723 497 conicto -1920 727 1920 1198 conicto -1920 1643 1722 1872 conicto -1524 2101 1230 2101 conicto -931 2101 734 1873 conicto -537 1646 537 1185 conicto -end_ol grestore -gsave 3.171377 7.000000 translate 0.035278 -0.035278 scale -start_ol -128 1184 moveto -128 1847 491 2166 conicto -794 2432 1230 2432 conicto -1714 2432 2021 2109 conicto -2329 1786 2329 1218 conicto -2329 757 2193 492 conicto -2057 228 1797 82 conicto -1537 -64 1230 -64 conicto -737 -64 432 258 conicto -128 580 128 1184 conicto -537 1185 moveto -537 724 734 495 conicto -931 267 1230 267 conicto -1526 267 1723 497 conicto -1920 727 1920 1198 conicto -1920 1643 1722 1872 conicto -1524 2101 1230 2101 conicto -931 2101 734 1873 conicto -537 1646 537 1185 conicto -end_ol grestore -gsave 3.501577 7.000000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 3264 lineto -729 3264 lineto -729 0 lineto -320 0 lineto -end_ol grestore -gsave 3.637043 7.000000 translate 0.035278 -0.035278 scale -start_ol --64 -896 moveto --64 -576 lineto -2560 -576 lineto -2560 -896 lineto --64 -896 lineto -end_ol grestore -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 12.928800 3.750000 m 12.928800 4.875000 l 6.968750 4.875000 l 6.968750 5.513197 l s -[] 0 sd -0 slj -0 slc -n 6.968750 5.888197 m 6.718750 5.388197 l 6.968750 5.513197 l 7.218750 5.388197 l ef -n 6.968750 5.888197 m 6.718750 5.388197 l 6.968750 5.513197 l 7.218750 5.388197 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 12.928800 3.750000 m 12.928800 4.875000 l 3.188750 4.875000 l 3.188750 5.513197 l s -[] 0 sd -0 slj -0 slc -n 3.188750 5.888197 m 2.938750 5.388197 l 3.188750 5.513197 l 3.438750 5.388197 l ef -n 3.188750 5.888197 m 2.938750 5.388197 l 3.188750 5.513197 l 3.438750 5.388197 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 12.928800 3.750000 m 12.928800 4.875000 l 13.928800 4.875000 l 13.928800 5.513197 l s -[] 0 sd -0 slj -0 slc -n 13.928800 5.888197 m 13.678800 5.388197 l 13.928800 5.513197 l 14.178800 5.388197 l ef -n 13.928800 5.888197 m 13.678800 5.388197 l 13.928800 5.513197 l 14.178800 5.388197 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 12.928800 3.750000 m 12.928800 4.875000 l 23.382500 4.875000 l 23.382500 5.513197 l s -[] 0 sd -0 slj -0 slc -n 23.382500 5.888197 m 23.132500 5.388197 l 23.382500 5.513197 l 23.632500 5.388197 l ef -n 23.382500 5.888197 m 23.132500 5.388197 l 23.382500 5.513197 l 23.632500 5.388197 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 23.382500 7.500000 m 23.382500 8.500000 l 26.428800 8.500000 l 26.428800 9.013197 l s -[] 0 sd -0 slj -0 slc -n 26.428800 9.388197 m 26.178800 8.888197 l 26.428800 9.013197 l 26.678800 8.888197 l ef -n 26.428800 9.388197 m 26.178800 8.888197 l 26.428800 9.013197 l 26.678800 8.888197 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 13.928800 7.500000 m 13.928800 8.500000 l 7.375000 8.500000 l 7.375000 9.013197 l s -[] 0 sd -0 slj -0 slc -n 7.375000 9.388197 m 7.125000 8.888197 l 7.375000 9.013197 l 7.625000 8.888197 l ef -n 7.375000 9.388197 m 7.125000 8.888197 l 7.375000 9.013197 l 7.625000 8.888197 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 23.382500 7.500000 m 23.382500 8.500000 l 22.928800 8.500000 l 22.928800 9.013197 l s -[] 0 sd -0 slj -0 slc -n 22.928800 9.388197 m 22.678800 8.888197 l 22.928800 9.013197 l 23.178800 8.888197 l ef -n 22.928800 9.388197 m 22.678800 8.888197 l 22.928800 9.013197 l 23.178800 8.888197 l cp s -0.095250 slw -[1.000000] 0 sd -[0.127000] 0 sd -0 slj -n 3.000000 11.500000 m 3.000000 13.002375 l 6.752375 13.002375 l 6.752375 11.500000 l cp s -0.095250 slw -[0.127000] 0 sd -[0.127000] 0 sd -0 slj -n 7.750000 11.500000 m 7.750000 13.002375 l 12.102375 13.002375 l 12.102375 11.500000 l cp s -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 14.200000 15.500000 m 14.200000 16.996250 l 17.057500 16.996250 l 17.057500 15.500000 l cp s -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 14.200000 17.250000 m 14.200000 18.746250 l 17.057500 18.746250 l 17.057500 17.250000 l cp s -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 14.200000 19.000000 m 14.200000 20.496250 l 17.450000 20.496250 l 17.450000 19.000000 l cp s -gsave 3.100000 12.450000 translate 0.035278 -0.035278 scale -start_ol -127 682 moveto -531 744 lineto -566 509 713 384 conicto -861 259 1125 259 conicto -1391 259 1520 370 conicto -1649 481 1649 630 conicto -1649 764 1536 841 conicto -1456 893 1140 974 conicto -715 1084 542 1164 conicto -370 1244 281 1385 conicto -192 1527 192 1698 conicto -192 1853 266 1986 conicto -341 2119 469 2207 conicto -566 2274 722 2321 conicto -878 2368 1057 2368 conicto -1325 2368 1528 2289 conicto -1732 2211 1828 2076 conicto -1925 1941 1962 1716 conicto -1582 1663 lineto -1557 1843 1433 1944 conicto -1310 2045 1085 2045 conicto -819 2045 705 1955 conicto -591 1865 591 1744 conicto -591 1668 638 1606 conicto -685 1543 786 1501 conicto -844 1479 1128 1400 conicto -1537 1288 1700 1216 conicto -1863 1145 1955 1009 conicto -2048 874 2048 672 conicto -2048 475 1934 300 conicto -1820 126 1604 31 conicto -1389 -64 1116 -64 conicto -665 -64 429 124 conicto -193 313 127 682 conicto -end_ol grestore -gsave 3.396333 12.450000 translate 0.035278 -0.035278 scale -start_ol -320 2752 moveto -320 3200 lineto -719 3200 lineto -719 2752 lineto -320 2752 lineto -320 0 moveto -320 2304 lineto -719 2304 lineto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 3.531800 12.450000 translate 0.035278 -0.035278 scale -start_ol -204 -201 moveto -583 -259 lineto -607 -441 714 -525 conicto -859 -637 1109 -637 conicto -1379 -637 1526 -526 conicto -1673 -415 1724 -215 conicto -1755 -93 1755 298 conicto -1500 -3 1120 -3 conicto -646 -3 387 342 conicto -128 687 128 1169 conicto -128 1501 247 1781 conicto -366 2062 591 2215 conicto -817 2368 1122 2368 conicto -1528 2368 1792 2038 conicto -1792 2304 lineto -2176 2304 lineto -2176 297 lineto -2176 -245 2066 -471 conicto -1956 -697 1717 -828 conicto -1479 -960 1130 -960 conicto -714 -960 459 -771 conicto -204 -582 204 -201 conicto -527 1198 moveto -527 740 707 530 conicto -887 320 1158 320 conicto -1427 320 1609 529 conicto -1792 738 1792 1185 conicto -1792 1611 1604 1828 conicto -1417 2045 1151 2045 conicto -891 2045 709 1831 conicto -527 1618 527 1198 conicto -end_ol grestore -gsave 3.862000 12.450000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 4.192200 12.450000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 4.522400 12.450000 translate 0.035278 -0.035278 scale -start_ol -1752 0 moveto -1752 281 lineto -1534 -64 1112 -64 conicto -838 -64 609 89 conicto -380 243 254 517 conicto -128 792 128 1149 conicto -128 1498 242 1782 conicto -357 2066 585 2217 conicto -813 2368 1095 2368 conicto -1302 2368 1463 2280 conicto -1625 2192 1726 2052 conicto -1726 3200 lineto -2127 3200 lineto -2127 0 lineto -1752 0 lineto -527 1150 moveto -527 703 711 481 conicto -896 259 1146 259 conicto -1399 259 1575 471 conicto -1752 683 1752 1118 conicto -1752 1597 1572 1821 conicto -1392 2045 1129 2045 conicto -872 2045 699 1829 conicto -527 1614 527 1150 conicto -end_ol grestore -gsave 4.844133 12.450000 translate 0.035278 -0.035278 scale -start_ol -320 2752 moveto -320 3200 lineto -719 3200 lineto -719 2752 lineto -320 2752 lineto -320 0 moveto -320 2304 lineto -719 2304 lineto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 4.979600 12.450000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 5.309800 12.450000 translate 0.035278 -0.035278 scale -start_ol -1152 399 moveto -1209 37 lineto -1034 0 895 0 conicto -670 0 545 71 conicto -421 142 370 257 conicto -320 373 320 724 conicto -320 2045 lineto -64 2045 lineto -64 2368 lineto -320 2368 lineto -320 2942 lineto -719 3177 lineto -719 2368 lineto -1152 2368 lineto -1152 2045 lineto -719 2045 lineto -719 702 lineto -719 535 742 487 conicto -765 440 816 412 conicto -868 384 963 384 conicto -1035 384 1152 399 conicto -end_ol grestore -gsave 5.470667 12.450000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 5.800867 12.450000 translate 0.035278 -0.035278 scale -start_ol -204 -201 moveto -583 -259 lineto -607 -441 714 -525 conicto -859 -637 1109 -637 conicto -1379 -637 1526 -526 conicto -1673 -415 1724 -215 conicto -1755 -93 1755 298 conicto -1500 -3 1120 -3 conicto -646 -3 387 342 conicto -128 687 128 1169 conicto -128 1501 247 1781 conicto -366 2062 591 2215 conicto -817 2368 1122 2368 conicto -1528 2368 1792 2038 conicto -1792 2304 lineto -2176 2304 lineto -2176 297 lineto -2176 -245 2066 -471 conicto -1956 -697 1717 -828 conicto -1479 -960 1130 -960 conicto -714 -960 459 -771 conicto -204 -582 204 -201 conicto -527 1198 moveto -527 740 707 530 conicto -887 320 1158 320 conicto -1427 320 1609 529 conicto -1792 738 1792 1185 conicto -1792 1611 1604 1828 conicto -1417 2045 1151 2045 conicto -891 2045 709 1831 conicto -527 1618 527 1198 conicto -end_ol grestore -gsave 6.131067 12.450000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 6.461267 12.450000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 2304 lineto -576 2304 lineto -576 1986 lineto -709 2209 822 2288 conicto -936 2368 1072 2368 conicto -1268 2368 1471 2237 conicto -1337 1898 lineto -1195 1984 1053 1984 conicto -925 1984 823 1905 conicto -722 1827 679 1689 conicto -614 1477 614 1226 conicto -614 0 lineto -256 0 lineto -end_ol grestore -gsave 7.852380 12.502400 translate 0.035278 -0.035278 scale -start_ol -1792 0 moveto -1792 314 lineto -1521 -64 1053 -64 conicto -847 -64 668 11 conicto -489 87 402 201 conicto -316 316 280 490 conicto -256 606 256 859 conicto -256 2304 lineto -655 2304 lineto -655 1010 lineto -655 701 679 593 conicto -717 437 837 348 conicto -957 259 1135 259 conicto -1312 259 1467 350 conicto -1622 441 1686 598 conicto -1751 755 1751 1054 conicto -1751 2304 lineto -2112 2304 lineto -2112 0 lineto -1792 0 lineto -end_ol grestore -gsave 8.174113 12.502400 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 8.504313 12.502400 translate 0.035278 -0.035278 scale -start_ol -127 682 moveto -531 744 lineto -566 509 713 384 conicto -861 259 1125 259 conicto -1391 259 1520 370 conicto -1649 481 1649 630 conicto -1649 764 1536 841 conicto -1456 893 1140 974 conicto -715 1084 542 1164 conicto -370 1244 281 1385 conicto -192 1527 192 1698 conicto -192 1853 266 1986 conicto -341 2119 469 2207 conicto -566 2274 722 2321 conicto -878 2368 1057 2368 conicto -1325 2368 1528 2289 conicto -1732 2211 1828 2076 conicto -1925 1941 1962 1716 conicto -1582 1663 lineto -1557 1843 1433 1944 conicto -1310 2045 1085 2045 conicto -819 2045 705 1955 conicto -591 1865 591 1744 conicto -591 1668 638 1606 conicto -685 1543 786 1501 conicto -844 1479 1128 1400 conicto -1537 1288 1700 1216 conicto -1863 1145 1955 1009 conicto -2048 874 2048 672 conicto -2048 475 1934 300 conicto -1820 126 1604 31 conicto -1389 -64 1116 -64 conicto -665 -64 429 124 conicto -193 313 127 682 conicto -end_ol grestore -gsave 8.800647 12.502400 translate 0.035278 -0.035278 scale -start_ol -320 2752 moveto -320 3200 lineto -719 3200 lineto -719 2752 lineto -320 2752 lineto -320 0 moveto -320 2304 lineto -719 2304 lineto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 8.936113 12.502400 translate 0.035278 -0.035278 scale -start_ol -204 -201 moveto -583 -259 lineto -607 -441 714 -525 conicto -859 -637 1109 -637 conicto -1379 -637 1526 -526 conicto -1673 -415 1724 -215 conicto -1755 -93 1755 298 conicto -1500 -3 1120 -3 conicto -646 -3 387 342 conicto -128 687 128 1169 conicto -128 1501 247 1781 conicto -366 2062 591 2215 conicto -817 2368 1122 2368 conicto -1528 2368 1792 2038 conicto -1792 2304 lineto -2176 2304 lineto -2176 297 lineto -2176 -245 2066 -471 conicto -1956 -697 1717 -828 conicto -1479 -960 1130 -960 conicto -714 -960 459 -771 conicto -204 -582 204 -201 conicto -527 1198 moveto -527 740 707 530 conicto -887 320 1158 320 conicto -1427 320 1609 529 conicto -1792 738 1792 1185 conicto -1792 1611 1604 1828 conicto -1417 2045 1151 2045 conicto -891 2045 709 1831 conicto -527 1618 527 1198 conicto -end_ol grestore -gsave 9.266313 12.502400 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 9.596513 12.502400 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 9.926713 12.502400 translate 0.035278 -0.035278 scale -start_ol -1752 0 moveto -1752 281 lineto -1534 -64 1112 -64 conicto -838 -64 609 89 conicto -380 243 254 517 conicto -128 792 128 1149 conicto -128 1498 242 1782 conicto -357 2066 585 2217 conicto -813 2368 1095 2368 conicto -1302 2368 1463 2280 conicto -1625 2192 1726 2052 conicto -1726 3200 lineto -2127 3200 lineto -2127 0 lineto -1752 0 lineto -527 1150 moveto -527 703 711 481 conicto -896 259 1146 259 conicto -1399 259 1575 471 conicto -1752 683 1752 1118 conicto -1752 1597 1572 1821 conicto -1392 2045 1129 2045 conicto -872 2045 699 1829 conicto -527 1614 527 1150 conicto -end_ol grestore -gsave 10.248447 12.502400 translate 0.035278 -0.035278 scale -start_ol -320 2752 moveto -320 3200 lineto -719 3200 lineto -719 2752 lineto -320 2752 lineto -320 0 moveto -320 2304 lineto -719 2304 lineto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 10.383913 12.502400 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 10.714113 12.502400 translate 0.035278 -0.035278 scale -start_ol -1152 399 moveto -1209 37 lineto -1034 0 895 0 conicto -670 0 545 71 conicto -421 142 370 257 conicto -320 373 320 724 conicto -320 2045 lineto -64 2045 lineto -64 2368 lineto -320 2368 lineto -320 2942 lineto -719 3177 lineto -719 2368 lineto -1152 2368 lineto -1152 2045 lineto -719 2045 lineto -719 702 lineto -719 535 742 487 conicto -765 440 816 412 conicto -868 384 963 384 conicto -1035 384 1152 399 conicto -end_ol grestore -gsave 10.874980 12.502400 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 11.205180 12.502400 translate 0.035278 -0.035278 scale -start_ol -204 -201 moveto -583 -259 lineto -607 -441 714 -525 conicto -859 -637 1109 -637 conicto -1379 -637 1526 -526 conicto -1673 -415 1724 -215 conicto -1755 -93 1755 298 conicto -1500 -3 1120 -3 conicto -646 -3 387 342 conicto -128 687 128 1169 conicto -128 1501 247 1781 conicto -366 2062 591 2215 conicto -817 2368 1122 2368 conicto -1528 2368 1792 2038 conicto -1792 2304 lineto -2176 2304 lineto -2176 297 lineto -2176 -245 2066 -471 conicto -1956 -697 1717 -828 conicto -1479 -960 1130 -960 conicto -714 -960 459 -771 conicto -204 -582 204 -201 conicto -527 1198 moveto -527 740 707 530 conicto -887 320 1158 320 conicto -1427 320 1609 529 conicto -1792 738 1792 1185 conicto -1792 1611 1604 1828 conicto -1417 2045 1151 2045 conicto -891 2045 709 1831 conicto -527 1618 527 1198 conicto -end_ol grestore -gsave 11.535380 12.502400 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 11.865580 12.502400 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 2304 lineto -576 2304 lineto -576 1986 lineto -709 2209 822 2288 conicto -936 2368 1072 2368 conicto -1268 2368 1471 2237 conicto -1337 1898 lineto -1195 1984 1053 1984 conicto -925 1984 823 1905 conicto -722 1827 679 1689 conicto -614 1477 614 1226 conicto -614 0 lineto -256 0 lineto -end_ol grestore -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 4.000000 14.250000 m 4.000000 15.746250 l 6.857500 15.746250 l 6.857500 14.250000 l cp s -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 4.000000 16.000000 m 4.000000 17.496250 l 6.857500 17.496250 l 6.857500 16.000000 l cp s -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 4.000000 17.750000 m 4.000000 19.246250 l 6.857500 19.246250 l 6.857500 17.750000 l cp s -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 4.000000 19.500000 m 4.000000 20.996250 l 6.857500 20.996250 l 6.857500 19.500000 l cp s -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 4.000000 21.250000 m 4.000000 22.746250 l 6.857500 22.746250 l 6.857500 21.250000 l cp s -gsave 4.750000 15.250000 translate 0.035278 -0.035278 scale -start_ol -719 0 moveto -320 0 lineto -320 3200 lineto -747 3200 lineto -747 2056 lineto -984 2368 1357 2368 conicto -1563 2368 1747 2281 conicto -1931 2194 2050 2038 conicto -2169 1882 2236 1660 conicto -2304 1438 2304 1186 conicto -2304 588 2019 262 conicto -1735 -64 1337 -64 conicto -942 -64 719 279 conicto -719 0 lineto -719 1170 moveto -719 751 827 564 conicto -1003 259 1304 259 conicto -1549 259 1727 484 conicto -1905 709 1905 1155 conicto -1905 1610 1734 1827 conicto -1563 2045 1320 2045 conicto -1075 2045 897 1820 conicto -719 1595 719 1170 conicto -end_ol grestore -gsave 5.080200 15.250000 translate 0.035278 -0.035278 scale -start_ol -274 -912 moveto -231 -541 lineto -358 -576 453 -576 conicto -583 -576 660 -532 conicto -738 -489 788 -410 conicto -824 -352 906 -118 conicto -917 -86 941 -22 conicto -71 2297 lineto -490 2297 lineto -967 956 lineto -1060 701 1133 420 conicto -1200 690 1293 947 conicto -1783 2297 lineto -2171 2297 lineto -1299 -57 lineto -1159 -439 1081 -583 conicto -978 -778 844 -869 conicto -710 -960 524 -960 conicto -412 -960 274 -912 conicto -end_ol grestore -gsave 5.376533 15.250000 translate 0.035278 -0.035278 scale -start_ol -1152 399 moveto -1209 37 lineto -1034 0 895 0 conicto -670 0 545 71 conicto -421 142 370 257 conicto -320 373 320 724 conicto -320 2045 lineto -64 2045 lineto -64 2368 lineto -320 2368 lineto -320 2942 lineto -719 3177 lineto -719 2368 lineto -1152 2368 lineto -1152 2045 lineto -719 2045 lineto -719 702 lineto -719 535 742 487 conicto -765 440 816 412 conicto -868 384 963 384 conicto -1035 384 1152 399 conicto -end_ol grestore -gsave 5.537400 15.250000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 4.750000 17.000000 translate 0.035278 -0.035278 scale -start_ol -127 682 moveto -531 744 lineto -566 509 713 384 conicto -861 259 1125 259 conicto -1391 259 1520 370 conicto -1649 481 1649 630 conicto -1649 764 1536 841 conicto -1456 893 1140 974 conicto -715 1084 542 1164 conicto -370 1244 281 1385 conicto -192 1527 192 1698 conicto -192 1853 266 1986 conicto -341 2119 469 2207 conicto -566 2274 722 2321 conicto -878 2368 1057 2368 conicto -1325 2368 1528 2289 conicto -1732 2211 1828 2076 conicto -1925 1941 1962 1716 conicto -1582 1663 lineto -1557 1843 1433 1944 conicto -1310 2045 1085 2045 conicto -819 2045 705 1955 conicto -591 1865 591 1744 conicto -591 1668 638 1606 conicto -685 1543 786 1501 conicto -844 1479 1128 1400 conicto -1537 1288 1700 1216 conicto -1863 1145 1955 1009 conicto -2048 874 2048 672 conicto -2048 475 1934 300 conicto -1820 126 1604 31 conicto -1389 -64 1116 -64 conicto -665 -64 429 124 conicto -193 313 127 682 conicto -end_ol grestore -gsave 5.046333 17.000000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 3200 lineto -719 3200 lineto -719 2064 lineto -987 2368 1400 2368 conicto -1655 2368 1842 2266 conicto -2029 2165 2110 1986 conicto -2191 1807 2191 1467 conicto -2191 0 lineto -1792 0 lineto -1792 1478 lineto -1792 1775 1667 1910 conicto -1543 2045 1316 2045 conicto -1146 2045 996 1954 conicto -846 1863 782 1707 conicto -719 1551 719 1276 conicto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 5.376533 17.000000 translate 0.035278 -0.035278 scale -start_ol -128 1152 moveto -128 1798 479 2109 conicto -771 2368 1192 2368 conicto -1661 2368 1958 2053 conicto -2255 1739 2255 1184 conicto -2255 735 2123 477 conicto -1992 220 1740 78 conicto -1489 -64 1192 -64 conicto -715 -64 421 249 conicto -128 562 128 1152 conicto -527 1154 moveto -527 705 716 482 conicto -905 259 1192 259 conicto -1478 259 1667 483 conicto -1856 707 1856 1167 conicto -1856 1599 1666 1822 conicto -1476 2045 1192 2045 conicto -905 2045 716 1823 conicto -527 1601 527 1154 conicto -end_ol grestore -gsave 5.698267 17.000000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 2304 lineto -576 2304 lineto -576 1986 lineto -709 2209 822 2288 conicto -936 2368 1072 2368 conicto -1268 2368 1471 2237 conicto -1337 1898 lineto -1195 1984 1053 1984 conicto -925 1984 823 1905 conicto -722 1827 679 1689 conicto -614 1477 614 1226 conicto -614 0 lineto -256 0 lineto -end_ol grestore -gsave 5.884533 17.000000 translate 0.035278 -0.035278 scale -start_ol -1152 399 moveto -1209 37 lineto -1034 0 895 0 conicto -670 0 545 71 conicto -421 142 370 257 conicto -320 373 320 724 conicto -320 2045 lineto -64 2045 lineto -64 2368 lineto -320 2368 lineto -320 2942 lineto -719 3177 lineto -719 2368 lineto -1152 2368 lineto -1152 2045 lineto -719 2045 lineto -719 702 lineto -719 535 742 487 conicto -765 440 816 412 conicto -868 384 963 384 conicto -1035 384 1152 399 conicto -end_ol grestore -gsave 4.900000 18.650000 translate 0.035278 -0.035278 scale -start_ol -320 2752 moveto -320 3200 lineto -719 3200 lineto -719 2752 lineto -320 2752 lineto -320 0 moveto -320 2304 lineto -719 2304 lineto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 5.035467 18.650000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 5.365667 18.650000 translate 0.035278 -0.035278 scale -start_ol -1152 399 moveto -1209 37 lineto -1034 0 895 0 conicto -670 0 545 71 conicto -421 142 370 257 conicto -320 373 320 724 conicto -320 2045 lineto -64 2045 lineto -64 2368 lineto -320 2368 lineto -320 2942 lineto -719 3177 lineto -719 2368 lineto -1152 2368 lineto -1152 2045 lineto -719 2045 lineto -719 702 lineto -719 535 742 487 conicto -765 440 816 412 conicto -868 384 963 384 conicto -1035 384 1152 399 conicto -end_ol grestore -gsave 5.526533 18.650000 translate 0.035278 -0.035278 scale -start_ol -1806 840 moveto -2188 790 lineto -2125 389 1867 162 conicto -1610 -64 1234 -64 conicto -764 -64 478 248 conicto -192 560 192 1143 conicto -192 1520 315 1802 conicto -438 2085 689 2226 conicto -941 2368 1236 2368 conicto -1610 2368 1847 2176 conicto -2084 1985 2151 1633 conicto -1774 1573 lineto -1720 1808 1583 1926 conicto -1446 2045 1251 2045 conicto -958 2045 774 1831 conicto -591 1617 591 1155 conicto -591 685 768 472 conicto -945 259 1230 259 conicto -1458 259 1611 401 conicto -1765 544 1806 840 conicto -end_ol grestore -gsave 4.700000 20.500000 translate 0.035278 -0.035278 scale -start_ol -320 2752 moveto -320 3200 lineto -719 3200 lineto -719 2752 lineto -320 2752 lineto -320 0 moveto -320 2304 lineto -719 2304 lineto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 4.835467 20.500000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 5.165667 20.500000 translate 0.035278 -0.035278 scale -start_ol -1152 399 moveto -1209 37 lineto -1034 0 895 0 conicto -670 0 545 71 conicto -421 142 370 257 conicto -320 373 320 724 conicto -320 2045 lineto -64 2045 lineto -64 2368 lineto -320 2368 lineto -320 2942 lineto -719 3177 lineto -719 2368 lineto -1152 2368 lineto -1152 2045 lineto -719 2045 lineto -719 702 lineto -719 535 742 487 conicto -765 440 816 412 conicto -868 384 963 384 conicto -1035 384 1152 399 conicto -end_ol grestore -gsave 5.326533 20.500000 translate 0.035278 -0.035278 scale -start_ol --64 -896 moveto --64 -640 lineto -2496 -640 lineto -2496 -896 lineto --64 -896 lineto -end_ol grestore -gsave 4.400000 22.250000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 3200 lineto -655 3200 lineto -655 0 lineto -256 0 lineto -end_ol grestore -gsave 4.527000 22.250000 translate 0.035278 -0.035278 scale -start_ol -128 1152 moveto -128 1798 479 2109 conicto -771 2368 1192 2368 conicto -1661 2368 1958 2053 conicto -2255 1739 2255 1184 conicto -2255 735 2123 477 conicto -1992 220 1740 78 conicto -1489 -64 1192 -64 conicto -715 -64 421 249 conicto -128 562 128 1152 conicto -527 1154 moveto -527 705 716 482 conicto -905 259 1192 259 conicto -1478 259 1667 483 conicto -1856 707 1856 1167 conicto -1856 1599 1666 1822 conicto -1476 2045 1192 2045 conicto -905 2045 716 1823 conicto -527 1601 527 1154 conicto -end_ol grestore -gsave 4.848733 22.250000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 5.178933 22.250000 translate 0.035278 -0.035278 scale -start_ol -204 -201 moveto -583 -259 lineto -607 -441 714 -525 conicto -859 -637 1109 -637 conicto -1379 -637 1526 -526 conicto -1673 -415 1724 -215 conicto -1755 -93 1755 298 conicto -1500 -3 1120 -3 conicto -646 -3 387 342 conicto -128 687 128 1169 conicto -128 1501 247 1781 conicto -366 2062 591 2215 conicto -817 2368 1122 2368 conicto -1528 2368 1792 2038 conicto -1792 2304 lineto -2176 2304 lineto -2176 297 lineto -2176 -245 2066 -471 conicto -1956 -697 1717 -828 conicto -1479 -960 1130 -960 conicto -714 -960 459 -771 conicto -204 -582 204 -201 conicto -527 1198 moveto -527 740 707 530 conicto -887 320 1158 320 conicto -1427 320 1609 529 conicto -1792 738 1792 1185 conicto -1792 1611 1604 1828 conicto -1417 2045 1151 2045 conicto -891 2045 709 1831 conicto -527 1618 527 1198 conicto -end_ol grestore -gsave 5.509133 22.250000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 3200 lineto -655 3200 lineto -655 0 lineto -256 0 lineto -end_ol grestore -gsave 5.636133 22.250000 translate 0.035278 -0.035278 scale -start_ol -128 1152 moveto -128 1798 479 2109 conicto -771 2368 1192 2368 conicto -1661 2368 1958 2053 conicto -2255 1739 2255 1184 conicto -2255 735 2123 477 conicto -1992 220 1740 78 conicto -1489 -64 1192 -64 conicto -715 -64 421 249 conicto -128 562 128 1152 conicto -527 1154 moveto -527 705 716 482 conicto -905 259 1192 259 conicto -1478 259 1667 483 conicto -1856 707 1856 1167 conicto -1856 1599 1666 1822 conicto -1476 2045 1192 2045 conicto -905 2045 716 1823 conicto -527 1601 527 1154 conicto -end_ol grestore -gsave 5.957867 22.250000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 6.288067 22.250000 translate 0.035278 -0.035278 scale -start_ol -204 -201 moveto -583 -259 lineto -607 -441 714 -525 conicto -859 -637 1109 -637 conicto -1379 -637 1526 -526 conicto -1673 -415 1724 -215 conicto -1755 -93 1755 298 conicto -1500 -3 1120 -3 conicto -646 -3 387 342 conicto -128 687 128 1169 conicto -128 1501 247 1781 conicto -366 2062 591 2215 conicto -817 2368 1122 2368 conicto -1528 2368 1792 2038 conicto -1792 2304 lineto -2176 2304 lineto -2176 297 lineto -2176 -245 2066 -471 conicto -1956 -697 1717 -828 conicto -1479 -960 1130 -960 conicto -714 -960 459 -771 conicto -204 -582 204 -201 conicto -527 1198 moveto -527 740 707 530 conicto -887 320 1158 320 conicto -1427 320 1609 529 conicto -1792 738 1792 1185 conicto -1792 1611 1604 1828 conicto -1417 2045 1151 2045 conicto -891 2045 709 1831 conicto -527 1618 527 1198 conicto -end_ol grestore -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 9.250000 14.250000 m 9.250000 15.746250 l 12.107500 15.746250 l 12.107500 14.250000 l cp s -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 9.250000 16.000000 m 9.250000 17.496250 l 12.107500 17.496250 l 12.107500 16.000000 l cp s -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 9.250000 17.750000 m 9.250000 19.246250 l 12.107500 19.246250 l 12.107500 17.750000 l cp s -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 9.250000 19.500000 m 9.250000 20.996250 l 12.107500 20.996250 l 12.107500 19.500000 l cp s -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 9.250000 21.250000 m 9.250000 22.746250 l 12.107500 22.746250 l 12.107500 21.250000 l cp s -gsave 10.000000 15.250000 translate 0.035278 -0.035278 scale -start_ol -1792 0 moveto -1792 314 lineto -1521 -64 1053 -64 conicto -847 -64 668 11 conicto -489 87 402 201 conicto -316 316 280 490 conicto -256 606 256 859 conicto -256 2304 lineto -655 2304 lineto -655 1010 lineto -655 701 679 593 conicto -717 437 837 348 conicto -957 259 1135 259 conicto -1312 259 1467 350 conicto -1622 441 1686 598 conicto -1751 755 1751 1054 conicto -1751 2304 lineto -2112 2304 lineto -2112 0 lineto -1792 0 lineto -end_ol grestore -gsave 10.321733 15.250000 translate 0.035278 -0.035278 scale -start_ol -719 0 moveto -320 0 lineto -320 3200 lineto -747 3200 lineto -747 2056 lineto -984 2368 1357 2368 conicto -1563 2368 1747 2281 conicto -1931 2194 2050 2038 conicto -2169 1882 2236 1660 conicto -2304 1438 2304 1186 conicto -2304 588 2019 262 conicto -1735 -64 1337 -64 conicto -942 -64 719 279 conicto -719 0 lineto -719 1170 moveto -719 751 827 564 conicto -1003 259 1304 259 conicto -1549 259 1727 484 conicto -1905 709 1905 1155 conicto -1905 1610 1734 1827 conicto -1563 2045 1320 2045 conicto -1075 2045 897 1820 conicto -719 1595 719 1170 conicto -end_ol grestore -gsave 10.651933 15.250000 translate 0.035278 -0.035278 scale -start_ol -274 -912 moveto -231 -541 lineto -358 -576 453 -576 conicto -583 -576 660 -532 conicto -738 -489 788 -410 conicto -824 -352 906 -118 conicto -917 -86 941 -22 conicto -71 2297 lineto -490 2297 lineto -967 956 lineto -1060 701 1133 420 conicto -1200 690 1293 947 conicto -1783 2297 lineto -2171 2297 lineto -1299 -57 lineto -1159 -439 1081 -583 conicto -978 -778 844 -869 conicto -710 -960 524 -960 conicto -412 -960 274 -912 conicto -end_ol grestore -gsave 10.948267 15.250000 translate 0.035278 -0.035278 scale -start_ol -1152 399 moveto -1209 37 lineto -1034 0 895 0 conicto -670 0 545 71 conicto -421 142 370 257 conicto -320 373 320 724 conicto -320 2045 lineto -64 2045 lineto -64 2368 lineto -320 2368 lineto -320 2942 lineto -719 3177 lineto -719 2368 lineto -1152 2368 lineto -1152 2045 lineto -719 2045 lineto -719 702 lineto -719 535 742 487 conicto -765 440 816 412 conicto -868 384 963 384 conicto -1035 384 1152 399 conicto -end_ol grestore -gsave 11.109133 15.250000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 10.000000 18.750000 translate 0.035278 -0.035278 scale -start_ol -1792 0 moveto -1792 314 lineto -1521 -64 1053 -64 conicto -847 -64 668 11 conicto -489 87 402 201 conicto -316 316 280 490 conicto -256 606 256 859 conicto -256 2304 lineto -655 2304 lineto -655 1010 lineto -655 701 679 593 conicto -717 437 837 348 conicto -957 259 1135 259 conicto -1312 259 1467 350 conicto -1622 441 1686 598 conicto -1751 755 1751 1054 conicto -1751 2304 lineto -2112 2304 lineto -2112 0 lineto -1792 0 lineto -end_ol grestore -gsave 10.321733 18.750000 translate 0.035278 -0.035278 scale -start_ol -320 2752 moveto -320 3200 lineto -719 3200 lineto -719 2752 lineto -320 2752 lineto -320 0 moveto -320 2304 lineto -719 2304 lineto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 10.457200 18.750000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 10.787400 18.750000 translate 0.035278 -0.035278 scale -start_ol -1152 399 moveto -1209 37 lineto -1034 0 895 0 conicto -670 0 545 71 conicto -421 142 370 257 conicto -320 373 320 724 conicto -320 2045 lineto -64 2045 lineto -64 2368 lineto -320 2368 lineto -320 2942 lineto -719 3177 lineto -719 2368 lineto -1152 2368 lineto -1152 2045 lineto -719 2045 lineto -719 702 lineto -719 535 742 487 conicto -765 440 816 412 conicto -868 384 963 384 conicto -1035 384 1152 399 conicto -end_ol grestore -gsave 10.948267 18.750000 translate 0.035278 -0.035278 scale -start_ol -1806 840 moveto -2188 790 lineto -2125 389 1867 162 conicto -1610 -64 1234 -64 conicto -764 -64 478 248 conicto -192 560 192 1143 conicto -192 1520 315 1802 conicto -438 2085 689 2226 conicto -941 2368 1236 2368 conicto -1610 2368 1847 2176 conicto -2084 1985 2151 1633 conicto -1774 1573 lineto -1720 1808 1583 1926 conicto -1446 2045 1251 2045 conicto -958 2045 774 1831 conicto -591 1617 591 1155 conicto -591 685 768 472 conicto -945 259 1230 259 conicto -1458 259 1611 401 conicto -1765 544 1806 840 conicto -end_ol grestore -gsave 10.202400 20.502400 translate 0.035278 -0.035278 scale -start_ol -1792 0 moveto -1792 314 lineto -1521 -64 1053 -64 conicto -847 -64 668 11 conicto -489 87 402 201 conicto -316 316 280 490 conicto -256 606 256 859 conicto -256 2304 lineto -655 2304 lineto -655 1010 lineto -655 701 679 593 conicto -717 437 837 348 conicto -957 259 1135 259 conicto -1312 259 1467 350 conicto -1622 441 1686 598 conicto -1751 755 1751 1054 conicto -1751 2304 lineto -2112 2304 lineto -2112 0 lineto -1792 0 lineto -end_ol grestore -gsave 10.524133 20.502400 translate 0.035278 -0.035278 scale -start_ol -320 2752 moveto -320 3200 lineto -719 3200 lineto -719 2752 lineto -320 2752 lineto -320 0 moveto -320 2304 lineto -719 2304 lineto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 10.659600 20.502400 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 10.989800 20.502400 translate 0.035278 -0.035278 scale -start_ol -1152 399 moveto -1209 37 lineto -1034 0 895 0 conicto -670 0 545 71 conicto -421 142 370 257 conicto -320 373 320 724 conicto -320 2045 lineto -64 2045 lineto -64 2368 lineto -320 2368 lineto -320 2942 lineto -719 3177 lineto -719 2368 lineto -1152 2368 lineto -1152 2045 lineto -719 2045 lineto -719 702 lineto -719 535 742 487 conicto -765 440 816 412 conicto -868 384 963 384 conicto -1035 384 1152 399 conicto -end_ol grestore -gsave 9.452370 22.252400 translate 0.035278 -0.035278 scale -start_ol -1792 0 moveto -1792 314 lineto -1521 -64 1053 -64 conicto -847 -64 668 11 conicto -489 87 402 201 conicto -316 316 280 490 conicto -256 606 256 859 conicto -256 2304 lineto -655 2304 lineto -655 1010 lineto -655 701 679 593 conicto -717 437 837 348 conicto -957 259 1135 259 conicto -1312 259 1467 350 conicto -1622 441 1686 598 conicto -1751 755 1751 1054 conicto -1751 2304 lineto -2112 2304 lineto -2112 0 lineto -1792 0 lineto -end_ol grestore -gsave 9.774103 22.252400 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 3200 lineto -655 3200 lineto -655 0 lineto -256 0 lineto -end_ol grestore -gsave 9.901103 22.252400 translate 0.035278 -0.035278 scale -start_ol -128 1152 moveto -128 1798 479 2109 conicto -771 2368 1192 2368 conicto -1661 2368 1958 2053 conicto -2255 1739 2255 1184 conicto -2255 735 2123 477 conicto -1992 220 1740 78 conicto -1489 -64 1192 -64 conicto -715 -64 421 249 conicto -128 562 128 1152 conicto -527 1154 moveto -527 705 716 482 conicto -905 259 1192 259 conicto -1478 259 1667 483 conicto -1856 707 1856 1167 conicto -1856 1599 1666 1822 conicto -1476 2045 1192 2045 conicto -905 2045 716 1823 conicto -527 1601 527 1154 conicto -end_ol grestore -gsave 10.222837 22.252400 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 10.553037 22.252400 translate 0.035278 -0.035278 scale -start_ol -204 -201 moveto -583 -259 lineto -607 -441 714 -525 conicto -859 -637 1109 -637 conicto -1379 -637 1526 -526 conicto -1673 -415 1724 -215 conicto -1755 -93 1755 298 conicto -1500 -3 1120 -3 conicto -646 -3 387 342 conicto -128 687 128 1169 conicto -128 1501 247 1781 conicto -366 2062 591 2215 conicto -817 2368 1122 2368 conicto -1528 2368 1792 2038 conicto -1792 2304 lineto -2176 2304 lineto -2176 297 lineto -2176 -245 2066 -471 conicto -1956 -697 1717 -828 conicto -1479 -960 1130 -960 conicto -714 -960 459 -771 conicto -204 -582 204 -201 conicto -527 1198 moveto -527 740 707 530 conicto -887 320 1158 320 conicto -1427 320 1609 529 conicto -1792 738 1792 1185 conicto -1792 1611 1604 1828 conicto -1417 2045 1151 2045 conicto -891 2045 709 1831 conicto -527 1618 527 1198 conicto -end_ol grestore -gsave 10.883237 22.252400 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 3200 lineto -655 3200 lineto -655 0 lineto -256 0 lineto -end_ol grestore -gsave 11.010237 22.252400 translate 0.035278 -0.035278 scale -start_ol -128 1152 moveto -128 1798 479 2109 conicto -771 2368 1192 2368 conicto -1661 2368 1958 2053 conicto -2255 1739 2255 1184 conicto -2255 735 2123 477 conicto -1992 220 1740 78 conicto -1489 -64 1192 -64 conicto -715 -64 421 249 conicto -128 562 128 1152 conicto -527 1154 moveto -527 705 716 482 conicto -905 259 1192 259 conicto -1478 259 1667 483 conicto -1856 707 1856 1167 conicto -1856 1599 1666 1822 conicto -1476 2045 1192 2045 conicto -905 2045 716 1823 conicto -527 1601 527 1154 conicto -end_ol grestore -gsave 11.331970 22.252400 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 11.662170 22.252400 translate 0.035278 -0.035278 scale -start_ol -204 -201 moveto -583 -259 lineto -607 -441 714 -525 conicto -859 -637 1109 -637 conicto -1379 -637 1526 -526 conicto -1673 -415 1724 -215 conicto -1755 -93 1755 298 conicto -1500 -3 1120 -3 conicto -646 -3 387 342 conicto -128 687 128 1169 conicto -128 1501 247 1781 conicto -366 2062 591 2215 conicto -817 2368 1122 2368 conicto -1528 2368 1792 2038 conicto -1792 2304 lineto -2176 2304 lineto -2176 297 lineto -2176 -245 2066 -471 conicto -1956 -697 1717 -828 conicto -1479 -960 1130 -960 conicto -714 -960 459 -771 conicto -204 -582 204 -201 conicto -527 1198 moveto -527 740 707 530 conicto -887 320 1158 320 conicto -1427 320 1609 529 conicto -1792 738 1792 1185 conicto -1792 1611 1604 1828 conicto -1417 2045 1151 2045 conicto -891 2045 709 1831 conicto -527 1618 527 1198 conicto -end_ol grestore -gsave 10.000000 17.000000 translate 0.035278 -0.035278 scale -start_ol -1792 0 moveto -1792 314 lineto -1521 -64 1053 -64 conicto -847 -64 668 11 conicto -489 87 402 201 conicto -316 316 280 490 conicto -256 606 256 859 conicto -256 2304 lineto -655 2304 lineto -655 1010 lineto -655 701 679 593 conicto -717 437 837 348 conicto -957 259 1135 259 conicto -1312 259 1467 350 conicto -1622 441 1686 598 conicto -1751 755 1751 1054 conicto -1751 2304 lineto -2112 2304 lineto -2112 0 lineto -1792 0 lineto -end_ol grestore -gsave 10.321733 17.000000 translate 0.035278 -0.035278 scale -start_ol -127 682 moveto -531 744 lineto -566 509 713 384 conicto -861 259 1125 259 conicto -1391 259 1520 370 conicto -1649 481 1649 630 conicto -1649 764 1536 841 conicto -1456 893 1140 974 conicto -715 1084 542 1164 conicto -370 1244 281 1385 conicto -192 1527 192 1698 conicto -192 1853 266 1986 conicto -341 2119 469 2207 conicto -566 2274 722 2321 conicto -878 2368 1057 2368 conicto -1325 2368 1528 2289 conicto -1732 2211 1828 2076 conicto -1925 1941 1962 1716 conicto -1582 1663 lineto -1557 1843 1433 1944 conicto -1310 2045 1085 2045 conicto -819 2045 705 1955 conicto -591 1865 591 1744 conicto -591 1668 638 1606 conicto -685 1543 786 1501 conicto -844 1479 1128 1400 conicto -1537 1288 1700 1216 conicto -1863 1145 1955 1009 conicto -2048 874 2048 672 conicto -2048 475 1934 300 conicto -1820 126 1604 31 conicto -1389 -64 1116 -64 conicto -665 -64 429 124 conicto -193 313 127 682 conicto -end_ol grestore -gsave 10.618067 17.000000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 3200 lineto -719 3200 lineto -719 2064 lineto -987 2368 1400 2368 conicto -1655 2368 1842 2266 conicto -2029 2165 2110 1986 conicto -2191 1807 2191 1467 conicto -2191 0 lineto -1792 0 lineto -1792 1478 lineto -1792 1775 1667 1910 conicto -1543 2045 1316 2045 conicto -1146 2045 996 1954 conicto -846 1863 782 1707 conicto -719 1551 719 1276 conicto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 10.948267 17.000000 translate 0.035278 -0.035278 scale -start_ol -128 1152 moveto -128 1798 479 2109 conicto -771 2368 1192 2368 conicto -1661 2368 1958 2053 conicto -2255 1739 2255 1184 conicto -2255 735 2123 477 conicto -1992 220 1740 78 conicto -1489 -64 1192 -64 conicto -715 -64 421 249 conicto -128 562 128 1152 conicto -527 1154 moveto -527 705 716 482 conicto -905 259 1192 259 conicto -1478 259 1667 483 conicto -1856 707 1856 1167 conicto -1856 1599 1666 1822 conicto -1476 2045 1192 2045 conicto -905 2045 716 1823 conicto -527 1601 527 1154 conicto -end_ol grestore -gsave 11.270000 17.000000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 2304 lineto -576 2304 lineto -576 1986 lineto -709 2209 822 2288 conicto -936 2368 1072 2368 conicto -1268 2368 1471 2237 conicto -1337 1898 lineto -1195 1984 1053 1984 conicto -925 1984 823 1905 conicto -722 1827 679 1689 conicto -614 1477 614 1226 conicto -614 0 lineto -256 0 lineto -end_ol grestore -gsave 11.456267 17.000000 translate 0.035278 -0.035278 scale -start_ol -1152 399 moveto -1209 37 lineto -1034 0 895 0 conicto -670 0 545 71 conicto -421 142 370 257 conicto -320 373 320 724 conicto -320 2045 lineto -64 2045 lineto -64 2368 lineto -320 2368 lineto -320 2942 lineto -719 3177 lineto -719 2368 lineto -1152 2368 lineto -1152 2045 lineto -719 2045 lineto -719 702 lineto -719 535 742 487 conicto -765 440 816 412 conicto -868 384 963 384 conicto -1035 384 1152 399 conicto -end_ol grestore -gsave 14.600000 16.500000 translate 0.035278 -0.035278 scale -start_ol -127 682 moveto -531 744 lineto -566 509 713 384 conicto -861 259 1125 259 conicto -1391 259 1520 370 conicto -1649 481 1649 630 conicto -1649 764 1536 841 conicto -1456 893 1140 974 conicto -715 1084 542 1164 conicto -370 1244 281 1385 conicto -192 1527 192 1698 conicto -192 1853 266 1986 conicto -341 2119 469 2207 conicto -566 2274 722 2321 conicto -878 2368 1057 2368 conicto -1325 2368 1528 2289 conicto -1732 2211 1828 2076 conicto -1925 1941 1962 1716 conicto -1582 1663 lineto -1557 1843 1433 1944 conicto -1310 2045 1085 2045 conicto -819 2045 705 1955 conicto -591 1865 591 1744 conicto -591 1668 638 1606 conicto -685 1543 786 1501 conicto -844 1479 1128 1400 conicto -1537 1288 1700 1216 conicto -1863 1145 1955 1009 conicto -2048 874 2048 672 conicto -2048 475 1934 300 conicto -1820 126 1604 31 conicto -1389 -64 1116 -64 conicto -665 -64 429 124 conicto -193 313 127 682 conicto -end_ol grestore -gsave 14.896333 16.500000 translate 0.035278 -0.035278 scale -start_ol -320 2752 moveto -320 3200 lineto -719 3200 lineto -719 2752 lineto -320 2752 lineto -320 0 moveto -320 2304 lineto -719 2304 lineto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 15.031800 16.500000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 15.362000 16.500000 translate 0.035278 -0.035278 scale -start_ol -204 -201 moveto -583 -259 lineto -607 -441 714 -525 conicto -859 -637 1109 -637 conicto -1379 -637 1526 -526 conicto -1673 -415 1724 -215 conicto -1755 -93 1755 298 conicto -1500 -3 1120 -3 conicto -646 -3 387 342 conicto -128 687 128 1169 conicto -128 1501 247 1781 conicto -366 2062 591 2215 conicto -817 2368 1122 2368 conicto -1528 2368 1792 2038 conicto -1792 2304 lineto -2176 2304 lineto -2176 297 lineto -2176 -245 2066 -471 conicto -1956 -697 1717 -828 conicto -1479 -960 1130 -960 conicto -714 -960 459 -771 conicto -204 -582 204 -201 conicto -527 1198 moveto -527 740 707 530 conicto -887 320 1158 320 conicto -1427 320 1609 529 conicto -1792 738 1792 1185 conicto -1792 1611 1604 1828 conicto -1417 2045 1151 2045 conicto -891 2045 709 1831 conicto -527 1618 527 1198 conicto -end_ol grestore -gsave 15.692200 16.500000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 3200 lineto -655 3200 lineto -655 0 lineto -256 0 lineto -end_ol grestore -gsave 15.819200 16.500000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 14.700000 18.250000 translate 0.035278 -0.035278 scale -start_ol -384 0 moveto -384 1984 lineto -64 1984 lineto -64 2307 lineto -384 2307 lineto -384 2552 lineto -384 2785 425 2889 conicto -481 3029 622 3116 conicto -764 3203 1018 3203 conicto -1182 3203 1380 3168 conicto -1322 2858 lineto -1201 2880 1096 2880 conicto -925 2880 854 2804 conicto -783 2728 783 2520 conicto -783 2307 lineto -1216 2307 lineto -1216 1984 lineto -783 1984 lineto -783 0 lineto -384 0 lineto -end_ol grestore -gsave 14.860867 18.250000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 3200 lineto -655 3200 lineto -655 0 lineto -256 0 lineto -end_ol grestore -gsave 14.987867 18.250000 translate 0.035278 -0.035278 scale -start_ol -128 1152 moveto -128 1798 479 2109 conicto -771 2368 1192 2368 conicto -1661 2368 1958 2053 conicto -2255 1739 2255 1184 conicto -2255 735 2123 477 conicto -1992 220 1740 78 conicto -1489 -64 1192 -64 conicto -715 -64 421 249 conicto -128 562 128 1152 conicto -527 1154 moveto -527 705 716 482 conicto -905 259 1192 259 conicto -1478 259 1667 483 conicto -1856 707 1856 1167 conicto -1856 1599 1666 1822 conicto -1476 2045 1192 2045 conicto -905 2045 716 1823 conicto -527 1601 527 1154 conicto -end_ol grestore -gsave 15.309600 18.250000 translate 0.035278 -0.035278 scale -start_ol -1746 289 moveto -1529 102 1331 19 conicto -1133 -64 905 -64 conicto -530 -64 329 124 conicto -128 312 128 605 conicto -128 777 203 919 conicto -278 1062 399 1148 conicto -521 1234 672 1278 conicto -785 1309 1017 1337 conicto -1490 1394 1713 1472 conicto -1713 1553 1713 1575 conicto -1713 1814 1603 1912 conicto -1453 2045 1158 2045 conicto -884 2045 753 1948 conicto -622 1851 560 1605 conicto -192 1657 lineto -243 1902 362 2053 conicto -481 2204 705 2286 conicto -930 2368 1225 2368 conicto -1519 2368 1702 2298 conicto -1886 2229 1972 2124 conicto -2058 2019 2093 1858 conicto -2112 1758 2112 1496 conicto -2112 973 lineto -2112 427 2137 281 conicto -2162 135 2235 0 conicto -1825 0 lineto -1763 123 1746 289 conicto -1713 1165 moveto -1501 1078 1076 1017 conicto -835 982 735 938 conicto -635 895 581 811 conicto -527 727 527 624 conicto -527 468 645 363 conicto -763 259 991 259 conicto -1216 259 1391 358 conicto -1567 457 1650 630 conicto -1713 762 1713 1021 conicto -1713 1165 lineto -end_ol grestore -gsave 15.631333 18.250000 translate 0.035278 -0.035278 scale -start_ol -1152 399 moveto -1209 37 lineto -1034 0 895 0 conicto -670 0 545 71 conicto -421 142 370 257 conicto -320 373 320 724 conicto -320 2045 lineto -64 2045 lineto -64 2368 lineto -320 2368 lineto -320 2942 lineto -719 3177 lineto -719 2368 lineto -1152 2368 lineto -1152 2045 lineto -719 2045 lineto -719 702 lineto -719 535 742 487 conicto -765 440 816 412 conicto -868 384 963 384 conicto -1035 384 1152 399 conicto -end_ol grestore -gsave 15.792200 18.250000 translate 0.035278 -0.035278 scale -start_ol --64 -896 moveto --64 -640 lineto -2496 -640 lineto -2496 -896 lineto --64 -896 lineto -end_ol grestore -gsave 14.650000 19.950000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 3200 lineto -655 3200 lineto -655 0 lineto -256 0 lineto -end_ol grestore -gsave 14.777000 19.950000 translate 0.035278 -0.035278 scale -start_ol -128 1152 moveto -128 1798 479 2109 conicto -771 2368 1192 2368 conicto -1661 2368 1958 2053 conicto -2255 1739 2255 1184 conicto -2255 735 2123 477 conicto -1992 220 1740 78 conicto -1489 -64 1192 -64 conicto -715 -64 421 249 conicto -128 562 128 1152 conicto -527 1154 moveto -527 705 716 482 conicto -905 259 1192 259 conicto -1478 259 1667 483 conicto -1856 707 1856 1167 conicto -1856 1599 1666 1822 conicto -1476 2045 1192 2045 conicto -905 2045 716 1823 conicto -527 1601 527 1154 conicto -end_ol grestore -gsave 15.098733 19.950000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 15.428933 19.950000 translate 0.035278 -0.035278 scale -start_ol -204 -201 moveto -583 -259 lineto -607 -441 714 -525 conicto -859 -637 1109 -637 conicto -1379 -637 1526 -526 conicto -1673 -415 1724 -215 conicto -1755 -93 1755 298 conicto -1500 -3 1120 -3 conicto -646 -3 387 342 conicto -128 687 128 1169 conicto -128 1501 247 1781 conicto -366 2062 591 2215 conicto -817 2368 1122 2368 conicto -1528 2368 1792 2038 conicto -1792 2304 lineto -2176 2304 lineto -2176 297 lineto -2176 -245 2066 -471 conicto -1956 -697 1717 -828 conicto -1479 -960 1130 -960 conicto -714 -960 459 -771 conicto -204 -582 204 -201 conicto -527 1198 moveto -527 740 707 530 conicto -887 320 1158 320 conicto -1427 320 1609 529 conicto -1792 738 1792 1185 conicto -1792 1611 1604 1828 conicto -1417 2045 1151 2045 conicto -891 2045 709 1831 conicto -527 1618 527 1198 conicto -end_ol grestore -gsave 15.759133 19.950000 translate 0.035278 -0.035278 scale -start_ol -384 0 moveto -384 1984 lineto -64 1984 lineto -64 2307 lineto -384 2307 lineto -384 2552 lineto -384 2785 425 2889 conicto -481 3029 622 3116 conicto -764 3203 1018 3203 conicto -1182 3203 1380 3168 conicto -1322 2858 lineto -1201 2880 1096 2880 conicto -925 2880 854 2804 conicto -783 2728 783 2520 conicto -783 2307 lineto -1216 2307 lineto -1216 1984 lineto -783 1984 lineto -783 0 lineto -384 0 lineto -end_ol grestore -gsave 15.920000 19.950000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 3200 lineto -655 3200 lineto -655 0 lineto -256 0 lineto -end_ol grestore -gsave 16.047000 19.950000 translate 0.035278 -0.035278 scale -start_ol -128 1152 moveto -128 1798 479 2109 conicto -771 2368 1192 2368 conicto -1661 2368 1958 2053 conicto -2255 1739 2255 1184 conicto -2255 735 2123 477 conicto -1992 220 1740 78 conicto -1489 -64 1192 -64 conicto -715 -64 421 249 conicto -128 562 128 1152 conicto -527 1154 moveto -527 705 716 482 conicto -905 259 1192 259 conicto -1478 259 1667 483 conicto -1856 707 1856 1167 conicto -1856 1599 1666 1822 conicto -1476 2045 1192 2045 conicto -905 2045 716 1823 conicto -527 1601 527 1154 conicto -end_ol grestore -gsave 16.368733 19.950000 translate 0.035278 -0.035278 scale -start_ol -1746 289 moveto -1529 102 1331 19 conicto -1133 -64 905 -64 conicto -530 -64 329 124 conicto -128 312 128 605 conicto -128 777 203 919 conicto -278 1062 399 1148 conicto -521 1234 672 1278 conicto -785 1309 1017 1337 conicto -1490 1394 1713 1472 conicto -1713 1553 1713 1575 conicto -1713 1814 1603 1912 conicto -1453 2045 1158 2045 conicto -884 2045 753 1948 conicto -622 1851 560 1605 conicto -192 1657 lineto -243 1902 362 2053 conicto -481 2204 705 2286 conicto -930 2368 1225 2368 conicto -1519 2368 1702 2298 conicto -1886 2229 1972 2124 conicto -2058 2019 2093 1858 conicto -2112 1758 2112 1496 conicto -2112 973 lineto -2112 427 2137 281 conicto -2162 135 2235 0 conicto -1825 0 lineto -1763 123 1746 289 conicto -1713 1165 moveto -1501 1078 1076 1017 conicto -835 982 735 938 conicto -635 895 581 811 conicto -527 727 527 624 conicto -527 468 645 363 conicto -763 259 991 259 conicto -1216 259 1391 358 conicto -1567 457 1650 630 conicto -1713 762 1713 1021 conicto -1713 1165 lineto -end_ol grestore -gsave 16.690467 19.950000 translate 0.035278 -0.035278 scale -start_ol -1152 399 moveto -1209 37 lineto -1034 0 895 0 conicto -670 0 545 71 conicto -421 142 370 257 conicto -320 373 320 724 conicto -320 2045 lineto -64 2045 lineto -64 2368 lineto -320 2368 lineto -320 2942 lineto -719 3177 lineto -719 2368 lineto -1152 2368 lineto -1152 2045 lineto -719 2045 lineto -719 702 lineto -719 535 742 487 conicto -765 440 816 412 conicto -868 384 963 384 conicto -1035 384 1152 399 conicto -end_ol grestore -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 14.998100 l 3.513197 14.998100 l s -[] 0 sd -0 slj -0 slc -n 3.888197 14.998100 m 3.388197 15.248100 l 3.513197 14.998100 l 3.388197 14.748100 l ef -n 3.888197 14.998100 m 3.388197 15.248100 l 3.513197 14.998100 l 3.388197 14.748100 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 16.748100 l 3.513197 16.748100 l s -[] 0 sd -0 slj -0 slc -n 3.888197 16.748100 m 3.388197 16.998100 l 3.513197 16.748100 l 3.388197 16.498100 l ef -n 3.888197 16.748100 m 3.388197 16.998100 l 3.513197 16.748100 l 3.388197 16.498100 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 18.498100 l 3.513197 18.498100 l s -[] 0 sd -0 slj -0 slc -n 3.888197 18.498100 m 3.388197 18.748100 l 3.513197 18.498100 l 3.388197 18.248100 l ef -n 3.888197 18.498100 m 3.388197 18.748100 l 3.513197 18.498100 l 3.388197 18.248100 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 20.248100 l 3.513197 20.248100 l s -[] 0 sd -0 slj -0 slc -n 3.888197 20.248100 m 3.388197 20.498100 l 3.513197 20.248100 l 3.388197 19.998100 l ef -n 3.888197 20.248100 m 3.388197 20.498100 l 3.513197 20.248100 l 3.388197 19.998100 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 4.876190 13.002400 m 4.876190 14.002400 l 3.000000 14.002400 l 3.000000 21.998100 l 3.513197 21.998100 l s -[] 0 sd -0 slj -0 slc -n 3.888197 21.998100 m 3.388197 22.248100 l 3.513197 21.998100 l 3.388197 21.748100 l ef -n 3.888197 21.998100 m 3.388197 22.248100 l 3.513197 21.998100 l 3.388197 21.748100 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 14.998100 l 8.763197 14.998100 l s -[] 0 sd -0 slj -0 slc -n 9.138197 14.998100 m 8.638197 15.248100 l 8.763197 14.998100 l 8.638197 14.748100 l ef -n 9.138197 14.998100 m 8.638197 15.248100 l 8.763197 14.998100 l 8.638197 14.748100 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 16.748100 l 8.763197 16.748100 l s -[] 0 sd -0 slj -0 slc -n 9.138197 16.748100 m 8.638197 16.998100 l 8.763197 16.748100 l 8.638197 16.498100 l ef -n 9.138197 16.748100 m 8.638197 16.998100 l 8.763197 16.748100 l 8.638197 16.498100 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 18.498100 l 8.763197 18.498100 l s -[] 0 sd -0 slj -0 slc -n 9.138197 18.498100 m 8.638197 18.748100 l 8.763197 18.498100 l 8.638197 18.248100 l ef -n 9.138197 18.498100 m 8.638197 18.748100 l 8.763197 18.498100 l 8.638197 18.248100 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 20.248100 l 8.763197 20.248100 l s -[] 0 sd -0 slj -0 slc -n 9.138197 20.248100 m 8.638197 20.498100 l 8.763197 20.248100 l 8.638197 19.998100 l ef -n 9.138197 20.248100 m 8.638197 20.498100 l 8.763197 20.248100 l 8.638197 19.998100 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 9.926190 13.002400 m 9.926190 14.002400 l 8.250000 14.002400 l 8.250000 21.998100 l 8.763197 21.998100 l s -[] 0 sd -0 slj -0 slc -n 9.138197 21.998100 m 8.638197 22.248100 l 8.763197 21.998100 l 8.638197 21.748100 l ef -n 9.138197 21.998100 m 8.638197 22.248100 l 8.763197 21.998100 l 8.638197 21.748100 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 14.178700 13.000000 m 14.178700 14.000000 l 13.178700 14.000000 l 13.178700 16.248100 l 13.713197 16.248100 l s -[] 0 sd -0 slj -0 slc -n 14.088197 16.248100 m 13.588197 16.498100 l 13.713197 16.248100 l 13.588197 15.998100 l ef -n 14.088197 16.248100 m 13.588197 16.498100 l 13.713197 16.248100 l 13.588197 15.998100 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 14.178700 13.000000 m 14.178700 14.000000 l 13.178700 14.000000 l 13.178700 17.998100 l 13.713197 17.998100 l s -[] 0 sd -0 slj -0 slc -n 14.088197 17.998100 m 13.588197 18.248100 l 13.713197 17.998100 l 13.588197 17.748100 l ef -n 14.088197 17.998100 m 13.588197 18.248100 l 13.713197 17.998100 l 13.588197 17.748100 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 14.178700 13.000000 m 14.178700 14.000000 l 13.178700 14.000000 l 13.178700 19.748100 l 13.713197 19.748100 l s -[] 0 sd -0 slj -0 slc -n 14.088197 19.748100 m 13.588197 19.998100 l 13.713197 19.748100 l 13.588197 19.498100 l ef -n 14.088197 19.748100 m 13.588197 19.998100 l 13.713197 19.748100 l 13.588197 19.498100 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 18.963700 13.052400 m 18.963700 14.052400 l 17.963700 14.052400 l 17.963700 16.248100 l 18.713197 16.248100 l s -[] 0 sd -0 slj -0 slc -n 19.088197 16.248100 m 18.588197 16.498100 l 18.713197 16.248100 l 18.588197 15.998100 l ef -n 19.088197 16.248100 m 18.588197 16.498100 l 18.713197 16.248100 l 18.588197 15.998100 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 18.963700 13.052400 m 18.963700 14.052400 l 17.963700 14.052400 l 17.963700 17.998100 l 18.713197 17.998100 l s -[] 0 sd -0 slj -0 slc -n 19.088197 17.998100 m 18.588197 18.248100 l 18.713197 17.998100 l 18.588197 17.748100 l ef -n 19.088197 17.998100 m 18.588197 18.248100 l 18.713197 17.998100 l 18.588197 17.748100 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 18.963700 13.052400 m 18.963700 14.052400 l 17.963700 14.052400 l 17.963700 19.748100 l 18.713197 19.748100 l s -[] 0 sd -0 slj -0 slc -n 19.088197 19.748100 m 18.588197 19.998100 l 18.713197 19.748100 l 18.588197 19.498100 l ef -n 19.088197 19.748100 m 18.588197 19.998100 l 18.713197 19.748100 l 18.588197 19.498100 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 22.928800 11.000000 m 22.928800 12.498100 l 24.013197 12.498100 l s -[] 0 sd -0 slj -0 slc -n 24.388197 12.498100 m 23.888197 12.748100 l 24.013197 12.498100 l 23.888197 12.248100 l ef -n 24.388197 12.498100 m 23.888197 12.748100 l 24.013197 12.498100 l 23.888197 12.248100 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 22.928800 11.000000 m 22.928800 14.248100 l 24.013197 14.248100 l s -[] 0 sd -0 slj -0 slc -n 24.388197 14.248100 m 23.888197 14.498100 l 24.013197 14.248100 l 23.888197 13.998100 l ef -n 24.388197 14.248100 m 23.888197 14.498100 l 24.013197 14.248100 l 23.888197 13.998100 l cp s -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 24.500000 11.750000 m 24.500000 13.246250 l 27.357500 13.246250 l 27.357500 11.750000 l cp s -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 24.500000 13.500000 m 24.500000 14.996250 l 27.357500 14.996250 l 27.357500 13.500000 l cp s -gsave 24.800000 14.500000 translate 0.035278 -0.035278 scale -start_ol -1792 0 moveto -1792 314 lineto -1521 -64 1053 -64 conicto -847 -64 668 11 conicto -489 87 402 201 conicto -316 316 280 490 conicto -256 606 256 859 conicto -256 2304 lineto -655 2304 lineto -655 1010 lineto -655 701 679 593 conicto -717 437 837 348 conicto -957 259 1135 259 conicto -1312 259 1467 350 conicto -1622 441 1686 598 conicto -1751 755 1751 1054 conicto -1751 2304 lineto -2112 2304 lineto -2112 0 lineto -1792 0 lineto -end_ol grestore -gsave 25.121733 14.500000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 25.451933 14.500000 translate 0.035278 -0.035278 scale -start_ol -320 2752 moveto -320 3200 lineto -719 3200 lineto -719 2752 lineto -320 2752 lineto -320 0 moveto -320 2304 lineto -719 2304 lineto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 25.587400 14.500000 translate 0.035278 -0.035278 scale -start_ol -1806 840 moveto -2188 790 lineto -2125 389 1867 162 conicto -1610 -64 1234 -64 conicto -764 -64 478 248 conicto -192 560 192 1143 conicto -192 1520 315 1802 conicto -438 2085 689 2226 conicto -941 2368 1236 2368 conicto -1610 2368 1847 2176 conicto -2084 1985 2151 1633 conicto -1774 1573 lineto -1720 1808 1583 1926 conicto -1446 2045 1251 2045 conicto -958 2045 774 1831 conicto -591 1617 591 1155 conicto -591 685 768 472 conicto -945 259 1230 259 conicto -1458 259 1611 401 conicto -1765 544 1806 840 conicto -end_ol grestore -gsave 25.883733 14.500000 translate 0.035278 -0.035278 scale -start_ol -128 1152 moveto -128 1798 479 2109 conicto -771 2368 1192 2368 conicto -1661 2368 1958 2053 conicto -2255 1739 2255 1184 conicto -2255 735 2123 477 conicto -1992 220 1740 78 conicto -1489 -64 1192 -64 conicto -715 -64 421 249 conicto -128 562 128 1152 conicto -527 1154 moveto -527 705 716 482 conicto -905 259 1192 259 conicto -1478 259 1667 483 conicto -1856 707 1856 1167 conicto -1856 1599 1666 1822 conicto -1476 2045 1192 2045 conicto -905 2045 716 1823 conicto -527 1601 527 1154 conicto -end_ol grestore -gsave 26.205467 14.500000 translate 0.035278 -0.035278 scale -start_ol -1752 0 moveto -1752 281 lineto -1534 -64 1112 -64 conicto -838 -64 609 89 conicto -380 243 254 517 conicto -128 792 128 1149 conicto -128 1498 242 1782 conicto -357 2066 585 2217 conicto -813 2368 1095 2368 conicto -1302 2368 1463 2280 conicto -1625 2192 1726 2052 conicto -1726 3200 lineto -2127 3200 lineto -2127 0 lineto -1752 0 lineto -527 1150 moveto -527 703 711 481 conicto -896 259 1146 259 conicto -1399 259 1575 471 conicto -1752 683 1752 1118 conicto -1752 1597 1572 1821 conicto -1392 2045 1129 2045 conicto -872 2045 699 1829 conicto -527 1614 527 1150 conicto -end_ol grestore -gsave 26.527200 14.500000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 26.857400 14.500000 translate 0.035278 -0.035278 scale -start_ol --64 -896 moveto --64 -640 lineto -2496 -640 lineto -2496 -896 lineto --64 -896 lineto -end_ol grestore -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 19.200000 15.500000 m 19.200000 16.996250 l 22.057500 16.996250 l 22.057500 15.500000 l cp s -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 19.200000 17.250000 m 19.200000 18.746250 l 22.057500 18.746250 l 22.057500 17.250000 l cp s -0.095250 slw -[] 0 sd -[] 0 sd -0 slj -n 19.200000 19.000000 m 19.200000 20.496250 l 22.700000 20.496250 l 22.700000 19.000000 l cp s -gsave 19.650000 16.500000 translate 0.035278 -0.035278 scale -start_ol -1806 840 moveto -2188 790 lineto -2125 389 1867 162 conicto -1610 -64 1234 -64 conicto -764 -64 478 248 conicto -192 560 192 1143 conicto -192 1520 315 1802 conicto -438 2085 689 2226 conicto -941 2368 1236 2368 conicto -1610 2368 1847 2176 conicto -2084 1985 2151 1633 conicto -1774 1573 lineto -1720 1808 1583 1926 conicto -1446 2045 1251 2045 conicto -958 2045 774 1831 conicto -591 1617 591 1155 conicto -591 685 768 472 conicto -945 259 1230 259 conicto -1458 259 1611 401 conicto -1765 544 1806 840 conicto -end_ol grestore -gsave 19.946333 16.500000 translate 0.035278 -0.035278 scale -start_ol -127 682 moveto -531 744 lineto -566 509 713 384 conicto -861 259 1125 259 conicto -1391 259 1520 370 conicto -1649 481 1649 630 conicto -1649 764 1536 841 conicto -1456 893 1140 974 conicto -715 1084 542 1164 conicto -370 1244 281 1385 conicto -192 1527 192 1698 conicto -192 1853 266 1986 conicto -341 2119 469 2207 conicto -566 2274 722 2321 conicto -878 2368 1057 2368 conicto -1325 2368 1528 2289 conicto -1732 2211 1828 2076 conicto -1925 1941 1962 1716 conicto -1582 1663 lineto -1557 1843 1433 1944 conicto -1310 2045 1085 2045 conicto -819 2045 705 1955 conicto -591 1865 591 1744 conicto -591 1668 638 1606 conicto -685 1543 786 1501 conicto -844 1479 1128 1400 conicto -1537 1288 1700 1216 conicto -1863 1145 1955 1009 conicto -2048 874 2048 672 conicto -2048 475 1934 300 conicto -1820 126 1604 31 conicto -1389 -64 1116 -64 conicto -665 -64 429 124 conicto -193 313 127 682 conicto -end_ol grestore -gsave 20.242667 16.500000 translate 0.035278 -0.035278 scale -start_ol -320 2752 moveto -320 3200 lineto -719 3200 lineto -719 2752 lineto -320 2752 lineto -320 0 moveto -320 2304 lineto -719 2304 lineto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 20.378133 16.500000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 20.708333 16.500000 translate 0.035278 -0.035278 scale -start_ol -204 -201 moveto -583 -259 lineto -607 -441 714 -525 conicto -859 -637 1109 -637 conicto -1379 -637 1526 -526 conicto -1673 -415 1724 -215 conicto -1755 -93 1755 298 conicto -1500 -3 1120 -3 conicto -646 -3 387 342 conicto -128 687 128 1169 conicto -128 1501 247 1781 conicto -366 2062 591 2215 conicto -817 2368 1122 2368 conicto -1528 2368 1792 2038 conicto -1792 2304 lineto -2176 2304 lineto -2176 297 lineto -2176 -245 2066 -471 conicto -1956 -697 1717 -828 conicto -1479 -960 1130 -960 conicto -714 -960 459 -771 conicto -204 -582 204 -201 conicto -527 1198 moveto -527 740 707 530 conicto -887 320 1158 320 conicto -1427 320 1609 529 conicto -1792 738 1792 1185 conicto -1792 1611 1604 1828 conicto -1417 2045 1151 2045 conicto -891 2045 709 1831 conicto -527 1618 527 1198 conicto -end_ol grestore -gsave 21.038533 16.500000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 3200 lineto -655 3200 lineto -655 0 lineto -256 0 lineto -end_ol grestore -gsave 21.165533 16.500000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 19.529300 18.250000 translate 0.035278 -0.035278 scale -start_ol -1806 840 moveto -2188 790 lineto -2125 389 1867 162 conicto -1610 -64 1234 -64 conicto -764 -64 478 248 conicto -192 560 192 1143 conicto -192 1520 315 1802 conicto -438 2085 689 2226 conicto -941 2368 1236 2368 conicto -1610 2368 1847 2176 conicto -2084 1985 2151 1633 conicto -1774 1573 lineto -1720 1808 1583 1926 conicto -1446 2045 1251 2045 conicto -958 2045 774 1831 conicto -591 1617 591 1155 conicto -591 685 768 472 conicto -945 259 1230 259 conicto -1458 259 1611 401 conicto -1765 544 1806 840 conicto -end_ol grestore -gsave 19.825633 18.250000 translate 0.035278 -0.035278 scale -start_ol -128 1152 moveto -128 1798 479 2109 conicto -771 2368 1192 2368 conicto -1661 2368 1958 2053 conicto -2255 1739 2255 1184 conicto -2255 735 2123 477 conicto -1992 220 1740 78 conicto -1489 -64 1192 -64 conicto -715 -64 421 249 conicto -128 562 128 1152 conicto -527 1154 moveto -527 705 716 482 conicto -905 259 1192 259 conicto -1478 259 1667 483 conicto -1856 707 1856 1167 conicto -1856 1599 1666 1822 conicto -1476 2045 1192 2045 conicto -905 2045 716 1823 conicto -527 1601 527 1154 conicto -end_ol grestore -gsave 20.147367 18.250000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2008 lineto -749 2165 930 2266 conicto -1112 2368 1344 2368 conicto -1602 2368 1767 2263 conicto -1932 2159 2001 1979 conicto -2280 2368 2728 2368 conicto -3079 2368 3267 2177 conicto -3456 1986 3456 1589 conicto -3456 0 lineto -3057 0 lineto -3057 1471 lineto -3057 1709 3018 1813 conicto -2979 1918 2877 1981 conicto -2775 2045 2638 2045 conicto -2390 2045 2226 1881 conicto -2063 1717 2063 1357 conicto -2063 0 lineto -1664 0 lineto -1664 1517 lineto -1664 1781 1568 1913 conicto -1472 2045 1254 2045 conicto -1088 2045 947 1957 conicto -807 1869 744 1699 conicto -681 1530 681 1212 conicto -681 0 lineto -320 0 lineto -end_ol grestore -gsave 20.638433 18.250000 translate 0.035278 -0.035278 scale -start_ol -320 -896 moveto -320 2304 lineto -704 2304 lineto -704 1999 lineto -827 2178 981 2273 conicto -1136 2368 1355 2368 conicto -1641 2368 1860 2214 conicto -2080 2060 2192 1781 conicto -2304 1502 2304 1169 conicto -2304 812 2181 526 conicto -2058 241 1822 88 conicto -1586 -64 1327 -64 conicto -1137 -64 986 19 conicto -835 102 739 228 conicto -739 -896 lineto -320 -896 lineto -704 1132 moveto -704 686 877 472 conicto -1050 259 1297 259 conicto -1548 259 1726 480 conicto -1905 701 1905 1164 conicto -1905 1606 1731 1825 conicto -1557 2045 1314 2045 conicto -1074 2045 889 1811 conicto -704 1577 704 1132 conicto -end_ol grestore -gsave 20.968633 18.250000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 3200 lineto -655 3200 lineto -655 0 lineto -256 0 lineto -end_ol grestore -gsave 21.095633 18.250000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 21.425833 18.250000 translate 0.035278 -0.035278 scale -start_ol -32 0 moveto -870 1198 lineto -95 2304 lineto -581 2304 lineto -932 1763 lineto -1032 1610 1092 1506 conicto -1187 1649 1267 1759 conicto -1653 2304 lineto -2117 2304 lineto -1325 1219 lineto -2178 0 lineto -1701 0 lineto -1230 716 lineto -1105 909 lineto -503 0 lineto -32 0 lineto -end_ol grestore -gsave 21.722167 18.250000 translate 0.035278 -0.035278 scale -start_ol --64 -896 moveto --64 -640 lineto -2496 -640 lineto -2496 -896 lineto --64 -896 lineto -end_ol grestore -gsave 19.550000 20.000000 translate 0.035278 -0.035278 scale -start_ol -1806 840 moveto -2188 790 lineto -2125 389 1867 162 conicto -1610 -64 1234 -64 conicto -764 -64 478 248 conicto -192 560 192 1143 conicto -192 1520 315 1802 conicto -438 2085 689 2226 conicto -941 2368 1236 2368 conicto -1610 2368 1847 2176 conicto -2084 1985 2151 1633 conicto -1774 1573 lineto -1720 1808 1583 1926 conicto -1446 2045 1251 2045 conicto -958 2045 774 1831 conicto -591 1617 591 1155 conicto -591 685 768 472 conicto -945 259 1230 259 conicto -1458 259 1611 401 conicto -1765 544 1806 840 conicto -end_ol grestore -gsave 19.846333 20.000000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 3200 lineto -655 3200 lineto -655 0 lineto -256 0 lineto -end_ol grestore -gsave 19.973333 20.000000 translate 0.035278 -0.035278 scale -start_ol -128 1152 moveto -128 1798 479 2109 conicto -771 2368 1192 2368 conicto -1661 2368 1958 2053 conicto -2255 1739 2255 1184 conicto -2255 735 2123 477 conicto -1992 220 1740 78 conicto -1489 -64 1192 -64 conicto -715 -64 421 249 conicto -128 562 128 1152 conicto -527 1154 moveto -527 705 716 482 conicto -905 259 1192 259 conicto -1478 259 1667 483 conicto -1856 707 1856 1167 conicto -1856 1599 1666 1822 conicto -1476 2045 1192 2045 conicto -905 2045 716 1823 conicto -527 1601 527 1154 conicto -end_ol grestore -gsave 20.295067 20.000000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 20.625267 20.000000 translate 0.035278 -0.035278 scale -start_ol -204 -201 moveto -583 -259 lineto -607 -441 714 -525 conicto -859 -637 1109 -637 conicto -1379 -637 1526 -526 conicto -1673 -415 1724 -215 conicto -1755 -93 1755 298 conicto -1500 -3 1120 -3 conicto -646 -3 387 342 conicto -128 687 128 1169 conicto -128 1501 247 1781 conicto -366 2062 591 2215 conicto -817 2368 1122 2368 conicto -1528 2368 1792 2038 conicto -1792 2304 lineto -2176 2304 lineto -2176 297 lineto -2176 -245 2066 -471 conicto -1956 -697 1717 -828 conicto -1479 -960 1130 -960 conicto -714 -960 459 -771 conicto -204 -582 204 -201 conicto -527 1198 moveto -527 740 707 530 conicto -887 320 1158 320 conicto -1427 320 1609 529 conicto -1792 738 1792 1185 conicto -1792 1611 1604 1828 conicto -1417 2045 1151 2045 conicto -891 2045 709 1831 conicto -527 1618 527 1198 conicto -end_ol grestore -gsave 20.955467 20.000000 translate 0.035278 -0.035278 scale -start_ol -384 0 moveto -384 1984 lineto -64 1984 lineto -64 2307 lineto -384 2307 lineto -384 2552 lineto -384 2785 425 2889 conicto -481 3029 622 3116 conicto -764 3203 1018 3203 conicto -1182 3203 1380 3168 conicto -1322 2858 lineto -1201 2880 1096 2880 conicto -925 2880 854 2804 conicto -783 2728 783 2520 conicto -783 2307 lineto -1216 2307 lineto -1216 1984 lineto -783 1984 lineto -783 0 lineto -384 0 lineto -end_ol grestore -gsave 21.116333 20.000000 translate 0.035278 -0.035278 scale -start_ol -256 0 moveto -256 3200 lineto -655 3200 lineto -655 0 lineto -256 0 lineto -end_ol grestore -gsave 21.243333 20.000000 translate 0.035278 -0.035278 scale -start_ol -128 1152 moveto -128 1798 479 2109 conicto -771 2368 1192 2368 conicto -1661 2368 1958 2053 conicto -2255 1739 2255 1184 conicto -2255 735 2123 477 conicto -1992 220 1740 78 conicto -1489 -64 1192 -64 conicto -715 -64 421 249 conicto -128 562 128 1152 conicto -527 1154 moveto -527 705 716 482 conicto -905 259 1192 259 conicto -1478 259 1667 483 conicto -1856 707 1856 1167 conicto -1856 1599 1666 1822 conicto -1476 2045 1192 2045 conicto -905 2045 716 1823 conicto -527 1601 527 1154 conicto -end_ol grestore -gsave 21.565067 20.000000 translate 0.035278 -0.035278 scale -start_ol -1746 289 moveto -1529 102 1331 19 conicto -1133 -64 905 -64 conicto -530 -64 329 124 conicto -128 312 128 605 conicto -128 777 203 919 conicto -278 1062 399 1148 conicto -521 1234 672 1278 conicto -785 1309 1017 1337 conicto -1490 1394 1713 1472 conicto -1713 1553 1713 1575 conicto -1713 1814 1603 1912 conicto -1453 2045 1158 2045 conicto -884 2045 753 1948 conicto -622 1851 560 1605 conicto -192 1657 lineto -243 1902 362 2053 conicto -481 2204 705 2286 conicto -930 2368 1225 2368 conicto -1519 2368 1702 2298 conicto -1886 2229 1972 2124 conicto -2058 2019 2093 1858 conicto -2112 1758 2112 1496 conicto -2112 973 lineto -2112 427 2137 281 conicto -2162 135 2235 0 conicto -1825 0 lineto -1763 123 1746 289 conicto -1713 1165 moveto -1501 1078 1076 1017 conicto -835 982 735 938 conicto -635 895 581 811 conicto -527 727 527 624 conicto -527 468 645 363 conicto -763 259 991 259 conicto -1216 259 1391 358 conicto -1567 457 1650 630 conicto -1713 762 1713 1021 conicto -1713 1165 lineto -end_ol grestore -gsave 21.886800 20.000000 translate 0.035278 -0.035278 scale -start_ol -1152 399 moveto -1209 37 lineto -1034 0 895 0 conicto -670 0 545 71 conicto -421 142 370 257 conicto -320 373 320 724 conicto -320 2045 lineto -64 2045 lineto -64 2368 lineto -320 2368 lineto -320 2942 lineto -719 3177 lineto -719 2368 lineto -1152 2368 lineto -1152 2045 lineto -719 2045 lineto -719 702 lineto -719 535 742 487 conicto -765 440 816 412 conicto -868 384 963 384 conicto -1035 384 1152 399 conicto -end_ol grestore -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 6.000000 10.250000 m 4.876190 10.250000 l 4.876190 11.013197 l s -[] 0 sd -0 slj -0 slc -n 4.876190 11.388197 m 4.626190 10.888197 l 4.876190 11.013197 l 5.126190 10.888197 l ef -n 4.876190 11.388197 m 4.626190 10.888197 l 4.876190 11.013197 l 5.126190 10.888197 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 8.750000 10.250000 m 9.926190 10.250000 l 9.926190 11.013197 l s -[] 0 sd -0 slj -0 slc -n 9.926190 11.388197 m 9.676190 10.888197 l 9.926190 11.013197 l 10.176190 10.888197 l ef -n 9.926190 11.388197 m 9.676190 10.888197 l 9.926190 11.013197 l 10.176190 10.888197 l cp s -0.095250 slw -[1.000000] 0 sd -[0.127000] 0 sd -0 slj -n 15.202400 9.535000 m 15.202400 11.102375 l 17.752400 11.102375 l 17.752400 9.535000 l cp s -gsave 15.555000 10.535000 translate 0.035278 -0.035278 scale -start_ol -320 2752 moveto -320 3200 lineto -719 3200 lineto -719 2752 lineto -320 2752 lineto -320 0 moveto -320 2304 lineto -719 2304 lineto -719 0 lineto -320 0 lineto -end_ol grestore -gsave 15.690467 10.535000 translate 0.035278 -0.035278 scale -start_ol -320 0 moveto -320 2304 lineto -640 2304 lineto -640 2003 lineto -898 2368 1387 2368 conicto -1600 2368 1778 2292 conicto -1956 2217 2045 2095 conicto -2134 1973 2168 1805 conicto -2191 1696 2191 1424 conicto -2191 0 lineto -1792 0 lineto -1792 1421 lineto -1792 1662 1746 1782 conicto -1700 1903 1581 1974 conicto -1463 2045 1303 2045 conicto -1048 2045 863 1884 conicto -679 1724 679 1275 conicto -679 0 lineto -320 0 lineto -end_ol grestore -gsave 16.020667 10.535000 translate 0.035278 -0.035278 scale -start_ol -1877 721 moveto -2278 672 lineto -2184 322 1928 129 conicto -1673 -64 1277 -64 conicto -777 -64 484 250 conicto -192 564 192 1132 conicto -192 1719 487 2043 conicto -782 2368 1254 2368 conicto -1710 2368 1999 2043 conicto -2289 1719 2289 1132 conicto -2289 1096 2289 1024 conicto -591 1024 lineto -591 654 784 456 conicto -978 259 1268 259 conicto -1484 259 1636 369 conicto -1788 479 1877 721 conicto -610 1347 moveto -1881 1347 lineto -1855 1654 1734 1807 conicto -1549 2045 1251 2045 conicto -979 2045 794 1855 conicto -610 1665 610 1347 conicto -end_ol grestore -gsave 16.350867 10.535000 translate 0.035278 -0.035278 scale -start_ol -32 0 moveto -870 1198 lineto -95 2304 lineto -581 2304 lineto -932 1763 lineto -1032 1610 1092 1506 conicto -1187 1649 1267 1759 conicto -1653 2304 lineto -2117 2304 lineto -1325 1219 lineto -2178 0 lineto -1701 0 lineto -1230 716 lineto -1105 909 lineto -503 0 lineto -32 0 lineto -end_ol grestore -gsave 16.647200 10.535000 translate 0.035278 -0.035278 scale -start_ol -1746 289 moveto -1529 102 1331 19 conicto -1133 -64 905 -64 conicto -530 -64 329 124 conicto -128 312 128 605 conicto -128 777 203 919 conicto -278 1062 399 1148 conicto -521 1234 672 1278 conicto -785 1309 1017 1337 conicto -1490 1394 1713 1472 conicto -1713 1553 1713 1575 conicto -1713 1814 1603 1912 conicto -1453 2045 1158 2045 conicto -884 2045 753 1948 conicto -622 1851 560 1605 conicto -192 1657 lineto -243 1902 362 2053 conicto -481 2204 705 2286 conicto -930 2368 1225 2368 conicto -1519 2368 1702 2298 conicto -1886 2229 1972 2124 conicto -2058 2019 2093 1858 conicto -2112 1758 2112 1496 conicto -2112 973 lineto -2112 427 2137 281 conicto -2162 135 2235 0 conicto -1825 0 lineto -1763 123 1746 289 conicto -1713 1165 moveto -1501 1078 1076 1017 conicto -835 982 735 938 conicto -635 895 581 811 conicto -527 727 527 624 conicto -527 468 645 363 conicto -763 259 991 259 conicto -1216 259 1391 358 conicto -1567 457 1650 630 conicto -1713 762 1713 1021 conicto -1713 1165 lineto -end_ol grestore -gsave 16.968933 10.535000 translate 0.035278 -0.035278 scale -start_ol -1806 840 moveto -2188 790 lineto -2125 389 1867 162 conicto -1610 -64 1234 -64 conicto -764 -64 478 248 conicto -192 560 192 1143 conicto -192 1520 315 1802 conicto -438 2085 689 2226 conicto -941 2368 1236 2368 conicto -1610 2368 1847 2176 conicto -2084 1985 2151 1633 conicto -1774 1573 lineto -1720 1808 1583 1926 conicto -1446 2045 1251 2045 conicto -958 2045 774 1831 conicto -591 1617 591 1155 conicto -591 685 768 472 conicto -945 259 1230 259 conicto -1458 259 1611 401 conicto -1765 544 1806 840 conicto -end_ol grestore -gsave 17.265267 10.535000 translate 0.035278 -0.035278 scale -start_ol -1152 399 moveto -1209 37 lineto -1034 0 895 0 conicto -670 0 545 71 conicto -421 142 370 257 conicto -320 373 320 724 conicto -320 2045 lineto -64 2045 lineto -64 2368 lineto -320 2368 lineto -320 2942 lineto -719 3177 lineto -719 2368 lineto -1152 2368 lineto -1152 2045 lineto -719 2045 lineto -719 702 lineto -719 535 742 487 conicto -765 440 816 412 conicto -868 384 963 384 conicto -1035 384 1152 399 conicto -end_ol grestore -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 13.928800 7.500000 m 13.928800 8.517500 l 16.477400 8.517500 l 16.477400 9.048197 l s -[] 0 sd -0 slj -0 slc -n 16.477400 9.423197 m 16.227400 8.923197 l 16.477400 9.048197 l 16.727400 8.923197 l ef -n 16.477400 9.423197 m 16.227400 8.923197 l 16.477400 9.048197 l 16.727400 8.923197 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 15.202400 10.318700 m 14.178700 10.318700 l 14.178700 11.013197 l s -[] 0 sd -0 slj -0 slc -n 14.178700 11.388197 m 13.928700 10.888197 l 14.178700 11.013197 l 14.428700 10.888197 l ef -n 14.178700 11.388197 m 13.928700 10.888197 l 14.178700 11.013197 l 14.428700 10.888197 l cp s -0.100000 slw -[] 0 sd -[] 0 sd -0 slj -0 slc -n 17.752400 10.318700 m 18.963700 10.318700 l 18.963700 11.013197 l s -[] 0 sd -0 slj -0 slc -n 18.963700 11.388197 m 18.713700 10.888197 l 18.963700 11.013197 l 19.213700 10.888197 l ef -n 18.963700 11.388197 m 18.713700 10.888197 l 18.963700 11.013197 l 19.213700 10.888197 l cp s -gsave 25.352400 12.802400 translate 0.035278 -0.035278 scale -start_ol -2034 2424 moveto -2034 2034 lineto -1849 2123 1665 2167 conicto -1482 2212 1285 2212 conicto -985 2212 835 2118 conicto -685 2025 685 1839 conicto -685 1697 791 1615 conicto -898 1534 1219 1462 conicto -1355 1430 lineto -1785 1337 1971 1166 conicto -2157 995 2157 690 conicto -2157 342 1882 139 conicto -1608 -64 1128 -64 conicto -928 -64 710 -24 conicto -493 15 253 94 conicto -253 519 lineto -483 402 701 343 conicto -920 284 1133 284 conicto -1420 284 1574 383 conicto -1728 482 1728 661 conicto -1728 829 1618 917 conicto -1509 1006 1138 1088 conicto -999 1121 lineto -622 1201 439 1367 conicto -256 1533 256 1823 conicto -256 2176 509 2368 conicto -762 2560 1226 2560 conicto -1457 2560 1660 2526 conicto -1863 2492 2034 2424 conicto -end_ol grestore -gsave 25.665667 12.802400 translate 0.035278 -0.035278 scale -start_ol -832 3213 moveto -832 2524 lineto -1664 2524 lineto -1664 2176 lineto -832 2176 lineto -832 825 lineto -832 521 914 434 conicto -997 348 1249 348 conicto -1664 348 lineto -1664 0 lineto -1241 0 lineto -765 0 584 179 conicto -403 359 403 826 conicto -403 2176 lineto -128 2176 lineto -128 2524 lineto -403 2524 lineto -403 3213 lineto -832 3213 lineto -end_ol grestore -gsave 25.902733 12.802400 translate 0.035278 -0.035278 scale -start_ol -1853 2133 moveto -1787 2174 1706 2193 conicto -1626 2212 1529 2212 conicto -1183 2212 998 1983 conicto -813 1755 813 1328 conicto -813 0 lineto -384 0 lineto -384 2496 lineto -813 2496 lineto -813 2129 lineto -941 2347 1146 2453 conicto -1352 2560 1647 2560 conicto -1689 2560 1740 2553 conicto -1791 2547 1853 2536 conicto -1853 2133 lineto -end_ol grestore -gsave 26.148267 12.802400 translate 0.035278 -0.035278 scale -start_ol -2304 -740 moveto -2304 -1088 lineto --64 -1088 lineto --64 -740 lineto -2304 -740 lineto -end_ol grestore -showpage diff --git a/numpy/doc/numpybook/Figures/hierarchy.fig b/numpy/doc/numpybook/Figures/hierarchy.fig Binary files differdeleted file mode 100644 index 178555da0..000000000 --- a/numpy/doc/numpybook/Figures/hierarchy.fig +++ /dev/null diff --git a/numpy/doc/numpybook/Figures/hierarchy.pdf b/numpy/doc/numpybook/Figures/hierarchy.pdf Binary files differdeleted file mode 100644 index 7ab56ee97..000000000 --- a/numpy/doc/numpybook/Figures/hierarchy.pdf +++ /dev/null diff --git a/numpy/doc/numpybook/Figures/hierarchy.png b/numpy/doc/numpybook/Figures/hierarchy.png Binary files differdeleted file mode 100644 index 50dd7474d..000000000 --- a/numpy/doc/numpybook/Figures/hierarchy.png +++ /dev/null diff --git a/numpy/doc/numpybook/Figures/threefundamental.eps b/numpy/doc/numpybook/Figures/threefundamental.eps deleted file mode 100644 index 22eedc4f1..000000000 --- a/numpy/doc/numpybook/Figures/threefundamental.eps +++ /dev/null @@ -1,246 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: threefundamental.fig -%%Creator: fig2dev Version 3.2 Patchlevel 4 -%%CreationDate: Mon Jan 16 15:40:51 2006 -%%For: oliphant@den.local.net (Travis Oliphant) -%%BoundingBox: 0 0 438 162 -%%Magnification: 1.0000 -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def - -end -save -newpath 0 162 moveto 0 0 lineto 438 0 lineto 438 162 lineto closepath clip newpath --30.8 237.8 translate -1 -1 scale - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/reencdict 12 dict def /ReEncode { reencdict begin -/newcodesandnames exch def /newfontname exch def /basefontname exch def -/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def -basefontdict { exch dup /FID ne { dup /Encoding eq -{ exch dup length array copy newfont 3 1 roll put } -{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall -newfont /FontName newfontname put newcodesandnames aload pop -128 1 255 { newfont /Encoding get exch /.notdef put } for -newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat -newfontname newfont definefont pop end } def -/isovec [ -8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde -8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis -8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron -8#220 /dotlessi 8#230 /oe 8#231 /OE -8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling -8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis -8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot -8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus -8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph -8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine -8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf -8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute -8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring -8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute -8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute -8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve -8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply -8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex -8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave -8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring -8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute -8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute -8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve -8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide -8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex -8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def -/Helvetica-Bold /Helvetica-Bold-iso isovec ReEncode -/Times-Bold /Times-Bold-iso isovec ReEncode -/Helvetica /Helvetica-iso isovec ReEncode -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06000 0.06000 sc -% -% Fig objects follow -% -% -% here starts figure with depth 50 -% Polyline -7.500 slw -n 1950 2850 m 4350 2850 l 4350 3450 l 1950 3450 l - cp gs col0 s gr -% Polyline -n 2550 2850 m - 2550 3450 l gs col0 s gr -% Polyline -n 3150 2850 m - 3150 3450 l gs col0 s gr -% Polyline -n 3750 2850 m - 3750 3450 l gs col0 s gr -% Polyline -n 5100 2850 m 7500 2850 l 7500 3450 l 5100 3450 l - cp gs col0 s gr -% Polyline -n 5700 2850 m - 5700 3450 l gs col0 s gr -% Polyline -n 6300 2850 m - 6300 3450 l gs col0 s gr -% Polyline -n 6900 2850 m - 6900 3450 l gs col0 s gr -% Polyline -n 630 2700 m 525 2700 525 3495 105 arcto 4 {pop} repeat - 525 3600 7695 3600 105 arcto 4 {pop} repeat - 7800 3600 7800 2805 105 arcto 4 {pop} repeat - 7800 2700 630 2700 105 arcto 4 {pop} repeat - cp gs col0 s gr -% Polyline -n 675 2850 m 1725 2850 l 1725 3450 l 675 3450 l - cp gs col0 s gr -% Polyline -45.000 slw -n 5700 2850 m 6300 2850 l 6300 3450 l 5700 3450 l - cp gs col0 s gr -% Polyline -n 5700 1725 m 6300 1725 l 6300 2325 l 5700 2325 l - cp gs col0 s gr -% Polyline -7.500 slw -n 5655 1275 m 5550 1275 5550 2370 105 arcto 4 {pop} repeat - 5550 2475 6345 2475 105 arcto 4 {pop} repeat - 6450 2475 6450 1380 105 arcto 4 {pop} repeat - 6450 1275 5655 1275 105 arcto 4 {pop} repeat - cp gs col0 s gr -% Polyline -n 5700 1350 m 6300 1350 l 6300 1575 l 5700 1575 l - cp gs col0 s gr -% Polyline -gs clippath -1590 1905 m 1590 1845 l 1405 1845 l 1555 1875 l 1405 1905 l cp -eoclip -n 900 2850 m 900 1875 l - 1575 1875 l gs col0 s gr gr - -% arrowhead -n 1405 1905 m 1555 1875 l 1405 1845 l 1435 1875 l 1405 1905 l - cp gs 0.00 setgray ef gr col0 s -% Polyline -gs clippath -5565 1830 m 5565 1770 l 5380 1770 l 5530 1800 l 5380 1830 l cp -eoclip -n 3375 1800 m - 5550 1800 l gs col0 s gr gr - -% arrowhead -n 5380 1830 m 5530 1800 l 5380 1770 l 5410 1800 l 5380 1830 l - cp gs 0.00 setgray ef gr col0 s -% Polyline -gs clippath -6030 2310 m 5970 2310 l 5970 2495 l 6000 2345 l 6030 2495 l cp -eoclip -n 6000 2850 m - 6000 2325 l gs col0 s gr gr - -% arrowhead -n 6030 2495 m 6000 2345 l 5970 2495 l 6000 2465 l 6030 2495 l - cp gs 0.00 setgray ef gr col0 s -% Polyline -n 1680 1575 m 1575 1575 1575 1995 105 arcto 4 {pop} repeat - 1575 2100 3270 2100 105 arcto 4 {pop} repeat - 3375 2100 3375 1680 105 arcto 4 {pop} repeat - 3375 1575 1680 1575 105 arcto 4 {pop} repeat - cp gs col0 s gr -/Helvetica-Bold-iso ff 210.00 scf sf -825 3225 m -gs 1 -1 sc (header) col0 sh gr -/Times-Bold-iso ff 600.00 scf sf -4500 3225 m -gs 1 -1 sc (...) col0 sh gr -/Helvetica-Bold-iso ff 210.00 scf sf -3600 3900 m -gs 1 -1 sc (ndarray) col0 sh gr -/Helvetica-Bold-iso ff 210.00 scf sf -6600 2175 m -gs 1 -1 sc (scalar) col0 sh gr -/Helvetica-Bold-iso ff 210.00 scf sf -6600 1950 m -gs 1 -1 sc (array) col0 sh gr -/Helvetica-iso ff 180.00 scf sf -5775 1500 m -gs 1 -1 sc (head) col0 sh gr -/Helvetica-Bold-iso ff 210.00 scf sf -1950 1875 m -gs 1 -1 sc (data-type) col0 sh gr -% here ends figure; -$F2psEnd -rs -showpage diff --git a/numpy/doc/numpybook/Figures/threefundamental.fig b/numpy/doc/numpybook/Figures/threefundamental.fig deleted file mode 100644 index 79760c410..000000000 --- a/numpy/doc/numpybook/Figures/threefundamental.fig +++ /dev/null @@ -1,57 +0,0 @@ -#FIG 3.2 -Landscape -Center -Inches -Letter -100.00 -Single --2 -1200 2 -6 1950 2850 4350 3450 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 1950 2850 4350 2850 4350 3450 1950 3450 1950 2850 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 2550 2850 2550 3450 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 3150 2850 3150 3450 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 3750 2850 3750 3450 --6 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 5100 2850 7500 2850 7500 3450 5100 3450 5100 2850 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 5700 2850 5700 3450 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 6300 2850 6300 3450 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 6900 2850 6900 3450 -2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 - 7800 3600 7800 2700 525 2700 525 3600 7800 3600 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 675 2850 1725 2850 1725 3450 675 3450 675 2850 -2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 5700 2850 6300 2850 6300 3450 5700 3450 5700 2850 -2 2 0 4 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 5700 1725 6300 1725 6300 2325 5700 2325 5700 1725 -2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 - 6450 2475 6450 1275 5550 1275 5550 2475 6450 2475 -2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 5700 1350 6300 1350 6300 1575 5700 1575 5700 1350 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 3 - 2 1 1.00 60.00 120.00 - 900 2850 900 1875 1575 1875 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 2 1 1.00 60.00 120.00 - 3375 1800 5550 1800 -2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2 - 2 1 1.00 60.00 120.00 - 6000 2850 6000 2325 -2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5 - 3375 2100 3375 1575 1575 1575 1575 2100 3375 2100 -4 0 0 50 -1 18 14 0.0000 4 165 720 825 3225 header\001 -4 0 0 50 -1 2 40 0.0000 4 105 450 4500 3225 ...\001 -4 0 0 50 -1 18 14 0.0000 4 210 810 3600 3900 ndarray\001 -4 0 0 50 -1 18 14 0.0000 4 165 630 6600 2175 scalar\001 -4 0 0 50 -1 18 14 0.0000 4 165 540 6600 1950 array\001 -4 0 0 50 -1 16 12 0.0000 4 135 420 5775 1500 head\001 -4 0 0 50 -1 18 14 0.0000 4 210 975 1950 1875 data-type\001 diff --git a/numpy/doc/numpybook/Figures/threefundamental.png b/numpy/doc/numpybook/Figures/threefundamental.png Binary files differdeleted file mode 100644 index f4d4d950d..000000000 --- a/numpy/doc/numpybook/Figures/threefundamental.png +++ /dev/null diff --git a/numpy/doc/numpybook/capi.lyx b/numpy/doc/numpybook/capi.lyx deleted file mode 100644 index 04522d13d..000000000 --- a/numpy/doc/numpybook/capi.lyx +++ /dev/null @@ -1,24232 +0,0 @@ -#LyX 1.5.1 created this file. For more info see http://www.lyx.org/ -\lyxformat 276 -\begin_document -\begin_header -\textclass mybook -\language english -\inputencoding auto -\font_roman default -\font_sans default -\font_typewriter default -\font_default_family default -\font_sc false -\font_osf false -\font_sf_scale 100 -\font_tt_scale 100 -\graphics default -\paperfontsize default -\spacing onehalf -\papersize default -\use_geometry true -\use_amsmath 2 -\use_esint 0 -\cite_engine basic -\use_bibtopic false -\paperorientation portrait -\leftmargin 1in -\topmargin 1in -\rightmargin 1in -\bottommargin 1in -\secnumdepth 3 -\tocdepth 3 -\paragraph_separation indent -\defskip medskip -\quotes_language english -\papercolumns 1 -\papersides 1 -\paperpagestyle default -\tracking_changes false -\output_changes false -\author "" -\author "" -\end_header - -\begin_body - -\begin_layout Part -C-API -\end_layout - -\begin_layout Chapter -New Python Types and C-Structures -\end_layout - -\begin_layout Quotation -Beware of the man who won't be bothered with details. -\end_layout - -\begin_layout Right Address ---- -\emph on -William Feather, Sr. -\end_layout - -\begin_layout Quotation -The truth is out there. -\end_layout - -\begin_layout Right Address ----Chris Carter, The X Files -\end_layout - -\begin_layout Standard -NumPy provides a C-API to enable users to extend the system and get access - to the array object for use in other routines. - The best way to truly understand the C-API is to read the source code. - If you are unfamiliar with (C) source code, however, this can be a daunting - experience at first. - Be assured that the task becomes easier with practice, and you may be surprised - at how simple the C-code can be to understand. - Even if you don't think you can write C-code from scratch, it is much easier - to understand and modify already-written source code then create it -\emph on -de novo -\emph default -. - -\end_layout - -\begin_layout Standard -Python extensions are especially straightforward to understand because they - all have a very similar structure. - Admittedly, NumPy is not a trivial extension to Python, and may take a - little more snooping to grasp. - This is especially true because of the code-generation techniques, which - simplify maintenance of very similar code, but can make the code a little - less readable to beginners. - Still, with a little persistence, the code can be opened to your understanding. - It is my hope, that this guide to the C-API can assist in the process of - becoming familiar with the compiled-level work that can be done with NumPy - in order to squeeze that last bit of necessary speed out of your code. -\end_layout - -\begin_layout Standard -Several new types are defined in the C-code. - Most of these are accessible from Python, but a few are not exposed due - to their limited use. - Every new Python type has an associated PyObject * with an internal structure - that includes a pointer to a -\begin_inset Quotes eld -\end_inset - -method table -\begin_inset Quotes erd -\end_inset - - that defines how the new object behaves in Python. - When you receive a Python object into C code, you always get a pointer - to a -\family typewriter -PyObject -\family default - structure. - Because a -\family typewriter -PyObject -\family default - structure is very generic and defines only -\family typewriter -PyObject_HEAD -\family default -, by itself it is not very interesting. - However, different objects contain more details after the -\family typewriter -PyObject_HEAD -\family default - (but you have to cast to the correct type to access them --- or use accessor - functions or macros). - -\end_layout - -\begin_layout Section -New Python Types Defined -\end_layout - -\begin_layout Standard -Python types are the functional equivalent in C of classes in Python. - By constructing a new Python type you make available a new object for Python. - The ndarray object is an example of a new type defined in C. - New types are defined in C by two basic steps: -\end_layout - -\begin_layout Enumerate -creating a C-structure (usually named Py<Name>Object) that is binary-compatible - with the -\family typewriter -PyObject -\family default - structure itself but holds the additional information needed for that particula -r object; -\end_layout - -\begin_layout Enumerate -populating the -\family typewriter -PyTypeObject -\family default - table (pointed to by the ob_type member of the -\family typewriter -PyObject -\family default - structure) with pointers to functions that implement the desired behavior - for the type. - -\end_layout - -\begin_layout Standard -Instead of special method names which define behavior for Python classes, - there are -\begin_inset Quotes eld -\end_inset - -function tables -\begin_inset Quotes erd -\end_inset - - which point to functions that implement the desired results. - Since Python 2.2, the PyTypeObject itself has become dynamic which allows - C types that can be -\begin_inset Quotes eld -\end_inset - -sub-typed -\begin_inset Quotes erd -\end_inset - - from other C-types in C, and sub-classed in Python. - The children types inherit the attributes and methods from their parent(s). - -\end_layout - -\begin_layout Standard -There are two major new types: the ndarray ( -\family typewriter -PyArray_Type -\family default -) and the ufunc ( -\family typewriter -PyUFunc_Type -\family default -). - Additional types play a supportive role: the -\family typewriter -PyArrayIter_Type -\family default -, the -\family typewriter -PyArrayMultiIter_Type -\family default -, and the -\family typewriter -PyArrayDescr_Type -\family default -. - The -\family typewriter -PyArrayIter_Type -\family default - is the type for a flat iterator for an ndarray (the object that is returned - when getting the flat attribute). - The -\family typewriter -PyArrayMultiIter_Type -\family default - is the type of the object returned when calling -\family typewriter -broadcast -\family default -(). - It handles iteration and broadcasting over a collection of nested sequences. - Also, the -\family typewriter -PyArrayDescr_Type -\family default - is the data-type-descriptor type whose instances describe the data. - Finally, there are 21 new scalar-array types which are new Python scalars - corresponding to each of the fundamental data types available for arrays. - An additional 10 other types are place holders that allow the array scalars - to fit into a hierarchy of actual Python types. - -\end_layout - -\begin_layout Subsection -PyArray_Type -\end_layout - -\begin_layout Standard -The Python type of the ndarray is -\family typewriter -PyArray_Type -\family default - -\begin_inset LatexCommand index -name "PyArray\\_Type" - -\end_inset - -. - In C, every ndarray is a pointer to a -\family typewriter -PyArrayObject -\family default - structure. - The ob_type member of this structure contains a pointer to the -\family typewriter -PyArray_Type -\family default - typeobject. - -\end_layout - -\begin_layout Standard -The -\family typewriter -PyArrayObject -\family default - C-structure contains all of the required information for an array. - All instances of an ndarray (and its subclasses) will have this structure. - For future compatibility, these structure members should normally be accessed - using the provided macros. - If you need a shorter name, then you can make use of -\family typewriter -NPY_AO -\family default - which is defined to be equivalent to -\family typewriter -PyArrayObject -\family default -. -\end_layout - -\begin_layout LyX-Code -typedef struct PyArrayObject { -\end_layout - -\begin_layout LyX-Code - PyObject_HEAD -\end_layout - -\begin_layout LyX-Code - -\emph on -char * -\emph default -data; -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - nd; -\end_layout - -\begin_layout LyX-Code - -\emph on -npy_intp * -\emph default -dimensions; -\end_layout - -\begin_layout LyX-Code - -\emph on -npy_intp * -\emph default -strides; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyObject * -\emph default -base; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_Descr * -\emph default -descr; -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - flags; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyObject * -\emph default -weakreflist; -\end_layout - -\begin_layout LyX-Code -} -\emph on -PyArrayObject -\emph default -; -\end_layout - -\begin_layout Description -PyObject_HEAD This is needed by all Python objects. - It consists of (at least) a reference count member ( -\family typewriter -ob_refcnt -\family default -) and a pointer to the typeobject ( -\family typewriter -ob_type -\family default -). - (Other elements may also be present if Python was compiled with special - options see Include/object.h in the Python source tree for more information). - The ob_type member points to a Python type object. - -\end_layout - -\begin_layout Description -data A pointer to the first element of the array. - This pointer can (and normally should) be recast to the data type of the - array. - -\end_layout - -\begin_layout Description -nd An integer providing the number of dimensions for this array. - When nd is 0, the array is sometimes called a rank-0 array. - Such arrays have undefined dimensions and strides and cannot be accessed. - -\family typewriter -NPY_MAXDIMS -\family default - is the largest number of dimensions for any array. -\end_layout - -\begin_layout Description -dimensions An array of integers providing the shape in each dimension as - long as nd -\begin_inset Formula $\geq$ -\end_inset - -1. - The integer is always large enough to hold a pointer on the platform, so - the dimension size is only limited by memory. - -\end_layout - -\begin_layout Description -strides An array of integers providing for each dimension the number of - bytes that must be skipped to get to the next element in that dimension. - -\end_layout - -\begin_layout Description -base This member is used to hold a pointer to another Python object that - is related to this array. - There are two use cases: 1) If this array does not own its own memory, - then base points to the Python object that owns it (perhaps another array - object), 2) If this array has the -\family typewriter -NPY_UPDATEIFCOPY -\family default - flag set, then this array is a working copy of a -\begin_inset Quotes eld -\end_inset - -misbehaved -\begin_inset Quotes erd -\end_inset - - array. - As soon as this array is deleted, the array pointed to by base will be - updated with the contents of this array. - -\end_layout - -\begin_layout Description -descr A pointer to a data-type descriptor object (see below). - The data-type descriptor object is an instance of a new built-in type which - allows a generic description of memory. - There is a descriptor structure for each data type supported. - This descriptor structure contains useful information about the type as - well as a pointer to a table of function pointers to implement specific - functionality. -\end_layout - -\begin_layout Description -flags Flags indicating how the memory pointed to by data is to be interpreted. - Possible flags are -\family typewriter -NPY_C_CONTIGUOUS -\family default -, -\family typewriter -NPY_F_CONTIGUOUS -\family default -, -\family typewriter -NPY_OWNDATA -\family default -, -\family typewriter -NPY_ALIGNED -\family default -, -\family typewriter -NPY_WRITEABLE -\family default -, and -\family typewriter -NPY_UPDATEIFCOPY -\family default -. -\end_layout - -\begin_layout Description -weakreflist This member allows array objects to have weak references (using - the weakref module). - -\end_layout - -\begin_layout Subsection -PyArrayDescr_Type -\end_layout - -\begin_layout Standard -The -\family typewriter -PyArrayDescr_Type -\family default - -\begin_inset LatexCommand index -name "PyArrayDescr\\_Type" - -\end_inset - - is the built-in type of the data-type-descriptor objects used to describe - how the bytes comprising the array are to be interpreted. - There are 21 statically-defined -\family typewriter -PyArray_Descr -\family default - objects for the built-in data-types. - While these participate in reference counting, their reference count should - never reach zero. - There is also a dynamic table of user-defined -\family typewriter -PyArray_Descr -\family default - objects that is also maintained. - Once a data-type-descriptor object is -\begin_inset Quotes eld -\end_inset - -registered -\begin_inset Quotes erd -\end_inset - - it should never be deallocated either. - The function -\family typewriter -PyArray_DescrFromType -\family default -(...) can be used to retrieve a -\family typewriter -PyArray_Descr -\family default - object from an enumerated type-number (either built-in or user-defined). - The format of the structure that lies at the heart of the -\family typewriter -PyArrayDescr_Type -\family default - is. - -\end_layout - -\begin_layout LyX-Code -typedef struct { -\end_layout - -\begin_layout LyX-Code - PyObject_HEAD -\end_layout - -\begin_layout LyX-Code - -\emph on -PyTypeObject * -\emph default -typeobj; -\end_layout - -\begin_layout LyX-Code - -\emph on -char -\emph default - kind; -\end_layout - -\begin_layout LyX-Code - -\emph on -char -\emph default - type; -\end_layout - -\begin_layout LyX-Code - -\emph on -char -\emph default - byteorder; -\end_layout - -\begin_layout LyX-Code - -\emph on -char -\emph default - hasobject; -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - type_num; -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - elsize; -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - alignment; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_ArrayDescr -\emph default - *subarray; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyObject -\emph default - *fields; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_ArrFuncs -\emph default - *f; -\end_layout - -\begin_layout LyX-Code -} -\emph on -PyArray_Descr -\emph default -; -\end_layout - -\begin_layout Description -typeobj Pointer to a typeobject that is the corresponding Python type for - the elements of this array. - For the builtin types, this points to the corresponding array scalar. - For user-defined types, this should point to a user-defined typeobject. - This typeobject can either inherit from array scalars or not. - If it does not inherit from array scalars, then the -\family typewriter -NPY_USE_GETITEM -\family default - and -\family typewriter -NPY_USE_SETITEM -\family default - flags should be set in the -\family typewriter -hasobject -\family default - flag. -\end_layout - -\begin_layout Description -kind A character code indicating the kind of array (using the array interface - typestring notation). - A 'b' represents Boolean, a 'i' represents signed integer, a 'u' represents - unsigned integer, 'f' represents floating point, 'c' represents complex - floating point, 'S' represents 8-bit character string, 'U' represents 32-bit/ch -aracter unicode string, and 'V' repesents arbitrary. - -\end_layout - -\begin_layout Description -type A traditional character code indicating the data type. - -\end_layout - -\begin_layout Description -byteorder A character indicating the byte-order: '>' (big-endian), '<' (little-e -ndian), '=' (native), '|' (irrelevant, ignore). - All builtin data-types have byteorder '='. - -\end_layout - -\begin_layout Description -hasobject A data-type bit-flag that determines if the data-type exhibits - object-array like behavior. - Each bit in this member is a flag which are named as: -\end_layout - -\begin_deeper -\begin_layout Description -NPY_ITEM_REFCOUNT\InsetSpace ~ -(NPY_ITEM_HASOBJECT) Indicates that items of this data-type - must be reference counted (using -\family typewriter -Py_INCREF -\family default - and -\family typewriter -Py_DECREF -\family default -). - -\end_layout - -\begin_layout Description -NPY_ITEM_LISTPICKLE Indicates arrays of this data-type must be converted - to a list before pickling. - -\end_layout - -\begin_layout Description -NPY_ITEM_IS_POINTER Indicates the item is a pointer to some other data-type -\end_layout - -\begin_layout Description -NPY_NEEDS_INIT Indicates memory for this data-type must be initialized (set - to 0) on creation. - -\end_layout - -\begin_layout Description -NPY_NEEDS_PYAPI Indicates this data-type requires the Python C-API during - access (so don't give up the GIL if array access is going to be needed). - -\end_layout - -\begin_layout Description -NPY_USE_GETITEM On array access use the -\family typewriter -f->getitem -\family default - function pointer instead of the standard conversion to an array scalar. - Must use if you don't define an array scalar to go along with the data-type. - -\end_layout - -\begin_layout Description -NPY_USE_SETITEM When creating a 0-d array from an array scalar use -\family typewriter -f->setitem -\family default - instead of the standard copy from an array scalar. - Must use if you don't define an array scalar to go along with the data-type. - -\end_layout - -\begin_layout Description -NPY_FROM_FIELDS The bits that are inherited for the parent data-type if - these bits are set in any field of the data-type. - Currently ( -\family typewriter -NPY_NEEDS_INIT -\family default - | -\family typewriter -NPY_LIST_PICKLE -\family default - | -\family typewriter -NPY_ITEM_REFCOUNT -\family default - | -\family typewriter -NPY_NEEDS_PYAPI -\family default -). - -\end_layout - -\begin_layout Description -NPY_OBJECT_DTYPE_FLAGS Bits set for the object data-type: ( -\family typewriter -NPY_LIST_PICKLE -\family default - | -\family typewriter -NPY_USE_GETITEM -\family default - | -\family typewriter -NPY_ITEM_IS_POINTER -\family default - | -\family typewriter -NPY_REFCOUNT -\family default - | -\family typewriter -NPY_NEEDS_INIT -\family default - | -\family typewriter -NPY_NEEDS_PYAPI -\family default -). - -\end_layout - -\begin_layout Description -PyDataType_FLAGCHK ( -\family typewriter -PyArray_Descr* -\family default - dtype, -\family typewriter -int -\family default - flags) Return true if all the given flags are set for the data-type object. - -\end_layout - -\begin_layout Description -PyDataType_REFCHK ( -\family typewriter -PyArray_Descr* -\family default - dtype) Equivalent to -\family typewriter -PyDataType_FLAGCHK -\family default -( -\emph on -dtype -\emph default -, -\family typewriter -NPY_ITEM_REFCOUNT -\family default -). -\end_layout - -\end_deeper -\begin_layout Description -type_num A number that uniquely identifies the data type. - For new data-types, this number is assigned when the data-type is registered. -\end_layout - -\begin_layout Description -elsize For data types that are always the same size (such as long), this - holds the size of the data type. - For flexible data types where different arrays can have a different elementsize -, this should be 0. -\end_layout - -\begin_layout Description -alignment A number providing alignment information for this data type. - Specifically, it shows how far from the start of a 2-element structure - (whose first element is a -\family typewriter -char -\family default -), the compiler places an item of this type: -\family typewriter -offsetof(struct {char c; type v;}, v) -\end_layout - -\begin_layout Description -subarray If this is non- -\family typewriter -NULL -\family default -, then this data-type descriptor is a C-style contiguous array of another - data-type descriptor. - In other-words, each element that this descriptor describes is actually - an array of some other base descriptor. - This is most useful as the data-type descriptor for a field in another - data-type descriptor. - The fields member should be -\family typewriter -NULL -\family default - if this is non- -\family typewriter -NULL -\family default - (the fields member of the base descriptor can be non- -\family typewriter -NULL -\family default - however). - The -\family typewriter -PyArray_ArrayDescr -\family default - structure is defined using -\end_layout - -\begin_layout LyX-Code -typedef struct { -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_Descr -\emph default - *base; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyObject -\emph default - *shape; -\end_layout - -\begin_layout LyX-Code -} -\emph on -PyArray_ArrayDescr; -\end_layout - -\begin_layout Description -\InsetSpace ~ - The elements of this structure are: -\end_layout - -\begin_deeper -\begin_layout Description -base The data-type-descriptor object of the base-type. - -\end_layout - -\begin_layout Description -shape The shape (always C-style contiguous) of the sub-array as a Python - tuple. - -\end_layout - -\end_deeper -\begin_layout Description -fields If this is non-NULL, then this data-type-descriptor has fields described - by a Python dictionary whose keys are names (and also titles if given) - and whose values are tuples that describe the fields. - Recall that a data-type-descriptor always describes a fixed-length set - of bytes. - A field is a named sub-region of that total, fixed-length collection. - A field is described by a tuple composed of another data-type-descriptor - and a byte offset. - Optionally, the tuple may contain a title which is normally a Python string. - These tuples are placed in this dictionary keyed by name (and also title - if given). - -\end_layout - -\begin_layout Description -f A pointer to a structure containing functions that the type needs to implement - internal features. - These functions are not the same thing as the universal functions (ufuncs) - described later. - Their signatures can vary arbitrarily. - Not all of these function pointers must be defined for a given type. - The required members are -\family typewriter -nonzero -\family default -, -\family typewriter -copyswap -\family default -, -\family typewriter -copyswapn -\family default -, -\family typewriter -setitem -\family default -, -\family typewriter -getitem -\family default -, and -\family typewriter -cast -\family default -. - These are assumed to be non- -\family typewriter -NULL -\family default - and -\family typewriter -NULL -\family default - entries will cause a program crash. - The other functions may be -\family typewriter -NULL -\family default - which will just mean reduced functionality for that data-type. - (Also, the nonzero function will be filled in with a default function if - it is -\family typewriter -NULL -\family default - when you register a user-defined data-type). -\end_layout - -\begin_layout LyX-Code -typedef struct { -\end_layout - -\begin_layout LyX-Code - -\emph on - PyArray_VectorUnaryFunc -\emph default - -\emph on -* -\emph default -cast[PyArray_NTYPES]; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_GetItemFunc * -\emph default -getitem; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_SetItemFunc * -\emph default -setitem; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_CopySwapNFunc * -\emph default -copyswapn; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_CopySwapFunc * -\emph default -copyswap; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_CompareFunc * -\emph default -compare; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_ArgFunc * -\emph default -argmax; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_DotFunc * -\emph default -dotfunc; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_ScanFunc * -\emph default -scanfunc; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_FromStrFunc -\emph default - *fromstr; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_NonzeroFunc * -\emph default -nonzero; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_FillFunc -\emph default - *fill; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_FillWithScalarFunc -\emph default - *fillwithscalar; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_SortFunc -\emph default - *sort[PyArray_NSORTS]; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_ArgSortFunc -\emph default - *argsort[PyArray_NSORTS]; -\newline - -\emph on -PyObject -\emph default - *castdict; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArray_ScalarKindFunc -\emph default - *scalarkind; -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - **cancastscalarkindto; -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - *cancastto; -\end_layout - -\begin_layout LyX-Code - -\shape italic -int -\shape default - listpickle -\end_layout - -\begin_layout LyX-Code -} -\emph on -PyArray_ArrFuncs -\emph default -; -\end_layout - -\begin_layout Description -\InsetSpace ~ - The concept of a behaved segment is used in the description of the function - pointers. - A behaved segment is one that is aligned and in native machine byte-order - for the data-type. - The -\family typewriter -nonzero -\family default -, -\family typewriter -copyswap -\family default -, -\family typewriter -copyswapn -\family default -, -\family typewriter -getitem -\family default -, and -\family typewriter -setitem -\family default - functions can (and must) deal with mis-behaved arrays. - The other functions require behaved memory segments. -\end_layout - -\begin_deeper -\begin_layout Description -cast ( -\family typewriter -void -\family default -) ( -\family typewriter -void* -\family default - from, -\family typewriter -void* -\family default - to, -\family typewriter -npy_intp -\family default - n, -\family typewriter -void* -\family default - fromarr, -\family typewriter -void* -\family default - toarr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - An array of function pointers to cast from the current type to all of the - other builtin types. - Each function casts a contiguous, aligned, and notswapped buffer pointed - at by -\emph on -from -\emph default - to a contiguous, aligned, and notswapped buffer pointed at by -\emph on -to -\emph default - The number of items to cast is given by -\emph on -n -\emph default -, and the arguments -\emph on -fromarr -\emph default - and -\emph on -toarr -\emph default - are interpreted as PyArrayObjects for flexible arrays to get itemsize informati -on. -\end_layout - -\begin_layout Description -getitem ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -void* -\family default - data, -\family typewriter -void* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A pointer to a function that returns a standard Python object from a single - element of the array object -\emph on -arr -\emph default - pointed to by -\emph on -data -\emph default -. - This function must be able to deal with -\begin_inset Quotes eld -\end_inset - -misbehaved -\begin_inset Quotes erd -\end_inset - - (misaligned and/or swapped) arrays correctly. - -\end_layout - -\begin_layout Description -setitem ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - item, -\family typewriter -void* -\family default - data, -\family typewriter -void* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A pointer to a function that sets the Python object -\emph on -item -\emph default - into the array, -\emph on -arr -\emph default -, at the position pointed to by -\emph on -data -\emph default -. - This function deals with -\begin_inset Quotes eld -\end_inset - -misbehaved -\begin_inset Quotes erd -\end_inset - - arrays. - If successful, a zero is returned, otherwise, a negative one is returned - (and a Python error set). - -\end_layout - -\begin_layout Description -copyswapn ( -\family typewriter -void -\family default -) ( -\family typewriter -void* -\family default - dest, -\family typewriter -npy_intp -\family default - dstride, -\family typewriter -void* -\family default - src, -\family typewriter -npy_intp -\family default - sstride, -\family typewriter -npy_intp -\family default - n, -\family typewriter -int -\family default - swap, void *arr) -\end_layout - -\begin_layout Description -copyswap ( -\family typewriter -void -\family default -) ( -\family typewriter -void* -\family default - dest, -\family typewriter -void* -\family default - src, -\family typewriter -int -\family default - swap, void *arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - These members are both pointers to functions to copy data from -\emph on -src -\emph default - to -\emph on -dest -\emph default - and -\emph on -swap -\emph default - if indicated. - The value of arr is only used for flexible ( -\family typewriter -NPY_STRING -\family default -, -\family typewriter -NPY_UNICODE -\family default -, and -\family typewriter -NPY_VOID -\family default -) arrays (and is obtained from -\family typewriter -arr->descr->elsize -\family default -). - The second function copies a single value, while the first loops over n - values with the provided strides. - These functions can deal with misbehaved -\emph on -src -\emph default - data. - If -\emph on -src -\emph default - is NULL then no copy is performed. - If -\emph on -swap -\emph default - is 0, then no byteswapping occurs. - It is assumed that -\emph on -dest -\emph default - and -\emph on -src -\emph default - do not overlap. - If they overlap, then use -\family typewriter -memmove -\family default -(...) first followed by -\family typewriter -copyswap(n) -\family default - with NULL valued -\family typewriter -src -\family default -. -\end_layout - -\begin_layout Description -compare ( -\family typewriter -int -\family default -) ( -\family typewriter -const void* -\family default - d1, -\family typewriter -const void* -\family default - d2, -\family typewriter -void* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A pointer to a function that compares two elements of the array, -\family typewriter -arr -\family default -, pointed to by -\family typewriter -d1 -\family default - and -\family typewriter -d2 -\family default -. - This function requires behaved arrays. - The return value is 1 if * -\family typewriter -d1 -\family default - > * -\family typewriter -d2 -\family default -, 0 if * -\family typewriter -d1 -\family default - == * -\family typewriter -d2 -\family default -, and -1 if * -\family typewriter -d1 -\family default - < * -\family typewriter -d2 -\family default -. - The array object arr is used to retrieve itemsize and field information - for flexible arrays. -\end_layout - -\begin_layout Description -argmax ( -\family typewriter -int -\family default -) ( -\family typewriter -void* -\family default - data, -\family typewriter -npy_intp -\family default - n, -\family typewriter -npy_intp* -\family default - max_ind, -\family typewriter -void* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A pointer to a function that retrieves the index of the largest of -\family typewriter -n -\family default - elements in -\family typewriter -arr -\family default - beginning at the element pointed to by -\family typewriter -data -\family default -. - This function requires that the memory segment be contiguous and behaved. - The return value is always 0. - The index of the largest element is returned in -\family typewriter -max_ind -\family default -. -\end_layout - -\begin_layout Description -dotfunc ( -\family typewriter -void -\family default -) ( -\family typewriter -void* -\family default - ip1, -\family typewriter -npy_intp -\family default - is1, -\family typewriter -void* -\family default - ip2, -\family typewriter -npy_intp -\family default - is2, -\family typewriter -void* -\family default - op, -\family typewriter -npy_intp -\family default - n, -\family typewriter -void* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A pointer to a function that multiplies two -\family typewriter -n -\family default --length sequences together, adds them, and places the result in element - pointed to by -\family typewriter -op -\family default - of -\family typewriter -arr -\family default -. - The start of the two sequences are pointed to by -\family typewriter -ip1 -\family default - and -\family typewriter -ip2 -\family default -. - To get to the next element in each sequence requires a jump of -\family typewriter -is1 -\family default - and -\family typewriter -is2 -\family default - -\emph on -bytes -\emph default -, respectively. - This function requires behaved (though not necessarily contiguous) memory. - -\end_layout - -\begin_layout Description -scanfunc ( -\family typewriter -int -\family default -) ( -\family typewriter -FILE* -\family default - fd, -\family typewriter -void* -\family default - ip , -\family typewriter -void* -\family default - sep , -\family typewriter -void* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A pointer to a function that scans (scanf style) one element of the correspondi -ng type from the file descriptor -\family typewriter -fd -\family default - into the array memory pointed to by -\family typewriter -ip -\family default -. - The array is assumed to be behaved. - If -\family typewriter -sep -\family default - is not NULL, then a separator string is also scanned from the file before - returning. - The last argument -\family typewriter -arr -\family default - is the array to be scanned into. - A 0 is returned if the scan is successful. - A negative number indicates something went wrong: -1 means the end of file - was reached before the separator string could be scanned, -4 means that - the end of file was reached before the element could be scanned, and -3 - means that the element could not be interpreted from the format string. - Requires a behaved array. -\end_layout - -\begin_layout Description -fromstr ( -\family typewriter -int -\family default -) ( -\family typewriter -char* -\family default - str, -\family typewriter -void* -\family default - ip, -\family typewriter -char** -\family default - endptr, -\family typewriter -void* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A pointer to a function that converts the string pointed to by -\family typewriter -str -\family default - to one element of the corresponding type and places it in the memory location - pointed to by -\family typewriter -ip -\family default -. - After the conversion is completed, -\family typewriter -*endptr -\family default - points to the rest of the string. - The last argument -\family typewriter -arr -\family default - is the array into which ip points (needed for variable-size data-types). - Returns 0 on success or -1 on failure. - Requires a behaved array. -\end_layout - -\begin_layout Description -nonzero ( -\family typewriter -Bool -\family default -) ( -\family typewriter -void* -\family default - data, -\family typewriter -void* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A pointer to a function that returns TRUE if the item of -\family typewriter -arr -\family default - pointed to by -\family typewriter -data -\family default - is nonzero. - This function can deal with misbehaved arrays. - -\end_layout - -\begin_layout Description -fill ( -\family typewriter -void -\family default -) ( -\family typewriter -void* -\family default - data, -\family typewriter -npy_intp -\family default - length, -\family typewriter -void* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A pointer to a function that fills a contiguous array of given length with - data. - The first two elements of the array must already be filled-in. - From these two values, a delta will be computed and the values from item - 3 to the end will be computed by repeatedly adding this computed delta. - The data buffer must be well-behaved. -\end_layout - -\begin_layout Description -fillwithscalar ( -\family typewriter -void -\family default -)( -\family typewriter -void* -\family default - buffer, -\family typewriter -npy_intp -\family default - length, -\family typewriter -void* -\family default - value, -\family typewriter -void* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A pointer to a function that fills a contiguous -\family typewriter -buffer -\family default - of the given -\family typewriter -length -\family default - with a single scalar -\family typewriter -value -\family default - whose address is given. - The final argument is the array which is needed to get the itemsize for - variable-length arrays. - -\end_layout - -\begin_layout Description -sort ( -\family typewriter -int -\family default -) ( -\family typewriter -void* -\family default - start, -\family typewriter -npy_intp -\family default - length, -\family typewriter -void* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - An array of function pointers to a particular sorting algorithms. - A particular sorting algorithm is obtained using a key (so far -\family typewriter -PyArray_QUICKSORT -\family default -, -\family typewriter -PyArray_HEAPSORT -\family default -, and -\family typewriter -PyArray_MERGESORT -\family default - are defined). - These sorts are done in-place assuming contiguous and aligned data. - -\end_layout - -\begin_layout Description -argsort ( -\family typewriter -int -\family default -) ( -\family typewriter -void* -\family default - start, -\family typewriter -npy_intp* -\family default - result, -\family typewriter -npy_intp -\family default - length, void *arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - An array of function pointers to sorting algorithms for this data type. - The same sorting algorithms as for sort are available. - The indices producing the sort are returned in result (which must be initialize -d with indices 0 to length-1 inclusive). - -\end_layout - -\begin_layout Description -castdict -\end_layout - -\begin_layout Description -\InsetSpace ~ - Either -\family typewriter -NULL -\family default - or a dictionary containing low-level casting functions for user-defined - data-types. - Each function is wrapped in a -\family typewriter -PyCObject* -\family default - and keyed by the data-type number. - -\end_layout - -\begin_layout Description -scalarkind ( -\family typewriter -PyArray_SCALARKIND -\family default -) ( -\family typewriter -PyArrayObject* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A function to determine how scalars of this type should be interpreted. - The argument is -\family typewriter -NULL -\family default - or a 0-dimensional array containing the data (if that is needed to determine - the kind of scalar). - The return value must be of type -\family typewriter -PyArray_SCALARKIND -\family default -. - -\end_layout - -\begin_layout Description -cancastscalarkindto -\end_layout - -\begin_layout Description -\InsetSpace ~ - Either -\family typewriter -NULL -\family default - or an array of -\family typewriter -PyArray_NSCALARKINDS -\family default - pointers. - These pointers should each be either -\family typewriter -NULL -\family default - or a pointer to an array of integers (terminated by -\family typewriter -PyArray_NOTYPE -\family default -) indicating data-types that a scalar of this data-type of the specified - kind can be cast to safely (this usually means without losing precision). -\end_layout - -\begin_layout Description -cancastto -\end_layout - -\begin_layout Description -\InsetSpace ~ - Either -\family typewriter -NULL -\family default - or an array of integers (terminated by -\family typewriter -PyArray_NOTYPE -\family default -) indicated data-types that this data-type can be cast to safely (this usually - means without losing precision). -\end_layout - -\begin_layout Description -listpickle -\end_layout - -\begin_layout Description -\InsetSpace ~ - Unused. -\end_layout - -\end_deeper -\begin_layout Standard -The -\family typewriter -PyArray_Type -\family default - typeobject implements many of the features of Python objects including - the tp_as_number, tp_as_sequence, tp_as_mapping, and tp_as_buffer interfaces. - The rich comparison (tp_richcompare) is also used along with new-style - attribute lookup for methods (tp_methods) and properties (tp_getset). - The -\family typewriter -PyArray_Type -\family default - can also be sub-typed. - -\end_layout - -\begin_layout Tip -The tp_as_number methods use a generic approach to call whatever function - has been registered for handling the operation. - The function PyNumeric_SetOps(..) can be used to register functions to handle - particular mathematical operations (for all arrays). - When the umath module is imported, it sets the numeric operations for all - arrays to the corresponding ufuncs. - -\newline -The tp_str and tp_repr methods can also be altered using PyString_SetStringFunc -tion(...). -\end_layout - -\begin_layout Subsection -PyUFunc_Type -\end_layout - -\begin_layout Standard -The ufunc object is implemented by creation of the -\family typewriter -PyUFunc_Type -\family default - -\begin_inset LatexCommand index -name "PyUFunc\\_Type" - -\end_inset - -. - It is a very simple type that implements only basic getattribute behavior, - printing behavior, and has call behavior which allows these objects to - act like functions. - The basic idea behind the ufunc is to hold a reference to fast 1-dimensional - (vector) loops for each data type that supports the operation. - These one-dimensional loops all have the same signature and are the key - to creating a new ufunc. - They are called by the generic looping code as appropriate to implement - the N-dimensional function. - There are also some generic 1-d loops defined for floating and complexfloating - arrays that allow you to define a ufunc using a single scalar function - ( -\emph on -e.g. - -\emph default - atanh). - -\end_layout - -\begin_layout Standard -The core of the ufunc is the -\family typewriter -PyUFuncObject -\family default - which contains all the information needed to call the underlying C-code - loops that perform the actual work. - It has the following structure. - -\end_layout - -\begin_layout LyX-Code -typedef struct { -\end_layout - -\begin_layout LyX-Code - PyObject_HEAD -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - nin; -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - nout; -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - nargs; -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - identity; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyUFuncGenericFunction * -\emph default -functions; -\end_layout - -\begin_layout LyX-Code - -\emph on -void ** -\emph default -data; -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - ntypes; -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - check_return; -\end_layout - -\begin_layout LyX-Code - -\emph on -char * -\emph default -name; -\end_layout - -\begin_layout LyX-Code - -\emph on -char * -\emph default -types; -\end_layout - -\begin_layout LyX-Code - -\emph on -char * -\emph default -doc; -\end_layout - -\begin_layout LyX-Code - -\emph on -void * -\emph default -ptr; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyObject * -\emph default -obj; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyObject * -\emph default -userloops; -\end_layout - -\begin_layout LyX-Code -} -\emph on -PyUFuncObject -\emph default -; -\end_layout - -\begin_layout Description -PyObject_HEAD required for all Python objects. -\end_layout - -\begin_layout Description -nin The number of input arguments. -\end_layout - -\begin_layout Description -nout The number of output arguments. -\end_layout - -\begin_layout Description -nargs The total number of arguments ( -\emph on -nin -\emph default -+ -\emph on -nout -\emph default -). - This must be less than -\family typewriter -NPY_MAXARGS -\family default -. -\end_layout - -\begin_layout Description -identity Either -\family typewriter -PyUFunc_One -\family default -, -\family typewriter -PyUFunc_Zero -\family default -, or -\family typewriter -PyUFunc_None -\family default - to indicate the identity for this operation. - It is only used for a reduce-like call on an empty array. -\end_layout - -\begin_layout Description -functions ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dims, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - extradata ) -\end_layout - -\begin_layout Description -\InsetSpace ~ - An array of function pointers --- one for each data type supported by the - ufunc. - This is the vector loop that is called to implement the underlying function - -\emph on -dims -\emph default -[0] times. - The first argument, -\emph on -args -\emph default -, is an array of -\emph on -nargs -\emph default - pointers to behaved memory. - Pointers to the data for the input arguments are first, followed by the - pointers to the data for the output arguments. - How many bytes must be skipped to get to the next element in the sequence - is specified by the corresponding entry in the -\emph on -steps -\emph default - array. - The last argument allows the loop to receive extra information. - This is commonly used so that a single, generic vector loop can be used - for multiple functions. - In this case, the actual scalar function to call is passed in as -\emph on -extradata -\emph default -. - The size of this function pointer array is ntypes. - -\end_layout - -\begin_layout Description -data Extra data to be passed to the 1-d vector loops or -\family typewriter -NULL -\family default - if no extra-data is needed. - This C-array must be the same size ( -\emph on -i.e. - -\emph default - ntypes) as the functions array. - -\family typewriter -NULL -\family default - is used if extra_data is not needed. - Several C-API calls for UFuncs are just 1-d vector loops that make use - of this extra data to receive a pointer to the actual function to call. - -\end_layout - -\begin_layout Description -ntypes The number of supported data types for the ufunc. - This number specifies how many different 1-d loops (of the builtin data - types) are available. - -\end_layout - -\begin_layout Description -check_return Obsolete and unused. - However, it is set by the corresponding entry in the main ufunc creation - routine: -\family typewriter -PyUFunc_FromFuncAndData -\family default -(...). -\end_layout - -\begin_layout Description -name A string name for the ufunc. - This is used dynamically to build the __doc__ attribute of ufuncs. -\end_layout - -\begin_layout Description -types An array of -\emph on -nargs -\series bold -\emph default - -\begin_inset Formula $\times$ -\end_inset - - -\series default -\emph on -ntypes -\emph default - 8-bit type_numbers which contains the type signature for the function for - each of the supported (builtin) data types. - For each of the -\emph on -ntypes -\emph default - functions, the corresponding set of type numbers in this array shows how - the -\emph on -args -\emph default - argument should be interpreted in the 1-d vector loop. - These type numbers do not have to be the same type and mixed-type ufuncs - are supported. - -\end_layout - -\begin_layout Description -doc Documentation for the ufunc. - Should not contain the function signature as this is generated dynamically - when __doc__ is retrieved. -\end_layout - -\begin_layout Description -ptr Any dynamically allocated memory. - Currently, this is used for dynamic ufuncs created from a python function - to store room for the types, data, and name members. -\end_layout - -\begin_layout Description -obj For ufuncs dynamically created from python functions, this member holds - a reference to the underlying Python function. -\end_layout - -\begin_layout Description -userloops A dictionary of user-defined 1-d vector loops (stored as CObject - ptrs) for user-defined types. - A loop may be registered by the user for any user-defined type. - It is retrieved by type number. - User defined type numbers are always larger than -\family typewriter -NPY_USERDEF -\family default -. - -\end_layout - -\begin_layout Subsection -PyArrayIter_Type -\end_layout - -\begin_layout Standard -This -\begin_inset LatexCommand index -name "PyArrayIter\\_Type" - -\end_inset - - is an iterator object that makes it easy to loop over an N-dimensional - array. - It is the object returned from the flat attribute of an ndarray. - It is also used extensively throughout the implementation internals to - loop over an N-dimensional array. - The tp_as_mapping interface is implemented so that the iterator object - can be indexed (using 1-d indexing), and a few methods are implemented - through the tp_methods table. - This object implements the next method and can be used anywhere an iterator - can be used in Python. -\end_layout - -\begin_layout Standard -The C-structure corresponding to an object of -\family typewriter -PyArrayIter_Type -\family default - is the -\family typewriter -PyArrayIterObject -\family default -. - The -\family typewriter -PyArrayIterObject -\family default - is used to keep track of a pointer into an N-dimensional array. - It contains associated information used to quickly march through the array. - The pointer can be adjusted in three basic ways: 1) advance to the -\begin_inset Quotes eld -\end_inset - -next -\begin_inset Quotes erd -\end_inset - - position in the array in a C-style contiguous fashion, 2) advance to an - arbitrary N-dimensional coordinate in the array, and 3) advance to an arbitrary - one-dimensional index into the array. - The members of the -\family typewriter -PyArrayIterObject -\family default - structure are used in these calculations. - Iterator objects keep their own dimension and strides information about - an array. - This can be adjusted as needed for -\begin_inset Quotes eld -\end_inset - -broadcasting, -\begin_inset Quotes erd -\end_inset - - or to loop over only specific dimensions. - -\end_layout - -\begin_layout LyX-Code -typedef struct { -\end_layout - -\begin_layout LyX-Code - PyObject_HEAD -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - nd_m1; -\end_layout - -\begin_layout LyX-Code - -\emph on -npy_intp -\emph default - index; -\end_layout - -\begin_layout LyX-Code - -\emph on -npy_intp -\emph default - size; -\end_layout - -\begin_layout LyX-Code - -\emph on -npy_intp -\emph default - coordinates -\emph on -[NPY_MAXDIMS] -\emph default -; -\end_layout - -\begin_layout LyX-Code - -\emph on -npy_intp -\emph default - dims_m1 -\emph on -[NPY_MAXDIMS] -\emph default -; -\end_layout - -\begin_layout LyX-Code - -\emph on -npy_intp -\emph default - strides -\emph on -[NPY_MAXDIMS] -\emph default -; -\end_layout - -\begin_layout LyX-Code - -\emph on -npy_intp -\emph default - backstrides -\emph on -[NPY_MAXDIMS] -\emph default -; -\end_layout - -\begin_layout LyX-Code - -\emph on -npy_intp -\emph default - factors -\emph on -[NPY_MAXDIMS] -\emph default -; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArrayObject * -\emph default -ao; -\end_layout - -\begin_layout LyX-Code - -\emph on -char * -\emph default -dataptr; -\end_layout - -\begin_layout LyX-Code - -\emph on -Bool -\emph default - contiguous; -\end_layout - -\begin_layout LyX-Code -} -\emph on -PyArrayIterObject -\emph default -; -\end_layout - -\begin_layout Description -nd_m1 -\begin_inset Formula $N-1$ -\end_inset - - where -\begin_inset Formula $N$ -\end_inset - - is the number of dimensions in the underlying array. -\end_layout - -\begin_layout Description -index The current 1-d index into the array. -\end_layout - -\begin_layout Description -size The total size of the underlying array. -\end_layout - -\begin_layout Description -coordinates An -\begin_inset Formula $N$ -\end_inset - --dimensional index into the array. -\end_layout - -\begin_layout Description -dims_m1 The size of the array minus 1 in each dimension. -\end_layout - -\begin_layout Description -strides The strides of the array. - How many bytes needed to jump to the next element in each dimension. - -\end_layout - -\begin_layout Description -backstrides How many bytes needed to jump from the end of a dimension back - to its beginning. - Note that -\emph on -backstrides -\emph default -[k]= -\emph on -strides -\emph default -[k]*d -\emph on -ims_m1 -\emph default -[k], but it is stored here as an optimization. -\end_layout - -\begin_layout Description -factors This array is used in computing an N-d index from a 1-d index. - It contains needed products of the dimensions. - -\end_layout - -\begin_layout Description -ao A pointer to the underlying ndarray this iterator was created to represent. -\end_layout - -\begin_layout Description -dataptr This member points to an element in the ndarray indicated by the - index. -\end_layout - -\begin_layout Description -contiguous This flag is true if the underlying array is -\family typewriter -NPY_C_CONTIGUOUS -\family default -. - It is used to simplify calculations when possible. - -\end_layout - -\begin_layout Standard -How to use an array iterator on a C-level is explained more fully in later - sections. - Typically, you do not need to concern yourself with the internal structure - of the iterator object, and merely interact with it through the use of - the macros -\family typewriter -PyArray_ITER_NEXT -\family default -(it), -\family typewriter -PyArray_ITER_GOTO -\family default -(it, dest), or -\family typewriter -PyArray_ITER_GOTO1D -\family default -(it, index). - All of these macros require the argument -\emph on -it -\emph default - to be a -\family typewriter -PyArrayIterObject* -\family default -. - -\end_layout - -\begin_layout Subsection -PyArrayMultiIter_Type -\end_layout - -\begin_layout Standard -This type provides an iterator that encapsulates the concept of broadcasting. - It allows -\begin_inset Formula $N$ -\end_inset - - arrays to be broadcast together so that the loop progresses in C-style - contiguous fashion over the broadcasted array. - The corresponding C-structure is the -\family typewriter -PyArrayMultiIterObject -\family default - whose memory layout must begin any object, -\emph on -obj -\emph default -, passed in to the -\family typewriter -PyArray_Broadcast -\family default -(obj) function. - Broadcasting is performed by adjusting array iterators so that each iterator - represents the broadcasted shape and size, but has its strides adjusted - so that the correct element from the array is used at each iteration. - -\end_layout - -\begin_layout LyX-Code -typedef struct { -\end_layout - -\begin_layout LyX-Code - PyObject_HEAD -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - numiter; -\end_layout - -\begin_layout LyX-Code - -\emph on -npy_intp -\emph default - size; -\end_layout - -\begin_layout LyX-Code - -\emph on -npy_intp -\emph default - index; -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - nd; -\end_layout - -\begin_layout LyX-Code - -\emph on -npy_intp -\emph default - dimensions -\emph on -[NPY_MAXDIMS] -\emph default -; -\end_layout - -\begin_layout LyX-Code - -\emph on -PyArrayIterObject * -\emph default -iters -\emph on -[NPY_MAXDIMS] -\emph default -; -\end_layout - -\begin_layout LyX-Code -} -\emph on -PyArrayMultiIterObject -\emph default -; -\end_layout - -\begin_layout Description -PyObject_HEAD Needed at the start of every Python object (holds reference - count and type identification). -\end_layout - -\begin_layout Description -numiter The number of arrays that need to be broadcast to the same shape. -\end_layout - -\begin_layout Description -size The total broadcasted size. -\end_layout - -\begin_layout Description -index The current (1-d) index into the broadcasted result. -\end_layout - -\begin_layout Description -nd The number of dimensions in the broadcasted result. -\end_layout - -\begin_layout Description -dimensions The shape of the broadcasted result (only -\family typewriter -nd -\family default - slots are used). -\end_layout - -\begin_layout Description -iters An array of iterator objects that holds the iterators for the arrays - to be broadcast together. - On return, the iterators are adjusted for broadcasting. - -\end_layout - -\begin_layout Subsection -PyArrayFlags_Type -\end_layout - -\begin_layout Standard -When the flags attribute is retrieved from Python, a special builtin object - of this type is constructed. - This special type makes it easier to work with the different flags by accessing - them as attributes or by accessing them as if the object were a dictionary - with the flag names as entries. - -\end_layout - -\begin_layout Subsection -ScalarArrayTypes -\end_layout - -\begin_layout Standard -There is a Python type for each of the different built-in data types that - can be present in the array Most of these are simple wrappers around the - corresponding data type in C. - The C-names for these types are -\series bold -Py -\series default -<TYPE> -\series bold -ArrType_Type -\series default - where <TYPE> can be -\end_layout - -\begin_layout Quote - -\series bold -Bool -\series default -, -\series bold -Byte -\series default -, -\series bold -Short -\series default -, -\series bold -Int -\series default -, -\series bold -Long -\series default -, -\series bold -LongLong -\series default -, -\series bold -UByte -\series default -, -\series bold -UShort -\series default -, -\series bold -UInt -\series default -, -\series bold -ULong -\series default -, -\series bold -ULongLong -\series default -, -\series bold -Float -\series default -, -\series bold -Double -\series default -, -\series bold -LongDouble -\series default -, -\series bold -CFloat -\series default -, -\series bold -CDouble -\series default -, -\series bold -CLongDouble -\series default -, -\series bold -String -\series default -, -\series bold -Unicode -\series default -, -\series bold -Void -\series default -, and -\series bold -Object -\series default -. - -\end_layout - -\begin_layout Standard -These type names are part of the C-API and can therefore be created in extension - C-code. - There is also a -\family typewriter -PyIntpArrType_Type -\family default - and a -\family typewriter -PyUIntpArrType_Type -\family default - that are simple substitutes for one of the integer types that can hold - a pointer on the platform. - The structure of these scalar objects is not exposed to C-code. - The function -\family typewriter -PyArray_ScalarAsCtype -\family default -(..) can be used to extract the C-type value from the array scalar and the - function -\family typewriter -PyArray_Scalar -\family default -(...) can be used to construct an array scalar from a C-value. - -\end_layout - -\begin_layout Section -Other C-Structures -\end_layout - -\begin_layout Standard -A few new C-structures were found to be useful in the development of NumPy. - These C-structures are used in at least one C-API call and are therefore - documented here. - The main reason these structures were defined is to make it easy to use - the Python ParseTuple C-API to convert from Python objects to a useful - C-Object. - -\end_layout - -\begin_layout Subsection -PyArray_Dims -\end_layout - -\begin_layout Standard -This structure is very useful when shape and/or strides information is supposed - to be interpreted. - The structure is -\end_layout - -\begin_layout LyX-Code -typedef struct { -\end_layout - -\begin_layout LyX-Code - -\emph on -npy_intp * -\emph default -ptr; -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - len; -\end_layout - -\begin_layout LyX-Code -} -\emph on -PyArray_Dims -\emph default -; -\end_layout - -\begin_layout Standard -The members of this structure are -\end_layout - -\begin_layout Description -ptr A pointer to a list of ( -\family typewriter -npy_intp -\family default -) integers which usually represent array shape or array strides. - -\end_layout - -\begin_layout Description -len The length of the list of integers. - It is assumed safe to access -\emph on -ptr -\emph default -[0] to -\emph on -ptr -\emph default -[len-1]. - -\end_layout - -\begin_layout Subsection -PyArray_Chunk -\end_layout - -\begin_layout Standard -This is equivalent to the buffer object structure in Python up to the ptr - member. - On 32-bit platforms ( -\emph on -i.e. - -\emph default - if -\family typewriter -NPY_SIZEOF_INT -\family default -== -\family typewriter -NPY_SIZEOF_INTP -\family default -) or in Python 2.5, the len member also matches an equivalent member of the - buffer object. - It is useful to represent a generic single-segment chunk of memory. - -\end_layout - -\begin_layout LyX-Code -typedef struct { -\end_layout - -\begin_layout LyX-Code - PyObject_HEAD -\end_layout - -\begin_layout LyX-Code - -\emph on -PyObject * -\emph default -base; -\end_layout - -\begin_layout LyX-Code - -\emph on -void * -\emph default -ptr; -\end_layout - -\begin_layout LyX-Code - -\emph on -npy_intp -\emph default - len; -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - flags; -\end_layout - -\begin_layout LyX-Code -} -\emph on -PyArray_Chunk -\emph default -; -\end_layout - -\begin_layout Standard -The members are -\end_layout - -\begin_layout Description -PyObject_HEAD Necessary for all Python objects. - Included here so that the -\family typewriter -PyArray_Chunk -\family default - structure matches that of the buffer object (at least to the len member). - -\end_layout - -\begin_layout Description -base The Python object this chunk of memory comes from. - Needed so that memory can be accounted for properly. -\end_layout - -\begin_layout Description -ptr A pointer to the start of the single-segment chunk of memory. - -\end_layout - -\begin_layout Description -len The length of the segment in bytes. -\end_layout - -\begin_layout Description -flags Any data flags ( -\emph on -e.g. - -\emph default - -\family typewriter -NPY_WRITEABLE -\family default -) that should be used to interpret the memory. - -\end_layout - -\begin_layout Subsection -PyArrayInterface -\end_layout - -\begin_layout Standard -The -\family typewriter -PyArrayInterface -\family default - -\begin_inset LatexCommand index -name "PyArrayInterface" - -\end_inset - - structure is defined so that NumPy and other extension modules can use - the rapid array interface protocol. - The -\series bold -__array_struct__ -\series default - method of an object that supports the rapid array interface protocol should - return a -\family typewriter -PyCObject -\family default - that contains a pointer to a -\family typewriter -PyArrayInterface -\family default - structure with the relevant details of the array. - After the new array is created, the attribute should be -\family typewriter -DECREF -\family default -'d which will free the -\family typewriter -PyArrayInterface -\family default - structure. - Remember to -\family typewriter -INCREF -\family default - the object (whose -\series bold -__array_struct__ -\series default - attribute was retrieved) and point the base member of the new -\family typewriter -PyArrayObject -\family default - to this same object. - In this way the memory for the array will be managed correctly. - -\end_layout - -\begin_layout LyX-Code -typedef struct { -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - two; -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - nd; -\end_layout - -\begin_layout LyX-Code - -\emph on -char -\emph default - typekind; -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - itemsize; -\end_layout - -\begin_layout LyX-Code - -\emph on -int -\emph default - flags; -\end_layout - -\begin_layout LyX-Code - -\emph on -npy_intp * -\emph default -shape; -\end_layout - -\begin_layout LyX-Code - -\emph on -npy_intp * -\emph default -strides; -\end_layout - -\begin_layout LyX-Code - -\emph on -void * -\emph default -data; -\end_layout - -\begin_layout LyX-Code - PyObject *descr; -\end_layout - -\begin_layout LyX-Code -} -\emph on -PyArrayInterface -\emph default -; -\end_layout - -\begin_layout Description -two the integer 2 as a sanity check. -\end_layout - -\begin_layout Description -nd the number of dimensions in the array. -\end_layout - -\begin_layout Description -typekind A character indicating what kind of array is present according - to the typestring convention with 't' -> bitfield, 'b' -> Boolean, 'i' - -> signed integer, 'u' -> unsigned integer, 'f' -> floating point, 'c' - -> complex floating point, 'O' -> object, 'S' -> string, 'U' -> unicode, - 'V' -> void. -\end_layout - -\begin_layout Description -itemsize the number of bytes each item in the array requires. -\end_layout - -\begin_layout Description -flags any of the bits -\family typewriter -NPY_C_CONTIGUOUS -\family default - (1), -\family typewriter -NPY_F_CONTIGUOUS -\family default - (2), -\family typewriter -NPY_ALIGNED -\family default - (0x100), -\family typewriter -NPY_NOTSWAPPED -\family default - (0x200), or -\family typewriter -NPY_WRITEABLE -\family default - (0x400) to indicate something about the data. - The -\family typewriter -NPY_ALIGNED -\family default -, -\family typewriter -NPY_C_CONTIGUOUS -\family default -, and -\family typewriter -NPY_F_CONTIGUOUS -\family default - flags can actually be determined from the other parameters. - The flag -\family typewriter -NPY_ARR_HAS_DESCR -\family default - (0x800) can also be set to indicate to objects consuming the version 3 - array interface that the descr member of the structure is present (it will - be ignored by objects consuming version 2 of the array interface). - -\end_layout - -\begin_layout Description -shape An array containing the size of the array in each dimension. -\end_layout - -\begin_layout Description -strides An array containing the number of bytes to jump to get to the next - element in each dimension. -\end_layout - -\begin_layout Description -data A pointer -\emph on -to -\emph default - the first element of the array. -\end_layout - -\begin_layout Description -descr A Python object describing the data-type in more detail (currently - an array_description list of tuples). - This can be -\family typewriter -NULL -\family default - if -\emph on -typekind -\emph default - and -\emph on -itemsize -\emph default - provide enough information. - -\end_layout - -\begin_layout Subsection -Internally used structures -\end_layout - -\begin_layout Standard -Internally, the code uses some additional Python objects primarily for memory - management. - These types are not accessible directly from Python, and are not exposed - to the C-API. - They are included here only for completeness and assistance in understanding - the code. - -\end_layout - -\begin_layout Subsubsection -PyUFuncLoopObject -\end_layout - -\begin_layout Standard -A loose wrapper for a C-structure that contains the information needed for - looping. - This is useful if you are trying to understand the ufunc looping code. - The -\family typewriter -PyUFuncLoopObject -\family default - is the associated C-structure. - It is defined in the -\family typewriter -ufuncobject.h -\family default - header. -\end_layout - -\begin_layout Subsubsection -PyUFuncReduceObject -\end_layout - -\begin_layout Standard -A loose wrapper for the C-structure that contains the information needed - for reduce-like methods of ufuncs. - This is useful if you are trying to understand the reduce, accumulate, - and reduce-at code. - The -\family typewriter -PyUFuncReduceObject -\family default - is the associated C-structure. - It is defined in the -\family typewriter -ufuncobject.h -\family default - header. -\end_layout - -\begin_layout Subsubsection -PyUFunc_Loop1d -\end_layout - -\begin_layout Standard -A simple linked-list of C-structures containing the information needed to - define a 1-d loop for a ufunc for every defined signature of a user-defined - data-type. - -\end_layout - -\begin_layout Subsubsection -PyArrayMapIter_Type -\end_layout - -\begin_layout Standard -Advanced indexing is handled with this Python type. - It is simply a loose wrapper around the C-structure containing the variables - needed for advanced array indexing. - The associated C-structure, -\family typewriter -PyArrayMapIterObject -\family default -, is useful if you are trying to understand the advanced-index mapping code. - It is defined in the -\family typewriter -arrayobject.h -\family default - header. - This type is not exposed to Python and could be replaced with a C-structure. - As a Python type it takes advantage of reference-counted memory management. -\end_layout - -\begin_layout Chapter -Complete API -\end_layout - -\begin_layout Quotation -The test of a first-rate intelligence is the ability to hold two opposed - ideas in the mind at the same time, and still retain the ability to function. -\end_layout - -\begin_layout Right Address ---- -\emph on -F. - Scott Fitzgerald -\end_layout - -\begin_layout Quotation -For a successful technology, reality must take precedence over public relations, - for Nature cannot be fooled. - -\end_layout - -\begin_layout Right Address ---- -\emph on -Richard P. - Feynman -\end_layout - -\begin_layout Section -Configuration defines -\end_layout - -\begin_layout Standard -When NumPy is built, a configuration file is constructed and placed as config.h - in the NumPy include directory. - This configuration file ensures that specific macros are defined and defines - other macros based on whether or not your system has certain features. - It is included by the arrayobject.h file. - -\end_layout - -\begin_layout Subsection -Guaranteed to be defined -\end_layout - -\begin_layout Standard -The -\series bold -SIZEOF_ -\series default -<CTYPE> constants are defined so that sizeof information is available to - the pre-processor. - -\end_layout - -\begin_layout Description -CHAR_BIT The number of bits of a char. - The char is the unit of all sizeof definitions -\end_layout - -\begin_layout Description -SIZEOF_SHORT sizeof(short) -\end_layout - -\begin_layout Description -SIZEOF_INT sizeof(int) -\end_layout - -\begin_layout Description -SIZEOF_LONG sizeof(long) -\end_layout - -\begin_layout Description -SIZEOF_LONG_LONG sizeof(longlong) where longlong is defined appropriately - on the platform (A macro defines -\series bold -SIZEOF_LONGLONG -\series default - as well.) -\end_layout - -\begin_layout Description -SIZEOF_PY_LONG_LONG -\end_layout - -\begin_layout Description -SIZEOF_FLOAT sizeof(float) -\end_layout - -\begin_layout Description -SIZEOF_DOUBLE sizeof(double) -\end_layout - -\begin_layout Description -SIZEOF_LONG_DOUBLE sizeof(longdouble) (A macro defines -\series bold -SIZEOF_LONGDOUBLE -\series default - as well.) -\end_layout - -\begin_layout Description -SIZEOF_PY_INTPTR_T Size of a pointer on this platform (sizeof(void *)) (A - macro defines SIZEOF_INTP as well.) -\end_layout - -\begin_layout Subsection -Possible defines -\end_layout - -\begin_layout Standard -These defines will cause the compilation to ignore compatibility code that - is placed in NumPy and use the system code instead. - If they are not defined, then the system does not have that capability. -\end_layout - -\begin_layout Description -HAVE_LONGDOUBLE_FUNCS System has C99 long double math functions. -\end_layout - -\begin_layout Description -HAVE_FLOAT_FUNCS System has C99 float math functions. -\end_layout - -\begin_layout Description -HAVE_INVERSE_HYPERBOLIC System has inverse hyperbolic functions: asinh, - acosh, and atanh. -\end_layout - -\begin_layout Description -HAVE_INVERSE_HYPERBOLIC_FLOAT System has C99 float extensions to inverse - hyperbolic functions: asinhf, acoshf, atanhf -\end_layout - -\begin_layout Description -HAVE_INVERSE_HYPERBOLIC_LONGDOUBLE System has C99 long double extensions - to inverse hyperbolic functions: asinhl, acoshl, atanhl. -\end_layout - -\begin_layout Description -HAVE_ISNAN System has an isnan function. -\end_layout - -\begin_layout Description -HAVE_ISINF System has an isinf function. - -\end_layout - -\begin_layout Description -HAVE_LOG1P System has the log1p function: -\begin_inset Formula $\log\left(x+1\right)$ -\end_inset - -. -\end_layout - -\begin_layout Description -HAVE_EXPM1 System has the expm1 function: -\begin_inset Formula $\exp\left(x\right)-1$ -\end_inset - -. -\end_layout - -\begin_layout Description -HAVE_RINT System has the rint function. - -\end_layout - -\begin_layout Section -Array Data Types -\end_layout - -\begin_layout Standard -The standard array can have 21 different data types (and has some support - for adding your own types). - These data types all have an enumerated type, an enumerated type-character, - and a corresponding array scalar Python type object (placed in a hierarchy). - There are also standard C typedefs to make it easier to manipulate elements - of the given data type. - For the numeric types, there are also bit-width equivalent C typedefs and - named typenumbers that make it easier to select the precision desired. - -\end_layout - -\begin_layout Warning -The names for the types in c code follows c naming conventions more closely. - The Python names for these types follow Python conventions. - Thus, NPY_FLOAT picks up a 32-bit float in C, but -\begin_inset Quotes eld -\end_inset - -float_ -\begin_inset Quotes erd -\end_inset - - in python corresponds to a 64-bit double. - The bit-width names can be used in both Python and C for clarity. -\end_layout - -\begin_layout Subsection -Enumerated Types -\end_layout - -\begin_layout Standard -There is a list of enumerated types defined providing the basic 21 data - types plus some useful generic names. - Whenever the code requires a type number, one of these enumerated types - is requested. - The types are all called -\series bold -NPY_ -\series default -<NAME> where <NAME> can be -\end_layout - -\begin_layout Quote - -\series bold -BOOL -\series default -, -\series bold -BYTE -\series default -, -\series bold -UBYTE -\series default -, -\series bold -SHORT -\series default -, -\series bold -USHORT -\series default -, -\series bold -INT -\series default -, -\series bold -UINT -\series default -, -\series bold -LONG -\series default -, -\series bold -ULONG -\series default -, -\series bold -LONGLONG -\series default -, -\series bold -ULONGLONG -\series default -, -\series bold -FLOAT -\series default -, -\series bold -DOUBLE -\series default -, -\series bold -LONGDOUBLE -\series default -, -\series bold -CFLOAT -\series default -, -\series bold -CDOUBLE -\series default -, -\series bold -CLONGDOUBLE -\series default -, -\series bold -OBJECT -\series default -, -\series bold -STRING -\series default -, -\series bold -UNICODE -\series default -, -\series bold -VOID -\end_layout - -\begin_layout Quote - -\series bold -NTYPES -\series default -, -\series bold -NOTYPE -\series default -, -\series bold -USERDEF -\series default -, -\series bold -DEFAULT_TYPE -\end_layout - -\begin_layout Standard -The various character codes indicating certain types are also part of an - enumerated list. - References to type characters (should they be needed at all) should always - use these enumerations. - The form of them is -\series bold -NPY_ -\series default -<NAME> -\series bold -LTR -\series default - where <NAME> can be -\end_layout - -\begin_layout Quote - -\series bold -BOOL -\series default -, -\series bold -BYTE -\series default -, -\series bold -UBYTE -\series default -, -\series bold -SHORT -\series default -, -\series bold -USHORT -\series default -, -\series bold -INT -\series default -, -\series bold -UINT -\series default -, -\series bold -LONG -\series default -, -\series bold -ULONG -\series default -, -\series bold -LONGLONG -\series default -, -\series bold -ULONGLONG -\series default -, -\series bold -FLOAT -\series default -, -\series bold -DOUBLE -\series default -, -\series bold -LONGDOUBLE -\series default -, -\series bold -CFLOAT -\series default -, -\series bold -CDOUBLE -\series default -, -\series bold -CLONGDOUBLE -\series default -, -\series bold -OBJECT -\series default -, -\series bold -STRING -\series default -, -\series bold -VOID -\series default - -\end_layout - -\begin_layout Quote - -\series bold -INTP -\series default -, -\series bold -UINTP -\end_layout - -\begin_layout Quote - -\series bold -GENBOOL -\series default -, -\series bold -SIGNED -\series default -, -\series bold -UNSIGNED -\series default -, -\series bold -FLOATING -\series default -, -\series bold -COMPLEX -\end_layout - -\begin_layout Standard -The latter group of <NAME>s corresponds to letters used in the array interface - typestring specification. - -\end_layout - -\begin_layout Subsection -Defines -\end_layout - -\begin_layout Subsubsection -Max and min values for integers -\end_layout - -\begin_layout Description -NPY_MAX_INT -\series medium -<bits> -\end_layout - -\begin_layout Description -NPY_MAX_UINT -\series medium -<bits> -\end_layout - -\begin_layout Description -NPY_MIN_INT -\series medium -<bits> -\series default - -\end_layout - -\begin_layout Description -\InsetSpace ~ - These are defined for <bits> = 8, 16, 32, 64, 128, and 256 and provide - the maximum (minimum) value of the corresponding (unsigned) integer type. - Note: the actual integer type may not be available on all platforms (i.e. - 128-bit and 256-bit integers are rare). - -\end_layout - -\begin_layout Description -NPY_MIN_ -\series medium -<type> -\end_layout - -\begin_layout Description -\InsetSpace ~ - This is defined for <type> = -\series bold -BYTE -\series default -, -\series bold -SHORT -\series default -, -\series bold -INT -\series default -, -\series bold -LONG -\series default -, -\series bold -LONGLONG -\series default -, -\series bold -INTP -\end_layout - -\begin_layout Description -NPY_MAX_ -\series medium -<type> -\end_layout - -\begin_layout Description -\InsetSpace ~ - This is defined for all defined for <type> = -\series bold -BYTE -\series default -, -\series bold -UBYTE -\series default -, -\series bold -SHORT -\series default -, -\series bold -USHORT -\series default -, -\series bold -INT -\series default -, -\series bold -UINT -\series default -, -\series bold -LONG -\series default -, -\series bold -ULONG -\series default -, -\series bold -LONGLONG -\series default -, -\series bold -ULONGLONG -\series default -, -\series bold -INTP -\series default -, -\series bold -UINTP -\end_layout - -\begin_layout Subsubsection -Number of bits in data types -\end_layout - -\begin_layout Standard -All -\series bold -NPY_SIZEOF_ -\series default -<CTYPE> constants have corresponding -\series bold -NPY_BITSOF_ -\series default -<CTYPE> constants defined. - The -\series bold -NPY_BITSOF_ -\series default -<CTYPE> constants provide the number of bits in the data type. - Specifically, the available <CTYPE>s are -\end_layout - -\begin_layout Quote - -\series bold -BOOL -\series default -, -\series bold -CHAR -\series default -, -\series bold -SHORT -\series default -, -\series bold -INT -\series default -, -\series bold -LONG -\series default -, -\series bold -LONGLONG -\series default -, -\series bold -FLOAT -\series default -, -\series bold -DOUBLE -\series default -, -\series bold -LONGDOUBLE -\end_layout - -\begin_layout Subsubsection -Bit-width references to enumerated typenums -\end_layout - -\begin_layout Standard -All of the numeric data types (integer, floating point, and complex) have - constants that are defined to be a specific enumerated type number. - Exactly which enumerated type a bit-width type refers to is platform dependent. - In particular, the constants available are -\series bold -PyArray_ -\series default -<NAME><BITS> where <NAME> is -\series bold -INT -\series default -, -\series bold -UINT -\series default -, -\series bold -FLOAT -\series default -, -\series bold -COMPLEX -\series default - and <BITS> can be 8, 16, 32, 64, 80, 96, 128, 160, 192, 256, and 512. - Obviously not all bit-widths are available on all platforms for all the - kinds of numeric types. - Commonly 8-, 16-, 32-, 64-bit integers; 32-, 64-bit floats; and 64-, 128-bit - complex types are available. - -\end_layout - -\begin_layout Subsubsection -Integer that can hold a pointer -\end_layout - -\begin_layout Standard -The constants -\series bold -PyArray_INTP -\series default - and -\series bold -PyArray_UINTP -\series default - refer to an enumerated integer type that is large enough to hold a pointer - on the platform. - Index arrays should always be converted to -\series bold -PyArray_INTP -\series default -, because the dimension of the array is of type npy_intp. - -\end_layout - -\begin_layout Subsection -C-type names -\end_layout - -\begin_layout Standard -There are standard variable types for each of the numeric data types and - the bool data type. - Some of these are already available in the C-specification. - You can create variables in extension code with these types. - -\end_layout - -\begin_layout Subsubsection -Boolean -\end_layout - -\begin_layout Description -npy_bool unsigned char; The constants NPY_FALSE and NPY_TRUE are also defined. - -\end_layout - -\begin_layout Subsubsection -(Un)Signed Integer -\end_layout - -\begin_layout Standard -Unsigned versions of the integers can be defined by pre-pending a 'u' to - the front of the integer name. - -\end_layout - -\begin_layout Description -npy_(u)byte (unsigned) char -\end_layout - -\begin_layout Description -npy_(u)short (unsigned) short -\end_layout - -\begin_layout Description -npy_(u)int (unsigned) int -\end_layout - -\begin_layout Description -npy_(u)long (unsigned) long int -\end_layout - -\begin_layout Description -npy_(u)longlong (unsigned long long int) -\end_layout - -\begin_layout Description -npy_(u)intp (unsigned) Py_intptr_t (an integer that is the size of a pointer - on the platform). - -\end_layout - -\begin_layout Subsubsection -(Complex) Floating point -\end_layout - -\begin_layout Description -npy_(c)float float -\end_layout - -\begin_layout Description -npy_(c)double double -\end_layout - -\begin_layout Description -npy_(c)longdouble long double -\end_layout - -\begin_layout Standard -complex types are structures with -\series bold -.real -\series default - and -\series bold -.imag -\series default - members (in that order). -\end_layout - -\begin_layout Subsubsection -Bit-width names -\end_layout - -\begin_layout Standard -There are also typedefs for signed integers, unsigned integers, floating - point, and complex floating point types of specific bit-widths. - The available type names are -\end_layout - -\begin_layout Quote - -\series bold -npy_int -\series default -<bits>, -\series bold -npy_uint -\series default -<bits>, -\series bold -npy_float -\series default -<bits>, and -\series bold -npy_complex -\series default -<bits> -\end_layout - -\begin_layout Standard -where <bits> is the number of bits in the type and can be -\series bold -8 -\series default -, -\series bold -16 -\series default -, -\series bold -32 -\series default -, -\series bold -64 -\series default -, 128, and 256 for integer types; 16, -\series bold -32 -\series default -, -\series bold -64 -\series default -, 80, 96, 128, and 256 for floating-point types; and 32, -\series bold -64 -\series default -, -\series bold -128 -\series default -, 160, 192, and 512 for complex-valued types. - Which bit-widths are available is platform dependent. - The bolded bit-widths are usually available on all platforms. - -\end_layout - -\begin_layout Subsection -Printf Formatting -\end_layout - -\begin_layout Standard -For help in printing, the following strings are defined as the correct format - specifier in printf and related commands. -\end_layout - -\begin_layout Quote - -\series bold -NPY_LONGLONG_FMT -\series default -, -\series bold -NPY_ULONGLONG_FMT -\series default -, -\series bold -NPY_INTP_FMT -\series default -, -\series bold -NPY_UINTP_FMT -\series default -, -\series bold -NPY_LONGDOUBLE_FMT -\end_layout - -\begin_layout Section -Array API -\begin_inset LatexCommand index -name "ndarray!C-API|(" - -\end_inset - - -\begin_inset LatexCommand index -name "C-API!array|(" - -\end_inset - - -\end_layout - -\begin_layout Subsection -Array structure and data access -\end_layout - -\begin_layout Standard -These macros all access the PyArrayObject structure members. - The input argument, obj, can be any -\family typewriter -PyObject* -\family default - that is directly interpretable as a -\family typewriter -PyArrayObject* -\family default - (any instance of the -\series bold -PyArray_Type -\series default - and its sub-types). - -\end_layout - -\begin_layout Description -PyArray_DATA ( -\family typewriter -void* -\family default -) ( -\family typewriter -PyObject* -\family default - obj) -\end_layout - -\begin_layout Description -PyArray_BYTES ( -\family typewriter -char* -\family default -) ( -\family typewriter -PyObject* -\family default - obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - These two macros are similar and obtain the pointer to the data-buffer - for the array. - The first macro can (and should be) assigned to a particular pointer where - the second is for generic processing. - If you have not guaranteed a contiguous and/or aligned array then be sure - you understand how to access the data in the array to avoid memory and/or - alignment problems. - -\end_layout - -\begin_layout Description -PyArray_DIMS ( -\family typewriter -npy_intp* -\family default -) ( -\family typewriter -PyObject* -\family default - arr) -\end_layout - -\begin_layout Description -PyArray_STRIDES ( -\family typewriter -npy_intp* -\family default -) ( -\family typewriter -PyObject* -\family default - arr) -\end_layout - -\begin_layout Description -PyArray_DIM ( -\family typewriter -npy_intp -\family default -) ( -\family typewriter -PyObject* -\family default - arr, -\family typewriter -int -\family default - n) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the shape in the -\emph on -n -\emph default - -\begin_inset Formula $^{\textrm{th}}$ -\end_inset - - dimension. -\end_layout - -\begin_layout Description -PyArray_STRIDE ( -\family typewriter -npy_intp -\family default -) ( -\family typewriter -PyObject* -\family default - arr, -\family typewriter -int -\family default - n) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the stride in the -\emph on -n -\emph default - -\begin_inset Formula $^{\textrm{th}}$ -\end_inset - - dimension. -\end_layout - -\begin_layout Description -PyArray_BASE ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - arr) -\end_layout - -\begin_layout Description -PyArray_DESCR ( -\family typewriter -PyArray_Descr* -\family default -) ( -\family typewriter -PyObject* -\family default - arr) -\end_layout - -\begin_layout Description -PyArray_FLAGS ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - arr) -\end_layout - -\begin_layout Description -PyArray_ITEMSIZE ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the itemsize for the elements of this array. -\end_layout - -\begin_layout Description -PyArray_TYPE ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the (builtin) typenumber for the elements of this array. - -\end_layout - -\begin_layout Description -PyArray_GETITEM ( -\family typewriter -PyObject -\family default - *) ( -\family typewriter -PyObject* -\family default - arr, -\family typewriter -void* -\family default - itemptr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Get a Python object from the ndarray, -\emph on -arr -\emph default -, at the location pointed to by itemptr. - Return -\family typewriter -NULL -\family default - on failure. - -\end_layout - -\begin_layout Description -PyArray_SETITEM ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - arr, -\family typewriter -void* -\family default - itemptr, -\family typewriter -PyObject* -\family default - obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert obj and place it in the ndarray, -\emph on -arr -\emph default -, at the place pointed to by itemptr. - Return -1 if an error occurs or 0 on success. - -\end_layout - -\begin_layout Description -PyArray_SIZE ( -\family typewriter -npy_intp -\family default -) ( -\family typewriter -PyObject* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns the total size (in number of elements) of the array. -\end_layout - -\begin_layout Description -PyArray_Size ( -\family typewriter -npy_intp -\family default -) ( -\family typewriter -PyObject* -\family default - obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns 0 if -\emph on -obj -\emph default - is not a sub-class of bigndarray. - Otherwise, returns the total number of elements in the array. - Safer version of -\family typewriter -PyArray_SIZE -\family default -( -\emph on -obj -\emph default -). -\end_layout - -\begin_layout Description -PyArray_NBYTES ( -\family typewriter -npy_intp -\family default -) ( -\family typewriter -PyObject* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns the total number of bytes consumed by the array. - -\end_layout - -\begin_layout Subsubsection -Data access -\end_layout - -\begin_layout Standard -These functions and macros provide easy access to elements of the ndarray - from C. - These work for all arrays. - You may need to take care when accessing the data in the array, however, - if it is not in machine byte-order, misaligned, or not writeable. - In other words, be sure to respect the state of the flags unless you know - what you are doing, or have previously guaranteed an array that is writeable, - aligned, and in machine byte-order using PyArray_FromAny. - If you wish to handle all types of arrays, the copyswap function for each - type is useful for handling misbehaved arrays. - Some platforms (e.g. - Solaris) do not like misaligned data and will crash if you de-reference - a misaligned pointer. - Other platforms (e.g. - x86 Linux) will just work more slowly with misaligned data. - -\end_layout - -\begin_layout Description -PyArray_GetPtr ( -\family typewriter -void* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - aobj, -\family typewriter -npy_intp* -\family default - ind) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a pointer to the data of the ndarray, -\emph on -aobj -\emph default -, at the N-dimensional index given by the c-array, -\emph on -ind -\emph default -, (which must be at least -\emph on -aobj -\emph default -->nd in size). - You may want to typecast the returned pointer to the data type of the ndarray. -\end_layout - -\begin_layout Description -PyArray_GETPTR1 ( -\family typewriter -void* -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -<npy_intp> -\family default - i) -\end_layout - -\begin_layout Description -PyArray_GETPTR2 ( -\family typewriter -void* -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -<npy_intp> -\family default - i, -\family typewriter -<npy_intp> -\family default - j) -\end_layout - -\begin_layout Description -PyArray_GETPTR3 ( -\family typewriter -void* -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -<npy_intp> -\family default - i, -\family typewriter -<npy_intp> -\family default - j, -\family typewriter -<npy_intp> -\family default - k) -\end_layout - -\begin_layout Description -PyArray_GETPTR4 ( -\family typewriter -void* -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -<npy_intp> -\family default - i, -\family typewriter -<npy_intp> -\family default - j, -\family typewriter -<npy_intp> -\family default - k, -\family typewriter -<npy_intp> -\family default - l) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Quick, inline access to the element at the given coordinates in the ndarray, - -\emph on -obj -\emph default -, which must have respectively 1, 2, 3, or 4 dimensions (this is not checked). - The corresponding -\emph on -i -\emph default -, -\emph on -j -\emph default -, -\emph on -k -\emph default -, and -\emph on -l -\emph default - coordinates can be any integer but will be interpreted as -\family typewriter -npy_intp -\family default -. - You may want to typecast the returned pointer to the data type of the ndarray. - -\end_layout - -\begin_layout Subsection -Creating arrays -\end_layout - -\begin_layout Subsubsection -From scratch -\end_layout - -\begin_layout Description -PyArray_NewFromDescr ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyTypeObject* -\family default - subtype, -\family typewriter -PyArray_Descr* -\family default - descr, -\family typewriter -int -\family default - nd, -\family typewriter -npy_intp* -\family default - dims, -\family typewriter -npy_intp* -\family default - strides, -\family typewriter -void* -\family default - data, -\family typewriter -int -\family default - flags, -\family typewriter -PyObject* -\family default - obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This is the main array creation function. - Most new arrays are created with this flexible function. - The returned object is an object of Python-type -\emph on -subtype -\emph default -, which must be a subtype of -\family typewriter -PyArray_Type -\family default -. - The array has -\emph on -nd -\emph default - dimensions, described by -\emph on -dims -\emph default -. - The data-type descriptor of the new array is -\emph on -descr -\emph default -. - If -\emph on -subtype -\emph default - is not -\family typewriter -&PyArray_Type -\family default - ( -\emph on -e.g. - -\emph default - a Python subclass of the ndarray), then -\emph on -obj -\emph default - is the object to pass to the -\series bold -__array_finalize__ -\series default - method of the subclass. - If -\emph on -data -\emph default - is -\family typewriter -NULL -\family default -, then new memory will be allocated and -\emph on -flags -\emph default - can be non-zero to indicate a Fortran-style contiguous array. - If -\emph on -data -\emph default - is not -\family typewriter -NULL -\family default -, then it is assumed to point to the memory to be used for the array and - the -\emph on -flags -\emph default - argument is used as the new flags for the array (except the state of -\family typewriter -NPY_OWNDATA -\family default - and -\family typewriter -UPDATEIFCOPY -\family default - flags of the new array will be reset). - In addition, if -\emph on -data -\emph default - is non-NULL, then -\emph on -strides -\emph default - can also be provided. - If -\emph on -strides -\emph default - is -\family typewriter -NULL -\family default -, then the array strides are computed as C-style contiguous (default) or - Fortran-style contiguous ( -\emph on -flags -\emph default - is nonzero for -\emph on -data -\emph default -= -\family typewriter -NULL -\family default - or -\emph on -flags -\emph default - & -\family typewriter -NPY_F_CONTIGUOUS -\family default - is nonzero non-NULL -\emph on -data -\emph default -). - Any provided -\emph on -dims -\emph default - and -\emph on -strides -\emph default - are copied into newly allocated dimension and strides arrays for the new - array object. -\end_layout - -\begin_layout Description -PyArray_New ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyTypeObject* -\family default - subtype, -\family typewriter -int -\family default - nd, -\family typewriter -npy_intp* -\family default - dims, -\family typewriter -int -\family default - type_num, -\family typewriter -npy_intp* -\family default - strides, -\family typewriter -void* -\family default - data, -\family typewriter -int -\family default - itemsize, -\family typewriter -int -\family default - flags, -\family typewriter -PyObject* -\family default - obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This is similar to -\family typewriter -PyArray -\family default -\series bold -_ -\family typewriter -\series default -DescrNew -\family default -(...) except you specify the data-type descriptor with -\emph on -type_num -\emph default - and -\emph on -itemsize -\emph default -, where -\emph on -type_num -\emph default - corresponds to a builtin (or user-defined) type. - If the type always has the same number of bytes, then itemsize is ignored. - Otherwise, itemsize specifies the particular size of this array. - -\end_layout - -\begin_layout Warning -If data is passed to -\family typewriter -PyArray_NewFromDescr -\family default - or -\family typewriter -PyArray_New -\family default -, this memory must not be deallocated until the new array is deleted. - If this data came from another Python object, this can be accomplished - using -\family typewriter -Py_INCREF -\family default - on that object and setting the base member of the new array to point to - that object. - If strides are passed in they must be consistent with the dimensions, the - itemsize, and the data of the array. -\end_layout - -\begin_layout Description -PyArray_SimpleNew ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -int -\family default - nd, -\family typewriter -npy_intp* -\family default - dims, -\family typewriter -int -\family default - typenum) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Create a new unitialized array of type, -\emph on -typenum -\emph default -, whose size in each of -\emph on -nd -\emph default - dimensions is given by the integer array, -\emph on -dims -\emph default -. - This function cannot be used to create a flexible-type array (no itemsize - given). -\end_layout - -\begin_layout Description -PyArray_SimpleNewFromData ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -int -\family default - nd, -\family typewriter -npy_intp* -\family default - dims, -\family typewriter -int -\family default - typenum, -\family typewriter -void* -\family default - data) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Create an array wrapper around -\emph on -data -\emph default - pointed to by the given pointer. - The array flags will have a default that the data area is well-behaved - and C-style contiguous. - The shape of the array is given by the -\emph on -dims -\emph default - c-array of length -\emph on -nd -\emph default -. - The data-type of the array is indicated by -\emph on -typenum -\emph default -. - -\end_layout - -\begin_layout Description -PyArray_SimpleNewFromDescr ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -int -\family default - nd, -\family typewriter -npy_intp* -\family default - dims, -\family typewriter -PyArray_Descr* -\family default - descr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Create a new array with the provided data-type descriptor, -\emph on -descr -\emph default -, of the shape deteremined by -\emph on -nd -\emph default - and -\emph on -dims -\emph default -. -\end_layout - -\begin_layout Description -PyArray_FILLWBYTE ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -int -\family default - val) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Fill the array pointed to by -\emph on -obj -\emph default ----which must be a (subclass of) bigndarray---with the contents of -\emph on -val -\emph default - (evaluated as a byte). -\end_layout - -\begin_layout Description -PyArray_Zeros ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -int -\family default - nd, -\family typewriter -npy_intp* -\family default - dims, -\family typewriter -PyArray_Descr* -\family default - dtype, -\family typewriter -int -\family default - fortran) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct a new -\emph on -nd -\emph default --dimensional array with shape given by -\emph on -dims -\emph default - and data type given by -\emph on -dtype -\emph default -. - If -\emph on -fortran -\emph default - is non-zero, then a Fortran-order array is created, otherwise a C-order - array is created. - Fill the memory with zeros (or the 0 object if -\emph on -dtype -\emph default - corresponds to -\family typewriter -PyArray_OBJECT -\family default -). - -\end_layout - -\begin_layout Description -PyArray_ZEROS ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -int -\family default - nd, -\family typewriter -npy_intp* -\family default - dims, -\family typewriter -int -\family default - type_num, -\family typewriter -int -\family default - fortran) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Macro form of -\family typewriter -PyArray_Zeros -\family default - which takes a type-number instead of a data-type object. -\end_layout - -\begin_layout Description -PyArray_Empty ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -int -\family default - nd, -\family typewriter -npy_intp* -\family default - dims, -\family typewriter -PyArray_Descr* -\family default - dtype, -\family typewriter -int -\family default - fortran) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct a new -\emph on -nd -\emph default --dimensional array with shape given by -\emph on -dims -\emph default - and data type given by -\emph on -dtype -\emph default -. - If -\emph on -fortran -\emph default - is non-zero, then a Fortran-order array is created, otherwise a C-order - array is created. - The array is uninitialized unless the data type corresponds to -\family typewriter -PyArray_OBJECT -\family default - in which case the array is filled with -\family typewriter -Py_None -\family default -. - -\end_layout - -\begin_layout Description -PyArray_EMPTY ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -int -\family default - nd, -\family typewriter -npy_intp* -\family default - dims, -\family typewriter -int -\family default - typenum, -\family typewriter -int -\family default - fortran) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Macro form of -\family typewriter -PyArray_Empty -\family default - which takes a type-number, -\emph on -typenum -\emph default -, instead of a data-type object. -\end_layout - -\begin_layout Description -PyArray_Arange ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -double -\family default - start, -\family typewriter -double -\family default - stop, -\family typewriter -double -\family default - step, -\family typewriter -int -\family default - typenum) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct a new 1-dimensional array of data-type, -\emph on -typenum -\emph default -, that ranges from -\emph on -start -\emph default - to -\emph on -stop -\emph default - (exclusive) in increments of -\emph on -step -\emph default -. - Equivalent to -\series bold -arange -\series default -( -\emph on -start -\emph default -, -\emph on -stop -\emph default -, -\emph on -step -\emph default -, dtype). -\end_layout - -\begin_layout Description -PyArray_ArangeObj ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - start, -\family typewriter -PyObject* -\family default - stop, -\family typewriter -PyObject* -\family default - step, -\family typewriter -PyArray_Descr* -\family default - descr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct a new 1-dimensional array of data-type determined by -\family typewriter -descr -\family default -, that ranges from -\family typewriter -start -\family default - to -\family typewriter -stop -\family default - (exclusive) in increments of -\family typewriter -step -\family default -. - Equivalent to arange( -\family typewriter -start -\family default -, -\family typewriter -stop -\family default -, -\family typewriter -step -\family default -, -\family typewriter -typenum -\family default -). - -\end_layout - -\begin_layout Subsubsection -From other objects -\end_layout - -\begin_layout Description -PyArray_FromAny ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - op, -\family typewriter -PyArray_Descr* -\family default - dtype, -\family typewriter -int -\family default - min_depth, -\family typewriter -int -\family default - max_depth, -\family typewriter -int -\family default - requirements, -\family typewriter -PyObject* -\family default - context) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This is the main function used to obtain an array from any nested sequence, - or object that exposes the array interface, -\family typewriter -op -\family default -. - The parameters allow specification of the required -\emph on -type -\emph default -, the minimum ( -\emph on -min_depth -\emph default -) and maximum ( -\emph on -max_depth -\emph default -) number of dimensions acceptable, and other -\emph on -requirements -\emph default - for the array. - The -\emph on -dtype -\emph default - argument needs to be a -\family typewriter -PyArray_Descr -\family default - structure indicating the desired data-type (including required byteorder). - The -\emph on -dtype -\emph default - argument may be NULL, indicating that any data-type (and byteorder) is - acceptable. - If you want to use -\family typewriter -NULL -\family default - for the -\emph on -dtype -\emph default - and ensure the array is notswapped then use -\family typewriter -PyArray_CheckFromAny -\family default -. - A value of 0 for either of the depth parameters causes the parameter to - be ignored. - Any of the following array flags can be added ( -\emph on -e.g. - -\emph default - using |) to get the -\emph on -requirements -\emph default - argument. - If your code can handle general ( -\emph on -e.g. - -\emph default - strided, byte-swapped, or unaligned arrays) then -\emph on -requirements -\emph default - may be 0. - Also, if -\emph on -op -\emph default - is not already an array (or does not expose the array interface), then - a new array will be created (and filled from -\emph on -op -\emph default - using the sequence protocol). - The new array will have -\family typewriter -NPY_DEFAULT -\family default - as its flags member. - The -\emph on -context -\emph default - argument is passed to the -\series bold -__array__ -\series default - method of -\emph on -op -\emph default - and is only used if the array is constructed that way. - -\end_layout - -\begin_deeper -\begin_layout Description -NPY_C_CONTIGUOUS Make sure the returned array is C-style contiguous -\end_layout - -\begin_layout Description -NPY_F_CONTIGUOUS Make sure the returned array is Fortran-style contiguous. - -\end_layout - -\begin_layout Description -NPY_ALIGNED Make sure the returned array is aligned on proper boundaries - for its data type. - An aligned array has the data pointer and every strides factor as a multiple - of the alignment factor for the data-type-descriptor. -\end_layout - -\begin_layout Description -NPY_WRITEABLE Make sure the returned array can be written to. - -\end_layout - -\begin_layout Description -NPY_ENSURECOPY Make sure a copy is made of -\emph on -op -\emph default -. - If this flag is not present, data is not copied if it can be avoided. - -\end_layout - -\begin_layout Description -NPY_ENSUREARRAY Make sure the result is a base-class ndarray or bigndarray. - By default, if -\emph on -op -\emph default - is an instance of a subclass of the bigndarray, an instance of that same - subclass is returned. - If this flag is set, an ndarray object will be returned instead. -\end_layout - -\begin_layout Description -NPY_FORCECAST Force a cast to the output type even if it cannot be done - safely. - Without this flag, a data cast will occur only if it can be done safely, - otherwise an error is reaised. - -\end_layout - -\begin_layout Description -NPY_UPDATEIFCOPY If -\emph on -op -\emph default - is already an array, but does not satisfy the requirements, then a copy - is made (which will satisfy the requirements). - If this flag is present and a copy (of an object that is already an array) - must be made, then the corresponding -\family typewriter -NPY_UPDATEIFCOPY -\family default - flag is set in the returned copy and -\emph on -op -\emph default - is made to be read-only. - When the returned copy is deleted (presumably after your calculations are - complete), its contents will be copied back into -\emph on -op -\emph default - and the -\emph on -op -\emph default - array will be made writeable again. - If -\emph on -op -\emph default - is not writeable to begin with, then an error is raised. - If -\emph on -op -\emph default - is not already an array, then this flag has no effect. -\end_layout - -\begin_layout Description -NPY_BEHAVED -\family typewriter -NPY_ALIGNED -\family default - | -\family typewriter -NPY_WRITEABLE -\end_layout - -\begin_layout Description -NPY_CARRAY -\family typewriter -NPY_C_CONTIGUOUS -\family default - | -\family typewriter -NPY_BEHAVED -\end_layout - -\begin_layout Description -NPY_CARRAY_RO -\family typewriter -NPY_C_CONTIGUOUS -\family default - | -\family typewriter -NPY_ALIGNED -\end_layout - -\begin_layout Description -NPY_FARRAY -\family typewriter -NPY_F_CONTIGUOUS -\family default - | -\family typewriter -NPY_BEHAVED -\end_layout - -\begin_layout Description -NPY_FARRAY_RO -\family typewriter -NPY_F_CONTIGUOUS -\family default - | -\family typewriter -NPY_ALIGNED -\end_layout - -\begin_layout Description -NPY_DEFAULT -\family typewriter -NPY_CARRAY -\end_layout - -\begin_layout Description -NPY_IN_ARRAY -\family typewriter -NPY_CONTIGUOUS -\family default - | -\family typewriter -NPY_ALIGNED -\end_layout - -\begin_layout Description -NPY_IN_FARRAY -\family typewriter -NPY_F_CONTIGUOUS -\family default - | -\family typewriter -NPY_ALIGNED -\end_layout - -\begin_layout Description -NPY_INOUT_ARRAY -\family typewriter -NPY_C_CONTIGUOUS -\family default - | -\family typewriter -NPY_WRITEABLE -\family default - | -\family typewriter -NPY_ALIGNED -\end_layout - -\begin_layout Description -NPY_INOUT_FARRAY -\family typewriter -NPY_F_CONTIGUOUS -\family default - | -\family typewriter -NPY_WRITEABLE -\family default - | -\family typewriter -NPY_ALIGNED -\end_layout - -\begin_layout Description -NPY_OUT_ARRAY -\family typewriter -NPY_C_CONTIGUOUS -\family default - | -\family typewriter -NPY_WRITEABLE -\family default - | -\family typewriter -NPY_ALIGNED -\family default - | -\family typewriter -NPY_UPDATEIFCOPY -\end_layout - -\begin_layout Description -NPY_OUT_FARRAY -\family typewriter -NPY_F_CONTIGUOUS -\family default - | -\family typewriter -NPY_WRITEABLE -\family default - | -\family typewriter -NPY_ALIGNED -\family default - | -\family typewriter -UPDATEIFCOPY -\end_layout - -\end_deeper -\begin_layout Description -PyArray_CheckFromAny ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - op, -\family typewriter -PyArray_Descr* -\family default - dtype, -\family typewriter -int -\family default - min_depth, -\family typewriter -int -\family default - max_depth, -\family typewriter -int -\family default - requirements, -\family typewriter -PyObject* -\family default - context) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Nearly identical to -\family typewriter -PyArray_FromAny -\family default -(...) except -\emph on -requirements -\emph default - can contain -\family typewriter -NPY_NOTSWAPPED -\family default - (over-riding the specification in -\emph on -dtype -\emph default -) and -\family typewriter -NPY_ELEMENTSTRIDES -\family default - which indicates that the array should be aligned in the sense that the - strides are multiples of the element size. - -\end_layout - -\begin_layout Description -NPY_NOTSWAPPED Make sure the returned array has a data-type descriptor that - is in machine byte-order, over-riding any specification in the -\emph on -dtype -\emph default - argument. - Normally, the byte-order requirement is determined by the -\emph on -dtype -\emph default - argument. - If this flag is set and the dtype argument does not indicate a machine - byte-order descriptor (or is NULL and the object is already an array with - a data-type descriptor that is not in machine byte-order), then a new data-type - descriptor is created and used with its byte-order field set to native. -\end_layout - -\begin_layout Description -NPY_BEHAVED_NS -\family typewriter -NPY_ALIGNED -\family default - | -\family typewriter -NPY_WRITEABLE -\family default - | -\family typewriter -NPY_NOTSWAPPED -\end_layout - -\begin_layout Description -NPY_ELEMENTSTRIDES Make sure the returned array has strides that are multiples - of the element size. - -\end_layout - -\begin_layout Description -PyArray_FromArray ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - op, -\family typewriter -PyArray_Descr* -\family default - newtype, -\family typewriter -int -\family default - requirements) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Special case of -\family typewriter -PyArray_FromAny -\family default - for when -\emph on -op -\emph default - is already an array but it needs to be of a specific -\emph on -newtype -\emph default - (including byte-order) or has certain -\emph on -requirements -\emph default -. -\end_layout - -\begin_layout Description -PyArray_FromStructInterface ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - op) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns an ndarray object from a Python object that exposes the -\series bold -__array_struct__ -\series default - method and follows the array interface protocol. - If the object does not contain this method then a borrowed reference to - -\family typewriter -Py_NotImplemented -\family default - is returned. -\end_layout - -\begin_layout Description -PyArray_FromInterface ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - op) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns an ndarray object from a Python object that exposes the -\series bold -__array_shape__ -\series default - and -\series bold -__array_typestr__ -\series default - methods following the array interface protocol. - If the object does not contain one of these method then a borrowed reference - to -\family typewriter -Py_NotImplemented -\family default - is returned. -\end_layout - -\begin_layout Description -PyArray_FromArrayAttr ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - op, -\family typewriter -PyArray_Descr* -\family default - dtype, -\family typewriter -PyObject* -\family default - context) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an ndarray object from a Python object that exposes the -\series bold -__array__ -\series default - method. - The -\series bold -__array__ -\series default - method can take 0, 1, or 2 arguments ([dtype, context]) where -\emph on -context -\emph default - is used to pass information about where the -\series bold -__array__ -\series default - method is being called from (currently only used in ufuncs). - -\end_layout - -\begin_layout Description -PyArray_ContiguousFromAny ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - op, -\family typewriter -int -\family default - typenum, -\family typewriter -int -\family default - min_depth, -\family typewriter -int -\family default - max_depth) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This function returns a (C-style) contiguous and behaved function array - from any nested sequence or array interface exporting object, -\emph on -op -\emph default -, of (non-flexible) type given by the enumerated -\emph on -typenum -\emph default -, of minimum depth -\emph on -min_depth -\emph default -, and of maximum depth -\emph on -max_depth -\emph default -. - Equivalent to a call to -\family typewriter -PyArray_FromAny -\family default - with requirements set to -\family typewriter -NPY_DEFAULT -\family default - and the type_num member of the type argument set to -\emph on -typenum -\emph default -. -\end_layout - -\begin_layout Description -PyArray_FromObject (PyObject *) (PyObject * op, int typenum, int min_depth, - int max_depth) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an aligned and in native-byteorder array from any nested sequence - or array-interface exporting object, op, of a type given by the enumerated - typenum. - The minimum number of dimensions the array can have is given by min_depth - while the maximum is max_depth. - This is equivalent to a call to PyArray_FromAny with requirements set to - BEHAVED. - -\end_layout - -\begin_layout Description -PyArray_EnsureArray ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - op) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This function -\series bold -steals a reference -\series default - to -\family typewriter -op -\family default - and makes sure that -\family typewriter -op -\family default - is a base-class ndarray. - It special cases array scalars, but otherwise calls -\series bold -PyArray_FromAny -\series default -( -\family typewriter -op -\family default -, NULL, 0, 0, NPY_ENSUREARRAY). -\end_layout - -\begin_layout Description -PyArray_FromString ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -char* -\family default - string, -\family typewriter -npy_intp -\family default - slen, -\family typewriter -PyArray_Descr* -\family default - dtype, -\family typewriter -npy_intp -\family default - num, -\family typewriter -char* -\family default - sep) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct a one-dimensional ndarray of a single type from a binary or (ASCII) - text -\family typewriter -string -\family default - of length -\family typewriter -slen -\family default -. - The data-type of the array to-be-created is given by -\family typewriter -dtype -\family default -. - If num is -1, then -\series bold -copy -\series default - the entire string and return an appropriately sized array, otherwise, -\family typewriter -num -\family default - is the number of items to -\series bold -copy -\series default - from the string. - If -\family typewriter -sep -\family default - is NULL (or -\begin_inset Quotes eld -\end_inset - - -\begin_inset Quotes erd -\end_inset - -), then interpret the string as bytes of binary data, otherwise convert - the sub-strings separated by -\family typewriter -sep -\family default - to items of data-type -\family typewriter -dtype -\family default -. - Some data-types may not be readable in text mode and an error will be raised - if that occurs. - All errors return NULL. - -\end_layout - -\begin_layout Description -PyArray_FromFile ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -FILE* -\family default - fp, -\family typewriter -PyArray_Descr* -\family default - dtype, -\family typewriter -npy_intp -\family default - num, -\family typewriter -char* -\family default - sep) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct a one-dimensional ndarray of a single type from a binary or text - file. - The open file pointer is -\family typewriter -fp -\family default -, the data-type of the array to be created is given by -\family typewriter -dtype -\family default -. - This must match the data in the file. - If -\family typewriter -num -\family default - is -1, then read until the end of the file and return an appropriately - sized array, otherwise, -\family typewriter -num -\family default - is the number of items to read. - If -\family typewriter -sep -\family default - is NULL (or -\begin_inset Quotes eld -\end_inset - - -\begin_inset Quotes erd -\end_inset - -), then read from the file in binary mode, otherwise read from the file - in text mode with -\family typewriter -sep -\family default - providing the item separator. - Some array types cannot be read in text mode in which case an error is - raised. -\end_layout - -\begin_layout Description -PyArray_FromBuffer ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - buf, -\family typewriter -PyArray_Descr* -\family default - dtype, -\family typewriter -npy_intp -\family default - count, -\family typewriter -npy_intp -\family default - offset) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct a one-dimensional ndarray of a single type from an object, -\family typewriter -buf -\family default -, that exports the (single-segment) buffer protocol (or has an attribute - __buffer__ that returns an object that exports the buffer protocol). - A writeable buffer will be tried first followed by a read-only buffer. - The NPY_WRITEABLE flag of the returned array will reflect which one was - successful. - The data is assumed to start at -\family typewriter -offset -\family default - bytes from the start of the memory location for the object. - The type of the data in the buffer will be interpreted depending on the - data-type descriptor, -\family typewriter -dtype. - -\family default - If -\family typewriter -count -\family default - is negative then it will be determined from the size of the buffer and - the requested itemsize, otherwise, -\family typewriter -count -\family default - represents how many elements should be converted from the buffer. - -\end_layout - -\begin_layout Description -PyArray_CopyInto ( -\family typewriter -int -\family default -) ( -\family typewriter -PyArrayObject* -\family default - dest, -\family typewriter -PyArrayObject* -\family default - src) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Copy from the source array, -\family typewriter -src -\family default -, into the destination array, -\family typewriter -dest -\family default -, performing a data-type conversion if necessary. - If an error occurs return -1 (otherwise 0). - The shape of -\family typewriter -src -\family default - must be broadcastable to the shape of -\family typewriter -dest -\family default -. - The data areas of dest and src must not overlap. - -\end_layout - -\begin_layout Description -PyArray_MoveInto ( -\family typewriter -int -\family default -) ( -\family typewriter -PyArrayObject* -\family default - dest, -\family typewriter -PyArrayObject* -\family default - src) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Move data from the source array, -\family typewriter -src -\family default -, into the destination array, -\family typewriter -dest -\family default -, performing a data-type conversion if necessary. - If an error occurs return -1 (otherwise 0). - The shape of -\family typewriter -src -\family default - must be broadcastable to the shape of -\family typewriter -dest -\family default -. - The data areas of dest and src may overlap. - -\end_layout - -\begin_layout Description -PyArray_GETCONTIGUOUS ( -\family typewriter -PyArrayObject* -\family default -) ( -\family typewriter -PyObject* -\family default - op) -\end_layout - -\begin_layout Description -\InsetSpace ~ - If -\family typewriter -op -\family default - is already (C-style) contiguous and well-behaved then just return a reference, - otherwise return a (contiguous and well-behaved) copy of the array. - The parameter op must be a (sub-class of an) ndarray and no checking for - that is done. -\end_layout - -\begin_layout Description -PyArray_FROM_O ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert -\family typewriter -obj -\family default - to an ndarray. - The argument can be any nested sequence or object that exports the array - interface. - This is a macro form of -\family typewriter -PyArray_FromAny -\family default - using -\family typewriter -NULL -\family default -, 0, 0, 0 for the other arguments. - Your code must be able to handle any data-type descriptor and any combination - of data-flags to use this macro. - -\end_layout - -\begin_layout Description -PyArray_FROM_OF ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -int -\family default - requirements) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Similar to -\family typewriter -PyArray_FROM_O -\family default - except it can take an argument of -\emph on -requirements -\emph default - indicating properties the resulting array must have. - Available requirements that can be enforced are -\family typewriter -NPY_CONTIGUOUS -\family default -, -\family typewriter -NPY_F_CONTIGUOUS -\family default -, -\family typewriter -NPY_ALIGNED -\family default -, -\family typewriter -NPY_WRITEABLE -\family default -, -\family typewriter -NPY_NOTSWAPPED -\family default -, -\family typewriter -NPY_ENSURECOPY -\family default -, -\family typewriter -NPY_UPDATEIFCOPY -\family default -, -\family typewriter -NPY_FORCECAST -\family default -, and -\family typewriter -NPY_ENSUREARRAY -\family default -. - Standard combinations of flags can also be used: -\end_layout - -\begin_layout Description -PyArray_FROM_OT ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -int -\family default - typenum) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Similar to -\family typewriter -PyArray_FROM_O -\family default - except it can take an argument of -\emph on -typenum -\emph default - specifying the type-number the returned array. -\end_layout - -\begin_layout Description -PyArray_FROM_OTF ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -int -\family default - typenum, -\family typewriter -int -\family default - requirements) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Combination of -\family typewriter -PyArray_FROM_OF -\family default - and -\family typewriter -PyArray_FROM_OT -\family default - allowing both a -\emph on -typenum -\emph default - and a -\emph on -flags -\emph default - argument to be provided.. -\end_layout - -\begin_layout Description -PyArray_FROMANY ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -int -\family default - typenum, -\family typewriter -int -\family default - min, -\family typewriter -int -\family default - max, -\family typewriter -int -\family default - requirements) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Similar to -\family typewriter -PyArray_FromAny -\family default - except the data-type is specified using a typenumber. - -\family typewriter -PyArray_DescrFromType -\family default -( -\emph on -typenum -\emph default -) is passed directly to -\family typewriter -PyArray_FromAny -\family default -. - This macro also adds -\family typewriter -NPY_DEFAULT -\family default - to requirements if -\family typewriter -NPY_ENSURECOPY -\family default - is passed in as requirements. - -\end_layout - -\begin_layout Description -PyArray_CheckAxis ( -\family typewriter -PyObject* -\family default -)( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -int* -\family default - axis, -\family typewriter -int -\family default - requirements) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Encapsulate the functionality of functions and methods that take the axis= - keyword and work properly with None as the axis argument. - The input array is -\family typewriter -obj -\family default -, while -\family typewriter -*axis -\family default - is a converted integer (so that >=MAXDIMS is the None value), and -\family typewriter -requirements -\family default - gives the needed properties of -\family typewriter -obj -\family default -. - The output is a converted version of the input so that requirements are - met and if needed a flattening has occurred. - On output negative values of -\family typewriter -*axis -\family default - are converted and the new value is checked to ensure consistency with the - shape of -\family typewriter -obj -\family default -. -\end_layout - -\begin_layout Subsection -Dealing with types -\end_layout - -\begin_layout Subsubsection -General check of Python Type -\end_layout - -\begin_layout Description -PyArray_Check (op) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if -\emph on -op -\emph default - is a Python object whose type is a sub-type of -\family typewriter -PyArray_Type -\family default -. - -\end_layout - -\begin_layout Description -PyArray_CheckExact (op) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if -\emph on -op -\emph default - is a Python object with type -\family typewriter -PyArray_Type -\family default -. -\end_layout - -\begin_layout Description -PyArray_HasArrayInterface (op, out) -\end_layout - -\begin_layout Description -\InsetSpace ~ - If -\family typewriter -op -\family default - implements any part of the array interface, then -\family typewriter -out -\family default - will contain a new reference to the newly created ndarray using the interface - or -\family typewriter -out -\family default - will contain -\family typewriter -NULL -\family default - if an error during conversion occurs. - Otherwise, out will contain a borrowed reference to -\family typewriter -Py_NotImplemented -\family default - and no error condition is set. - -\end_layout - -\begin_layout Description -PyArray_HasArrayInterfaceType (op, type, context, out) -\end_layout - -\begin_layout Description -\InsetSpace ~ - If -\family typewriter -op -\family default - implements any part of the array interface, then -\family typewriter -out -\family default - will contain a new reference to the newly created ndarray using the interface - or -\family typewriter -out -\family default - will contain -\family typewriter -NULL -\family default - if an error during conversion occurs. - Otherwise, out will contain a borrowed reference to Py_NotImplemented and - no error condition is set. - This version allows setting of the type and context in the part of the - array interface that looks for the -\series bold -__array__ -\series default - attribute. - -\end_layout - -\begin_layout Description -PyArray_IsZeroDim (op) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if -\emph on -op -\emph default - is an instance of (a subclass of) -\family typewriter -PyArray_Type -\family default - and has 0 dimensions. -\end_layout - -\begin_layout Description -PyArray_IsScalar (op, cls) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if -\emph on -op -\emph default - is an instance of -\family typewriter -Py<cls>ArrType_Type -\family default -. -\end_layout - -\begin_layout Description -PyArray_CheckScalar (op) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if -\emph on -op -\emph default - is either an array scalar (an instance of a sub-type of -\family typewriter -PyGenericArr_Type -\family default -), or an instance of (a sub-class of) -\family typewriter -PyArray_Type -\family default - whose dimensionality is 0. -\end_layout - -\begin_layout Description -PyArray_IsPythonScalar (op) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if -\emph on -op -\emph default - is a builtin Python -\begin_inset Quotes eld -\end_inset - -scalar -\begin_inset Quotes erd -\end_inset - - object (int, float, complex, str, unicode, long, bool). -\end_layout - -\begin_layout Description -PyArray_IsAnyScalar (op) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if -\emph on -op -\emph default - is either a Python scalar or an array scalar (an instance of a sub-type - of -\family typewriter -PyGenericArr_Type -\family default -). - -\end_layout - -\begin_layout Subsubsection -Data-type checking -\end_layout - -\begin_layout Standard -For the typenum macros, the argument is an integer representing an enumerated - array data type. - For the array type checking macros the argument must be a -\family typewriter -PyObject* -\family default - that can be directly interpreted as a -\family typewriter -PyArrayObject* -\family default -. - -\end_layout - -\begin_layout Description -PyTypeNum_ISUNSIGNED (num) -\end_layout - -\begin_layout Description -PyDataType_ISUNSIGNED (descr) -\end_layout - -\begin_layout Description -PyArray_ISUNSIGNED (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Type represents an unsigned integer. -\end_layout - -\begin_layout Description -PyTypeNum_ISSIGNED (num) -\end_layout - -\begin_layout Description -PyDataType_ISSIGNED (descr) -\end_layout - -\begin_layout Description -PyArray_ISSIGNED (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Type represents a signed integer. -\end_layout - -\begin_layout Description -PyTypeNum_ISINTEGER (num) -\end_layout - -\begin_layout Description -PyDataType_ISINTEGER (descr) -\end_layout - -\begin_layout Description -PyArray_ISINTEGER (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Type represents any integer. -\end_layout - -\begin_layout Description -PyTypeNum_ISFLOAT (num) -\end_layout - -\begin_layout Description -PyDataType_ISFLOAT (descr) -\end_layout - -\begin_layout Description -PyArray_ISFLOAT (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Type represents any floating point number. -\end_layout - -\begin_layout Description -PyTypeNum_ISCOMPLEX (num) -\end_layout - -\begin_layout Description -PyDataType_ISCOMPLEX (descr) -\end_layout - -\begin_layout Description -PyArray_ISCOMPLEX (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Type represents any complex floating point number. -\end_layout - -\begin_layout Description -PyTypeNum_ISNUMBER (num) -\end_layout - -\begin_layout Description -PyDataType_ISNUMBER (descr) -\end_layout - -\begin_layout Description -PyArray_ISNUMBER (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Type represents any integer, floating point, or complex floating point - number. -\end_layout - -\begin_layout Description -PyTypeNum_ISSTRING (num) -\end_layout - -\begin_layout Description -PyDataType_ISSTRING (descr) -\end_layout - -\begin_layout Description -PyArray_ISSTRING (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Type represents a string data type. -\end_layout - -\begin_layout Description -PyTypeNum_ISPYTHON (num) -\end_layout - -\begin_layout Description -PyDataType_ISPYTHON (descr) -\end_layout - -\begin_layout Description -PyArray_ISPYTHON (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Type represents an enumerated type corresponding to one of the standard - Python scalar (bool, int, float, or complex). - -\end_layout - -\begin_layout Description -PyTypeNum_ISFLEXIBLE (num) -\end_layout - -\begin_layout Description -PyDataType_ISFLEXIBLE (descr) -\end_layout - -\begin_layout Description -PyArray_ISFLEXIBLE (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Type represents one of the flexible array types ( -\family typewriter -NPY_STRING -\family default -, -\family typewriter -NPY_UNICODE -\family default -, or -\family typewriter -NPY_VOID -\family default -). -\end_layout - -\begin_layout Description -PyTypeNum_ISUSERDEF (num) -\end_layout - -\begin_layout Description -PyDataType_ISUSERDEF (descr) -\end_layout - -\begin_layout Description -PyArray_ISUSERDEF (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Type represents a user-defined type. -\end_layout - -\begin_layout Description -PyTypeNum_ISEXTENDED (num) -\end_layout - -\begin_layout Description -PyDataType_ISEXTENDED (descr) -\end_layout - -\begin_layout Description -PyArray_ISEXTENDED (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Type is either flexible or user-defined. -\end_layout - -\begin_layout Description -PyTypeNum_ISOBJECT (num) -\end_layout - -\begin_layout Description -PyDataType_ISOBJECT (descr) -\end_layout - -\begin_layout Description -PyArray_ISOBJECT (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Type represents object data type. -\end_layout - -\begin_layout Description -PyTypeNum_ISBOOL (num) -\end_layout - -\begin_layout Description -PyDataType_ISBOOL (descr) -\end_layout - -\begin_layout Description -PyArray_ISBOOL (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Type represents Boolean data type. -\end_layout - -\begin_layout Description -PyDataType_HASFIELDS (descr) -\end_layout - -\begin_layout Description -PyArray_HASFIELDS (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Type has fields associated with it. -\end_layout - -\begin_layout Description -PyArray_ISNOTSWAPPED (m) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if the data area of the ndarray -\emph on -m -\emph default - is in machine byte-order according to the array's data-type descriptor. -\end_layout - -\begin_layout Description -PyArray_ISBYTESWAPPED (m) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if the data area of the ndarray -\emph on -m -\emph default - is -\series bold -not -\series default - in machine byte-order according to the array's data-type descriptor. - -\end_layout - -\begin_layout Description -PyArray_EquivTypes ( -\family typewriter -Bool -\family default -) ( -\family typewriter -PyArray_Descr* -\family default - type1, -\family typewriter -PyArray_Descr* -\family default - type2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return -\family typewriter -NPY_TRUE -\family default - if -\emph on -type1 -\emph default - and -\emph on -type2 -\emph default - actually represent equivalent types for this platform (the fortran member - of each type is ignored). - For example, on 32-bit platforms, -\family typewriter -NPY_LONG -\family default - and -\family typewriter -NPY_INT -\family default - are equivalent. - Otherwise return -\family typewriter -NPY_FALSE -\family default -. -\end_layout - -\begin_layout Description -PyArray_EquivArrTypes ( -\family typewriter -Bool -\family default -) ( -\family typewriter -PyArrayObject* -\family default - a1, -\family typewriter -PyArrayObject -\family default -* a2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return -\family typewriter -NPY_TRUE -\family default - if -\emph on -a1 -\emph default - and -\emph on -a2 -\emph default - are arrays with equivalent types for this platform. - -\end_layout - -\begin_layout Description -PyArray_EquivTypenums ( -\family typewriter -Bool -\family default -) ( -\family typewriter -int -\family default - typenum1, -\family typewriter -int -\family default - typenum2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Special case of -\family typewriter -PyArray_EquivTypes -\family default -(...) that does not accept flexible data types but may be easier to call. - -\end_layout - -\begin_layout Description -PyArray_EquivByteorders (int) (<byteorder> b1, <byteorder> b2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - True if byteorder characters ( -\family typewriter -NPY_LITTLE -\family default -, -\family typewriter -NPY_BIG -\family default -, -\family typewriter -NPY_NATIVE -\family default -, -\family typewriter -NPY_IGNORE -\family default -) are either equal or equivalent as to their specification of a native byte - order. - Thus, on a little-endian machine -\family typewriter -NPY_LITTLE -\family default - and -\family typewriter -NPY_NATIVE -\family default - are equivalent where they are not equivalent on a big-endian machine. - -\end_layout - -\begin_layout Subsubsection -Converting data types -\end_layout - -\begin_layout Description -PyArray_Cast ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - arr, -\family typewriter -int -\family default - typenum) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Mainly for backwards compatibility to the Numeric C-API and for simple - casts to non-flexible types. - Return a new array object with the elements of -\emph on -arr -\emph default - cast to the data-type -\emph on -typenum -\emph default - which must be one of the enumerated types and not a flexible type. -\end_layout - -\begin_layout Description -PyArray_CastToType ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - arr, -\family typewriter -PyArray_Descr* -\family default - type, -\family typewriter -int -\family default - fortran) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a new array of the -\emph on -type -\emph default - specified, casting the elements of -\emph on -arr -\emph default - as appropriate. - The fortran argument specifies the ordering of the output array. - -\end_layout - -\begin_layout Description -PyArray_CastTo ( -\family typewriter -int -\family default -) ( -\family typewriter -PyArrayObject* -\family default - out, -\family typewriter -PyArrayObject* -\family default - in) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Cast the elements of the array -\emph on -in -\emph default - into the array -\emph on -out -\emph default -. - The output array should be writeable, have an integer-multiple of the number - of elements in the input array (more than one copy can be placed in out), - and have a data type that is one of the builtin types. - Returns 0 on success and -1 if an error occurs. -\end_layout - -\begin_layout Description -PyArray_GetCastFunc ( -\family typewriter -PyArray_VectorUnaryFunc* -\family default -) ( -\family typewriter -PyArray_Descr* -\family default - from, -\family typewriter -int -\family default - totype) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the low-level casting function to cast from the given descriptor - to the builtin type number. - If no casting function exists return -\family typewriter -NULL -\family default - and set an error. - Using this function instead of direct access to -\emph on -from -\emph default -->f->cast will allow support of any user-defined casting functions added - to a descriptors casting dictionary. - -\end_layout - -\begin_layout Description -PyArray_CanCastSafely ( -\family typewriter -int -\family default -) ( -\family typewriter -int -\family default - fromtype, -\family typewriter -int -\family default - totype) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns non-zero if an array of data type -\emph on -fromtype -\emph default - can be cast to an array of data type -\emph on -totype -\emph default - without losing information. - An exception is that 64-bit integers are allowed to be cast to 64-bit floating - point values even though this can lose precision on large integers so as - not to proliferate the use of long doubles without explict requests. - Flexible array types are not checked according to their lengths with this - function. - -\end_layout - -\begin_layout Description -PyArray_CanCastTo ( -\family typewriter -int -\family default -) ( -\family typewriter -PyArray_Descr* -\family default - fromtype, -\family typewriter -PyArray_Descr* -\family default - totype) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns non-zero if an array of data type -\emph on -fromtype -\emph default - (which can include flexible types) can be cast safely to an array of data - type -\emph on -totype -\emph default - (which can include flexible types). - This is basically a wrapper around -\family typewriter -PyArray_CanCastSafely -\family default - with additional support for size checking if -\emph on -fromtype -\emph default - and -\emph on -totype -\emph default - are -\family typewriter -NPY_STRING -\family default - or -\family typewriter -NPY_UNICODE -\family default -. -\end_layout - -\begin_layout Description -PyArray_ObjectType ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - op, -\family typewriter -int -\family default - mintype) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This function is useful for determining a common type that two or more - arrays can be converted to. - It only works for non-flexible array types as no itemsize information is - passed. - The -\emph on -mintype -\emph default - argument represents the minimum type acceptable, and -\emph on -op -\emph default - represents the object that will be converted to an array. - The return value is the enumerated typenumber that represents the data-type - that -\emph on -op -\emph default - should have. -\end_layout - -\begin_layout Description -PyArray_ArrayType ( -\family typewriter -void -\family default -) ( -\family typewriter -PyObject* -\family default - op, -\family typewriter -PyArray_Descr* -\family default - mintype, -\family typewriter -PyArray_Descr* -\family default - outtype) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This function works similarly to -\family typewriter -PyArray_ObjectType -\family default -(...) except it handles flexible arrays. - The -\emph on -mintype -\emph default - argument can have an itemsize member and the -\emph on -outtype -\emph default - argument will have an itemsize member at least as big but perhaps bigger - depending on the object -\emph on -op -\emph default -. - -\end_layout - -\begin_layout Description -PyArray_ConvertToCommonType ( -\family typewriter -PyArrayObject** -\family default -) ( -\family typewriter -PyObject* -\family default - op, -\family typewriter -int* -\family default - n) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert a sequence of Python objects contained in -\emph on -op -\emph default - to an array of ndarrays each having the same data type. - The type is selected based on the typenumber (larger type number is chosen - over a smaller one) ignoring objects that are only scalars. - The length of the sequence is returned in -\emph on -n -\emph default -, and an -\emph on -n -\emph default --length array of -\family typewriter -PyArrayObject -\family default - pointers is the return value (or -\family typewriter -NULL -\family default - if an error occurs). - The returned array must be freed by the caller of this routine (using -\family typewriter -PyDataMem_FREE -\family default -) and all the array objects in it -\family typewriter -DECREF -\family default -'d or a memory-leak will occur. - The example template-code below shows a typically usage. -\end_layout - -\begin_layout LyX-Code -mps = PyArray_ConvertToCommonType(obj, &n); -\end_layout - -\begin_layout LyX-Code -if (mps==NULL) return NULL; -\end_layout - -\begin_layout LyX-Code -<code> -\end_layout - -\begin_layout LyX-Code -<before return> -\end_layout - -\begin_layout LyX-Code -for (i=0; i<n; i++) Py_DECREF(mps[i]); -\end_layout - -\begin_layout LyX-Code -PyDataMem_FREE(mps); -\end_layout - -\begin_layout LyX-Code -<return> -\end_layout - -\begin_layout Description -PyArray_Zero ( -\family typewriter -char* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A pointer to newly created memory of size -\emph on -arr -\emph default -->itemsize that holds the representation of 0 for that type. - The returned pointer, -\emph on -ret -\emph default -, -\series bold -must be freed -\series default - using -\family typewriter -\emph on -PyDataMem_FREE -\family default -\emph default -(ret) when it is not needed anymore. -\end_layout - -\begin_layout Description -PyArray_One ( -\family typewriter -char* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A pointer to newly created memory of size -\emph on -arr -\emph default -->itemsize that holds the representation of 1 for that type. - The returned pointer, -\emph on -ret -\emph default -, -\series bold -must be freed -\series default - using -\family typewriter -PyDataMem_FREE -\family default -(ret) when it is not needed anymore. -\end_layout - -\begin_layout Description -PyArray_ValidType ( -\family typewriter -int -\family default -) ( -\family typewriter -int -\family default - typenum) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns -\family typewriter -NPY_TRUE -\family default - if -\family typewriter -\emph on -typenum -\family default -\emph default - represents a valid type-number (builtin or user-defined or character code). - Otherwise, this function returns -\family typewriter -NPY_FALSE -\family default -. -\end_layout - -\begin_layout Subsubsection -New data types -\end_layout - -\begin_layout Description -PyArray_InitArrFuncs ( -\family typewriter -void -\family default -) ( -\family typewriter -PyArray_ArrFuncs* -\family default - f) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Initialize all function pointers and members to -\family typewriter -NULL -\family default -. -\end_layout - -\begin_layout Description -PyArray_RegisterDataType ( -\family typewriter -int -\family default -) ( -\family typewriter -PyArray_Descr* -\family default - dtype) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Register a data-type as a new user-defined data type for arrays. - The type must have most of its entries filled in. - This is not always checked and errors can produce segfaults. - In particular, the typeobj member of the -\family typewriter -dtype -\family default - structure must be filled with a Python type that has a fixed-size element-size - that corresponds to the elsize member of -\emph on -dtype -\emph default -. - Also the -\family typewriter -f -\family default - member must have the required functions: nonzero, copyswap, copyswapn, - getitem, setitem, and cast (some of the cast functions may be -\family typewriter -NULL -\family default - if no support is desired). - To avoid confusion, you should choose a unique character typecode but this - is not enforced and not relied on internally. - -\end_layout - -\begin_layout Description -\InsetSpace ~ - A user-defined type number is returned that uniquely identifies the type. - A pointer to the new structure can then be obtained from -\family typewriter -PyArray_DescrFromType -\family default - using the returned type number. - A -1 is returned if an error occurs. - If this -\family typewriter -\emph on -dtype -\family default -\emph default - has already been registered (checked only by the address of the pointer), - then return the previously-assigned type-number. - -\end_layout - -\begin_layout Description -PyArray_RegisterCastFunc ( -\family typewriter -int -\family default -) ( -\family typewriter -PyArray_Descr* -\family default - descr, -\family typewriter -int -\family default - totype, -\family typewriter -PyArray_VectorUnaryFunc* -\family default - castfunc) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Register a low-level casting function, -\emph on -castfunc -\emph default -, to convert from the data-type, -\emph on -descr -\emph default -, to the given data-type number, -\emph on -totype -\emph default -. - Any old casting function is over-written. - A -\family typewriter -0 -\family default - is returned on success or a -\family typewriter --1 -\family default - on failure. - -\end_layout - -\begin_layout Description -PyArray_RegisterCanCast ( -\family typewriter -int -\family default -) ( -\family typewriter -PyArray_Descr* -\family default - descr, -\family typewriter -int -\family default - totype, -\family typewriter -PyArray_SCALARKIND -\family default - scalar) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Register the data-type number, -\emph on -totype -\emph default -, as castable from data-type object, -\emph on -descr -\emph default -, of the given -\emph on -scalar -\emph default - kind. - Use -\emph on -scalar -\emph default - = -\family typewriter -NPY_NOSCALAR -\family default - to register that an array of data-type -\emph on -descr -\emph default - can be cast safely to a data-type whose type_number is -\emph on -totype -\emph default -. - -\end_layout - -\begin_layout Subsubsection -Special functions for PyArray_OBJECT -\end_layout - -\begin_layout Description -PyArray_INCREF ( -\family typewriter -int -\family default -) ( -\family typewriter -PyArrayObject* -\family default - op) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Used for an array, -\emph on -op -\emph default -, that contains any Python objects. - It increments the reference count of every object in the array according - to the data-type of -\emph on -op -\emph default -. - A -1 is returned if an error occurs, otherwise 0 is returned. -\end_layout - -\begin_layout Description -PyArray_Item_INCREF ( -\family typewriter -void -\family default -) ( -\family typewriter -char* -\family default - ptr, -\family typewriter -PyArray_Descr* -\family default - dtype) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A function to INCREF all the objects at the location -\emph on -ptr -\emph default - according to the data-type -\emph on -dtype -\emph default -. - If -\emph on -ptr -\emph default - is the start of a record with an object at any offset, then this will (recursiv -ely) increment the reference count of all object-like items in the record. -\end_layout - -\begin_layout Description -PyArray_XDECREF ( -\family typewriter -int -\family default -) ( -\family typewriter -PyArrayObject* -\family default - op) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Used for an array, -\emph on -op -\emph default -, that contains any Python objects. - It decrements the reference count of every object in the array according - to the data-type of -\emph on -op -\emph default -. - Normal return value is 0. - A -1 is returned if an error occurs. -\end_layout - -\begin_layout Description -PyArray_Item_XDECREF ( -\family typewriter -void -\family default -) ( -\family typewriter -char* -\family default - ptr, -\family typewriter -PyArray_Descr* -\family default - dtype) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A function to XDECREF all the object-like items at the loacation -\emph on -ptr -\emph default - as recorded in the data-type, -\emph on -dtype -\emph default -. - This works recursively so that if -\family typewriter -dtype -\family default - itself has fields with data-types that contain object-like items, all the - object-like fields will be XDECREF -\family typewriter -'d -\family default -. - -\end_layout - -\begin_layout Description -PyArray_FillObjectArray ( -\family typewriter -void -\family default -) ( -\family typewriter -PyArrayObject* -\family default - arr, -\family typewriter -PyObject* -\family default - obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Fill a newly created array with a single value obj at all locations in - the structure with object data-types. - No checking is performed but -\emph on -arr -\emph default - must be of data-type -\family typewriter -PyArray_OBJECT -\family default - and be single-segment and uninitialized (no previous objects in position). - Use -\family typewriter -PyArray_DECREF -\family default -( -\emph on -arr -\emph default -) if you need to decrement all the items in the object array prior to calling - this function. - -\end_layout - -\begin_layout Subsection -Array flags -\end_layout - -\begin_layout Subsubsection -Basic Array Flags -\end_layout - -\begin_layout Standard -An ndarray can have a data segment that is not a simple contiguous chunk - of well-behaved memory you can manipulate. - It may not be aligned with word boundaries (very important on some platforms). - It might have its data in a different byte-order than the machine recognizes. - It might not be writeable. - It might be in Fortan-contiguous order. - The array flags are used to indicate what can be said about data associated - with an array. -\end_layout - -\begin_layout Description -NPY_C_CONTIGUOUS The data area is in C-style contiguous order (last index - varies the fastest). -\end_layout - -\begin_layout Description -NPY_F_CONTIGUOUS The data area is in Fortran-style contiguous order (first - index varies the fastest). -\end_layout - -\begin_layout Description -NPY_OWNDATA The data area is owned by this array. -\end_layout - -\begin_layout Description -NPY_ALIGNED The data area is aligned appropriately (for all strides). -\end_layout - -\begin_layout Description -NPY_WRITEABLE The data area can be written to. - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Notice that the above 3 flags are are defined so that a new, well-behaved - array has these flags defined as true. - -\end_layout - -\begin_layout Description -NPY_UPDATEIFCOPY The data area represents a (well-behaved) copy whose informatio -n should be transferred back to the original when this array is deleted. -\end_layout - -\begin_layout Subsubsection -Combinations of array flags -\end_layout - -\begin_layout Description -NPY_BEHAVED -\family typewriter -NPY_ALIGNED -\family default - | -\family typewriter -NPY_WRITEABLE -\end_layout - -\begin_layout Description -NPY_CARRAY -\family typewriter -NPY_C_CONTIGUOUS -\family default - | -\family typewriter -NPY_BEHAVED -\end_layout - -\begin_layout Description -NPY_CARRAY_RO -\family typewriter -NPY_C_CONTIGUOUS -\family default - | -\family typewriter -NPY_ALIGNED -\end_layout - -\begin_layout Description -NPY_FARRAY -\family typewriter -NPY_F_CONTIGUOUS -\family default - | -\family typewriter -NPY_BEHAVED -\end_layout - -\begin_layout Description -NPY_FARRAY_RO -\family typewriter -NPY_F_CONTIGUOUS -\family default - | -\family typewriter -NPY_ALIGNED -\end_layout - -\begin_layout Description -NPY_DEFAULT -\family typewriter -NPY_CARRAY -\end_layout - -\begin_layout Description -NPY_UPDATE_ALL -\family typewriter -NPY_C_CONTIGUOUS -\family default - | -\family typewriter -NPY_F_CONTIGUOUS -\family default - | -\family typewriter -NPY_ALIGNED -\end_layout - -\begin_layout Subsubsection -Flag-like constants -\end_layout - -\begin_layout Standard -These constants are used in PyArray_FromAny (and its macro forms) to specify - desired properties of the new array. -\end_layout - -\begin_layout Description -NPY_FORCECAST Cast to the desired type, even if it can't be done without - losing information. -\end_layout - -\begin_layout Description -NPY_ENSURECOPY Make sure the resulting array is a copy of the original. -\end_layout - -\begin_layout Description -NPY_ENSUREARRAY Make sure the resulting object is an actual ndarray (or - bigndarray), and not a sub-class. -\end_layout - -\begin_layout Description -NPY_NOTSWAPPED Only used in -\family typewriter -PyArray_CheckFromAny -\family default - to over-ride the byteorder of the data-type object passed in. - -\end_layout - -\begin_layout Description -NPY_BEHAVED_NS -\family typewriter -NPY_ALIGNED -\family default - | -\family typewriter -NPY_WRITEABLE -\family default - | -\family typewriter -NPY_NOTSWAPPED -\end_layout - -\begin_layout Subsubsection -Flag checking -\end_layout - -\begin_layout Standard -For all of these macros -\emph on -arr -\emph default - must be an instance of a (subclass of) -\family typewriter -PyArray_Type -\family default -, but no checking is done. -\end_layout - -\begin_layout Description -PyArray_CHKFLAGS (arr, flags) -\end_layout - -\begin_layout Description -\InsetSpace ~ - The first parameter, arr, must be an ndarray or subclass. - The parameter, -\emph on -flags -\emph default -, should be an integer consisting of bitwise combinations of the possible - flags an array can have: -\family typewriter -NPY_C_CONTIGUOUS -\family default -, -\family typewriter -NPY_F_CONTIGUOUS -\family default -, -\family typewriter -NPY_OWNDATA -\family default -, -\family typewriter -NPY_ALIGNED -\family default -, -\family typewriter -NPY_WRITEABLE -\family default -, -\family typewriter -NPY_UPDATEIFCOPY -\family default -. -\end_layout - -\begin_layout Description -PyArray_ISCONTIGUOUS (arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if -\emph on -arr -\emph default - is C-style contiguous. -\end_layout - -\begin_layout Description -PyArray_ISFORTRAN (arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if -\emph on -arr -\emph default - is Fortran-style contiguous. -\end_layout - -\begin_layout Description -PyArray_ISWRITEABLE (arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if the data area of -\emph on -arr -\emph default - can be written to -\end_layout - -\begin_layout Description -PyArray_ISALIGNED (arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if the data area of -\emph on -arr -\emph default - is properly aligned on the machine. -\end_layout - -\begin_layout Description -PyArray_ISBEHAVED (arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evalutes true if the data area of -\emph on -arr -\emph default - is aligned and writeable and in machine byte-order according to its descriptor. -\end_layout - -\begin_layout Description -PyArray_ISBEHAVED_RO (arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if the data area of -\emph on -arr -\emph default - is aligned and in machine byte-order. -\end_layout - -\begin_layout Description -PyArray_ISCARRAY (arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if the data area of -\emph on -arr -\emph default - is C-style contiguous, and -\family typewriter -PyArray_ISBEHAVED -\family default -( -\emph on -arr -\emph default -) is true. -\end_layout - -\begin_layout Description -PyArray_ISFARRAY (arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if the data area of -\emph on -arr -\emph default - is Fortran-style contiguous and -\family typewriter -PyArray_ISBEHAVED -\family default -( -\emph on -arr -\emph default -) is true. -\end_layout - -\begin_layout Description -PyArray_ISCARRAY_RO (arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if the data area of -\emph on -arr -\emph default - is C-style contiguous, aligned, and in machine byte-order. - -\end_layout - -\begin_layout Description -PyArray_ISFARRAY_RO (arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if the data area of -\emph on -arr -\emph default - is Fortran-style contiguous, aligned, and in machine byte-order -\series bold -. - -\end_layout - -\begin_layout Description -PyArray_ISONESEGMENT (arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if the data area of -\emph on -arr -\emph default - consists of a single (C-style or Fortran-style) contiguous segment. -\end_layout - -\begin_layout Description -PyArray_UpdateFlags ( -\family typewriter -void -\family default -) ( -\family typewriter -PyArrayObject* -\family default - arr, -\family typewriter -int -\family default - flagmask) -\end_layout - -\begin_layout Description -\InsetSpace ~ - The -\family typewriter -NPY_C_CONTIGUOUS -\family default -, -\family typewriter -NPY_ALIGNED -\family default -, and -\family typewriter -NPY_F_CONTIGUOUS -\family default - array flags can be -\begin_inset Quotes eld -\end_inset - -calculated -\begin_inset Quotes erd -\end_inset - - from the array object itself. - This routine updates one or more of these flags of -\emph on -arr -\emph default - as specified in -\emph on -flagmask -\emph default - by performing the required calculation. - -\end_layout - -\begin_layout Warning -It is important to keep the flags updated (using PyArray_UpdateFlags can - help) whenever a manipulation with an array is performed that might cause - them to change. - Later calculations in NumPy that rely on the state of these flags do not - repeat the calculation to update them. - -\end_layout - -\begin_layout Subsection -Array method alternative API -\end_layout - -\begin_layout Subsubsection -Conversion -\end_layout - -\begin_layout Description -PyArray_GetField ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -PyArray_Descr* -\family default - dtype, -\family typewriter -int -\family default - offset) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -getfield -\series default -( -\emph on -dtype -\emph default -, -\emph on -offset -\emph default -). - Return a new array of the given -\emph on -dtype -\emph default - using the data in the current array at a specified -\emph on -offset -\emph default - in bytes. - The -\emph on -offset -\emph default - plus the itemsize of the new array type must be less than -\emph on -self -\emph default -->descr->elsize or an error is raised. - The same shape and strides as the original array are used. - Therefore, this function has the effect of returning a field from a record - array. - But, it can also be used to select specific bytes or groups of bytes from - any array type. - -\end_layout - -\begin_layout Description -PyArray_SetField ( -\family typewriter -int -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -PyArray_Descr* -\family default - dtype, -\family typewriter -int -\family default - offset, -\family typewriter -PyObject* -\family default - val) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -setfield -\series default -( -\emph on -val -\emph default -, -\emph on -dtype -\emph default -, -\emph on -offset -\emph default -). - Set the field starting at -\emph on -offset -\emph default - in bytes and of the given -\emph on -dtype -\emph default - to -\emph on -val -\emph default -. - The -\emph on -offset -\emph default - plus -\emph on -dtype -\emph default -->elsize must be less than -\emph on -self -\emph default -->descr->elsize or an error is raised. - Otherwise, the -\emph on -val -\emph default - argument is converted to an array and copied into the field pointed to. - If necessary, the elements of -\emph on -val -\emph default - are repeated to fill the destination array, But, the number of elements - in the destination must be an integer multiple of the number of elements - in -\emph on -val -\emph default -. - -\end_layout - -\begin_layout Description -PyArray_Byteswap ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -Bool -\family default - inplace) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -byteswap -\series default -( -\emph on -inplace -\emph default -). - Return an array whose data area is byteswapped. - If -\emph on -inplace -\emph default - is non-zero, then do the byteswap inplace and return a reference to self. - Otherwise, create a byteswapped copy and leave self unchanged. -\end_layout - -\begin_layout Description -PyArray_NewCopy ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - old, -\family typewriter -NPY_ORDER -\family default - order) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -copy -\series default -( -\emph on -fortran -\emph default -). - Make a copy of the -\emph on -old -\emph default - array. - The returned array is always aligned and writeable with data interpreted - the same as the old array. - If -\emph on -order -\emph default - is -\family typewriter -NPY_CORDER -\family default -, then a C-style contiguous array is returned. - If -\emph on -order -\emph default - is -\family typewriter -NPY_FORTRANORDER -\family default -, then a Fortran-style contiguous array is returned. - If -\emph on -order is -\emph default - -\family typewriter -NPY_ANYORDER -\family default -, then the array returned is Fortran-style contiguous only if the old one - is; otherwise, it is C-style contiguous. - -\end_layout - -\begin_layout Description -PyArray_ToList ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -tolist -\series default -(). - Return a nested Python list from -\emph on -self -\emph default -. - -\end_layout - -\begin_layout Description -PyArray_ToString (PyObject*) (PyArrayObject* self, NPY_ORDER order) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -tostring -\series default -( -\emph on -order -\emph default -). - Return the bytes of this array in a Python string. - -\end_layout - -\begin_layout Description -PyArray_ToFile ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -FILE* -\family default - fp, -\family typewriter -char* -\family default - sep, -\family typewriter -char* -\family default - format) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Write the contents of -\emph on -self -\emph default - to the file pointer -\emph on -fp -\emph default - in C-style contiguous fashion. - Write the data as binary bytes if -\family typewriter -\emph on -sep -\family default -\emph default - is the string -\begin_inset Quotes eld -\end_inset - - -\begin_inset Quotes erd -\end_inset - - or -\family typewriter -NULL -\family default -. - Otherwise, write the contents of -\emph on -self -\emph default - as text using the -\family typewriter -\emph on -sep -\family default -\emph default - string as the item separator. - Each item will be printed to the file. - If the -\emph on -format -\emph default - string is not -\family typewriter -NULL -\family default - or -\begin_inset Quotes eld -\end_inset - - -\begin_inset Quotes erd -\end_inset - -, then it is a Python print statement format string showing how the items - are to be written. -\end_layout - -\begin_layout Description -PyArray_Dump ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - self, -\family typewriter -PyObject* -\family default - file, -\family typewriter -int -\family default - protocol) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Pickle the object in -\emph on -self -\emph default - to the given -\emph on -file -\emph default - (either a string or a Python file object). - If -\emph on -file -\emph default - is a Python string it is considered to be the name of a file which is then - opened in binary mode. - The given -\emph on -protocol -\emph default - is used (if -\emph on -protocol -\emph default - is negative, or the highest available is used). - This is a simple wrapper around cPickle.dump( -\emph on -self -\emph default -, -\emph on -file -\emph default -, -\emph on -protocol -\emph default -). -\end_layout - -\begin_layout Description -PyArray_Dumps ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - self, -\family typewriter -int -\family default - protocol) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Pickle the object in -\emph on -self -\emph default - to a Python string and return it. - Use the Pickle -\emph on -protocol -\emph default - provided (or the highest available if -\emph on -protocol -\emph default - is negative). - -\end_layout - -\begin_layout Description -PyArray_FillWithScalar ( -\family typewriter -int -\family default -) ( -\family typewriter -PyArrayObject* -\family default - arr, -\family typewriter -PyObject* -\family default - obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Fill the array, -\emph on -arr -\emph default -, with the given scalar object, -\emph on -obj -\emph default -. - The object is first converted to the data type of -\emph on -arr -\emph default -, and then copied into every location. - A -1 is returned if an error occurs, otherwise 0 is returned. -\end_layout - -\begin_layout Description -PyArray_View ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -PyArray_Descr* -\family default - dtype) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -view -\series default -( -\emph on -dtype -\emph default -). - Return a new view of the array -\emph on -self -\emph default - as possibly a different data-type, -\emph on -dtype -\emph default -. - If -\emph on -dtype -\emph default - is -\family typewriter -NULL -\family default -, then the returned array will have the same data type as -\emph on -self -\emph default -. - The new data-type must be consistent with the size of -\emph on -self -\emph default -. - Either the itemsizes must be identical, or -\emph on -self -\emph default - must be single-segment and the total number of bytes must be the same. - In the latter case the dimensions of the returned array will be altered - in the last (or first for Fortran-style contiguous arrays) dimension. - The data area of the returned array and self is exactly the same. -\end_layout - -\begin_layout Subsubsection -Shape Manipulation -\end_layout - -\begin_layout Description -PyArray_Newshape ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -PyArray_Dims* -\family default - newshape) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Result will be a new array (pointing to the same memory location as -\emph on -self -\emph default - if possible), but having a shape given by -\emph on -newshape -\emph default -. - If the new shape is not compatible with the strides of -\emph on -self -\emph default -, then a copy of the array with the new specified shape will be returned. - -\end_layout - -\begin_layout Description -PyArray_Reshape ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -PyObject* -\family default - shape) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\family typewriter -\emph on -self -\family default -\emph default -. -\series bold -reshape -\series default -( -\family typewriter -\emph on -shape -\family default -\emph default -) where -\emph on -shape -\emph default - is a sequence. - Converts -\emph on -shape -\emph default - to a -\family typewriter -PyArray_Dims -\family default - structure and calls -\family typewriter -PyArray_Newshape -\family default - internally. - -\end_layout - -\begin_layout Description -PyArray_Squeeze ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -squeeze -\series default -(). - Return a new view of -\emph on -self -\emph default - with all of the dimensions of length 1 removed from the shape. - -\end_layout - -\begin_layout Warning -matrix objects are always 2-dimensional. - Therefore, -\family typewriter -PyArray_Squeeze -\family default - has no effect on arrays of matrix sub-class. - -\end_layout - -\begin_layout Description -PyArray_SwapAxes ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - a1, -\family typewriter -int -\family default - a2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -swapaxes -\series default -( -\emph on -a1 -\emph default -, -\emph on -a2 -\emph default -). - The returned array is a new view of the data in -\emph on -self -\emph default - with the given axes, -\emph on -a1 -\emph default - and -\emph on -a2 -\emph default -, swapped. -\end_layout - -\begin_layout Description -PyArray_Resize ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -PyArray_Dims* -\family default - newshape, -\family typewriter -int -\family default - refcheck, NPY_ORDER fortran) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -resize -\series default -( -\emph on -newshape -\emph default -, refcheck -\family typewriter -= -\family default -\emph on -refcheck -\emph default -, order= -\shape italic -fortran -\shape default -). - This function only works on single-segment arrays. - It changes the shape of -\emph on -self -\emph default - inplace and will reallocate the memory for -\emph on -self -\emph default - if -\emph on -newshape -\emph default - has a different total number of elements then the old shape. - If reallocation is necessary, then -\emph on -self -\emph default - must own its data, have -\emph on -self -\emph default -- -\family typewriter ->base==NULL -\family default -, have -\emph on -self -\emph default -- -\family typewriter ->weakrefs==NULL -\family default -, and (unless refcheck is 0) not be referenced by any other array. - A reference to the new array is returned. - The -\shape italic -fortran -\shape default - argument can be NPY_ANYORDER, NPY_CORDER, or NPY_FORTRANORDER. - This argument is used if the number of dimension is (or is being resized - to be) greater than 2. - It currently has no effect. - Eventually it could be used to determine how the resize operation should - view the data when constructing a differently-dimensioned array. - -\end_layout - -\begin_layout Description -PyArray_Transpose ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -PyArray_Dims* -\family default - permute) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -transpose -\series default -( -\emph on -permute -\emph default -). - Permute the axes of the ndarray object -\emph on -self -\emph default - according to the data structure -\emph on -permute -\emph default - and return the result. - If -\emph on -permute -\emph default - is -\family typewriter -NULL -\family default -, then the resulting array has its axes reversed. - For example if -\emph on -self -\emph default - has shape -\begin_inset Formula $10\times20\times30$ -\end_inset - -, and -\emph on -permute -\family typewriter -\emph default -.ptr -\family default - is (0,2,1) the shape of the result is -\begin_inset Formula $10\times30\times20.$ -\end_inset - - If -\emph on -permute -\emph default - is -\family typewriter -NULL -\family default -, the shape of the result is -\begin_inset Formula $30\times20\times10.$ -\end_inset - - -\end_layout - -\begin_layout Description -PyArray_Flatten ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -NPY_ORDER -\family default - order) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -flatten -\series default -( -\emph on -order -\emph default -). - Return a 1-d copy of the array. - If -\emph on -order -\emph default - is -\family typewriter -NPY_FORTRANORDER -\family default - the elements are scanned out in Fortran order (first-dimension varies the - fastest). - If -\emph on -order -\emph default - is -\family typewriter -NPY_CORDER -\family default -, the elements of -\family typewriter -self -\family default - are scanned in C-order (last dimension varies the fastest). - If -\emph on -order -\emph default - -\family typewriter -NPY_ANYORDER -\family default -, then the result of -\family typewriter -PyArray_ISFORTRAN -\family default -( -\emph on -self -\emph default -) is used to determine which order to flatten. -\end_layout - -\begin_layout Description -PyArray_Ravel ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -NPY_ORDER -\family default - order) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -.ravel( -\emph on -order -\emph default -). - Same basic functionality as -\family typewriter -PyArray_Flatten -\family default -( -\emph on -self -\emph default -, -\emph on -order -\emph default -) except if -\emph on -order -\emph default - is 0 and -\emph on -self -\emph default - is C-style contiguous, the shape is altered but no copy is performed. -\end_layout - -\begin_layout Subsubsection -Item selection and manipulation -\end_layout - -\begin_layout Description -PyArray_TakeFrom ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -PyObject* -\family default - indices, -\family typewriter -int -\family default - axis, -\family typewriter -PyArrayObject* -\family default - ret, -\family typewriter -NPY_CLIPMODE -\family default - clipmode) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -take -\series default -( -\emph on -indices -\emph default -, -\emph on -axis -\emph default -, -\emph on -ret -\emph default -, -\emph on -clipmode -\emph default -) except -\emph on -axis -\emph default -=None in Python is obtained by setting -\emph on -axis -\emph default -= -\family typewriter -NPY_MAXDIMS -\family default - in C. - Extract the items from self indicated by the integer-valued -\emph on -indices -\emph default - along the given -\emph on -axis. - -\emph default - The clipmode argument can be -\family typewriter -NPY_RAISE -\family default -, -\family typewriter -NPY_WRAP -\family default -, or -\family typewriter -NPY_CLIP -\family default - to indicate what to do with out-of-bound indices. - The -\emph on -ret -\emph default - argument can specify an output array rather than having one created internally. - -\end_layout - -\begin_layout Description -PyArray_PutTo ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -PyObject* -\family default - values, -\family typewriter -PyObject* -\family default - indices, -\family typewriter -NPY_CLIPMODE -\family default - clipmode) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -.put( -\emph on -values -\emph default -, -\emph on -indices -\emph default -, -\emph on -clipmode -\emph default -). - Put -\emph on -values -\emph default - into -\emph on -self -\emph default - at the corresponding (flattened) -\emph on -indices -\emph default -. - If -\emph on -values -\emph default - is too small it will be repeated as necessary. - -\end_layout - -\begin_layout Description -PyArray_PutMask ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -PyObject* -\family default - values, -\family typewriter -PyObject* -\family default - mask) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Place the -\emph on -values -\emph default - in -\emph on -self -\emph default - wherever corresponding positions (using a flattened context) in -\emph on -mask -\emph default - are true. - The -\emph on -mask -\emph default - and -\emph on -self -\emph default - arrays must have the same total number of elements. - If -\emph on -values -\emph default - is too small, it will be repeated as necessary. -\end_layout - -\begin_layout Description -PyArray_Repeat ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -PyObject* -\family default - op, -\family typewriter -int -\family default - axis) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -repeat -\series default -( -\emph on -op -\emph default -, -\emph on -axis -\emph default -). - Copy the elements of -\emph on -self -\emph default -, -\emph on -op -\emph default - times along the given -\emph on -axis -\emph default -. - Either -\emph on -op -\emph default - is a scalar integer or a sequence of length -\emph on -self -\emph default -->dimensions[ -\emph on -axis -\emph default -] indicating how many times to repeat each item along the axis. -\end_layout - -\begin_layout Description -PyArray_Choose ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -PyObject* -\family default - op, -\family typewriter -PyArrayObject* -\family default - ret, -\family typewriter -NPY_CLIPMODE -\family default - clipmode) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -choose -\series default -( -\emph on -op -\emph default -, -\emph on -ret -\emph default -, -\emph on -clipmode -\emph default -). - Create a new array by selecting elements from the sequence of arrays in - -\emph on -op -\emph default - based on the integer values in -\emph on -self -\emph default -. - The arrays must all be broadcastable to the same shape and the entries - in -\emph on -self -\emph default - should be between 0 and len( -\emph on -op -\emph default -). - The output is placed in -\emph on -ret -\emph default - unless it is -\family typewriter -NULL -\family default - in which case a new output is created. - The -\emph on -clipmode -\emph default - argument determines behavior for when entries in -\emph on -self -\emph default - are not between 0 and len( -\emph on -op -\emph default -). -\end_layout - -\begin_deeper -\begin_layout Description -NPY_RAISE raise a ValueError; -\end_layout - -\begin_layout Description -NPY_WRAP wrap values <0 by adding len( -\emph on -op -\emph default -) and values >=len( -\emph on -op -\emph default -) by subtracting len( -\emph on -op -\emph default -) until they are in range; -\end_layout - -\begin_layout Description -NPY_CLIP all values are clipped to the region [0, len( -\emph on -op -\emph default -) ). -\end_layout - -\end_deeper -\begin_layout Description -PyArray_Sort ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - axis) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -sort -\series default -( -\emph on -axis -\emph default -). - Return an array with the items of -\emph on -self -\emph default - sorted along -\emph on -axis -\emph default -. -\end_layout - -\begin_layout Description -PyArray_ArgSort ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - axis) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -argsort -\series default -( -\emph on -axis -\emph default -). - Return an array of indices such that selection of these indices along the - given -\family typewriter -axis -\family default - would return a sorted version of -\emph on -self -\emph default -. - If -\emph on -self -\emph default -->descr is a data-type with fields defined, then self->descr->names is used - to determine the sort order. - A comparison where the first field is equal will use the second field and - so on. - To alter the sort order of a record array, create a new data-type with - a different order of names and construct a view of the array with that - new data-type. - -\end_layout - -\begin_layout Description -PyArray_LexSort ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - sort_keys, -\family typewriter -int -\family default - axis) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Given a sequence of arrays ( -\emph on -sort_keys -\emph default -) of the same shape, return an array of indices (similar to -\family typewriter -PyArray_ArgSort -\family default -(...)) that would sort the arrays lexicographically. - A lexicographic sort specifies that when two keys are found to be equal, - the order is based on comparison of subsequent keys. - A merge sort (which leaves equal entries unmoved) is required to be defined - for the types. - The sort is accomplished by sorting the indices first using the first -\emph on -sort_key -\emph default - and then using the second -\emph on -sort_key -\emph default - and so forth. - This is equivalent to the lexsort( -\emph on -sort_keys -\emph default -, -\emph on -axis -\emph default -) Python command. - Because of the way the merge-sort works, be sure to understand the order - the -\emph on -sort_keys -\emph default - must be in (reversed from the order you would use when comparing two elements). -\end_layout - -\begin_layout Description -\InsetSpace ~ - If these arrays are all collected in a record array, then -\family typewriter -PyArray_Sort -\family default -(...) can also be used to sort the array directly. - -\end_layout - -\begin_layout Description -PyArray_SearchSorted ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -PyObject* -\family default - values) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -searchsorted -\series default -( -\emph on -values -\emph default -). - Assuming -\emph on -self -\emph default - is a 1-d array in ascending order representing bin boundaries then the - output is an array the same shape as -\emph on -values -\emph default - of bin numbers, giving the bin into which each item in -\emph on -values -\emph default - would be placed. - No checking is done on whether or not self is in ascending order. -\end_layout - -\begin_layout Description -PyArray_Diagonal ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - offset, -\family typewriter -int -\family default - axis1, -\family typewriter -int -\family default - axis2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -diagonal -\series default -( -\emph on -offset -\emph default -, -\emph on -axis1 -\emph default -, -\emph on -axis2 -\emph default -). - Return the -\emph on -offset -\emph default - diagonals of the 2-d arrays defined by -\emph on -axis1 -\emph default - and -\emph on -axis2 -\emph default -. - -\end_layout - -\begin_layout Description -PyArray_Nonzero ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -nonzero -\series default -(). - Returns a tuple of index arrays that select elements of -\emph on -self -\emph default - that are nonzero. - If (nd= -\family typewriter -PyArray_NDIM -\family default -( -\family typewriter -self -\family default -))==1, then a single index array is returned. - The index arrays have data type -\family typewriter -NPY_INTP -\family default -. - If a tuple is returned (nd -\begin_inset Formula $\neq$ -\end_inset - -1), then its length is nd. - -\end_layout - -\begin_layout Description -PyArray_Compress ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -PyObject* -\family default - condition, -\family typewriter -int -\family default - axis, -\family typewriter -PyArrayObject* -\family default - out) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -compress -\series default -( -\emph on -condition -\emph default -, -\emph on -axis -\emph default -). - Return the elements along -\emph on -axis -\emph default - corresponding to elements of -\emph on -condition -\emph default - that are true. - -\end_layout - -\begin_layout Subsubsection -Calculation -\end_layout - -\begin_layout Tip -Pass in NPY_MAXDIMS for axis in order to achieve the same effect that is - obtained by passing in axis = None in Python (treating the array as a 1-d - array). - -\end_layout - -\begin_layout Description -PyArray_ArgMax ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - axis) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -argmax -\series default -( -\emph on -axis -\emph default -). - Return the index of the largest element of -\emph on -self -\emph default - along -\emph on -axis -\emph default -. -\end_layout - -\begin_layout Description -PyArray_ArgMin ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - axis) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -argmin -\series default -( -\emph on -axis -\emph default -). - Return the index of the smallest element of -\emph on -self -\emph default - along -\emph on -axis -\emph default -. -\end_layout - -\begin_layout Description -PyArray_Max ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - axis, -\family typewriter -PyArrayObject* -\family default - out) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -max -\series default -( -\emph on -axis -\emph default -). - Return the largest element of -\emph on -self -\emph default - along the given -\emph on -axis -\emph default -. -\end_layout - -\begin_layout Description -PyArray_Min ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - axis, -\family typewriter -PyArrayObject* -\family default - out) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -min -\series default -( -\emph on -axis -\emph default -). - Return the smallest element of -\emph on -self -\emph default - along the given -\emph on -axis -\emph default -. -\end_layout - -\begin_layout Description -PyArray_Ptp ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - axis, -\family typewriter -PyArrayObject* -\family default - out) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -ptp -\series default -( -\emph on -axis -\emph default -). - Return the difference between the largest element of -\emph on -self -\emph default - along -\emph on -axis -\emph default - and the smallest element of -\emph on -self -\emph default - along -\emph on -axis -\emph default -. -\end_layout - -\begin_layout Note -The rtype argument specifies the data-type the reduction should take place - over. - This is important if the data-type of the array is not -\begin_inset Quotes eld -\end_inset - -large -\begin_inset Quotes erd -\end_inset - - enough to handle the output. - By default, all integer data-types are made at least as large as NPY_LONG - for the -\begin_inset Quotes eld -\end_inset - -add -\begin_inset Quotes erd -\end_inset - - and -\begin_inset Quotes eld -\end_inset - -multiply -\begin_inset Quotes erd -\end_inset - - ufuncs (which form the basis for mean, sum, cumsum, prod, and cumprod functions -). -\end_layout - -\begin_layout Description -PyArray_Mean ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - axis, -\family typewriter -int -\family default - rtype, -\family typewriter -PyArrayObject* -\family default - out) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -mean -\series default -( -\emph on -axis -\emph default -, -\emph on -rtype -\emph default -). - Returns the mean of the elements along the given -\emph on -axis -\emph default -, using the enumerated type -\emph on -rtype -\emph default - as the data type to sum in. - Default sum behavior is obtained using -\family typewriter -PyArray_NOTYPE -\family default - for -\emph on -rtype -\emph default -. -\end_layout - -\begin_layout Description -PyArray_Trace ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - offset, -\family typewriter -int -\family default - axis1, -\family typewriter -int -\family default - axis2, -\family typewriter -int -\family default - rtype, -\family typewriter -PyArrayObject* -\family default - out) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -trace -\series default -( -\emph on -offset -\emph default -, -\emph on -axis1 -\emph default -, -\emph on -axis2 -\emph default -, -\emph on -rtype -\emph default -). - Return the sum (using -\emph on -rtype -\emph default - as the data type of summation) over the -\emph on -offset -\emph default - diagonal elements of the 2-d arrays defined by -\emph on -axis1 -\emph default - and -\emph on -axis2 -\emph default - variables. - A positive offset chooses diagonals above the main diagonal. - A negative offset selects diagonals below the main diagonal. - -\end_layout - -\begin_layout Description -PyArray_Clip ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -PyObject* -\family default - min, -\family typewriter -PyObject* -\family default - max) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -clip -\series default -( -\emph on -min -\emph default -, -\emph on -max -\emph default -). - Clip an array, -\emph on -self -\emph default -, so that values larger than -\emph on -max -\emph default - are fixed to -\emph on -max -\emph default - and values less than -\emph on -min -\emph default - are fixed to -\emph on -min -\emph default -. -\end_layout - -\begin_layout Description -PyArray_Conjugate ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -conjugate -\series default -() and -\emph on -self -\emph default -. -\series bold -conj -\series default -() Return the complex conjugate of -\emph on -self -\emph default -. - If -\emph on -self -\emph default - is not of complex data type, then return -\emph on -self -\emph default - with an reference. -\end_layout - -\begin_layout Description -PyArray_Round ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - decimals, -\family typewriter -PyArrayObject* -\family default - out) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -round -\series default -( -\emph on -decimals -\emph default -, -\emph on -out -\emph default -). - Returns the array with elements rounded to the nearest decimal place. - The decimal place is defined as the -\begin_inset Formula $10^{-\textrm{decimals}}$ -\end_inset - - digit so that negative -\emph on -decimals -\emph default - cause rounding to the nearest 10's, 100's, etc. - If out is -\family typewriter -NULL -\family default -, then the output array is created, otherwise the output is placed in -\family typewriter -\emph on -out -\family default -\emph default - which must be the correct size and type. - -\end_layout - -\begin_layout Description -PyArray_Std ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - axis, -\family typewriter -int -\family default - rtype, -\family typewriter -PyArrayObject* -\family default - out) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -std -\series default -( -\emph on -axis -\emph default -, -\emph on -rtype -\emph default -). - Return the standard deviation using data along -\emph on -axis -\emph default - converted to data type -\emph on -rtype -\emph default -. - -\end_layout - -\begin_layout Description -PyArray_Sum ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - axis, -\family typewriter -int -\family default - rtype, -\family typewriter -PyArrayObject* -\family default - out) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -sum -\series default -( -\family typewriter -\emph on -axis -\family default -\emph default -, -\family typewriter -\emph on -rtype -\family default -\emph default -). - Return 1-d vector sums of elements in -\emph on -self -\emph default - along -\emph on -axis -\emph default -. - Perform the sum after converting data to data type -\emph on -rtype -\emph default -. -\end_layout - -\begin_layout Description -PyArray_CumSum ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - axis, -\family typewriter -int -\family default - rtype, -\family typewriter -PyArrayObject* -\family default - out) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -cumsum -\series default -( -\family typewriter -\emph on -axis -\family default -\emph default -, -\family typewriter -\emph on -rtype -\family default -\emph default -). - Return cumulative 1-d sums of elements in -\emph on -self -\emph default - along -\emph on -axis -\emph default -. - Perform the sum after converting data to data type -\emph on -rtype -\emph default -. -\end_layout - -\begin_layout Description -PyArray_Prod ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - axis, -\family typewriter -int -\family default - rtype, -\family typewriter -PyArrayObject* -\family default - out) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -prod -\series default -( -\emph on -axis -\emph default -, -\emph on -rtype -\emph default -). - Return 1-d products of elements in -\emph on -self -\emph default - along -\emph on -axis -\emph default -. - Perform the product after converting data to data type -\emph on -rtype -\emph default -. -\end_layout - -\begin_layout Description -PyArray_CumProd ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - axis, -\family typewriter -int -\family default - rtype, -\family typewriter -PyArrayObject* -\family default - out) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -cumprod -\series default -( -\emph on -axis -\emph default -, -\emph on -rtype -\emph default -). - Return 1-d cumulative products of elements in -\family typewriter -self -\family default - along -\family typewriter -axis -\family default -. - Perform the product after converting data to data type -\family typewriter -rtype -\family default -. -\end_layout - -\begin_layout Description -PyArray_All ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - axis, -\family typewriter -PyArrayObject* -\family default - out) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -all -\series default -( -\emph on -axis -\emph default -). - Return an array with True elements for every 1-d sub-array of -\family typewriter -self -\family default - defined by -\family typewriter -axis -\family default - in which all the elements are True. - -\end_layout - -\begin_layout Description -PyArray_Any ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - self, -\family typewriter -int -\family default - axis, -\family typewriter -PyArrayObject* -\family default - out) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\emph on -self -\emph default -. -\series bold -any -\series default -( -\emph on -axis -\emph default -). - Return an array with True elements for every 1-d sub-array of -\emph on -self -\emph default - defined by -\emph on -axis -\emph default - in which any of the elements are True. - -\end_layout - -\begin_layout Subsection -Functions -\end_layout - -\begin_layout Subsubsection -Array Functions -\end_layout - -\begin_layout Description -PyArray_AsCArray ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject** -\family default - op, -\family typewriter -void* -\family default - ptr, -\family typewriter -npy_intp* -\family default - dims, -\family typewriter -int -\family default - nd, -\family typewriter -int -\family default - typenum, -\family typewriter -int -\family default - itemsize) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Sometimes it is useful to access a multidimensional array as a C-style - multi-dimensional array so that algorithms can be implemented using C's - a[i][j][k] syntax. - This routine returns a pointer, -\emph on -ptr -\emph default -, that simulates this kind of C-style array, for 1-, 2-, and 3-d ndarrays. - -\end_layout - -\begin_deeper -\begin_layout Description -op The address to any Python object. - This Python object will be replaced with an equivalent well-behaved, C-style - contiguous, ndarray of the given data type specifice by the last two arguments. - Be sure that stealing a reference in this way to the input object is justified. - -\end_layout - -\begin_layout Description -ptr The address to a (ctype* for 1-d, ctype** for 2-d or ctype*** for 3-d) - variable where ctype is the equivalent C-type for the data type. - On return, -\emph on -ptr -\emph default - will be addressable as a 1-d, 2-d, or 3-d array. - -\end_layout - -\begin_layout Description -dims An output array that contains the shape of the array object. - This array gives boundaries on any looping that will take place. - -\end_layout - -\begin_layout Description -nd The dimensionality of the array (1, 2, or 3). - -\end_layout - -\begin_layout Description -typenum The expected data type of the array. - -\end_layout - -\begin_layout Description -itemsize This argument is only needed when -\emph on -typenum -\emph default - represents a flexible array. - Otherwise it should be 0. - -\end_layout - -\end_deeper -\begin_layout Note -The simulation of a C-style array is not complete for 2-d and 3-d arrays. - For example, the simulated arrays of pointers cannot be passed to subroutines - expecting specific, statically-defined 2-d and 3-d arrays. - To pass to functions requiring those kind of inputs, you must statically - define the required array and copy data. - -\end_layout - -\begin_layout Description -PyArray_Free ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - op, -\family typewriter -void* -\family default - ptr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Must be called with the same objects and memory locations returned from - -\family typewriter -PyArray_AsCArray -\family default -(...). - This function cleans up memory that otherwise would get leaked. -\end_layout - -\begin_layout Description -PyArray_Concatenate ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -int -\family default - axis) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Join the sequence of objects in -\emph on -obj -\emph default - together along -\emph on -axis -\emph default - into a single array. - If the dimensions or types are not compatible an error is raised. -\end_layout - -\begin_layout Description -PyArray_InnerProduct ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - obj1, -\family typewriter -PyObject* -\family default - obj2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Compute a product-sum over the last dimensions of -\emph on -obj1 -\emph default - and -\emph on -obj2 -\emph default -. - Neither array is conjugated. - -\end_layout - -\begin_layout Description -PyArray_MatrixProduct ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - obj1, -\family typewriter -PyObject* -\family default - obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Compute a product-sum over the last dimension of -\emph on -obj1 -\emph default - and the second-to-last dimension of -\emph on -obj2 -\emph default -. - For 2-d arrays this is a matrix-product. - Neither array is conjugated. - -\end_layout - -\begin_layout Description -PyArray_CopyAndTranspose ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject -\family default -* op) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A specialized copy and transpose function that works only for 2-d arrays. - The returned array is a transposed copy of -\emph on -op -\emph default -. -\end_layout - -\begin_layout Description -PyArray_Correlate ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - op1, -\family typewriter -PyObject* -\family default - op2, -\family typewriter -int -\family default - mode) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Compute the 1-d correlation of the 1-d arrays -\emph on -op1 -\emph default - and -\emph on -op2 -\emph default -. - The correlation is computed at each output point by multiplying -\emph on -op1 -\emph default - by a shifted version of -\emph on -op2 -\emph default - and summing the result. - As a result of the shift, needed values outside of the defined range of - -\emph on -op1 -\emph default - and -\emph on -op2 -\emph default - are interpreted as zero. - The mode determines how many shifts to return: 0 - return only shifts that - did not need to assume zero-values; 1 - return an object that is the same - size as -\emph on -op1 -\emph default -, 2 - return all possible shifts (any overlap at all is accepted). - -\end_layout - -\begin_layout Description -PyArray_Where ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - condition, -\family typewriter -PyObject* -\family default - x, -\family typewriter -PyObject* -\family default - y) -\end_layout - -\begin_layout Description -\InsetSpace ~ - If both -\family typewriter -x -\family default - and -\family typewriter -y -\family default - are -\family typewriter -NULL -\family default -, then return -\family typewriter -PyArray_Nonzero -\family default -( -\family typewriter -\emph on -condition -\family default -\emph default -). - Otherwise, both -\emph on -x -\emph default - and -\emph on -y -\emph default - must be given and the object returned is shaped like -\emph on -condition -\emph default - and has elements of -\emph on -x -\emph default - and -\emph on -y -\emph default - where -\emph on -condition -\emph default - is respectively True or False. - -\end_layout - -\begin_layout Subsubsection -Other functions -\end_layout - -\begin_layout Description -PyArray_CheckStrides ( -\family typewriter -Bool -\family default -) ( -\family typewriter -int -\family default - elsize, -\family typewriter -int -\family default - nd, -\family typewriter -npy_intp -\family default - numbytes, -\family typewriter -npy_intp* -\family default - dims, -\family typewriter -npy_intp* -\family default - newstrides) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Determine if -\emph on -newstrides -\emph default - is a strides array consistent with the memory of an -\emph on -nd -\emph default --dimensional array with shape -\family typewriter -dims -\family default - and element-size, -\emph on -elsize -\emph default -. - The -\emph on -newstrides -\emph default - array is checked to see if jumping by the provided number of bytes in each - direction will ever mean jumping more than -\emph on -numbytes -\emph default - which is the assumed size of the available memory segment. - If -\emph on -numbytes -\emph default - is 0, then an equivalent -\emph on -numbytes -\emph default - is computed assuming -\emph on -nd -\emph default -, -\emph on -dims -\emph default -, and -\emph on -elsize -\emph default - refer to a single-segment array. - Return -\family typewriter -NPY_TRUE -\family default - if -\emph on -newstrides -\emph default - is acceptable, otherwise return -\family typewriter -NPY_FALSE -\family default -. -\end_layout - -\begin_layout Description -PyArray_MultiplyList ( -\family typewriter -npy_intp -\family default -) ( -\family typewriter -npy_intp* -\family default - seq, -\family typewriter -int -\family default - n) -\end_layout - -\begin_layout Description -PyArray_MultiplyIntList ( -\family typewriter -int -\family default -) ( -\family typewriter -int* -\family default - seq, -\family typewriter -int -\family default - n) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Both of these routines multiply an -\emph on -n -\emph default --length array, -\emph on -seq -\emph default -, of integers and return the result. - No overflow checking is performed. -\end_layout - -\begin_layout Description -PyArray_CompareLists ( -\family typewriter -int -\family default -) ( -\family typewriter -npy_intp* -\family default - l1, -\family typewriter -npy_intp* -\family default - l2, -\family typewriter -int -\family default - n) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Given two -\emph on -n -\emph default --length arrays of integers, -\emph on -l1 -\emph default -, and -\emph on -l2 -\emph default -, return 1 if the lists are identical; otherwise, return 0. - -\end_layout - -\begin_layout Subsection -Array Iterators -\end_layout - -\begin_layout Standard -An array iterator is a simple way to access the elements of an N-dimensional - array quickly and efficiently. - Section -\begin_inset LatexCommand ref -reference "sec:array_iterator" - -\end_inset - - provides more description and examples of this useful approach to looping - over an array. - -\end_layout - -\begin_layout Description -PyArray_IterNew ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an array iterator object from the array, -\emph on -arr -\emph default -. - This is equivalent to -\emph on -arr -\emph default -. -\series bold -flat -\series default -. - The array iterator object makes it easy to loop over an N-dimensional non-conti -guous array in C-style contiguous fashion. - -\end_layout - -\begin_layout Description -PyArray_IterAllButAxis ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - arr, -\family typewriter -int -\family default - *axis) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an array iterator that will iterate over all axes but the one provided - in -\emph on -*axis -\emph default -. - The returned iterator cannot be used with -\family typewriter -PyArray_ITER_GOTO1D -\family default -. - This iterator could be used to write something similar to what ufuncs do - wherein the loop over the largest axis is done by a separate sub-routine. - If -\emph on -*axis -\emph default - is negative then -\emph on -*axis -\emph default - will be set to the axis having the smallest stride and that axis will be - used. - -\end_layout - -\begin_layout Description -PyArray_BroadcastToShape ( -\family typewriter -PyObject* -\family default -)( -\family typewriter -PyObject* -\family default - arr, -\family typewriter -npy_intp -\family default - *dimensions, -\family typewriter -int -\family default - nd) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an array iterator that is broadcast to iterate as an array of the - shape provided by -\emph on -dimensions -\emph default - and -\emph on -nd -\emph default -. - -\end_layout - -\begin_layout Description -PyArrayIter_Check ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - op) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates true if -\emph on -op -\emph default - is an array iterator (or instance of a subclass of the array iterator type). - -\end_layout - -\begin_layout Description -PyArray_ITER_RESET ( -\family typewriter -void -\family default -) ( -\family typewriter -PyObject* -\family default - iterator) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Reset an -\emph on -iterator -\emph default - to the beginning of the array. -\end_layout - -\begin_layout Description -PyArray_ITER_NEXT ( -\family typewriter -void -\family default -) ( -\family typewriter -PyObject* -\family default - iterator) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Incremement the index and the dataptr members of the -\emph on -iterator -\emph default - to point to the next element of the array. - If the array is not (C-style) contiguous, also increment the N-dimensional - coordinates array. -\end_layout - -\begin_layout Description -PyArray_ITER_DATA ( -\family typewriter -void* -\family default -)( -\family typewriter -PyObject* -\family default - iterator) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A pointer to the current element of the array. - -\end_layout - -\begin_layout Description -PyArray_ITER_GOTO ( -\family typewriter -void -\family default -) ( -\family typewriter -PyObject* -\family default - iterator, -\family typewriter -npy_intp* -\family default - destination) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Set the -\emph on -iterator -\emph default - index, dataptr, and coordinates members to the location in the array indicated - by the N-dimensional c-array, -\emph on -destination -\emph default -, which must have size at least -\emph on -iterator -\emph default -->nd_m1+1. -\end_layout - -\begin_layout Description -PyArray_ITER_GOTO1D ( -\family typewriter -PyObject* -\family default - iterator, -\family typewriter -npy_intp -\family default - index) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Set the -\emph on -iterator -\emph default - index and dataptr to the location in the array indicated by the integer - -\emph on -index -\emph default - which points to an element in the C-styled flattened array. - -\end_layout - -\begin_layout Description -PyArray_ITER_NOTDONE ( -\family typewriter -int -\family default -)( -\family typewriter -PyObject* -\family default - iterator) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates TRUE as long as the iterator has not looped through all of the - elements, otherwise it evaluates FALSE. - -\end_layout - -\begin_layout Subsection -Broadcasting (multi-iterators) -\end_layout - -\begin_layout Description -PyArray_MultiIterNew ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -int -\family default - num, ...) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A simplified interface to broadcasting. - This function takes the number of arrays to broadcast and then -\emph on -num -\emph default - extra ( -\family typewriter -PyObject* -\family default -) arguments. - These arguments are converted to arrays and iterators are created. - -\family typewriter -PyArray_Broadcast -\family default - is then called on the resulting multi-iterator object. - The resulting, broadcasted mult-iterator object is then returned. - A broadcasted operation can then be performed using a single loop and using - -\family typewriter -PyArray_MultiIter_NEXT -\family default -(..) -\end_layout - -\begin_layout Description -PyArray_MultiIter_RESET ( -\family typewriter -void -\family default -) ( -\family typewriter -PyObject* -\family default - multi) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Reset all the iterators to the beginning in a multi-iterator object, -\emph on -multi -\emph default -. -\end_layout - -\begin_layout Description -PyArray_MultiIter_NEXT ( -\family typewriter -void -\family default -) ( -\family typewriter -PyObject* -\family default - multi) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Advance each iterator in a multi-iterator object, -\emph on -multi -\emph default -, to its next (broadcasted) element. -\end_layout - -\begin_layout Description -PyArray_MultiIter_DATA ( -\family typewriter -void* -\family default -)( -\family typewriter -PyObject* -\family default - multi, -\family typewriter -int -\family default - i) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the data-pointer of the -\emph on -i -\emph default - -\begin_inset Formula $^{\textrm{th}}$ -\end_inset - - iterator in a multi-iterator object. - -\end_layout - -\begin_layout Description -PyArray_MultiIter_NEXTi ( -\family typewriter -void -\family default -) ( -\family typewriter -PyObject* -\family default - multi, -\family typewriter -int -\family default - i) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Advance the pointer of only the -\emph on -i -\emph default - -\begin_inset Formula $^{\textrm{th}}$ -\end_inset - - iterator. -\end_layout - -\begin_layout Description -PyArray_MultiIter_GOTO ( -\family typewriter -void -\family default -) ( -\family typewriter -PyObject* -\family default - multi, -\family typewriter -npy_intp* -\family default - destination) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Advance each iterator in a multi-iterator object, -\emph on -multi -\emph default -, to the given -\begin_inset Formula $N$ -\end_inset - --dimensional -\emph on -destination -\emph default - where -\begin_inset Formula $N$ -\end_inset - - is the number of dimensions in the broadcasted array. - -\end_layout - -\begin_layout Description -PyArray_MultiIter_GOTO1D ( -\family typewriter -void -\family default -) ( -\family typewriter -PyObject* -\family default - multi, -\family typewriter -npy_intp -\family default - index) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Advance each iterator in a multi-iterator object, -\emph on -multi -\emph default -, to the corresponding location of the -\emph on -index -\emph default - into the flattened broadcasted array. - -\end_layout - -\begin_layout Description -PyArray_MultiIter_NOTDONE ( -\family typewriter -int -\family default -)( -\family typewriter -PyObject* -\family default - multi) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates TRUE as long as the multi-iterator has not looped through all - of the elements (of the broadcasted result), otherwise it evaluates FALSE. - -\end_layout - -\begin_layout Description -PyArray_Broadcast ( -\family typewriter -int -\family default -) ( -\family typewriter -PyArrayMultiIterObject* -\family default - mit) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This function encapsulates the broadcasting rules. - The -\emph on -mit -\emph default - container should already contain iterators for all the arrays that need - to be broadcast. - On return, these iterators will be adjusted so that iteration over each - simultaneously will accomplish the broadcasting. - A negative number is returned if an error occurs. - -\end_layout - -\begin_layout Description -PyArray_RemoveSmallest ( -\family typewriter -int -\family default -) ( -\family typewriter -PyArrayMultiIterObject* -\family default - mit) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This function takes a multi-iterator object that has been previously -\begin_inset Quotes eld -\end_inset - -broadcasted, -\begin_inset Quotes erd -\end_inset - - finds the dimension with the smallest -\begin_inset Quotes eld -\end_inset - -sum of strides -\begin_inset Quotes erd -\end_inset - - in the broadcasted result and adapts all the iterators so as not to iterate - over that dimension (by effectively making them of length-1 in that dimension). - The corresponding dimension is returned unless -\emph on -mit -\emph default -->nd is 0, then -1 is returned. - This function is useful for constructing ufunc-like routines that broadcast - their inputs correctly and then call a strided 1-d version of the routine - as the inner-loop. - This 1-d version is usually optimized for speed and for this reason the - loop should be performed over the axis that won't require large stride - jumps. - -\end_layout - -\begin_layout Subsection -Array Scalars -\end_layout - -\begin_layout Description -PyArray_Return ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyArrayObject* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This function checks to see if -\emph on -arr -\emph default - is a 0-dimensional array and, if so, returns the appropriate array scalar. - It should be used whenever 0-dimensional arrays could be returned to Python. -\end_layout - -\begin_layout Description -PyArray_Scalar ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -void* -\family default - data, -\family typewriter -PyArray_Descr* -\family default - dtype, -\family typewriter -PyObject* -\family default - itemsize) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an array scalar object of the given enumerated -\emph on -typenum -\emph default - and -\emph on -itemsize -\emph default - by -\series bold -copying -\series default - from memory pointed to by -\emph on -data -\emph default -. - If -\emph on -swap -\emph default - is nonzero then this function will byteswap the data if appropriate to - the data-type because array scalars are always in correct machine-byte - order. -\end_layout - -\begin_layout Description -PyArray_ToScalar ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -void* -\family default - data, -\family typewriter -PyArrayObject* -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an array scalar object of the type and itemsize indicated by the - array object -\emph on -arr -\emph default - copied from the memory pointed to by -\emph on -data -\emph default - and swapping if the data in -\emph on -arr -\emph default - is not in machine byte-order. -\end_layout - -\begin_layout Description -PyArray_FromScalar ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - scalar, -\family typewriter -PyArray_Descr* -\family default - outcode) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a 0-dimensional array of type determined by -\emph on -outcode -\emph default - from -\emph on -scalar -\emph default - which should be an array-scalar object. - If -\emph on -outcode -\emph default - is NULL, then the type is determined from -\family typewriter -\emph on -scalar -\family default -\emph default -. - -\end_layout - -\begin_layout Description -PyArray_ScalarAsCtype ( -\family typewriter -void -\family default -) ( -\family typewriter -PyObject* -\family default - scalar, -\family typewriter -void* -\family default - ctypeptr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return in -\emph on -ctypeptr -\emph default - a pointer to the actual value in an array scalar. - There is no error checking so -\emph on -scalar -\emph default - must be an array-scalar object, and ctypeptr must have enough space to - hold the correct type. - For flexible-sized types, a pointer to the data is copied into the memory - of -\emph on -ctypeptr -\emph default -, for all other types, the actual data is copied into the address pointed - to by -\emph on -ctypeptr -\emph default -. - -\end_layout - -\begin_layout Description -PyArray_CastScalarToCtype ( -\family typewriter -void -\family default -) ( -\family typewriter -PyObject* -\family default - scalar, -\family typewriter -void* -\family default - ctypeptr, -\family typewriter -PyArray_Descr* -\family default - outcode) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the data (cast to the data type indicated by -\emph on -outcode -\emph default -) from the array-scalar, -\emph on -scalar -\emph default -, into the memory pointed to by -\emph on -ctypeptr -\emph default - (which must be large enough to handle the incoming memory). - -\end_layout - -\begin_layout Description -PyArray_TypeObjectFromType ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -int -\family default - type) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns a scalar type-object from a type-number, -\emph on -type -\emph default -. - Equivalent to -\family typewriter -PyArray_DescrFromType -\family default -( -\emph on -type -\emph default -)->typeobj except for reference counting and error-checking. - Returns a new reference to the typeobject on success or -\family typewriter -NULL -\family default - on failure. -\end_layout - -\begin_layout Description -PyArray_ScalarKind ( -\family typewriter -NPY_SCALARKIND -\family default -) ( -\family typewriter -int -\family default - typenum, -\family typewriter -PyArrayObject** -\family default - arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the kind of scalar represented by -\emph on -typenum -\emph default - and the array in -\emph on -*arr -\emph default - (if -\emph on -arr -\emph default - is not -\family typewriter -NULL -\family default -). - The array is assumed to be rank-0 and only used if -\emph on -typenum -\emph default - represents a signed integer. - If -\emph on -arr -\emph default - is not -\family typewriter -NULL -\family default - and the first element is negative then -\family typewriter -NPY_INTNEG_SCALAR -\family default - is returned, otherwise -\family typewriter -NPY_INTPOS_SCALAR -\family default - is returned. - The possible return values are -\family typewriter -NPY_ -\family default -<kind> -\family typewriter -_SCALAR -\family default - where <kind> can be -\series bold -INTPOS -\series default -, -\series bold -INTNEG -\series default -, -\series bold -FLOAT -\series default -, -\series bold -COMPLEX -\series default -, -\series bold -BOOL -\series default -, or -\series bold -OBJECT -\series default -. - -\family typewriter -NPY_NOSCALAR -\family default - is also an enumerated value -\family typewriter -NPY_SCALARKIND -\family default - variables can take on. - -\end_layout - -\begin_layout Description -PyArray_CanCoerceScalar ( -\family typewriter -int -\family default -) ( -\family typewriter -char -\family default - thistype, -\family typewriter -char -\family default - neededtype, -\family typewriter -NPY_SCALARKIND -\family default - scalar) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Implements the rules for scalar coercion. - Scalars are only silently coerced from thistype to neededtype if this function - returns nonzero. - If scalar is -\family typewriter -NPY_NOSCALAR -\family default -, then this function is equivalent to -\family typewriter -PyArray_CanCastSafely -\family default -. - The rule is that scalars of the same KIND can be coerced into arrays of - the same KIND. - This rule means that high-precision scalars will never cause low-precision - arrays of the same KIND to be upcast. - -\end_layout - -\begin_layout Subsection -Data-type descriptors -\end_layout - -\begin_layout Warning -Data-type objects must be reference counted so be aware of the action on - the data-type reference of different C-API calls. - The standard rule is that when a data-type object is returned it is a new - reference. - Functions that take -\family typewriter -PyArray_Descr* -\family default - objects and return arrays steal references to the data-type their inputs - unless otherwise noted. - Therefore, you must own a reference to any data-type object used as input - to such a function. - -\end_layout - -\begin_layout Description -PyArrayDescr_Check ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates as true if -\emph on -obj -\emph default - is a data-type object ( -\family typewriter -PyArray_Descr* -\family default -). -\end_layout - -\begin_layout Description -PyArray_DescrNew ( -\family typewriter -PyArray_Descr* -\family default -) ( -\family typewriter -PyArray_Descr* -\family default - obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a new data-type object copied from -\emph on -obj -\emph default - (the fields reference is just updated so that the new object points to - the same fields dictionary if any). - -\end_layout - -\begin_layout Description -PyArray_DescrNewFromType ( -\family typewriter -PyArray_Descr* -\family default -) ( -\family typewriter -int -\family default - typenum) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Create a new data-type object from the built-in (or user-registered) data-type - indicated by -\emph on -typenum -\emph default -. - All builtin types should not have any of their fields changed. - This creates a new copy of the -\family typewriter -PyArray_Descr -\family default - structure so that you can fill it in as appropriate. - This function is especially needed for flexible data-types which need to - have a new elsize member in order to be meaningful in array construction. - -\end_layout - -\begin_layout Description -PyArray_DescrNewByteorder ( -\family typewriter -PyArray_Descr* -\family default -) ( -\family typewriter -PyArray_Descr* -\family default - obj, -\family typewriter -char -\family default - newendian) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Create a new data-type object with the byteorder set according to -\emph on -newendian -\emph default -. - All referenced data-type objects (in subdescr and fields members of the - data-type object) are also changed (recursively). - If a byteorder of -\family typewriter -NPY_IGNORE -\family default - is encountered it is left alone. - If newendian is -\family typewriter -NPY_SWAP -\family default -, then all byte-orders are swapped. - Other valid newendian values are -\family typewriter -NPY_NATIVE -\family default -, -\family typewriter -NPY_LITTLE -\family default -, and -\family typewriter -NPY_BIG -\family default - which all cause the returned data-typed descriptor (and all it's referenced - data-type descriptors) to have the corresponding byte-order. -\end_layout - -\begin_layout Description -PyArray_DescrFromObject ( -\family typewriter -PyArray_Descr* -\family default -) ( -\family typewriter -PyObject* -\family default - op, -\family typewriter -PyArray_Descr* -\family default - mintype) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Determine an appropriate data-type object from the object -\emph on -op -\emph default - (which should be a -\begin_inset Quotes eld -\end_inset - -nested -\begin_inset Quotes erd -\end_inset - - sequence object) and the minimum data-type descriptor mintype (which can - be -\family typewriter -NULL -\family default -). - Similar in behavior to array( -\emph on -op -\emph default -).dtype. - Don't confuse this function with -\family typewriter -PyArray_DescrConverter -\family default -. - This function essentially looks at all the objects in the (nested) sequence - and determines the data-type from the elements it finds. - -\end_layout - -\begin_layout Description -PyArray_DescrFromScalar ( -\family typewriter -PyArray_Descr* -\family default -) ( -\family typewriter -PyObject* -\family default - scalar) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a data-type object from an array-scalar object. - No checking is done to be sure that -\emph on -scalar -\emph default - is an array scalar. - If no suitable data-type can be determined, then a data-type of NPY_OBJECT - is returned by default. - -\end_layout - -\begin_layout Description -PyArray_DescrFromType ( -\family typewriter -PyArray_Descr* -\family default -) ( -\family typewriter -int -\family default - typenum) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns a data-type object corresponding to -\emph on -typenum -\emph default -. - The -\emph on -typenum -\emph default - can be one of the enumerated types, a character code for one of the enumerated - types, or a user-defined type. - -\end_layout - -\begin_layout Description -PyArray_DescrConverter ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -PyArray_Descr** -\family default - dtype) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert any compatible Python object, -\emph on -obj -\emph default -, to a data-type object in -\emph on -dtype -\emph default -. - A large number of Python objects can be converted to data-type objects. - See Chapter -\begin_inset LatexCommand ref -reference "cha:Data-descriptor-objects" - -\end_inset - - for a complete description. - This version of the converter converts None objects to a -\family typewriter -NPY_DEFAULT_TYPE -\family default - data-type object. - This function can be used with the -\begin_inset Quotes eld -\end_inset - -O& -\begin_inset Quotes erd -\end_inset - - character code in PyArg_ParseTuple processing. - -\end_layout - -\begin_layout Description -PyArray_DescrConverter2 ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -PyArray_Descr** -\family default - dtype) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert any compatible Python object, -\emph on -obj -\emph default -, to a data-type object in -\emph on -dtype -\emph default -. - This version of the converter converts None objects so that the returned - data-type is -\family typewriter -NULL -\family default -. - This function can also be used with the -\begin_inset Quotes eld -\end_inset - -O& -\begin_inset Quotes erd -\end_inset - - character in PyArg_ParseTuple processing. -\end_layout - -\begin_layout Description -Pyarray_DescrAlignConverter ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -PyArray_Descr** -\family default - dtype) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Like -\family typewriter -PyArray_DescrConverter -\family default - except it aligns C-struct-like objects on word-boundaries as the compiler - would. -\end_layout - -\begin_layout Description -Pyarray_DescrAlignConverter2 ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -PyArray_Descr** -\family default - dtype) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Like -\family typewriter -PyArray_DescrConverter2 -\family default - except it aligns C-struct-like objects on word-boundaries as the compiler - would. -\end_layout - -\begin_layout Description -PyArray_FieldNames ( -\family typewriter -PyObject* -\family default -)( -\family typewriter -PyObject* -\family default - dict) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Take the fields dictionary, -\family typewriter -\emph on -dict -\family default -\emph default -, such as the one attached to a data-type object and construct an ordered-list - of field names such as is stored in the names field of the -\family typewriter -PyArray_Descr -\family default - object. - -\end_layout - -\begin_layout Subsection -Conversion Utilities -\end_layout - -\begin_layout Subsubsection -For use with -\family typewriter -PyArg_ParseTuple -\end_layout - -\begin_layout Standard -All of these functions can be used in -\family typewriter -PyArg_ParseTuple -\family default -(...) with the -\begin_inset Quotes eld -\end_inset - -O& -\begin_inset Quotes erd -\end_inset - - format specifier to automatically convert any Python object to the required - C-object. - All of these functions return -\family typewriter -NPY_SUCCEED -\family default - if successful and -\family typewriter -NPY_FAIL -\family default - if not. - The first argument to all of these function is a Python object. - The second argument is the -\series bold -address -\series default - of the C-type to convert the Python object to. - -\end_layout - -\begin_layout Warning -Be sure to understand what steps you should take to manage the memory when - using these conversion functions. - These functions can require freeing memory, and/or altering the reference - counts of specific objects based on your use. -\end_layout - -\begin_layout Description -PyArray_Converter ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -PyObject** -\family default - address) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert any Python object to a -\family typewriter -PyArrayObject -\family default -. - If -\family typewriter -PyArray_Check -\family default -( -\family typewriter -\emph on -obj -\family default -\emph default -) is TRUE then its reference count is incremented and a reference placed - in -\emph on -address -\emph default -. - If -\emph on -obj -\emph default - is not an array, then convert it to an array using -\family typewriter -PyArray_FromAny -\family default -. - No matter what is returned, you must DECREF the object returned by this - routine in -\emph on -address -\emph default - when you are done with it. - -\end_layout - -\begin_layout Description -PyArray_OutputConverter ( -\family typewriter -int -\family default -)( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -PyArrayObject** -\family default - address) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This is a default converter for output arrays given to functions. - If -\emph on -obj -\emph default - is -\family typewriter -Py_None -\family default - or -\family typewriter -NULL -\family default -, then -\emph on -*address -\emph default - will be -\family typewriter -NULL -\family default - but the call will succeed. - If -\family typewriter -PyArray_Check -\family default -( -\emph on -obj -\emph default -) is TRUE then it is returned in -\emph on -*address -\emph default - without incrementing its reference count. - -\end_layout - -\begin_layout Description -PyArray_IntpConverter ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -PyArray_Dims* -\family default - seq) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert any Python sequence, -\emph on -obj -\emph default -, smaller than -\family typewriter -NPY_MAXDIMS -\family default - to a C-array of -\family typewriter -npy_intp -\family default -. - The Python object could also be a single number. - The -\emph on -seq -\emph default - variable is a pointer to a structure with members ptr and len. - On successful return, -\emph on -seq -\emph default -->ptr contains a pointer to memory that must be freed to avoid a memory - leak. - The restriction on memory size allows this converter to be conveniently - used for sequences intended to be interpreted as array shapes. - -\end_layout - -\begin_layout Description -PyArray_BufferConverter ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -PyArray_Chunk* -\family default - buf) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert any Python object, -\emph on -obj -\emph default -, with a (single-segment) buffer interface to a variable with members that - detail the object's use of its chunk of memory. - The -\emph on -buf -\emph default - variable is a pointer to a structure with base, ptr, len, and flags members. - The -\family typewriter -PyArray_Chunk -\family default - structure is binary compatibile with the Python's buffer object (through - its len member on 32-bit platforms and its ptr member on 64-bit platforms - or in Python 2.5). - On return, the base member is set to -\emph on -obj -\emph default - (or its base if -\emph on -obj -\emph default - is already a buffer object pointing to another object). - If you need to hold on to the memory be sure to INCREF the base member. - The chunk of memory is pointed to by -\emph on -buf -\emph default -->ptr member and has length -\emph on -buf -\emph default -->len. - The flags member of -\emph on -buf -\emph default - is -\family typewriter -NPY_BEHAVED_RO -\family default - with the -\family typewriter -NPY_WRITEABLE -\family default - flag set if -\emph on -obj -\emph default - has a writeable buffer interface. - -\end_layout - -\begin_layout Description -PyArray_AxisConverter ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject -\family default -* obj, -\family typewriter -int* -\family default - axis) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert a Python object, -\emph on -obj -\emph default -, representing an axis argument to the proper value for passing to the functions - that take an integer axis. - Specifically, if -\emph on -obj -\emph default - is None, -\emph on -axis -\emph default - is set to -\family typewriter -NPY_MAXDIMS -\family default - which is interpreted correctly by the C-API functions that take axis arguments. -\end_layout - -\begin_layout Description -PyArray_BoolConverter ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -Bool* -\family default - value) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert any Python object, -\emph on -obj -\emph default -, to -\family typewriter -NPY_TRUE -\family default - or -\family typewriter -NPY_FALSE -\family default -, and place the result in -\emph on -value -\emph default -. -\end_layout - -\begin_layout Description -PyArray_ByteorderConverter ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -char* -\family default - endian) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert Python strings into the corresponding byte-order character: '>', - '<', 's', '=', or '|'. - -\end_layout - -\begin_layout Description -PyArray_SortkindConverter ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -NPY_SORTKIND* -\family default - sort) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert Python strings into one of -\family typewriter -NPY_QUICKSORT -\family default - (starts with 'q' or 'Q') , -\family typewriter -NPY_HEAPSORT -\family default - (starts with 'h' or 'H'), or -\family typewriter -NPY_MERGESORT -\family default - (starts with 'm' or 'M'). - -\end_layout - -\begin_layout Description -PyArray_SearchsideConverter ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -NPY_SEARCHSIDE* -\family default - side) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert Python strings into one of -\family typewriter -NPY_SEARCHLEFT -\family default - (starts with 'l' or 'L'), or -\family typewriter -NPY_SEARCHRIGHT -\family default - (starts with 'r' or 'R'). - -\end_layout - -\begin_layout Subsubsection -Other conversions -\end_layout - -\begin_layout Description -PyArray_PyIntAsInt ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - op) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert all kinds of Python objects (including arrays and array scalars) - to a standard integer. - On error, -1 is returned and an exception set. - You may find useful the macro: -\end_layout - -\begin_layout LyX-Code -#define error_converting(x) (((x) == -1) && PyErr_Occurred() -\end_layout - -\begin_layout Description -PyArray_PyIntAsIntp ( -\family typewriter -npy_intp -\family default -) ( -\family typewriter -PyObject* -\family default - op) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert all kinds of Python objects (including arrays and array scalars) - to a (platform-pointer-sized) integer. - On error, -1 is returned and an exception set. - -\end_layout - -\begin_layout Description -PyArray_IntpFromSequence ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - seq, -\family typewriter -npy_intp* -\family default - vals, -\family typewriter -int -\family default - maxvals) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert any Python sequence (or single Python number) passed in as -\emph on -seq -\emph default - to (up to) -\emph on -maxvals -\emph default - pointer-sized integers and place them in the -\emph on -vals -\emph default - array. - The sequence can be smaller then -\emph on -maxvals -\emph default - as the number of converted objects is returned. - -\end_layout - -\begin_layout Description -PyArray_TypestrConvert ( -\family typewriter -int -\family default -) ( -\family typewriter -int -\family default - itemsize, -\family typewriter -int -\family default - gentype) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert typestring characters (with -\emph on -itemsize -\emph default -) to basic enumerated data types. - The typestring character corresponding to signed and unsigned integers, - floating point numbers, and complex-floating point numbers are recognized - and converted. - Other values of gentype are returned. - This function can be used to convert, for example, the string 'f4' to -\family typewriter -NPY_FLOAT32 -\family default -. - -\end_layout - -\begin_layout Subsection -Miscellaneous -\end_layout - -\begin_layout Subsubsection -Importing the API -\end_layout - -\begin_layout Standard -In order to make use of the C-API from another extension module, the -\family typewriter -import_array -\family default -() command must be used. - If the extension module is self-contained in a single .c file, then that - is all that needs to be done. - If, however, the extension module involves multiple files where the C-API - is needed then some additional steps must be taken. -\end_layout - -\begin_layout Description -import_array (void) (void) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This function must be called in the initialization section of a module - that will make use of the C-API. - It imports the module where the function-pointer table is stored and points - the correct variable to it. - -\end_layout - -\begin_layout Description -PY_ARRAY_UNIQUE_SYMBOL -\end_layout - -\begin_layout Description -NO_IMPORT_ARRAY -\end_layout - -\begin_layout Description -\InsetSpace ~ - Using these #defines you can use the C-API in multiple files for a single - extension module. - In each file you must define -\family typewriter -PY_ARRAY_UNIQUE_SYMBOL -\family default - to some name that will hold the C-API ( -\emph on -e.g. - -\emph default - myextension_ARRAY_API). - This must be done -\series bold -before -\series default - including the numpy/arrayobject.h file. - In the module intialization routine you call -\family typewriter -import_array -\family default -(). - In addition, in the files that do not have the module initialization sub_routin -e define -\family typewriter -NO_IMPORT_ARRAY -\family default - prior to including numpy/arrayobject.h. -\end_layout - -\begin_layout Description -\InsetSpace ~ - Suppose I have two files coolmodule.c and coolhelper.c which need to be compiled - and linked into a single extension module. - Suppose coolmodule.c contains the required initcool module initialization - function (with the import_array() function called). - Then, coolmodule.c would have at the top: -\end_layout - -\begin_layout LyX-Code -#define PY_ARRAY_UNIQUE_SYMBOL cool_ARRAY_API -\end_layout - -\begin_layout LyX-Code -#include numpy/arrayobject.h -\end_layout - -\begin_layout Description -\InsetSpace ~ - On the other hand, coolhelper.c would contain at the top: -\end_layout - -\begin_layout LyX-Code -#define PY_ARRAY_UNIQUE_SYMBOL cool_ARRAY_API -\end_layout - -\begin_layout LyX-Code -#define NO_IMPORT_ARRAY -\end_layout - -\begin_layout LyX-Code -#include numpy/arrayobject.h -\end_layout - -\begin_layout Description -PyArray_GetNDArrayCVersion ( -\family typewriter -unsigned -\family default - -\family typewriter -int -\family default -) ( -\family typewriter -void -\family default -) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This just returns the value -\family typewriter -NPY_VERSION -\family default -. - Because it is in the C-API, however, comparing the output of this function - from the value defined in the current header gives a way to test if the - C-API has changed thus requiring a re-compilation of extension modules - that use the C-API. - -\end_layout - -\begin_layout Subsubsection -Internal Flexibility -\end_layout - -\begin_layout Description -PyArray_SetNumericOps ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - dict) -\end_layout - -\begin_layout Description -\InsetSpace ~ - NumPy stores an internal table of Python callable objects that are used - to implement arithmetic operations for arrays as well as certain array - calculation methods. - This function allows the user to replace any or all of these Python objects - with their own versions. - The keys of the dictionary, -\emph on -dict -\emph default -, are the named functions to replace and the paired value is the Python - callable object to use. - Care should be taken that the function used to replace an internal array - operation does not itself call back to that internal array operation (unless - you have designed the function to handle that), or an unchecked infinite - recursion can result (possibly causing program crash). - The key names that represent operations that can be replaced are: -\end_layout - -\begin_layout Quote - -\series bold -add -\series default -, -\series bold -subtract -\series default -, -\series bold -multiply -\series default -, -\series bold -divide -\series default -, -\series bold -remainder -\series default -, -\series bold -power -\series default -, -\series bold -square, reciprocal, ones_like, sqrt -\series default -, -\series bold -negative -\series default -, -\series bold -absolute -\series default -, -\series bold -invert -\series default -, -\series bold -left_shift -\series default -, -\series bold -right_shift -\series default -, -\series bold -bitwise_and -\series default -, -\series bold -bitwise_xor -\series default -, -\series bold -bitwise_or -\series default -, -\series bold -less -\series default -, -\series bold -less_equal -\series default -, -\series bold -equal -\series default -, -\series bold -not_equal -\series default -, -\series bold -greater -\series default -, -\series bold -greater_equal -\series default -, -\series bold -floor_divide -\series default -, -\series bold -true_divide -\series default -, -\series bold -logical_or -\series default -, -\series bold -logical_and -\series default -, -\series bold -floor -\series default -, -\series bold -ceil -\series default -, -\series bold -maximum -\series default -, -\series bold -minimum -\series default -, -\series bold -rint -\series default -. -\end_layout - -\begin_layout Description -\InsetSpace ~ - These functions are included here because they are used at least once in - the array object's methods. - The function returns -1 (without setting a Python Error) if one of the - objects being assigned is not callable. -\end_layout - -\begin_layout Description -PyArray_GetNumericOps ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -void -\family default -) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a Python dictionary containing the callable Python objects stored - in the the internal arithmetic operation table. - The keys of this dictionary are given in the explanation for -\family typewriter -PyArray_SetNumericOps -\family default -. -\end_layout - -\begin_layout Description -PyArray_SetStringFunction ( -\family typewriter -void -\family default -) ( -\family typewriter -PyObject* -\family default - op, -\family typewriter -int -\family default - repr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This function allows you to alter the tp_str and tp_repr methods of the - array object to any Python function. - Thus you can alter what happens for all arrays when str(arr) or repr(arr) - is called from Python. - The function to be called is passed in as -\emph on -op -\emph default -. - If -\emph on -repr -\emph default - is non-zero, then this function will be called in response to repr(arr), - otherwise the function will be called in response to str(arr). - No check on whether or not -\emph on -op -\emph default - is callable is performed. - The callable passed in to -\emph on -op -\emph default - should expect an array argument and should return a string to be printed. -\end_layout - -\begin_layout Subsubsection -Memory management -\end_layout - -\begin_layout Description -PyDataMem_NEW ( -\family typewriter -char* -\family default -) ( -\family typewriter -size_t -\family default - nbytes) -\end_layout - -\begin_layout Description -PyDataMem_FREE ( -\family typewriter -char* -\family default - ptr) -\end_layout - -\begin_layout Description -PyDataMem_RENEW ( -\family typewriter -char* -\family default -) ( -\family typewriter -void * -\family default - ptr, -\family typewriter -size_t -\family default - newbytes) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Macros to allocate, free, and reallocate memory. - These macros are used internally to create arrays. -\end_layout - -\begin_layout Description -PyDimMem_NEW ( -\family typewriter -npy_intp* -\family default -) (nd) -\end_layout - -\begin_layout Description -PyDimMem_FREE ( -\family typewriter -npy_intp* -\family default - ptr) -\end_layout - -\begin_layout Description -PyDimMem_RENEW ( -\family typewriter -npy_intp* -\family default -) ( -\family typewriter -npy_intp* -\family default - ptr, -\family typewriter -npy_intp -\family default - newnd) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Macros to allocate, free, and reallocate dimension and strides memory. -\end_layout - -\begin_layout Description -PyArray_malloc (nbytes) -\end_layout - -\begin_layout Description -PyArray_free (ptr) -\end_layout - -\begin_layout Description -PyArray_realloc (ptr, nbytes) -\end_layout - -\begin_layout Description -\InsetSpace ~ - These macros use different memory allocators, depending on the constant - -\family typewriter -NPY_USE_PYMEM -\family default -. - The system malloc is used when NPY_USE_PYMEM is 0, if NPY_USE_PYMEM is - 1, then the Python memory allocator is used. - -\end_layout - -\begin_layout Subsubsection -Threading support -\end_layout - -\begin_layout Standard -These macros are only meaningful if -\family typewriter -NPY_ALLOW_THREADS -\family default - evaluates True during compilation of the extension module. - Otherwise, these macros are equivalent to whitespace. - Python uses a single Global Interpreter Lock (GIL) for each Python process - so that only a single thread may excecute at a time (even on multi-cpu - machines). - When calling out to a compiled function that may take time to compute (and - does not have side-effects for other threads like updated global variables), - the GIL should be released so that other Python threads can run while the - time-consuming calculations are performed. - This can be accomplished using two groups of macros. - Typically, if one macro in a group is used in a code block, all of them - must be used in the same code block. - Currently, -\family typewriter -NPY_ALLOW_THREADS -\family default - is defined to the python-defined -\family typewriter -WITH_THREADS -\family default - constant unless the environment variable -\family typewriter -NPY_NOSMP -\family default - is set in which case -\family typewriter -NPY_ALLOW_THREADS -\family default - is defined to be 0. - -\end_layout - -\begin_layout Description -Group\InsetSpace ~ -1 This group is used to call code that may take some time but does - not use any Python C-API calls. - Thus, the GIL should be released during its calculation. -\end_layout - -\begin_deeper -\begin_layout Description -NPY_BEGIN_ALLOW_THREADS Equivalent to -\family typewriter -Py_BEGIN_ALLOW_THREADS -\family default - except it uses -\family typewriter -NPY_ALLOW_THREADS -\family default - to determine if the macro if replaced with white-space or not. - -\end_layout - -\begin_layout Description -NPY_END_ALLOW_THREADS Equivalent to -\family typewriter -Py_END_ALLOW_THREADS -\family default - except it uses -\family typewriter -NPY_ALLOW_THREADS -\family default - to determine if the macro if replaced with white-space or not. - -\end_layout - -\begin_layout Description -NPY_BEGIN_THREADS_DEF Place in the variable declaration area. - This macro sets up the variable needed for storing the Python state. -\end_layout - -\begin_layout Description -NPY_BEGIN_THREADS Place right before code that does not need the Python - interpreter (no Python C-API calls). - This macro saves the Python state and releases the GIL. -\end_layout - -\begin_layout Description -NPY_END_THREADS Place right after code that does not need the Python interpreter. - This macro acquires the GIL and restores the Python state from the saved - variable. -\end_layout - -\begin_layout Description -NPY_BEGIN_THREADS_DESCR ( -\family typewriter -PyArray_Descr* -\family default - dtype) Useful to release the GIL only if -\emph on -dtype -\emph default - does not contain arbitrary Python objects which may need the Python interpreter - during execution of the loop. - Equivalent to -\end_layout - -\begin_layout Description -NPY_END_THREADS_DESCR ( -\family typewriter -PyArray_Descr* -\family default - dtype) Useful to regain the GIL in situations where it was released using - the BEGIN form of this macro. - -\end_layout - -\end_deeper -\begin_layout Description -Group\InsetSpace ~ -2 This group is used to re-acquire the Python GIL after it has been - released. - For example, suppose the GIL has been released (using the previous calls), - and then some path in the code (perhaps in a different subroutine) requires - use of the Python C-API, then these macros are useful to acquire the GIL. - These macros accomplish essentially a reverse of the previous three (acquire - the LOCK saving what state it had) and then re-release it with the saved - state. -\end_layout - -\begin_deeper -\begin_layout Description -NPY_ALLOW_C_API_DEF Place in the variable declaration area to set up the - necessary variable. - -\end_layout - -\begin_layout Description -NPY_ALLOW_C_API Place before code that needs to call the Python C-API (when - it is known that the GIL has already been released). - -\end_layout - -\begin_layout Description -NPY_DISABLE_C_API Place after code that needs to call the Python C-API (to - re-release the GIL). - -\end_layout - -\end_deeper -\begin_layout Tip -Never use semicolons after the threading support macros. -\end_layout - -\begin_layout Subsubsection -Priority -\end_layout - -\begin_layout Description -NPY_PRIOIRTY Default priority for arrays. -\end_layout - -\begin_layout Description -NPY_SUBTYPE_PRIORITY Default subtype priority. -\end_layout - -\begin_layout Description -NPY_SCALAR_PRIORITY Default scalar priority (very small) -\end_layout - -\begin_layout Description -PyArray_GetPriority ( -\family typewriter -double -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -double -\family default - def) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the -\series bold -__array_priority__ -\series default - attribute (converted to a double) of -\emph on -obj -\emph default - or -\emph on -def -\emph default - if no attribute of that name exists. - Fast returns that avoid the attribute lookup are provided for objects of - type -\family typewriter -PyArray_Type -\family default -. - -\end_layout - -\begin_layout Subsubsection -Default buffers -\end_layout - -\begin_layout Description -NPY_BUFSIZE Default size of the user-settable internal buffers. -\end_layout - -\begin_layout Description -NPY_MIN_BUFSIZE Smallest size of user-settable internal buffers. -\end_layout - -\begin_layout Description -NPY_MAX_BUFSIZE Largest size allowed for the user-settable buffers. -\end_layout - -\begin_layout Subsubsection -Other constants -\end_layout - -\begin_layout Description -NPY_NUM_FLOATTYPE The number of floating-point types -\end_layout - -\begin_layout Description -NPY_MAXDIMS The maximum number of dimensions allowed in arrays. -\end_layout - -\begin_layout Description -NPY_VERSION The current version of the ndarray object (check to see if this - variable is defined to guarantee the numpy/arrayobject.h header is being - used). - -\end_layout - -\begin_layout Description -NPY_FALSE Defined as 0 for use with Bool. -\end_layout - -\begin_layout Description -NPY_TRUE Defined as 1 for use with Bool. -\end_layout - -\begin_layout Description -NPY_FAIL The return value of failed converter functions which are called - using the -\begin_inset Quotes eld -\end_inset - -O& -\begin_inset Quotes erd -\end_inset - - syntax in PyArg_ParseTuple-like functions. -\end_layout - -\begin_layout Description -NPY_SUCCEED The return value of successful converter functions which are - called using the -\begin_inset Quotes eld -\end_inset - -O& -\begin_inset Quotes erd -\end_inset - - syntax in PyArg_ParseTuple-like functions. -\end_layout - -\begin_layout Subsubsection -Miscellaneous Macros -\end_layout - -\begin_layout Description -PyArray_SAMESHAPE (a1, a2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluates as True if arrays -\emph on -a1 -\emph default - and -\emph on -a2 -\emph default - have the same shape. - -\end_layout - -\begin_layout Description -PyArray_MAX (a,b) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns the maximum of -\emph on -a -\emph default - and -\emph on -b -\emph default -. - If ( -\emph on -a -\emph default -) or ( -\emph on -b -\emph default -) are expressions they are evaluated twice. -\end_layout - -\begin_layout Description -PyArray_MIN (a,b) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns the minimum of -\emph on -a -\emph default - and -\emph on -b -\emph default -. - If ( -\emph on -a -\emph default -) or ( -\emph on -b -\emph default -) are expressions they are evaluated twice. -\end_layout - -\begin_layout Description -PyArray_CLT (a,b) -\end_layout - -\begin_layout Description -PyArray_CGT (a,b) -\end_layout - -\begin_layout Description -PyArray_CLE (a,b) -\end_layout - -\begin_layout Description -PyArray_CGE (a,b) -\end_layout - -\begin_layout Description -PyArray_CEQ (a,b) -\end_layout - -\begin_layout Description -PyArray_CNE (a,b) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Implements the complex comparisons between two complex numbers (structures - with a real and imag member) using NumPy's definition of the ordering which - is lexicographic: comparing the real parts first and then the complex parts - if the real parts are equal. - -\end_layout - -\begin_layout Description -PyArray_REFCOUNT ( -\family typewriter -PyObject* -\family default - op) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns the reference count of any Python object. - -\end_layout - -\begin_layout Description -PyArray_XDECREF_ERR (PyObject *obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - DECREF's an array object which may have the -\family typewriter -NPY_UPDATEIFCOPY -\family default - flag set without causing the contents to be copied back into the original - array. - Resets the -\family typewriter -NPY_WRITEABLE -\family default - flag on the base object. - This is useful for recovering from an error condition when -\family typewriter -NPY_UPDATEIFCOPY -\family default - is used. - -\end_layout - -\begin_layout Subsubsection -Enumerated Types -\end_layout - -\begin_layout Description -NPY_SORTKIND A special variable-type which can take on the values -\series bold -NPY_ -\series default -<KIND> where <KIND> is -\end_layout - -\begin_layout Quote - -\series bold -QUICKSORT -\series default -, -\series bold -HEAPSORT -\series default -, -\series bold -MERGESORT -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\series bold -NPY_NSORTS -\series default - is defined to be the number of sorts. -\end_layout - -\begin_layout Description -NPY_SCALARKIND A special variable type indicating the number of -\begin_inset Quotes eld -\end_inset - -kinds -\begin_inset Quotes erd -\end_inset - - of scalars distinguished in determining scalar-coercion rules. - This variable can take on the values NPY_<KIND> where <KIND> can be -\end_layout - -\begin_layout Quote - -\series bold -NOSCALAR -\series default -, -\series bold -BOOL_SCALAR -\series default -, -\series bold -INTPOS_SCALAR -\series default -, -\series bold -INTNEG_SCALAR -\series default -, -\series bold -FLOAT_SCALAR -\series default -, -\series bold -COMPLEX_SCALAR -\series default -, -\series bold -OBJECT_SCALAR -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\series bold -NPY_NSCALARKINDS -\series default - is defined to be the number of scalar kinds (not including -\family typewriter -NPY_NOSCALAR -\family default -). - -\end_layout - -\begin_layout Description -NPY_ORDER A variable type indicating the order that an array should be interpret -ed in. - The value of a variable of this type can be -\series bold -NPY_ -\series default -<ORDER> where <ORDER> is -\end_layout - -\begin_layout Quote - -\series bold -ANYORDER -\series default -, -\series bold -CORDER -\series default -, -\series bold -FORTRANORDER -\end_layout - -\begin_layout Description -NPY_CLIPMODE A variable type indicating the kind of clipping that should - be applied in certain functions. - The value of a variable of this type can be -\series bold -NPY_ -\series default -<MODE> where <MODE> is -\end_layout - -\begin_layout Quote - -\series bold -CLIP -\series default -, -\series bold -WRAP -\series default -, -\series bold -RAISE -\begin_inset LatexCommand index -name "ndarray!C-API|)" - -\end_inset - - -\begin_inset LatexCommand index -name "C-API!array|)" - -\end_inset - - -\end_layout - -\begin_layout Section -UFunc API -\begin_inset LatexCommand index -name "ufunc!C-API|(" - -\end_inset - - -\begin_inset LatexCommand index -name "C-API!ufunc|(" - -\end_inset - - -\end_layout - -\begin_layout Subsection -Constants -\end_layout - -\begin_layout Description -UFUNC_ERR_<HANDLER> -\end_layout - -\begin_layout Description -\InsetSpace ~ - <HANDLER> can be -\series bold -IGNORE -\series default -, -\series bold -WARN -\series default -, -\series bold -RAISE -\series default -, or -\series bold -CALL -\end_layout - -\begin_layout Description -UFUNC_<THING>_<ERR> -\end_layout - -\begin_layout Description -\InsetSpace ~ - <THING> can be -\series bold -MASK -\series default -, -\series bold -SHIFT -\series default -, or -\series bold -FPE -\series default -, and <ERR> can be -\series bold -DIVIDEBYZERO -\series default -, -\series bold -OVERFLOW -\series default -, -\series bold -UNDERFLOW -\series default -, and -\series bold -INVALID -\series default -. -\end_layout - -\begin_layout Description -PyUFunc_<VALUE> <VALUE> can be -\series bold -One -\series default - (1), -\series bold -Zero -\series default - (0), or -\series bold -None -\series default - (-1) -\end_layout - -\begin_layout Subsection -Macros -\end_layout - -\begin_layout Description -NPY_LOOP_BEGIN_THREADS -\end_layout - -\begin_layout Description -\InsetSpace ~ - Used in universal function code to only release the Python GIL if loop->obj - is not true ( -\emph on -i.e. - -\emph default - this is not an OBJECT array loop). - Requires use of -\family typewriter -NPY_BEGIN_THREADS_DEF -\family default - in variable declaration area. -\end_layout - -\begin_layout Description -NPY_LOOP_END_THREADS -\end_layout - -\begin_layout Description -\InsetSpace ~ - Used in universal function code to re-acquire the Python GIL if it was - released (because loop->obj was not true). - -\end_layout - -\begin_layout Description -UFUNC_CHECK_ERROR (loop) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A macro used internally to check for errors and goto fail if found. - This macro requires a fail label in the current code block. - The -\emph on -loop -\emph default - variable must have at least members (obj, errormask, and errorobj). - If -\emph on -loop -\emph default -->obj is nonzero, then -\family typewriter -PyErr_Occurred -\family default -() is called (meaning the GIL must be held). - If -\emph on -loop -\emph default -->obj is zero, then if -\emph on -loop -\emph default -->errormask is nonzero, -\family typewriter -PyUFunc_checkfperr -\family default - is called with arguments -\emph on -loop -\emph default -->errormask and -\emph on -loop -\emph default -->errobj. - If the result of this check of the IEEE floating point registers is true - then the code redirects to the fail label which must be defined. -\end_layout - -\begin_layout Description -UFUNC_CHECK_STATUS ( -\emph on -ret -\emph default -) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A macro that expands to platform-dependent code. - The -\emph on -ret -\emph default - variable can can be any integer. - The -\family typewriter -UFUNC_FPE_ -\family default -<ERR> bits are set in -\emph on -ret -\emph default - according to the status of the corresponding error flags of the floating - point processor. - -\end_layout - -\begin_layout Subsection -Functions -\end_layout - -\begin_layout Description -PyUFunc_FromFuncAndData ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyUFuncGenericFunction* -\family default - func, -\family typewriter -void** -\family default - data, -\family typewriter -char* -\family default - types, -\family typewriter -int -\family default - ntypes, -\family typewriter -int -\family default - nin, -\family typewriter -int -\family default - nout, -\family typewriter -int -\family default - identity, -\family typewriter -char* -\family default - name, -\family typewriter -char* -\family default - doc, -\family typewriter -int -\family default - check_return) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Create a new broadcasting universal function from required variables. - Each ufunc builds around the notion of an element-by-element operation. - Each ufunc object contains pointers to 1-d loops implementing the basic - functionality for each supported type. - -\end_layout - -\begin_layout Description -nin The number of inputs to this operation. -\end_layout - -\begin_layout Description -nout The number of outputs -\end_layout - -\begin_layout Description -ntypes How many different data-type -\begin_inset Quotes eld -\end_inset - -signatures -\begin_inset Quotes erd -\end_inset - - the ufunc has implemented. - -\end_layout - -\begin_layout Description -func Must to an array of length -\emph on -ntypes -\emph default - containing -\family typewriter -PyUFuncGenericFunction -\family default - items. - These items are pointers to functions that acutally implement the underlying - (element-by-element) function -\begin_inset Formula $N$ -\end_inset - - times. - T -\end_layout - -\begin_layout Description -types Must be of length ( -\emph on -nin -\emph default -+ -\emph on -nout -\emph default -) -\emph on -*ntypes -\emph default -, and it contains the data-types (built-in only) that the corresponding - function in the -\emph on -func -\emph default - array can deal with. - -\end_layout - -\begin_layout Description -data Should be -\family typewriter -NULL -\family default - or a pointer to an array of size -\emph on -ntypes -\emph default -. - This array may contain arbitrary extra-data to be passed to the corresponding - 1-d loop function in the func array. - -\end_layout - -\begin_layout Description -name The name for the ufunc. - -\end_layout - -\begin_layout Description -doc Allows passing in a documentation string to be stored with the ufunc. - The documentation string should not contain the name of the function or - the calling signature as that will be dynamically determined from the object - and available when accessing the -\series bold -__doc__ -\series default - attribute of the ufunc. - -\end_layout - -\begin_layout Description -check_return Unused and present for backwards compatibility of the C-API. - A corresponding -\emph on -check_return -\emph default - integer does exist in the ufunc structure and it does get set with this - value when the ufunc object is created. - -\end_layout - -\begin_layout Description -PyUFunc_RegisterLoopForType ( -\family typewriter -int -\family default -) ( -\family typewriter -PyUFuncObject* -\family default - ufunc, -\family typewriter -int -\family default - usertype, -\family typewriter -PyUFuncGenericFunction -\family default - function, -\family typewriter -int* -\family default - arg_types, -\family typewriter -void* -\family default - data) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This function allows the user to register a 1-d loop with an already-created - ufunc to be used whenever the ufunc is called with any of its input arguments - as the user-defined data-type. - This is needed in order to make ufuncs work with built-in data-types. - The data-type must have been previously registered with the numpy system. - The loop is passed in as -\emph on -function -\emph default -. - This loop can take arbitrary data which should be passed in as -\emph on -data -\emph default -. - The data-types the loop requires are passed in as -\emph on -arg_types -\emph default - which must be a pointer to memory at least as large as ufunc->nargs. -\end_layout - -\begin_layout Description -PyUFunc_ReplaceLoopBySignature ( -\family typewriter -int -\family default -) ( -\family typewriter -PyUFuncObject* -\family default - ufunc, -\family typewriter -PyUFuncGenericFunction -\family default - newfunc, -\family typewriter -int* -\family default - signature, -\family typewriter -PyUFuncGenericFunction* -\family default - oldfunc) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Replace a 1-d loop matching the given -\emph on -signature -\emph default - in the already-created -\emph on -ufunc -\emph default - with the new 1-d loop newfunc. - Return the old 1-d loop function in -\emph on -oldfunc -\emph default -. - Return 0 on success and -1 on failure. - This function works only with built-in types (use -\family typewriter -PyUFunc_RegisterLoopForType -\family default - for user-defined types). - A signature is an array of data-type numbers indicating the inputs followed - by the outputs assumed by the 1-d loop. - -\end_layout - -\begin_layout Description -PyUFunc_GenericFunction ( -\family typewriter -int -\family default -) ( -\family typewriter -PyUFuncObject* -\family default - self, -\family typewriter -PyObject* -\family default - args, -\family typewriter -PyArrayObject** -\family default - mps) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A generic ufunc call. - The ufunc is passed in as -\emph on -self -\emph default -, the arguments to the ufunc as -\emph on -args -\emph default -. - The -\emph on -mps -\emph default - argument is an array of -\family typewriter -PyArrayObject -\family default - pointers containing the converted input arguments as well as the ufunc - outputs on return. - The user is responsible for managing this array and receives a new reference - for each array in -\emph on -mps -\emph default -. - The total number of arrays in -\emph on -mps -\emph default - is given by -\emph on -self -\emph default -->nin + -\emph on -self -\emph default -->nout. -\end_layout - -\begin_layout Description -PyUFunc_checkfperr ( -\family typewriter -int -\family default -) ( -\family typewriter -int -\family default - errmask, -\family typewriter -PyObject* -\family default - errobj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A simple interface to the IEEE error-flag checking support. - The -\emph on -errmask -\emph default - argument is a mask of -\family typewriter -UFUNC_MASK_<ERR> -\family default - bitmasks indicating which errors to check for (and how to check for them). - The -\emph on -errobj -\emph default - must be a Python tuple with two elements: a string containing the name - which will be used in any communication of error and either a callable - Python object (call-back function) or -\family typewriter -Py_None -\family default -. - The callable object will only be used if -\family typewriter -UFUNC_ERR_CALL -\family default - is set as the desired error checking method. - This routine manages the GIL and is safe to call even after releasing the - GIL. - If an error in the IEEE-compatibile hardware is determined a -1 is returned, - otherwise a 0 is returned. - -\end_layout - -\begin_layout Description -PyUFunc_clearfperr ( -\family typewriter -void -\family default -) () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Clear the IEEE error flags. - -\end_layout - -\begin_layout Description -PyUFunc_GetPyValues ( -\family typewriter -void -\family default -) ( -\family typewriter -char* -\family default - name, -\family typewriter -int* -\family default - bufsize, -\family typewriter -int* -\family default - errmask, -\family typewriter -PyObject** -\family default - errobj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Get the Python values used for ufunc processing from the thread-local storage - area unless the defaults have been set in which case the name lookup is - bypassed. - The name is placed as a string in the first element of -\emph on -*errobj -\emph default -. - The second element is the looked-up function to call on error callback. - The value of the looked-up buffer-size to use is passed into -\emph on -bufsize -\emph default -, and the value of the error mask is placed into -\emph on -errmask -\emph default -. - -\end_layout - -\begin_layout Subsection -Generic functions -\end_layout - -\begin_layout Standard -At the core of every ufunc is a collection of type-specific functions that - defines the basic functionality for each of the supported types. - These functions must evaluate the underlying function -\begin_inset Formula $N\geq1$ -\end_inset - - times. - Extra-data may be passed in that may be used during the calculation. - This feature allows some general functions to be used as these basic looping - functions. - The general function has all the code needed to point variables to the - right place and set up a function call. - The general function assumes that the actual function to call is passed - in as the extra data and calls it with the correct values. - All of these functions are suitable for placing directly in the array of - functions stored in the functions member of the PyUFuncObject structure. - -\end_layout - -\begin_layout Description -PyUFunc_f_f_As_d_d ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -PyUFunc_d_d ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -PyUFunc_f_f ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -PyUFunc_g_g ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -PyUFunc_F_F_As_D_D ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -PyUFunc_F_F ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -PyUFunc_D_D ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -PyUFunc_G_G ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Type specific, core 1-d functions for ufuncs where each calculation is - obtained by calling a function taking one input argument and returning - one output. - This function is passed in -\family typewriter -func -\family default -. - The letters correspond to dtypechar's of the supported data types ( -\family typewriter -f -\family default - - float, -\family typewriter -d -\family default - - double, -\family typewriter -g -\family default - - long double, -\family typewriter -F -\family default - - cfloat, -\family typewriter -D -\family default - - cdouble, -\family typewriter -G -\family default - - clongdouble). - The argument -\emph on -func -\emph default - must support the same signature. - The _As_X_X variants assume ndarray's of one data type but cast the values - to use an underlying function that takes a different data type. - Thus, -\family typewriter -PyUFunc_f_f_As_d_d -\family default - uses ndarrays of data type -\family typewriter -NPY_FLOAT -\family default - but calls out to a C-function that takes double and returns double. - -\end_layout - -\begin_layout Description -PyUFunc_ff_f_As_dd_d ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -PyUFunc_ff_f ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -PyUFunc_dd_d ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -PyUFunc_gg_g ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -PyUFunc_FF_F_As_DD_D ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -PyUFunc_DD_D ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -PyUFunc_FF_F ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -PyUFunc_GG_G ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Type specific, core 1-d functions for ufuncs where each calculation is - obtained by calling a function taking two input arguments and returning - one output. - The underlying function to call is passed in as -\emph on -func -\emph default -. - The letters correspond to dtypechar's of the specific data type supported - by the general-purpose function. - The argument -\family typewriter -func -\family default - must support the corresponding signature. - The -\family typewriter -_As_XX_X -\family default - variants assume ndarrays of one data type but cast the values at each iteration - of the loop to use the underlying function that takes a different data - type. - -\end_layout - -\begin_layout Description -PyUFunc_O_O ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -PyUFunc_OO_O ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -\InsetSpace ~ - One-input, one-output, and two-input, one-output core 1-d functions for - the -\family typewriter -NPY_OBJECT -\family default - data type. - These functions handle reference count issues and return early on error. - The actual function to call is -\emph on -func -\emph default - and it must accept calls with the signature ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default -) for -\family typewriter -PyUFunc_O_O -\family default - or ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject -\family default - *, -\family typewriter -PyObject -\family default - *) for -\family typewriter -PyUFunc_OO_O -\family default -. -\end_layout - -\begin_layout Description -PyUFunc_O_O_method ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This general purpose 1-d core function assumes that -\emph on -func -\emph default - is a string representing a method of the input object. - For each iteration of the loop, the Python obejct is extracted from the - array and its -\emph on -func -\emph default - method is called returning the result to the output array. - -\end_layout - -\begin_layout Description -PyUFunc_OO_O_method ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This general purpose 1-d core function assumes that -\emph on -func -\emph default - is a string representing a method of the input object that takes one argument. - The first argument in -\emph on -args -\emph default - is the method whose function is called, the second argument in -\emph on -args -\emph default - is the argument passed to the function. - The output of the function is stored in the third entry of -\emph on -args -\emph default -. - -\end_layout - -\begin_layout Description -PyUFunc_On_Om ( -\family typewriter -void -\family default -) ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - func) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This is the 1-d core function used by the dynamic ufuncs created by umath.frompy -func(function, nin, nout). - In this case -\emph on -func -\emph default - is a pointer to a -\family typewriter -PyUFunc_PyFuncData -\family default - structure which has definition { -\family typewriter -int -\family default - nin; -\family typewriter -int -\family default - nout; -\family typewriter -PyObject* -\family default - callable}. - At each iteration of the loop, the -\emph on -nin -\emph default - input objects are exctracted from their object arrays and placed into an - argument tuple, the Python -\emph on -callable -\emph default - is called with the input arguments, and the nout outputs are placed into - their object arrays. - -\end_layout - -\begin_layout Section -Importing the API -\end_layout - -\begin_layout Description -PY_UFUNC_UNIQUE_SYMBOL -\end_layout - -\begin_layout Description -NO_IMPORT_UFUNC -\end_layout - -\begin_layout Description -import_ufunc ( -\family typewriter -void -\family default -) ( -\family typewriter -void -\family default -) -\end_layout - -\begin_layout Description -\InsetSpace ~ - These are the constants and functions for accessing the ufunc C-API from - extension modules in precisely the same way as the array C-API can be accessed. - The -\family typewriter -import_ufunc -\family default -() function must always be called (in the initialization subroutine of the - extension module). - If your extension module is in one file then that is all that is required. - The other two constants are useful if your extension module makes use of - multiple files. - In that case, define -\family typewriter -PY_UFUNC_UNIQUE_SYMBOL -\family default - to something unique to your code and then in source files that do not contain - the module initialization function but still need access to the UFUNC API, - define -\family typewriter -PY_UFUNC_UNIQUE_SYMBOL -\family default - to the same name used previously and also define -\family typewriter -NO_IMPORT_UFUNC -\family default -. - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The C-API is actually an array of function pointers. - This array is created (and pointed to by a global variable) by import_ufunc. - The global variable is either statically defined or allowed to be seen - by other files depending on the state of -\family typewriter -Py_UFUNC_UNIQUE_SYMBOL -\family default - and -\family typewriter -NO_IMPORT_UFUNC -\family default -. - -\begin_inset LatexCommand index -name "ufunc!C-API|)" - -\end_inset - - -\begin_inset LatexCommand index -name "C-API!ufunc|)" - -\end_inset - - -\end_layout - -\begin_layout Chapter -How to extend NumPy -\end_layout - -\begin_layout Quotation -That which is static and repetitive is boring. - That which is dynamic and random is confusing. - In between lies art. -\end_layout - -\begin_layout Right Address ---- -\emph on -John A. - Locke -\end_layout - -\begin_layout Quotation -Science is a differential equation. - Religion is a boundary condition. -\end_layout - -\begin_layout Right Address ---- -\emph on -Alan Turing -\end_layout - -\begin_layout Section -Writing an extension module -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand label -name "sec:Writing-an-extension" - -\end_inset - - -\begin_inset LatexCommand index -name "extension module|(" - -\end_inset - -While the ndarray object is designed to allow rapid computation in Python, - it is also designed to be general-purpose and satisfy a wide-variety of - computational needs. - As a result, if absolute speed is essential, there is no replacement for - a well-crafted, compiled loop specific to your application and hardware. - This is one of the reasons that numpy includes f2py so that an easy-to-use - mechanisms for linking (simple) C/C++ and (arbitrary) Fortran code directly - into Python are available. - You are encouraged to use and improve this mechanism. - The purpose of this section is not to document this tool but to document - the more basic steps to writing an extension module that this tool depends - on. - -\end_layout - -\begin_layout Standard -When an extension module is written, compiled, and installed to somewhere - in the Python path (sys.path), the code can then be imported into Python - as if it were a standard python file. - It will contain objects and methods that have been defined and compiled - in C code. - The basic steps for doing this in Python are well-documented and you can - find more information in the documentation for Python itself available - online at -\begin_inset LatexCommand url -name "www.python.org" -target "http://www.python.org" - -\end_inset - -. - -\end_layout - -\begin_layout Standard -In addition to the Python C-API, there is a full and rich C-API for NumPy - allowing sophisticated manipulations on a C-level. - However, for most applications, only a few API calls will typically be - used. - If all you need to do is extract a pointer to memory along with some shape - information to pass to another calculation routine, then you will use very - different calls, then if you are trying to create a new array-like type - or add a new data type for ndarrays. - This chapter documents the API calls and macros that are most commonly - used. -\end_layout - -\begin_layout Section -Required subroutine -\end_layout - -\begin_layout Standard -There is exactly one function that must be defined in your C-code in order - for Python to use it as an extension module. - The function must be called init<name> where <name> is the name of the - module from Python. - This function must be declared so that it is visible to code outside of - the routine. - Besides adding the methods and constants you desire, this subroutine must - also contain calls to import_array() and/or import_ufunc() depending on - which C-API is needed. - Forgetting to place these commands will show itself as an ugly segmentation - fault (crash) as soon as any C-API subroutine is actually called. - It is actually possible to have multiple init<name> functions in a single - file in which case multiple modules will be defined by that file. - However, there are some tricks to get that to work correctly and it is - not covered here. -\end_layout - -\begin_layout Standard -A minimal init<name> method looks like -\end_layout - -\begin_layout LyX-Code -PyMODINIT_FUNC -\newline -init<name>(void) -\newline -{ -\newline - (void)Py_InitModule( -\begin_inset Quotes erd -\end_inset - -<name> -\begin_inset Quotes erd -\end_inset - -, mymethods); -\newline - import_array(); -\newline -} -\end_layout - -\begin_layout Standard -The mymethods must be an array (usually statically declared) of PyMethodDef - structures which contain method names, actual C-functions, a variable indicatin -g whether the method uses keyword arguments or not, and docstrings. - These are explained in the next section. - If you want to add constants to the module, then you store the returned - value from Py_InitModule which is a module object. - The most general way to add itmes to the module is to get the module dictionary - using PyModule_GetDict(module). - With the module dictionary, you can add whatever you like to the module - manually. - An easier way to add objects to the module is to use one of three additional - Python C-API calls that do not require a separate extraction of the module - dictionary. - These are documented in the Python documentation, but repeated here for - convenience: -\end_layout - -\begin_layout Description -PyModule_AddObject ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - module, -\family typewriter -char* -\family default - name, -\family typewriter -PyObject* -\family default - value) -\end_layout - -\begin_layout Description -PyModule_AddIntConstant ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - module, -\family typewriter -char* -\family default - name, -\family typewriter -long -\family default - value) -\end_layout - -\begin_layout Description -PyModule_AddStringConstant ( -\family typewriter -int -\family default -) ( -\family typewriter -PyObject* -\family default - module, -\family typewriter -char* -\family default - name, -\family typewriter -char* -\family default - value) -\end_layout - -\begin_layout Description -\InsetSpace ~ - All three of these functions require the -\family typewriter -module -\family default - object (the return value of Py_InitModule). - The -\family typewriter -name -\family default - is a string that labels the value in the module. - Depending on which function is called, the -\family typewriter -value -\family default - argument is either a general object (PyModule_AddObject steals a reference - to it), an integer constant, or a string constant. -\end_layout - -\begin_layout Section -Defining functions -\end_layout - -\begin_layout Standard -The second argument passed in to the Py_InitModule function is a structure - that makes it easy to to define functions in the module. - In the example given above, the mymethods structure would have been defined - earlier in the file (usually right before the init<name> subroutine) to - -\end_layout - -\begin_layout LyX-Code -static PyMethodDef mymethods[] = { -\newline -{ -\begin_inset Quotes erd -\end_inset - -nokeywordfunc -\begin_inset Quotes erd -\end_inset - -,nokeyword_cfunc, -\newline -METH_VARARGS, -\newline - -\begin_inset Quotes erd -\end_inset - -Doc string -\begin_inset Quotes erd -\end_inset - -}, -\newline -{ -\begin_inset Quotes erd -\end_inset - -keywordfunc -\begin_inset Quotes erd -\end_inset - -, keyword_cfunc, -\end_layout - -\begin_layout LyX-Code -METH_VARARGS|METH_KEYWORDS, -\newline - -\begin_inset Quotes erd -\end_inset - -Doc string -\begin_inset Quotes erd -\end_inset - -}, -\newline -{NULL, NULL, 0, NULL} /* Sentinel */ -\newline -} -\end_layout - -\begin_layout Standard -Each entry in the mymethods array is a PyMethodDef structure containing - 1) the Python name, 2) the C-function that implements the function, 3) - flags indicating whether or not keywords are accepted for this function, - and 4) The docstring for the function. - Any number of functions may be defined for a single module by adding more - entries to this table. - The last entry must be all NULL as shown to act as a sentinel. - Python looks for this entry to know that all of the functions for the module - have been defined. - -\end_layout - -\begin_layout Standard -The last thing that must be done to finish the extension module is to actually - write the code that performs the desired functions. - There are two kinds of functions: those that don't accept keyword arguments, - and those that do. -\end_layout - -\begin_layout Subsection -Functions without keyword arguments -\end_layout - -\begin_layout Standard -Functions that don't accept keyword arguments should be written as -\end_layout - -\begin_layout LyX-Code -static PyObject* -\newline -nokeyword_cfunc (PyObject *dummy, PyObject *args) -\newline -{ -\newline - /* - convert Python arguments */ -\newline - /* do function */ -\end_layout - -\begin_layout LyX-Code - /* return something */ -\end_layout - -\begin_layout LyX-Code -} -\end_layout - -\begin_layout Standard -The dummy argument is not used in this context and can be safely ignored. - The -\emph on -args -\emph default - argument contains all of the arguments passed in to the function as a tuple. - You can do anything you want at this point, but usually the easiest way - to manage the input arguments is to call -\family typewriter -PyArg_ParseTuple -\family default - (args, format_string, addresses_to_C_variables...) or -\family typewriter -PyArg_UnpackTuple -\family default - (tuple, -\begin_inset Quotes eld -\end_inset - -name -\begin_inset Quotes erd -\end_inset - -, min, max, ...). - A good description of how to use the first function is contained in the - Python C-API reference manual under section 5.5 (Parsing arguments and building - values). - You should pay particular attention to the -\begin_inset Quotes eld -\end_inset - -O& -\begin_inset Quotes erd -\end_inset - - format which uses converter functions to go between the Python object and - the C object. - All of the other format functions can be (mostly) thought of as special - cases of this general rule. - There are several converter functions defined in the NumPy C-API that may - be of use. - In particular, the -\family typewriter -PyArray_DescrConverter -\family default - function is very useful to support arbitrary data-type specification. - This function transforms any valid data-type Python object into a -\family typewriter -PyArray_Descr* -\family default - object. - Remember to pass in the address of the C-variables that should be filled - in. -\end_layout - -\begin_layout Standard -There are lots of examples of how to use -\family typewriter -PyArg_ParseTuple -\family default - throughout the NumPy source code. - The standard usage is like this: -\end_layout - -\begin_layout LyX-Code -PyObject *input; -\end_layout - -\begin_layout LyX-Code -PyArray_Descr *dtype; -\end_layout - -\begin_layout LyX-Code -if (!PyArg_ParseTuple(args, "OO&", &input, -\newline - PyArray_DescrCon -verter, -\newline - &dtype)) return NULL; -\end_layout - -\begin_layout Standard -It is important to keep in mind that you get a -\emph on -borrowed -\emph default - reference to the object when using the -\begin_inset Quotes eld -\end_inset - -O -\begin_inset Quotes erd -\end_inset - - format string. - However, the converter functions usually require some form of memory handling. - In this example, if the conversion is successful, -\emph on -dtype -\emph default - will hold a new reference to a -\family typewriter -PyArray_Descr* -\family default - object, while -\emph on -input -\emph default - will hold a borrowed reference. - Therefore, if this conversion were mixed with another conversion (say to - an integer) and the data-type conversion was successful but the integer - conversion failed, then you would need to release the reference count to - the data-type object before returning. - A typical way to do this is to set -\emph on -dtype -\emph default - to -\family typewriter -NULL -\family default - before calling PyArg_ParseTuple and then use -\family typewriter -Py_XDECREF -\family default - on -\emph on -dtype -\emph default - before returning. - -\end_layout - -\begin_layout Standard -After the input arguments are processed, the code that actually does the - work is written (likely calling other functions as needed). - The final step of the C-function is to return something. - If an error is encountered then -\family typewriter -NULL -\family default - should be returned (making sure an error has actually been set). - If nothing should be returned then increment -\family typewriter -Py_None -\family default - and return it. - If a single object should be returned then it is returned (ensuring that - you own a reference to it first). - If multiple objects should be returned then you need to return a tuple. - The -\family typewriter -Py_BuildValue -\family default - (format_string, c_variables...) function makes it easy to build tuples of - Python objects from C variables. - Pay special attention to the difference between 'N' and 'O' in the format - string or you can easily create memory leaks. - The 'O' format string increments the reference count of the -\family typewriter -PyObject* -\family default - C-variable it corresponds to, while the 'N' format string steals a reference - to the corresponding -\family typewriter -PyObject* -\family default - C-variable. - You should use 'N' if you ave already created a reference for the object - and just want to give that reference to the tuple. - You should use 'O' if you only have a borrowed reference to an object and - need to create one to provide for the tuple. - -\end_layout - -\begin_layout Subsection -Functions with keyword arguments -\end_layout - -\begin_layout Standard -These functions are very similar to functions without keyword arguments. - The only difference is that the function signature is -\end_layout - -\begin_layout LyX-Code -static PyObject* -\newline -keyword_cfunc (PyObject *dummy, PyObject *args, PyObject - *kwds) -\newline -{ -\newline -... -\newline -} -\end_layout - -\begin_layout Standard -The kwds argument holds a Python dictionary whose keys are the names of - the keyword arguments and whose values are the corresponding keyword-argument - values. - This dictionary can be processed however you see fit. - The easiest way to handle it, however, is to replace the -\family typewriter -PyArg_ParseTuple -\family default - (args, format_string, addresses...) function with a call to -\family typewriter -PyArg_ParseTupleAndKeywords -\family default - (args, kwds, format_string, char *kwlist[], addresses...). - The kwlist parameter to this function is a -\family typewriter -NULL -\family default --terminated array of strings providing the expected keyword arguments. - There should be one string for each entry in the format_string. - Using this function will raise a TypeError if invalid keyword arguments - are passed in. - -\end_layout - -\begin_layout Standard -For more help on this function please see section 1.8 (Keyword Paramters - for Extension Functions) of the Extending and Embedding tutorial in the - Python documentation. -\end_layout - -\begin_layout Subsection -Reference counting -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "reference counting|(" - -\end_inset - -The biggest difficulty when writing extension modules is reference counting. - It is an important reason for the popularity of f2py, weave, pyrex, ctypes, - etc.... - If you mis-handle reference counts you can get problems from memory-leaks - to segmentation faults. - The only strategy I know of to handle reference counts correctly is blood, - sweat, and tears. - First, you force it into your head that every Python variable has a reference - count. - Then, you understand exactly what each function does to the reference count - of your objects, so that you can properly use DECREF and INCREF when you - need them. - Reference counting can really test the amount of patience and diligence - you have towards your programming craft. - Despite the grim depiction, most cases of reference counting are quite - straightforward with the most common difficulty being not using DECREF - on objects before exiting early from a routine due to some error. - In second place, is the common error of not owning the reference on an - object that is passed to a function or macro that is going to steal the - reference ( -\emph on -e.g. - -\emph default - -\family typewriter -PyTuple_SET_ITEM -\family default -, and most functions that take -\family typewriter -PyArray_Descr -\family default - objects). - -\end_layout - -\begin_layout Standard -Typically you get a new reference to a variable when it is created or is - the return value of some function (there are some prominent exceptions, - however --- such as getting an item out of a tuple or a dictionary). - When you own the reference, you are responsible to make sure that -\family typewriter -Py_DECREF -\family default -(var) is called when the variable is no longer necessary (and no other function - has -\begin_inset Quotes eld -\end_inset - -stolen -\begin_inset Quotes erd -\end_inset - - its reference). - Also, if you are passing a Python object to a function that will -\begin_inset Quotes eld -\end_inset - -steal -\begin_inset Quotes erd -\end_inset - - the reference, then you need to make sure you own it (or use -\family typewriter -Py_INCREF -\family default - to get your own reference). - You will also encounter the notion of borrowing a reference. - A function that borrows a reference does not alter the reference count - of the object and does not expect to -\begin_inset Quotes eld -\end_inset - -hold on -\begin_inset Quotes erd -\end_inset - - to the reference. - It's just going to use the object temporarily. - When you use -\family typewriter -PyArg_ParseTuple -\family default - or -\family typewriter -PyArg_UnpackTuple -\family default - you receive a borrowed reference to the objects in the tuple and should - not alter their reference count inside your function. - With practice, you can learn to get reference counting right, but it can - be frustrating at first. - -\end_layout - -\begin_layout Standard -One common source of reference-count errors is the -\family typewriter -Py_BuildValue -\family default - function. - Pay careful attention to the difference between the 'N' format character - and the 'O' format character. - If you create a new object in your subroutine (such as an output array), - and you are passing it back in a tuple of return values, then you should - most-likely use the 'N' format character in -\family typewriter -Py_BuildValue -\family default -. - The 'O' character will increase the reference count by one. - This will leave the caller with two reference counts for a brand-new array. - When the variable is deleted and the reference count decremented by one, - there will still be that extra reference count, and the array will never - be deallocated. - You will have a reference-counting induced memory leak. - Using the 'N' character will avoid this situation as it will return to - the caller an object (inside the tuple) with a single reference count. - -\begin_inset LatexCommand index -name "reference counting|)" - -\end_inset - - -\end_layout - -\begin_layout Section -Dealing with array objects -\end_layout - -\begin_layout Standard -Most extension modules for NumPy will need to access the memory for an ndarray - object (or one of it's sub-classes). - The easiest way to do this doesn't require you to know much about the internals - of NumPy. - The method is to -\end_layout - -\begin_layout Enumerate -Ensure you are dealing with a well-behaved array (aligned, in machine byte-order - and single-segment) of the correct type and number of dimensions. - -\end_layout - -\begin_deeper -\begin_layout Enumerate -By converting it from some Python object using -\family typewriter -PyArray_FromAny -\family default - or a macro built on it. - -\end_layout - -\begin_layout Enumerate -By constructing a new ndarray of your desired shape and type using -\family typewriter -PyArray_NewFromDescr -\family default - or a simpler macro or function based on it. - -\end_layout - -\end_deeper -\begin_layout Enumerate -Get the shape of the array and a pointer to its actual data. - -\end_layout - -\begin_layout Enumerate -Pass the data and shape information on to a subroutine or other section - of code that actually performs the computation. - -\end_layout - -\begin_layout Enumerate -If you are writing the algorithm, then I recommend that you use the stride - information contained in the array to access the elements of the array - (the -\family typewriter -PyArray_GETPTR -\family default - macros make this painless). - Then, you can relax your requirements so as not to force a single-segment - array and the data-copying that might result. - -\end_layout - -\begin_layout Standard -Each of these sub-topics is covered in the following sub-sections. -\end_layout - -\begin_layout Subsection -Converting an arbitrary sequence object -\end_layout - -\begin_layout Standard -The main routine for obtaining an array from any Python object that can - be converted to an array is -\family typewriter -PyArray_FromAny -\family default -. - This function is very flexible with many input arguments. - Several macros make it easier to use the basic function. - -\family typewriter -PyArray_FROM_OTF -\family default - is arguably the most useful of these macros for the most common uses. - It allows you to convert an arbitrary Python object to an array of a specific - builtin data-type ( -\emph on -e.g. - -\emph default - float), while specifying a particular set of requirements ( -\emph on -e.g. - -\emph default - contiguous, aligned, and writeable). - The syntax is -\end_layout - -\begin_layout Description -PyArray_FROM_OTF ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyObject* -\family default - obj, -\family typewriter -int -\family default - typenum, -\family typewriter -int -\family default - requirements) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an ndarray from any Python object, -\emph on -obj -\emph default -, that can be converted to an array. - The number of dimensions in the returned array is determined by the object. - The desired data-type of the returned array is provided in -\emph on -typenum -\emph default - which should be one of the enumerated types. - The -\emph on -requirements -\emph default - for the returned array can be any combination of standard array flags. - Each of these arguments is explained in more detail below. - You receive a new reference to the array on success. - On failure, -\family typewriter -NULL -\family default - is returned and an exception is set. - -\end_layout - -\begin_deeper -\begin_layout Description -obj The object can be any Python object convertable to an ndarray. - If the object is already (a subclass of) the ndarray that satisfies the - requirements then a new reference is returned. - Otherwise, a new array is constructed. - The contents of -\emph on -obj -\emph default - are copied to the new array unless the array interface is used so that - data does not have to be copied. - Objects that can be converted to an array include: 1) any nested sequence - object, 2) any object exposing the array interface, 3) any object with - an -\series bold -__array__ -\series default - method (which should return an ndarray), and 4) any scalar object (becomes - a zero-dimensional array). - Sub-classes of the ndarray that otherwise fit the requirements will be - passed through. - If you want to ensure a base-class ndarray, then use -\family typewriter -NPY_ENSUREARRAY -\family default - in the requirements flag. - A copy is made only if necessary. - If you want to guarantee a copy, then pass in -\family typewriter -NPY_ENSURECOPY -\family default - to the requirements flag. - -\end_layout - -\begin_layout Description -typenum One of the enumerated types or -\family typewriter -NPY_NOTYPE -\family default - if the data-type should be determined from the object itself. - The C-based names can be used: -\end_layout - -\begin_deeper -\begin_layout Quote - -\family typewriter -NPY_BOOL -\family default -, -\family typewriter -NPY_BYTE -\family default -, -\family typewriter -NPY_UBYTE -\family default -, -\family typewriter -NPY_SHORT -\family default -, -\family typewriter -NPY_USHORT -\family default -, -\family typewriter -NPY_INT -\family default -, -\family typewriter -NPY_UINT -\family default -, -\family typewriter -NPY_LONG -\family default -, -\family typewriter -NPY_ULONG -\family default -, -\family typewriter -NPY_LONGLONG -\family default -, -\family typewriter -NPY_ULONGLONG -\family default -, -\family typewriter -NPY_DOUBLE -\family default -, -\family typewriter -NPY_LONGDOUBLE -\family default -, -\family typewriter -NPY_CFLOAT -\family default -, -\family typewriter -NPY_CDOUBLE -\family default -, -\family typewriter -NPY_CLONGDOUBLE -\family default -, -\family typewriter -NPY_OBJECT -\family default -. - -\end_layout - -\end_deeper -\begin_layout Description -\InsetSpace ~ - Alternatively, the bit-width names can be used as supported on the platform. - For example: -\end_layout - -\begin_deeper -\begin_layout Quote - -\family typewriter -NPY_INT8 -\family default -, -\family typewriter -NPY_INT16 -\family default -, -\family typewriter -NPY_INT32 -\family default -, -\family typewriter -NPY_INT64 -\family default -, -\family typewriter -NPY_UINT8 -\family default -, -\family typewriter -NPY_UINT16 -\family default -, -\family typewriter -NPY_UINT32 -\family default -, -\family typewriter -NPY_UINT64 -\family default -, -\family typewriter -NPY_FLOAT32 -\family default -, -\family typewriter -NPY_FLOAT64 -\family default -, -\family typewriter -NPY_COMPLEX64 -\family default -, -\family typewriter -NPY_COMPLEX128 -\family default -. - -\end_layout - -\end_deeper -\begin_layout Description -\InsetSpace ~ - The object will be converted to the desired type only if it can be done - without losing precision. - Otherwise -\family typewriter -NULL -\family default - will be returned and an error raised. - Use -\family typewriter -NPY_FORCECAST -\family default - in the requirements flag to override this behavior. - -\end_layout - -\begin_layout Description -requirements The memory model for an ndarray admits arbitrary strides in - each dimension to advance to the next element of the array. - Often, however, you need to interface with code that expects a C-contiguous - or a Fortran-contiguous memory layout. - In addition, an ndarray can be misaligned (the address of an element is - not at an integral multiple of the size of the element) which can cause - your program to crash (or at least work more slowly) if you try and dereference - a pointer into the array data. - Both of these problems can be solved by converting the Python object into - an array that is more -\begin_inset Quotes eld -\end_inset - -well-behaved -\begin_inset Quotes erd -\end_inset - - for your specific usage. - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The requirements flag allows specification of what kind of array is acceptable. - If the object passed in does not satisfy this requirements then a copy - is made so that thre returned object will satisfy the requirements. - these ndarray can use a very generic pointer to memory. - This flag allows specification of the desired properties of the returned - array object. - All of the flags are explained in the detailed API chapter. - The flags most commonly needed are NPY_IN_ARRAY, NPY_OUT_ARRAY, and NPY_INOUT_A -RRAY: -\end_layout - -\begin_deeper -\begin_layout Description -NPY_IN_ARRAY Equivalent to NPY_CONTIGUOUS | NPY_ALIGNED. - This combination of flags is useful for arrays that must be in C-contiguous - order and aligned. - These kinds of arrays are usually input arrays for some algorithm. -\end_layout - -\begin_layout Description -NPY_OUT_ARRAY Equivalent to NPY_CONTIGUOUS | NPY_ALIGNED | NPY_WRITEABLE. - This combination of flags is useful to specify an array that is in C-contiguous - order, is aligned, and can be written to as well. - Such an array is usually returned as output (although normally such output - arrays are created from scratch). - -\end_layout - -\begin_layout Description -NPY_INOUT_ARRAY Equivalent to NPY_CONTIGUOUS | NPY_ALIGNED | NPY_WRITEABLE - | NPY_UPDATEIFCOPY. - This combination of flags is useful to specify an array that will be used - for both input and output. - If a copy is needed, then when the temporary is deleted (by your use of - Py_DECREF at the end of the interface routine), the temporary array will - be copied back into the original array passed in. - Use of the UPDATEIFCOPY flag requires that the input object is already - an array (because other objects cannot be automatically updated in this - fashion). - If an error occurs use -\series bold -PyArray_DECREF_ERR -\series default -(obj) on an array with the NPY_UPDATEIFCOPY flag set. - This will delete the array without causing the contents to be copied back - into the original array. - -\end_layout - -\end_deeper -\begin_layout Description -\InsetSpace ~ - Other useful flags that can be OR'd as additional requirements are: -\end_layout - -\begin_deeper -\begin_layout Description -NPY_FORCECAST Cast to the desired type, even if it can't be done without - losing information. -\end_layout - -\begin_layout Description -NPY_ENSURECOPY Make sure the resulting array is a copy of the original. -\end_layout - -\begin_layout Description -NPY_ENSUREARRAY Make sure the resulting object is an actual ndarray and - not a sub-class. -\end_layout - -\end_deeper -\end_deeper -\begin_layout Note -Whether or not an array is byte-swapped is determined by the data-type of - the array. - Native byte-order arrays are always requested by PyArray_FROM_OTF and so - there is no need for a NPY_NOTSWAPPED flag in the requirements argument. - There is also no way to get a byte-swapped array from this routine. -\end_layout - -\begin_layout Subsection -Creating a brand-new ndarray -\end_layout - -\begin_layout Standard -Quite often new arrays must be created from within extension-module code. - Perhaps an output array is needed and you don't want the caller to have - to supply it. - Perhaps only a temporary array is needed to hold an intermediate calculation. - Whatever the need there are simple ways to get an ndarray object of whatever - data-type is needed. - The most general function for doing this is PyArray_NewFromDescr. - All array creation functions go through this heavily re-used code. - Because of its flexibility, it can be somewhat confusing to use. - As a result, simpler forms exist that are easier to use. - -\end_layout - -\begin_layout Description -PyArray_SimpleNew ( -\family typewriter -PyObject* -\family default -)( -\family typewriter -int -\family default - nd, -\family typewriter -npy_intp* -\family default - dims, -\family typewriter -int -\family default - typenum) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This function allocates new memory and places it in an ndarray with -\family typewriter -nd -\family default - dimensions whose shape is determined by the array of at least -\family typewriter -nd -\family default - items pointed to by -\family typewriter -dims -\family default -. - The memory for the array is uninitialized (unless typenum is -\series bold -PyArray_OBJECT -\series default - in which case each element in the array is set to NULL). - The -\family typewriter -typenum -\family default - argument allows specification of any of the builtin data-types such as - -\series bold -PyArray_FLOAT -\series default - or -\series bold -PyArray_LONG -\series default -. - The memory for the array can be set to zero if desired using -\series bold -PyArray_FILLWBYTE -\series default -(return_object, 0). - -\end_layout - -\begin_layout Description -PyArray_SimpleNewFromData ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -int -\family default - nd, -\family typewriter -npy_intp* -\family default - dims, -\family typewriter -int -\family default - typenum, -\family typewriter -void* -\family default - data) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Sometimes, you want to wrap memory allocated elsewhere into an ndarray - object for downstream use. - This routine makes it straightforward to do that. - The first three arguments are the same as in -\series bold -PyArray_SimpleNew -\series default -, the final argument is a pointer to a block of contiguous memory that the - ndarray should use as it's data-buffer which will be interpreted in C-style - contiguous fashion. - A new reference to an ndarray is returned, but the ndarray will not own - its data. - When this ndarray is deallocated, the pointer will not be freed. - -\end_layout - -\begin_layout Description -\InsetSpace ~ - You should ensure that the provided memory is not freed while the returned - array is in existence. - The easiest way to handle this is if data comes from another reference-counted - Python object. - The reference count on this object should be increased after the pointer - is passed in, and the base member of the returned ndarray should point - to the Python object that owns the data. - Then, when the ndarray is deallocated, the base-member will be DECREF'd - appropriately. - If you want the memory to be freed as soon as the ndarray is deallocated - then simply set the OWNDATA flag on the returned ndarray. - -\end_layout - -\begin_layout Subsection -Getting at ndarray memory and accessing elements of the ndarray -\end_layout - -\begin_layout Standard -If obj is an ndarray (PyArrayObject *), then the data-area of the ndarray - is pointed to by the void* pointer -\series bold -PyArray_DATA -\series default -(obj) or the char* pointer -\series bold -PyArray_BYTES -\series default -(obj). - Remember that (in general) this data-area may not be aligned according - to the data-type, it may represent byte-swapped data, and/or it may not - be writeable. - If the data area is aligned and in native byte-order, then how to get at - a specific element of the array is determined only by the array of npy_intp - variables, -\series bold -PyArray_STRIDES -\series default -(obj). - In particular, this c-array of integers shows how many -\series bold -bytes -\series default - must be added to the current element pointer to get to the next element - in each dimension. - For arrays less than 4-dimensions there are -\series bold -PyArray_GETPTR<k> -\series default -(obj, ...) macros where <k> is the integer 1, 2, 3, or 4 that make using the - array strides easier. - The arguments .... - represent <k> non-negative integer indices into the array. - For example, suppose -\family typewriter -E -\family default - is a 3-dimensional ndarray. - A (void*) pointer to the element -\family typewriter -E[i,j,k] -\family default - is obtained as PyArray_GETPTR3(E, i, j, k). - -\end_layout - -\begin_layout Standard -As explained previously, C-style contiguous arrays and Fortran-style contiguous - arrays have particular striding patterns. - Two array flags (NPY_C_CONTIGUOUS and NPY_F_CONTIGUOUS) indicate whether - or not the striding pattern of a particular array matches the C-style contiguou -s or Fortran-style contiguous or neither. - Whether or not the striding pattern matches a standard C or Fortran one - can be tested Using -\family typewriter -PyArray_ISCONTIGUOUS -\family default -(obj) and -\family typewriter -PyArray_ISFORTRAN -\family default -(obj) respectively. - Most third-party libraries expect contiguous arrays. - But, often it is not difficult to support general-purpose striding. - I encourage you to use the striding information in your own code whenever - possible, and reserve single-segment requirements for wrapping third-party - code. - Using the striding information provided with the ndarray rather than requiring - a contiguous striding reduces copying that otherwise must be made. - -\end_layout - -\begin_layout Section -Example -\end_layout - -\begin_layout Standard -The following example shows how you might write a wrapper that accepts two - input arguments (that will be converted to an array) and an output argument - (that must be an array). - The function returns None and updates the output array. - -\begin_inset LatexCommand index -name "extension module|)" - -\end_inset - - -\end_layout - -\begin_layout LyX-Code -static PyObject * -\end_layout - -\begin_layout LyX-Code -example_wrapper(PyObject *dummy, PyObject *args) -\end_layout - -\begin_layout LyX-Code -{ -\end_layout - -\begin_layout LyX-Code - PyObject *arg1=NULL, *arg2=NULL, *out=NULL; -\end_layout - -\begin_layout LyX-Code - PyObject *arr1=NULL, *arr2=NULL, *oarr=NULL; -\end_layout - -\begin_layout LyX-Code - -\end_layout - -\begin_layout LyX-Code - if (!PyArg_ParseTuple(args, -\begin_inset Quotes eld -\end_inset - -OOO& -\begin_inset Quotes erd -\end_inset - -, &arg1, *arg2, -\end_layout - -\begin_layout LyX-Code - &PyArrayType, *out)) return NULL; -\end_layout - -\begin_layout LyX-Code - -\end_layout - -\begin_layout LyX-Code - arr1 = PyArray_FROM_OTF(arg1, NPY_DOUBLE, NPY_IN_ARRAY); -\end_layout - -\begin_layout LyX-Code - if (arr1 == NULL) return NULL; -\end_layout - -\begin_layout LyX-Code - arr2 = PyArray_FROM_OTF(arg2, NPY_DOUBLE, NPY_IN_ARRAY); -\end_layout - -\begin_layout LyX-Code - if (arr2 == NULL) goto fail; -\end_layout - -\begin_layout LyX-Code - oarr = PyArray_FROM_OTF(out, NPY_DOUBLE, NPY_INOUT_ARRAY); -\end_layout - -\begin_layout LyX-Code - if (oarr == NULL) goto fail; -\end_layout - -\begin_layout LyX-Code - -\end_layout - -\begin_layout LyX-Code - /* code that makes use of arguments */ -\end_layout - -\begin_layout LyX-Code - /* You will probably need at least -\end_layout - -\begin_layout LyX-Code - nd = PyArray_NDIM(<..>) -- number of dimensions -\end_layout - -\begin_layout LyX-Code - dims = PyArray_DIMS(<..>) -- npy_intp array of length nd -\end_layout - -\begin_layout LyX-Code - showing length in each dim. -\end_layout - -\begin_layout LyX-Code - dptr = (double *)PyArray_DATA(<..>) -- pointer to data. -\end_layout - -\begin_layout LyX-Code - -\end_layout - -\begin_layout LyX-Code - If an error occurs goto fail. -\end_layout - -\begin_layout LyX-Code - */ -\end_layout - -\begin_layout LyX-Code - -\end_layout - -\begin_layout LyX-Code - Py_DECREF(arr1); -\end_layout - -\begin_layout LyX-Code - Py_DECREF(arr2); -\end_layout - -\begin_layout LyX-Code - Py_DECREF(oarr); -\end_layout - -\begin_layout LyX-Code - Py_INCREF(Py_None); -\end_layout - -\begin_layout LyX-Code - return Py_None; -\end_layout - -\begin_layout LyX-Code - -\end_layout - -\begin_layout LyX-Code - fail: -\end_layout - -\begin_layout LyX-Code - Py_XDECREF(arr1); -\end_layout - -\begin_layout LyX-Code - Py_XDECREF(arr2); -\end_layout - -\begin_layout LyX-Code - PyArray_XDECREF_ERR(oarr); -\end_layout - -\begin_layout LyX-Code - return NULL; -\end_layout - -\begin_layout LyX-Code -} -\end_layout - -\begin_layout Chapter -Beyond the Basics -\end_layout - -\begin_layout Quotation -The voyage of discovery is not in seeking new landscapes but in having new - eyes. -\end_layout - -\begin_layout Right Address ---- -\emph on -Marcel Proust -\end_layout - -\begin_layout Quotation -Discovery is seeing what everyone else has seen and thinking what no one - else has thought. -\end_layout - -\begin_layout Right Address ---- -\emph on -Albert Szent-Gyorgi -\end_layout - -\begin_layout Section -Iterating over elements in the array -\end_layout - -\begin_layout Subsection -Basic Iteration -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand label -name "sec:array_iterator" - -\end_inset - - -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "array iterator|(" - -\end_inset - -One common algorithmic requirement is to be able to walk over all elements - in a multidimensional array. - The array iterator object makes this easy to do in a generic way that works - for arrays of any dimension. - Naturally, if you know the number of dimensions you will be using, then - you can always write nested for loops to accomplish the iteration. - If, however, you want to write code that works with any number of dimensions, - then you can make use of the array iterator. - An array iterator object is returned when accessing the .flat attribute - of an array. - -\end_layout - -\begin_layout Standard -Basic usage is to call -\series bold -PyArray_IterNew -\series default - ( -\family typewriter -array -\family default -) where array is an ndarray object (or one of its sub-classes). - The returned object is an array-iterator object (the same object returned - by the .flat attribute of the ndarray). - This object is usually cast to PyArrayIterObject* so that its members can - be accessed. - The only members that are needed are -\family typewriter -iter->size -\family default - which contains the total size of the array, -\family typewriter -iter->index -\family default -, which contains the current 1-d index into the array, and -\family typewriter -iter->dataptr -\family default - which is a pointer to the data for the current element of the array. - Sometimes it is also useful to access -\family typewriter -iter->ao -\family default - which is a pointer to the underlying ndarray object. - -\end_layout - -\begin_layout Standard -After processing data at the current element of the array, the next element - of the array can be obtained using the macro -\series bold -PyArray_ITER_NEXT -\series default -( -\family typewriter -iter -\family default -). - The iteration always proceeds in a C-style contiguous fashion (last index - varying the fastest). - The -\series bold -PyArray_ITER_GOTO -\series default -( -\family typewriter -iter -\family default -, -\family typewriter -destination -\family default -) can be used to jump to a particular point in the array, where -\family typewriter -destination -\family default - is an array of npy_intp data-type with space to handle at least the number - of dimensions in the underlying array. - Occasionally it is useful to use -\series bold -PyArray_ITER_GOTO1D -\series default -( -\family typewriter -iter -\family default -, -\family typewriter -index -\family default -) which will jump to the 1-d index given by the value of -\family typewriter -index -\family default -. - The most common usage, however, is given in the following example. - -\end_layout - -\begin_layout LyX-Code -PyObject *obj; /* assumed to be some ndarray object */ -\end_layout - -\begin_layout LyX-Code -PyArrayIterObject *iter; -\end_layout - -\begin_layout LyX-Code -... -\end_layout - -\begin_layout LyX-Code -iter = (PyArrayIterObject *)PyArray_IterNew(obj); -\end_layout - -\begin_layout LyX-Code -if (iter == NULL) goto fail; /* Assume fail has clean-up code */ -\end_layout - -\begin_layout LyX-Code -while (iter->index < iter->size) { -\end_layout - -\begin_layout LyX-Code - /* do something with the data at it->dataptr */ -\end_layout - -\begin_layout LyX-Code - PyArray_ITER_NEXT(it); -\end_layout - -\begin_layout LyX-Code -} -\end_layout - -\begin_layout LyX-Code -... -\end_layout - -\begin_layout Standard -You can also use -\series bold -PyArrayIter_Check -\series default -( -\family typewriter -obj -\family default -) to ensure you have an iterator object and -\series bold -PyArray_ITER_RESET -\series default -( -\family typewriter -iter -\family default -) to reset an iterator object back to the beginning of the array. - -\end_layout - -\begin_layout Standard -It should be emphasized at this point that you may not need the array iterator - if your array is already contiguous (using an array iterator will work - but will be slower than the fastest code you could write). - The major purpose of array iterators is to encapsulate iteration over N-dimensi -onal arrays with arbitrary strides. - They are used in many, many places in the NumPy source code itself. - If you already know your array is contiguous (Fortran or C), then simply - adding the element-size to a running pointer variable will step you through - the array very efficiently. - In other words, code like this will probably be faster for you in the contiguou -s case (assuming doubles). - -\end_layout - -\begin_layout LyX-Code -npy_intp size; -\end_layout - -\begin_layout LyX-Code -double *dptr; /* could make this any variable type */ -\end_layout - -\begin_layout LyX-Code -size = PyArray_SIZE(obj); -\end_layout - -\begin_layout LyX-Code -dptr = PyArray_DATA(obj); -\end_layout - -\begin_layout LyX-Code -while(size--) { -\end_layout - -\begin_layout LyX-Code - /* do something with the data at dptr */ -\end_layout - -\begin_layout LyX-Code - dptr++; -\end_layout - -\begin_layout LyX-Code -} -\end_layout - -\begin_layout Subsection -Iterating over all but one axis -\end_layout - -\begin_layout Standard -A common algorithm is to loop over all elements of an array and perform - some function with each element by issuing a function call. - As function calls can be time consuming, one way to speed up this kind - of algorithm is to write the function so it takes a vector of data and - then write the iteration so the function call is performed for an entire - dimension of data at a time. - This increases the amount of work done per function call, thereby reducing - the function-call over-head to a small(er) fraction of the total time. - Even if the interior of the loop is performed without a function call it - can be advantageous to perform the inner loop over the dimension with the - highest number of elements to take advantage of speed enhancements available - on micro-processors that use pipelining to enhance fundmental operations. - -\end_layout - -\begin_layout Standard -The -\series bold -PyArray_IterAllButAxis -\series default -( -\family typewriter -array -\family default -, -\family typewriter -&dim -\family default -) constructs an iterator object that is modified so that it will not iterate - over the dimension indicated by dim. - The only restriction on this iterator object, is that the -\series bold -PyArray_Iter_GOTO1D -\series default -( -\family typewriter -it -\family default -, -\family typewriter -ind -\family default -) macro cannot be used (thus flat indexing won't work either if you pass - this object back to Python --- so you shouldn't do this). - Note that the returned object from this routine is still usually cast to - PyArrayIterObject *. - All that's been done is to modify the strides and dimensions of the returned - iterator to simulate iterating over array[...,0,...] where 0 is placed on the - -\begin_inset Formula $\textrm{dim}^{\textrm{th}}$ -\end_inset - - dimension. - If dim is negative, then the dimension with the largest axis is found and - used. - -\end_layout - -\begin_layout Subsection -Iterating over multiple arrays -\end_layout - -\begin_layout Standard -Very often, it is desireable to iterate over several arrays at the same - time. - The universal functions are an example of this kind of behavior. - If all you want to do is iterate over arrays with the same shape, then - simply creating several iterator objects is the standard procedure. - For example, the following code iterates over two arrays assumed to be - the same shape and size (actually obj1 just has to have at least as many - total elements as does obj2): -\end_layout - -\begin_layout LyX-Code -/* It is already assumed that obj1 and obj2 -\end_layout - -\begin_layout LyX-Code - are ndarrays of the same shape and size. -\end_layout - -\begin_layout LyX-Code -*/ -\end_layout - -\begin_layout LyX-Code -iter1 = (PyArrayIterObject *)PyArray_IterNew(obj1); -\end_layout - -\begin_layout LyX-Code -if (iter1 == NULL) goto fail; -\end_layout - -\begin_layout LyX-Code -iter2 = (PyArrayIterObject *)PyArray_IterNew(obj2); -\end_layout - -\begin_layout LyX-Code -if (iter2 == NULL) goto fail; /* assume iter1 is DECREF'd at fail */ -\end_layout - -\begin_layout LyX-Code -while (iter2->index < iter2->size) { -\end_layout - -\begin_layout LyX-Code - /* process with iter1->dataptr and iter2->dataptr */ -\end_layout - -\begin_layout LyX-Code - PyArray_ITER_NEXT(iter1); -\end_layout - -\begin_layout LyX-Code - PyArray_ITER_NEXT(iter2); -\end_layout - -\begin_layout LyX-Code -} -\end_layout - -\begin_layout Subsection -Broadcasting over multiple arrays -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "broadcasting" - -\end_inset - -When multiple arrays are involved in an operation, you may want to use the - same broadcasting rules that the math operations ( -\emph on -i.e. - -\emph default - the ufuncs) use. - This can be done easily using the PyArrayMultiIterObject. - This is the object returned from the Python command numpy.broadcast and - it is almost as easy to use from C. - The function -\series bold -PyArray_MultiIterNew -\series default - ( -\family typewriter -n -\family default -, -\family typewriter -... -\family default -) is used (with -\family typewriter -n -\family default - input objects in place of -\family typewriter -... -\family default -). - The input objects can be arrays or anything that can be converted into - an array. - A pointer to a PyArrayMultiIterObject is returned. - Broadcasting has already been accomplished which adjusts the iterators - so that all that needs to be done to advance to the next element in each - array is for PyArray_ITER_NEXT to be called for each of the inputs. - This incrementing is automatically performed by -\series bold -PyArray_MultiIter_NEXT -\series default -( -\family typewriter -obj -\family default -) macro (which can handle a multiterator -\family typewriter -obj -\family default - as either a PyArrayMultiObject* or a PyObject*). - The data from input number -\family typewriter -i -\family default - is available using -\series bold -PyArray_MultiIter_DATA -\series default -( -\family typewriter -obj -\family default -, -\family typewriter -i -\family default -) and the total (broadcasted) size as -\series bold -PyArray_MultiIter_SIZE -\series default -( -\family typewriter -obj -\family default -). - An example of using this feature follows. -\end_layout - -\begin_layout LyX-Code -mobj = PyArray_MultiIterNew(2, obj1, obj2); -\end_layout - -\begin_layout LyX-Code -size = PyArray_MultiIter_SIZE(obj); -\end_layout - -\begin_layout LyX-Code -while(size--) { -\end_layout - -\begin_layout LyX-Code - ptr1 = PyArray_MultiIter_DATA(mobj, 0); -\end_layout - -\begin_layout LyX-Code - ptr2 = PyArray_MultiIter_DATA(mobj, 1); -\end_layout - -\begin_layout LyX-Code - /* code using contents of ptr1 and ptr2 */ -\end_layout - -\begin_layout LyX-Code - PyArray_MultiIter_NEXT(mobj); -\end_layout - -\begin_layout LyX-Code -} -\end_layout - -\begin_layout Standard -The function -\series bold -PyArray_RemoveLargest -\series default -( -\family typewriter -multi -\family default -) can be used to take a multi-iterator object and adjust all the iterators - so that iteration does not take place over the largest dimension (it makes - that dimension of size 1). - The code being looped over that makes use of the pointers will very-likely - also need the strides data for each of the iterators. - This information is stored in multi->iters[i]->strides. -\end_layout - -\begin_layout Standard -There are several examples of using the multi-iterator in the NumPy source - code as it makes N-dimensional broadcasting-code very simple to write. - Browse the source for more examples. - -\begin_inset LatexCommand index -name "array iterator|)" - -\end_inset - - -\end_layout - -\begin_layout Section -Creating a new universal function -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand label -name "sec:Creating-a-new" - -\end_inset - - -\begin_inset LatexCommand index -name "ufunc!adding new|(" - -\end_inset - -The umath module is a computer-generated C-module that creates many ufuncs. - It provides a great many examples of how to create a universal function. - Creating your own ufunc that will make use of the ufunc machinery is not - difficult either. - Suppose you have a function that you want to operate element-by-element - over its inputs. - By creating a new ufunc you will obtain a function that handles -\end_layout - -\begin_layout Itemize -broadcasting -\end_layout - -\begin_layout Itemize -N-dimensional looping -\end_layout - -\begin_layout Itemize -automatic type-conversions with minimal memory usage -\end_layout - -\begin_layout Itemize -optional output arrays -\end_layout - -\begin_layout Standard -It is not difficult to create your own ufunc. - All that is required is a 1-d loop for each data-type you want to support. - Each 1-d loop must have a specific signature, and only ufuncs for fixed-size - data-types can be used. - The function call used to create a new ufunc to work on built-in data-types - is given below. - A different mechanism is used to register ufuncs for user-defined data-types. -\end_layout - -\begin_layout Description -PyUFunc_FromFuncAndData ( -\family typewriter -PyObject* -\family default -) ( -\family typewriter -PyUFuncGenericFunction* -\family default - func, -\family typewriter -void** -\family default - data, -\family typewriter -char* -\family default - types, -\family typewriter -int -\family default - ntypes, -\family typewriter -int -\family default - nin, -\family typewriter -int -\family default - nout, -\family typewriter -int -\family default - identity, -\family typewriter -char* -\family default - name, -\family typewriter -char* -\family default - doc, -\family typewriter -int -\family default - check_return) -\end_layout - -\begin_deeper -\begin_layout Description -func A pointer to an array of 1-d functions to use. - This array must be at least ntypes long. - Each entry in the array must be a -\family typewriter -PyUFuncGenericFunction -\family default - function. - This function has the following signature. - An example of a valid 1d loop function is also given. - -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\family typewriter -void -\family default - loop1d ( -\family typewriter -char** -\family default - args, -\family typewriter -npy_intp* -\family default - dimensions, -\family typewriter -npy_intp* -\family default - steps, -\family typewriter -void* -\family default - data) -\end_layout - -\begin_deeper -\begin_layout Description -args An array of pointers to the actual data for the input and output arrays. - The input arguments are given first followed by the output arguments. -\end_layout - -\begin_layout Description -dimensions A pointer to the size of the dimension over which this function - is looping. - -\end_layout - -\begin_layout Description -steps A pointer to the number of bytes to jump to get to the next element - in this dimension for each of the input and output arguments. - -\end_layout - -\begin_layout Description -data Arbitrary data (extra arguments, function names, -\emph on -etc. -\emph default -) that can be stored with the ufunc and will be passed in when it is called. - -\end_layout - -\end_deeper -\begin_layout LyX-Code -static void -\newline -double_add(char *args, npy_intp *dimensions, npy_intp *steps, - void *extra) -\newline -{ -\newline - npy_intp i; -\newline - npy_intp is1=steps[0], is2=steps[1]; -\newline - - npy_intp os=steps[2], n=dimensions[0]; -\newline - char *i1=args[0], *i2=args[1], - *op=args[2]; -\newline - for (i=0; i<n; i++) { -\newline - *((double *)op) = *((double - *)i1) + -\backslash - -\newline - *((double *)i2); -\newline - i1 += is1; i2 += is2; - op += os; -\newline - } -\newline -} -\end_layout - -\begin_layout Description -data An array of data. - There should be ntypes entries (or NULL) --- one for every loop function - defined for this ufunc. - This data will be passed in to the 1-d loop. - One common use of this data variable is to pass in an actual function to - call to compute the result when a generic 1-d loop (e.g. - PyUFunc_d_d) is being used. - -\end_layout - -\begin_layout Description -types An array of type-number signatures (type -\family typewriter -char -\family default -). - This array should be of size (nin+nout)*ntypes and contain the data-types - for the corresponding 1-d loop. - The inputs should be first followed by the outputs. - For example, suppose I have a ufunc that supports 1 integer and 1 double - 1-d loop (length-2 func and data arrays) that takes 2 inputs and returns - 1 output that is always a complex double, then the types array would be -\end_layout - -\begin_layout LyX-Code -char my_sigs[] = -\backslash - -\newline -{NPY_INT, NPY_INT, NPY_CDOUBLE, -\newline -NPY_DOUBLE, NPY_DOUBLE, NPY_CDOUBLE}; -\end_layout - -\begin_layout Description -\InsetSpace ~ - The bit-width names can also be used (e.g. - -\family typewriter -NPY_INT32 -\family default -, -\family typewriter -NPY_COMPLEX128 -\family default -) if desired. - -\end_layout - -\begin_layout Description -ntypes The number of data-types supported. - This is equal to the number of 1-d loops provided. - -\end_layout - -\begin_layout Description -nin The number of input arguments. -\end_layout - -\begin_layout Description -nout The number of output arguments. -\end_layout - -\begin_layout Description -identity Either -\series bold -PyUFunc_One -\series default -, -\series bold -PyUFunc_Zero -\series default -, -\series bold -PyUFunc_None -\series default -. - This specifies what should be returned when an empty array is passed to - the reduce method of the ufunc. - -\end_layout - -\begin_layout Description -name A -\family typewriter -NULL -\family default --terminated string providing the name of this ufunc (should be the Python - name it will be called). - -\end_layout - -\begin_layout Description -doc A documentation string for this ufunc (will be used in generating the - response to <ufunc_name>.__doc__). - Do not include the function signature or the name as this is generated - automatically. - -\end_layout - -\begin_layout Description -check_return Not presently used, but this integer value does get set in - the structure-member of similar name. - -\end_layout - -\end_deeper -\begin_layout Standard -The returned ufunc object is a callable Python object. - It should be placed in a (module) dictionary under the same name as was - used in the name argument to the ufunc-creation routine. - The following example is adapted from the umath module: -\begin_inset LatexCommand index -name "ufunc!adding new|)" - -\end_inset - - -\end_layout - -\begin_layout LyX-Code -static PyUFuncGenericFunction atan2_functions[]= -\backslash - -\newline - {PyUFunc_ff_f, PyUFunc_dd_d, -\newline - PyUFunc_gg_g, PyUFunc_OO_O_method}; -\newline -static - void* atan2_data[]= -\backslash - -\newline - {(void *)atan2f,(void *) atan2, -\newline - (void *)atan2l,(void *)"arctan2"}; -\newline -stati -c char atan2_signatures[]= -\backslash - -\newline - {NPY_FLOAT, NPY_FLOAT, NPY_FLOAT, -\newline - NPY_DOUBLE, NPY_DOUBLE, -\newline - NPY_DOUBLE -, NPY_LONGDOUBLE, -\newline - NPY_LONGDOUBLE, NPY_LONGDOUBLE -\newline - NPY_OBJECT, NPY_OBJECT, - -\newline - NPY_OBJECT}; -\newline -... -\newline -/* in the module initialization code */ -\newline -PyObject *f, *dict, - *module; -\newline -... -\newline -dict = PyModule_GetDict(module); -\newline -... -\newline -f = PyUFunc_FromFuncAndData(atan2_funct -ions, -\newline - atan2_data, atan2_signatures, 4, 2, 1, -\newline - PyUFunc_None, "arctan2", - -\newline - "a safe and correct arctan(x1/x2)", 0); -\newline -PyDict_SetItemString(dict, "arctan2" -, f); -\newline -Py_DECREF(f); -\newline -... -\end_layout - -\begin_layout Section -User-defined data-types -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "dtype!adding new|(" - -\end_inset - -NumPy comes with 21 builtin data-types. - While this covers a large majority of possible use cases, it is conceivable - that a user may have a need for an additional data-type. - There is some support for adding an additional data-type into the NumPy - system. - This additional data-type will behave much like a regular data-type except - ufuncs must have 1-d loops registered to handle it separately. - Also checking for whether or not other data-types can be cast -\begin_inset Quotes eld -\end_inset - -safely -\begin_inset Quotes erd -\end_inset - - to and from this new type or not will always return -\begin_inset Quotes eld -\end_inset - -can cast -\begin_inset Quotes erd -\end_inset - - unless you also register which types your new data-type can be cast to - and from. - Adding data-types is one of the less well-tested areas for NumPy 1.0, so - there may be bugs remaining in the approach. - Only add a new data-type if you can't do what you want to do using the - OBJECT or VOID data-types that are already available. - As an example of what I consider a useful application of the ability to - add data-types is the possibility of adding a data-type of arbitrary precision - floats to NumPy. - -\end_layout - -\begin_layout Subsection -Adding the new data-type -\end_layout - -\begin_layout Standard -To begin to make use of the new data-type, you need to first define a new - Python type to hold the scalars of your new data-type. - It should be acceptable to inherit from one of the array scalars if your - new type has a binary compatible layout. - This will allow your new data type to have the methods and attributes of - array scalars. - New data-types must have a fixed memory size (if you want to define a data-type - that needs a flexible representation, like a variable-precision number, - then use a pointer to the object as the data-type). - The memory layout of the object structure for the new Python type must - be PyObject_HEAD followed by the fixed-size memory needed for the data-type. - For example, a suitable structure for the new Python type is: -\end_layout - -\begin_layout LyX-Code -typedef struct { -\end_layout - -\begin_layout LyX-Code - PyObject_HEAD; -\end_layout - -\begin_layout LyX-Code - some_data_type obval; -\end_layout - -\begin_layout LyX-Code - /* the name can be whatever you want */ -\end_layout - -\begin_layout LyX-Code -} PySomeDataTypeObject; -\end_layout - -\begin_layout Standard -After you have defined a new Python type object, you must then define a - new PyArray_Descr structure whose typeobject member will contain a pointer - to the data-type you've just defined. - In addition, the required functions in the -\begin_inset Quotes eld -\end_inset - -.f -\begin_inset Quotes erd -\end_inset - - member must be defined: nonzero, copyswap, copyswapn, setitem, getitem, - and cast. - The more functions in the -\begin_inset Quotes eld -\end_inset - -.f -\begin_inset Quotes erd -\end_inset - - member you define, however, the more useful the new data-type will be. - It is very important to intialize unused functions to NULL. - This can be achieved using -\series bold -PyArray_InitArrFuncs -\series default -(f). -\end_layout - -\begin_layout Standard -Once a new PyArray_Descr structure is created and filled with the needed - information and useful functions you call -\series bold -PyArray_RegisterDataType -\series default -(new_descr). - The return value from this call is an integer providing you with a unique - type_number that specifies your data-type. - This type number should be stored and made available by your module so - that other modules can use it to recognize your data-type (the other mechanism - for finding a user-defined data-type number is to search based on the name - of the type-object associated with the data-type using -\series bold -PyArray_TypeNumFromName -\series default -). - -\end_layout - -\begin_layout Subsection -Registering a casting function -\end_layout - -\begin_layout Standard -You may want to allow builtin (and other user-defined) data-types to be - cast automatically to your data-type. - In order to make this possible, you must register a casting function with - the data-type you want to be able to cast from. - This requires writing low-level casting functions for each conversion you - want to support and then registering these functions with the data-type - descriptor. - A low-level casting function has the signature. - -\end_layout - -\begin_layout Description -castfunc ( -\family typewriter -void -\family default -) ( -\family typewriter -void* -\family default - from, -\family typewriter -void* -\family default - to, -\family typewriter -npy_intp -\family default - n, -\family typewriter -void* -\family default - fromarr, -\family typewriter -void* -\family default - toarr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Cast -\family typewriter -n -\family default - elements -\family typewriter -from -\family default - one type -\family typewriter -to -\family default - another. - The data to cast from is in a contiguous, correctly-swapped and aligned - chunk of memory pointed to by from. - The buffer to cast to is also contiguous, correctly-swapped and aligned. - The fromarr and toarr arguments should only be used for flexible-element-sized - arrays (string, unicode, void). - -\end_layout - -\begin_layout Standard -An example castfunc is -\end_layout - -\begin_layout LyX-Code -static void -\end_layout - -\begin_layout LyX-Code -double_to_float(double *from, float* to, npy_intp n, -\newline - void* ig1, void* - ig2); -\newline -while (n--) { -\newline - (*to++) = (double) *(from++); -\newline -} -\end_layout - -\begin_layout Standard -This could then be registered to convert doubles to floats using the code -\end_layout - -\begin_layout LyX-Code -doub = PyArray_DescrFromType(NPY_DOUBLE); -\newline -PyArray_RegisterCastFunc(doub, - NPY_FLOAT, -\newline - (PyArray_VectorUnaryFunc *)double_to_float); -\newline -Py_DECREF(doub); -\end_layout - -\begin_layout Subsection -Registering coercion rules -\end_layout - -\begin_layout Standard -By default, all user-defined data-types are not presumed to be safely castable - to any builtin data-types. - In addition builtin data-types are not presumed to be safely castable to - user-defined data-types. - This situation limits the ability of user-defined data-types to participate - in the coercion system used by ufuncs and other times when automatic coercion - takes place in NumPy. - This can be changed by registering data-types as safely castable from a - particlar data-type object. - The function -\series bold -PyArray_RegisterCanCast -\series default - (from_descr, totype_number, scalarkind) should be used to specify that - the data-type object from_descr can be cast to the data-type with type - number totype_number. - If you are not trying to alter scalar coercion rules, then use -\series bold -PyArray_NOSCALAR -\series default - for the scalarkind argument. -\end_layout - -\begin_layout Standard -If you want to allow your new data-type to also be able to share in the - scalar coercion rules, then you need to specify the scalarkind function - in the data-type object's -\begin_inset Quotes eld -\end_inset - -.f -\begin_inset Quotes erd -\end_inset - - member to return the kind of scalar the new data-type should be seen as - (the value of the scalar is available to that function). - Then, you can register data-types that can be cast to separately for each - scalar kind that may be returned from your user-defined data-type. - If you don't register scalar coercion handling, then all of your user-defined - data-types will be seen as -\series bold -PyArray_NOSCALAR -\series default -. - -\end_layout - -\begin_layout Subsection -Registering a ufunc loop -\end_layout - -\begin_layout Standard -You may also want to register low-level ufunc loops for your data-type so - that an ndarray of your data-type can have math applied to it seamlessly. - Registering a new loop with exactly the same arg_types signature, silently - replaces any previously registered loops for that data-type. - -\end_layout - -\begin_layout Standard -Before you can register a 1-d loop for a ufunc, the ufunc must be previously - created. - Then you call -\series bold -PyUFunc_RegisterLoopForType -\series default -(...) with the information needed for the loop. - The return value of this function is -\family typewriter -0 -\family default - if the process was successful and -\family typewriter --1 -\family default - with an error condition set if it was not successful. - -\end_layout - -\begin_layout Description -PyUFunc_RegisterLoopForType ( -\family typewriter -int -\family default -) ( -\family typewriter -PyUFuncObject* -\family default - ufunc, -\family typewriter -int -\family default - usertype, -\family typewriter -PyUFuncGenericFunction -\family default - function, -\family typewriter -int* -\family default - arg_types, -\family typewriter -void* -\family default - data) -\end_layout - -\begin_layout Description -ufunc The ufunc to attach this loop to. -\end_layout - -\begin_layout Description -usertype The user-defined type this loop should be indexed under. - This number must be a user-defined type or an error occurs. - -\end_layout - -\begin_layout Description -function The ufunc inner 1-d loop. - This function must have the signature as explained in Section -\begin_inset LatexCommand ref -reference "sec:Creating-a-new" - -\end_inset - -. -\end_layout - -\begin_layout Description -arg_types (optional) If given, this should contain an array of integers - of at least size ufunc.nargs containing the data-types expected by the loop - function. - The data will be copied into a NumPy-managed structure so the memory for - this argument should be deleted after calling this function. - If this is NULL, then it will be assumed that all data-types are of type - usertype. -\end_layout - -\begin_layout Description -data (optional) Specify any optional data needed by the function which will - be passed when the function is called. - -\begin_inset LatexCommand index -name "dtype!adding new|)" - -\end_inset - - -\end_layout - -\begin_layout Section -Subtyping the ndarray in C -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "ndarray!subtyping|(" - -\end_inset - -One of the lesser-used features that has been lurking in Python since 2.2 - is the ability to sub-class types in C. - This facility is one of the important reasons for basing NumPy off of the - Numeric code-base which was already in C. - A sub-type in C allows much more flexibility with regards to memory management. - Sub-typing in C is not difficult even if you have only a rudimentary understand -ing of how to create new types for Python. - While it is easiest to sub-type from a single parent type, sub-typing from - multiple parent types is also possible. - Multiple inheritence in C is generally less useful than it is in Python - because a restriction on Python sub-types is that they have a binary compatible - memory layout. - Perhaps for this reason, it is somewhat easier to sub-type from a single - parent type. - -\end_layout - -\begin_layout Standard -All C-structures corresponding to Python objects must begin with PyObject_HEAD - (or PyObject_VAR_HEAD). - In the same way, any sub-type must have a C-structure that begins with - exactly the same memory layout as the parent type (or all of the parent - types in the case of multiple-inheritance). - The reason for this is that Python may attempt to access a member of the - sub-type structure as if it had the parent structure ( -\emph on -i.e. - -\emph default - it will cast a given pointer to a pointer to the parent structure and then - dereference one of it's members). - If the memory layouts are not compatible, then this attempt will cause - unpredictable behavior (eventually leading to a memory violation and program - crash). - -\end_layout - -\begin_layout Standard -One of the elements in PyObject_HEAD is a pointer to a type-object structure. - A new Python type is created by creating a new type-object structure and - populating it with functions and pointers to describe the desired behavior - of the type. - Typically, a new C-structure is also created to contain the instance-specific - information needed for each object of the type as well. - For example, &PyArray_Type is a pointer to the type-object table for the - ndarray while a PyArrayObject* variable is a pointer to a particular instance - of an ndarray (one of the members of the ndarray structure is, in turn, - a pointer to the type-object table &PyArray_Type). - Finally -\series bold -PyType_Ready -\series default -(<pointer_to_type_object>) must be called for every new Python type. - -\end_layout - -\begin_layout Subsection -Creating sub-types -\end_layout - -\begin_layout Standard -To create a sub-type, a similar proceedure must be followed except only - behaviors that are different require new entries in the type-object structure. - All other entires can be NULL and will be filled in by -\series bold -PyType_Ready -\series default - with appropriate functions from the parent type(s). - In particular, to create a sub-type in C follow these steps: -\end_layout - -\begin_layout Enumerate -If needed create a new C-structure to handle each instance of your type. - A typical C-structure would be -\end_layout - -\begin_deeper -\begin_layout LyX-Code -typedef _new_struct { -\newline - PyArrayObject base; -\newline - /* new things here */ -\newline -} NewArrayO -bject; -\end_layout - -\begin_layout Standard -Notice that the full PyArrayObject is used as the first entry in order to - ensure that the binary layout of instances of the new type is identical - to the PyArrayObject. - -\end_layout - -\end_deeper -\begin_layout Enumerate -Fill in a new Python type-object structure with pointers to new functions - that will over-ride the default behavior while leaving any function that - should remain the same unfilled (or NULL). - The tp_name element should be different. -\end_layout - -\begin_layout Enumerate -Fill in the tp_base member of the new type-object structure with a pointer - to the (main) parent type object. - For multiple-inheritance, also fill in the tp_bases member with a tuple - containing all of the parent objects in the order they should be used to - define inheritance. - Remember, all parent-types must have the same C-structure for multiple - inheritance to work properly. - -\end_layout - -\begin_layout Enumerate -Call -\series bold -PyType_Ready -\series default -(<pointer_to_new_type>). - If this function returns a negative number, a failure occurred and the - type is not initialized. - Otherwise, the type is ready to be used. - It is generally important to place a reference to the new type into the - module dictionary so it can be accessed from Python. - -\end_layout - -\begin_layout Standard -More information on creating sub-types in C can be learned by reading PEP - 253 (available at http://www.python.org/dev/peps/pep-0253). -\end_layout - -\begin_layout Subsection -Specific features of ndarray sub-typing -\end_layout - -\begin_layout Standard -Some special methods and attributes are used by arrays in order to facilitate - the interoperation of sub-types with the base ndarray type. - -\end_layout - -\begin_layout Subsubsection -The __array_finalize__ method -\end_layout - -\begin_layout Standard -Several array-creation functions of the ndarray allow specification of a - particular sub-type to be created. - This allows sub-types to be handled seamlessly in many routines. - When a sub-type is created in such a fashion, however, neither the __new__ - method nor the __init__ method gets called. - Instead, the sub-type is allocated and the appropriate instance-structure - members are filled in. - Finally, the -\series bold -__array_finalize__ -\series default - attribute is looked-up in the object dictionary. - If it is present and not None, then it can be either a CObject containing - a pointer to a -\series bold -PyArray_FinalizeFunc -\series default - or it can be a method taking a single argument (which could be None). - -\end_layout - -\begin_layout Standard -If the -\series bold -__array_finalize__ -\series default - attribute is a CObject, then the pointer must be a pointer to a function - with the signature: -\end_layout - -\begin_layout Description -\InsetSpace ~ - (int) (PyArrayObject *, PyObject *) -\end_layout - -\begin_layout Standard -The first argument is the newly created sub-type. - The second argument (if not NULL) is the -\begin_inset Quotes eld -\end_inset - -parent -\begin_inset Quotes erd -\end_inset - - array (if the array was created using slicing or some other operation where - a clearly-distinguishable parent is present). - This routine can do anything it wants to. - It should return a -1 on error and 0 otherwise. - -\end_layout - -\begin_layout Standard -If the -\series bold -__array_finalize__ -\series default - attribute is not None nor a CObject, then it must be a Python method that - takes the parent array as an argument (which could be None if there is - no parent), and returns nothing. - Errors in this method will be caught and handled. - -\end_layout - -\begin_layout Subsubsection -The __array_priority__ attribute -\end_layout - -\begin_layout Standard -This attribute allows simple but flexible determination of which sub-type - should be considered -\begin_inset Quotes eld -\end_inset - -primary -\begin_inset Quotes erd -\end_inset - - when an operation involving two or more sub-types arises. - In operations where different sub-types are being used, the sub-type with - the largest -\series bold -__array_priority__ -\series default - attribute will determine the sub-type of the output(s). - If two sub-types have the same -\series bold -__array_prioirty__ -\series default - then the sub-type of the first argument determines the output. - The default -\series bold -__array_priority__ -\series default - attribute returns a value of 0.0 for the base ndarray type and 1.0 for a - sub-type. - This attribute can also be defined by objects that are not sub-types of - the ndarray and can be used to determine which -\series bold -__array_wrap__ -\series default - method should be called for the return output. - -\end_layout - -\begin_layout Subsubsection -The __array_wrap__ method -\end_layout - -\begin_layout Standard -Any class or type can define this method which should take an ndarray argument - and return an instance of the type. - It can be seen as the opposite of the -\series bold -__array__ -\series default - method. - This method is used by the ufuncs (and other NumPy functions) to allow - other objects to pass through. - For Python >2.4, it can also be used to write a decorator that converts - a function that works only with ndarrays to one that works with any type - with -\series bold -__array__ -\series default - and -\series bold -__array_wrap__ -\series default - methods. - -\begin_inset LatexCommand index -name "ndarray!subtyping|)" - -\end_inset - - -\end_layout - -\begin_layout Chapter -Using Python as glue -\end_layout - -\begin_layout Quotation -There is no conversation more boring than the one where everybody agrees. -\end_layout - -\begin_layout Right Address ---- -\emph on -Michel de Montaigne -\end_layout - -\begin_layout Quotation -Duct tape is like the force. - It has a light side, and a dark side, and it holds the universe together. -\end_layout - -\begin_layout Right Address ---- -\emph on -Carl Zwanzig -\end_layout - -\begin_layout Standard -Many people like to say that Python is a fantastic glue language. - Hopefully, this Chapter will convince you that this is true. - The first adopters of Python for science were typically people who used - it to glue together large applicaton codes running on super-computers. - Not only was it much nicer to code in Python than in a shell script or - Perl, in addition, the ability to easily extend Python made it relatively - easy to create new classes and types specifically adapted to the problems - being solved. - From the interactions of these early contributors, Numeric emerged as an - array-like object that could be used to pass data between these applications. -\end_layout - -\begin_layout Standard -As Numeric has matured and developed into NumPy, people have been able to - write more code directly in NumPy. - Often this code is fast-enough for production use, but there are still - times that there is a need to access compiled code. - Either to get that last bit of efficiency out of the algorithm or to make - it easier to access widely-available codes written in C/C++ or Fortran. - -\end_layout - -\begin_layout Standard -This chapter will review many of the tools that are available for the purpose - of accessing code written in other compiled languages. - There are many resources available for learning to call other compiled - libraries from Python and the purpose of this Chapter is not to make you - an expert. - The main goal is to make you aware of some of the possibilities so that - you will know what to -\begin_inset Quotes eld -\end_inset - -Google -\begin_inset Quotes erd -\end_inset - - in order to learn more. - -\end_layout - -\begin_layout Standard -The http://www.scipy.org website also contains a great deal of useful information - about many of these tools. - For example, there is a nice description of using several of the tools - explained in this chapter at http://www.scipy.org/PerformancePython. - This link provides several ways to solve the same problem showing how to - use and connect with compiled code to get the best performance. - In the process you can get a taste for several of the approaches that will - be discussed in this chapter. - -\end_layout - -\begin_layout Section -Calling other compiled libraries from Python -\end_layout - -\begin_layout Standard -While Python is a great language and a pleasure to code in, its dynamic - nature results in overhead that can cause some code ( -\emph on -i.e. - -\emph default - raw computations inside of for loops) to be up 10-100 times slower than - equivalent code written in a static compiled language. - In addition, it can cause memory usage to be larger than necessary as temporary - arrays are created and destroyed during computation. - For many types of computing needs the extra slow-down and memory consumption - can often not be spared (at least for time- or memory-critical portions - of your code). - Therefore one of the most common needs is to call out from Python code - to a fast, machine-code routine (e.g. - compiled using C/C++ or Fortran). - The fact that this is relatively easy to do is a big reason why Python - is such an excellent high-level language for scientific and engineering - programming. - -\end_layout - -\begin_layout Standard -Their are two basic approaches to calling compiled code: writing an extension - module that is then imported to Python using the import command, or calling - a shared-library subroutine directly from Python using the ctypes module - (included in the standard distribution with Python 2.5). - The first method is the most common (but with the inclusion of ctypes into - Python 2.5 this status may change). -\end_layout - -\begin_layout Warning -Calling C-code from Python can result in Python crashes if you are not careful. - None of the approaches in this chapter are immune. - You have to know something about the way data is handled by both NumPy - and by the third-party library being used. - -\end_layout - -\begin_layout Section -Hand-generated wrappers -\end_layout - -\begin_layout Standard -Extension modules were discussed in Chapter -\begin_inset LatexCommand ref -reference "sec:Writing-an-extension" - -\end_inset - -. - The most basic way to interface with compiled code is to write an extension - module and construct a module method that calls the compiled code. - For improved readability, your method should take advantage of the PyArg_ParseT -uple call to convert between Python objects and C data-types. - For standard C data-types there is probably already a built-in converter. - For others you may need to write your own converter and use the -\begin_inset Quotes eld -\end_inset - -O& -\begin_inset Quotes erd -\end_inset - - format string which allows you to specify a function that will be used - to perform the conversion from the Python object to whatever C-structures - are needed. - -\end_layout - -\begin_layout Standard -Once the conversions to the appropriate C-structures and C data-types have - been performed, the next step in the wrapper is to call the underlying - function. - This is straightforward if the underlying function is in C or C++. - However, in order to call Fortran code you must be familiar with how Fortran - subroutines are called from C/C++ using your compiler and platform. - This can vary somewhat platforms and compilers (which is another reason - f2py makes life much simpler for interfacing Fortran code) but generally - involves underscore mangling of the name and the fact that all variables - are passed by reference (i.e. - all arguments are pointers). - -\end_layout - -\begin_layout Standard -The advantage of the hand-generated wrapper is that you have complete control - over how the C-library gets used and called which can lead to a lean and - tight interface with minimal over-head. - The disadvantage is that you have to write, debug, and maintain C-code, - although most of it can be adapted using the time-honored technique of - -\begin_inset Quotes eld -\end_inset - -cutting-pasting-and-modifying -\begin_inset Quotes erd -\end_inset - - from other extension modules. - Because, the procedure of calling out to additional C-code is fairly regimented -, code-generation procedures have been developed to make this process easier. - One of these code-generation techniques is distributed with NumPy and allows - easy integration with Fortran and (simple) C code. - This package, f2py, will be covered briefly in the next session. - -\end_layout - -\begin_layout Section -f2py -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "f2py|(" - -\end_inset - -F2py allows you to automatically construct an extension module that interfaces - to routines in Fortran 77/90/95 code. - It has the ability to parse Fortran 77/90/95 code and automatically generate - Python signatures for the subroutines it encounters, or you can guide how - the subroutine interfaces with Python by constructing an interface-defintion-fi -le (or modifying the f2py-produced one). - -\end_layout - -\begin_layout Subsection -Creating source for a basic extension module -\end_layout - -\begin_layout Standard -Probably the easiest way to introduce f2py is to offer a simple example. - Here is one of the subroutines contained in a file named add.f -\end_layout - -\begin_layout LyX-Code -C -\newline - SUBROUTINE ZADD(A,B,C,N) -\newline -C -\newline - DOUBLE COMPLEX A(*) -\newline - DOUBLE COMPLEX - B(*) -\newline - DOUBLE COMPLEX C(*) -\newline - INTEGER N -\newline - DO 20 J = 1, N -\newline - - C(J) = A(J)+B(J) -\newline - 20 CONTINUE -\newline - END -\end_layout - -\begin_layout Standard -This routine simply adds the elements in two contiguous arrays and places - the result in a third. - The memory for all three arrays must be provided by the calling routine. - A very basic interface to this routine can be automatically generated by - f2py: -\end_layout - -\begin_layout LyX-Code -f2py -m add add.f -\end_layout - -\begin_layout Standard -You should be able to run this command assuming your search-path is set-up - properly. - This command will produce an extension module named addmodule.c in the current - directory. - This extension module can now be compiled and used from Python just like - any other extension module. - -\end_layout - -\begin_layout Subsection -Creating a compiled extension module -\end_layout - -\begin_layout Standard -You can also get f2py to compile add.f and also compile its produced extension - module leaving only a shared-library extension file that can be imported - from Python: -\end_layout - -\begin_layout LyX-Code -f2py -c -m add add.f -\end_layout - -\begin_layout Standard -This command leaves a file named add.<ext> in the current directory (where - <ext> is the appropriate extension for a python extension module on your - platform --- so, pyd, -\emph on -etc. -\emph default -). - This module may then be imported from Python. - It will contain a method for each subroutin in add (zadd, cadd, dadd, sadd). - The docstring of each method contains information about how the module - method may be called: -\end_layout - -\begin_layout LyX-Code ->>> import add -\newline ->>> print add.zadd.__doc__ -\newline -zadd - Function signature: -\newline - zadd(a,b,c,n) -\newline - -Required arguments: -\newline - a : input rank-1 array('D') with bounds (*) -\newline - b : input - rank-1 array('D') with bounds (*) -\newline - c : input rank-1 array('D') with bounds - (*) -\newline - n : input int -\end_layout - -\begin_layout Subsection -Improving the basic interface -\end_layout - -\begin_layout Standard -The default interface is a very literal translation of the fortran code - into Python. - The Fortran array arguments must now be NumPy arrays and the integer argument - should be an integer. - The interface will attempt to convert all arguments to their required types - (and shapes) and issue an error if unsuccessful. - However, because it knows nothing about the semantics of the arguments - (such that C is an output and n should really match the array sizes), it - is possible to abuse this function in ways that can cause Python to crash. - For example -\end_layout - -\begin_layout LyX-Code ->>> add.zadd([1,2,3],[1,2],[3,4],1000) -\end_layout - -\begin_layout Standard -will cause a program crash on most systems. - Under the covers, the lists are being converted to proper arrays but then - the underlying add loop is told to cycle way beyond the borders of the - allocated memory. - -\end_layout - -\begin_layout Standard -In order to improve the interface, directives should be provided. - This is accomplished by constructing an interface definition file. - It is usually best to start from the interface file that f2py can produce - (where it gets its default behavior from). - To get f2py to generate the interface file use the -h option: -\end_layout - -\begin_layout LyX-Code -f2py -h add.pyf -m add add.f -\end_layout - -\begin_layout Standard -This command leaves the file add.pyf in the current directory. - The section of this file corresponding to zadd is: -\end_layout - -\begin_layout LyX-Code -subroutine zadd(a,b,c,n) ! in :add:add.f -\newline - double complex dimension(*) :: - a -\newline - double complex dimension(*) :: b -\newline - double complex dimension(*) :: - c -\newline - integer :: n -\newline -end subroutine zadd -\end_layout - -\begin_layout Standard -By placing intent directives and checking code, the interface can be cleaned - up quite a bit until the Python module method is both easier to use and - more robust. - -\end_layout - -\begin_layout LyX-Code -subroutine zadd(a,b,c,n) ! in :add:add.f -\newline - double complex dimension(n) :: - a -\newline - double complex dimension(n) :: b -\newline - double complex intent(out),dimension(n -) :: c -\newline - integer intent(hide),depend(a) :: n=len(a) -\newline -end subroutine zadd -\end_layout - -\begin_layout Standard -The intent directive, intent(out) is used to tell f2py that -\family typewriter -c -\family default - is an output variable and should be created by the interface before being - passed to the underlying code. - The intent(hide) directive tells f2py to not allow the user to specify - the variable, -\family typewriter -n -\family default -, but instead to get it from the size of -\family typewriter -a -\family default -. - The depend( -\family typewriter -a -\family default -) directive is necessary to tell f2py that the value of n depends on the - input a (so that it won't try to create the variable n until the variable - a is created). - -\end_layout - -\begin_layout Standard -The new interface has docstring: -\end_layout - -\begin_layout LyX-Code ->>> print add.zadd.__doc__ -\newline -zadd - Function signature: -\newline - c = zadd(a,b) -\newline -Required - arguments: -\newline - a : input rank-1 array('D') with bounds (n) -\newline - b : input rank-1 - array('D') with bounds (n) -\newline -Return objects: -\newline - c : rank-1 array('D') with - bounds (n) -\end_layout - -\begin_layout Standard -Now, the function can be called in a much more robust way: -\end_layout - -\begin_layout LyX-Code ->>> add.zadd([1,2,3],[4,5,6]) -\newline -array([ 5.+0.j, 7.+0.j, 9.+0.j]) -\end_layout - -\begin_layout Standard -Notice the automatic conversion to the correct format that occurred. - -\end_layout - -\begin_layout Subsection -Inserting directives in Fortran source -\end_layout - -\begin_layout Standard -The nice interface can also be generated automatically by placing the variable - directives as special comments in the original fortran code. - Thus, if I modify the source code to contain: -\end_layout - -\begin_layout LyX-Code -C -\newline - SUBROUTINE ZADD(A,B,C,N) -\newline -C -\newline -CF2PY INTENT(OUT) :: C -\newline -CF2PY INTENT(HIDE) - :: N -\newline -CF2PY DOUBLE COMPLEX :: A(N) -\newline -CF2PY DOUBLE COMPLEX :: B(N) -\newline -CF2PY DOUBLE - COMPLEX :: C(N) -\newline - DOUBLE COMPLEX A(*) -\newline - DOUBLE COMPLEX B(*) -\newline - - DOUBLE COMPLEX C(*) -\newline - INTEGER N -\newline - DO 20 J = 1, N -\newline - C(J) = A(J) - + B(J) -\newline - 20 CONTINUE -\newline - END -\end_layout - -\begin_layout Standard -Then, I can compile the extension module using -\end_layout - -\begin_layout LyX-Code -f2py -c -m add add.f -\end_layout - -\begin_layout Standard -The resulting signature for the function add.zadd is exactly the same one - that was created previously. - If the original source code had contained A(N) instead of A(*) and so forth - with B and C, then I could obtain (nearly) the same interface simply by - placing the INTENT(OUT) :: C comment line in the source code. - The only difference is that N would be an optional input that would default - to the length of A. - -\end_layout - -\begin_layout Subsection -A filtering example -\end_layout - -\begin_layout Standard -For comparison with the other methods to be discussed. - Here is another example of a function that filters a two-dimensional array - of double precision floating-point numbers using a fixed averaging filter. - The advantage of using Fortran to index into multi-dimensional arrays should - be clear from this example. - -\end_layout - -\begin_layout LyX-Code - SUBROUTINE DFILTER2D(A,B,M,N) -\newline -C -\newline - DOUBLE PRECISION A(M,N) -\newline - DOUBLE - PRECISION B(M,N) -\newline - INTEGER N, M -\newline -CF2PY INTENT(OUT) :: B -\newline -CF2PY INTENT(HIDE) - :: N -\newline -CF2PY INTENT(HIDE) :: M -\newline - DO 20 I = 2,M-1 -\newline - DO 40 J=2,N-1 -\newline - - B(I,J) = A(I,J) + -\newline - $ (A(I-1,J)+A(I+1,J) + -\newline - - $ A(I,J-1)+A(I,J+1) )*0.5D0 + -\newline - $ (A(I-1,J-1) + A(I-1,J+1 -) + -\newline - $ A(I+1,J-1) + A(I+1,J+1))*0.25D0 -\newline - 40 CONTINUE -\newline - 20 - CONTINUE -\newline - END -\end_layout - -\begin_layout Standard -This code can be compiled and linked into an extension module named filter - using -\end_layout - -\begin_layout LyX-Code -f2py -c -m filter filter.f -\end_layout - -\begin_layout Standard -This will produce an extension module named filter.so in the current directory - with a method named dfilter2d that returns a filtered version of the input. - -\end_layout - -\begin_layout Subsection -Calling f2py from Python -\end_layout - -\begin_layout Standard -The f2py program is written in Python and can be run from inside your module. - This provides a facility that is somewhat similar to the use of weave.ext_tools - described below. - An example of the final interface executed using Python code is -\end_layout - -\begin_layout LyX-Code -import numpy.f2py as f2py -\end_layout - -\begin_layout LyX-Code -fid = open('add.f') -\end_layout - -\begin_layout LyX-Code -source = fid.read() -\end_layout - -\begin_layout LyX-Code -fid.close() -\end_layout - -\begin_layout LyX-Code -f2py.compile(source, modulename='add') -\end_layout - -\begin_layout LyX-Code -import add -\end_layout - -\begin_layout Standard -The source string can be any valid Fortran code. - If you want to save the extension-module source code then a suitable file-name - can be provided by the source_fn keyword to the compile function. - -\end_layout - -\begin_layout Subsection -Automatic extension module generation -\end_layout - -\begin_layout Standard -If you want to distribute your f2py extension module, then you only need - to include the .pyf file and the Fortran code. - The distutils extensions in NumPy allow you to define an extension module - entirely in terms of this interface file. - A valid setup.py file allowing distribution of the add.f module (as part - of the package f2py_examples so that it would be loaded as f2py_examples.add) - is -\end_layout - -\begin_layout LyX-Code -def configuration(parent_package='', top_path=None) -\newline - from numpy.distutils.misc_u -til import Configuration -\newline - config = Configuration('f2py_examples',parent_packag -e, top_path) -\newline - config.add_extension('add', sources=['add.pyf','add.f']) -\newline - - return config -\newline - -\newline -if __name__ == '__main__': -\newline - from numpy.distutils.core import - setup -\newline - setup(**configuration(top_path='').todict()) -\end_layout - -\begin_layout Standard -Installation of the new package is easy using -\end_layout - -\begin_layout LyX-Code -python setup.py install -\end_layout - -\begin_layout Standard -assuming you have the proper permissions to write to the main site-packages - directory for the version of Python you are using. - For the resulting package to work, you need to create a file named __init__.py - (in the same directory as add.pyf). - Notice the extension module is defined entirely in terms of the -\begin_inset Quotes eld -\end_inset - -add.pyf -\begin_inset Quotes erd -\end_inset - - and -\begin_inset Quotes eld -\end_inset - -add.f -\begin_inset Quotes erd -\end_inset - - files. - The conversion of the .pyf file to a .c file is handled by numpy.disutils. - -\end_layout - -\begin_layout Subsection -Conclusion -\end_layout - -\begin_layout Standard -The interface definition file (.pyf) is how you can fine-tune the interface - between Python and Fortran. - There is decent documentation for f2py found in the numpy/f2py/docs directory - where-ever NumPy is installed on your system (usually under site-packages). - There is also more information on using f2py (including how to use it to - wrap C codes) at http://www.scipy.org/Cookbook under the -\begin_inset Quotes eld -\end_inset - -Using NumPy with Other Languages -\begin_inset Quotes erd -\end_inset - - heading. - -\end_layout - -\begin_layout Standard -The f2py method of linking compiled code is currently the most sophisticated - and integrated approach. - It allows clean separation of Python with compiled code while still allowing - for separate distribution of the extension module. - The only draw-back is that it requires the existence of a Fortran compiler - in order for a user to install the code. - However, with the existence of the free-compilers g77, gfortran, and g95, - as well as high-quality commerical compilers, this restriction is not particula -rly onerous. - In my opinion, Fortran is still the easiest way to write fast and clear - code for scientific computing. - It handles complex numbers, and multi-dimensional indexing in the most - straightforward way. - Be aware, however, that some Fortran compilers will not be able to optimize - code as well as good hand-written C-code. - -\begin_inset LatexCommand index -name "f2py|)" - -\end_inset - - -\end_layout - -\begin_layout Section -weave -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "weave|(" - -\end_inset - -Weave is a scipy package that can be used to automate the process of extending - Python with C/C++ code. - It can be used to speed up evaluation of an array expression that would - otherwise create temporary variables, to directly -\begin_inset Quotes eld -\end_inset - -inline -\begin_inset Quotes erd -\end_inset - - C/C++ code into Python, or to create a fully-named extension module. - You must either install scipy or get the weave package separately and install - it using the standard python setup.py install. - You must also have a C/C++-compiler installed and useable by Python distutils - in order to use weave. -\end_layout - -\begin_layout Standard -Somewhat dated, but still useful documentation for weave can be found at - the link http://www.scipy/Weave. - There are also many examples found in the examples directory which is installed - under the weave directory in the place where weave is installed on your - system. -\end_layout - -\begin_layout Subsection -Speed up code involving arrays (also see scipy.numexpr) -\end_layout - -\begin_layout Standard -This is the easiest way to use weave and requires minimal changes to your - Python code. - It involves placing quotes around the expression of interest and calling - weave.blitz. - Weave will parse the code and generate C++ code using Blitz C++ arrays. - It will then compile the code and catalog the shared library so that the - next time this exact string is asked for (and the array types are the same), - the already-compiled shared library will be loaded and used. - Because Blitz makes extensive use of C++ templating, it can take a long - time to compile the first time. - After that, however, the code should evaluate more quickly than the equivalent - NumPy expression. - This is especially true if your array sizes are large and the expression - would require NumPy to create several temporaries. - Only expressions involving basic arithmetic operations and basic array - slicing can be converted to Blitz C++ code. - -\end_layout - -\begin_layout Standard -For example, consider the expression -\end_layout - -\begin_layout LyX-Code -d = 4*a + 5*a*b + 6*b*c -\end_layout - -\begin_layout Standard -where a, b, and c are all arrays of the same type and shape. - When the data-type is double-precision and the size is 1000x1000, this - expression takes about 0.5 seconds to compute on an 1.1Ghz AMD Athlon machine. - When this expression is executed instead using blitz: -\end_layout - -\begin_layout LyX-Code -d = empty(a.shape, 'd'); weave.blitz(expr) -\end_layout - -\begin_layout Standard -execution time is only about 0.20 seconds (about 0.14 seconds spent in weave - and the rest in allocating space for d). - Thus, we've sped up the code by a factor of 2 using only a simnple command - (weave.blitz). - Your mileage may vary, but factors of 2-8 speed-ups are possible with this - very simple technique. - -\end_layout - -\begin_layout Standard -If you are interested in using weave in this way, then you should also look - at scipy.numexpr which is another similar way to speed up expressions by - eliminating the need for temporary variables. - Using numexpr does not require a C/C++ compiler. - -\end_layout - -\begin_layout Subsection -Inline C-code -\end_layout - -\begin_layout Standard -Probably the most widely-used method of employing weave is to -\begin_inset Quotes eld -\end_inset - -in-line -\begin_inset Quotes erd -\end_inset - - C/C++ code into Python in order to speed up a time-critical section of - Python code. - In this method of using weave, you define a string containing useful C-code - and then pass it to the function -\series bold -weave.inline -\series default -( -\family typewriter -code_string -\family default -, -\family typewriter -variables -\family default -), where code_string is a string of valid C/C++ code and variables is a - list of variables that should be passed in from Python. - The C/C++ code should refer to the variables with the same names as they - are defined with in Python. - If weave.line should return anything the the special value return_val should - be set to whatever object should be returned. - The following example shows how to use weave on basic Python objects -\end_layout - -\begin_layout LyX-Code -code = r""" -\newline -int i; -\newline -py::tuple results(2); -\newline -for (i=0; i<a.length(); i++) { -\newline - - a[i] = i; -\newline -} -\newline -results[0] = 3.0; -\newline -results[1] = 4.0; -\newline -return_val = results; -\newline -""" - -\newline -a = [None]*10 -\newline -res = weave.inline(code,['a']) -\end_layout - -\begin_layout Standard -The C++ code shown in the code string uses the name 'a' to refer to the - Python list that is passed in. - Because the Python List is a mutable type, the elements of the list itself - are modified by the C++ code. - A set of C++ classes are used to access Python objects using simple syntax. - -\end_layout - -\begin_layout Standard -The main advantage of using C-code, however, is to speed up processing on - an array of data. - Accessing a NumPy array in C++ code using weave, depends on what kind of - type converter is chosen in going from NumPy arrays to C++ code. - The default converter creates 5 variables for the C-code for every NumPy - array passed in to weave.inline. - The following table shows these variables which can all be used in the - C++ code. - The table assumes that -\family typewriter -myvar -\family default - is the name of the array in Python with data-type <dtype> (i.e. - float64, float32, int8, etc.) -\end_layout - -\begin_layout Standard -\align center -\begin_inset Tabular -<lyxtabular version="3" rows="6" columns="3"> -<features> -<column alignment="center" valignment="top" leftline="true" width="0"> -<column alignment="center" valignment="top" leftline="true" width="0"> -<column alignment="center" valignment="top" leftline="true" rightline="true" width="0"> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Variable -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Type -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Contents -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -myvar -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -<dtype>* -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Pointer to the first element of the array -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Nmyvar -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -npy_intp* -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -A pointer to the dimensions array -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Smyvar -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -npy_intp* -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -A pointer to the strides array -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Dmyvar -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -int -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -The number of dimensions -\end_layout - -\end_inset -</cell> -</row> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -myvar_array -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -PyArrayObject* -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -The entire structure for the array -\end_layout - -\end_inset -</cell> -</row> -</lyxtabular> - -\end_inset - - -\end_layout - -\begin_layout Standard -The in-lined code can contain references to any of these variables as well - as to the standard macros MYVAR1(i), MYVAR2(i,j), MYVAR3(i,j,k), and MYVAR4(i,j -,k,l). - These name-based macros (they are the Python name capitalized followed - by the number of dimensions needed) will de-reference the memory for the - array at the given location with no error checking (be-sure to use the - correct macro and ensure the array is aligned and in correct byte-swap - order in order to get useful results). - The following code shows how you might use these variables and macros to - code a loop in C that computes a simple 2-d weighted averaging filter. -\end_layout - -\begin_layout LyX-Code -int i,j; -\newline -for(i=1;i<Na[0]-1;i++) { -\newline - for(j=1;j<Na[1]-1;j++) { -\newline - B2(i,j) - = A2(i,j) + (A2(i-1,j) + -\newline - A2(i+1,j)+A2(i,j-1) -\newline - - + A2(i,j+1))*0.5 -\newline - + (A2(i-1,j-1) -\newline - + - A2(i-1,j+1) -\newline - + A2(i+1,j-1) -\newline - + A2(i+1,j+1))*0.25 -\newline - - } -\end_layout - -\begin_layout LyX-Code -} -\end_layout - -\begin_layout Standard -The above code doesn't have any error checking and so could fail with a - Python crash if, -\family typewriter -a -\family default - had the wrong number of dimensions, or -\family typewriter -b -\family default - did not have the same shape as -\family typewriter -a -\family default -. - However, it could be placed inside a standard Python function with the - necessary error checking to produce a robust but fast subroutine. -\end_layout - -\begin_layout Standard -One final note about weave.inline: if you have additional code you want to - include in the final extension module such as supporting function calls, - include statments, etc. - you can pass this code in as a string using the keyword support_code: -\family typewriter -weave.inline(code, variables, support_code=support) -\family default -. - If you need the extension module to link against an additional library - then you can also pass in distutils-style keyword arguments such as library_dir -s, libraries, and/or runtime_library_dirs which point to the appropriate - libraries and directories. - -\end_layout - -\begin_layout Subsection -Simplify creation of an extension module -\end_layout - -\begin_layout Standard -The inline function creates one extension module for each function to-be - inlined. - It also generates a lot of intermediate code that is duplicated for each - extension module. - If you have several related codes to execute in C, it would be better to - make them all separate functions in a single extension module with multiple - functions. - You can also use the tools weave provides to produce this larger extension - module. - In fact, the weave.inline function just uses these more general tools to - do its work. - -\end_layout - -\begin_layout Standard -The approach is to: -\end_layout - -\begin_layout Enumerate -construct a extension module object using ext_tools.ext_module( -\family typewriter -module_name -\family default -); -\end_layout - -\begin_layout Enumerate -create function objects using ext_tools.ext_function( -\family typewriter -func_name -\family default -, -\family typewriter -code -\family default -, -\family typewriter -variables -\family default -); -\end_layout - -\begin_layout Enumerate -(optional) add support code to the function using the .customize.add_support_code( -\family typewriter -support_code -\family default -) method of the function object; -\end_layout - -\begin_layout Enumerate -add the functions to the extension module object using the .add_function( -\family typewriter -func -\family default -) method; -\end_layout - -\begin_layout Enumerate -when all the functions are added, compile the extension with its .compile() - method. -\end_layout - -\begin_layout Standard -Several examples are available in the examples directory where weave is - installed on your system. - Look particularly at ramp2.py, increment_example.py and fibonacii.py -\end_layout - -\begin_layout Subsection -Conclusion -\end_layout - -\begin_layout Standard -Weave is a useful tool for quickly routines in C/C++ and linking them into - Python. - It's caching-mechanism allows for on-the-fly compilation which makes it - particularly attractive for in-house code. - Because of the requirement that the user have a C++-compiler, it can be - difficult (but not impossible) to distribute a package that uses weave - to other users who don't have a compiler installed. - Of course, weave could be used to construct an extension module which is - then distributed in the normal way -\emph on -( -\emph default -using a setup.py file). - While you can use weave to build larger extension modules with many methods, - creating methods with a variable-number of arguments is not possible. - Thus, for a more sophisticated module, you will still probably want a Python-la -yer that calls the weave-produced extension. - -\begin_inset LatexCommand index -name "weave|)" - -\end_inset - - -\end_layout - -\begin_layout Section -Pyrex -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "pyrex|(" - -\end_inset - -Pyrex is a way to write C-extension modules using Python-like syntax. - It is an interesting way to generate extension modules that is growing - in popularity, particularly among people who have rusty or non-existent - C-skills. - It does require the user to write the -\begin_inset Quotes eld -\end_inset - -interface -\begin_inset Quotes erd -\end_inset - - code and so is more time-consuming than SWIG or f2py if you are trying - to interface to a large library of code. - However, if you are writing an extension module that will include quite - a bit of your own algorithmic code, as well, then Pyrex is a good match. - A big weakness perhaps is the inability to easily and quickly access the - elements of a multidimensional array. - -\end_layout - -\begin_layout Standard -Notice that Pyrex is an extension-module generator only. - Unlike weave or f2py, it includes no automatic facility for compiling and - linking the extension module (which must be done in the usual fashion). - It does provide a modified distutils class called build_ext which lets - you build an extension module from a .pyx source. - Thus, you could write in a setup.py file -\end_layout - -\begin_layout LyX-Code -from Pyrex.Distutils import build_ext -\newline -from distutils.extension import Extension -\newline -from - distutils.core import setup -\newline - -\newline -import numpy -\newline -py_ext = Extension('mine', ['mine.pyx'], -\newline - - include_dirs=[numpy.get_include()]) -\newline - -\newline -setup(name='mine', description='Nothi -ng', -\newline - ext_modules=[pyx_ext], -\newline - cmdclass = {'build_ext':build_ext}) -\end_layout - -\begin_layout Standard -Adding the NumPy include directory is, of course, only necessary if you - are using NumPy arrays in the extension module (which is what I assume - you are using Pyrex for). - The distutils extensions in NumPy also include support for automatically - producing the extension-module and linking it from a -\family typewriter -.pyx -\family default - file. - It works so that if the user does not have Pyrex installed, then it looks - for a file with the same file-name but a -\family typewriter -.c -\family default - extension which it then uses instead of trying to produce the -\family typewriter -.c -\family default - file again. - -\end_layout - -\begin_layout Standard -Pyrex does not natively understand NumPy arrays. - However, it is not difficult to include information that lets Pyrex deal - with them usefully. - In fact, the numpy.random.mtrand module was written using Pyrex so an example - of Pyrex usage is already included in the NumPy source distribution. - That experience led to the creation of a standard c_numpy.pxd file that - you can use to simplify interacting with NumPy array objects in a Pyrex-written - extension. - The file may not be complete (it wasn't at the time of this writing). - If you have additions you'd like to contribute, please send them. - The file is located in the .../site-packages/numpy/doc/pyrex directory where - you have Python installed. - There is also an example in that directory of using Pyrex to construct - a simple extension module. - It shows that Pyrex looks a lot like Python but also contains some new - syntax that is necessary in order to get C-like speed. - -\end_layout - -\begin_layout Standard -If you just use Pyrex to compile a standard Python module, then you will - get a C-extension module that runs either as fast or, possibly, more slowly - than the equivalent Python module. - Speed increases are possible only when you use cdef to statically define - C variables and use a special construct to create for loops: -\end_layout - -\begin_layout LyX-Code -cdef int i -\newline -for i from start <= i < stop -\end_layout - -\begin_layout Standard -Let's look at two examples we've seen before to see how they might be implemente -d using Pyrex. - These examples were compiled into extension modules using Pyrex-0.9.3.1. -\end_layout - -\begin_layout Subsection -Pyrex-add -\end_layout - -\begin_layout Standard -Here is part of a Pyrex-file I named add.pyx which implements the add functions - we previously implemented using f2py: -\end_layout - -\begin_layout LyX-Code -cimport c_numpy -\newline -from c_numpy cimport import_array, ndarray, npy_intp, npy_cdouble -, -\backslash - -\newline - npy_cfloat, NPY_DOUBLE, NPY_CDOUBLE, NPY_FLOAT, -\backslash - -\newline - NPY_CFLOAT -\newline - -\newline -#We need to initialize NumPy -\newline -import_array() -\newline - -\newline -def zadd(object - ao, object bo): -\newline - cdef ndarray c, a, b -\newline - cdef npy_intp i -\newline - a = c_numpy.PyArra -y_ContiguousFromAny(ao, -\newline - NPY_CDOUBLE, 1, 1) -\newline - b = c_numpy.PyArr -ay_ContiguousFromAny(bo, -\newline - NPY_CDOUBLE, 1, 1) -\newline - c = c_numpy.PyAr -ray_SimpleNew(a.nd, a.dimensions, -\newline - a.descr.type_num) -\newline - for i - from 0 <= i < a.dimensions[0]: -\newline - (<npy_cdouble *>c.data)[i].real = -\backslash - -\newline - (<npy_cdouble *>a.data)[i].real + -\backslash - -\newline - (<npy_cdouble *>b.data)[i].real -\newline - (<npy_cdouble *>c.data)[i].imag - = -\backslash - -\newline - (<npy_cdouble *>a.data)[i].imag + -\backslash - -\newline - (<npy_cdouble *>b.data)[i].imag -\newline - return c -\end_layout - -\begin_layout Standard -This module shows use of the -\family typewriter -cimport -\family default - statement to load the definitions from the c_numpy.pxd file. - As shown, both versions of the import statement are supported. - It also shows use of the NumPy C-API to construct NumPy arrays from arbitrary - input objects. - The array c is created using PyArray_SimpleNew. - Then the c-array is filled by addition. - Casting to a particiular data-type is accomplished using <cast *>. - Pointers are de-referenced with bracket notation and members of structures - are accessed using '.' notation even if the object is techinically a pointer - to a structure. - The use of the special for loop construct ensures that the underlying code - will have a similar C-loop so the addition calculation will proceed quickly. - Notice that we have not checked for NULL after calling to the C-API --- - a cardinal sin when writing C-code. - For routines that return Python objects, Pyrex inserts the checks for NULL - into the C-code for you and returns with failure if need be. - There is also a way to get Pyrex to automatically check for exceptions - when you call functions that don't return Python objects. - See the documentation of Pyrex for details. - -\end_layout - -\begin_layout Subsection -Pyrex-filter -\end_layout - -\begin_layout Standard -The two-dimensional example we created using weave is a bit uglierto implement - in Pyrex because two-dimensional indexing using Pyrex is not as simple. - But, it is straightforward (and possibly faster because of pre-computed - indices). - Here is the Pyrex-file I named image.pyx. -\end_layout - -\begin_layout LyX-Code -cimport c_numpy -\newline -from c_numpy cimport import_array, ndarray, npy_intp, -\backslash - -\newline - NPY_DOUBLE, NPY_CDOUBLE, -\backslash - -\newline - NPY_FLOAT, NPY_CFLOAT, NPY_ALIGNED -\backslash - -\newline - -\newline -#We need to initialize NumPy -\newline -import_array() -\newline -def filter(object ao): -\newline - cdef - ndarray a, b -\newline - cdef npy_intp i, j, M, N, oS -\newline - cdef npy_intp r,rm1,rp1,c,cm1,c -p1 -\newline - cdef double value -\newline - # Require an ALIGNED array -\newline - # (but not necessarily - contiguous) -\newline - # We will use strides to access the elements. -\newline - a = c_numpy.PyAr -ray_FROMANY(ao, NPY_DOUBLE, -\backslash - -\newline - 2, 2, NPY_ALIGNED) -\newline - b = c_numpy.PyArray_SimpleNew(a.nd,a.dimensio -ns, -\backslash - -\newline - a.descr.type_num) -\newline - M = a.dimensions[0] -\newline - - N = a.dimensions[1] -\newline - S0 = a.strides[0] -\newline - S1 = a.strides[1] -\newline - for i - from 1 <= i < M-1: -\newline - r = i*S0 -\newline - rm1 = r-S0 -\newline - rp1 = r+S0 -\newline - - oS = i*N -\newline - for j from 1 <= j < N-1: -\newline - c = j*S1 -\newline - - cm1 = c-S1 -\newline - cp1 = c+S1 -\newline - (<double *>b.data)[oS+j] - = -\backslash - -\newline - (<double *>(a.data+r+c))[0] + -\backslash - -\newline - ((<double *>(a.data+rm1+c))[0] + -\backslash - -\newline - (<double *>(a.data+rp1+c))[0] + -\backslash - -\newline - (<double *>(a.data+r+cm1))[0] + -\backslash - -\newline - (<double *>(a.data+r+cp1))[0])*0.5 + -\backslash - -\newline - ((<double *>(a.data+rm1+cm1))[0] + -\backslash - -\newline - (<double *>(a.data+rp1+cm1))[0] + -\backslash - -\newline - (<double *>(a.data+rp1+cp1))[0] + -\backslash - -\newline - (<double *>(a.data+rm1+cp1))[0])*0.25 -\newline - return b -\end_layout - -\begin_layout Standard -This 2-d averaging filter runs quickly because the loop is in C and the - pointer computations are done only as needed. - However, it is not particularly easy to understand what is happening. - A 2-d image, -\family typewriter -in -\family default -, can be filtered using this code very quickly using -\end_layout - -\begin_layout LyX-Code -import image -\end_layout - -\begin_layout LyX-Code -out = image.filter(in) -\end_layout - -\begin_layout Subsection -Conclusion -\end_layout - -\begin_layout Standard -There are several disadvantages of using Pyrex: -\end_layout - -\begin_layout Enumerate -The syntax for Pyrex can get a bit bulky, and it can be confusing at first - to understand what kind of objects you are getting and how to interface - them with C-like constructs. - -\end_layout - -\begin_layout Enumerate -Inappropriate Pyrex syntax or incorrect calls to C-code or type-mismatches - can result in failures such as -\end_layout - -\begin_deeper -\begin_layout Enumerate -Pyrex failing to generate the extension module source code, -\end_layout - -\begin_layout Enumerate -Compiler failure while generating the extension module binary due to incorrect - C syntax, -\end_layout - -\begin_layout Enumerate -Python failure when trying to use the module. - -\end_layout - -\end_deeper -\begin_layout Enumerate -It is easy to lose a clean separation between Python and C which makes re-using - your C-code for other non-Python-related projects more difficult. -\end_layout - -\begin_layout Enumerate -Multi-dimensional arrays are -\begin_inset Quotes eld -\end_inset - -bulky -\begin_inset Quotes erd -\end_inset - - to index (appropriate macros may be able to fix this). - -\end_layout - -\begin_layout Enumerate -The C-code generated by Prex is hard to read and modify (and typically compiles - with annoying but harmless warnings). - -\end_layout - -\begin_layout Standard -Writing a good Pyrex extension module still takes a bit of effort because - not only does it require (a little) familiarity with C, but also with Pyrex's - brand of Python-mixed-with C. - One big advantage of Pyrex-generated extension modules is that they are - easy to distribute using distutils. - In summary, Pyrex is a very capable tool for either gluing C-code or generating - an extension module quickly and should not be over-looked. - It is especially useful for people that can't or won't write C-code or - Fortran code. - But, if you are already able to write simple subroutines in C or Fortran, - then I would use one of the other approaches such as f2py (for Fortran), - ctypes (for C shared-libraries), or weave (for inline C-code). -\begin_inset LatexCommand index -name "pyrex|)" - -\end_inset - - -\end_layout - -\begin_layout Section -ctypes -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "ctypes|(" - -\end_inset - -Ctypes is a python extension module (downloaded separately for Python <2.5 - and included with Python 2.5) that allows you to call an arbitrary function - in a shared library directly from Python. - This approach allows you to interface with C-code directly from Python. - This opens up an enormous number of libraries for use from Python. - The drawback, however, is that coding mistakes can lead to ugly program - crashes very easily (just as can happen in C) because there is little type - or bounds checking done on the parameters. - This is especially true when array data is passed in as a pointer to a - raw memory location. - The responsibility is then on you that the subroutine will not access memory - outside the actual array area. - But, if you don't mind living a little dangerously ctypes can be an effective - tool for quickly taking advantage of a large shared library (or writing - extended functionality in your own shared library). -\end_layout - -\begin_layout Standard -Because the ctypes approach exposes a raw interface to the compiled code - it is not always tolerant of user mistakes. - Robust use of the ctypes module typically involves an additional layer - of Python code in order to check the data types and array bounds of objects - passed to the underlying subroutine. - This additional layer of checking (not to mention the conversion from ctypes - objects to C-data-types that ctypes itself performs), will make the interface - slower than a hand-written extension-module interface. - However, this overhead should be neglible if the C-routine being called - is doing any significant amount of work. - If you are a great Python programmer with weak C-skills, ctypes is an easy - way to write a useful interface to a (shared) library of compiled code. - -\end_layout - -\begin_layout Standard -To use c-types you must -\end_layout - -\begin_layout Enumerate -Have a shared library. -\end_layout - -\begin_layout Enumerate -Load the shared library. -\end_layout - -\begin_layout Enumerate -Convert the python objects to ctypes-understood arguments. -\end_layout - -\begin_layout Enumerate -Call the function from the library with the ctypes arguments. -\end_layout - -\begin_layout Subsection -Having a shared library -\end_layout - -\begin_layout Standard -There are several requirements for a shared library that can be used with - c-types that are platform specific. - This guide assumes you have some familiarity with making a shared library - on your system (or simply have a shared library available to you). - Items to remember are: -\end_layout - -\begin_layout Itemize -A shared library must be compiled in a special way ( -\emph on -e.g. - -\emph default - using the -shared flag with gcc). -\end_layout - -\begin_layout Itemize -On some platforms ( -\emph on -e.g. - -\emph default - Windows) , a shared library requires a .def file that specifies the functions - to be exported. - For example a mylib.def file might contain. - -\end_layout - -\begin_deeper -\begin_layout LyX-Code -LIBRARY mylib.dll -\newline -EXPORTS -\newline -cool_function1 -\newline -cool_function2 -\end_layout - -\begin_layout Standard -Alternatively, you may be able to use the storage-class specifier __declspec(dll -export) in the C-definition of the function to avoid the need for this .def - file. - -\end_layout - -\end_deeper -\begin_layout Standard -There is no standard way in Python distutils to create a standard shared - library (an extension module is a -\begin_inset Quotes eld -\end_inset - -special -\begin_inset Quotes erd -\end_inset - - shared library Python understands) in a cross-platform manner. - Thus, a big disadvantage of ctypes at the time of writing this book is - that it is difficult to distribute in a cross-platform manner a Python - extension that uses c-types and includes your own code which should be - compiled as a shared library on the users system. - -\end_layout - -\begin_layout Subsection -Loading the shared library -\end_layout - -\begin_layout Standard -A simple, but robust way to load the shared library is to get the absolute - path name and load it using the cdll object of ctypes. - -\end_layout - -\begin_layout LyX-Code -lib = ctypes.cdll[<full_path_name>] -\end_layout - -\begin_layout Standard -However, on Windows accessing an attribute of the cdll method will load - the first DLL by that name found in the current directory or on the PATH. - Loading the absolute path name requires a little finesse for cross-platform - work since the extension of shared libraries varies. - There is a -\family typewriter -ctypes.util.find_library -\family default - utility available that can simplify the process of finding the library - to load but it is not foolproof. - Complicating matters, different platforms have different default extensions - used by shared libraries (e.g. - .dll -- Windows, .so -- Linux, .dylib -- Mac OS X). - This must also be taken into account if you are using c-types to wrap code - that needs to work on several platforms. - -\end_layout - -\begin_layout Standard -NumPy provides a convenience function called -\series bold -ctypeslib.load_library -\series default -(name, path). - This function takes the name of the shared library (including any prefix - like 'lib' but excluding the extension) and a path where the shared library - can be located. - It returns a ctypes library object or raises an OSError if the library - cannot be found or raises an ImportError if the ctypes module is not available. - (Windows users: the ctypes library object loaded using -\series bold -load_library -\series default - is always loaded assuming cdecl calling convention. - See the ctypes documentation under ctypes.windll and/or ctypes.oledll for - ways to load libraries under other calling conventions). - -\end_layout - -\begin_layout Standard -The functions in the shared library are available as attributes of the ctypes - library object (returned from -\series bold -ctypeslib.load_library -\series default -) or as items using lib['func_name'] syntax. - The latter method for retrieving a function name is particularly useful - if the function name contains characters that are not allowable in Python - variable names. - -\end_layout - -\begin_layout Subsection -Converting arguments -\end_layout - -\begin_layout Standard -Python ints/longs, strings, and unicode objects are automatically converted - as needed to equivalent c-types arguments The None object is also converted - automatically to a NULL pointer. - All other Python objects must be converted to ctypes-specific types. - There are two ways around this restriction that allow c-types to integrate - with other objects. - -\end_layout - -\begin_layout Enumerate -Don't set the argtypes attribute of the function object and define an _as_parame -ter_ method for the object you want to pass in. - The _as_parameter_ method must return a Python int which will be passed - directly to the function. - -\end_layout - -\begin_layout Enumerate -Set the argtypes attribute to a list whose entries contain objects with - a classmethod named from_param that knows how to convert your object to - an object that ctypes can understand (an int/long, string, unicode, or - object with the _as_parameter_ attribute). - -\end_layout - -\begin_layout Standard -NumPy uses both methods with a preference for the second method because - it can be safer. - The ctypes attribute of the ndarray returns an object that has an _as_parameter -_ attribute which returns an integer representing the address of the ndarray - to which it is associated. - As a result, one can pass this ctypes attribute object directly to a function - expecting a pointer to the data in your ndarray. - The caller must be sure that the ndarray object is of the correct type, - shape, and has the correct flags set or risk nasty crashes if the data-pointer - to inappropriate arrays are passsed in. - -\end_layout - -\begin_layout Standard -To implement the second method, NumPy provides the class-factory function - -\series bold -ndpointer -\series default - in the -\series bold -ctypeslib -\series default - module. - This class-factory function produces an appropriate class that can be placed - in an argtypes attribute entry of a ctypes function. - The class will contain a from_param method which ctypes will use to convert - any ndarray passed in to the function to a ctypes-recognized object. - In the process, the conversion will perform checking on any properties - of the ndarray that were specified by the user in the call to ndpointer. - Aspects of the ndarray that can be checked include the data-type, the number-of --dimensions, the shape, and/or the state of the flags on any array passed. - The return value of the from_param method is the ctypes attribute of the - array which (because it contains the _as_parameter_ attribute pointing - to the array data area) can be used by ctypes directly. - -\end_layout - -\begin_layout Standard -The ctypes attribute of an ndarray is also endowed with additional attributes - that may be convenient when passing additional information about the array - into a ctypes function. - The attributes -\series bold -data -\series default -, -\series bold -shape -\series default -, and -\series bold -strides -\series default - can provide c-types compatible types corresponding to the data-area, the - shape, and the strides of the array. - The data attribute reutrns a -\family typewriter -c_void_p -\family default - representing a pointer to the data area. - The shape and strides attributes each return an array of ctypes integers - (or None representing a NULL pointer, if a 0-d array). - The base ctype of the array is a ctype integer of the same size as a pointer - on the platform. - There are also methods data_as(<ctype>), shape_as(<base ctype>), and strides_as -(<base ctype>). - These return the data as a ctype object of your choice and the shape/strides - arrays using an underlying base type of your choice. - For convenience, the -\series bold -ctypeslib -\series default - module also contains -\series bold -c_intp -\series default - as a ctypes integer data-type whose size is the same as the size of -\family typewriter -c_void_p -\family default - on the platform (it's value is None if ctypes is not installed). - -\end_layout - -\begin_layout Subsection -Calling the function -\end_layout - -\begin_layout Standard -The function is accessed as an attribute of or an item from the loaded shared-li -brary. - Thus, if -\begin_inset Quotes eld -\end_inset - -./mylib.so -\begin_inset Quotes erd -\end_inset - - has a function named -\begin_inset Quotes eld -\end_inset - -cool_function1 -\begin_inset Quotes erd -\end_inset - -, I could access this function either as -\end_layout - -\begin_layout LyX-Code -lib = numpy.ctypeslib.load_library('mylib','.') -\newline -func1 = lib.cool_function1 # - or equivalently -\newline -func1 = lib['cool_function1'] -\end_layout - -\begin_layout Standard -In ctypes, the return-value of a function is set to be 'int' by default. - This behavior can be changed by setting the restype attribute of the function. - Use None for the restype if the function has no return value ('void'): -\end_layout - -\begin_layout LyX-Code -func1.restype = None -\end_layout - -\begin_layout Standard -As previously discussed, you can also set the argtypes attribute of the - function in order to have ctypes check the types of the input arguments - when the function is called. - Use the ndpointer factory function to generate a ready-made class for data-type -, shape, and flags checking on your new function. - The ndpointer function has the signature -\end_layout - -\begin_layout Description -ndpointer (dtype=None, ndim=None, shape=None, flags=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Keyword arguments with the value -\family typewriter -None -\family default - are not checked. - Specifying a keyword enforces checking of that aspect of the ndarray on - conversion to a ctypes-compatible object. - The dtype keyword can be any object understood as a data-type object. - The ndim keyword should be an integer, and the shape keyword should be - an integer or a sequence of integers. - The flags keyword specifies the minimal flags that are required on any - array passed in. - This can be specified as a string of comma separated requirements, an integer - indicating the requirement bits OR'd together, or a flags object returned - from the flags attribute of an array with the necessary requirements. - -\end_layout - -\begin_layout Standard -Using an ndpointer class in the argtypes method can make it significantly - safer to call a C-function using ctypes and the data-area of an ndarray. - You may still want to wrap the function in an additional Python wrapper - to make it user-friendly (hiding some obvious arguments and making some - arguments output arguments). - In this process, the -\series bold -requires -\series default - function in NumPy may be useful to return the right kind of array from - a given input. - -\end_layout - -\begin_layout Subsection -Complete example -\end_layout - -\begin_layout Standard -In this example, I will show how the addition function and the filter function - implemented previously using the other approaches can be implemented using - ctypes. - First, the C-code which implements the algorithms contains the functions - zadd, dadd, sadd, cadd, and dfilter2d. - The zadd function is -\end_layout - -\begin_layout LyX-Code -/* Add arrays of contiguous data */ -\newline -typedef struct {double real; double imag;} - cdouble; -\newline -typedef struct {float real; float imag;} cfloat; -\newline -void zadd(cdouble - *a, cdouble *b, cdouble *c, long n) -\newline -{ -\newline - while (n--) { -\newline - c->real = - a->real + b->real; -\newline - c->imag = a->imag + b->imag; -\newline - a++; b++; - c++; -\newline - } -\newline -} -\end_layout - -\begin_layout Standard -with similar code for cadd, dadd, and sadd that handles complex float, double, - and float data-types, respectively: -\end_layout - -\begin_layout LyX-Code -void cadd(cfloat *a, cfloat *b, cfloat *c, long n) -\newline -{ -\newline - while (n--) { -\newline - - c->real = a->real + b->real; -\newline - c->imag = a->imag - + b->imag; -\newline - a++; b++; c++; -\newline - } -\newline -} -\newline -void dadd(double - *a, double *b, double *c, long n) -\newline -{ -\newline - while (n--) { -\newline - - *c++ = *a++ + *b++; -\newline - } -\newline -} -\newline -void sadd(float *a, float *b, float - *c, long n) -\newline -{ -\newline - while (n--) { -\newline - *c++ = *a++ + *b++; -\newline - - } -\newline -} -\end_layout - -\begin_layout Standard -The code.c file also contains the function dfilter2d: -\end_layout - -\begin_layout LyX-Code -/* Assumes b is contiguous and -\newline - a has strides that are multiples of sizeof(dou -ble) -\newline -*/ -\newline -void -\newline -dfilter2d(double *a, double *b, int *astrides, int *dims) -\newline -{ -\newline - - int i, j, M, N, S0, S1; -\newline - int r, c, rm1, rp1, cp1, cm1; -\newline - -\newline - M = dims[0]; - N = dims[1]; -\newline - S0 = astrides[0]/sizeof(double); -\newline - S1=astrides[1]/sizeof(doub -le); -\newline - for (i=1; i<M-1; i++) { -\newline - r = i*S0; rp1 = r+S0; rm1 = r-S0; -\newline - - for (j=1; j<N-1; j++) { -\newline - c = j*S1; cp1 = j+S1; cm1 = j-S1; -\newline - - b[i*N+j] = a[r+c] + -\backslash - -\newline - (a[rp1+c] + a[rm1+c] + -\backslash - -\newline - a[r+cp1] + a[r+cm1])*0.5 + -\backslash - -\newline - (a[rp1+cp1] + a[rp1+cm1] + -\backslash - -\newline - a[rm1+cp1] + a[rm1+cp1])*0.25; -\newline - } -\newline - } -\newline -} -\end_layout - -\begin_layout Standard -A possible advantage this code has over the Fortran-equivalent code is that - it takes arbitrarily strided (i.e. - non-contiguous arrays) and may also run faster depending on the optimization - capability of your compiler. - But, it is a obviously more complicated than the simple code in filter.f. - This code must be compiled into a shared library. - On my Linux system this is accomplished using -\end_layout - -\begin_layout LyX-Code -gcc -o code.so -shared code.c -\end_layout - -\begin_layout Standard -Which creates a shared_library named code.so in the current directory. - On Windows don't forget to either add __declspec(dllexport) in front of - void on the line preceeding each function definition, or write a code.def - file that lists the names of the functions to be exported. - -\end_layout - -\begin_layout Standard -A suitable Python interface to this shared library should be constructed. - To do this create a file named interface.py with the following lines at - the top: -\end_layout - -\begin_layout LyX-Code -__all__ = ['add', 'filter2d'] -\newline - -\newline -import numpy as N -\newline -import os -\newline - -\newline -_path = os.path.dirname('__ -file__') -\newline -lib = N.ctypeslib.load_library('code', _path) -\newline -_typedict = {'zadd' : - complex, 'sadd' : N.single, -\newline - 'cadd' : N.csingle, 'dadd' : float} -\newline -for - name in _typedict.keys(): -\newline - val = getattr(lib, name) -\newline - val.restype = None -\newline - - _type = _typedict[name] -\newline - val.argtypes = [N.ctypeslib.ndpointer(_type, - -\newline - flags='aligned, contiguous'), -\newline - - N.ctypeslib.ndpointer(_type, -\newline - flags='aligned, contiguous'), -\newline - - N.ctypeslib.ndpointer(_type, -\newline - flags='alig -ned, contiguous,' -\backslash - -\newline - 'writeable'), -\newline - N.ctypeslib.c_intp] -\end_layout - -\begin_layout Standard -This code loads the shared library named code.<ext> located in the same path - as this file. - It then adds a return type of void to the functions contained in the library. - It also adds argument checking to the functions in the library so that - ndarrays can be passed as the first three arguments along with an integer - (large enough to hold a pointer on the platform) as the fourth argument. - -\end_layout - -\begin_layout Standard -Setting up the filtering function is similar and allows the filtering function - to be called with ndarray arguments as the first two arguments and with - pointers to integers (large enough to handle the strides and shape of an - ndarray) as the last two arguments. - -\end_layout - -\begin_layout LyX-Code -lib.dfilter2d.restype=None -\newline -lib.dfilter2d.argtypes = [N.ctypeslib.ndpointer(float, - ndim=2, -\newline - flags='aligned'), -\newline - - N.ctypeslib.ndpointer(float, ndim=2, -\newline - - flags='aligned, contiguous,' -\backslash - -\newline - 'writeable'), -\newline - - ctypes.POINTER(N.ctypeslib.c_intp), -\newline - ctypes.POINTER -(N.ctypeslib.c_intp)] -\end_layout - -\begin_layout Standard -Next, define a simple selection function that chooses which addition function - to call in the shared library based on the data-type: -\end_layout - -\begin_layout LyX-Code -def select(dtype): -\newline - if dtype.char in ['?bBhHf']: -\newline - return lib.sadd, - single -\newline - elif dtype.char in ['F']: -\newline - return lib.cadd, csingle -\newline - elif - dtype.char in ['DG']: -\newline - return lib.zadd, complex -\newline - else: -\newline - return - lib.dadd, float -\newline - return func, ntype -\end_layout - -\begin_layout Standard -Finally, the two functions to be exported by the interface can be written - simply as -\end_layout - -\begin_layout LyX-Code -def add(a, b): -\newline - requires = ['CONTIGUOUS', 'ALIGNED'] -\newline - a = N.asanyarray(a) -\newline - - func, dtype = select(a.dtype) -\newline - a = N.require(a, dtype, requires) -\newline - - b = N.require(b, dtype, requires) -\newline - c = N.empty_like(a) -\newline - func(a,b,c,a.size) -\newline - - return c -\end_layout - -\begin_layout Standard -and -\end_layout - -\begin_layout LyX-Code -def filter2d(a): -\newline - a = N.require(a, float, ['ALIGNED']) -\newline - b = N.zeros_like(a) -\newline - - lib.dfilter2d(a, b, a.ctypes.strides, a.ctypes.shape) -\newline - return b -\end_layout - -\begin_layout Subsection -Conclusion -\end_layout - -\begin_layout Standard -Using ctypes is a powerful way to connect Python with arbitrary C-code. - It's advantages for extending Python include -\end_layout - -\begin_layout Itemize -clean separation of C-code from Python code -\end_layout - -\begin_deeper -\begin_layout Itemize -no need to learn a new syntax except Python and C -\end_layout - -\begin_layout Itemize -allows re-use of C-code -\end_layout - -\begin_layout Itemize -functionality in shared libraries written for other purposes can be obtained - with a simple Python wrapper and search for the library. - -\end_layout - -\end_deeper -\begin_layout Itemize -easy integration with NumPy through the ctypes attribute -\end_layout - -\begin_layout Itemize -full argument checking with the ndpointer class factory -\end_layout - -\begin_layout Standard -It's disadvantages include -\end_layout - -\begin_layout Itemize -It is difficult to distribute an extension module made using ctypes because - of a lack of support for building shared libraries in distutils (but I - suspect this will change in time). - -\end_layout - -\begin_layout Itemize -You must have shared-libraries of your code (no static libraries). - -\end_layout - -\begin_layout Itemize -Very little support for C++ code and it's different library-calling conventions. - You will probably need a C-wrapper around C++ code to use with ctypes (or - just use Boost.Python instead). -\end_layout - -\begin_layout Standard -Because of the difficulty in distributing an extension module made using - ctypes, f2py is still the easiest way to extend Python for package creation. - However, ctypes is a close second and will probably be growing in popularity - now that it is part of the Python distribution. - This should bring more features to ctypes that should eliminate the difficulty - in extending Python and distributing the extension using ctypes. - -\begin_inset LatexCommand index -name "ctypes|)" - -\end_inset - - -\end_layout - -\begin_layout Section -Additional tools you may find useful -\end_layout - -\begin_layout Standard -These tools have been found useful by others using Python and so are included - here. - They are discussed separately because I see them as either older ways to - do things more modernly handled by f2py, weave, Pyrex, or ctypes (SWIG, - PyFort, PyInline) or because I don't know much about them (SIP, Boost, - Instant). - I have not added links to these methods because my experience is that you - can find the most relevant link faster using Google or some other search - engine, and any links provided here would be quickly dated. - Do not assume that just because it is included in this list, I don't think - the package deserves your attention. - I'm including information about these packages because many people have - found them useful and I'd like to give you as many options as possible - for tackling the problem of easily integrating your code. - -\end_layout - -\begin_layout Subsection -SWIG -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "swig" - -\end_inset - -Simplified Wrapper and Interface Generator (SWIG) is an old and fairly stable - method for wrapping C/C++-libraries to a large variety of other languages. - It does not specifically understand NumPy arrays but can be made useable - with NumPy through the use of typemaps. - There are some sample typemaps in the numpy/doc/swig directory under numpy.i - along with an example module that makes use of them. - SWIG excels at wrapping large C/C++ libraries because it can (almost) parse - their headers and auto-produce an interface. - Technically, you need to generate a -\family typewriter -.i -\family default - file that defines the interface. - Often, however, this -\family typewriter -.i -\family default - file can be parts of the header itself. - The interface usually needs a bit of tweaking to be very useful. - This ability to parse C/C++ headers and auto-generate the interface still - makes SWIG a useful approach to adding functionalilty from C/C++ into Python, - despite the other methods that have emerged that are more targeted to Python. - SWIG can actually target extensions for several languages, but the typemaps - usually have to be language-specific. - Nonetheless, with modifications to the Python-specific typemaps, SWIG can - be used to interface a library with other languages such as Perl, Tcl, - and Ruby. - -\end_layout - -\begin_layout Standard -My experience with SWIG has been generally positive in that it is relatively - easy to use and quite powerful. - I used to use it quite often before becoming more proficient at writing - C-extensions. - However, I struggled writing custom interfaces with SWIG because it must - be done using the concept of typemaps which are not Python specific and - are written in a C-like syntax. - Therefore, I tend to prefer other gluing strategies and would only attempt - to use SWIG to wrap a very-large C/C++ library. - Nonetheless, there are others who use SWIG quite happily. - -\end_layout - -\begin_layout Subsection -SIP -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "SIP" - -\end_inset - -SIP is another tool for wrapping C/C++ libraries that is Python specific - and appears to have very good support for C++. - Riverbank Computing developed SIP in order to create Python bindings to - the QT library. - An interface file must be written to generate the binding, but the interface - file looks a lot like a C/C++ header file. - While SIP is not a full C++ parser, it understands quite a bit of C++ syntax - as well as its own special directives that allow modification of how the - Python binding is accomplished. - It also allows the user to define mappings between Python types and C/C++ - structrues and classes. - -\end_layout - -\begin_layout Subsection -Boost Python -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "Boost.Python" - -\end_inset - -Boost is a repository of C++ libraries and Boost.Python is one of those libraries - which provides a concise interface for binding C++ classes and functions - to Python. - The amazing part of the Boost.Python approach is that it works entirely - in pure C++ without introducing a new syntax. - Many users of C++ report that Boost.Python makes it possible to combine - the best of both worlds in a seamless fashion. - I have not used Boost.Python because I am not a big user of C++ and using - Boost to wrap simple C-subroutines is usually over-kill. - It's primary purpose is to make C++ classes available in Python. - So, if you have a set of C++ classes that need to be integrated cleanly - into Python, consider learning about and using Boost.Python. -\end_layout - -\begin_layout Subsection -Instant -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "Instant" - -\end_inset - -This is a relatively new package (called pyinstant at sourceforge) that - builds on top of SWIG to make it easy to inline C and C++ code in Python - very much like weave. - However, Instant builds extension modules on the fly with specific module - names and specific method names. - In this repsect it is more more like f2py in its behavior. - The extension modules are built on-the fly (as long as the SWIG is installed). - They can then be imported. - Here is an example of using Instant with NumPy arrays (adapted from the - test2 included in the Instant distribution): -\end_layout - -\begin_layout LyX-Code -code=""" -\end_layout - -\begin_layout LyX-Code -PyObject* add(PyObject* a_, PyObject* b_){ -\end_layout - -\begin_layout LyX-Code - /* -\end_layout - -\begin_layout LyX-Code - various checks -\end_layout - -\begin_layout LyX-Code - */ -\end_layout - -\begin_layout LyX-Code - PyArrayObject* a=(PyArrayObject*) a_; -\end_layout - -\begin_layout LyX-Code - PyArrayObject* b=(PyArrayObject*) b_; -\end_layout - -\begin_layout LyX-Code - int n = a->dimensions[0]; -\end_layout - -\begin_layout LyX-Code - int dims[1]; -\end_layout - -\begin_layout LyX-Code - dims[0] = n; -\end_layout - -\begin_layout LyX-Code - PyArrayObject* ret; -\end_layout - -\begin_layout LyX-Code - ret = (PyArrayObject*) PyArray_FromDims(1, dims, NPY_DOUBLE); -\end_layout - -\begin_layout LyX-Code - int i; -\end_layout - -\begin_layout LyX-Code - char *aj=a->data; -\end_layout - -\begin_layout LyX-Code - char *bj=b->data; -\end_layout - -\begin_layout LyX-Code - double *retj = (double *)ret->data; -\end_layout - -\begin_layout LyX-Code - for (i=0; i < n; i++) { -\end_layout - -\begin_layout LyX-Code - *retj++ = *((double *)aj) + *((double *)bj); -\end_layout - -\begin_layout LyX-Code - aj += a->strides[0]; -\end_layout - -\begin_layout LyX-Code - bj += b->strides[0]; -\end_layout - -\begin_layout LyX-Code - } -\end_layout - -\begin_layout LyX-Code -return (PyObject *)ret; -\end_layout - -\begin_layout LyX-Code -} -\end_layout - -\begin_layout LyX-Code -""" -\end_layout - -\begin_layout LyX-Code -import Instant, numpy -\end_layout - -\begin_layout LyX-Code -ext = Instant.Instant() -\end_layout - -\begin_layout LyX-Code -ext.create_extension(code=s, headers=["numpy/arrayobject.h"], - include_dirs=[numpy.get_include()], - init_code='import_array();', module="test2b_ext -") -\end_layout - -\begin_layout LyX-Code -import test2b_ext -\end_layout - -\begin_layout LyX-Code -a = numpy.arange(1000) -\end_layout - -\begin_layout LyX-Code -b = numpy.arange(1000) -\end_layout - -\begin_layout LyX-Code -d = test2b_ext.add(a,b) -\end_layout - -\begin_layout Standard -Except perhaps for the dependence on SWIG, Instant is a straightforward - utility for writing extension modules. - -\end_layout - -\begin_layout Subsection -PyInline -\end_layout - -\begin_layout Standard -This is a much older module that allows automatic building of extension - modules so that C-code can be included with Python code. - It's latest release (version 0.03) was in 2001, and it appears that it is - not being updated. - -\end_layout - -\begin_layout Subsection -PyFort -\end_layout - -\begin_layout Standard -PyFort is a nice tool for wrapping Fortran and Fortran-like C-code into - Python with support for Numeric arrays. - It was written by Paul Dubois, a distinguished computer scientist and the - very first maintainer of Numeric (now retired). - It is worth mentioning in the hopes that somebody will update PyFort to - work with NumPy arrays as well which now support either Fortran or C-style - contiguous arrays. - -\end_layout - -\begin_layout Chapter -Code Explanations -\end_layout - -\begin_layout Quotation -Fanaticism consists of redoubling your efforts when you have forgotten your - aim. -\end_layout - -\begin_layout Right Address ---- -\emph on -George Santayana -\end_layout - -\begin_layout Quotation -An authority is a person who can tell you more about something than you - really care to know. -\end_layout - -\begin_layout Right Address ---- -\emph on -Unknown -\end_layout - -\begin_layout Standard -This Chapter attempts to explain the logic behind some of the new pieces - of code. - The purpose behind these explanations is to enable somebody to be able - to understand the ideas behind the implementation somewhat more easily - than just staring at the code. - Perhaps in this way, the algorithms can be improved on, borrowed from, - and/or optimized. - -\end_layout - -\begin_layout Section -Memory model -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "ndarray!memory model" - -\end_inset - -One fundamental aspect of the ndarray is that an array is seen as a -\begin_inset Quotes eld -\end_inset - -chunk -\begin_inset Quotes erd -\end_inset - - of memory starting at some location. - The interpretation of this memory depends on the stride information. - For each dimension in an -\begin_inset Formula $N$ -\end_inset - --dimensional array, an integer (stride) dictates how many bytes must be - skipped to get to the next element in that dimension. - Unless you have a single-segment array, this stride information must be - consulted when traversing through an array. - It is not difficult to write code that accepts strides, you just have to - use (char *) pointers because strides are in units of bytes. - Keep in mind also that strides do not have to be unit-multiples of the - element size. - Also, remember that if the number of dimensions of the array is 0 (sometimes - called a rank-0 array), then the strides and dimensions variables are NULL. - -\end_layout - -\begin_layout Standard -Besides the structural information contained in the strides and dimensions - members of the PyArrayObject, the flags contain important information about - how the data may be accessed. - In particular, the NPY_ALIGNED flag is set when the memory is on a suitable - boundary according to the data-type array. - Even if you have a contiguous chunk of memory, you cannot just assume it - is safe to dereference a data-type-specific pointer to an element. - Only if the NPY_ALIGNED flag is set is this a safe operation (on some platforms - it will work but on others, like Solaris, it will cause a bus error). - The NPY_WRITEABLE should also be ensured if you plan on writing to the - memory area of the array. - It is also possible to obtain a pointer to an unwriteable memory area. - Sometimes, writing to the memory area when the NPY_WRITEABLE flag is not - set will just be rude. - Other times it can cause program crashes ( -\emph on -e.g. - -\emph default - a data-area that is a read-only memory-mapped file). -\end_layout - -\begin_layout Section -Data-type encapsulation -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "dtype" - -\end_inset - -The data-type is an important abstraction of the ndarray. - Operations will look to the data-type to provide the key functionality - that is needed to operate on the array. - This functionality is provided in the list of function pointers pointed - to by the 'f' member of the PyArray_Descr structure. - In this way, the number of data-types can be extended simply by providing - a PyArray_Descr structure with suitable function pointers in the 'f' member. - For built-in types there are some optimizations that by-pass this mechanism, - but the point of the data-type abstraction is to allow new data-types to - be added. -\end_layout - -\begin_layout Standard -One of the built-in data-types, the void data-type allows for arbitrary - records containing 1 or more fields as elements of the array. - A field is simply another data-type object along with an offset into the - current record. - In order to support arbitrarily nested fields, several recursive implementation -s of data-type access are implemented for the void type. - A common idiom is to cycle through the elements of the dictionary and perform - a specific operation based on the data-type object stored at the given - offset. - These offsets can be arbitrary numbers. - Therefore, the possibility of encountering mis-aligned data must be recognized - and taken into account if necessary. - -\end_layout - -\begin_layout Section -N-D Iterators -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "array iterator" - -\end_inset - -A very common operation in much of NumPy code is the need to iterate over - all the elements of a general, strided, N-dimensional array. - This operation of a general-purpose N-dimensional loop is abstracted in - the notion of an iterator object. - To write an N-dimensional loop, you only have to create an iterator object - from an ndarray, work with the dataptr member of the iterator object structure - and call the macro PyArray_ITER_NEXT(it) on the iterator object to move - to the next element. - The -\begin_inset Quotes eld -\end_inset - -next -\begin_inset Quotes erd -\end_inset - - element is always in C-contiguous order. - The macro works by first special casing the C-contiguous, 1-d, and 2-d - cases which work very simply. - -\end_layout - -\begin_layout Standard -For the general case, the iteration works by keeping track of a list of - coordinate counters in the iterator object. - At each iteration, the last coordinate counter is increased (starting from - 0). - If this counter is smaller then one less than the size of the array in - that dimension (a pre-computed and stored value), then the counter is increased - and the dataptr member is increased by the strides in that dimension and - the macro ends. - If the end of a dimension is reached, the counter for the last dimension - is reset to zero and the dataptr is moved back to the beginning of that - dimension by subtracting the strides value times one less than the number - of elements in that dimension (this is also pre-computed and stored in - the backstrides member of the iterator object). - In this case, the macro does not end, but a local dimension counter is - decremented so that the next-to-last dimension replaces the role that the - last dimension played and the previously-described tests are executed again - on the next-to-last dimension. - In this way, the dataptr is adjusted appropriately for arbitrary striding. - -\end_layout - -\begin_layout Standard -The coordinates member of the PyArrayIterObject structure maintains the - current N-d counter unless the underlying array is C-contiguous in which - case the coordinate counting is by-passed. - The index member of the PyArrayIterObject keeps track of the current flat - index of the iterator. - It is updated by the PyArray_ITER_NEXT macro. - -\end_layout - -\begin_layout Section -Broadcasting -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "broadcasting" - -\end_inset - -In Numeric, broadcasting was implemented in several lines of code buried - deep in ufuncobject.c. - In NumPy, the notion of broadcasting has been abstracted so that it can - be performed in multiple places. - Broadcasting is handled by the function PyArray_Broadcast. - This function requires a PyArrayMultiIterObject (or something that is a - binary equivalent) to be passed in. - The PyArrayMultiIterObject keeps track of the broadcasted number of dimensions - and size in each dimension along with the total size of the broadcasted - result. - It also keeps track of the number of arrays being broadcast and a pointer - to an iterator for each of the arrays being broadcasted. - -\end_layout - -\begin_layout Standard -The PyArray_Broadcast function takes the iterators that have already been - defined and uses them to determine the broadcast shape in each dimension - (to create the iterators at the same time that broadcasting occurs then - use the PyMuliIter_New function). - Then, the iterators are adjusted so that each iterator thinks it is iterating - over an array with the broadcasted size. - This is done by adjusting the iterators number of dimensions, and the shape - in each dimension. - This works because the iterator strides are also adjusted. - Broadcasting only adjusts (or adds) length-1 dimensions. - For these dimensions, the strides variable is simply set to 0 so that the - data-pointer for the iterator over that array doesn't move as the broadcasting - operation operates over the extended dimension. - -\end_layout - -\begin_layout Standard -Broadcasting was always implemented in Numeric using 0-valued strides for - the extended dimensions. - It is done in exactly the same way in NumPy. - The big difference is that now the array of strides is kept track of in - a PyArrayIterObject, the iterators involved in a broadcasted result are - kept track of in a PyArrayMultiIterObject, and the PyArray_BroadCast call - implements the broad-casting rules. - -\end_layout - -\begin_layout Section -Array Scalars -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "array scalars" - -\end_inset - -The array scalars offer a hierarchy of Python types that allow a one-to-one - correspondence between the data-type stored in an array and the Python-type - that is returned when an element is extracted from the array. - An exception to this rule was made with object arrays. - Object arrays are heterogeneous collections of arbitrary Python objects. - When you select an item from an object array, you get back the original - Python object (and not an object array scalar which does exist but is rarely - used for practical purposes). -\end_layout - -\begin_layout Standard -The array scalars also offer the same methods and attributes as arrays with - the intent that the same code can be used to support arbitrary dimensions - (including 0-dimensions). - The array scalars are read-only (immutable) with the exception of the void - scalar which can also be written to so that record-array field setting - works more naturally (a[0]['f1'] = -\family typewriter -value -\family default -). -\end_layout - -\begin_layout Section -Advanced ( -\begin_inset Quotes eld -\end_inset - -Fancy -\begin_inset Quotes erd -\end_inset - -) Indexing -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "indexing" - -\end_inset - -The implementation of advanced indexing represents some of the most difficult - code to write and explain. - In fact, there are two implementations of advanced indexing. - The first works only with 1-d arrays and is implemented to handle expressions - involving a.flat[obj]. - The second is general-purpose that works for arrays of -\begin_inset Quotes eld -\end_inset - -arbitrary dimension -\begin_inset Quotes erd -\end_inset - - (up to a fixed maximum). - The one-dimensional indexing approaches were implemented in a rather straightfo -rward fashion, and so it is the general-purpose indexing code that will - be the focus of this section. - -\end_layout - -\begin_layout Standard -There is a multi-layer approach to indexing because the indexing code can - at times return an array scalar and at other times return an array. - The functions with -\begin_inset Quotes eld -\end_inset - -_nice -\begin_inset Quotes erd -\end_inset - - appended to their name do this special handling while the function without - the _nice appendage always return an array (perhaps a 0-dimensional array). - Some special-case optimizations (the index being an integer scalar, and - the index being a tuple with as many dimensions as the array) are handled - in array_subscript_nice function which is what Python calls when presented - with the code -\begin_inset Quotes eld -\end_inset - -a[obj]. -\begin_inset Quotes erd -\end_inset - - These optimizations allow fast single-integer indexing, and also ensure - that a 0-dimensional array is not created only to be discarded as the array - scalar is returned instead. - This provides significant speed-up for code that is selecting many scalars - out of an array (such as in a loop). - However, it is still not faster than simply using a list to store standard - Python scalars, because that is optimized by the Python interpreter itself. - -\end_layout - -\begin_layout Standard -After these optimizations, the array_subscript function itself is called. - This function first checks for field selection which occurs when a string - is passed as the indexing object. - Then, 0-d arrays are given special-case consideration. - Finally, the code determines whether or not advanced, or fancy, indexing - needs to be performed. - If fancy indexing is not needed, then standard view-based indexing is performed - using code borrowed from Numeric which parses the indexing object and returns - the offset into the data-buffer and the dimensions necessary to create - a new view of the array. - The strides are also changed by multiplying each stride by the step-size - requested along the corresponding dimension. - -\end_layout - -\begin_layout Subsection -Fancy-indexing check -\end_layout - -\begin_layout Standard -The fancy_indexing_check routine determines whether or not to use standard - view-based indexing or new copy-based indexing. - If the indexing object is a tuple, then view-based indexing is assumed - by default. - Only if the tuple contains an array object or a sequence object is fancy-indexi -ng assumed. - If the indexing object is an array, then fancy indexing is automatically - assumed. - If the indexing object is any other kind of sequence, then fancy-indexing - is assumed by default. - This is over-ridden to simple indexing if the sequence contains any slice, - newaxis, or Ellipsis objects, and no arrays or additional sequences are - also contained in the sequence. - The purpose of this is to allow the construction of -\begin_inset Quotes eld -\end_inset - -slicing -\begin_inset Quotes erd -\end_inset - - sequences which is a common technique for building up code that works in - arbitrary numbers of dimensions. - -\end_layout - -\begin_layout Subsection -Fancy-indexing implementation -\end_layout - -\begin_layout Standard -The concept of indexing was also abstracted using the idea of an iterator. - If fancy indexing is performed, then a PyArrayMapIterObject is created. - This internal object is not exposed to Python. - It is created in order to handle the fancy-indexing at a high-level. - Both get and set fancy-indexing operations are implemented using this object. - Fancy indexing is abstracted into three separate operations: (1) creating - the PyArrayMapIterObject from the indexing object, (2) binding the PyArrayMapIt -erObject to the array being indexed, and (3) getting (or setting) the items - determined by the indexing object. - There is an optimization implemented so that the PyArrayIterObject (which - has it's own less complicated fancy-indexing) is used for indexing when - possible. - -\end_layout - -\begin_layout Subsubsection -Creating the mapping object -\end_layout - -\begin_layout Standard -The first step is to convert the indexing objects into a standard form where - iterators are created for all of the index array inputs and all Boolean - arrays are converted to equivalent integer index arrays (as if nonzero(arr) - had been called). - Finally, all integer arrays are replaced with the integer 0 in the indexing - object and all of the index-array iterators are -\begin_inset Quotes eld -\end_inset - -broadcast -\begin_inset Quotes erd -\end_inset - - to the same shape. - -\end_layout - -\begin_layout Subsubsection -Binding the mapping object -\end_layout - -\begin_layout Standard -When the mapping object is created it does not know which array it will - be used with so once the index iterators are constructed during mapping-object - creation, the next step is to associate these iterators with a particular - ndarray. - This process interprets any ellipsis and slice objects so that the index - arrays are associated with the appropriate axis (the axis indicated by - the iteraxis entry corresponding to the iterator for the integer index - array). - This information is then used to check the indices to be sure they are - within range of the shape of the array being indexed. - The presence of ellipsis and/or slice objects implies a sub-space iteration - that is accomplished by extracting a sub-space view of the array (using - the index object resulting from replacing all the integer index arrays - with 0) and storing the information about where this sub-space starts in - the mapping object. - This is used later during mapping-object iteration to select the correct - elements from the underlying array. - -\end_layout - -\begin_layout Subsubsection -Getting (or Setting) -\end_layout - -\begin_layout Standard -After the mapping object is successfully bound to a particular array, the - mapping object contains the shape of the resulting item as well as iterator - objects that will walk through the currently-bound array and either get - or set its elements as needed. - The walk is implemented using the PyArray_MapIterNext function. - This function sets the coordinates of an iterator object into the current - array to be the next coordinate location indicated by all of the indexing-objec -t iterators while adjusting, if necessary, for the presence of a sub-space. - The result of this function is that the dataptr member of the mapping object - structure is pointed to the next position in the array that needs to be - copied out or set to some value. - -\end_layout - -\begin_layout Standard -When advanced indexing is used to extract an array, an iterator for the - new array is constructed and advanced in phase with the mapping object - iterator. - When advanced indexing is used to place values in an array, a special -\begin_inset Quotes eld -\end_inset - -broadcasted -\begin_inset Quotes erd -\end_inset - - iterator is constructed from the object being placed into the array so - that it will only work if the values used for setting have a shape that - is -\begin_inset Quotes eld -\end_inset - -broadcastable -\begin_inset Quotes erd -\end_inset - - to the shape implied by the indexing object. - -\end_layout - -\begin_layout Section -Universal Functions -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "ufunc|(" - -\end_inset - -Universal functions are callable objects that take -\begin_inset Formula $N$ -\end_inset - - inputs and produce -\begin_inset Formula $M$ -\end_inset - - outputs by wrapping basic 1-d loops that work element-by-element into full - easy-to use functions that seamlessly implement broadcasting, type-checking - and buffered coercion, and output-argument handling. - New universal functions are normally created in C, although there is a - mechanism for creating ufuncs from Python functions ( -\series bold -frompyfunc -\series default -). - The user must supply a 1-d loop that implements the basic function taking - the input scalar values and placing the resulting scalars into the appropriate - output slots as explaine n implementation. - -\end_layout - -\begin_layout Subsection -Setup -\end_layout - -\begin_layout Standard -Every ufunc calculation involves some overhead related to setting up the - calculation. - The practical significance of this overhead is that even though the actual - calculation of the ufunc is very fast, you will be able to write array - and type-specific code that will work faster for small arrays than the - ufunc. - In particular, using ufuncs to perform many calculations on 0-d arrays - will be slower than other Python-based solutions (the silently-imported - scalarmath module exists precisely to give array scalars the look-and-feel - of ufunc-based calculations with significantly reduced overhead). - -\end_layout - -\begin_layout Standard -When a ufunc is called, many things must be done. - The information collected from these setup operations is stored in a loop-objec -t. - This loop object is a C-structure (that could become a Python object but - is not initialized as such because it is only used internally). - This loop object has the layout needed to be used with PyArray_Broadcast - so that the broadcasting can be handled in the same way as it is handled - in other sections of code. - -\end_layout - -\begin_layout Standard -The first thing done is to look-up in the thread-specific global dictionary - the current values for the buffer-size, the error mask, and the associated - error object. - The state of the error mask controls what happens when an error-condiction - is found. - It should be noted that checking of the hardware error flags is only performed - after each 1-d loop is executed. - This means that if the input and output arrays are contiguous and of the - correct type so that a single 1-d loop is performed, then the flags may - not be checked until all elements of the array have been calcluated. - Looking up these values in a thread-specific dictionary takes time which - is easily ignored for all but very small arrays. - -\end_layout - -\begin_layout Standard -After checking, the thread-specific global variables, the inputs are evaluated - to determine how the ufunc should proceed and the input and output arrays - are constructed if necessary. - Any inputs which are not arrays are converted to arrays (using context - if necessary). - Which of the inputs are scalars (and therefore converted to 0-d arrays) - is noted. - -\end_layout - -\begin_layout Standard -Next, an appropriate 1-d loop is selected from the 1-d loops available to - the ufunc based on the input array types. - This 1-d loop is selected by trying to match the signature of the data-types - of the inputs against the available signatures. - The signatures corresponding to built-in types are stored in the types - member of the ufunc structure. - The signatures corresponding to user-defined types are stored in a linked-list - of function-information with the head element stored as a -\family typewriter -CObject -\family default - in the userloops dictionary keyed by the data-type number (the first user-defin -ed type in the argument list is used as the key). - The signatures are searched until a signature is found to which the input - arrays can all be cast safely (ignoring any scalar arguments which are - not allowed to determine the type of the result). - The implication of this search procedure is that -\begin_inset Quotes eld -\end_inset - -lesser types -\begin_inset Quotes erd -\end_inset - - should be placed below -\begin_inset Quotes eld -\end_inset - -larger types -\begin_inset Quotes erd -\end_inset - - when the signatures are stored. - If no 1-d loop is found, then an error is reported. - Otherwise, the argument_list is updated with the stored signature --- in - case casting is necessary and to fix the output types assumed by the 1-d - loop. -\end_layout - -\begin_layout Standard -If the ufunc has 2 inputs and 1 output and the second input is an Object - array then a special-case check is performed so that NotImplemented is - returned if the second input is not an ndarray, has the __array_priority__ - attribute, and has an __r<op>__ special method. - In this way, Python is signaled to give the other object a chance to complete - the operation instead of using generic object-array calculations. - This allows (for example) sparse matrices to override the multiplication - operator 1-d loop. - -\end_layout - -\begin_layout Standard -For input arrays that are smaller than the specified buffer size, copies - are made of all non-contiguous, mis-aligned, or out-of-byteorder arrays - to ensure that for small arrays, a single-loop is used. - Then, array iterators are created for all the input arrays and the resulting - collection of iterators is broadcast to a single shape. - -\end_layout - -\begin_layout Standard -The output arguments (if any) are then processed and any missing return - arrays are constructed. - If any provided output array doesn't have the correct type (or is mis-aligned) - and is smaller than the buffer size, then a new output array is constructed - with the special UPDATEIFCOPY flag set so that when it is DECREF'd on completio -n of the function, it's contents will be copied back into the output array. - Iterators for the output arguments are then processed. - -\end_layout - -\begin_layout Standard -Finally, the decision is made about how to execute the looping mechanism - to ensure that all elements of the input arrays are combined to produce - the output arrays of the correct type. - The options for loop execution are one-loop (for contiguous, aligned, and - correct data-type), strided-loop (for non-contiguous but still aligned - and correct data-type), and a buffered loop (for mis-aligned or incorrect - data-type situations). - Depending on which execution method is called for, the loop is then setup - and computed. - -\end_layout - -\begin_layout Subsection -Function call -\end_layout - -\begin_layout Standard -This section describes how the basic universal function computation loop - is setup and executed for each of the three different kinds of execution - possibilities. - If NPY_ALLOW_THREADS is defined during compilation, then the Python Global - Interpreter Lock (GIL) is released prior to calling all of these loops - (as long as they don't involve object arrays). - It is re-acquired if necessary to handle error conditions. - The hardware error flags are checked only after the 1-d loop is calcluated. - -\end_layout - -\begin_layout Subsubsection -One Loop -\end_layout - -\begin_layout Standard -This is the simplest case of all. - The ufunc is executed by calling the underlying 1-d loop exactly once. - This is possible only when we have aligned data of the correct type (including - byte-order) for both input and output and all arrays have uniform strides - (either contiguous, 0-d, or 1-d). - In this case, the 1-d computational loop is called once to compute the - calculation for the entire array. - Note that the hardware error flags are only checked after the entire calculatio -n is complete. - -\end_layout - -\begin_layout Subsubsection -Strided Loop -\end_layout - -\begin_layout Standard -When the input and output arrays are aligned and of the correct type, but - the striding is not uniform (non-contiguous and 2-d or larger), then a - second looping structure is employed for the calculation. - This approach converts all of the iterators for the input and output arguments - to iterate over all but the largest dimension. - The inner loop is then handled by the underlying 1-d computational loop. - The outer loop is a standard iterator loop on the converted iterators. - The hardware error flags are checked after each 1-d loop is completed. - -\end_layout - -\begin_layout Subsubsection -Buffered Loop -\end_layout - -\begin_layout Standard -This is the code that handles the situation whenever the input and/or output - arrays are either misaligned or of the wrong data-type (including being - byte-swapped) from what the underlying 1-d loop expects. - The arrays are also assumed to be non-contiguous. - The code works very much like the strided loop except for the inner 1-d - loop is modified so that pre-processing is performed on the inputs and - post-processing is performed on the outputs in bufsize chunks (where bufsize - is a user-settable parameter). - The underlying 1-d computational loop is called on data that is copied - over (if it needs to be). - The setup code and the loop code is considerably more complicated in this - case because it has to handle: -\end_layout - -\begin_layout Itemize -memory allocation of the temporary buffers -\end_layout - -\begin_layout Itemize -deciding whether or not to use buffers on the input and output data (mis-aligned - and/or wrong data-type) -\end_layout - -\begin_layout Itemize -copying and possibly casting data for any inputs or outputs for which buffers - are necessary. -\end_layout - -\begin_layout Itemize -special-casing Object arrays so that reference counts are properly handled - when copies and/or casts are necessary. - -\end_layout - -\begin_layout Itemize -breaking up the inner 1-d loop into bufsize chunks (with a possible remainder). - -\end_layout - -\begin_layout Standard -Again, the hardware error flags are checked at the end of each 1-d loop. -\end_layout - -\begin_layout Subsection -Final output manipulation -\end_layout - -\begin_layout Standard -Ufuncs allow other array-like classes to be passed seamlessly through the - interface in that inputs of a particular class will induce the outputs - to be of that same class. - The mechanism by which this works is the following. - If any of the inputs are not ndarrays and define the -\series bold -__array_wrap__ -\series default - method, then the class with the largest -\series bold -__array_priority__ -\series default - attribute determines the type of all the outputs (with the exception of - any output arrays passed in). - The -\series bold -__array_wrap__ -\series default - method of the input array will be called with the ndarray being returned - from the ufunc as it's input. - There are two calling styles of the -\series bold -__array_wrap__ -\series default - function supported. - The first takes the ndarray as the first argument and a tuple of -\begin_inset Quotes eld -\end_inset - -context -\begin_inset Quotes erd -\end_inset - - as the second argument. - The context is (ufunc, arguments, output argument number). - This is the first call tried. - If a TypeError occurs, then the function is called with just the ndarray - as the first argument. - -\end_layout - -\begin_layout Subsection -Methods -\end_layout - -\begin_layout Standard -Their are three methods of ufuncs that require calculation similar to the - general-purpose ufuncs. - These are reduce, accumulate, and reduceat. - Each of these methods requires a setup command followed by a loop. - There are four loop styles possible for the methods corresponding to no-element -s, one-element, strided-loop, and buffered-loop. - These are the same basic loop styles as implemented for the general purpose - function call except for the no-element and one-element cases which are - special-cases occurring when the input array objects have 0 and 1 elements - respectively. - -\end_layout - -\begin_layout Subsubsection -Setup -\end_layout - -\begin_layout Standard -The setup function for all three methods is -\family typewriter -construct_reduce -\family default -. - This function creates a reducing loop object and fills it with parameters - needed to complete the loop. - All of the methods only work on ufuncs that take 2-inputs and return 1 - output. - Therefore, the underlying 1-d loop is selected assuming a signature of - [ -\family typewriter -otype -\family default -, -\family typewriter -otype -\family default -, -\family typewriter -otype -\family default -] where -\family typewriter -otype -\family default - is the requested reduction data-type. - The buffer size and error handling is then retrieved from (per-thread) - global storage. - For small arrays that are mis-aligned or have incorrect data-type, a copy - is made so that the un-buffered section of code is used. - Then, the looping strategy is selected. - If there is 1 element or 0 elements in the array, then a simple looping - method is selected. - If the array is not mis-aligned and has the correct data-type, then strided - looping is selected. - Otherwise, buffered looping must be performed. - Looping parameters are then established, and the return array is constructed. - The output array is of a different shape depending on whether the method - is reduce, accumulate, or reduceat. - If an output array is already provided, then it's shape is checked. - If the output array is not C-contiguous, aligned, and of the correct data - type, then a temporary copy is made with the UPDATEIFCOPY flag set. - In this way, the methods will be able to work with a well-behaved output - array but the result will be copied back into the true output array when - the method computation is complete. - Finally, iterators are set up to loop over the correct axis (depending - on the value of axis provided to the method) and the setup routine returns - to the actual computation routine. - -\end_layout - -\begin_layout Subsubsection -Reduce -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "ufunc!methods!reduce" - -\end_inset - -All of the ufunc methods use the same underlying 1-d computational loops - with input and output arguments adjusted so that the appropriate reduction - takes place. - For example, the key to the functioning of reduce is that the 1-d loop - is called with the output and the second input pointing to the same position - in memory and both having a step-size of 0. - The first input is pointing to the input array with a step-size given by - the appropriate stride for the selected axis. - In this way, the operation performed is -\begin_inset Formula \begin{eqnarray*} -o & = & i[0]\\ -o & = & i[k]\textrm{ <op> }o\quad k=1\ldots N\end{eqnarray*} - -\end_inset - - where -\begin_inset Formula $N+1$ -\end_inset - - is the number of elements in the input, -\begin_inset Formula $i$ -\end_inset - -, -\begin_inset Formula $o$ -\end_inset - - is the output, and -\begin_inset Formula $i[k]$ -\end_inset - - is the -\begin_inset Formula $k^{\textrm{th}}$ -\end_inset - - element of -\begin_inset Formula $i$ -\end_inset - - along the selected axis. - This basic operations is repeated for arrays with greater than 1 dimension - so that the reduction takes place for every 1-d sub-array along the selected - axis. - An iterator with the selected dimension removed handles this looping. - -\end_layout - -\begin_layout Standard -For buffered loops, care must be taken to copy and cast data before the - loop function is called because the underlying loop expects aligned data - of the correct data-type (including byte-order). - The buffered loop must handle this copying and casting prior to calling - the loop function on chunks no greater than the user-specified bufsize. - -\end_layout - -\begin_layout Subsubsection -Accumulate -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "ufunc!methods!accumulate" - -\end_inset - -The accumulate function is very similar to the reduce function in that the - output and the second input both point to the output. - The difference is that the second input points to memory one stride behind - the current output pointer. - Thus, the operation performed is -\end_layout - -\begin_layout Standard -\begin_inset Formula \begin{eqnarray*} -o[0] & = & i[0]\\ -o[k] & = & i[k]\textrm{ <op> }o[k-1]\quad k=1\ldots N.\end{eqnarray*} - -\end_inset - - The output has the same shape as the input and each 1-d loop operates over - -\begin_inset Formula $N$ -\end_inset - - elements when the shape in the selected axis is -\begin_inset Formula $N+1$ -\end_inset - -. - Again, buffered loops take care to copy and cast the data before calling - the underlying 1-d computational loop. - -\end_layout - -\begin_layout Subsubsection -Reduceat -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "ufunc!methods!reduceat" - -\end_inset - -The reduceat function is a generalization of both the reduce and accumulate - functions. - It implements a reduce over ranges of the input array specified by indices. - The extra indices argument is checked to be sure that every input is not - too large for the input array along the selected dimension before the loop - calculations take place. - The loop implementation is handled using code that is very similar to the - reduce code repeated as many times as there are elements in the indices - input. - In particular: the first input pointer passed to the underlying 1-d computation -al loop points to the input array at the correct location indicated by the - index array. - In addition, the output pointer and the second input pointer passed to - the underlying 1-d loop point to the same position in memory. - The size of the 1-d computational loop is fixed to be the difference between - the current index and the next index (when the current index is the last - index, then the next index is assumed to be the length of the array along - the selected dimension). - In this way, the 1-d loop will implement a reduce over the specified indices. - -\end_layout - -\begin_layout Standard -Mis-aligned or a loop data-type that does not match the input and/or output - data-type is handled using buffered code where-in data is copied to a temporary - buffer and cast to the correct data-type if necessary prior to calling - the underlying 1-d function. - The temporary buffers are created in (element) sizes no bigger than the - user settable buffer-size value. - Thus, the loop must be flexible enough to call the underlying 1-d computational - loop enough times to complete the total calculation in chunks no bigger - than the buffer-size. - -\begin_inset LatexCommand index -name "ufunc|)" - -\end_inset - - -\end_layout - -\end_body -\end_document diff --git a/numpy/doc/numpybook/comparison/ctypes/code.c b/numpy/doc/numpybook/comparison/ctypes/code.c deleted file mode 100644 index 0927a7ed3..000000000 --- a/numpy/doc/numpybook/comparison/ctypes/code.c +++ /dev/null @@ -1,60 +0,0 @@ - -typedef struct {double real; double imag;} cdouble; -typedef struct {double real; double imag;} cfloat; - -/* Add arrays of contiguous data */ -void zadd(cdouble *a, cdouble *b, cdouble *c, long n) -{ - while (n--) { - c->real = a->real + b->real; - c->imag = a->imag + b->imag; - a++; b++; c++; - } -} - -void cadd(cfloat *a, cfloat *b, cfloat *c, long n) -{ - while (n--) { - c->real = a->real + b->real; - c->imag = a->imag + b->imag; - a++; b++; c++; - } -} - -void dadd(double *a, double *b, double *c, long n) -{ - while (n--) { - *c++ = *a++ + *b++; - } -} - -void sadd(float *a, float *b, float *c, long n) -{ - while (n--) { - *c++ = *a++ + *b++; - } -} - -/* Assumes b is contiguous and - a has strides that are multiples of sizeof(double) -*/ -void dfilter2d(double *a, double *b, int *astrides, int *dims) -{ - int i, j, M, N, S0, S1; - int r, c, rm1, rp1, cp1, cm1; - - M = dims[0]; N = dims[1]; - S0 = astrides[0]/sizeof(double); - S1=astrides[1]/sizeof(double); - for (i=1; i<M-1; i++) { - r = i*S0; rp1 = r+S0; rm1 = r-S0; - for (j=1; j<N-1; j++) { - c = j*S1; cp1 = j+S1; cm1 = j-S1; - b[i*N+j] = a[r+c] + \ - (a[rp1+c] + a[rm1+c] + \ - a[r+cp1] + a[r+cm1])*0.5 + \ - (a[rp1+cp1] + a[rp1+cm1] + \ - a[rm1+cp1] + a[rm1+cp1])*0.25; - } - } -} diff --git a/numpy/doc/numpybook/comparison/ctypes/filter.py b/numpy/doc/numpybook/comparison/ctypes/filter.py deleted file mode 100644 index e92aa5eab..000000000 --- a/numpy/doc/numpybook/comparison/ctypes/filter.py +++ /dev/null @@ -1,26 +0,0 @@ -__all__ = ['filter2d'] - -import numpy as N -import os -import ctypes - -_path = os.path.dirname('__file__') -lib = N.ctypeslib.load_library('code', _path) - -lib.dfilter2d.restype = None -lib.dfilter2d.argtypes = [N.ctypeslib.ndpointer(float, ndim=2, - flags='aligned'), - N.ctypeslib.ndpointer(float, ndim=2, - flags='aligned, contiguous,'\ - 'writeable'), - ctypes.POINTER(N.ctypeslib.c_intp), - ctypes.POINTER(N.ctypeslib.c_intp)] - -def filter2d(a): - a = N.require(a, float, ['ALIGNED']) - b = N.zeros_like(a) - lib.dfilter2d(a, b, a.ctypes.strides, a.ctypes.shape) - return b - - - diff --git a/numpy/doc/numpybook/comparison/ctypes/interface.py b/numpy/doc/numpybook/comparison/ctypes/interface.py deleted file mode 100644 index 06c12aef3..000000000 --- a/numpy/doc/numpybook/comparison/ctypes/interface.py +++ /dev/null @@ -1,60 +0,0 @@ -__all__ = ['add', 'filter2d'] - -import numpy as N -import os -import ctypes - -_path = os.path.dirname('__file__') -lib = N.ctypeslib.load_library('code', _path) -_typedict = {'zadd' : complex, - 'sadd' : N.single, - 'cadd' : N.csingle, - 'dadd' : float} -for name in _typedict.keys(): - val = getattr(lib, name) - val.restype = None - _type = _typedict[name] - val.argtypes = [N.ctypeslib.ndpointer(_type, flags='aligned, contiguous'), - N.ctypeslib.ndpointer(_type, flags='aligned, contiguous'), - N.ctypeslib.ndpointer(_type, flags='aligned, contiguous,'\ - 'writeable'), - N.ctypeslib.c_intp] - -lib.dfilter2d.restype=None -lib.dfilter2d.argtypes = [N.ctypeslib.ndpointer(float, ndim=2, - flags='aligned'), - N.ctypeslib.ndpointer(float, ndim=2, - flags='aligned, contiguous,'\ - 'writeable'), - ctypes.POINTER(N.ctypeslib.c_intp), - ctypes.POINTER(N.ctypeslib.c_intp)] - -def select(dtype): - if dtype.char in ['?bBhHf']: - return lib.sadd, N.single - elif dtype.char in ['F']: - return lib.cadd, N.csingle - elif dtype.char in ['DG']: - return lib.zadd, complex - else: - return lib.dadd, float - return func, ntype - -def add(a, b): - requires = ['CONTIGUOUS', 'ALIGNED'] - a = N.asanyarray(a) - func, dtype = select(a.dtype) - a = N.require(a, dtype, requires) - b = N.require(b, dtype, requires) - c = N.empty_like(a) - func(a,b,c,a.size) - return c - -def filter2d(a): - a = N.require(a, float, ['ALIGNED']) - b = N.zeros_like(a) - lib.dfilter2d(a, b, a.ctypes.strides, a.ctypes.shape) - return b - - - diff --git a/numpy/doc/numpybook/comparison/ctypes/newfile.dat b/numpy/doc/numpybook/comparison/ctypes/newfile.dat Binary files differdeleted file mode 100644 index d3899c294..000000000 --- a/numpy/doc/numpybook/comparison/ctypes/newfile.dat +++ /dev/null diff --git a/numpy/doc/numpybook/comparison/ctypes/timeme b/numpy/doc/numpybook/comparison/ctypes/timeme deleted file mode 100755 index 2f7cd297f..000000000 --- a/numpy/doc/numpybook/comparison/ctypes/timeme +++ /dev/null @@ -1,2 +0,0 @@ -python2.4 -m timeit -s "import numpy as N; a=N.random.rand(100,200); import filter" "b = filter.filter(a)" - diff --git a/numpy/doc/numpybook/comparison/f2py/add.f b/numpy/doc/numpybook/comparison/f2py/add.f deleted file mode 100644 index 26e45da34..000000000 --- a/numpy/doc/numpybook/comparison/f2py/add.f +++ /dev/null @@ -1,45 +0,0 @@ -C - SUBROUTINE ZADD(A,B,C,N) -C - DOUBLE COMPLEX A(*) - DOUBLE COMPLEX B(*) - DOUBLE COMPLEX C(*) - INTEGER N - DO 20 J = 1, N - C(J) = A(J) + B(J) - 20 CONTINUE - END - - SUBROUTINE CADD(A,B,C,N) -C - COMPLEX A(*) - COMPLEX B(*) - COMPLEX C(*) - INTEGER N - DO 20 J = 1, N - C(J) = A(J) + B(J) - 20 CONTINUE - END - - SUBROUTINE DADD(A,B,C,N) -C - DOUBLE PRECISION A(*) - DOUBLE PRECISION B(*) - DOUBLE PRECISION C(*) - INTEGER N - DO 20 J = 1, N - C(J) = A(J) + B(J) - 20 CONTINUE - END - - SUBROUTINE SADD(A,B,C,N) -C - REAL A(*) - REAL B(*) - REAL C(*) - INTEGER N - DO 20 J = 1, N - C(J) = A(J) + B(J) - 20 CONTINUE - END - diff --git a/numpy/doc/numpybook/comparison/f2py/add.pyf b/numpy/doc/numpybook/comparison/f2py/add.pyf deleted file mode 100644 index 1a9ac2c9e..000000000 --- a/numpy/doc/numpybook/comparison/f2py/add.pyf +++ /dev/null @@ -1,34 +0,0 @@ -! -*- f90 -*- -! Note: the context of this file is case sensitive. - -python module add ! in - interface ! in :add - subroutine zadd(a,b,c,n) ! in :add:add.f - double complex dimension(n) :: a - double complex dimension(n) :: b - double complex intent(out), dimension(n) :: c - integer intent(hide), depend(a) :: n = len(a) - end subroutine zadd - subroutine cadd(a,b,c,n) ! in :add:add.f - complex dimension(*) :: a - complex dimension(*) :: b - complex dimension(*) :: c - integer :: n - end subroutine cadd - subroutine dadd(a,b,c,n) ! in :add:add.f - double precision dimension(*) :: a - double precision dimension(*) :: b - double precision dimension(*) :: c - integer :: n - end subroutine dadd - subroutine sadd(a,b,c,n) ! in :add:add.f - real dimension(*) :: a - real dimension(*) :: b - real dimension(*) :: c - integer :: n - end subroutine sadd - end interface -end python module add - -! This file was auto-generated with f2py (version:2_2694). -! See http://cens.ioc.ee/projects/f2py2e/ diff --git a/numpy/doc/numpybook/comparison/f2py/filter.f b/numpy/doc/numpybook/comparison/f2py/filter.f deleted file mode 100644 index a817a866f..000000000 --- a/numpy/doc/numpybook/comparison/f2py/filter.f +++ /dev/null @@ -1,20 +0,0 @@ - - SUBROUTINE DFILTER2D(A,B,M,N) -C - DOUBLE PRECISION A(M,N) - DOUBLE PRECISION B(M,N) - INTEGER N, M -CF2PY INTENT(OUT) :: B -CF2PY INTENT(HIDE) :: N -CF2PY INTENT(HIDE) :: M - DO 20 I = 2,M-1 - DO 40 J=2,N-1 - B(I,J) = A(I,J) + - $ (A(I-1,J)+A(I+1,J) + - $ A(I,J-1)+A(I,J+1) )*0.5D0 + - $ (A(I-1,J-1) + A(I-1,J+1) + - $ A(I+1,J-1) + A(I+1,J+1))*0.25D0 - 40 CONTINUE - 20 CONTINUE - END - diff --git a/numpy/doc/numpybook/comparison/f2py/filter.pyf b/numpy/doc/numpybook/comparison/f2py/filter.pyf deleted file mode 100644 index 1e4bc37f4..000000000 --- a/numpy/doc/numpybook/comparison/f2py/filter.pyf +++ /dev/null @@ -1,16 +0,0 @@ -! -*- f90 -*- -! Note: the context of this file is case sensitive. - -python module filter ! in - interface ! in :filter - subroutine dfilter2d(a,b,m,n) ! in :filter:filter.f - double precision dimension(m,n) :: a - double precision dimension(m,n),intent(out),depend(m,n) :: b - integer optional,intent(hide),check(shape(a,0)==m),depend(a) :: m=shape(a,0) - integer optional,intent(hide),check(shape(a,1)==n),depend(a) :: n=shape(a,1) - end subroutine dfilter2d - end interface -end python module filter - -! This file was auto-generated with f2py (version:2_3032). -! See http://cens.ioc.ee/projects/f2py2e/ diff --git a/numpy/doc/numpybook/comparison/f2py/filtermodule.c b/numpy/doc/numpybook/comparison/f2py/filtermodule.c deleted file mode 100644 index 8339ad4b9..000000000 --- a/numpy/doc/numpybook/comparison/f2py/filtermodule.c +++ /dev/null @@ -1,293 +0,0 @@ -/* File: filtermodule.c - * This file is auto-generated with f2py (version:2_3032). - * f2py is a Fortran to Python Interface Generator (FPIG), Second Edition, - * written by Pearu Peterson <pearu@cens.ioc.ee>. - * See http://cens.ioc.ee/projects/f2py2e/ - * Generation date: Thu Aug 17 12:03:28 2006 - * $Revision:$ - * $Date:$ - * Do not edit this file directly unless you know what you are doing!!! - */ -#ifdef __cplusplus -extern "C" { -#endif - -/*********************** See f2py2e/cfuncs.py: includes ***********************/ -#include "Python.h" -#include "fortranobject.h" -#include <math.h> - -/**************** See f2py2e/rules.py: mod_rules['modulebody'] ****************/ -static PyObject *filter_error; -static PyObject *filter_module; - -/*********************** See f2py2e/cfuncs.py: typedefs ***********************/ -/*need_typedefs*/ - -/****************** See f2py2e/cfuncs.py: typedefs_generated ******************/ -/*need_typedefs_generated*/ - -/********************** See f2py2e/cfuncs.py: cppmacros **********************/ -#if defined(PREPEND_FORTRAN) -#if defined(NO_APPEND_FORTRAN) -#if defined(UPPERCASE_FORTRAN) -#define F_FUNC(f,F) _##F -#else -#define F_FUNC(f,F) _##f -#endif -#else -#if defined(UPPERCASE_FORTRAN) -#define F_FUNC(f,F) _##F##_ -#else -#define F_FUNC(f,F) _##f##_ -#endif -#endif -#else -#if defined(NO_APPEND_FORTRAN) -#if defined(UPPERCASE_FORTRAN) -#define F_FUNC(f,F) F -#else -#define F_FUNC(f,F) f -#endif -#else -#if defined(UPPERCASE_FORTRAN) -#define F_FUNC(f,F) F##_ -#else -#define F_FUNC(f,F) f##_ -#endif -#endif -#endif -#if defined(UNDERSCORE_G77) -#define F_FUNC_US(f,F) F_FUNC(f##_,F##_) -#else -#define F_FUNC_US(f,F) F_FUNC(f,F) -#endif - -#define rank(var) var ## _Rank -#define shape(var,dim) var ## _Dims[dim] -#define old_rank(var) (((PyArrayObject *)(capi_ ## var ## _tmp))->nd) -#define old_shape(var,dim) (((PyArrayObject *)(capi_ ## var ## _tmp))->dimensions[dim]) -#define fshape(var,dim) shape(var,rank(var)-dim-1) -#define len(var) shape(var,0) -#define flen(var) fshape(var,0) -#define size(var) PyArray_SIZE((PyArrayObject *)(capi_ ## var ## _tmp)) -/* #define index(i) capi_i ## i */ -#define slen(var) capi_ ## var ## _len - -#define CHECKSCALAR(check,tcheck,name,show,var)\ - if (!(check)) {\ - PyErr_SetString(filter_error,"("tcheck") failed for "name);\ - fprintf(stderr,show"\n",var);\ - /*goto capi_fail;*/\ - } else -#ifdef DEBUGCFUNCS -#define CFUNCSMESS(mess) fprintf(stderr,"debug-capi:"mess); -#define CFUNCSMESSPY(mess,obj) CFUNCSMESS(mess) \ - PyObject_Print((PyObject *)obj,stderr,Py_PRINT_RAW);\ - fprintf(stderr,"\n"); -#else -#define CFUNCSMESS(mess) -#define CFUNCSMESSPY(mess,obj) -#endif - -#ifndef MAX -#define MAX(a,b) ((a > b) ? (a) : (b)) -#endif -#ifndef MIN -#define MIN(a,b) ((a < b) ? (a) : (b)) -#endif - - -/************************ See f2py2e/cfuncs.py: cfuncs ************************/ -/*need_cfuncs*/ - -/********************* See f2py2e/cfuncs.py: userincludes *********************/ -/*need_userincludes*/ - -/********************* See f2py2e/capi_rules.py: usercode *********************/ - - -/* See f2py2e/rules.py */ -extern void F_FUNC(dfilter2d,DFILTER2D)(double*,double*,int*,int*); -/*eof externroutines*/ - -/******************** See f2py2e/capi_rules.py: usercode1 ********************/ - - -/******************* See f2py2e/cb_rules.py: buildcallback *******************/ -/*need_callbacks*/ - -/*********************** See f2py2e/rules.py: buildapi ***********************/ - -/********************************* dfilter2d *********************************/ -static char doc_f2py_rout_filter_dfilter2d[] = "\ -Function signature:\n\ - b = dfilter2d(a)\n\ -Required arguments:\n" -" a : input rank-2 array('d') with bounds (m,n)\n" -"Return objects:\n" -" b : rank-2 array('d') with bounds (m,n)"; -/* extern void F_FUNC(dfilter2d,DFILTER2D)(double*,double*,int*,int*); */ -static PyObject *f2py_rout_filter_dfilter2d(const PyObject *capi_self, - PyObject *capi_args, - PyObject *capi_keywds, - void (*f2py_func)(double*,double*,int*,int*)) { - PyObject * volatile capi_buildvalue = NULL; - volatile int f2py_success = 1; -/*decl*/ - - double *a = NULL; - npy_intp a_Dims[2] = {-1, -1}; - const int a_Rank = 2; - PyArrayObject *capi_a_tmp = NULL; - int capi_a_intent = 0; - PyObject *a_capi = Py_None; - double *b = NULL; - npy_intp b_Dims[2] = {-1, -1}; - const int b_Rank = 2; - PyArrayObject *capi_b_tmp = NULL; - int capi_b_intent = 0; - int m = 0; - int n = 0; - static char *capi_kwlist[] = {"a",NULL}; - -/*routdebugenter*/ -#ifdef F2PY_REPORT_ATEXIT -f2py_start_clock(); -#endif - if (!PyArg_ParseTupleAndKeywords(capi_args,capi_keywds,\ - "O|:filter.dfilter2d",\ - capi_kwlist,&a_capi)) - return NULL; -/*frompyobj*/ - /* Processing variable a */ - ; - capi_a_intent |= F2PY_INTENT_IN; - capi_a_tmp = array_from_pyobj(PyArray_DOUBLE,a_Dims,a_Rank,capi_a_intent,a_capi); - if (capi_a_tmp == NULL) { - if (!PyErr_Occurred()) - PyErr_SetString(filter_error,"failed in converting 1st argument `a' of filter.dfilter2d to C/Fortran array" ); - } else { - a = (double *)(capi_a_tmp->data); - - /* Processing variable m */ - m = shape(a,0); - CHECKSCALAR(shape(a,0)==m,"shape(a,0)==m","hidden m","dfilter2d:m=%d",m) { - /* Processing variable n */ - n = shape(a,1); - CHECKSCALAR(shape(a,1)==n,"shape(a,1)==n","hidden n","dfilter2d:n=%d",n) { - /* Processing variable b */ - b_Dims[0]=m,b_Dims[1]=n; - capi_b_intent |= F2PY_INTENT_OUT|F2PY_INTENT_HIDE; - capi_b_tmp = array_from_pyobj(PyArray_DOUBLE,b_Dims,b_Rank,capi_b_intent,Py_None); - if (capi_b_tmp == NULL) { - if (!PyErr_Occurred()) - PyErr_SetString(filter_error,"failed in converting hidden `b' of filter.dfilter2d to C/Fortran array" ); - } else { - b = (double *)(capi_b_tmp->data); - -/*end of frompyobj*/ -#ifdef F2PY_REPORT_ATEXIT -f2py_start_call_clock(); -#endif -/*callfortranroutine*/ - (*f2py_func)(a,b,&m,&n); -if (PyErr_Occurred()) - f2py_success = 0; -#ifdef F2PY_REPORT_ATEXIT -f2py_stop_call_clock(); -#endif -/*end of callfortranroutine*/ - if (f2py_success) { -/*pyobjfrom*/ -/*end of pyobjfrom*/ - CFUNCSMESS("Building return value.\n"); - capi_buildvalue = Py_BuildValue("N",capi_b_tmp); -/*closepyobjfrom*/ -/*end of closepyobjfrom*/ - } /*if (f2py_success) after callfortranroutine*/ -/*cleanupfrompyobj*/ - } /*if (capi_b_tmp == NULL) ... else of b*/ - /* End of cleaning variable b */ - } /*CHECKSCALAR(shape(a,1)==n)*/ - /* End of cleaning variable n */ - } /*CHECKSCALAR(shape(a,0)==m)*/ - /* End of cleaning variable m */ - if((PyObject *)capi_a_tmp!=a_capi) { - Py_XDECREF(capi_a_tmp); } - } /*if (capi_a_tmp == NULL) ... else of a*/ - /* End of cleaning variable a */ -/*end of cleanupfrompyobj*/ - if (capi_buildvalue == NULL) { -/*routdebugfailure*/ - } else { -/*routdebugleave*/ - } - CFUNCSMESS("Freeing memory.\n"); -/*freemem*/ -#ifdef F2PY_REPORT_ATEXIT -f2py_stop_clock(); -#endif - return capi_buildvalue; -} -/****************************** end of dfilter2d ******************************/ -/*eof body*/ - -/******************* See f2py2e/f90mod_rules.py: buildhooks *******************/ -/*need_f90modhooks*/ - -/************** See f2py2e/rules.py: module_rules['modulebody'] **************/ - -/******************* See f2py2e/common_rules.py: buildhooks *******************/ - -/*need_commonhooks*/ - -/**************************** See f2py2e/rules.py ****************************/ - -static FortranDataDef f2py_routine_defs[] = { - {"dfilter2d",-1,{{-1}},0,(char *)F_FUNC(dfilter2d,DFILTER2D),(f2py_init_func)f2py_rout_filter_dfilter2d,doc_f2py_rout_filter_dfilter2d}, - -/*eof routine_defs*/ - {NULL} -}; - -static PyMethodDef f2py_module_methods[] = { - - {NULL,NULL} -}; - -PyMODINIT_FUNC initfilter(void) { - int i; - PyObject *m,*d, *s; - m = filter_module = Py_InitModule("filter", f2py_module_methods); - PyFortran_Type.ob_type = &PyType_Type; - import_array(); - if (PyErr_Occurred()) - Py_FatalError("can't initialize module filter (failed to import numpy)"); - d = PyModule_GetDict(m); - s = PyString_FromString("$Revision: $"); - PyDict_SetItemString(d, "__version__", s); - s = PyString_FromString("This module 'filter' is auto-generated with f2py (version:2_3032).\nFunctions:\n" -" b = dfilter2d(a)\n" -"."); - PyDict_SetItemString(d, "__doc__", s); - filter_error = PyErr_NewException ("filter.error", NULL, NULL); - Py_DECREF(s); - for(i=0;f2py_routine_defs[i].name!=NULL;i++) - PyDict_SetItemString(d, f2py_routine_defs[i].name,PyFortranObject_NewAsAttr(&f2py_routine_defs[i])); - -/*eof initf2pywraphooks*/ -/*eof initf90modhooks*/ - -/*eof initcommonhooks*/ - - -#ifdef F2PY_REPORT_ATEXIT - if (! PyErr_Occurred()) - on_exit(f2py_report_on_exit,(void*)"filter"); -#endif - -} -#ifdef __cplusplus -} -#endif diff --git a/numpy/doc/numpybook/comparison/f2py/timeme b/numpy/doc/numpybook/comparison/f2py/timeme deleted file mode 100755 index d6ac5741e..000000000 --- a/numpy/doc/numpybook/comparison/f2py/timeme +++ /dev/null @@ -1 +0,0 @@ -python2.4 -m timeit -s "import numpy as N; a=N.random.rand(100,200); import filter" "b=N.zeros_like(a); none = filter.DFILTER2D(a,b)" diff --git a/numpy/doc/numpybook/comparison/pyrex/add.c b/numpy/doc/numpybook/comparison/pyrex/add.c deleted file mode 100644 index d5e3bd725..000000000 --- a/numpy/doc/numpybook/comparison/pyrex/add.c +++ /dev/null @@ -1,560 +0,0 @@ -/* Generated by Pyrex 0.9.4.1 on Thu Aug 17 02:11:41 2006 */ - -#include "Python.h" -#include "structmember.h" -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifdef __cplusplus -#define __PYX_EXTERN_C extern "C" -#else -#define __PYX_EXTERN_C extern -#endif -__PYX_EXTERN_C double pow(double, double); -#include "numpy/arrayobject.h" - - -typedef struct {PyObject **p; char *s;} __Pyx_InternTabEntry; /*proto*/ -typedef struct {PyObject **p; char *s; long n;} __Pyx_StringTabEntry; /*proto*/ -static PyObject *__Pyx_UnpackItem(PyObject *, int); /*proto*/ -static int __Pyx_EndUnpack(PyObject *, int); /*proto*/ -static int __Pyx_PrintItem(PyObject *); /*proto*/ -static int __Pyx_PrintNewline(void); /*proto*/ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ -static void __Pyx_ReRaise(void); /*proto*/ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/ -static PyObject *__Pyx_GetExcValue(void); /*proto*/ -static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, char *name); /*proto*/ -static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/ -static int __Pyx_GetStarArgs(PyObject **args, PyObject **kwds, char *kwd_list[], int nargs, PyObject **args2, PyObject **kwds2); /*proto*/ -static void __Pyx_WriteUnraisable(char *name); /*proto*/ -static void __Pyx_AddTraceback(char *funcname); /*proto*/ -static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, long size); /*proto*/ -static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/ -static int __Pyx_GetVtable(PyObject *dict, void *vtabptr); /*proto*/ -static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, char *modname); /*proto*/ -static int __Pyx_InternStrings(__Pyx_InternTabEntry *t); /*proto*/ -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ -static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/ - -static PyObject *__pyx_m; -static PyObject *__pyx_b; -static int __pyx_lineno; -static char *__pyx_filename; -static char **__pyx_f; - -/* Declarations from c_numpy */ - -static PyTypeObject *__pyx_ptype_7c_numpy_dtype = 0; -static PyTypeObject *__pyx_ptype_7c_numpy_ndarray = 0; - -/* Declarations from add */ - - -/* Implementation of add */ - -static PyObject *__pyx_n_c_numpy; -static PyObject *__pyx_n_zadd; -static PyObject *__pyx_n_cadd; -static PyObject *__pyx_n_dadd; -static PyObject *__pyx_n_sadd; - -static PyObject *__pyx_f_3add_zadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_f_3add_zadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_ao = 0; - PyObject *__pyx_v_bo = 0; - PyArrayObject *__pyx_v_c; - PyArrayObject *__pyx_v_a; - PyArrayObject *__pyx_v_b; - npy_intp __pyx_v_i; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - npy_intp __pyx_2; - static char *__pyx_argnames[] = {"ao","bo",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_ao, &__pyx_v_bo)) return 0; - Py_INCREF(__pyx_v_ao); - Py_INCREF(__pyx_v_bo); - __pyx_v_c = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":15 */ - __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_ao,NPY_CDOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 15; goto __pyx_L1;} - Py_DECREF(((PyObject *)__pyx_v_a)); - __pyx_v_a = ((PyArrayObject *)__pyx_1); - __pyx_1 = 0; - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":16 */ - __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_bo,NPY_CDOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 16; goto __pyx_L1;} - Py_DECREF(((PyObject *)__pyx_v_b)); - __pyx_v_b = ((PyArrayObject *)__pyx_1); - __pyx_1 = 0; - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":18 */ - __pyx_1 = PyArray_SimpleNew(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;} - Py_DECREF(((PyObject *)__pyx_v_c)); - __pyx_v_c = ((PyArrayObject *)__pyx_1); - __pyx_1 = 0; - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":21 */ - __pyx_2 = (__pyx_v_a->dimensions[0]); - for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; ++__pyx_v_i) { - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":22 */ - (((npy_cdouble (*))__pyx_v_c->data)[__pyx_v_i]).real = ((((npy_cdouble (*))__pyx_v_a->data)[__pyx_v_i]).real + (((npy_cdouble (*))__pyx_v_b->data)[__pyx_v_i]).real); - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":24 */ - (((npy_cdouble (*))__pyx_v_c->data)[__pyx_v_i]).imag = ((((npy_cdouble (*))__pyx_v_a->data)[__pyx_v_i]).imag + (((npy_cdouble (*))__pyx_v_b->data)[__pyx_v_i]).imag); - __pyx_L2:; - } - __pyx_L3:; - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":26 */ - Py_INCREF(((PyObject *)__pyx_v_c)); - __pyx_r = ((PyObject *)__pyx_v_c); - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("add.zadd"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_c); - Py_DECREF(__pyx_v_a); - Py_DECREF(__pyx_v_b); - Py_DECREF(__pyx_v_ao); - Py_DECREF(__pyx_v_bo); - return __pyx_r; -} - -static PyObject *__pyx_f_3add_cadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_f_3add_cadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_ao = 0; - PyObject *__pyx_v_bo = 0; - PyArrayObject *__pyx_v_c; - PyArrayObject *__pyx_v_a; - PyArrayObject *__pyx_v_b; - npy_intp __pyx_v_i; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - npy_intp __pyx_2; - static char *__pyx_argnames[] = {"ao","bo",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_ao, &__pyx_v_bo)) return 0; - Py_INCREF(__pyx_v_ao); - Py_INCREF(__pyx_v_bo); - __pyx_v_c = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":32 */ - __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_ao,NPY_CFLOAT,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 32; goto __pyx_L1;} - Py_DECREF(((PyObject *)__pyx_v_a)); - __pyx_v_a = ((PyArrayObject *)__pyx_1); - __pyx_1 = 0; - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":33 */ - __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_bo,NPY_CFLOAT,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;} - Py_DECREF(((PyObject *)__pyx_v_b)); - __pyx_v_b = ((PyArrayObject *)__pyx_1); - __pyx_1 = 0; - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":35 */ - __pyx_1 = PyArray_SimpleNew(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 35; goto __pyx_L1;} - Py_DECREF(((PyObject *)__pyx_v_c)); - __pyx_v_c = ((PyArrayObject *)__pyx_1); - __pyx_1 = 0; - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":38 */ - __pyx_2 = (__pyx_v_a->dimensions[0]); - for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; ++__pyx_v_i) { - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":39 */ - (((npy_cfloat (*))__pyx_v_c->data)[__pyx_v_i]).real = ((((npy_cfloat (*))__pyx_v_a->data)[__pyx_v_i]).real + (((npy_cfloat (*))__pyx_v_b->data)[__pyx_v_i]).real); - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":41 */ - (((npy_cfloat (*))__pyx_v_c->data)[__pyx_v_i]).imag = ((((npy_cfloat (*))__pyx_v_a->data)[__pyx_v_i]).imag + (((npy_cfloat (*))__pyx_v_b->data)[__pyx_v_i]).imag); - __pyx_L2:; - } - __pyx_L3:; - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":43 */ - Py_INCREF(((PyObject *)__pyx_v_c)); - __pyx_r = ((PyObject *)__pyx_v_c); - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("add.cadd"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_c); - Py_DECREF(__pyx_v_a); - Py_DECREF(__pyx_v_b); - Py_DECREF(__pyx_v_ao); - Py_DECREF(__pyx_v_bo); - return __pyx_r; -} - -static PyObject *__pyx_f_3add_dadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_f_3add_dadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_ao = 0; - PyObject *__pyx_v_bo = 0; - PyArrayObject *__pyx_v_c; - PyArrayObject *__pyx_v_a; - PyArrayObject *__pyx_v_b; - npy_intp __pyx_v_i; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - npy_intp __pyx_2; - static char *__pyx_argnames[] = {"ao","bo",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_ao, &__pyx_v_bo)) return 0; - Py_INCREF(__pyx_v_ao); - Py_INCREF(__pyx_v_bo); - __pyx_v_c = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":50 */ - __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_ao,NPY_DOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; goto __pyx_L1;} - Py_DECREF(((PyObject *)__pyx_v_a)); - __pyx_v_a = ((PyArrayObject *)__pyx_1); - __pyx_1 = 0; - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":51 */ - __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_bo,NPY_DOUBLE,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 51; goto __pyx_L1;} - Py_DECREF(((PyObject *)__pyx_v_b)); - __pyx_v_b = ((PyArrayObject *)__pyx_1); - __pyx_1 = 0; - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":53 */ - __pyx_1 = PyArray_SimpleNew(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; goto __pyx_L1;} - Py_DECREF(((PyObject *)__pyx_v_c)); - __pyx_v_c = ((PyArrayObject *)__pyx_1); - __pyx_1 = 0; - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":56 */ - __pyx_2 = (__pyx_v_a->dimensions[0]); - for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; ++__pyx_v_i) { - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":57 */ - (((double (*))__pyx_v_c->data)[__pyx_v_i]) = ((((double (*))__pyx_v_a->data)[__pyx_v_i]) + (((double (*))__pyx_v_b->data)[__pyx_v_i])); - __pyx_L2:; - } - __pyx_L3:; - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":59 */ - Py_INCREF(((PyObject *)__pyx_v_c)); - __pyx_r = ((PyObject *)__pyx_v_c); - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("add.dadd"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_c); - Py_DECREF(__pyx_v_a); - Py_DECREF(__pyx_v_b); - Py_DECREF(__pyx_v_ao); - Py_DECREF(__pyx_v_bo); - return __pyx_r; -} - -static PyObject *__pyx_f_3add_sadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_f_3add_sadd(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_ao = 0; - PyObject *__pyx_v_bo = 0; - PyArrayObject *__pyx_v_c; - PyArrayObject *__pyx_v_a; - PyArrayObject *__pyx_v_b; - npy_intp __pyx_v_i; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - npy_intp __pyx_2; - static char *__pyx_argnames[] = {"ao","bo",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "OO", __pyx_argnames, &__pyx_v_ao, &__pyx_v_bo)) return 0; - Py_INCREF(__pyx_v_ao); - Py_INCREF(__pyx_v_bo); - __pyx_v_c = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":66 */ - __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_ao,NPY_FLOAT,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; goto __pyx_L1;} - Py_DECREF(((PyObject *)__pyx_v_a)); - __pyx_v_a = ((PyArrayObject *)__pyx_1); - __pyx_1 = 0; - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":67 */ - __pyx_1 = PyArray_ContiguousFromAny(__pyx_v_bo,NPY_FLOAT,1,1); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; goto __pyx_L1;} - Py_DECREF(((PyObject *)__pyx_v_b)); - __pyx_v_b = ((PyArrayObject *)__pyx_1); - __pyx_1 = 0; - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":69 */ - __pyx_1 = PyArray_SimpleNew(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; goto __pyx_L1;} - Py_DECREF(((PyObject *)__pyx_v_c)); - __pyx_v_c = ((PyArrayObject *)__pyx_1); - __pyx_1 = 0; - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":72 */ - __pyx_2 = (__pyx_v_a->dimensions[0]); - for (__pyx_v_i = 0; __pyx_v_i < __pyx_2; ++__pyx_v_i) { - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":73 */ - (((float (*))__pyx_v_c->data)[__pyx_v_i]) = ((((float (*))__pyx_v_a->data)[__pyx_v_i]) + (((float (*))__pyx_v_b->data)[__pyx_v_i])); - __pyx_L2:; - } - __pyx_L3:; - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":75 */ - Py_INCREF(((PyObject *)__pyx_v_c)); - __pyx_r = ((PyObject *)__pyx_v_c); - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - __Pyx_AddTraceback("add.sadd"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_c); - Py_DECREF(__pyx_v_a); - Py_DECREF(__pyx_v_b); - Py_DECREF(__pyx_v_ao); - Py_DECREF(__pyx_v_bo); - return __pyx_r; -} - -static __Pyx_InternTabEntry __pyx_intern_tab[] = { - {&__pyx_n_c_numpy, "c_numpy"}, - {&__pyx_n_cadd, "cadd"}, - {&__pyx_n_dadd, "dadd"}, - {&__pyx_n_sadd, "sadd"}, - {&__pyx_n_zadd, "zadd"}, - {0, 0} -}; - -static struct PyMethodDef __pyx_methods[] = { - {"zadd", (PyCFunction)__pyx_f_3add_zadd, METH_VARARGS|METH_KEYWORDS, 0}, - {"cadd", (PyCFunction)__pyx_f_3add_cadd, METH_VARARGS|METH_KEYWORDS, 0}, - {"dadd", (PyCFunction)__pyx_f_3add_dadd, METH_VARARGS|METH_KEYWORDS, 0}, - {"sadd", (PyCFunction)__pyx_f_3add_sadd, METH_VARARGS|METH_KEYWORDS, 0}, - {0, 0, 0, 0} -}; - -static void __pyx_init_filenames(void); /*proto*/ - -PyMODINIT_FUNC initadd(void); /*proto*/ -PyMODINIT_FUNC initadd(void) { - __pyx_init_filenames(); - __pyx_m = Py_InitModule4("add", __pyx_methods, 0, 0, PYTHON_API_VERSION); - if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; - __pyx_b = PyImport_AddModule("__builtin__"); - if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; - if (__Pyx_InternStrings(__pyx_intern_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; - __pyx_ptype_7c_numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr)); if (!__pyx_ptype_7c_numpy_dtype) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 74; goto __pyx_L1;} - __pyx_ptype_7c_numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject)); if (!__pyx_ptype_7c_numpy_ndarray) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 79; goto __pyx_L1;} - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":9 */ - import_array(); - - /* "/Users/oliphant/numpybook/pyrex/add.pyx":62 */ - return; - __pyx_L1:; - __Pyx_AddTraceback("add"); -} - -static char *__pyx_filenames[] = { - "add.pyx", - "c_numpy.pxd", -}; - -/* Runtime support code */ - -static void __pyx_init_filenames(void) { - __pyx_f = __pyx_filenames; -} - -static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { - if (!type) { - PyErr_Format(PyExc_SystemError, "Missing type object"); - return 0; - } - if (obj == Py_None || PyObject_TypeCheck(obj, type)) - return 1; - PyErr_Format(PyExc_TypeError, "Cannot convert %s to %s", - obj->ob_type->tp_name, type->tp_name); - return 0; -} - -static int __Pyx_InternStrings(__Pyx_InternTabEntry *t) { - while (t->p) { - *t->p = PyString_InternFromString(t->s); - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, - long size) -{ - PyObject *py_module_name = 0; - PyObject *py_class_name = 0; - PyObject *py_name_list = 0; - PyObject *py_module = 0; - PyObject *result = 0; - - py_module_name = PyString_FromString(module_name); - if (!py_module_name) - goto bad; - py_class_name = PyString_FromString(class_name); - if (!py_class_name) - goto bad; - py_name_list = PyList_New(1); - if (!py_name_list) - goto bad; - Py_INCREF(py_class_name); - if (PyList_SetItem(py_name_list, 0, py_class_name) < 0) - goto bad; - py_module = __Pyx_Import(py_module_name, py_name_list); - if (!py_module) - goto bad; - result = PyObject_GetAttr(py_module, py_class_name); - if (!result) - goto bad; - if (!PyType_Check(result)) { - PyErr_Format(PyExc_TypeError, - "%s.%s is not a type object", - module_name, class_name); - goto bad; - } - if (((PyTypeObject *)result)->tp_basicsize != size) { - PyErr_Format(PyExc_ValueError, - "%s.%s does not appear to be the correct type object", - module_name, class_name); - goto bad; - } - goto done; -bad: - Py_XDECREF(result); - result = 0; -done: - Py_XDECREF(py_module_name); - Py_XDECREF(py_class_name); - Py_XDECREF(py_name_list); - return (PyTypeObject *)result; -} - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list) { - PyObject *__import__ = 0; - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - __import__ = PyObject_GetAttrString(__pyx_b, "__import__"); - if (!__import__) - goto bad; - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - module = PyObject_CallFunction(__import__, "OOOO", - name, global_dict, empty_dict, list); -bad: - Py_XDECREF(empty_list); - Py_XDECREF(__import__); - Py_XDECREF(empty_dict); - return module; -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" - -static void __Pyx_AddTraceback(char *funcname) { - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - PyObject *py_globals = 0; - PyObject *empty_tuple = 0; - PyObject *empty_string = 0; - PyCodeObject *py_code = 0; - PyFrameObject *py_frame = 0; - - py_srcfile = PyString_FromString(__pyx_filename); - if (!py_srcfile) goto bad; - py_funcname = PyString_FromString(funcname); - if (!py_funcname) goto bad; - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - empty_tuple = PyTuple_New(0); - if (!empty_tuple) goto bad; - empty_string = PyString_FromString(""); - if (!empty_string) goto bad; - py_code = PyCode_New( - 0, /*int argcount,*/ - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - empty_string, /*PyObject *code,*/ - empty_tuple, /*PyObject *consts,*/ - empty_tuple, /*PyObject *names,*/ - empty_tuple, /*PyObject *varnames,*/ - empty_tuple, /*PyObject *freevars,*/ - empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - __pyx_lineno, /*int firstlineno,*/ - empty_string /*PyObject *lnotab*/ - ); - if (!py_code) goto bad; - py_frame = PyFrame_New( - PyThreadState_Get(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = __pyx_lineno; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - Py_XDECREF(empty_tuple); - Py_XDECREF(empty_string); - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} diff --git a/numpy/doc/numpybook/comparison/pyrex/add.pyx b/numpy/doc/numpybook/comparison/pyrex/add.pyx deleted file mode 100644 index 63c231641..000000000 --- a/numpy/doc/numpybook/comparison/pyrex/add.pyx +++ /dev/null @@ -1,75 +0,0 @@ -# -*- Mode: Python -*- Not really, but close enough - -cimport c_numpy -from c_numpy cimport import_array, ndarray, npy_intp, npy_cdouble, \ - npy_cfloat, NPY_DOUBLE, NPY_CDOUBLE, NPY_FLOAT, \ - NPY_CFLOAT - -#We need to initialize NumPy -import_array() - -def zadd(object ao, object bo): - cdef ndarray c, a, b - cdef npy_intp i - - a = c_numpy.PyArray_ContiguousFromAny(ao, NPY_CDOUBLE, 1, 1) - b = c_numpy.PyArray_ContiguousFromAny(bo, NPY_CDOUBLE, 1, 1) - - c = c_numpy.PyArray_SimpleNew(a.nd, a.dimensions, - a.descr.type_num) - - for i from 0 <= i < a.dimensions[0]: - (<npy_cdouble *>c.data)[i].real = (<npy_cdouble *>a.data)[i].real + \ - (<npy_cdouble *>b.data)[i].real - (<npy_cdouble *>c.data)[i].imag = (<npy_cdouble *>a.data)[i].imag + \ - (<npy_cdouble *>b.data)[i].imag - return c - -def cadd(object ao, object bo): - cdef ndarray c, a, b - cdef npy_intp i - - a = c_numpy.PyArray_ContiguousFromAny(ao, NPY_CFLOAT, 1, 1) - b = c_numpy.PyArray_ContiguousFromAny(bo, NPY_CFLOAT, 1, 1) - - c = c_numpy.PyArray_SimpleNew(a.nd, a.dimensions, - a.descr.type_num) - - for i from 0 <= i < a.dimensions[0]: - (<npy_cfloat *>c.data)[i].real = (<npy_cfloat *>a.data)[i].real + \ - (<npy_cfloat *>b.data)[i].real - (<npy_cfloat *>c.data)[i].imag = (<npy_cfloat *>a.data)[i].imag + \ - (<npy_cfloat *>b.data)[i].imag - return c - - -def dadd(object ao, object bo): - cdef ndarray c, a, b - cdef npy_intp i - - a = c_numpy.PyArray_ContiguousFromAny(ao, NPY_DOUBLE, 1, 1) - b = c_numpy.PyArray_ContiguousFromAny(bo, NPY_DOUBLE, 1, 1) - - c = c_numpy.PyArray_SimpleNew(a.nd, a.dimensions, - a.descr.type_num) - - for i from 0 <= i < a.dimensions[0]: - (<double *>c.data)[i] = (<double *>a.data)[i] + \ - (<double *>b.data)[i] - return c - - -def sadd(object ao, object bo): - cdef ndarray c, a, b - cdef npy_intp i - - a = c_numpy.PyArray_ContiguousFromAny(ao, NPY_FLOAT, 1, 1) - b = c_numpy.PyArray_ContiguousFromAny(bo, NPY_FLOAT, 1, 1) - - c = c_numpy.PyArray_SimpleNew(a.nd, a.dimensions, - a.descr.type_num) - - for i from 0 <= i < a.dimensions[0]: - (<float *>c.data)[i] = (<float *>a.data)[i] + \ - (<float *>b.data)[i] - return c diff --git a/numpy/doc/numpybook/comparison/pyrex/c_numpy.pxd b/numpy/doc/numpybook/comparison/pyrex/c_numpy.pxd deleted file mode 100644 index e772f6fee..000000000 --- a/numpy/doc/numpybook/comparison/pyrex/c_numpy.pxd +++ /dev/null @@ -1,106 +0,0 @@ -# :Author: Robert Kern -# :Copyright: 2004, Enthought, Inc. -# :License: BSD Style - - -cdef extern from "numpy/arrayobject.h": - - cdef enum NPY_TYPES: - NPY_BOOL - NPY_BYTE - NPY_UBYTE - NPY_SHORT - NPY_USHORT - NPY_INT - NPY_UINT - NPY_LONG - NPY_ULONG - NPY_LONGLONG - NPY_ULONGLONG - NPY_FLOAT - NPY_DOUBLE - NPY_LONGDOUBLE - NPY_CFLOAT - NPY_CDOUBLE - NPY_CLONGDOUBLE - NPY_OBJECT - NPY_STRING - NPY_UNICODE - NPY_VOID - NPY_NTYPES - NPY_NOTYPE - - cdef enum requirements: - NPY_CONTIGUOUS - NPY_FORTRAN - NPY_OWNDATA - NPY_FORCECAST - NPY_ENSURECOPY - NPY_ENSUREARRAY - NPY_ELEMENTSTRIDES - NPY_ALIGNED - NPY_NOTSWAPPED - NPY_WRITEABLE - NPY_UPDATEIFCOPY - NPY_ARR_HAS_DESCR - - NPY_BEHAVED - NPY_BEHAVED_NS - NPY_CARRAY - NPY_CARRAY_RO - NPY_FARRAY - NPY_FARRAY_RO - NPY_DEFAULT - - NPY_IN_ARRAY - NPY_OUT_ARRAY - NPY_INOUT_ARRAY - NPY_IN_FARRAY - NPY_OUT_FARRAY - NPY_INOUT_FARRAY - - NPY_UPDATE_ALL - - ctypedef struct npy_cdouble: - double real - double imag - - ctypedef struct npy_cfloat: - double real - double imag - - ctypedef int npy_intp - - ctypedef extern class numpy.dtype [object PyArray_Descr]: - cdef int type_num, elsize, alignment - cdef char type, kind, byteorder, hasobject - cdef object fields, typeobj - - ctypedef extern class numpy.ndarray [object PyArrayObject]: - cdef char *data - cdef int nd - cdef npy_intp *dimensions - cdef npy_intp *strides - cdef object base - cdef dtype descr - cdef int flags - - object PyArray_ZEROS(int ndims, npy_intp* dims, NPY_TYPES type_num, int fortran) - object PyArray_EMPTY(int ndims, npy_intp* dims, NPY_TYPES type_num, int fortran) - dtype PyArray_DescrFromTypeNum(NPY_TYPES type_num) - object PyArray_SimpleNew(int ndims, npy_intp* dims, NPY_TYPES type_num) - int PyArray_Check(object obj) - object PyArray_ContiguousFromAny(object obj, NPY_TYPES type, - int mindim, int maxdim) - npy_intp PyArray_SIZE(ndarray arr) - npy_intp PyArray_NBYTES(ndarray arr) - void *PyArray_DATA(ndarray arr) - object PyArray_FromAny(object obj, dtype newtype, int mindim, int maxdim, - int requirements, object context) - object PyArray_FROMANY(object obj, NPY_TYPES type_num, int min, - int max, int requirements) - object PyArray_NewFromDescr(object subtype, dtype newtype, int nd, - npy_intp* dims, npy_intp* strides, void* data, - int flags, object parent) - - void import_array() diff --git a/numpy/doc/numpybook/comparison/pyrex/filter.c b/numpy/doc/numpybook/comparison/pyrex/filter.c deleted file mode 100644 index 1c25eb677..000000000 --- a/numpy/doc/numpybook/comparison/pyrex/filter.c +++ /dev/null @@ -1,388 +0,0 @@ -/* Generated by Pyrex 0.9.4.1 on Thu Aug 17 02:11:42 2006 */ - -#include "Python.h" -#include "structmember.h" -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifdef __cplusplus -#define __PYX_EXTERN_C extern "C" -#else -#define __PYX_EXTERN_C extern -#endif -__PYX_EXTERN_C double pow(double, double); -#include "numpy/arrayobject.h" - - -typedef struct {PyObject **p; char *s;} __Pyx_InternTabEntry; /*proto*/ -typedef struct {PyObject **p; char *s; long n;} __Pyx_StringTabEntry; /*proto*/ -static PyObject *__Pyx_UnpackItem(PyObject *, int); /*proto*/ -static int __Pyx_EndUnpack(PyObject *, int); /*proto*/ -static int __Pyx_PrintItem(PyObject *); /*proto*/ -static int __Pyx_PrintNewline(void); /*proto*/ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb); /*proto*/ -static void __Pyx_ReRaise(void); /*proto*/ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list); /*proto*/ -static PyObject *__Pyx_GetExcValue(void); /*proto*/ -static int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed, char *name); /*proto*/ -static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/ -static int __Pyx_GetStarArgs(PyObject **args, PyObject **kwds, char *kwd_list[], int nargs, PyObject **args2, PyObject **kwds2); /*proto*/ -static void __Pyx_WriteUnraisable(char *name); /*proto*/ -static void __Pyx_AddTraceback(char *funcname); /*proto*/ -static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, long size); /*proto*/ -static int __Pyx_SetVtable(PyObject *dict, void *vtable); /*proto*/ -static int __Pyx_GetVtable(PyObject *dict, void *vtabptr); /*proto*/ -static PyObject *__Pyx_CreateClass(PyObject *bases, PyObject *dict, PyObject *name, char *modname); /*proto*/ -static int __Pyx_InternStrings(__Pyx_InternTabEntry *t); /*proto*/ -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/ -static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name); /*proto*/ - -static PyObject *__pyx_m; -static PyObject *__pyx_b; -static int __pyx_lineno; -static char *__pyx_filename; -static char **__pyx_f; - -/* Declarations from c_numpy */ - -static PyTypeObject *__pyx_ptype_7c_numpy_dtype = 0; -static PyTypeObject *__pyx_ptype_7c_numpy_ndarray = 0; - -/* Declarations from filter */ - - -/* Implementation of filter */ - -static PyObject *__pyx_n_c_numpy; -static PyObject *__pyx_n_filter; - -static PyObject *__pyx_f_6filter_filter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_f_6filter_filter(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_ao = 0; - PyArrayObject *__pyx_v_a; - PyArrayObject *__pyx_v_b; - npy_intp __pyx_v_i; - npy_intp __pyx_v_j; - npy_intp __pyx_v_M; - npy_intp __pyx_v_N; - npy_intp __pyx_v_S0; - npy_intp __pyx_v_S1; - npy_intp __pyx_v_r; - npy_intp __pyx_v_rm1; - npy_intp __pyx_v_rp1; - npy_intp __pyx_v_c; - npy_intp __pyx_v_cm1; - npy_intp __pyx_v_cp1; - PyObject *__pyx_v_oS; - PyObject *__pyx_r; - PyObject *__pyx_1 = 0; - long __pyx_2; - long __pyx_3; - PyObject *__pyx_4 = 0; - int __pyx_5; - static char *__pyx_argnames[] = {"ao",0}; - if (!PyArg_ParseTupleAndKeywords(__pyx_args, __pyx_kwds, "O", __pyx_argnames, &__pyx_v_ao)) return 0; - Py_INCREF(__pyx_v_ao); - __pyx_v_a = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - __pyx_v_b = ((PyArrayObject *)Py_None); Py_INCREF(Py_None); - __pyx_v_oS = Py_None; Py_INCREF(Py_None); - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":18 */ - __pyx_1 = PyArray_FROMANY(__pyx_v_ao,NPY_DOUBLE,2,2,NPY_ALIGNED); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 18; goto __pyx_L1;} - Py_DECREF(((PyObject *)__pyx_v_a)); - __pyx_v_a = ((PyArrayObject *)__pyx_1); - __pyx_1 = 0; - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":19 */ - __pyx_1 = PyArray_ZEROS(__pyx_v_a->nd,__pyx_v_a->dimensions,__pyx_v_a->descr->type_num,0); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; goto __pyx_L1;} - if (!__Pyx_TypeTest(__pyx_1, __pyx_ptype_7c_numpy_ndarray)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 19; goto __pyx_L1;} - Py_DECREF(((PyObject *)__pyx_v_b)); - __pyx_v_b = ((PyArrayObject *)__pyx_1); - __pyx_1 = 0; - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":20 */ - __pyx_v_M = (__pyx_v_a->dimensions[0]); - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":21 */ - __pyx_v_N = (__pyx_v_a->dimensions[1]); - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":22 */ - __pyx_v_S0 = (__pyx_v_a->strides[0]); - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":23 */ - __pyx_v_S1 = (__pyx_v_a->strides[1]); - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":24 */ - __pyx_2 = (__pyx_v_M - 1); - for (__pyx_v_i = 1; __pyx_v_i < __pyx_2; ++__pyx_v_i) { - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":25 */ - __pyx_v_r = (__pyx_v_i * __pyx_v_S0); - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":26 */ - __pyx_v_rm1 = (__pyx_v_r - __pyx_v_S0); - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":27 */ - __pyx_v_rp1 = (__pyx_v_r + __pyx_v_S0); - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":28 */ - __pyx_1 = PyInt_FromLong((__pyx_v_i * __pyx_v_N)); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; goto __pyx_L1;} - Py_DECREF(__pyx_v_oS); - __pyx_v_oS = __pyx_1; - __pyx_1 = 0; - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":29 */ - __pyx_3 = (__pyx_v_N - 1); - for (__pyx_v_j = 1; __pyx_v_j < __pyx_3; ++__pyx_v_j) { - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":30 */ - __pyx_v_c = (__pyx_v_j * __pyx_v_S1); - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":31 */ - __pyx_v_cm1 = (__pyx_v_c - __pyx_v_S1); - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":32 */ - __pyx_v_cp1 = (__pyx_v_c + __pyx_v_S1); - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":38 */ - __pyx_1 = PyInt_FromLong(__pyx_v_j); if (!__pyx_1) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;} - __pyx_4 = PyNumber_Add(__pyx_v_oS, __pyx_1); if (!__pyx_4) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;} - Py_DECREF(__pyx_1); __pyx_1 = 0; - __pyx_5 = PyInt_AsLong(__pyx_4); if (PyErr_Occurred()) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 33; goto __pyx_L1;} - Py_DECREF(__pyx_4); __pyx_4 = 0; - (((double (*))__pyx_v_b->data)[__pyx_5]) = (((((double (*))((__pyx_v_a->data + __pyx_v_r) + __pyx_v_c))[0]) + (((((((double (*))((__pyx_v_a->data + __pyx_v_rm1) + __pyx_v_c))[0]) + (((double (*))((__pyx_v_a->data + __pyx_v_rp1) + __pyx_v_c))[0])) + (((double (*))((__pyx_v_a->data + __pyx_v_r) + __pyx_v_cm1))[0])) + (((double (*))((__pyx_v_a->data + __pyx_v_r) + __pyx_v_cp1))[0])) * 0.5)) + (((((((double (*))((__pyx_v_a->data + __pyx_v_rm1) + __pyx_v_cm1))[0]) + (((double (*))((__pyx_v_a->data + __pyx_v_rp1) + __pyx_v_cm1))[0])) + (((double (*))((__pyx_v_a->data + __pyx_v_rp1) + __pyx_v_cp1))[0])) + (((double (*))((__pyx_v_a->data + __pyx_v_rm1) + __pyx_v_cp1))[0])) * 0.25)); - __pyx_L4:; - } - __pyx_L5:; - __pyx_L2:; - } - __pyx_L3:; - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":43 */ - Py_INCREF(((PyObject *)__pyx_v_b)); - __pyx_r = ((PyObject *)__pyx_v_b); - goto __pyx_L0; - - __pyx_r = Py_None; Py_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1:; - Py_XDECREF(__pyx_1); - Py_XDECREF(__pyx_4); - __Pyx_AddTraceback("filter.filter"); - __pyx_r = 0; - __pyx_L0:; - Py_DECREF(__pyx_v_a); - Py_DECREF(__pyx_v_b); - Py_DECREF(__pyx_v_oS); - Py_DECREF(__pyx_v_ao); - return __pyx_r; -} - -static __Pyx_InternTabEntry __pyx_intern_tab[] = { - {&__pyx_n_c_numpy, "c_numpy"}, - {&__pyx_n_filter, "filter"}, - {0, 0} -}; - -static struct PyMethodDef __pyx_methods[] = { - {"filter", (PyCFunction)__pyx_f_6filter_filter, METH_VARARGS|METH_KEYWORDS, 0}, - {0, 0, 0, 0} -}; - -static void __pyx_init_filenames(void); /*proto*/ - -PyMODINIT_FUNC initfilter(void); /*proto*/ -PyMODINIT_FUNC initfilter(void) { - __pyx_init_filenames(); - __pyx_m = Py_InitModule4("filter", __pyx_methods, 0, 0, PYTHON_API_VERSION); - if (!__pyx_m) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; - __pyx_b = PyImport_AddModule("__builtin__"); - if (!__pyx_b) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; - if (__Pyx_InternStrings(__pyx_intern_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3; goto __pyx_L1;}; - __pyx_ptype_7c_numpy_dtype = __Pyx_ImportType("numpy", "dtype", sizeof(PyArray_Descr)); if (!__pyx_ptype_7c_numpy_dtype) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 74; goto __pyx_L1;} - __pyx_ptype_7c_numpy_ndarray = __Pyx_ImportType("numpy", "ndarray", sizeof(PyArrayObject)); if (!__pyx_ptype_7c_numpy_ndarray) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 79; goto __pyx_L1;} - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":9 */ - import_array(); - - /* "/Users/oliphant/numpybook/pyrex/filter.pyx":11 */ - return; - __pyx_L1:; - __Pyx_AddTraceback("filter"); -} - -static char *__pyx_filenames[] = { - "filter.pyx", - "c_numpy.pxd", -}; - -/* Runtime support code */ - -static void __pyx_init_filenames(void) { - __pyx_f = __pyx_filenames; -} - -static int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { - if (!type) { - PyErr_Format(PyExc_SystemError, "Missing type object"); - return 0; - } - if (obj == Py_None || PyObject_TypeCheck(obj, type)) - return 1; - PyErr_Format(PyExc_TypeError, "Cannot convert %s to %s", - obj->ob_type->tp_name, type->tp_name); - return 0; -} - -static int __Pyx_InternStrings(__Pyx_InternTabEntry *t) { - while (t->p) { - *t->p = PyString_InternFromString(t->s); - if (!*t->p) - return -1; - ++t; - } - return 0; -} - -static PyTypeObject *__Pyx_ImportType(char *module_name, char *class_name, - long size) -{ - PyObject *py_module_name = 0; - PyObject *py_class_name = 0; - PyObject *py_name_list = 0; - PyObject *py_module = 0; - PyObject *result = 0; - - py_module_name = PyString_FromString(module_name); - if (!py_module_name) - goto bad; - py_class_name = PyString_FromString(class_name); - if (!py_class_name) - goto bad; - py_name_list = PyList_New(1); - if (!py_name_list) - goto bad; - Py_INCREF(py_class_name); - if (PyList_SetItem(py_name_list, 0, py_class_name) < 0) - goto bad; - py_module = __Pyx_Import(py_module_name, py_name_list); - if (!py_module) - goto bad; - result = PyObject_GetAttr(py_module, py_class_name); - if (!result) - goto bad; - if (!PyType_Check(result)) { - PyErr_Format(PyExc_TypeError, - "%s.%s is not a type object", - module_name, class_name); - goto bad; - } - if (((PyTypeObject *)result)->tp_basicsize != size) { - PyErr_Format(PyExc_ValueError, - "%s.%s does not appear to be the correct type object", - module_name, class_name); - goto bad; - } - goto done; -bad: - Py_XDECREF(result); - result = 0; -done: - Py_XDECREF(py_module_name); - Py_XDECREF(py_class_name); - Py_XDECREF(py_name_list); - return (PyTypeObject *)result; -} - -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list) { - PyObject *__import__ = 0; - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - __import__ = PyObject_GetAttrString(__pyx_b, "__import__"); - if (!__import__) - goto bad; - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - module = PyObject_CallFunction(__import__, "OOOO", - name, global_dict, empty_dict, list); -bad: - Py_XDECREF(empty_list); - Py_XDECREF(__import__); - Py_XDECREF(empty_dict); - return module; -} - -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" - -static void __Pyx_AddTraceback(char *funcname) { - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - PyObject *py_globals = 0; - PyObject *empty_tuple = 0; - PyObject *empty_string = 0; - PyCodeObject *py_code = 0; - PyFrameObject *py_frame = 0; - - py_srcfile = PyString_FromString(__pyx_filename); - if (!py_srcfile) goto bad; - py_funcname = PyString_FromString(funcname); - if (!py_funcname) goto bad; - py_globals = PyModule_GetDict(__pyx_m); - if (!py_globals) goto bad; - empty_tuple = PyTuple_New(0); - if (!empty_tuple) goto bad; - empty_string = PyString_FromString(""); - if (!empty_string) goto bad; - py_code = PyCode_New( - 0, /*int argcount,*/ - 0, /*int nlocals,*/ - 0, /*int stacksize,*/ - 0, /*int flags,*/ - empty_string, /*PyObject *code,*/ - empty_tuple, /*PyObject *consts,*/ - empty_tuple, /*PyObject *names,*/ - empty_tuple, /*PyObject *varnames,*/ - empty_tuple, /*PyObject *freevars,*/ - empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - __pyx_lineno, /*int firstlineno,*/ - empty_string /*PyObject *lnotab*/ - ); - if (!py_code) goto bad; - py_frame = PyFrame_New( - PyThreadState_Get(), /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - py_globals, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - py_frame->f_lineno = __pyx_lineno; - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - Py_XDECREF(empty_tuple); - Py_XDECREF(empty_string); - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} diff --git a/numpy/doc/numpybook/comparison/pyrex/filter.pyx b/numpy/doc/numpybook/comparison/pyrex/filter.pyx deleted file mode 100644 index 492bc43de..000000000 --- a/numpy/doc/numpybook/comparison/pyrex/filter.pyx +++ /dev/null @@ -1,44 +0,0 @@ -# -*- Mode: Python -*- Not really, but close enough - -cimport c_numpy -from c_numpy cimport import_array, ndarray, npy_intp,\ - NPY_DOUBLE, NPY_CDOUBLE, NPY_FLOAT, \ - NPY_CFLOAT, NPY_ALIGNED - -#We need to initialize NumPy -import_array() - -def filter(object ao): - cdef ndarray a, b - cdef npy_intp i, j, M, N, S0, S1 - cdef npy_intp r,rm1,rp1,c,cm1,cp1 - - # Require an ALIGNED array (but not necessarily contiguous) - # We will use strides to access the elements. - a = c_numpy.PyArray_FROMANY(ao, NPY_DOUBLE, 2, 2, NPY_ALIGNED) - b = c_numpy.PyArray_ZEROS(a.nd, a.dimensions, a.descr.type_num, 0) - M = a.dimensions[0] - N = a.dimensions[1] - S0 = a.strides[0] - S1 = a.strides[1] - for i from 1 <= i < M-1: - r = i*S0 - rm1 = r-S0 - rp1 = r+S0 - oS = i*N - for j from 1 <= j < N-1: - c = j*S1 - cm1 = c-S1 - cp1 = c+S1 - (<double *>b.data)[oS+j] = \ - (<double *>(a.data+r+c))[0] + \ - ((<double *>(a.data+rm1+c))[0] + \ - (<double *>(a.data+rp1+c))[0] + \ - (<double *>(a.data+r+cm1))[0] + \ - (<double *>(a.data+r+cp1))[0])*0.5 + \ - ((<double *>(a.data+rm1+cm1))[0] + \ - (<double *>(a.data+rp1+cm1))[0] + \ - (<double *>(a.data+rp1+cp1))[0] + \ - (<double *>(a.data+rm1+cp1))[0])*0.25 - return b - diff --git a/numpy/doc/numpybook/comparison/pyrex/setup.py b/numpy/doc/numpybook/comparison/pyrex/setup.py deleted file mode 100644 index 64cf12bc8..000000000 --- a/numpy/doc/numpybook/comparison/pyrex/setup.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env python - -from distutils.core import setup -from distutils.extension import Extension - -import numpy - -# Define a pyrex-based extension module, using the generated sources if pyrex -from Pyrex.Distutils import build_ext -pyx_sources = ['add.pyx'] -cmdclass = {'build_ext': build_ext} - - -pyx_ext = Extension('add', - pyx_sources, - include_dirs = [numpy.get_include()]) - -pyx_ext2 = Extension('blur', - ['blur.pyx'], - include_dirs = [numpy.get_include()]) - - -# Call the routine which does the real work -setup(name = 'add', - description = 'Small example on using Pyrex to write a Numpy extension', - url = 'http://www.scipy.org/Cookbook/Pyrex_and_NumPy', - ext_modules = [pyx_ext, pyx_ext2], - cmdclass = cmdclass, - ) diff --git a/numpy/doc/numpybook/comparison/pyrex/timeme b/numpy/doc/numpybook/comparison/pyrex/timeme deleted file mode 100755 index 2f7cd297f..000000000 --- a/numpy/doc/numpybook/comparison/pyrex/timeme +++ /dev/null @@ -1,2 +0,0 @@ -python2.4 -m timeit -s "import numpy as N; a=N.random.rand(100,200); import filter" "b = filter.filter(a)" - diff --git a/numpy/doc/numpybook/comparison/timing.py b/numpy/doc/numpybook/comparison/timing.py deleted file mode 100644 index 14841d7cb..000000000 --- a/numpy/doc/numpybook/comparison/timing.py +++ /dev/null @@ -1,63 +0,0 @@ - -import timeit - -pyrex_pre = """ -import numpy as N -a = N.random.rand(%d,%d) -import filter -""" - -pyrex_run = """ -b = filter.filter(a) -""" - -weave_pre = """ -import numpy as N -a = N.random.rand(%d,%d) -import filter -""" - -weave_run = """ -b = filter.filter(a) -""" - -ctypes_pre = """ -import numpy as N -a = N.random.rand(%d,%d) -import filter -""" - -ctypes_run = """ -b = filter.filter(a) -""" - -f2py_pre = """ -import numpy as N -a = N.random.rand(%d, %d).T -import filter -""" - -f2py_run = """ -b = N.zeros_like(a) -filter.DFILTER2D(a,b) -""" - -N = [10,20,30,40,50,100,200,300, 400, 500] - -res = {} - -import os -import sys -path = sys.path - -for kind in ['f2py']:#['ctypes', 'pyrex', 'weave', 'f2py']: - res[kind] = [] - sys.path = ['/Users/oliphant/numpybook/%s' % (kind,)] + path - print sys.path - for n in N: - print "%s - %d" % (kind, n) - t = timeit.Timer(eval('%s_run'%kind), eval('%s_pre %% (%d,%d)'%(kind,n,n))) - mytime = min(t.repeat(3,100)) - res[kind].append(mytime) - - diff --git a/numpy/doc/numpybook/comparison/weave/filter.py b/numpy/doc/numpybook/comparison/weave/filter.py deleted file mode 100644 index b2fdb277e..000000000 --- a/numpy/doc/numpybook/comparison/weave/filter.py +++ /dev/null @@ -1,23 +0,0 @@ -from scipy import weave, zeros_like - -def filter(a): - if a.ndim != 2: - raise ValueError, "a must be 2-d" - code = r""" - int i,j; - for(i=1;i<Na[0]-1;i++) { - for(j=1;j<Na[1]-1;j++) { - B2(i,j) = A2(i,j) + (A2(i-1,j) + - A2(i+1,j) + A2(i,j-1) - + A2(i,j+1))*0.5 - + (A2(i-1,j-1) - + A2(i-1,j+1) - + A2(i+1,j-1) - + A2(i+1,j+1))*0.25; - } - } - """ - b = zeros_like(a) - weave.inline(code,['a','b']) - return b - diff --git a/numpy/doc/numpybook/comparison/weave/inline.py b/numpy/doc/numpybook/comparison/weave/inline.py deleted file mode 100644 index 31499213e..000000000 --- a/numpy/doc/numpybook/comparison/weave/inline.py +++ /dev/null @@ -1,49 +0,0 @@ -from scipy import weave -from numpy import rand, zeros_like - -def example1(a): - if not isinstance(a, list): - raise ValueError, "argument must be a list" - code = r""" - int i; - py::tuple results(2); - for (i=0; i<a.length(); i++) { - a[i] = i; - } - results[0] = 3.0; - results[1] = 4.0; - return_val = results; - """ - return weave.inline(code,['a']) - -def arr(a): - if a.ndim != 2: - raise ValueError, "a must be 2-d" - code = r""" - int i,j; - for(i=1;i<Na[0]-1;i++) { - for(j=1;j<Na[1]-1;j++) { - B2(i,j) = A2(i,j) + A2(i-1,j)*0.5 + - A2(i+1,j)*0.5 + A2(i,j-1)*0.5 - + A2(i,j+1)*0.5 - + A2(i-1,j-1)*0.25 - + A2(i-1,j+1)*0.25 - + A2(i+1,j-1)*0.25 - + A2(i+1,j+1)*0.25; - } - } - """ - b = zeros_like(a) - weave.inline(code,['a','b']) - return b - -a = [None]*10 -print example1(a) -print a - -a = rand(512,512) -b = arr(a) - -h = [[0.25,0.5,0.25],[0.5,1,0.5],[0.25,0.5,0.25]] -import scipy.signal as ss -b2 = ss.convolve(h,a,'same') diff --git a/numpy/doc/numpybook/comparison/weave/timeme b/numpy/doc/numpybook/comparison/weave/timeme deleted file mode 100755 index 2f7cd297f..000000000 --- a/numpy/doc/numpybook/comparison/weave/timeme +++ /dev/null @@ -1,2 +0,0 @@ -python2.4 -m timeit -s "import numpy as N; a=N.random.rand(100,200); import filter" "b = filter.filter(a)" - diff --git a/numpy/doc/numpybook/graphics/note.eps b/numpy/doc/numpybook/graphics/note.eps deleted file mode 100644 index 6dc22e31c..000000000 --- a/numpy/doc/numpybook/graphics/note.eps +++ /dev/null @@ -1,116 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: note.fig -%%Creator: fig2dev Version 3.2 Patchlevel 4 -%%CreationDate: Wed Aug 24 03:03:42 2005 -%%For: oliphant@den.local.net (Travis Oliphant) -%%BoundingBox: 0 0 88 88 -%%Magnification: 1.0000 -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def -/col32 {0.875 0.953 0.996 srgb} bind def -/col33 {0.996 0.820 0.820 srgb} bind def -/col34 {0.984 0.961 0.859 srgb} bind def - -end -save -newpath 0 88 moveto 0 0 lineto 88 0 lineto 88 88 lineto closepath clip newpath -% Fill background color -0 0 moveto 88 0 lineto 88 88 lineto 0 88 lineto -closepath 0.98 0.96 0.86 setrgbcolor fill - --172.1 187.9 translate -1 -1 scale - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06000 0.06000 sc -% -% Fig objects follow -% -% -% here starts figure with depth 52 -% Polyline -7.500 slw -n 3600 1680 m 2880 2400 l 3600 3120 l 4320 2400 l - cp gs col31 1.00 shd ef gr gs col31 s gr -% here ends figure; -% -% here starts figure with depth 50 -% Polyline -60.000 slw -n 3600 1860 m 3060 2400 l 3600 2940 l 4140 2400 l - cp gs col0 s gr -% here ends figure; -$F2psEnd -rs -showpage diff --git a/numpy/doc/numpybook/graphics/note.fig b/numpy/doc/numpybook/graphics/note.fig deleted file mode 100644 index 3a193a52c..000000000 --- a/numpy/doc/numpybook/graphics/note.fig +++ /dev/null @@ -1,16 +0,0 @@ -#FIG 3.2 -Landscape -Center -Inches -Letter -100.00 -Single --2 -1200 2 -0 32 #e0f4ff -0 33 #ffd2d2 -0 34 #fcf6dc -2 3 0 1 31 31 52 -1 20 0.000 0 0 -1 0 0 5 - 3600 1680 2880 2400 3600 3120 4320 2400 3600 1680 -2 3 0 5 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 - 3600 1860 3060 2400 3600 2940 4140 2400 3600 1860 diff --git a/numpy/doc/numpybook/graphics/note.png b/numpy/doc/numpybook/graphics/note.png Binary files differdeleted file mode 100644 index bea5b70be..000000000 --- a/numpy/doc/numpybook/graphics/note.png +++ /dev/null diff --git a/numpy/doc/numpybook/graphics/tip.eps b/numpy/doc/numpybook/graphics/tip.eps deleted file mode 100644 index b87fd662c..000000000 --- a/numpy/doc/numpybook/graphics/tip.eps +++ /dev/null @@ -1,127 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: tip.fig -%%Creator: fig2dev Version 3.2 Patchlevel 4 -%%CreationDate: Tue Aug 23 23:51:46 2005 -%%For: oliphant@den.local.net (Travis Oliphant) -%%BoundingBox: 0 0 88 88 -%%Magnification: 1.0000 -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def -/col32 {0.875 0.953 0.996 srgb} bind def -/col33 {0.000 0.000 0.000 srgb} bind def - -end -save -newpath 0 88 moveto 0 0 lineto 88 0 lineto 88 88 lineto closepath clip newpath -% Fill background color -0 0 moveto 88 0 lineto 88 88 lineto 0 88 lineto -closepath 0.88 0.95 1.00 setrgbcolor fill - --172.3 187.6 translate -1 -1 scale - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def - /DrawEllipse { - /endangle exch def - /startangle exch def - /yrad exch def - /xrad exch def - /y exch def - /x exch def - /savematrix mtrx currentmatrix def - x y tr xrad yrad sc 0 0 1 startangle endangle arc - closepath - savematrix setmatrix - } def - -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06000 0.06000 sc -% -% Fig objects follow -% -% -% here starts figure with depth 51 -% Ellipse -7.500 slw -n 3600 2400 720 720 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col7 s gr - -% Ellipse -n 3600 2400 660 660 0 360 DrawEllipse gs col1 1.00 shd ef gr gs col1 s gr - -/Times-Bold ff 1650.00 scf sf -3384 2940 m -gs 1 -1 sc (i) col7 sh gr -% here ends figure; -$F2psEnd -rs -showpage diff --git a/numpy/doc/numpybook/graphics/tip.fig b/numpy/doc/numpybook/graphics/tip.fig deleted file mode 100644 index 77db02fe1..000000000 --- a/numpy/doc/numpybook/graphics/tip.fig +++ /dev/null @@ -1,14 +0,0 @@ -#FIG 3.2 -Landscape -Center -Inches -Letter -100.00 -Single --2 -1200 2 -0 32 #e0f4ff -0 33 #000000 -1 3 0 1 1 1 50 -1 20 0.000 1 0.0000 3600 2400 660 660 3600 2400 4260 2400 -1 3 0 1 7 7 51 -1 20 0.000 1 0.0000 3600 2400 720 720 3600 2400 4320 2400 -4 0 7 50 -1 2 110 0.0000 4 1140 465 3384 2940 i\001 diff --git a/numpy/doc/numpybook/graphics/tip.png b/numpy/doc/numpybook/graphics/tip.png Binary files differdeleted file mode 100644 index 6a63550e2..000000000 --- a/numpy/doc/numpybook/graphics/tip.png +++ /dev/null diff --git a/numpy/doc/numpybook/graphics/tip.xfig.fig b/numpy/doc/numpybook/graphics/tip.xfig.fig deleted file mode 100644 index ede65f7c4..000000000 --- a/numpy/doc/numpybook/graphics/tip.xfig.fig +++ /dev/null @@ -1,12 +0,0 @@ -#FIG 3.2 -Landscape -Center -Inches -Letter -100.00 -Single --2 -1200 2 -1 3 0 1 1 1 50 -1 20 0.000 1 0.0000 3600 2400 660 660 3600 2400 4260 2400 -1 3 0 1 7 7 51 -1 20 0.000 1 0.0000 3600 2400 720 720 3600 2400 4320 2400 -4 0 7 50 -1 2 92 0.0000 4 960 390 3450 2850 i\001 diff --git a/numpy/doc/numpybook/graphics/warning.eps b/numpy/doc/numpybook/graphics/warning.eps deleted file mode 100644 index d854a99ff..000000000 --- a/numpy/doc/numpybook/graphics/warning.eps +++ /dev/null @@ -1,125 +0,0 @@ -%!PS-Adobe-2.0 EPSF-2.0 -%%Title: warning.fig -%%Creator: fig2dev Version 3.2 Patchlevel 4 -%%CreationDate: Wed Aug 24 00:00:52 2005 -%%For: oliphant@den.local.net (Travis Oliphant) -%%BoundingBox: 0 0 88 88 -%%Magnification: 1.0000 -%%EndComments -/$F2psDict 200 dict def -$F2psDict begin -$F2psDict /mtrx matrix put -/col-1 {0 setgray} bind def -/col0 {0.000 0.000 0.000 srgb} bind def -/col1 {0.000 0.000 1.000 srgb} bind def -/col2 {0.000 1.000 0.000 srgb} bind def -/col3 {0.000 1.000 1.000 srgb} bind def -/col4 {1.000 0.000 0.000 srgb} bind def -/col5 {1.000 0.000 1.000 srgb} bind def -/col6 {1.000 1.000 0.000 srgb} bind def -/col7 {1.000 1.000 1.000 srgb} bind def -/col8 {0.000 0.000 0.560 srgb} bind def -/col9 {0.000 0.000 0.690 srgb} bind def -/col10 {0.000 0.000 0.820 srgb} bind def -/col11 {0.530 0.810 1.000 srgb} bind def -/col12 {0.000 0.560 0.000 srgb} bind def -/col13 {0.000 0.690 0.000 srgb} bind def -/col14 {0.000 0.820 0.000 srgb} bind def -/col15 {0.000 0.560 0.560 srgb} bind def -/col16 {0.000 0.690 0.690 srgb} bind def -/col17 {0.000 0.820 0.820 srgb} bind def -/col18 {0.560 0.000 0.000 srgb} bind def -/col19 {0.690 0.000 0.000 srgb} bind def -/col20 {0.820 0.000 0.000 srgb} bind def -/col21 {0.560 0.000 0.560 srgb} bind def -/col22 {0.690 0.000 0.690 srgb} bind def -/col23 {0.820 0.000 0.820 srgb} bind def -/col24 {0.500 0.190 0.000 srgb} bind def -/col25 {0.630 0.250 0.000 srgb} bind def -/col26 {0.750 0.380 0.000 srgb} bind def -/col27 {1.000 0.500 0.500 srgb} bind def -/col28 {1.000 0.630 0.630 srgb} bind def -/col29 {1.000 0.750 0.750 srgb} bind def -/col30 {1.000 0.880 0.880 srgb} bind def -/col31 {1.000 0.840 0.000 srgb} bind def -/col32 {0.875 0.953 0.996 srgb} bind def -/col33 {0.996 0.820 0.820 srgb} bind def -/col34 {0.984 0.961 0.859 srgb} bind def - -end -save -newpath 0 88 moveto 0 0 lineto 88 0 lineto 88 88 lineto closepath clip newpath -% Fill background color -0 0 moveto 88 0 lineto 88 88 lineto 0 88 lineto -closepath 1.00 0.82 0.82 setrgbcolor fill - --172.3 187.6 translate -1 -1 scale - -/cp {closepath} bind def -/ef {eofill} bind def -/gr {grestore} bind def -/gs {gsave} bind def -/sa {save} bind def -/rs {restore} bind def -/l {lineto} bind def -/m {moveto} bind def -/rm {rmoveto} bind def -/n {newpath} bind def -/s {stroke} bind def -/sh {show} bind def -/slc {setlinecap} bind def -/slj {setlinejoin} bind def -/slw {setlinewidth} bind def -/srgb {setrgbcolor} bind def -/rot {rotate} bind def -/sc {scale} bind def -/sd {setdash} bind def -/ff {findfont} bind def -/sf {setfont} bind def -/scf {scalefont} bind def -/sw {stringwidth} bind def -/tr {translate} bind def -/tnt {dup dup currentrgbcolor - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add - 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} - bind def -/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul - 4 -2 roll mul srgb} bind def - /DrawEllipse { - /endangle exch def - /startangle exch def - /yrad exch def - /xrad exch def - /y exch def - /x exch def - /savematrix mtrx currentmatrix def - x y tr xrad yrad sc 0 0 1 startangle endangle arc - closepath - savematrix setmatrix - } def - -/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def -/$F2psEnd {$F2psEnteredState restore end} def - -$F2psBegin -10 setmiterlimit -0 slj 0 slc - 0.06000 0.06000 sc -% -% Fig objects follow -% -% -% here starts figure with depth 50 -% Ellipse -7.500 slw -n 3600 2400 720 720 0 360 DrawEllipse gs col20 1.00 shd ef gr gs col20 s gr - -% Polyline -n 3096 2268 m 4104 2268 l 4104 2532 l 3096 2532 l - cp gs col7 1.00 shd ef gr gs col7 s gr -% here ends figure; -$F2psEnd -rs -showpage diff --git a/numpy/doc/numpybook/graphics/warning.fig b/numpy/doc/numpybook/graphics/warning.fig deleted file mode 100644 index 89424d5ba..000000000 --- a/numpy/doc/numpybook/graphics/warning.fig +++ /dev/null @@ -1,15 +0,0 @@ -#FIG 3.2 -Landscape -Center -Inches -Letter -100.00 -Single --2 -1200 2 -0 32 #e0f4ff -0 33 #ffd2d2 -0 34 #fcf6dc -1 3 0 1 20 20 50 -1 20 0.000 1 0.0000 3600 2400 720 720 3600 2400 4320 2400 -2 2 0 1 7 7 50 -1 20 0.000 0 0 -1 0 0 5 - 3096 2268 4104 2268 4104 2532 3096 2532 3096 2268 diff --git a/numpy/doc/numpybook/graphics/warning.png b/numpy/doc/numpybook/graphics/warning.png Binary files differdeleted file mode 100644 index 12f105160..000000000 --- a/numpy/doc/numpybook/graphics/warning.png +++ /dev/null diff --git a/numpy/doc/numpybook/mybook.layout b/numpy/doc/numpybook/mybook.layout deleted file mode 100644 index 588384dd3..000000000 --- a/numpy/doc/numpybook/mybook.layout +++ /dev/null @@ -1,177 +0,0 @@ -#% Do not delete the line below; configure depends on this -# \DeclareLaTeXClass[book]{Stylish Book} -# Book textclass definition file. Taken from initial LyX source code -# Author : Matthias Ettrich <ettrich@informatik.uni-tuebingen.de> -# Transposed by Pascal André <andre@via.ecp.fr> -# Heavily modifed and enhanced by serveral developers. - -# Input general definitions -Input stdclass.inc - -# Global parameters. -Sides 2 -PageStyle Headings - -# There is no abstract environment in book.cls -NoStyle Abstract - -# a few changes to the bibliography -Style Bibliography - TopSep 4 - LabelString Bibliography - # label font definition - LabelFont - Series Bold - Size Huge - EndFont -End - - -Style Note - LatexType Command - LatexName notel - - LabelType Centered_Top_Environment - LabelString "NOTE" - AlignPossible Left - LeftMargin "MMMMM" - RightMargin "MMMMM" - ParSkip 0.7 - ParSep 0.7 - TopSep 0.7 - BottomSep 0.7 - - Font - Shape SmallCaps - Color Magenta - EndFont - Preamble - \usepackage{color} - \setlength{\fboxrule}{2pt} - \definecolor{noteback}{rgb}{0.988235, 0.964706, 0.862745} - \newcommand{\notel}[1]{% - \begin{center}% - \fcolorbox{black}{noteback}{% - \begin{minipage}{0.8\textwidth}% - \includegraphics[height=0.3in]{graphics/note.eps}% - \vskip-0.3in\hskip1.65in{\large\bf NOTE} \\[0.2cm]% - #1% - \end{minipage}% - }% - \end{center}% - } - EndPreamble -End - - -Style Warning - LatexType Command - LatexName warnl - - LabelType Centered_Top_Environment - LabelString "WARNING" - AlignPossible Left - LeftMargin "MMMMM" - RightMargin "MMMMM" - ParSkip 0.7 - ParSep 0.7 - TopSep 0.7 - BottomSep 0.7 - - Font - Shape SmallCaps - Color Red - EndFont - Preamble - \usepackage{color} - \setlength{\fboxrule}{2pt} - \definecolor{warnback}{rgb}{1.0, 0.8235294, 0.8235294} - \newcommand{\warnl}[1]{% - \begin{center}% - \fcolorbox{black}{warnback}{% - \begin{minipage}{0.8\textwidth}% - \includegraphics[height=0.3in]{graphics/warning.eps}% - \vskip-0.3in\hskip1.5in{\large\bf WARNING} \\[0.2cm]% - #1% - \end{minipage}% - }% - \end{center}% - } - EndPreamble -End - - -Style Tip - LatexType Command - LatexName tipl - - LabelType Centered_Top_Environment - LabelString "TIP" - AlignPossible Left - LeftMargin "MMMMM" - RightMargin "MMMMM" - ParSkip 0.7 - ParSep 0.7 - TopSep 0.7 - BottomSep 0.7 - - Font - Shape SmallCaps - Color Blue - EndFont - Preamble - \usepackage{color} - \setlength{\fboxrule}{2pt} - \definecolor{tipback}{rgb}{0.87843, 0.95686, 1.0} - \newcommand{\tipl}[1]{% - \begin{center}% - \fcolorbox{black}{tipback}{% - \begin{minipage}{0.8\textwidth}% - \includegraphics[height=0.3in]{graphics/tip.eps}% - \vskip-0.3in\hskip1.8in{\large\bf TIP} \\[0.2cm]% - #1% - \end{minipage}% - }% - \end{center}% - } - EndPreamble -End - -Style MyCode - Margin Static - LatexType Environment - LatexName mycode - NextNoIndent 1 - LeftMargin MMM - RightMargin MMM - TopSep 0.5 - BottomSep 0.5 - Align Left - AlignPossible Block, Left, Right, Center - LabelType No_Label - FreeSpacing 1 - - # define the environment lyxcode - Preamble - \usepackage{color} - \setlength{\fboxrule}{2pt} - \definecolor{codeback}{rgb}{0.94118,0.94118,0.94118} - \newsavebox{\mycodesavebox} - \newenvironment{mycode} - {\begin{lrbox}{\mycodesavebox}% - \begin{minipage}{0.95\linewidth}% - \begin{trivlist} - \setlength{\itemsep}{0pt} - \setlength{\parsep}{0pt} - \normalfont\ttfamily - \item[] } - {\end{trivlist}\end{minipage}\end{lrbox}% - \vskip 0.5em \begin{center}\fcolorbox{black}{codeback}{\usebox{\mycodesavebox}}\end{center}\par \vskip 0.5em} - EndPreamble - - # standard font definition - Font - Family Typewriter - EndFont - -End diff --git a/numpy/doc/numpybook/numpybook.lyx b/numpy/doc/numpybook/numpybook.lyx deleted file mode 100644 index 16ee19d90..000000000 --- a/numpy/doc/numpybook/numpybook.lyx +++ /dev/null @@ -1,27836 +0,0 @@ -#LyX 1.5.1 created this file. For more info see http://www.lyx.org/ -\lyxformat 276 -\begin_document -\begin_header -\textclass mybook -\begin_preamble - - - -\usepackage{array} - -% This gives us a better font in URL links (otherwise the default -% MonoSpace font is bitmapped, and it looks horrible in PDF) -\usepackage{courier} - -\usepackage{fullpage} - -\usepackage{color} % so we can use red for the fixme warnings - -% The hyperref package gives us a pdf with properly built -% internal navigation ('pdf bookmarks' for the table of contents, -% internal cross-reference links, web links for URLs, etc.) - -% A few colors to replace the defaults for certain link types -\definecolor{darkorange}{rgb}{.71,0.21,0.01} -\definecolor{darkgreen}{rgb}{.12,.54,.11} - -\usepackage[ - %pdftex, % needed for pdflatex - breaklinks=true, % so long urls are correctly broken across lines - colorlinks=true, - urlcolor=blue, - linkcolor=darkorange, - citecolor=darkgreen, - ]{hyperref} - -% This helps prevent overly long lines that stretch beyond the margins -\sloppy - -% Define a \fixme command to mark visually things needing fixing in the draft. -% For final printing or to simply disable these bright warnings, simply -% uncomment the \renewcommand redefinition below - -\newcommand{\fixme}[1] { -\textcolor{red}{ -{\fbox{ {\bf FIX} -\ensuremath{\blacktriangleright \blacktriangleright \blacktriangleright}} -{\bf #1} -\fbox{\ensuremath{ \blacktriangleleft \blacktriangleleft \blacktriangleleft } -} } } -} -% Uncomment the next line to make the \fixme command be a no-op -%\renewcommand{\fixme}[1]{} - -%%% If you also want to use the listings package for nicely formatted -%%% Python source code, this configuration produces good on-paper and -%%% on-screen results: - -\definecolor{orange}{cmyk}{0,0.4,0.8,0.2} -% Use and configure listings package for nicely formatted code -\usepackage{listings} -\lstset{ - language=Python, - basicstyle=\small\ttfamily, - commentstyle=\ttfamily\color{blue}, - stringstyle=\ttfamily\color{orange}, - showstringspaces=false, - breaklines=true, - postbreak = \space\dots -} -\end_preamble -\language english -\inputencoding auto -\font_roman default -\font_sans default -\font_typewriter default -\font_default_family default -\font_sc false -\font_osf false -\font_sf_scale 100 -\font_tt_scale 100 -\graphics default -\paperfontsize 10 -\spacing onehalf -\papersize custom -\use_geometry true -\use_amsmath 2 -\use_esint 0 -\cite_engine basic -\use_bibtopic false -\paperorientation portrait -\paperwidth 7in -\paperheight 9in -\leftmargin 1in -\topmargin 1in -\rightmargin 1in -\bottommargin 1in -\secnumdepth 3 -\tocdepth 3 -\paragraph_separation indent -\defskip medskip -\quotes_language english -\papercolumns 1 -\papersides 1 -\paperpagestyle headings -\tracking_changes false -\output_changes false -\author "" -\author "" -\end_header - -\begin_body - -\begin_layout Standard -\begin_inset VSpace 2in* -\end_inset - - -\end_layout - -\begin_layout Standard -\align center - -\family sans -\series bold -\size giant -Guide to NumPy -\end_layout - -\begin_layout Standard -\align center - -\family sans -\size larger -Travis E. - Oliphant, PhD -\newline -August 21, 2008 -\end_layout - -\begin_layout Standard -\begin_inset VSpace vfill -\end_inset - -This book was released from a restricted distribution using a Market-Determined, - Temporary, Distribution-Restriction (MDTDR) system (see http://www.trelgol.com) - on August 21, 2008. - It is now released to the public domain and can be used as source material - for other works. - -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand tableofcontents - -\end_inset - - -\end_layout - -\begin_layout Standard -\begin_inset FloatList table - -\end_inset - - -\end_layout - -\begin_layout Part -NumPy from Python -\end_layout - -\begin_layout Chapter -Origins of NumPy -\end_layout - -\begin_layout Quotation -A complex system that works is invariably found to have evolved from a simple - system that worked -\end_layout - -\begin_layout Right Address ---- -\emph on -John Gall -\end_layout - -\begin_layout Quotation -Copy from one, it's plagiarism; copy from two, it's research. -\end_layout - -\begin_layout Right Address ---- -\emph on -Wilson Mizner -\end_layout - -\begin_layout Standard -NumPy builds on (and is a successor to) the successful Numeric array object. - Its goal is to create the corner-stone for a useful environment for scientific - computing. - In order to better understand the people surrounding NumPy and (its library-pac -kage) SciPy, I will explain a little about how SciPy and (current) NumPy - originated. - In 1998, as a graduate student studying biomedical imaging at the Mayo - Clinic in Rochester, MN, I came across Python and its numerical extension - (Numeric) while I was looking for ways to analyze large data sets for Magnetic - Resonance Imaging and Ultrasound using a high-level language. - I quickly fell in love with Python programming which is a remarkable statement - to make about a programming language. - If I had not seen others with the same view, I might have seriously doubted - my sanity. - I became rather involved in the Numeric Python community, adding the C-API - chapter to the Numeric documentation (for which Paul Dubois graciously - made me a co-author). - -\end_layout - -\begin_layout Standard -As I progressed with my thesis work, programming in Python was so enjoyable - that I felt inhibited when I worked with other programming frameworks. - As a result, when a task I needed to perform was not available in the core - language, or in the Numeric extension, I looked around and found C or Fortran - code that performed the needed task, wrapped it into Python (either by - hand or using SWIG), and used the new functionality in my programs. - -\end_layout - -\begin_layout Standard -Along the way, I learned a great deal about the underlying structure of - Numeric and grew to admire it's simple but elegant structures that grew - out of the mechanism by which Python allows itself to be extended. - -\end_layout - -\begin_layout Note -Numeric was originally written in 1995 based off of an earlier Matrix Object - design by Jim Fulton which was released in 1994. - Most of the code was written by Jim Hugunin while he was a graduate student - at MIT. - He received help from many people including Jim Fulton, David Ascher, Paul - Dubois, and Konrad Hinsen. - These individuals and many others added comments, criticisms, and code - which helped the Numeric extension reach stability. - Jim Hugunin did not stay long as an active member of the community --- - moving on to write Jython and, later, Iron Python. -\end_layout - -\begin_layout Standard -By operating in this need-it-make-it fashion I ended up with a substantial - library of extension modules that helped Python + Numeric become easier - to use in a scientific setting. - These early modules included raw input-output functions, a special function - library, an integration library, an ordinary differential equation solver, - some least-squares optimizers, and sparse matrix solvers. - While I was doing this laborious work, Pearu Peterson noticed that a lot - of the routines I was wrapping were written in Fortran, and there was no - simplified wrapping mechanism for Fortran subroutines (like SWIG for C). - He began the task of writing f2py which made it possible to easily wrap - Fortran programs into Python. - I helped him a little bit, mostly with testing and contributing early function- -call-back code, but he put forth the brunt of the work. - His result was simply amazing to me. - I've always been impressed with f2py, especially because I knew how much - effort writing and maintaining extension modules could be. - Anybody serious about scientific computing with Python will appreciate - that f2py is distributed along with NumPy. -\end_layout - -\begin_layout Standard -When I finished my Ph.D. - in 2001, Eric Jones (who had recently completed his Ph.D. - at Duke) contacted me because he had a collection of Python modules he - had developed as part of his thesis work as well. - He wanted to combine his modules with mine into one super package. - Together with Pearu Peterson we joined our efforts, and SciPy was born - in 2001. - Since then, many people have contributed module code to SciPy including - Ed Schofield, Robert Cimrman, David M. - Cooke, Charles (Chuck) Harris, Prabhu Ramachandran, Gary Strangman, Jean-Sebast -ien Roy, and Fernando Perez. - Others such as Travis Vaught, David Morrill, Jeff Whitaker, and Louis Luangkeso -rn have contributed testing and build support. - -\end_layout - -\begin_layout Standard -At the start of 2005, SciPy was at release 0.3 and relatively stable for - an early version number. - Part of the reason it was difficult to stabilize SciPy was that the array - object upon which SciPy builds was undergoing a bit of an upheaval. - At about the same time as SciPy was being built, some Numeric users were - hitting up against the limited capabilities of Numeric. - In particular, the ability to deal with memory mapped files (and associated - alignment and swapping issues), record arrays, and altered error checking - modes were important but limited or non-existent in Numeric. - As a result, numarray was created by Perry Greenfield, Todd Miller, and - Rick White at the Space Science Telescope Institute as a replacement for - Numeric. - Numarray used a very different implementation scheme as a mix of Python - classes and C code (which led to slow downs in certain common uses). - While improving some capabilities, it was slow to pick up on the more advanced - features of Numeric's universal functions (ufuncs) --- never re-creating - the C-API that SciPy depended on. - This made it difficult for SciPy to -\begin_inset Quotes eld -\end_inset - -convert -\begin_inset Quotes erd -\end_inset - - to numarray. - -\end_layout - -\begin_layout Standard -Many newcomers to scientific computing with Python were told that numarray - was the future and started developing for it. - Very useful tools were developed that could not be used with Numeric (because - of numarray's change in C-API), and therefore could not be used easily - in SciPy. - This state of affairs was very discouraging for me personally as it left - the community fragmented. - Some developed for numarray, others developed as part of SciPy. - A few people even rejected adopting Python for scientific computing entirely - because of the split. - In addition, I estimate that quite a few Python users simply stayed away - from both SciPy and numarray, leaving the community smaller than it could - have been given the number of people that use Python for science and engineerin -g purposes. - -\end_layout - -\begin_layout Standard -It should be recognized that the split was not intentional, but simply an - outgrowth of the different and exacting demands of scientific computing - users. - My describing these events should not be construed as assigning blame to - anyone. - I very much admire and appreciate everyone I've met who is involved with - scientific computing and Python. - Using a stretched biological metaphor, it is only through the process of - dividing and merging that better results are born. - I think this concept applies to NumPy. -\end_layout - -\begin_layout Standard -In early 2005, I decided to begin an effort to help bring the diverging - community together under a common framework if it were possible. - I first looked at numarray to see what could be done to add the missing - features to make SciPy work with it as a core array object. - After a couple of days of studying numarray, I was not enthusiastic about - this approach. - My familiarity with the Numeric code base no doubt biased my opinion, but - it seemed to me that the features of Numarray could be added back to Numeric - with a few fundamental changes to the core object. - This would make the transition of SciPy to a more enhanced array object - much easier in my mind. - -\end_layout - -\begin_layout Standard -Therefore, I began to construct this hybrid array object complete with an - enhanced set of universal (broadcasting) functions that could deal with - it. - Along the way, quite a few new features and significant enhancements were - added to the array object and its surrounding infrastructure. - This book describes the result of that year-and-a-half-long effort which - culminated with the release of NumPy 0.9.2 in early 2006 and NumPy 1.0 in - late 2006. - I first named the new package, SciPy Core, and used the scipy namespace. - However, after a few months of testing under that name, it became clear - that a separate namespace was needed for the new package. - As a result, a rapid search for a new name resulted in actually coming - back to the NumPy name which was the unofficial name of Numerical Python - but never the actual namespace. - Because the new package builds on the code-base of and is a successor to - Numeric, I think the NumPy name is fitting and hopefully not too confusing - to new users. -\end_layout - -\begin_layout Standard -This book only briefly outlines some of the infrastructure that surrounds - the basic objects in NumPy to provide the additional functionality contained - in the older Numeric package ( -\emph on -i.e. - -\emph default - LinearAlgebra, RandomArray, FFT). - This infrastructure in NumPy includes basic linear algebra routines, Fourier - transform capabilities, and random number generators. - In addition, the f2py module is described in its own documentation, and - so is only briefly mentioned in the second part of the book. - There are also extensions to the standard Python distutils and testing - frameworks included with NumPy that are useful in constructing your own - packages built on top of NumPy. - The central purpose of this book, however, is to describe and document - the basic NumPy system that is available under the numpy namespace. -\end_layout - -\begin_layout Note -The numpy namespace includes all names under the numpy.core and numpy.lib - namespaces as well. - Thus, -\family typewriter -import numpy -\family default - will also import the names from numpy.core and numpy.lib. - This is the recommended way to use numpy. -\end_layout - -\begin_layout Standard -The following table gives a brief outline of the sub-packages contained - in numpy package. -\end_layout - -\begin_layout Standard -\align center -\begin_inset Tabular -<lyxtabular version="3" rows="9" columns="3"> -<features> -<column alignment="center" valignment="top" leftline="true" width="1in"> -<column alignment="center" valignment="top" leftline="true" width="2in"> -<column alignment="center" valignment="top" leftline="true" rightline="true" width="2in"> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Package -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Purpose -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Comments -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -core -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -basic objects -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -all names exported to numpy -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -lib -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -additional utilities -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -all names exported to numpy -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -linalg -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -basic linear algebra -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -old LinearAlgebra from Numeric -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -fft -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -discrete Fourier transforms -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -old FFT from Numeric -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -random -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -random number generators -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -old RandomArray from Numeric -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -distutils -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -enhanced build and distribution -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -improvements built on standard distutils -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -testing -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -unit-testing -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -utility functions useful for testing -\end_layout - -\end_inset -</cell> -</row> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -f2py -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -automatic wrapping of Fortran code -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -a useful utility needed by SciPy -\end_layout - -\end_inset -</cell> -</row> -</lyxtabular> - -\end_inset - - -\end_layout - -\begin_layout Chapter -Object Essentials -\end_layout - -\begin_layout Quotation -Our programs last longer if we manage to build simple abstractions for ourselves... -\end_layout - -\begin_layout Right Address ---- -\emph on -Ron Jeffries -\end_layout - -\begin_layout Quotation -I will tell you the truth as soon as I figure it out. -\end_layout - -\begin_layout Right Address ---- -\emph on -Wayne Birmingham -\end_layout - -\begin_layout Standard -NumPy provides two fundamental objects: an N-dimensional array object ( -\family typewriter -ndarray -\family default -) and a universal function object ( -\family typewriter -ufunc -\family default -). - In addition, there are other objects that build on top of these which you - may find useful in your work, and these will be discussed later. - The current chapter will provide background information on just the -\family typewriter -ndarray -\family default - and the -\family typewriter -ufunc -\family default - that will be important for understanding the attributes and methods to - be discussed later. - -\end_layout - -\begin_layout Standard -An N-dimensional array is a homogeneous collection of -\begin_inset Quotes eld -\end_inset - -items -\begin_inset Quotes erd -\end_inset - - indexed using -\begin_inset Formula $N$ -\end_inset - - integers. - There are two essential pieces of information that define an -\begin_inset Formula $N$ -\end_inset - --dimensional array: 1) the shape of the array, and 2) the kind of item the - array is composed of. - The shape of the array is a tuple of -\begin_inset Formula $N$ -\end_inset - - integers (one for each dimension) that provides information on how far - the index can vary along that dimension. - The other important information describing an array is the kind of item - the array is composed of. - Because every -\family typewriter -ndarray -\family default - is a homogeneous collection of exactly the same data-type, every item takes - up the same size block of memory, and each block of memory in the array - is interpreted in exactly the same way -\begin_inset Foot -status open - -\begin_layout Standard -By using OBJECT arrays, one can effectively have heterogeneous arrays, but - the system still sees each element of the array as exactly the same thing - (a reference to a Python object). -\end_layout - -\end_inset - -. -\end_layout - -\begin_layout Tip -All arrays in NumPy are indexed starting at 0 and ending at M-1 following - the Python convention. -\end_layout - -\begin_layout Standard -For example, consider the following piece of code: -\end_layout - -\begin_layout MyCode ->>> a = array([[1,2,3],[4,5,6]]) -\newline ->>> a.shape -\newline -(2, 3) -\newline ->>> a.dtype -\newline -dtype('int32') -\end_layout - -\begin_layout Note -for all code in this book it is assumed that you have first entered -\family typewriter -from numpy import * -\family default -. - In addition, any previously defined arrays are still defined for subsequent - examples. -\end_layout - -\begin_layout Standard -This code defines an array of size -\begin_inset Formula $2\times3$ -\end_inset - - composed of 4-byte (little-endian) integer elements (on my 32-bit platform). - We can index into this two-dimensional array using two integers: the first - integer running from 0 to 1 inclusive and the second from 0 to 2 inclusive. - For example, index -\begin_inset Formula $\left(1,1\right)$ -\end_inset - - selects the element with value 5: -\end_layout - -\begin_layout MyCode ->>> a[1,1] -\newline -5 -\end_layout - -\begin_layout Standard -All code shown in the shaded-boxes in this book has been (automatically) - executed on a particular version of NumPy. - The output of the code shown below shows which version of NumPy was used - to create all of the output in your copy of this book. -\end_layout - -\begin_layout MyCode ->>> import numpy; print numpy.__version__ -\newline -1.0.2.dev3478 -\end_layout - -\begin_layout Section -Data-Type Descriptors -\end_layout - -\begin_layout Standard -In NumPy, an ndarray is an -\begin_inset Formula $N$ -\end_inset - --dimensional array of items where each item takes up a fixed number of bytes. - Typically, this fixed number of bytes represents a number ( -\emph on -e.g. - -\emph default - integer or floating-point). - However, this fixed number of bytes could also represent an arbitrary record - made up of any collection of other data types. - NumPy achieves this flexibility through the use of a data-type (dtype) - object. - Every array has an associated dtype object which describes the layout of - the array data. - Every dtype -\begin_inset LatexCommand index -name "dtype" - -\end_inset - - object, in turn, has an associated Python type-object that determines exactly - what type of Python object is returned when an element of the array is - accessed. - The dtype objects are flexible enough to contain references to arrays of - other dtype objects and, therefore, can be used to define nested records. - This advanced functionality will be described in better detail later as - it is mainly useful for the recarray (record array) subclass that will - also be defined later. - However, all ndarrays can enjoy the flexibility provided by the dtype objects. - Figure -\begin_inset LatexCommand ref -reference "cap:Conceptual-diagram-showing" - -\end_inset - - provides a conceptual diagram showing the relationship between the ndarray, - its associated data-type object, and an array-scalar that is returned when - a single-element of the array is accessed. - Note that the data-type points to the type-object of the array scalar -\begin_inset LatexCommand index -name "array scalars" - -\end_inset - -. - An array scalar is returned using the type-object and a particular element - of the ndarray. -\end_layout - -\begin_layout Standard -\begin_inset Float figure -wide false -sideways false -status open - -\begin_layout Standard -\align center -\begin_inset Graphics - filename Figures/threefundamental.eps - width 90text% - keepAspectRatio - -\end_inset - - -\end_layout - -\begin_layout Standard -\begin_inset Caption - -\begin_layout Standard -\begin_inset LatexCommand label -name "cap:Conceptual-diagram-showing" - -\end_inset - -Conceptual diagram showing the relationship between the three fundamental - objects used to describe the data in an array: 1) the ndarray itself, 2) - the data-type object that describes the layout of a single fixed-size element - of the array, 3) the array-scalar Python object that is returned when a - single element of the array is accessed. -\end_layout - -\end_inset - - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -Every dtype object is based on one of 21 built-in dtype objects. - These built-in objects allow numeric operations on a wide-variety of integer, - floating-point, and complex data types. - Associated with each data-type is a Python type object whose instances - are array scalars. - This type-object can be obtained using the -\family typewriter -type -\family default - attribute of the dtype object. - Python typically defines only one data-type of a particular data class - (one integer type, one floating-point type, etc.). - This can be convenient for some applications that don't need to be concerned - with all the ways data can be represented in a computer. - For scientific applications, however, this is not always true. - As a result, in NumPy, their are 21 different fundamental Python data-type-desc -riptor objects built-in. - These descriptors are mostly based on the types available in the C language - that CPython is written in. - However, there are a few types that are extremely flexible, such as -\family typewriter -str_ -\family default -, -\family typewriter -unicode_ -\family default -, and -\family typewriter -void -\family default -. -\end_layout - -\begin_layout Standard -The fundamental data-types are shown in Table -\begin_inset LatexCommand ref -reference "cap:Fundamental-Data-Types" - -\end_inset - -. - Along with their (mostly) C-derived names, the integer, float, and complex - data-types are also available using a bit-width convention so that an array - of the right size can always be ensured ( -\emph on -e.g. - -\emph default - int8, float64, complex128). - The C-like names are also accessible using a character code which is also - shown in the table (use of the character codes, however, is discouraged). - Names for the data types that would clash with standard Python object names - are followed by a trailing underscore, '_'. - These data types are so named because they use the same underlying precision - as the corresponding Python data types. - Most scientific users should be able to use the array-enhanced scalar objects - in place of the Python objects. - The array-enhanced scalars inherit from the Python objects they can replace - and should act like them under all circumstances (except for how errors - are handled in math computations). - -\end_layout - -\begin_layout Tip -The array types -\series bold -bool -\series default -_, -\series bold -int -\series default -_, -\series bold -complex -\series default -_, -\series bold -float -\series default -_, -\series bold -object -\series default -_, -\series bold -unicode -\series default -_, and -\series bold -str_ -\series default - are enhanced-scalars. - They are very similar to the standard Python types (without the trailing - underscore) and inherit from them (except for bool_ and object_). - They can be used in place of the standard Python types whenever desired. - Whenever a data type is required, as an argument, the standard Python types - are recognized as well. -\end_layout - -\begin_layout Standard -Three of the data types are flexible in that they can have items that are - of an arbitrary size: the -\family typewriter -str_ -\family default - type, the -\family typewriter -unicode_ -\family default - type, and the -\family typewriter -void -\family default - type. - While, you can specify an arbitrary size for these types, every item in - an array is still of that specified size. - The void type, for example, allows for arbitrary records to be defined - as elements of the array, and can be used to define exotic types built - on top of the basic -\family typewriter -ndarray -\family default -. -\end_layout - -\begin_layout Standard -\begin_inset Float table -wide false -sideways false -status open - -\begin_layout Standard -\begin_inset Caption - -\begin_layout Standard -\begin_inset LatexCommand label -name "cap:Fundamental-Data-Types" - -\end_inset - -Built-in array-scalar types corresponding to data-types for an ndarray. - The bold-face types correspond to standard Python types. - The object_ type is special because arrays with dtype='O' do not return - an array scalar on item access but instead return the actual object referenced - in the array. -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -\align center -\begin_inset Tabular -<lyxtabular version="3" rows="24" columns="3"> -<features> -<column alignment="center" valignment="top" leftline="true" width="0"> -<column alignment="center" valignment="top" leftline="true" width="0"> -<column alignment="center" valignment="top" leftline="true" rightline="true" width="0"> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Type -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Bit-Width -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Character -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -bool_ -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -boolXX -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'?' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -byte -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -intXX -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'b' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -short -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'h' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -intc -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'i' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -int_ -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'l' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -longlong -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'q' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -intp -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'p' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -ubyte -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -uintXX -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'B' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -ushort -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'H' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -uintc -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'I' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -uint -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'L' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -ulonglong -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'Q' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -uintp -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'P' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -single -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -floatXX -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'f' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -float_ -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'d' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -longfloat -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'g' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -csingle -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -complexXX -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'F' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -complex_ -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'D' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -clongfloat -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'G' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -object_ -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'O' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -str_ -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'S#' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -unicode_ -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'U#' -\end_layout - -\end_inset -</cell> -</row> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -void -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family typewriter -'V#' -\end_layout - -\end_inset -</cell> -</row> -</lyxtabular> - -\end_inset - - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Note -The two types -\family typewriter -intp -\family default - and -\family typewriter -uintp -\family default - are not separate types. - They are names bound to a specific integer type just large enough to hold - a memory address (a pointer) on the platform. -\end_layout - -\begin_layout Warning -Numeric Compatibility: If you used old typecode characters in your Numeric - code (which was never recommended), you will need to change some of them - to the new characters. - In particular, the needed changes are 'c->'S1', 'b'->'B', '1'->'b', 's'->'h', - 'w'->'H', and 'u'->'I'. - These changes make the typecharacter convention more consistent with other - Python modules such as the struct module. -\end_layout - -\begin_layout Standard -The fundamental data-types are arranged into a hierarchy of Python type-objects - shown in Figure -\begin_inset LatexCommand ref -reference "cap:Hierarchy-of-type" - -\end_inset - -. - Each of the leaves on this hierarchy correspond to actual data-types that - arrays can have (in other words, there is a built in dtype object associated - with each of these new types). - They also correspond to new Python objects that can be created. - These new objects are -\begin_inset Quotes eld -\end_inset - -scalar -\begin_inset Quotes erd -\end_inset - - types corresponding to each fundamental data-type. - Their purpose is to smooth out the rough edges that result when mixing - scalar and array operations. - These scalar objects will be discussed in more detail in Chapter -\begin_inset LatexCommand ref -reference "cha:Scalar-objects" - -\end_inset - -. - The other types in the hierarchy define particular categories of types. - These categories can be useful for testing whether or not the object returned - by -\family typewriter -self.dtype.type -\family default - is of a particular class (using -\family typewriter -issubclass -\family default -). -\end_layout - -\begin_layout Standard -\begin_inset Float figure -wide false -sideways false -status open - -\begin_layout Standard -\align center -\begin_inset Graphics - filename Figures/hierarchy.eps - lyxscale 75 - width 95text% - keepAspectRatio - -\end_inset - - -\end_layout - -\begin_layout Standard -\begin_inset Caption - -\begin_layout Standard -\begin_inset LatexCommand label -name "cap:Hierarchy-of-type" - -\end_inset - -Hierarchy of type objects representing the array data types. - Not shown are the two integer types -\family typewriter -intp -\family default - and -\family typewriter -uintp -\family default - which just point to the integer type that holds a pointer for the platform. - All the number types can be obtained using bit-width names as well. -\end_layout - -\end_inset - - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Section -Basic indexing (slicing) -\end_layout - -\begin_layout Standard -Indexing -\begin_inset LatexCommand index -name "indexing" - -\end_inset - - is a powerful tool in Python and NumPy takes full advantage of this power. - In fact, some of capabilities of Python's indexing were first established - by the needs of Numeric users. -\begin_inset Foot -status open - -\begin_layout Standard -For example, the ability to index with a comma separated list of objects - and have it correspond to indexing with a tuple is a feature added to Python - at the request of the NumPy community. - The Ellipsis object was also added to Python explicitly for the NumPy community. - Extended slicing (wherein a step can be provided) was also a feature added - to Python because of Numeric. -\end_layout - -\end_inset - - Indexing is also sometimes called slicing in Python, and slicing for an - -\family typewriter -ndarray -\family default - works very similarly as it does for other Python sequences. - There are three big differences: 1) slicing can be done over multiple dimension -s, 2) exactly one ellipsis object can be used to indicate several dimensions - at once, 3) slicing cannot be used to expand the size of an array (unlike - lists). -\end_layout - -\begin_layout Standard -A few examples should make slicing more clear. - Suppose -\begin_inset Formula $A$ -\end_inset - - is a -\begin_inset Formula $10\times20$ -\end_inset - - array, then -\begin_inset Formula $A[3]$ -\end_inset - - is the same as -\begin_inset Formula $A[3,:]$ -\end_inset - - and represents the 4th length-20 -\begin_inset Quotes eld -\end_inset - -row -\begin_inset Quotes erd -\end_inset - - of the array. - On the other hand, -\begin_inset Formula $A[:,3]$ -\end_inset - - represents the 4th length-10 -\begin_inset Quotes eld -\end_inset - -column -\begin_inset Quotes erd -\end_inset - - of the array. - Every third element of the 4th column can be selected as -\begin_inset Formula $A[::3,3]$ -\end_inset - -. - Ellipses can be used to replace zero or more -\begin_inset Quotes eld -\end_inset - -: -\begin_inset Quotes erd -\end_inset - - terms. - In other words, an Ellipsis -\begin_inset LatexCommand index -name "Ellipsis" - -\end_inset - - object expands to zero or more full slice objects ( -\begin_inset Quotes eld -\end_inset - -: -\begin_inset Quotes erd -\end_inset - -) so that the total number of dimensions in the slicing tuple matches the - number of dimensions in the array. - Thus, if -\begin_inset Formula $A$ -\end_inset - - is -\begin_inset Formula $10\times20\times30\times40$ -\end_inset - -, then -\begin_inset Formula $A[3:,...,4]$ -\end_inset - - is equivalent to -\begin_inset Formula $A[3:,:,:,4]$ -\end_inset - - while -\begin_inset Formula $A[...,3]$ -\end_inset - - is equivalent to -\begin_inset Formula $A[:,:,:,3].$ -\end_inset - - -\end_layout - -\begin_layout Standard -The following code illustrates some of these concepts: -\end_layout - -\begin_layout MyCode ->>> a = arange(60).reshape(3,4,5); print a -\newline -[[[ 0 1 2 3 4] -\newline - [ 5 6 7 - 8 9] -\newline - [10 11 12 13 14] -\newline - [15 16 17 18 19]] -\newline - -\newline - [[20 21 22 23 24] -\newline - [25 26 27 - 28 29] -\newline - [30 31 32 33 34] -\newline - [35 36 37 38 39]] -\newline - -\newline - [[40 41 42 43 44] -\newline - [45 46 47 - 48 49] -\newline - [50 51 52 53 54] -\newline - [55 56 57 58 59]]] -\end_layout - -\begin_layout Standard -\InsetSpace ~ - -\end_layout - -\begin_layout MyCode ->>> print a[...,3] -\newline -[[ 3 8 13 18] -\newline - [23 28 33 38] -\newline - [43 48 53 58]] -\newline ->>> print a[1,...,3] -\newline -[23 - 28 33 38] -\newline ->>> print a[:,:,2] -\newline -[[ 2 7 12 17] -\newline - [22 27 32 37] -\newline - [42 47 52 57]] -\newline ->>> - print a[0,::2,::2] -\newline -[[ 0 2 4] -\newline - [10 12 14]] -\end_layout - -\begin_layout Section -Memory Layout of -\family typewriter -ndarray -\end_layout - -\begin_layout Standard -On a fundamental level, an -\begin_inset Formula $N$ -\end_inset - --dimensional array object is just a one-dimensional sequence of memory with - fancy indexing code that maps an -\begin_inset Formula $N$ -\end_inset - --dimensional index into a one-dimensional index. - The one-dimensional index is necessary on some level because that is how - memory is addressed in a computer. - The fancy indexing, however, can be very helpful for translating our ideas - into computer code. - This is because many concepts we wish to model on a computer have a natural - representation as an -\begin_inset Formula $N$ -\end_inset - --dimensional array. - While this is especially true in science and engineering, it is also applicable - to many other arenas which can be appreciated by considering the popularity - of the spreadsheet as well as -\begin_inset Quotes eld -\end_inset - -image processing -\begin_inset Quotes erd -\end_inset - - applications. -\end_layout - -\begin_layout Warning -Some high-level languages give pre-eminence to a particular use of 2-dimensional - arrays as Matrices. - In NumPy, however, the core object is the more general -\begin_inset Formula $N$ -\end_inset - --dimensional array. - NumPy defines a matrix object as a sub-class of the N-dimensional array. - -\end_layout - -\begin_layout Standard -In order to more fully understand the array object along with its attributes - and methods it is important to learn more about how an -\begin_inset Formula $N$ -\end_inset - --dimensional array is represented in the computer's memory. - A complete understanding of this layout is only essential for optimizing - algorithms operating on general purpose arrays. - But, even for the casual user, a general understanding of memory layout - will help to explain the use of certain array attributes that may otherwise - be mysterious. - -\end_layout - -\begin_layout Subsection -Contiguous Memory Layout -\end_layout - -\begin_layout Standard -There is a fundamental ambiguity in how the mapping to a one-dimensional - index can take place which is illustrated for a 2-dimensional array in - Figure -\begin_inset LatexCommand ref -reference "cap:Options-for-memory" - -\end_inset - -. - In that figure, each block represents a chunk of memory that is needed - for representing the underlying array element. - For example, each block could represent the 8 bytes needed to represent - a double-precision floating point number. - -\end_layout - -\begin_layout Standard -In the figure, two arrays are shown, a -\begin_inset Formula $4x3$ -\end_inset - - array and a -\begin_inset Formula $3x4$ -\end_inset - - array. - Each of these arrays takes 12 blocks of memory shown as a single, contiguous - segment. - How this memory is used to form the abstract 2-dimensional array can vary, - however, and the -\family typewriter -ndarray -\family default - object supports both styles. - Which style is in use can be interrogated by the use of the flags attribute - which returns a dictionary of the state of array flags. - -\end_layout - -\begin_layout Standard -\begin_inset Float figure -wide false -sideways false -status open - -\begin_layout Standard -\align center -\begin_inset Graphics - filename Figures/contiguous.eps - width 85text% - keepAspectRatio - -\end_inset - - -\end_layout - -\begin_layout Standard -\begin_inset Caption - -\begin_layout Standard -\begin_inset LatexCommand label -name "cap:Options-for-memory" - -\end_inset - -Options for memory layout of a 2-dimensional array. -\end_layout - -\end_inset - - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -In the C-style of -\begin_inset Formula $N$ -\end_inset - --dimensional indexing shown on the left of Figure -\begin_inset LatexCommand ref -reference "cap:Options-for-memory" - -\end_inset - - the last -\begin_inset Formula $N$ -\end_inset - --dimensional index -\begin_inset Quotes eld -\end_inset - -varies the fastest. -\begin_inset Quotes erd -\end_inset - - In other words, to move through computer memory sequentially, the last - index is incremented first, followed by the second-to-last index and so - forth. - Some of the algorithms in NumPy that deal with -\begin_inset Formula $N$ -\end_inset - --dimensional arrays work best with this kind of data. - -\end_layout - -\begin_layout Standard -In the Fortran-style of -\begin_inset Formula $N$ -\end_inset - --dimensional indexing shown on the right of Figure -\begin_inset LatexCommand ref -reference "cap:Options-for-memory" - -\end_inset - -, the first -\begin_inset Formula $N$ -\end_inset - --dimensional index -\begin_inset Quotes eld -\end_inset - -varies the fastest. -\begin_inset Quotes erd -\end_inset - - Thus, to move through computer memory sequentially, the first index is - incremented first until it reaches the limit in that dimension, then the - second index is incremented and the first index is reset to zero. - While NumPy can be compiled without the use of a Fortran compiler, several - modules of SciPy (available separately) rely on underlying algorithms written - in Fortran. - Algorithms that work on -\begin_inset Formula $N$ -\end_inset - --dimensional arrays that are written in Fortran typically expect Fortran-style - arrays. - -\end_layout - -\begin_layout Standard -The two-styles of memory layout for arrays are connected through the transpose - operation. - Thus, if -\begin_inset Formula $A$ -\end_inset - - is a (contiguous) C-style array, then the same block of memory can be used - to represent -\begin_inset Formula $A^{T}$ -\end_inset - - as a (contiguous) Fortran-style array. - This kind of understanding can be useful when trying to optimize the wrapping - of Fortran subroutines, or if a more detailed understanding of how to write - algorithms for generally-indexed arrays is desired. - But, fortunately, the casual user who does not care if an array is copied - occasionally to get it into the right orientation needed for a particular - algorithm can forget about how the array is stored in memory and just visualize - it as an -\begin_inset Formula $N$ -\end_inset - --dimensional array (that is, after all, the whole point of creating the - -\family typewriter -ndarray -\family default - object in the first place). - -\end_layout - -\begin_layout Subsection -Non-contiguous memory layout -\end_layout - -\begin_layout Standard -Both of the examples presented above are -\emph on -single-segment -\begin_inset LatexCommand index -name "single-segment" - -\end_inset - - -\emph default - arrays where the entire array is visited by sequentially marching through - memory one element at a time. - When an algorithm in C or Fortran expects an N-dimensional array, this - single segment (of a certain fundamental type) is usually what is expected - along with the shape -\begin_inset Formula $N$ -\end_inset - --tuple. - With a single-segment of memory representing the array, the one-dimensional - index into computer memory can always be computed from the -\begin_inset Formula $N$ -\end_inset - --dimensional index. - This concept is explored further in the following paragraphs. -\end_layout - -\begin_layout Standard -Let -\begin_inset Formula $n_{i}$ -\end_inset - - be the value of the -\begin_inset Formula $i^{\textrm{th}}$ -\end_inset - - index into an array whose shape is represented by the -\begin_inset Formula $N$ -\end_inset - - integers -\begin_inset Formula $d_{i}$ -\end_inset - - ( -\begin_inset Formula $i=0\ldots N-1).$ -\end_inset - - Then, the one-dimensional index into a C-style contiguous array is -\begin_inset Formula \[ -n^{C}=\sum_{i=0}^{N-1}n_{i}\prod_{j=i+1}^{N-1}d_{j}\] - -\end_inset - - while the one-dimensional index into a Fortran-style contiguous array is - -\begin_inset Formula \[ -n^{F}=\sum_{i=0}^{N-1}n_{i}\prod_{j=0}^{i-1}d_{j}.\] - -\end_inset - - In these formulas we are assuming that -\begin_inset Formula \[ -\prod_{j=k}^{m}d_{j}=d_{k}d_{k+1}\cdots d_{m-1}d_{m}\] - -\end_inset - -so that if -\begin_inset Formula $m<k,$ -\end_inset - - the product is -\begin_inset Formula $1.$ -\end_inset - - While perfectly general, these formulas may be a bit confusing at first - glimpse. - Let's see how they expand out for determining the one-dimensional index - corresponding to the element -\begin_inset Formula $\left(1,3,2\right)$ -\end_inset - - of a -\begin_inset Formula $4\times5\times6$ -\end_inset - - array. - If the array is stored as Fortran contiguous, then -\begin_inset Formula \begin{eqnarray*} -n^{F} & = & n_{0}\cdot\left(1\right)+n_{1}\cdot(4)+n_{2}\cdot\left(4\cdot5\right)\\ - & = & 1+3\cdot4+2\cdot20=53.\end{eqnarray*} - -\end_inset - - On the other hand, if the array is stored as C contiguous, then -\begin_inset Formula \begin{eqnarray*} -n^{C} & = & n_{0}\cdot\left(5\cdot6\right)+n_{1}\cdot\left(6\right)+n_{2}\cdot\left(1\right)\\ - & = & 1\cdot30+3\cdot6+2\cdot1=50.\end{eqnarray*} - -\end_inset - - The general pattern should be more clear from these examples. - -\end_layout - -\begin_layout Standard -The formulas for the one-dimensional index of the N-dimensional arrays reveal - what results in an important generalization for memory layout. - Notice that each formula can be written as -\begin_inset Formula \[ -n^{X}=\sum_{i=0}^{N-1}n_{i}s_{i}^{X}\] - -\end_inset - - where -\begin_inset Formula $s_{i}^{X}$ -\end_inset - - gives the -\emph on -stride -\begin_inset LatexCommand index -name "stride" - -\end_inset - - -\emph default - for dimension -\begin_inset Formula $i$ -\end_inset - -. -\begin_inset Foot -status open - -\begin_layout Standard -Our definition of stride here is an element-based stride, while the strides - attribute returns a byte-based stride. - The byte-based stride is the element itemsize multiplied by the element-based - stride. -\end_layout - -\end_inset - - Thus, for C and Fortran contiguous arrays respectively we have -\begin_inset Formula \begin{eqnarray*} -s_{i}^{C} & = & \prod_{j=i+1}^{N-1}d_{j}=d_{i+1}d_{i+2}\cdots d_{N-1},\\ -s_{i}^{F} & = & \prod_{j=0}^{i-1}d_{j}=d_{0}d_{1}\cdots d_{i-1}.\end{eqnarray*} - -\end_inset - - -\end_layout - -\begin_layout Standard -The stride is how many elements in the underlying one-dimensional layout - of the array one must jump in order to get to the next array element of - a specific dimension in the N-dimensional layout. - Thus, in a C-style -\begin_inset Formula $4\times5\times6$ -\end_inset - - array one must jump over 30 elements to increment the first index by one, - so 30 is the stride for the first dimension ( -\begin_inset Formula $s_{0}^{C}=30$ -\end_inset - -). - If, for each array, we define a strides tuple with -\begin_inset Formula $N$ -\end_inset - - integers, then we have pre-computed and stored an important piece of how - to map the -\begin_inset Formula $N$ -\end_inset - --dimensional index to the one-dimensional one used by the computer. - -\end_layout - -\begin_layout Standard -In addition to providing a pre-computed table for index mapping, by allowing - the strides tuple to consist of arbitrary integers we have provided a more - general layout for the -\begin_inset Formula $N$ -\end_inset - --dimensional array. - As long as we always use the stride information to move around in the -\begin_inset Formula $N$ -\end_inset - --dimensional array, we can use any convenient layout we wish for the underlying - representation as long as it is regular enough to be defined by constant - jumps in each dimension. - The -\family typewriter -ndarray -\family default - object of NumPy uses this stride information and therefore the underlying - memory of an -\family typewriter -ndarray -\family default - can be laid out dis-contiguously. - -\end_layout - -\begin_layout Note -Several algorithms in NumPy work on arbitrarily strided arrays. - However, some algorithms require single-segment arrays. - When an irregularly strided array is passed in to such algorithms, a copy - is automatically made. - -\end_layout - -\begin_layout Standard -An important situation where irregularly strided arrays occur is array indexing. - Consider again Figure -\begin_inset LatexCommand ref -reference "cap:Options-for-memory" - -\end_inset - -. - In that figure a high-lighted sub-array is shown. - Define -\begin_inset Formula $C$ -\end_inset - - to be the -\begin_inset Formula $4\times3$ -\end_inset - - C contiguous array and -\begin_inset Formula $F$ -\end_inset - - to be the -\begin_inset Formula $3\times4$ -\end_inset - - Fortran contiguous array. - The highlighted areas can be written respectively as -\begin_inset Formula $C$ -\end_inset - -[1:3,1:3] and -\begin_inset Formula $F$ -\end_inset - -[1:3,1:3]. - As evidenced by the corresponding highlighted region in the one-dimensional - view of the memory, these sub-arrays are neither C contiguous nor Fortran - contiguous. - However, they can still be represented by an -\family typewriter -ndarray -\family default - object using the same striding tuple as the original array used. - Therefore, a regular indexing expression on an -\family typewriter -ndarray -\family default - can always produce an -\family typewriter -ndarray -\family default - object -\emph on -without -\emph default - copying any data. - This is sometimes referred to as the -\begin_inset Quotes eld -\end_inset - -view -\begin_inset Quotes erd -\end_inset - - feature of array indexing, and one can see that it is enabled by the use - of striding information in the underlying -\family typewriter -ndarray -\family default - object. - The greatest benefit of this feature is that it allows indexing to be done - very rapidly and without exploding memory usage (because no copies of the - data are made). -\end_layout - -\begin_layout Section -Universal Functions for arrays -\end_layout - -\begin_layout Standard -NumPy provides a wealth of mathematical functions that operate on then ndarray - object. - From algebraic functions such as addition and multiplication to trigonometric - functions such as -\begin_inset Formula $\sin,$ -\end_inset - - and -\begin_inset Formula $\cos$ -\end_inset - -. - Each universal function -\begin_inset LatexCommand index -name "universal function" - -\end_inset - - ( -\family typewriter -ufunc -\family default - -\begin_inset LatexCommand index -name "ufunc" - -\end_inset - -) is an instance of a general class so that function behavior is the same. - All ufuncs perform element-by-element operations over an array or a set - of arrays (for multi-input functions). - The ufuncs themselves and their methods are documented in Part -\begin_inset LatexCommand ref -reference "par:The-Ufunc-Object" - -\end_inset - -. - -\end_layout - -\begin_layout Standard -One important aspect of ufunc behavior that should be introduced early, - however, is the idea of -\emph on - -\begin_inset LatexCommand index -name "broadcasting" - -\end_inset - -broadcasting -\emph default -. - Broadcasting is used in several places throughout NumPy and is therefore - worth early exposure. - To understand the idea of broadcasting, you first have to be conscious - of the fact that all ufuncs are always element-by-element operations. - In other words, suppose we have a ufunc with two inputs and one output - ( -\emph on -e.g. - -\emph default - addition) and the inputs are both arrays of shape -\begin_inset Formula $4\times6\times5$ -\end_inset - -. - Then, the output is going to be -\begin_inset Formula $4\times6\times5$ -\end_inset - -, and will be the result of applying the underlying function ( -\emph on -e.g. - -\emph default - -\begin_inset Formula $+$ -\end_inset - -) to each pair of inputs to produce the output at the corresponding -\begin_inset Formula $N$ -\end_inset - --dimensional location. - -\end_layout - -\begin_layout Standard -Broadcasting allows ufuncs to deal in a meaningful way with inputs that - do not have exactly the same shape. - In particular, the first rule of broadcasting is that if all input arrays - do not have the same number of dimensions, then a -\begin_inset Quotes eld -\end_inset - - -\begin_inset Formula $1$ -\end_inset - - -\begin_inset Quotes erd -\end_inset - - will be repeatedly pre-pended to the shapes of the smaller arrays until - all the arrays have the same number of dimensions. - The second rule of broadcasting ensures that arrays with a size of 1 along - a particular dimension act as if they had the size of the array with the - largest shape along that dimension. - The value of the array element is assumed to be the same along that dimension - for the -\begin_inset Quotes eld -\end_inset - -broadcasted -\begin_inset Quotes erd -\end_inset - - array. - After application of the broadcasting rules, the sizes of all arrays must - match. -\end_layout - -\begin_layout Standard -While a little tedious to explain, the broadcasting rules are easy to pick - up by looking at a couple of examples. - Suppose there is a -\family typewriter -ufunc -\family default - with two inputs, -\begin_inset Formula $A$ -\end_inset - - and -\begin_inset Formula $B$ -\end_inset - -. - Now supposed that -\begin_inset Formula $A$ -\end_inset - - has shape -\begin_inset Formula $4\times6\times5$ -\end_inset - - while -\begin_inset Formula $B$ -\end_inset - - has shape -\begin_inset Formula $4\times6\times1$ -\end_inset - -. - The ufunc will proceed to compute the -\begin_inset Formula $4\times6\times5$ -\end_inset - - output as if -\begin_inset Formula $B$ -\end_inset - - had been -\begin_inset Formula $4\times6\times5$ -\end_inset - - by assuming that -\begin_inset Formula $B[...,k]=B[...,0]$ -\end_inset - - for -\begin_inset Formula $k=1,2,3,4$ -\end_inset - -. - -\end_layout - -\begin_layout Standard -Another example illustrates the idea of adding -\begin_inset Formula $1$ -\end_inset - -'s to the beginning of the array shape-tuple. - Suppose -\begin_inset Formula $A$ -\end_inset - - is the same as above, but -\begin_inset Formula $B$ -\end_inset - - is a length -\begin_inset Formula $5$ -\end_inset - - array. - Because of the first rule, -\begin_inset Formula $B$ -\end_inset - - will be interpreted as a -\begin_inset Formula $1\times1\times5$ -\end_inset - - array, and then because of the second rule -\begin_inset Formula $B$ -\end_inset - - will be interpreted as a -\begin_inset Formula $4\times6\times5$ -\end_inset - - array by repeating the elements of -\begin_inset Formula $B$ -\end_inset - - in the obvious way. - -\end_layout - -\begin_layout Standard -The most common alteration needed is to route-around the automatic pre-pending - of 1's to the shape of the array. - If it is desired, to add -\begin_inset Formula $1$ -\end_inset - -'s to the end of the array shape, then dimensions can always be added using - the -\family typewriter -newaxis -\family default - name in NumPy: -\begin_inset Formula $B[...,\textrm{newaxis, newaxis}]$ -\end_inset - - returns an array with 2 additional 1's appended to the shape of -\begin_inset Formula $B.$ -\end_inset - - -\end_layout - -\begin_layout Standard -One important aspect of broadcasting is the calculation of functions on - regularly spaced grids. - For example, suppose it is desired to show a portion of the multiplication - table by computing the function -\begin_inset Formula $a*b$ -\end_inset - - on a grid with -\begin_inset Formula $a$ -\end_inset - - running from 6 to 9 and -\begin_inset Formula $b$ -\end_inset - - running from 12 to 16. - The following code illustrates how this could be done using ufuncs and - broadcasting. - -\end_layout - -\begin_layout MyCode ->>> a = arange(6, 10); print a -\newline -[6 7 8 9] -\newline ->>> b = arange(12, 17); print b -\newline -[12 - 13 14 15 16] -\newline ->>> table = a[:,newaxis] * b -\newline ->>> print table -\newline -[[ 72 78 84 90 - 96] -\newline - [ 84 91 98 105 112] -\newline - [ 96 104 112 120 128] -\newline - [108 117 126 135 144]] -\end_layout - -\begin_layout Section -Summary of new features -\end_layout - -\begin_layout Standard -More information about using arrays in Python can be found in the old Numeric - documentation at -\begin_inset LatexCommand htmlurl -name "http://numeric.scipy.org" -target "http://numeric.scipy.org" - -\end_inset - -. - Quite a bit of that documentation is still accurate, especially in the - discussion of array basics. - There are significant differences, however, and this book seeks to explain - them in detail. - The following list tries to summarize the significant new features (over - Numeric) available in the -\family typewriter -ndarray -\family default - and -\family typewriter -ufunc -\family default - objects of NumPy: -\end_layout - -\begin_layout Enumerate -more data types (all standard C-data types plus complex floats, Boolean, - string, unicode, and void *); -\end_layout - -\begin_layout Enumerate -flexible data types where each array can have a different itemsize (but - all elements of the same array still have the same itemsize); -\end_layout - -\begin_layout Enumerate -there is a true Python scalar type (contained in a hierarchy of types) for - every data-type an array can have; -\end_layout - -\begin_layout Enumerate -data-type objects define the data-type with support for data-type objects - with fields and subarrays which allow record arrays with nested records; -\end_layout - -\begin_layout Enumerate -many more array methods in addition to functional counterparts; -\end_layout - -\begin_layout Enumerate -attributes more clearly distinguished from methods (attributes are intrinsic - parts of an array so that setting them changes the array itself); -\end_layout - -\begin_layout Enumerate -array scalars covering all data types which inherit from Python scalars - when appropriate; -\end_layout - -\begin_layout Enumerate -arrays can be misaligned, swapped, and in Fortran order in memory (facilitates - memory-mapped arrays); -\end_layout - -\begin_layout Enumerate -arrays can be more easily read from text files and created from buffers - and iterators; -\end_layout - -\begin_layout Enumerate -arrays can be quickly written to files in text and/or binary mode; -\end_layout - -\begin_layout Enumerate -arrays support the removal of the 64-bit memory limitation as long as you - have Python 2.5 or later; -\end_layout - -\begin_layout Enumerate -fancy indexing can be done on arrays using integer sequences and Boolean - masks; -\end_layout - -\begin_layout Enumerate -coercion rules are altered for mixed scalar / array operations so that scalars - (anything that produces a 0-dimensional array internally) will not determine - the output type in such cases. -\end_layout - -\begin_layout Enumerate -when coercion is needed, temporary buffer-memory allocation is limited to - a user-adjustable size; -\end_layout - -\begin_layout Enumerate -errors are handled through the IEEE floating point status flags and there - is flexibility on a per-thread level for handling these errors; -\end_layout - -\begin_layout Enumerate -one can register an error callback function in Python to handle errors are - set to 'call' for their error handling; -\end_layout - -\begin_layout Enumerate -ufunc reduce, accumulate, and reduceat can take place using a different - type then the array type if desired (without copying the entire array); -\end_layout - -\begin_layout Enumerate -ufunc output arrays passed in can be a different type than expected from - the calculation; -\end_layout - -\begin_layout Enumerate -ufuncs take keyword arguments which can specify 1) the error handling explicitly - and 2) the specific 1-d loop to use by-passing the type-coercion detection. - -\end_layout - -\begin_layout Enumerate -arbitrary classes can be passed through ufuncs (__array_wrap__ and __array_prior -ity__ expand previous __array__ method); -\end_layout - -\begin_layout Enumerate -ufuncs can be easily created from Python functions; -\end_layout - -\begin_layout Enumerate -ufuncs have attributes to detail their behavior, including a dynamic doc - string that automatically generates the calling signature; -\end_layout - -\begin_layout Enumerate -several new ufuncs (frexp, modf, ldexp, isnan, isfinite, isinf, signbit); -\end_layout - -\begin_layout Enumerate -new types can be registered with the system so that specialized ufunc loops - can be written over new type objects; -\end_layout - -\begin_layout Enumerate -new types can also register casting functions and rules for fitting into - the -\begin_inset Quotes eld -\end_inset - -can-cast -\begin_inset Quotes erd -\end_inset - - hierarchy; -\end_layout - -\begin_layout Enumerate -C-API enhanced so that more of the functionality is available from compiled - code; -\end_layout - -\begin_layout Enumerate -C-API enhanced so array structure access can take place through macros; -\end_layout - -\begin_layout Enumerate -new iterator objects created for easy handling in C of non-contiguous arrays; -\end_layout - -\begin_layout Enumerate -new multi-iterator object created for easy handling in C of broadcasting; -\end_layout - -\begin_layout Enumerate -types have more functions associated with them (no magic function lists - in the C-code). - Any function needed is part of the type structure. -\end_layout - -\begin_layout Standard -All of these enhancements will be documented more thoroughly in the remaining - portions of this book. -\end_layout - -\begin_layout Section -Summary of differences with Numeric -\end_layout - -\begin_layout Standard -An effort was made to retain backwards compatibility with Numeric all the - way to the C-level. - This was mostly accomplished, with a few changes that needed to be made - for consistency of the new system. - If you are just starting out with NumPy, then this section may be skipped. -\end_layout - -\begin_layout Standard -There are two steps (one required and one optional) to converting code that - works with Numeric to work fully with NumPy The first step uses a compatibility - layer and requires only small changes which can be handled by the numpy.oldnumer -ic.alter_code1 module. - Code written to the compatibility layer will work and be supported. - The purpose of the compatibility layer is to make it easy to convert to - NumPy and many codes may only take this first step and work fine with NumPy. - The second step is optional as it removes dependency on the compatibility - layer and therefore requires a few more extensive changes. - Many of these changes can be performed by the numpy.oldnumeric.alter_code2 - module, but you may still need to do some final tweaking by hand. - Because many users will probably be content to only use the first step, - the alter_code2 module for second-stage migration may not be as complete - as it otherwise could be. - -\end_layout - -\begin_layout Subsection -First-step changes -\end_layout - -\begin_layout Standard -In order to use the compatibility layer there are still a few changes that - need to be made to your code. - Many of these changes can be made by running the alter_code1 module with - your code as input. - -\end_layout - -\begin_layout Enumerate -Importing (the alter_code1 module handles all these changes) -\end_layout - -\begin_deeper -\begin_layout Enumerate -import Numeric --> import numpy.oldnumeric as Numeric -\end_layout - -\begin_layout Enumerate -import Numeric as XX --> import numpy.oldnumeric as XX -\end_layout - -\begin_layout Enumerate -from Numeric import <name1>,...<nameN> --> from numpy.oldnumeric import <name1>,...,<na -meN> -\end_layout - -\begin_layout Enumerate -from Numeric import * --> from numpy.oldnumeric import * -\end_layout - -\begin_layout Enumerate -Similar name changes need to be made for Matrix, MLab, UserArray, LinearAlgebra, - RandomArray RNG, RNG.Statistics, and FFT. - The new names are numpy.oldnumeric.<pkg> where <pkg> is matrix, mlab, user_array, - linear_algebra, random_array, rng, rng_stats, and fft. - -\end_layout - -\begin_layout Enumerate -multiarray and umath (if you used them directly) are now numpy.core.multiarray - and numpy.core.umath, but it is more future proof to replace usages of these - internal modules with numpy.oldnumeric. -\end_layout - -\end_deeper -\begin_layout Enumerate -Method name changes and methods converted to attributes. - The alter_code1 module handles all these changes. - -\end_layout - -\begin_deeper -\begin_layout Enumerate - -\emph on -arr -\emph default -.typecode() --> -\emph on -arr -\emph default -.dtype.char -\end_layout - -\begin_layout Enumerate - -\emph on -arr -\emph default -.iscontiguous() --> -\emph on -arr -\emph default -.flags.contiguous -\end_layout - -\begin_layout Enumerate - -\emph on -arr -\emph default -.byteswapped() --> -\emph on -arr -\emph default -.byteswap() -\end_layout - -\begin_layout Enumerate - -\emph on -arr -\emph default -.toscalar() --> -\emph on -arr -\emph default -.item() -\end_layout - -\begin_layout Enumerate - -\emph on -arr -\emph default -.itemsize() --> -\emph on -arr -\emph default -.itemsize -\end_layout - -\begin_layout Enumerate - -\emph on -arr -\emph default -.spacesaver() eliminated -\end_layout - -\begin_layout Enumerate - -\emph on -arr -\emph default -.savespace() eliminated -\end_layout - -\end_deeper -\begin_layout Enumerate -Some of the typecode characters have changed to be more consistent with - other Python modules (array and struct). - You should only notice this change if you used the actual typecode characters - (instead of the named constants). - -\newline -The alter_code1 module will change uses of 'b' to 'B' for internal Numeric - functions that it knows about because NumPy will interpret 'b' to mean - a signed byte type (instead of the old unsigned). - It will also change the character codes when they are used explicitly in - the .astype method. - In the compatibility layer (and only in the compatibility layer), typecode-requ -iring function calls ( -\emph on -e.g. - -\emph default - zeros, array) understand the old typecode characters. - -\newline -The changes are (Numeric --> NumPy): -\end_layout - -\begin_deeper -\begin_layout Enumerate -'b' --> 'B' -\end_layout - -\begin_layout Enumerate -'1' --> 'b' -\end_layout - -\begin_layout Enumerate -'s' --> 'h' -\end_layout - -\begin_layout Enumerate -'w' --> 'H' -\end_layout - -\begin_layout Enumerate -'u' --> 'I' -\end_layout - -\end_deeper -\begin_layout Enumerate - -\emph on -arr. -\emph default -flat now returns an indexable 1-D iterator. - This behaves correctly when passed to a function, but if you expected methods - or attributes on -\emph on -arr. -\emph default -flat --- besides .copy() --- then you will need to replace -\emph on -arr -\emph default -.flat with -\emph on -arr. -\emph default -ravel() (copies only when necessary) or -\emph on -arr. -\emph default -flatten() (always copies). - The alter_code1 module will change -\emph on -arr -\emph default -.flat to -\emph on -arr -\emph default -.ravel() unless you used the construct -\emph on -arr -\emph default -.flat = obj or -\emph on -arr -\emph default -.flat[ind]. -\end_layout - -\begin_layout Enumerate -If you used type-equality testing on the objects returned from arrays, then - you need to change this to isinstance testing. - Thus type(a[0]) is float or type(a[0]) == float should be changed to isinstance -(a[0], float). - This is because array scalar objects are now returned from arrays. - These inherit from the Python scalars where they can, but define their - own methods and attributes. - This conversion is done by alter_code1 for the types (float, int, complex, - and ArrayType) -\end_layout - -\begin_layout Enumerate -If your code should produce 0-d arrays. - These no-longer have a length as they should be interpreted similarly to - real scalars which don't have a length. - -\end_layout - -\begin_layout Enumerate -Arrays cannot be tested for truth value unless they are empty (returns False) - or have only one element. - This means that if Z: where Z is an array will fail (unless Z is empty - or has only one element). - Also the 'and' and 'or' operations (which test for object truth value) - will also fail on arrays of more than one element. - Use the .any() and .all() methods to test for truth value of an array. - -\end_layout - -\begin_layout Enumerate -Masked arrays return a special nomask object instead of None when there - is no mask on the array for the functions getmask and attribute access - -\emph on -arr -\emph default -.mask -\end_layout - -\begin_layout Enumerate -Masked array functions have a default axis of None (meaning ravel), make - sure to specify an axis if your masked arrays are larger than 1-d. - -\end_layout - -\begin_layout Enumerate -If you used the construct -\family typewriter -arr.shape=<tuple> -\family default -, this will not work for array scalars (which can be returned from array - operations). - You cannot set the shape of an array-scalar (you can read it though). - As a result, for more general code you should use -\family typewriter -arr=arr.reshape(<tuple>) -\family default - which works for both array-scalars and arrays. - -\end_layout - -\begin_layout Standard -The alter_code1 script should handle the changes outlined in steps 1-5 above. - The final incompatibilities in 6-9 are less common and must be modified - by hand if necessary. - -\end_layout - -\begin_layout Subsection -Second-step changes -\end_layout - -\begin_layout Standard -During the second phase of migration (should it be necessary) the compatibility - layer is dropped. - This phase requires additional changes to your code. - There is another conversion module (alter_code2) which can help but it - is not complete. - The changes required to drop dependency on the compatibility layer are -\end_layout - -\begin_layout Enumerate -Importing -\end_layout - -\begin_deeper -\begin_layout Enumerate -numpy.oldnumeric --> numpy -\end_layout - -\begin_layout Enumerate -from numpy.oldnumeric import * --> from numpy import * (this may clobber - more names and therefore require further fixes to your code but then you - didn't do this regularly anyway did you). - The recommended procedure if this replacement causes problems is to fix - the use of from numpy.oldnumeric import * to extract only the required names - and then continue. -\end_layout - -\begin_layout Enumerate -numpy.oldnumeric.mlab --> None, the functions come from other places. -\end_layout - -\begin_layout Enumerate -numpy.oldnumeric.linear_algebra --> numpy.lilnalg with name changes to the - functions (made lower case and shorter). -\end_layout - -\begin_layout Enumerate -numpy.oldnumeric.random_array --> numpy.random with some name changes to the - functions. -\end_layout - -\begin_layout Enumerate -numpy.oldnumeic.fft --> numpy.fft with some name changes to the functions. -\end_layout - -\begin_layout Enumerate -numpy.oldnumeric.rng --> None -\end_layout - -\begin_layout Enumerate -numpy.oldnumeric.rng_stats --> None -\end_layout - -\begin_layout Enumerate -numpy.oldnumeric.user_array --> numpy.lib.user_array -\end_layout - -\begin_layout Enumerate -numpy.oldnumeric.matrix --> numpy -\end_layout - -\end_deeper -\begin_layout Enumerate -The typecode names are all lower-case and refer to type-objects corresponding - to array scalars. - The character codes are understood by array-creation functions but are - not given names. - All named type constants should be replaced with their lower-case equivalents. - Also, the old character codes '1', 's', 'w', and 'u' are not understood - as data-types. - It is probably easiest to manually replace these with Int8, Int16, UInt16, - and UInt32 and let the alter_code2 script convert the names to lower-case - typeobjects. - -\end_layout - -\begin_layout Enumerate -Keyword and argument changes -\end_layout - -\begin_deeper -\begin_layout Enumerate -All -\family typewriter -typecode= -\family default - keywords must be changed to -\family typewriter -dtype= -\family default -. - -\end_layout - -\begin_layout Enumerate -The -\family typewriter -savespace -\family default - keyword argument has been removed from all functions where it was present - (array, sarray, asarray, ones, and zeros). - The sarray function is equivalent to asarray. -\end_layout - -\end_deeper -\begin_layout Enumerate -The default data-type in NumPy is float unlike in Numeric (and numpy.oldnumeric) - where it was int. - There are several functions affected by this so that if your code was relying - on the default data-type, then it must be changed to explicitly add dtype=int. -\end_layout - -\begin_layout Enumerate -The nonzero function in NumPy returns a tuple of index arrays just like - the corresponding method. - There is a flatnonzero function that first ravels the array and then returns - a single index array. - This function should be interchangeable with the old use of nonzero. - -\end_layout - -\begin_layout Enumerate -The default axis is None (instead of 0) to match the methods for the functions - take, repeat, sum, average, product, sometrue, alltrue, cumsum, and cumproduct - (from Numeric) and also for the functions average, max, min, ptp, prod, - std, and mean (from MLab). -\end_layout - -\begin_layout Enumerate -The default axis is None (instead of -1) to match the methods for the functions - argmin, argmax, compress -\end_layout - -\begin_layout Subsection -Updating code that uses Numeric using alter_codeN -\end_layout - -\begin_layout Standard -Despite the long list of changes that might be needed given above, it is - likely that your code does not use any of the incompatible corners and - it should not be too difficult to convert from Numeric to NumPy. - For example all of SciPy was converted in about 2-3 days. - The needed changes are largely search-and replace type changes, and the - alter_codeN modules can help. - The modules have two functions which help the process: -\end_layout - -\begin_layout Description -convertfile (filename, orig=1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert the file with the given filename to use NumPy. - If orig is True, then a backup is first made and given the name filename.orig. - Then, the file is converted and the updated code written over the top of - the old file. - -\end_layout - -\begin_layout Description -convertall (direc=os.path.curdir, orig=1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Converts all the -\begin_inset Quotes eld -\end_inset - -.py -\begin_inset Quotes erd -\end_inset - - files in the given directory to use NumPy. - Backups of all the files are first made if orig is True as explained for - the convertfile function. - -\end_layout - -\begin_layout Description -convertsrc (direc=os.path.curdir, ext=None, orig=1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Replace -\family typewriter -''Numeric/arrayobject.h -\begin_inset Quotes erd -\end_inset - - -\family default - with -\family typewriter -''numpy/oldnumeric.h -\begin_inset Quotes erd -\end_inset - - -\family default - in all files ending in the list of extensions given by ext (if ext is None, - then all files are updated). - If orig is True, then first make a backup file with -\begin_inset Quotes eld -\end_inset - -.orig -\begin_inset Quotes erd -\end_inset - - as the extension. -\end_layout - -\begin_layout Description -converttree (direc=os.path.curdir) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Walks the tree pointed to by direc and converts all -\begin_inset Quotes eld -\end_inset - -.py -\begin_inset Quotes erd -\end_inset - - modules in each sub-directory to use NumPy. - No backups of the files are made. - Also, converts all .h and .c files to replace -\family typewriter -''Numeric/arrayobject.h -\begin_inset Quotes erd -\end_inset - - -\family default - with -\family typewriter -''numpy/oldnumeric.h -\begin_inset Quotes erd -\end_inset - - -\family default - so that NumPy is used. - -\end_layout - -\begin_layout Subsection -Changes to think about -\end_layout - -\begin_layout Standard -Even if you don't make changes to your old code. - If you are used to coding in Numeric, then you may need to adjust your - coding style a bit. - This list provides some helpful things to remember. - -\end_layout - -\begin_layout Enumerate -Switch from using typecode characters to bitwidth type names or c-type names - -\end_layout - -\begin_layout Enumerate -Convert use of uppercase type-names Int32, Float, etc., to lower case int32, - float, etc. -\end_layout - -\begin_layout Enumerate -Convert use of functions to method calls where appropriate but explicitly - specify any axis arguments for arrays greater than 1-d. - -\end_layout - -\begin_layout Enumerate -The names for standard computations like Fourier transforms, linear algebra, - and random-number generation have changed to conform to the standard of - lower-case names possibly separated by an underscore. -\end_layout - -\begin_layout Enumerate -Look for ways to take advantage of advanced slicing, but remember it always - returns a copy and may be slower at times. -\end_layout - -\begin_layout Enumerate -Remove any kludges you inserted to eliminate problems with Numeric that - are now gone. - -\end_layout - -\begin_layout Enumerate -Look for ways to take advantage of new features like expanded data-types - (record-arrays). - -\end_layout - -\begin_layout Enumerate -See if you can inherit from the ndarray directly, rather than using user_array.co -ntainer (UserArray). - However, if you were using UserArray in a multiple-inheritance hierarchy - this is going to be more difficult and you can continue to use the standard - container class in user_array (but notice the name change). - -\end_layout - -\begin_layout Enumerate -Watch your usage of scalars extracted from arrays. - Treating Numeric arrays like lists and then doing math on the elements - 1 by 1 was always about 2x slower than using real lists in Python. - This can now be 3x-6x slower than using lists in NumPy because of the increased - complexity of both the indexing of ndarrays and the math of array scalars. - If you must select individual scalars from NumPy, you can get some speed - increases by using the item method to get a standard Python scalar from - an N-d array and by using the itemset method to place a scalar into a particula -r location in the N-d array. - This complicates the appearance of the code, however. - Also, when using these methods inside a loop, be sure to assign the methods - to a local variable to avoid the attribute look-up at each loop iteration. - -\end_layout - -\begin_layout Standard -Throughout this book, warnings are inserted when compatibility issues with - old Numeric are raised. - While you may not need to make any changes to get code to run with the - ndarray object, you will likely want to make changes to take advantage - of the new features of NumPy. - If you get into a jam during the conversion process, you should be aware - that Numeric and NumPy can both be used together and they will not interfere - with each other. - In addition, if you have Numeric 24.0 or newer, they can even share the - same memory. - This makes it easy to use NumPy as well as third-party tools that have - not made the switch from Numeric yet. -\end_layout - -\begin_layout Section -Summary of differences with Numarray -\end_layout - -\begin_layout Standard -Conversion from Numarray can also be relatively painless, depending on how - dependent your code is on the specific structure of the Numarray ufuncs, - cfuncs, and various array-like objects. - The internals of Numarray can be quite different and so depending on how - intimately you used those internals adapting to NumPy can be more or less - difficult. - C-code that used the Numarray C-API can be easily adapted because NumPy - includes a Numarray-compatible C-API module. - All you need to do is replace usage of -\begin_inset Quotes eld -\end_inset - -numarray/libnumarray.h -\begin_inset Quotes erd -\end_inset - - with -\begin_inset Quotes eld -\end_inset - -numpy/libnumarray.h -\begin_inset Quotes erd -\end_inset - - and be sure the directory returned from the Python command numpy.get_numarray_in -clude() is included in the list of directories used for compilation. -\end_layout - -\begin_layout Standard -On the Python-side the largest number of differences are in the methods - and attributes of the array and the way array data-types are represented. - In addition, arrays containing Python Objects, strings, and records are - an integral part of the array object and not handled using a separate class - (although enhanced separate classes do exist for the case of character - arrays and record arrays). - -\end_layout - -\begin_layout Standard -As is the case with Numeric, there is a two-step process available for migrating - code written for Numarray to work with NumPy. - This process involves running functions in the modules alter_code1 and - alter_code2 located in the numarray sub-package of NumPy. - These modules have interfaces identical to the ones that convert Numeric - code, but they work to convert code written for numarray. - The first module will convert your code to use the numarray compatibility - module (numpy.numarray), while the second will try and help convert code - to move away from dependency on the compatibility module. - Because many users will probably be content to only use the first step, - the alter_code2 module for second-stage migration may not be as complete - as it otherwise could be. - -\end_layout - -\begin_layout Standard -Also, the alter_code1 module is not guaranteed to convert every piece of - working numarray code to use NumPy. - If your code relied on the internal module structure of numarray or on - how the class hierarchy was laid out, then it will need to be changed manually - to run with NumPy. - Of course you can still use your code with Numarray installed side-by-side - and the two array objects should be able to exchange data without copying. - -\end_layout - -\begin_layout Subsection -First-step changes -\end_layout - -\begin_layout Standard -The alter_code1 script makes the following import and attribute/method changes -\end_layout - -\begin_layout Subsubsection -Import changes -\end_layout - -\begin_layout Itemize -import numarray --> import numpy.numarray as numarray -\end_layout - -\begin_layout Itemize -import numarray.package --> import numpy.numarray.package as numarray_package - with all usages of numarray.package in the code replaced by numarray_package -\end_layout - -\begin_layout Itemize -import numarray as <name> --> import numpy.numarray s <name> -\end_layout - -\begin_layout Itemize -import numarray.package as <name> --> import numpy.numarray.package as <name> -\end_layout - -\begin_layout Itemize -from numarray import <names> --> from numpy.numarray import <names> -\end_layout - -\begin_layout Itemize -from numarray.package import <names> --> from numpy.numarray.package import - <names> -\end_layout - -\begin_layout Subsubsection -Attribute and method changes -\end_layout - -\begin_layout Itemize -.imaginary --> .imag -\end_layout - -\begin_layout Itemize -.flat --> probably .ravel() (Many usages will still work correctly because - you can index and assign to self.flat) -\end_layout - -\begin_layout Itemize -.byteswapped() --> .byteswap(False) -\end_layout - -\begin_layout Itemize -.byteswap() --> .byteswap(True) (Returns a reference to self instead of None). - -\end_layout - -\begin_layout Itemize -self.info() --> numarray.info(self) -\end_layout - -\begin_layout Itemize -.isaligned() --> .flags.aligned -\end_layout - -\begin_layout Itemize -.isbyteswapped() --> not .dtype.isnative (the byte-order is a property of the - data-type object not the array itself in NumPy). - -\end_layout - -\begin_layout Itemize -.iscontiguous() --> .flags.c_contiguous -\end_layout - -\begin_layout Itemize -.is_c_array() --> .dtype.isnative and .flags.carray -\end_layout - -\begin_layout Itemize -.is_fortran_contiguous() --> .flags.f_contiguous -\end_layout - -\begin_layout Itemize -.is_f_array() --> .dtype.isnative and .flags.farray -\end_layout - -\begin_layout Itemize -.itemsize() --> .itemsize -\end_layout - -\begin_layout Itemize -.nelements() --> .size -\end_layout - -\begin_layout Itemize -self.new(type) --> numarray.newobj(self, type) -\end_layout - -\begin_layout Itemize -.repeat(r) --> .repeat(r, axis=0) -\end_layout - -\begin_layout Itemize -.size() --> .size -\end_layout - -\begin_layout Itemize -.type() --> numarray.typefrom(self) -\end_layout - -\begin_layout Itemize -.typecode() --> .dtype.char -\end_layout - -\begin_layout Itemize -.stddev() --> .std() -\end_layout - -\begin_layout Itemize -.togglebyteorder() --> numarray.togglebyteorder(self) -\end_layout - -\begin_layout Itemize -.getshape() --> .shape -\end_layout - -\begin_layout Itemize -.setshape(obj) --> .shape = obj -\end_layout - -\begin_layout Itemize -.getflat() --> .ravel() -\end_layout - -\begin_layout Itemize -.getreal() --> .real -\end_layout - -\begin_layout Itemize -.setreal(obj) --> .real = obj -\end_layout - -\begin_layout Itemize -.getimag() --> .imag -\end_layout - -\begin_layout Itemize -.setimag(obj) --> .imag = obj -\end_layout - -\begin_layout Itemize -.getimaginary() --> .imag -\end_layout - -\begin_layout Itemize -.setimaginary(obj) --> .imag = obj -\end_layout - -\begin_layout Subsection -Second-step changes -\end_layout - -\begin_layout Standard -One of the notable differences is that several functions (array, arange, - fromfile, and fromstring) do not take the shape= keyword argument. - Instead you simply reshape the result using the reshape method. - Another notable difference is that instead of allowing typecode=, type=, - and dtype= variants for specifying the data-types, you must use the dtype= - keyword. - Other differences include -\end_layout - -\begin_layout Itemize -matrixmultiply(a,b) --> dot(a,b) -\end_layout - -\begin_layout Itemize -innerproduct(a,b) --> inner(a,b) -\end_layout - -\begin_layout Itemize -outerproduct(a,b) --> outer(a,b) -\end_layout - -\begin_layout Itemize -kroneckerproduct(a,b) --> kron(a,b) -\end_layout - -\begin_layout Itemize -tensormultiply(a,b) --> None -\end_layout - -\begin_layout Subsection -Additional Extension modules -\end_layout - -\begin_layout Standard -There are three extension packages that come included with numarray which - are now downloaded separately. - Stubs for these packages exist in numpy.numarray but they try and find the - actual code by looking at what is currently installed. - These packages are available in SciPy but can be installed separately as - well: -\end_layout - -\begin_layout Itemize -nd_image --> scipy.ndimage -\end_layout - -\begin_layout Itemize -convolve --> scipy.stsci.convolve -\end_layout - -\begin_layout Itemize -image --> scipy.stsci.image -\end_layout - -\begin_layout Standard -If you don't want to install all of scipy, you can grab just these packages - from SVN using -\end_layout - -\begin_layout LyX-Code -svn co http://svn.scipy.org/svn/scipy/trunk/Lib/ndimage ndimage -\end_layout - -\begin_layout LyX-Code -svn co http://svn.scipy.org/svn/scipy/trunk/Lib/stsci stsci -\end_layout - -\begin_layout Standard -and then run -\end_layout - -\begin_layout LyX-Code -cd ndimage; sudo python setup.py install -\end_layout - -\begin_layout LyX-Code -cd stsci; sudo python setup.py install -\end_layout - -\begin_layout Standard -On a Windows system, you can use the Tortoise SVN client which is integrated - into the Windows Explorer. - It can be downloaded from http://tortoisesvn.tigris.org. - Instructions on how to use it are also provided on that site. - After downloading the packages from SVN, installation will still require - a C-compiler (the mingw32 compiler works fine even with MSVC-compiled Python - as long as you specify --compiler=mingw32). - Alternatively you can download binary releases of scipy from http://www.scipy.org - to get the needed functionality or use the Enthon edition of Python. -\end_layout - -\begin_layout Chapter -The Array Object -\end_layout - -\begin_layout Quotation -Don't worry about people stealing your ideas. - If your ideas are any good, you'll have to ram them down people's throats. -\end_layout - -\begin_layout Right Address ---- -\emph on -Howard Aiken, IBM engineer -\end_layout - -\begin_layout Quotation -No idea is so antiquated that it was not once modern; no idea is so modern - that it will not someday be antiquated. -\end_layout - -\begin_layout Right Address ---- -\emph on -Ellen Glasgow -\end_layout - -\begin_layout Section - -\family typewriter -ndarray -\family default - Attributes -\end_layout - -\begin_layout Standard -Array -\begin_inset LatexCommand index -name "ndarray|(" - -\end_inset - - attributes reflect information that is intrinsic to the array itself. - Generally, accessing an array through its attributes allows you to get - and sometimes set intrinsic properties of the array without creating a - new array. - The exposed attributes are the core parts of an array and only some of - them can be reset meaningfully without creating a new array. - Table -\begin_inset LatexCommand ref -reference "cap:ndarray-attributes" - -\end_inset - - shows all the attributes -\begin_inset LatexCommand index -name "ndarray!attributes|(" - -\end_inset - - with a brief description. - Detailed information on each attribute is given below. -\end_layout - -\begin_layout Warning -Numeric Compatibility: you should check your old use of the .flat attribute. - This attribute now returns an iterator object which acts like a 1-d array - in terms of indexing. - while it does not share all the attributes or methods of an array, it will - be interpreted as an array in functions that take objects and convert them - to arrays. - Furthermore, Any changes in an array converted from a 1-d iterator will - be reflected back in the original array when the converted array is deleted. - -\end_layout - -\begin_layout Standard -\begin_inset Float table -wide false -sideways false -status open - -\begin_layout Standard -\begin_inset Caption - -\begin_layout Standard -\begin_inset LatexCommand label -name "cap:ndarray-attributes" - -\end_inset - -Attributes of the -\family typewriter -ndarray -\family default -. -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -\begin_inset ERT -status collapsed - -\begin_layout Standard - - -\backslash -vspace*{-0.2in} -\backslash -setlength{ -\backslash -extrarowheight}{0.25eM} -\end_layout - -\begin_layout Standard - -\end_layout - -\begin_layout Standard - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -\align center -\begin_inset Tabular -<lyxtabular version="3" rows="18" columns="3"> -<features> -<column alignment="center" valignment="top" leftline="true" width="1in"> -<column alignment="center" valignment="top" leftline="true" width="1in"> -<column alignment="block" valignment="top" leftline="true" rightline="true" width="3in"> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family sans -\series bold -\size large -Attribute -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family sans -\series bold -\size large -Settable -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family sans -\series bold -\size large -Description -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -flags -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -No -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -special array-connected dictionary-like object with attributes showing the - state of flags in this array; only the flags WRITEABLE, ALIGNED, and UPDATEIFCO -PY can be modified by setting attributes of this object -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -shape -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Yes -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -tuple showing the array shape; setting this attribute re-shapes the array -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -strides -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Yes -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -tuple showing how many -\emph on -bytes -\emph default - must be jumped in the data segment to get from one entry to the next -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -ndim -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -No -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -number of dimensions in array -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -data -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Yes -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -buffer object loosely wrapping the array data (only works for single-segment - arrays) -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -size -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -No -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -total number of elements -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -itemsize -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -No -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -size (in bytes) of each element -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -nbytes -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -No -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -total number of bytes used -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -base -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -No -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -object this array is using for its data buffer, or None if it owns its own - memory -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -dtype -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Yes -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -data-type object for this array -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -real -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Yes -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -real part of the array; setting copies data to real part of current array -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -imag -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Yes -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -imaginary part, or read-only zero array if type is not complex; setting - works only if type is complex -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -flat -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Yes -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -one-dimensional, indexable iterator object that acts somewhat like a 1-d - array -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -ctypes -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -No -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -object to simplify the interaction of this array with the ctypes module -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -__array_interface__ -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -No -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -dictionary with keys (data, typestr, descr, shape, strides) for compliance - with Python side of array protocol -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -__array_struct__ -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -No -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -array interface on C-level -\end_layout - -\end_inset -</cell> -</row> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -__array_priority__ -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -No -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -always 0.0 for base type -\family typewriter -ndarray -\end_layout - -\end_inset -</cell> -</row> -</lyxtabular> - -\end_inset - - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Subsection -Memory Layout attributes -\end_layout - -\begin_layout Description -flags -\begin_inset LatexCommand index -name "ndarray!attributes!flags" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Array flags -\begin_inset LatexCommand index -name "ndarray!flags|(" - -\end_inset - - provide information about how the memory area used for the array is to - be interpreted. - There are 6 Boolean flags in use which govern whether or not: -\end_layout - -\begin_deeper -\begin_layout Description -C_CONTIGUOUS\InsetSpace ~ -(C) the data is in a single, C-style contiguous segment; -\end_layout - -\begin_layout Description -F_CONTIGUOUS\InsetSpace ~ -(F) the data is in a single, Fortran-style contiguous segment; -\end_layout - -\begin_layout Description -OWNDATA\InsetSpace ~ -(O) the array owns the memory it uses or if it borrows it from another - object (if this is False, the base attribute retrieves a reference to the - object this array obtained its data from); -\end_layout - -\begin_layout Description -WRITEABLE\InsetSpace ~ -(W) the data area can be written to; -\end_layout - -\begin_layout Description -ALIGNED\InsetSpace ~ -(A) the data and strides are aligned appropriately for the hardware - (as determined by the compiler); -\end_layout - -\begin_layout Description -UPDATEIFCOPY\InsetSpace ~ -(U) this array is a copy of some other array (referenced by - -\family typewriter -.base -\family default -). - When this array is deallocated, the base array will be updated with the - contents of this array. -\end_layout - -\end_deeper -\begin_layout Description -\InsetSpace ~ - Only the -\series bold -UPDATEIFCOPY -\series default -, -\series bold -WRITEABLE -\series default -, and -\series bold -ALIGNED -\series default - flags can be changed by the user. - This can be done using the special array-connected, dictionary-like object - that the flags attribute returns. - By setting elements in this dictionary, the underlying array obect's flags - are altered. - Flags can also be changed using the method -\family typewriter -setflags -\family default -(...). - All flags in the dictionary can be accessed using their first (upper case) - letter as well as the full name. - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Certain logical combinations of flags can also be read using named keys - to the special flags dictionary. - These combinations are -\end_layout - -\begin_deeper -\begin_layout Description -FNC Returns F_CONTIGUOUS and not C_CONTIGUOUS -\end_layout - -\begin_layout Description -FORC Returns F_CONTIGUOUS or C_CONTIGUOUS (one-segment test). -\end_layout - -\begin_layout Description -BEHAVED\InsetSpace ~ -(B) Returns ALIGNED and WRITEABLE -\end_layout - -\begin_layout Description -CARRAY\InsetSpace ~ -(CA) Returns BEHAVED and C_CONTIGUOUS -\end_layout - -\begin_layout Description -FARRAY_(FA) Returns BEHAVED and F_CONTIGUOUS and not C_CONTIGUOUS -\end_layout - -\end_deeper -\begin_layout Note -The array flags cannot be set arbitrarily. - UPDATEIFCOPY can only be set False. - the ALIGNED flag can only be set True if the data is truly aligned. - The flag WRITEABLE can only be set True if the array owns its own memory - or the ultimate owner of the memory exposes a writeable buffer interface - (or is a string). - The exception for string is made so that unpickling can be done without - copying memory. - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Flags can also be set and read using attribute access with the lower-case - key equivalent (without first letter support). - Thus, for example, self.flags.c_contiguous returns whether or not the array - is C-style contiguous, and self.flags.writeable=True changes the array to - be writeable (if possible) -\begin_inset LatexCommand index -name "ndarray!flags|)" - -\end_inset - -. -\end_layout - -\begin_layout Description -shape -\begin_inset LatexCommand index -name "ndarray!attributes!shape" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The shape of the array is a tuple giving the number of elements in each - dimension. - The shape can be reset for single-segment arrays by setting this attribute - to another tuple. - The total number of elements cannot change. - However, a -1 may be used in a dimension entry to indicate that the array - length in that dimension should be computed so that the total number of - elements does not change. - -\family typewriter -a.shape=x -\family default - is equivalent to -\family typewriter -a=a.reshape(x) -\family default - except the latter can be used even if the array is not single-segment and - even if -\begin_inset Formula $a$ -\end_inset - - is an array scalar. - -\end_layout - -\begin_layout Note -Setting the shape attribute to () for a 1-element array will turn self into - a 0-dimensional array. - This is one of the few ways to get a 0-dimensional array in Python. - Most other operations will return an array scalar. - Other ways to get a 0-dimensional array in Python include calling array - with a scalar argument and calling the squeeze method of an array whose - shape is all 1's. - -\end_layout - -\begin_layout Description -strides -\begin_inset LatexCommand index -name "ndarray!attributes!strides" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The strides of an array is a tuple showing for each dimension how many - -\emph on -bytes -\emph default - must be skipped to get to the next element in that dimension. - Setting this attribute to another tuple will change the way the memory - is viewed. - This attribute can only be set to a tuple that will not cause the array - to access unavailable memory. - If an attempt is made to do so, ValueError is raised. -\end_layout - -\begin_layout Description -ndim -\begin_inset LatexCommand index -name "ndarray!attributes!ndim" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The number of dimensions of an array is sometimes called the rank of the - array. - Getting this attribute reveals the length of the shape tuple and the strides - tuple. - -\end_layout - -\begin_layout Description -data -\begin_inset LatexCommand index -name "ndarray!attributes!data" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - A buffer object referencing the actual data for this array if this array - is single-segment. - If the array is not single-segment, then an AttributeError is raised. - The buffer object is writeable depending on the status of self.flags.writeable. -\end_layout - -\begin_layout Description -size -\begin_inset LatexCommand index -name "ndarray!attributes!size" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The total number of elements in the array. -\end_layout - -\begin_layout Description -itemsize -\begin_inset LatexCommand index -name "ndarray!attributes!itemsize" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The number of bytes each element of the array requires. - -\end_layout - -\begin_layout Description -nbytes -\begin_inset LatexCommand index -name "ndarray!attributes!nbytes" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The total number of bytes used by the array. - This is equal to -\family typewriter -self.itemsize*self.size -\family default -. -\end_layout - -\begin_layout Description -base -\begin_inset LatexCommand index -name "ndarray!attributes!base" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - If the array does not own its own memory, then this attribute returns the - object whose memory this array is referencing. - The returned object may not be the original allocator of the memory, but - may be borrowing it from still another object. - If this array does own its own memory, then None is returned unless the - UPDATEIFCOPY flag is True in which case self.base is the array that will - be updated when self is deleted. - UPDATEIFCOPY gets set for an array that is created as a behaved copy of - a general array. - The intent is for the misaligned array to get any changes that occur to - the copy. - -\end_layout - -\begin_layout Subsection -Data Type attributes -\end_layout - -\begin_layout Standard -There are several ways to specify the kind of data that the array is composed - of. - The fullest description that preserves field information is always obtained - using an actual dtype object. - See Chapter -\begin_inset LatexCommand ref -reference "cha:Data-descriptor-objects" - -\end_inset - - for more discussion on data-type objects and acceptable arguments to construct - data-type objects. - Three commonly-used attributes of the data-type object returned are also - documented here. -\end_layout - -\begin_layout Description -dtype -\begin_inset LatexCommand index -name "ndarray!attributes!dtype" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - A data-type object that fully describes (including any defined fields) - each fixed-length item in the array. - Whether or not the data is in machine byte-order is also determined by - the data-type. - The data-type attribute can be set to anything that can be interpreted - as a data-type (see Chapter -\begin_inset LatexCommand ref -reference "cha:Data-descriptor-objects" - -\end_inset - - for more information). - Setting this attribute allows you to change the interpretation of the data - in the array. - The new data-type must be compatible with the array's current data-type. - The new data-type is compatible if it has the same itemsize as the current - data-type descriptor, or (if the array is a single-segment array) if the - the array with the new data-type fits in the memory already consumed by - the array. - -\end_layout - -\begin_layout Description -dtype.type -\end_layout - -\begin_layout Description -\InsetSpace ~ - A Python type object gives the typeobject whose instances represent elements - of the array. - This type object can be used to instantiate a scalar of that type. - -\end_layout - -\begin_layout Description -dtype.char -\end_layout - -\begin_layout Description -\InsetSpace ~ - A typecode character unique to each of the 21 built-in types. - -\end_layout - -\begin_layout Description -dtype.str -\end_layout - -\begin_layout Description -\InsetSpace ~ - This string consists of a required first character giving the -\begin_inset Quotes eld -\end_inset - -endianness -\begin_inset Quotes erd -\end_inset - - of the data ( -\begin_inset Quotes eld -\end_inset - -< -\begin_inset Quotes erd -\end_inset - - for little endian, -\begin_inset Quotes eld -\end_inset - -> -\begin_inset Quotes erd -\end_inset - - for big endian, and -\begin_inset Quotes eld -\end_inset - -| -\begin_inset Quotes erd -\end_inset - - for irrelevant), the second character is a code for the kind of data ('b' - for Boolean, 'i' for signed integer, 'u' for unsigned integer, 'f' for - floating-point, 'c' for complex floating point, 'O' for object, 'S' for - ASCII string, 'U' for unicode, and 'V' for void), the final characters - give the number of bytes each element uses. -\end_layout - -\begin_layout Subsection -Other attributes -\end_layout - -\begin_layout Description -T -\begin_inset LatexCommand index -name "ndarray!attributes!T" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to self.transpose(). - For self.ndim < 2, it returns a view of self. - -\end_layout - -\begin_layout Warning -If arr is 0- or 1-dimensional, then arr.T will return a new ndarray which - refers to the same data as arr. - This is because transpose has the effect of reversing the shape attribute - of an array (whose 0-d and 1-d equivalent is to return the same array). - This may be surprising if you are thinking of your 1-d array as a -\begin_inset Quotes eld -\end_inset - -row -\begin_inset Quotes erd -\end_inset - - or a -\begin_inset Quotes eld -\end_inset - -column -\begin_inset Quotes erd -\end_inset - - vector and expected the .T attribute to return the other convention. - -\end_layout - -\begin_layout Description -real -\begin_inset LatexCommand index -name "ndarray!attributes!real" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The real part of an array. - For arrays that are not complex this attribute returns the array itself. - Setting this attribute allows setting just the real part of an array. - If the array is already real then setting this attribute is equivalent - to self[...] = values. -\end_layout - -\begin_layout Description -imag -\begin_inset LatexCommand index -name "ndarray!attributes!imag" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - A view of the imaginary part of an array. - For arrays that are not complex, this returns a read-only array of zeros. - Setting this array allows in-place alteration of the complex part of an - imaginary array. - If the array is not complex, then trying to set this attribute raises an - Error. - -\end_layout - -\begin_layout Description -flat -\begin_inset LatexCommand index -name "ndarray!attributes!flat" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an iterator object (numpy.flatiter) that acts like a 1-d version - of the array. - 1-d indexing works on this array and it can be passed in to most routines - as an array wherein a 1-d array will be constructed from it. - The new 1-d array will reference this array's data if this array is C-style - contiguous, otherwise, new memory will be allocated for the 1-d array, - the UPDATEIFCOPY flag will be set for the new array, and this array will - have its WRITEABLE flag set FALSE until the the last reference to the new - array disappears. - When the last reference to the new 1-d array disappears, the data will - be copied over to this non-contiguous array. - This is done so that a.flat effectively references the current array regardless - of whether or not it is contiguous or non-contiguous. - As an example, consider the following code: -\end_layout - -\begin_layout MyCode ->>> a = zeros((4,5)) -\newline ->>> b = ones(6) -\newline ->>> add(b,b,a[1:3,0:3].flat) -\newline -array([[ 2., - 2., 2.], -\newline - [ 2., 2., 2.]]) -\newline ->>> print a -\newline -[[ 0. - 0. - 0. - 0. - 0.] -\newline - [ 2. - 2. - 2. - 0. - 0.] -\newline - [ 2. - 2. - 2. - 0. - 0.] -\newline - [ 0. - 0. - 0. - 0. - 0.]] -\end_layout - -\begin_layout Description -\InsetSpace ~ - The numpy.flatiter object has two methods: -\series bold -__array__() -\series default - and -\series bold -copy() -\series default - and one attribute: -\series bold -base -\series default -. - The base attribute returns a reference to the underlying array. - -\end_layout - -\begin_layout Description -__array_priority__ -\begin_inset LatexCommand index -name "ndarray!attributes!\\_\\_array\\_priority\\_\\_" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The array priority attribute is a floating point number useful in mixed - operations involving two subtypes to decide which subtype is returned. - The base ndarray object has priority 0.0 and 1.0 is the default subtype priority. -\end_layout - -\begin_layout Subsection -Array Interface attributes -\end_layout - -\begin_layout Standard -The array interface -\begin_inset LatexCommand index -name "array interface" - -\end_inset - - (sometimes called array protocol) was created in 2005 as a means for array-like - Python objects to re-use each other's data buffers intelligently whenever - possible. - The ndarray object supports both the Python-side and the C-side of the - array interface. - The system is able to consume objects that expose the array interface, - and array objects can expose their inner workings to other objects that - support the array interface. - -\end_layout - -\begin_layout Description -__array_interface__ -\begin_inset LatexCommand index -name "ndarray!attributes!\\_\\_array\\_interface\\_\\_" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The python-side of the array interface. - It is a dictionary with the following attributes: -\end_layout - -\begin_deeper -\begin_layout Description -data A 2-tuple (dataptr, read-only flag). - The dataptr is a string giving the address (in hexadecimal format) of the - array data. - The read-only flag is True if the array memory is read-only. - -\end_layout - -\begin_layout Description -strides The strides tuple. - Same as -\series bold -strides -\series default - attribute except None is returned if the array is C-style contiguous. -\end_layout - -\begin_layout Description -shape The shape tuple. - Same as -\series bold -shape -\series default - attribute. -\end_layout - -\begin_layout Description -typestr A string giving the format of the data. - Same as -\series bold -dtype.str -\series default - attribute. - -\end_layout - -\begin_layout Description -descr A list of tuples providing the detailed description of this data type. - This information is obtained from the arrdescr attribute of the dtypedescr - object associated with each array. - For arrays with fields, this will return a valid array-protocol descriptor - list. - For arrays without defined fields, this returns [('',typestr)]. -\end_layout - -\end_deeper -\begin_layout Description -__array_struct__ -\begin_inset LatexCommand index -name "ndarray!attributes!\\_\\_array\\_struct\\_\\_" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - A PyCObject that wraps a pointer to a PyArrayInterface structure. - This is only useful on the C-level for rapid implementation of the array - interface, using a single attribute lookup. -\end_layout - -\begin_layout Description -ctypes -\begin_inset LatexCommand index -name "ndarray!attributes!ctypes|(" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - This attribute creates an object that makes it easier to use arrays when - calling out to shared libraries with the ctypes module. - The returned object has data, shape, and strides attributes which return - ctypes -\begin_inset LatexCommand index -name "ctypes" - -\end_inset - - objects that can be used as arguments to a shared library. - These attributes are: -\end_layout - -\begin_deeper -\begin_layout Description -data A pointer to the memory area of the array as a Python integer. - This memory area may contain data that is not aligned, or not in correct - byte-order. - The memory area may not even be writeable. - The array flags and data-type of this array should be respected when passing - this attribute to arbitrary C-code to avoid trouble that can include Python - crashing. - User Beware! The value of this attribute is exactly the same as -\family typewriter -self.__array_interface__['data'][0] -\family default -. -\end_layout - -\begin_layout Description -shape (c_intp*self.ndim) A ctypes array of length self.ndim where the base-type - is the C-integer corresponding to dtype('p') on this platform. - This base-type could be c_int, c_long, or c_longlong depending on the platform. - The c_intp type is defined accordingly in numpy.ctypeslib. - The ctypes array contains the shape of the underlying array. -\end_layout - -\begin_layout Description -strides (c_intp*self.ndim) A ctypes array of length self.ndim where the base-type - is the same as for the shape attribute. - This ctypes array contains the strides information from the underlying - array. - This strides information is important for showing how many bytes must be - jumped to get to the next element in the array. - -\end_layout - -\begin_layout Description -_as_parameter_ (c_void_p) Returns the data-pointer to the array as a ctypes - object. - Among other possible uses, this enables this ctypes object to be used directly - in a ctypes-loaded call to an arbitrary function. - Be sure to respect the flags on the array and the size and strides of the - array so as not to use this memory in-appropriately (see the -\series bold -ndpointer -\series default - function for how to return a class that can be used with the argtypes attribute - of ctypes functions). - -\end_layout - -\end_deeper -\begin_layout Warning -Be careful using the ctypes attribute --- especially on temporary arrays - or arrays constructed on the fly. - For example, calling (a+b).ctypes.data_as(ctypes.c_void_p) returns a pointer - to memory that is invalid because the array created as (a+b) is deallocated - before the next Python statement. - You can avoid this problem using either c=a+b or ct=(a+b).ctypes. - In the latter case, ct will hold a reference to the array until ct is deleted - or re-assigned. -\end_layout - -\begin_layout Description -\InsetSpace ~ - The ctypes object also has several methods which can alter how the shape, - strides, and data of the underlying object is returned. - -\end_layout - -\begin_deeper -\begin_layout Description -data_as (obj) Return the data pointer cast-to a particular c-types object. - For example, calling -\family typewriter -self._as_parameter_ -\family default - is equivalent to -\family typewriter -self.data_as(ctypes.c_void_p) -\family default -. - Perhaps you want to use the data as a pointer to a ctypes array of floating-poi -nt data: -\family typewriter -self.data_as(ctypes.POINTER(ctypes.c_double)) -\family default -. - -\end_layout - -\begin_layout Description -shape_as (obj) Return the shape tuple as an array of some other c-types - type. - For example: -\family typewriter -self.shape_as(ctypes.c_short) -\family default -. - -\end_layout - -\begin_layout Description -strides_as (obj) Return the strides tuple as an array of some other c-types - type. - For example: -\family typewriter -self.strides_as(ctypes.c_longlong) -\family default -. -\end_layout - -\end_deeper -\begin_layout Description -\InsetSpace ~ - If the ctypes module is not available, then the ctypes attribute of array - objects still returns something useful, but ctypes objects are not returned - and errors may be raised instead. - In particular, the object will still have the _as_parameter_ attribute - which will return an integer equal to the data -\begin_inset LatexCommand index -name "ndarray!attributes!ctypes|)" - -\end_inset - - attribute -\begin_inset LatexCommand index -name "ndarray!attributes|)" - -\end_inset - -. - -\end_layout - -\begin_layout Section - -\family typewriter -ndarray -\family default - Methods -\end_layout - -\begin_layout Standard -In NumPy, the -\family typewriter -ndarray -\family default - object has many methods -\begin_inset LatexCommand index -name "ndarray!methods|(" - -\end_inset - - which operate on or with the array in some fashion, typically returning - an array result. - In Numeric, many of these methods were only library calls. - These methods are explained in this chapter. - Whenever the array whose method is being called needs to be referenced - it will be referred to as -\emph on -this array -\emph default -, or -\emph on -self -\emph default -. - Keyword arguments will be shown. - Methods that only take one argument do not have keyword arguments. - Default values for one argument methods will be shown in braces {default}. - -\end_layout - -\begin_layout Warning -If you are converting code from Numeric, then you will need to make the - following (search and replace) conversions: -\family typewriter -.typecode() --> .dtype.char -\family default -; -\family typewriter -.iscontiguous() --> .flags.contiguous -\family default -; -\family typewriter -.byteswapped() --> .byteswap() -\family default -; -\family typewriter -.toscalar() --> .item() -\family default -; and -\family typewriter -.itemsize() --> .itemsize -\family default -. - The numpy.oldnumeric.alter_code1 module can automate this for you. -\end_layout - -\begin_layout Subsection -Array conversion -\end_layout - -\begin_layout Description -tolist -\begin_inset LatexCommand index -name "ndarray!methods!tolist" - -\end_inset - - () -\end_layout - -\begin_layout Description -\InsetSpace ~ - The contents of self as a nested list. -\end_layout - -\begin_layout MyCode ->>> a = array([[1,2,3],[4,5,6]]); print a.tolist() -\newline -[[1, 2, 3], [4, 5, 6]] -\end_layout - -\begin_layout Description -item -\begin_inset LatexCommand index -name "ndarray!methods!item" - -\end_inset - - (*args) -\end_layout - -\begin_layout Description -\InsetSpace ~ - If no arguments are passed in, then this method only works for arrays with - one element (a.size == 1). - In this case, it returns a standard Python scalar object (if possible) - copied from the first element of self. - When the data type of self is longdouble or clongdouble, this returns a - scalar array object because there is no available Python scalar that would - not lose information. - Void arrays return a buffer object for item() unless fields are defined - in which case a tuple is returned. -\end_layout - -\begin_layout MyCode ->>> asc = a[0,0].item() -\newline ->>> type(asc) -\newline -<type 'int'> -\newline ->>> asc -\newline -1 -\newline ->>> type(a[0,0]) -\newline -<type - 'numpy.int32'> -\end_layout - -\begin_layout Description -\InsetSpace ~ - If arguments are provided, then they indicate indices into the array (either - a flat index or an nd-index). - A standard Python scalar corresponding to the item at the given location - is then returned. - This is very similar to self[args] except instead of an array scalar, a - standard Python scalar is returned. - This can be useful for speeding up access to elements of the array and - doing arithmetic on elements of the array using Python's optimized math. - -\end_layout - -\begin_layout Description -itemset -\begin_inset LatexCommand index -name "ndarray!methods!itemset" - -\end_inset - - (*args) -\end_layout - -\begin_layout Description -\InsetSpace ~ - There must be at least 1 argument and define the last argument as item. - Then, this is equivalent to but faster than self[args] = item. - The item should be a scalar value and args must select a single item in - the array. -\end_layout - -\begin_layout Description -tostring -\begin_inset LatexCommand index -name "ndarray!methods!tostring" - -\end_inset - - (order='C') -\end_layout - -\begin_layout Description -\InsetSpace ~ - A Python string showing a copy of the raw contents of data memory. - The string can be produced in either 'C' or 'Fortran', or 'Any' order (the - default is 'C'-order). - 'Any' order means C-order unless the F_CONTIGUOUS flag in the array is - set, then 'Fortran' order. - -\end_layout - -\begin_layout Description -tofile -\begin_inset LatexCommand index -name "ndarray!methods!tofile" - -\end_inset - - (file=, sep='', format='') -\end_layout - -\begin_layout Description -\InsetSpace ~ - Write the contents of self to the open file object. - If file is a string, then open a file of that name first. - If sep is the empty string, then write the file in binary mode. - If sep is any other string, write the array in simple text mode separating - each element with the value of the sep string. - When the file is written in text mode, the format string can be used to - alter the appearance of each entry. - If format is the empty string, then it is equivalent to -\family typewriter - -\begin_inset Quotes eld -\end_inset - -%s -\begin_inset Quotes erd -\end_inset - - -\family default -. - Each element of the array will be converted to a Python scalar, -\family typewriter -o -\family default -, and written to the file as -\family typewriter - -\begin_inset Quotes eld -\end_inset - -format -\begin_inset Quotes erd -\end_inset - - % o -\family default -. - Note that writing an array to a file does not store any information about - the shape, type, or endianness of an array. - When written in binary mode, tofile is functionally equivalent to -\family typewriter -fid.write(self.tostring()) -\family default -. -\end_layout - -\begin_layout MyCode ->>> a.tofile('myfile.txt',sep=':',format='%03d') -\end_layout - -\begin_layout MyCode -Contents of myfile.txt -\end_layout - -\begin_layout MyCode -001:002:003:004:005:006 -\end_layout - -\begin_layout Description -dump -\begin_inset LatexCommand index -name "ndarray!methods!dump" - -\end_inset - - (file) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Pickle the contents of self to the file object represented by file. - Equivalent to cPickle.dump(self, file, 2) -\end_layout - -\begin_layout Description -dumps -\begin_inset LatexCommand index -name "ndarray!methods!dumps" - -\end_inset - - () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return pickled representation of self as a string. - Equivalent to cPickle.dumps(self, 2) -\end_layout - -\begin_layout Description -astype -\begin_inset LatexCommand index -name "ndarray!methods!astype" - -\end_inset - - ({None}) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Force conversion of this array to an array with the data type provided - as the argument. - If the argument is None, or equal to the data type of self, then return - a copy of the array. - -\end_layout - -\begin_layout Description -byteswap -\begin_inset LatexCommand index -name "ndarray!methods!byteswap" - -\end_inset - - ({False}) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Byteswap the elements of the array and return the byteswapped array. - If the argument is True, then byteswap in-place and return a reference - to self. - Otherwise, return a copy of the array with the elements byteswapped. - The data-type descriptor is not changed so the array will have changed - numbers. -\end_layout - -\begin_layout Description -copy -\begin_inset LatexCommand index -name "ndarray!methods!copy" - -\end_inset - - () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a copy of the array (which is always single-segment, and ALIGNED). - However, the data-type is preserved (including whether or not the data - is byteswapped). - -\end_layout - -\begin_layout Description -view -\begin_inset LatexCommand index -name "ndarray!methods!view" - -\end_inset - - ({None}) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a new array using the same memory area as self. - If the optional argument is given, it can be either a typeobject that is - a sub-type of the ndarray or an object that can be converted to a data-type - descriptor. - If the argument is a typeobject then a new array of that Python type is - returned that uses the information from self. - If the argument is a data-type descriptor, then a new array of the same - Python type as self is returned using the given data-type. - -\end_layout - -\begin_layout MyCode ->>> print a.view(single) -\newline -[[ 1.40129846e-45 2.80259693e-45 4.20389539e-45] -\newline - - [ 5.60519386e-45 7.00649232e-45 8.40779079e-45]] -\newline ->>> a.view(ubyte) -\newline -array([[1, - 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0], -\newline - [4, 0, 0, 0, 5, 0, 0, 0, 6, 0, - 0, 0]], dtype=uint8) -\end_layout - -\begin_layout Description -getfield -\begin_inset LatexCommand index -name "ndarray!methods!getfield" - -\end_inset - - (dtype=, offset=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a -\emph on -field -\emph default - of the given array as an array of the given data type. - A field is a view of the array's data at a certain byte offset interpreted - as a given data type. - The returned array is a reference into self, therefore changes made to - the returned array will be reflected in self. - This method is particularly useful for record arrays that use a void data - type, but it can also be used to extract the low (high)-order bytes of - other array types as well. - For example, using getfield, you could extract fixed-length substrings - from an array of strings. - -\end_layout - -\begin_layout MyCode ->>> a = array(['Hello','World','NumPy']) -\newline ->>> a.getfield('S2',1) -\newline -array(['el', - 'or', 'um'], -\newline - dtype='|S2') -\end_layout - -\begin_layout Description -setflags -\begin_inset LatexCommand index -name "ndarray!methods!setflags" - -\end_inset - - (write=None, align=None, uic=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Set array flags WRITEABLE, ALIGNED, and UPDATEIFCOPY, respectively. - The ALIGNED flag can only be set to True if the data is actually aligned - according to the type. - The UPDATEIFCOPY flag can never be set to True. - The flag WRITEABLE can only be set True if the array owns its own memory - or the ultimate owner of the memory exposes a writeable buffer interface - (or is a string). - The exception for string is made so that unpickling can be done without - copying memory. - -\end_layout - -\begin_layout Description -fill -\begin_inset LatexCommand index -name "ndarray!methods!fill" - -\end_inset - - (scalar) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Fill an array with the scalar value (appropriately converted to the type - of self). - If the scalar value is an array or a sequence, then only the first element - is used. - This method is usually faster than a[...]=scalar or self.flat=scalar, and always - interprets its argument as a scalar. -\end_layout - -\begin_layout Standard -\begin_inset Float table -wide false -sideways false -status open - -\begin_layout Standard -\begin_inset Caption - -\begin_layout Standard -Array conversion methods -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -\begin_inset ERT -status collapsed - -\begin_layout Standard - - -\backslash -setlength{ -\backslash -extrarowheight}{0.1eM} -\end_layout - -\begin_layout Standard - -\end_layout - -\begin_layout Standard - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -\align center -\begin_inset Tabular -<lyxtabular version="3" rows="15" columns="3"> -<features> -<column alignment="center" valignment="top" leftline="true" width="0"> -<column alignment="center" valignment="top" leftline="true" width="30text%"> -<column alignment="center" valignment="top" leftline="true" rightline="true" width="0"> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family sans -\series bold -\size large -Method -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family sans -\series bold -\size large -Arguments -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family sans -\series bold -\size large -Description -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -astype -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(dtype {None}) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Cast to another data type -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -byteswap -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(inplace {False}) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Byteswap array elements -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -copy -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -() -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Copy array -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -dump -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(file) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Pickle to stream or file -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -dumps -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -() -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Get pickled string -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -fill -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(scalar) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Fill an array with scalar value -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -getfield -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(dtype=, offset=0) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Return a field of the array -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -setflags -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(write=None, align=None, uic=None) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Set array flags -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -tofile -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(file=, sep='', format='') -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Raw write to file -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -tolist -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -() -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Array as a nested list -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -item -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(*args) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Python scalar extraction -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -itemset -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(*args) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Insert scalar (last argument) into array -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -tostring -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(order='C') -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -String of raw memory -\end_layout - -\end_inset -</cell> -</row> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -view -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(obj) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -View as another data type or class -\end_layout - -\end_inset -</cell> -</row> -</lyxtabular> - -\end_inset - - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Subsection -Array shape manipulation -\end_layout - -\begin_layout Standard -For reshape, resize, and transpose, the single tuple argument may be replaced - with -\begin_inset Formula $n$ -\end_inset - - integers which will be interpreted as an -\begin_inset Formula $n$ -\end_inset - --tuple. -\end_layout - -\begin_layout Description -reshape -\begin_inset LatexCommand index -name "ndarray!methods!reshape" - -\end_inset - - (newshape, order='C') -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an array that uses the same data as this array but has a new shape - given by the newshape tuple (or a scalar to reshape as 1-d). - The new shape must define an array with the same total number of elements. - If one of the elements of the new shape tuple is -1, then that dimension - will be determined such that the overall number of items in the array stays - constant. - If possible, the new array will reference the data of the old one. - If the data must be moved in order to accomplish the reshape, then then - the new array will contain a copy of the data in self. - The order argument specifies how the array data should be viewed during - the reshape (either in 'C' or 'FORTRAN' order). - This order argument specifies both how the intrinsic raveling to a 1-d - array should occur as well as how that 1-d array should be used to fill-up - the new output array. - -\end_layout - -\begin_layout Description -resize -\begin_inset LatexCommand index -name "ndarray!methods!resize" - -\end_inset - - (newshape, refcheck=1, order='C') -\end_layout - -\begin_layout Description -\InsetSpace ~ - Resize an array in-place. - This changes self (in-place) to be an array with the new shape, reallocating - space for the data area if necessary. - If the data memory must be changed because the number of new elements is - different than self.size, then an error will occur if this array does not - own its data or if another object is referencing this one. - Only a single-segment array can be resized. - The method returns None. - To bypass the reference count check, then set refcheck=0. - The purpose of the reference count check is to make sure you don't use - this array as a buffer for another Python object and then reallocate the - memory. - However, reference counts can increase in other ways so if you are sure - that you have not shared the memory for this array to another Python object, - then you may safely set refcheck=0. - -\end_layout - -\begin_layout Description -transpose -\begin_inset LatexCommand index -name "ndarray!methods!transpose" - -\end_inset - - (<None>) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an array view with the shape transposed according to the argument. - An argument of None is equivalent to range(self.ndim)[::-1]. - The argument can either be a tuple or multiple integer arguments. - This method returns a new array with permuted shape and strides attributes - using the same data as self. - -\end_layout - -\begin_layout MyCode ->>> a = arange(40).reshape((2,4,5)) -\newline ->>> b = a.transpose(2,0,1) -\newline ->>> print a.shape, - b.shape -\newline -(2, 4, 5) (5, 2, 4) -\newline ->>> print a.strides, b.strides -\newline -(80, 20, 4) (4, 80, - 20) -\newline ->>> print a -\newline -[[[ 0 1 2 3 4] -\newline - [ 5 6 7 8 9] -\newline - [10 11 12 13 14] -\newline - [15 - 16 17 18 19]] -\newline - -\newline - [[20 21 22 23 24] -\newline - [25 26 27 28 29] -\newline - [30 31 32 33 34] -\newline - [35 - 36 37 38 39]]] -\newline ->>> print b -\newline -[[[ 0 5 10 15] -\newline - [20 25 30 35]] -\newline - -\newline - [[ 1 6 11 16] -\newline - - [21 26 31 36]] -\newline - -\newline - [[ 2 7 12 17] -\newline - [22 27 32 37]] -\newline - -\newline - [[ 3 8 13 18] -\newline - [23 28 33 - 38]] -\newline - -\newline - [[ 4 9 14 19] -\newline - [24 29 34 39]]] -\end_layout - -\begin_layout Description -swapaxes -\begin_inset LatexCommand index -name "ndarray!methods!swapaxes" - -\end_inset - - (axis1, axis2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an array view with axis1 and axis2 swapped. - This is a special case of the transpose method with argument equal to arg=range -(self.ndim); arg[axis1], arg[axis2] = arg[axis2], arg[axis1]. - See the -\series bold -rollaxis -\series default - function for a routine that transposes the array with the axes rolled instead - of swapped. - -\end_layout - -\begin_layout Description -flatten -\begin_inset LatexCommand index -name "ndarray!methods!flatten" - -\end_inset - - (order='C') -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a new 1-d array with data copied from self. - Equivalent to but slightly faster then a.flat.copy(). - -\end_layout - -\begin_layout Description -ravel -\begin_inset LatexCommand index -name "ndarray!methods!ravel" - -\end_inset - - (order='C') -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a 1-d version of self. - If self is single-segment, then the new array references self, otherwise, - a copy is made. -\end_layout - -\begin_layout Description -squeeze -\begin_inset LatexCommand index -name "ndarray!methods!squeeze" - -\end_inset - - () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an array with all unit-length dimensions squeezed out. -\end_layout - -\begin_layout Subsection -Array item selection and manipulation -\end_layout - -\begin_layout Standard -For array methods that take an axis keyword, it defaults to None. - If axis is None, then the array is treated as a 1-D array. - Any other value for axis represents the dimension along which the operation - should proceed. - -\end_layout - -\begin_layout Description -take -\begin_inset LatexCommand index -name "ndarray!methods!take" - -\end_inset - - (indices=, axis=None, out=None, mode='raise') -\end_layout - -\begin_layout Description -\InsetSpace ~ - The functionality of this method is available using the advanced indexing - ability of the -\family typewriter -ndarray -\family default - object. - However, for doing selection along a single axis it is usually faster to - use take. - If axis is not None, this method is equivalent to -\family typewriter -self[indxobj] -\family default - preceeded by -\family typewriter -indxobj=[slice(None)]*self.ndim; indxobj[ -\series bold -axis -\series default -] = -\family default - -\family typewriter -\series bold -indices -\family default -\series default -. - It returns the elements or sub-arrays from self indicated by the index - numbers in indices. - If axis is None, then this method is equivalent to -\family typewriter -self.flat[indices] -\family default -. - The out and mode arguments allow for specification of the output array - and how out-of-bounds indices will be handled ('raise': raise an error, - 'wrap': wrap around, 'clip': clip to range) -\end_layout - -\begin_layout Description -put -\begin_inset LatexCommand index -name "ndarray!methods!put" - -\end_inset - - (indices=, values=, mode='raise') -\end_layout - -\begin_layout Description -\InsetSpace ~ - Performs the equivalent of -\end_layout - -\begin_layout LyX-Code -for n in -\series bold -indices -\series default -: -\end_layout - -\begin_layout LyX-Code - self.flat[n] = -\series bold -values -\series default -[n] -\end_layout - -\begin_layout Description -\InsetSpace ~ - Values is repeated if it is too short. - The mode argument specifies what to do if n is too large. - -\end_layout - -\begin_layout Description -repeat -\begin_inset LatexCommand index -name "ndarray!methods!repeat" - -\end_inset - - (repeats=, axis=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Copy elements (or sub-arrays selected along axis) of self -\series bold -repeats -\series default - times. - The repeats argument must be a sequence of length self.shape[axis] or a - scalar. - The repeats argument dictates how many times the element (or sub-array) - will be repeated in the result array. - -\end_layout - -\begin_layout Description -choose -\begin_inset LatexCommand index -name "ndarray!methods!choose" - -\end_inset - - (choices, out=None, mode='raise') -\end_layout - -\begin_layout Description -\InsetSpace ~ - The array must be an integer (or bool) array with entries from -\begin_inset Formula $0$ -\end_inset - - to -\begin_inset Formula $n$ -\end_inset - -. - Choices is a tuple of -\begin_inset Formula $n$ -\end_inset - - choice arrays: -\begin_inset Formula $b0,\, b1,\,\ldots\,,\, bn$ -\end_inset - -. - (Alternatively, choices can be replaced with -\begin_inset Formula $n$ -\end_inset - - arguments where each argument is a choice array). - The return array will be formed from the elements of the choice arrays - according to the value of the elements of self. - In other words, the output array will merge the choice arrays together - by using the value of self at a particular position to select which choice - array should be used for the output at a particular position. - The out keyword allows specification of an output array and the clip keyword - allows different behavior when self contains entries outside the number - of choices. - The acceptable arguments to mode are 'raise' (RAISE), 'wrap' (WRAP), and - 'clip' (CLIP) ('raise' produces an error, 'wrap' converts the number into - range by periodic wrapping so that numbers <0 have -\begin_inset Formula $n$ -\end_inset - - repeatedly added and numbers >= -\begin_inset Formula $n$ -\end_inset - - have -\begin_inset Formula $n$ -\end_inset - - repeatedly subtracted, and 'clip' will clip all entries to be within the - range [0, -\begin_inset Formula $n$ -\end_inset - -). -\end_layout - -\begin_layout MyCode ->>> a = array([0,3,2,1]) -\newline ->>> a.choose([0,1,2,3],[10,11,12,13], -\newline -... - [20,21,22,23],[30,31,32,33]) -\newline -array([ 0, 31, 22, 13]) -\end_layout - -\begin_layout Description -sort -\begin_inset LatexCommand index -name "ndarray!methods!sort" - -\end_inset - - (axis=-1, kind='quick', order=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Sort the array in-place and return None. - The sort takes place over the given axis using an underlying sort algorithm - specified by kind. - The sorting algorithms available are 'quick', 'heap', and 'merge'. - For flexible types only the quicksort algorithm is available. - For arrays with fields defined, the order keyword allows specification - of the order in which to use the field names in the sort. - If order is a string then it is the field name to use to define the sort. - If order is a list (or tuple) of strings, then it specifies a lexicographic - ordering so that the first listed field name is compared first if that - results in equality, the second listed field name is used for the comparison - and so on. - If order is None, then arrays with fields use the first field for comparison. - -\end_layout - -\begin_layout MyCode ->>> a=array([[0.2,1.3,2.5],[1.5,0.1,1.4]]); -\newline ->>> b=a.copy(); b.sort(0); print b -\newline -[[ - 0.2 0.1 1.4] -\newline - [ 1.5 1.3 2.5]] -\newline ->>> b=a.copy(); b.sort(1); print b -\newline -[[ 0.2 1.3 2.5] -\newline - - [ 0.1 1.4 1.5]] -\end_layout - -\begin_layout Description -argsort -\begin_inset LatexCommand index -name "ndarray!methods!argsort" - -\end_inset - - (axis=-1, kind='quick', order=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an index array of the same size as self showing which indices along - the given axis should be selected to sort self along that axis. - Uses an underlying sort algorithm specified by kind. - The sorting algorithms available are 'quick', 'heap', and 'merge'. - For arrays with fields defined, the order keyword allows specification - of the order in which to use the field names in the sort. - If order is a string then it is the field name to use to define the sort. - If order is a list (or tuple) of strings, then it specifies a lexicographic - ordering so that the first listed field name is compared first if that - results in equality, the second listed field name is used for the comparison - and so on. - If order is None, then arrays with fields use the first field for comparison. - -\end_layout - -\begin_layout MyCode ->>> b=a.copy(); print b.argsort(0) -\newline -[[0 1 1] -\newline - [1 0 0]] -\newline ->>> b=a.copy(); print b.argsort(1 -) -\newline -[[0 1 2] -\newline - [1 2 0]] -\end_layout - -\begin_layout Tip -Complex valued arrays sort lexicographically by comparing first the real - parts and then the imaginary parts if the real parts are the same. -\end_layout - -\begin_layout Description -searchsorted -\begin_inset LatexCommand index -name "ndarray!methods!searchsorted" - -\end_inset - - (values, side='left') -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an index array (dtype=intp) of the same shape as values showing - the index where the value would fit in self. - The index is such that self[index-1] -\begin_inset Formula $<$ -\end_inset - - value -\begin_inset Formula $\le$ -\end_inset - - self[index] when side is 'left'. - In this formula self[self.size]= -\begin_inset Formula $\infty$ -\end_inset - - and self[-1]= -\begin_inset Formula $-\infty$ -\end_inset - -. - Therefore, if value is larger than all elements of self, then index is - self.size. - If value is smaller than all elements of self, then index is 0. - Self must be a sorted 1-d array. - If elements of self are repeated, the index of the first occurrence is - used. - If side is 'right', then the search rule is switched so that the -\begin_inset Formula $<$ -\end_inset - - sign is on the -\begin_inset Quotes eld -\end_inset - -right -\begin_inset Quotes erd -\end_inset - - instead of the left in the search rule. - In other words, the index returned is such that self[index-1] -\begin_inset Formula $\le$ -\end_inset - -value -\begin_inset Formula $<$ -\end_inset - - self[index]. -\end_layout - -\begin_layout MyCode ->>> b=a.ravel(); b.sort() -\newline ->>> b.searchsorted([0.0, 1.35, 2.0, 3.0]) -\newline -array([0, 3, - 5, 6]) -\end_layout - -\begin_layout Description -nonzero -\begin_inset LatexCommand index -name "ndarray!methods!nonzero" - -\end_inset - - () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the -\begin_inset Formula $n$ -\end_inset - --dimensional indices for elements of the -\begin_inset Formula $n$ -\end_inset - --dimensional array self that are nonzero into an -\begin_inset Formula $n$ -\end_inset - --tuple of equal-length index arrays. - In particular, notice that a 0-dimensional array always returns an empty - tuple. - -\end_layout - -\begin_layout MyCode ->>> x = arange(15); y=x.reshape(3,5) -\newline ->>> (x>8).nonzero() -\newline -(array([ 9, 10, 11, - 12, 13, 14]),) -\newline ->>> (y>8).nonzero() -\newline -(array([1, 2, 2, 2, 2, 2]), array([4, 0, - 1, 2, 3, 4])) -\end_layout - -\begin_layout Description -compress -\begin_inset LatexCommand index -name "ndarray!methods!compress" - -\end_inset - - (condition=, axis=None, out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This method expects condition to be a one-dimensional mask array of the - same length as self.shape[axis]. - If the array is less than self.shape[axis], then False is assumed for the - missing elements. - The method returns the elements (or sub-arrays along the given axis) of - self where condition is true. - The shape of the return array is self.shape with the axis dimension replaced - by the number of True elements of condition. - The same effect can often be accomplished using array indexing. -\end_layout - -\begin_layout MyCode ->>> x=array([0,1,2,3]) -\newline ->>> x.compress(x > 2) -\newline -array([3]) -\newline ->>> x[x>2] -\newline -array([3]) -\end_layout - -\begin_layout Description -diagonal -\begin_inset LatexCommand index -name "ndarray!methods!diagonal" - -\end_inset - - (offset=0, axis1=0, axis2=1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - If self is 2-d, return the -\series bold -offset -\series default - (from the main diagonal) diagonal of self. - If self is larger than 2-d, then return an array constructed from all the - diagonals created from all the 2-d sub-arrays formed using all of axis1 - and axis2. - The offset parameter is with respect to axis2. - The shape of the returned array is found by removing the axis1 and axis2 - entries from self.shape and then appending the length of the offset diagonal - of each 2-d sub-array. -\end_layout - -\begin_layout MyCode ->>> a=arange(25).reshape(5,5); print a -\newline -[[ 0 1 2 3 4] -\newline - [ 5 6 7 8 9] -\newline - - [10 11 12 13 14] -\newline - [15 16 17 18 19] -\newline - [20 21 22 23 24]] -\newline ->>> print a.diagonal() -\newline -[ - 0 6 12 18 24] -\newline ->>> print a.diagonal(1) -\newline -[ 1 7 13 19] -\newline ->>> print a.diagonal(-1) -\newline -[ - 5 11 17 23] -\end_layout - -\begin_layout Standard -\begin_inset Float table -wide false -sideways false -status open - -\begin_layout Standard -\begin_inset Caption - -\begin_layout Standard -Array item selection and shape manipulation methods. - If axis is an argument, then the calculation is performed along that axis. - An axis value of None means the array is flattened before calculation proceeds. -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -\begin_inset ERT -status collapsed - -\begin_layout Standard - - -\backslash -setlength{ -\backslash -extrarowheight}{0.25eM} -\end_layout - -\begin_layout Standard - -\end_layout - -\begin_layout Standard - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -\align center -\begin_inset Tabular -<lyxtabular version="3" rows="18" columns="3"> -<features> -<column alignment="center" valignment="top" leftline="true" width="0"> -<column alignment="center" valignment="top" leftline="true" width="50text%"> -<column alignment="block" valignment="top" leftline="true" rightline="true" width="30text%"> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family sans -\series bold -\size large -Method -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family sans -\series bold -\size large -Arguments -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family sans -\series bold -\size large -Description -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -argsort -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -argsort (axis=None, kind='quick') -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Indices showing how to sort array. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -choose -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -choose (c0, c1 , ..., cn, out=None, clip='raise') -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Choose from different arrays based on value of self. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -compress -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(condition=, axis=None, out=None) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Elements of self where condition is true. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -diagonal -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(offset=0, axis1=0, axis2=1) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Return a diagonal from self. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -flatten -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(order='C') -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -A 1-d copy of self. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -nonzero -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -() -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -True where self is not zero. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -put -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(indices=, values=, mode='raise') -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Place values at 1-d index locations of self. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -ravel -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(order='C') -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -1-d version of self (no data copy if self is C-style contiguous). -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -repeat -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(repeats=, axis=None) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Repeat elements of self. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -reshape -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(d1,d2,...,dn, order='C') -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Return reshaped version of self. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -resize -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(d1,d2,...,dn, refcheck=1, order='Any') -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Resize self in-place. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -searchsorted -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(values) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Show where values would be placed in self (assumed sorted). -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -sort -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(axis=None, kind='quick') -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Copy of self sorted along axis. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -squeeze -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -() -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Squeeze out all length-1 dimensions. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -swapaxes -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(axis1, axis2) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Swap two dimensions of self. - -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -take -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(indices=, axis=None, out=None, mode='raise') -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Select elements of self along axis according to indices. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -transpose -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(permute <None>) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Rearrange shape of self according to permute. -\end_layout - -\end_inset -</cell> -</row> -</lyxtabular> - -\end_inset - - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Subsection -Array calculation -\end_layout - -\begin_layout Standard -Many of these methods take an argument named axis. - In such cases, if axis is None (the default), the array is treated as a - 1-d array and the operation is performed over the entire array. - This behavior is also the default if self is a 0-dimensional array or array - scalar. - If axis is an integer, then the operation is done over the given axis (for - each 1-d subarray that can be created along the given axis). - The parameter dtype specifies the data type over which a reduction operation - (like summing) should take place. - The default reduce data type is the same as the data type of self. - To avoid overflow, it can be useful to perform the reduction using a larger - data type. - For several methods, an optional out argument can be provided and the result - will be placed into the output array given. - The out argument must be an ndarray and have the same number of elements. - It can be of a different type in which case casting will be performed. - -\end_layout - -\begin_layout Description -max -\begin_inset LatexCommand index -name "ndarray!methods!max" - -\end_inset - - (axis=None, out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the largest value in self. - This is a better way to compute the maximum over an array, than using max(self). - The latter uses the generic sequence interface to self. - This will be slower, and will try to get an answer by comparing whole sub-array -s of self. - This will be incorrect for arrays larger than 1-d. -\end_layout - -\begin_layout Description -argmax -\begin_inset LatexCommand index -name "ndarray!methods!argmax" - -\end_inset - - (axis=None, out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the (first, 1-d) index of the largest value in self. -\end_layout - -\begin_layout Description -min -\begin_inset LatexCommand index -name "ndarray!methods!min" - -\end_inset - - (axis=None, out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the smallest value in self. - This is a better way to compute the minimum over an array, than using min(self). - The latter uses the generic sequence interface to self. - This will be slower, and will try to get an answer by comparing whole sub-array -s of self. - This will be incorrect for arrays larger than 1-d. -\end_layout - -\begin_layout Description -argmin -\begin_inset LatexCommand index -name "ndarray!methods!argmin" - -\end_inset - - (axis=None, out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the (first, 1-d) index of the smallest value in self. -\end_layout - -\begin_layout Description -ptp -\begin_inset LatexCommand index -name "ndarray!methods!ptp" - -\end_inset - - (axis=None, out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the difference of the largest to the smallest value in self. - Equivalent to self.max(axis) - self.min(axis) -\end_layout - -\begin_layout Description -clip -\begin_inset LatexCommand index -name "ndarray!methods!clip" - -\end_inset - - (min=,max=, out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a new array where any element in self less than min is set to min - and any element less than max is set to max. - Equivalent to self[self<min]=min; self[self>max]=max. -\end_layout - -\begin_layout Description -conj -\begin_inset LatexCommand index -name "ndarray!methods!conj" - -\end_inset - - (out=None) -\end_layout - -\begin_layout Description -conjugate -\begin_inset LatexCommand index -name "ndarray!methods!conjugate" - -\end_inset - - (out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the conjugate of elements of the array. -\end_layout - -\begin_layout Description -round -\begin_inset LatexCommand index -name "ndarray!methods!round" - -\end_inset - - (decimals=0, out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Round the elements of the array to the nearest decimal. - For decimals < 0, the rounding is done to the nearest tens, hundreds, etc. - Rounding of exactly the half-interval is to the nearest even integer. - This is the only difference with standard Python rounding. -\end_layout - -\begin_layout Description -trace -\begin_inset LatexCommand index -name "ndarray!methods!trace" - -\end_inset - - (offset=0, axis1=0, axis2=1, dtype=None, out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Perform a summation along each diagonal specified by offset, axis1, and - axis2. - Equivalent to diagonal(offset,axis1,axis2).sum(axis=-1, dtype=dtype) -\end_layout - -\begin_layout Description -sum -\begin_inset LatexCommand index -name "ndarray!methods!sum" - -\end_inset - - (axis=None, dtype=None, out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the sum -\begin_inset Formula \[ -\sum_{i=0}^{N-1}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]\] - -\end_inset - - where axis ':' objects are placed before the -\begin_inset Formula $i.$ -\end_inset - - -\end_layout - -\begin_layout Description -cumsum -\begin_inset LatexCommand index -name "ndarray!methods!cumsum" - -\end_inset - - (axis=None, dtype=None, out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the cumulative sum. - If ret is the return array of the same shape as -\begin_inset Formula $\textrm{self},$ -\end_inset - - then -\begin_inset Formula \[ -\textrm{ret}[\underbrace{:,\ldots,:}_{\textrm{axis}},j]=\sum_{i=0}^{j}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i].\] - -\end_inset - - -\end_layout - -\begin_layout Description -mean -\begin_inset LatexCommand index -name "ndarray!methods!mean" - -\end_inset - - (axis=None, dtype=None, out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the average value caculated as -\begin_inset Formula \[ -\frac{1}{N}\sum_{i=0}^{N-1}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]\] - -\end_inset - - where -\begin_inset Formula $N$ -\end_inset - - is self.shape[axis] and axis ':' objects are placed before the -\begin_inset Formula $i.$ -\end_inset - - The sum is done in the data-type of self unless self is an integer or Boolean - data-type and then it is done over the float data-type. - -\end_layout - -\begin_layout Description -var -\begin_inset LatexCommand index -name "ndarray!methods!var" - -\end_inset - - (axis=None, dtype=None, out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the variance of the data calculated as -\begin_inset Formula \[ -\frac{1}{N}\sum_{i=0}^{N-1}\left(\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]-\mu\right)^{2}\] - -\end_inset - - where -\begin_inset Formula $N$ -\end_inset - - is self.shape[axis] and -\begin_inset Formula $\mu$ -\end_inset - - is the mean (restored to the same number of dimensions as self with -\begin_inset Formula $\mu$ -\end_inset - - copied along the axis dimension). - This is equivalent to (self**2).mean - self.mean()**2 and ((self-self.mean())**2).m -ean(). - The value of -\begin_inset Formula $N-1$ -\end_inset - - was not chosen for normalization because while it gives an -\begin_inset Quotes eld -\end_inset - -unbiased -\begin_inset Quotes erd -\end_inset - - estimate, it is not always prudent to return unbiased estimates as they - may have larger mean-square error. - The sum is done using a float data-type if self has integer or Boolean - data-type, otherwise it is done using the same data-type as self. - -\end_layout - -\begin_layout Description -std -\begin_inset LatexCommand index -name "ndarray!methods!std" - -\end_inset - - (axis=None, dtype=None, out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the standard deviation calculated as -\begin_inset Formula \[ -\sqrt{\frac{1}{N}\sum_{i=0}^{N-1}\left(\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i]-\mu\right)^{2}}\] - -\end_inset - - where -\begin_inset Formula $N$ -\end_inset - - is self.shape[axis] and -\begin_inset Formula $\mu$ -\end_inset - - is the mean (restored to the same number of dimensions as self with -\begin_inset Formula $\mu$ -\end_inset - - copied along the axis dimension). - The sum is done using the same data-type as self unless self is an integer - or Boolean data-type and then it is done using a float data-type. - -\end_layout - -\begin_layout Description -prod -\begin_inset LatexCommand index -name "ndarray!methods!prod" - -\end_inset - - (axis=None, dtype=None, out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the product calculated as -\begin_inset Formula \[ -\prod_{i=0}^{N-1}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i].\] - -\end_inset - - -\end_layout - -\begin_layout Description -cumprod -\begin_inset LatexCommand index -name "ndarray!methods!cumprod" - -\end_inset - - (axis=None, dtype=None, out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the cumulative product so that the return array, ret, is the same - shape as self and -\begin_inset Formula \[ -\textrm{ret}[\underbrace{:,\ldots,:}_{\textrm{axis}},j]=\prod_{i=0}^{j}\textrm{self}[\underbrace{:,\ldots,:}_{\textrm{axis}},i].\] - -\end_inset - - -\end_layout - -\begin_layout Description -all -\begin_inset LatexCommand index -name "ndarray!methods!all" - -\end_inset - - (axis=None, out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return True if all entries along axis evaluate True, otherwise return False. -\end_layout - -\begin_layout Description -any -\begin_inset LatexCommand index -name "ndarray!methods!any" - -\end_inset - - (axis=None, out=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return True if any entries along axis evaluate True, otherwise return False -\begin_inset LatexCommand index -name "ndarray!methods|)" - -\end_inset - -. -\end_layout - -\begin_layout Standard -\begin_inset Float table -wide false -sideways false -status open - -\begin_layout Standard -\begin_inset Caption - -\begin_layout Standard -Array object calculation methods. - If axis is an argument, then the calculation is performed along that axis. - An axis value of None means the array is flattened before calculation proceeds. - All of these methods can take an optional out= argument which can specify - the output array to write the results into. - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -\begin_inset ERT -status collapsed - -\begin_layout Standard - - -\backslash -setlength{ -\backslash -extrarowheight}{0.5eM} -\end_layout - -\begin_layout Standard - -\end_layout - -\begin_layout Standard - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -\align center -\begin_inset Tabular -<lyxtabular version="3" rows="18" columns="3"> -<features> -<column alignment="center" valignment="top" leftline="true" width="0"> -<column alignment="center" valignment="top" leftline="true" width="30text%"> -<column alignment="center" valignment="top" leftline="true" rightline="true" width="0"> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family sans -\series bold -\size large -Method -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family sans -\series bold -\size large -Arguments -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\family sans -\series bold -\size large -Description -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -all -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(axis=None) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -true if all entries are true. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -any -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(axis=None) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -true if any entries are true. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -argmax -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(axis=None) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -index of largest value. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -argmin -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(axis=None) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -index of smallest value. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -clip -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(min=, max=) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -self[self>max]=max; self[self<min]=min -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -conj -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -() -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -complex conjugate -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -cumprod -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(axis=None, dtype=None) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -cumulative product -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -cumsum -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(axis=None, dtype=None) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -cumulative sum -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -max -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(axis=None) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -maximum of self -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -mean -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(axis=None, dtype=None) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -mean of self -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -min -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(axis=None) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -minimum of self -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -prod -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(axis=None, dtype=None) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -multiply elements of self together -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -ptp -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(axis=None) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -self.max(axis)-self.min(axis) -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -var -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(axis=None, dtype=None) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -variance of self -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -std -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(axis=None, dtype=None) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -standard deviation of self -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -sum -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(axis=None, dtype=None) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -add elements of self together -\end_layout - -\end_inset -</cell> -</row> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard - -\series bold -trace -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -(offset, axis1=0, axis2=0, dtype=None) -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -sum along a diagonal -\end_layout - -\end_inset -</cell> -</row> -</lyxtabular> - -\end_inset - - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Section -Array Special Methods -\end_layout - -\begin_layout Standard -Methods -\begin_inset LatexCommand index -name "ndarray!special methods|(" - -\end_inset - - in this chapter are not generally meant to be called directly by the user. - They are called by Python and are used to customize behavior of the ndarray - object as it interacts with the Python language and standard library. - -\end_layout - -\begin_layout Subsection -Methods for standard library functions -\end_layout - -\begin_layout Description -__copy__ -\begin_inset LatexCommand index -name "ndarray!special methods!copy" - -\end_inset - - () -\end_layout - -\begin_layout Description -\InsetSpace ~ - To allow copy.copy(a) to perform a shallow copy of an array. - Exactly the same as self.copy() (contents of object arrays are not copied). - -\end_layout - -\begin_layout Description -__deepcopy__ -\begin_inset LatexCommand index -name "ndarray!special methods!deepcopy" - -\end_inset - - (memodict) -\end_layout - -\begin_layout Description -\InsetSpace ~ - To allow copy.deepcopy(a) to perform a deep copy. - This is the same as a shallow copy unless self is an object array. - Then, after the shallow copy is made, a copy.deepcopy(item) is called for - every item in the object array. - -\end_layout - -\begin_layout Description -__reduce__ -\begin_inset LatexCommand index -name "ndarray!special methods!reduce" - -\end_inset - - () -\end_layout - -\begin_layout Description -__setstate__ -\begin_inset LatexCommand index -name "ndarray!special methods!setstate" - -\end_inset - - (shape, typestr, isfortran, data) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Pickling support for arrays is provided by these two methods. - When an array needs to be pickled, the __reduce__() method is called to - provide a 3-tuple of already-pickleable objects. - To construct a new object from the pickle, the first two elements of the - 3-tuple are used to construct a new (0-length) array of the correct type - and the last element of the 3-tuple, which is itself a 4-tuple of (shape, - typestr, isfortran, data) is passed to the __setstate__ method of the newly - created array to restore its contents. - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The reduce method returns a 3-tuple consisting of (callable, args, state) - where callable is a simple constructor function that handles subclasses - of the ndarray. - Also, args is a 3-tuple of arguments to pass to this constructor function - (type(self), (0,), self.dtypechar), and state is a 4-tuple of information - giving the object's state (self.shape, self.dtypedescr, isfortran, string_or_list -). - In this tuple, isfortran is a Bool stating whether the following flattened - data is in Fortran order or not, and string_or_list is a string formed - by self.tostring() if the data type is not object. - If the data type of self is an object array, then string_or_list is a flat - list equivalent to self.ravel().tolist(). - -\end_layout - -\begin_layout Description -\InsetSpace ~ - On load from a pickle, the pickling code uses the first two elements from - the tuple returned by reduce to construct an empty 0-dimensional subclass - of the correct type. - The last element is then passed to the __setstate__ method of the newly - created array to restore its contents. - -\end_layout - -\begin_layout Note -When data is a string, the __setstate__ method will directly use the string - memory as the array memory (new.base will point to the string). - The typestr contains enough information to decode how the memory should - be interpreted. -\end_layout - -\begin_layout Subsection -Basic customization -\end_layout - -\begin_layout Description -__new__ -\begin_inset LatexCommand index -name "ndarray!special methods!new" - -\end_inset - - (subtype, shape=, dtype=long_, buffer=None, offset=0, strides=None, order=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This method creates a new ndarray. - It is typically only used in the __new__ method of a subclass. - This method is called to construct a new array whenever the object name - is called, -\family typewriter -a=ndarray(...) -\family default -. - It supports two basic modes of array creation: -\end_layout - -\begin_layout Enumerate -a single-segment array of the specified shape and data-type from newly allocated - memory; -\end_layout - -\begin_deeper -\begin_layout Enumerate -uses shape, dtype, strides, and order arguments; others are ignored; -\end_layout - -\begin_layout Enumerate -The order argument allows specification of a Fortran-style contiguous memory - segment (order='Fortran'); -\end_layout - -\begin_layout Enumerate -If strides is given, then it specifies the new strides of the array (and - the order keyword is ignored). - The strides will be checked for consistency with the dimension size so - that steps outside of the memory won't occur. -\end_layout - -\end_deeper -\begin_layout Enumerate -an array of the given shape and data type using the provided object, buffer, - which must export the buffer interface. - -\end_layout - -\begin_deeper -\begin_layout Enumerate -all arguments can be used; -\end_layout - -\begin_layout Enumerate -strides can be given and will be checked for consistency with the shape, - data type, and available memory in buffer; -\end_layout - -\begin_layout Enumerate -order indicates whether the data buffer should be interpreted as Fortran-style - contiguous (order='Fortran') or not; -\end_layout - -\begin_layout Enumerate -offset can be used to start the array data at some offset in the buffer. - -\end_layout - -\end_deeper -\begin_layout Note -The ndarray uses the default no-op __init__ -\begin_inset LatexCommand index -name "ndarray!special methods!init" - -\end_inset - - function because the array is completely initialized after __new__ is called. -\end_layout - -\begin_layout Description -__array__ -\begin_inset LatexCommand index -name "ndarray!special methods!array" - -\end_inset - - (dtype {None}) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This is a special method that should always return an object of type ndarray. - Useful for subclasses that need to get to the ndarray object. - -\end_layout - -\begin_layout Description -__array_wrap__ -\begin_inset LatexCommand index -name "ndarray!special methods!array\\_wrap" - -\end_inset - - (arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This is a special method that always returns an object of the same Python - type as self using the array passed as an argument. - This is mainly useful for subclasses as it is an easy way to get the subclass - back from an ndarray. -\end_layout - -\begin_layout Description -__lt__ -\begin_inset LatexCommand index -name "ndarray!special methods!lt" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__le__ -\begin_inset LatexCommand index -name "ndarray!special methods!le" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__gt__ -\begin_inset LatexCommand index -name "ndarray!special methods!gt" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__ge__ -\begin_inset LatexCommand index -name "ndarray!special methods!ge" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__eq__ -\begin_inset LatexCommand index -name "ndarray!special methods!eq" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__ne__ -\begin_inset LatexCommand index -name "ndarray!special methods!ne" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Defined to support rich comparisons (<, <=, >, >=, ==, !=) on ndarrays - using universal functions. - -\end_layout - -\begin_layout Description -__str__ -\begin_inset LatexCommand index -name "ndarray!special methods!str" - -\end_inset - - () -\end_layout - -\begin_layout Description -__repr__ -\begin_inset LatexCommand index -name "ndarray!special methods!repr" - -\end_inset - - () -\end_layout - -\begin_layout Description -\InsetSpace ~ - These functions print the array when called by str(self) and repr(self) - respectively. - Array printing can be changed using set_string_function(..). - Default array printing has been borrowed from numarray whose printing code - was written by Perry Greenfield and J. - Todd Miller. - By default, arrays print such that -\end_layout - -\begin_layout Enumerate -The last axis is always printed left to right. -\end_layout - -\begin_layout Enumerate -The next-to-last axis is printed top to bottom. -\end_layout - -\begin_layout Enumerate -Remaining axes are printed top to bottom with increasing numbers of separators. -\end_layout - -\begin_layout Description -\InsetSpace ~ - Five parameters of the printing can be set using keyword arguments with - -\family typewriter -set_printoptions(...) -\family default -. - The parameters -\begin_inset LatexCommand index -name "set\\_printoptions" - -\end_inset - - can all be retrieved using -\family typewriter -get_printoptions() -\family default -. - These printing options -\begin_inset LatexCommand index -name "get\\_printoptions" - -\end_inset - - are -\end_layout - -\begin_deeper -\begin_layout Description -precision the number of digits of precision for floating point output (default - 8); -\end_layout - -\begin_layout Description -threshold total number of array elements which triggers summarization rather - than full representation (default 1000); -\end_layout - -\begin_layout Description -edgeitems number of array items in summary at beginning an end of each dimension - (default 3); -\end_layout - -\begin_layout Description -linewidth the number of characters per line for the purpose of inserting - line breaks (default 71); -\end_layout - -\begin_layout Description -suppress Boolean indicating whether or not to suppress printing of small - floating point values using scientific notation (default False). - -\end_layout - -\end_deeper -\begin_layout Description -__nonzero__ -\begin_inset LatexCommand index -name "ndarray!special methods!nonzero" - -\end_inset - - () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Truth-value testing for the array as a whole. - It is called whenever the truth value of the ndarray as a whole object - is required. - This raises an error if the number of elements in the the array is larger - than 1 because the truth value of such arrays is ambiguous. - Use .any() and .all() instead to be clear about what is meant in such cases. - If the number of elements is 0 then False is returned. - If there is one element in the array, then the truth-value of this element - is returned. -\end_layout - -\begin_layout Subsection -Container customization -\end_layout - -\begin_layout Description -__len__ -\begin_inset LatexCommand index -name "ndarray!special methods!len" - -\end_inset - - () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns self.shape[0]. - It is called in response to len(self). - Use self.size to get the total number of elements in the array. -\end_layout - -\begin_layout Description -\InsetSpace ~ - Notice that the default Python iterator for sequences is used when arrays - are used in places that expect an iterator. - This iterator returns successively self[0], self[1], ..., self[self.__len__()]. - Use self.flat to get an iterator that walks through the entire array one - element at a time. -\end_layout - -\begin_layout Description -__getitem__ -\begin_inset LatexCommand index -name "ndarray!special methods!getitem" - -\end_inset - - (key) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Called when evaluating self[key] construct. - Items from the array can be selected using this customization. - This construct has both standard and extended indexing abilities which - are explained in Section -\begin_inset LatexCommand ref -reference "sec:Array-indexing" - -\end_inset - -. - A named field can be retrieved if key is a string and fields are defined - in the dtypedescr object associated with this array. - -\end_layout - -\begin_layout Description -__setitem__ -\begin_inset LatexCommand index -name "ndarray!special methods!setitem" - -\end_inset - - (key, value) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Called when evaluating self[key]=value. - Items in the array can be set using this construct. - This construct is explained in Section -\begin_inset LatexCommand ref -reference "sec:Array-indexing" - -\end_inset - -. - A named field can be set if key is a string and fields are defined in the - dtypedescr object associated with this array. - -\end_layout - -\begin_layout Description -__getslice__ -\begin_inset LatexCommand index -name "ndarray!special methods!getslice" - -\end_inset - - (i, j) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to self.__getitem__(slice(i,j)) but defined mainly so that C - code can use the sequence interface. - Called to evaluate self[i:j] -\end_layout - -\begin_layout Description -__setslice__ -\begin_inset LatexCommand index -name "ndarray!special methods!setslice" - -\end_inset - - (i, j, value) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to self.__setitem__(slice(i,j), value) but defined mainly so - C code can use the sequence interface. - Called to evaluate self[i:j] = value. -\end_layout - -\begin_layout Description -__contains__ -\begin_inset LatexCommand index -name "ndarray!special methods!contains" - -\end_inset - - (item) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Called to determine truth value of the -\family typewriter -item in self -\family default - construct. - Returns the equivalent of (self==item).any() -\end_layout - -\begin_layout Subsection -Arithmetic customization -\end_layout - -\begin_layout Subsubsection -Binary -\end_layout - -\begin_layout Description -__add__ -\begin_inset LatexCommand index -name "ndarray!special methods!add" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__sub__ -\begin_inset LatexCommand index -name "ndarray!special methods!sub" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__mul__ -\begin_inset LatexCommand index -name "ndarray!special methods!mul" - -\end_inset - - (self, other) -\end_layout - -\begin_layout Description -__div__ -\begin_inset LatexCommand index -name "ndarray!special methods!div" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__truediv__ -\begin_inset LatexCommand index -name "ndarray!special methods!truediv" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__floordiv__ -\begin_inset LatexCommand index -name "ndarray!special methods!floordiv" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__mod__ -\begin_inset LatexCommand index -name "ndarray!special methods!mod" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__divmod__ -\begin_inset LatexCommand index -name "ndarray!special methods!divmod" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__pow__ -\begin_inset LatexCommand index -name "ndarray!special methods!pow" - -\end_inset - - (other[,modulo]) -\end_layout - -\begin_layout Description -__lshift__ -\begin_inset LatexCommand index -name "ndarray!special methods!lshift" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__rshift__ -\begin_inset LatexCommand index -name "ndarray!special methods!rshift" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__and__ -\begin_inset LatexCommand index -name "ndarray!special methods!and" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__or__ -\begin_inset LatexCommand index -name "ndarray!special methods!or" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__xor__ -\begin_inset LatexCommand index -name "ndarray!special methods!xor" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -\InsetSpace ~ - These methods are defined for ndarrays to implement the operations ( -\family typewriter -+ -\family default -, -\family typewriter -- -\family default -, -\family typewriter -* -\family default -, -\family typewriter -/, -\family default - -\family typewriter -/, -\family default - -\family typewriter -// -\family default -, -\family typewriter -% -\family default -, -\family typewriter -divmod() -\family default -, -\family typewriter -** -\family default - or -\family typewriter -pow() -\family default -, -\family typewriter -<<, -\family default - -\family typewriter ->> -\family default -, -\family typewriter -& -\family default -, -\family typewriter -^ -\family default -, -\family typewriter -| -\family default -). - This is done using calls to the corresponding universal function object - (add, subtract, multiply, divide, true_divide, floor_divide, remainder, - divide and remainder, power, left_shift, right_shift, bitwise_and, bitwise_xor, - bitwise_or). - These implement element-by-element operations for arrays that are broadcastable - to the same shape. - -\end_layout - -\begin_layout Itemize -any third argument to -\family typewriter -pow() -\family default - is silently ignored as the underlying ufunc (power) only takes two arguments. -\end_layout - -\begin_layout Itemize -the three division operators are all defined, div is active by default, - truediv is active when __future__.division is in effect. -\end_layout - -\begin_layout Note -Because it is a built-in type (written in C), the __r<op>__ special methods - are not directly defined for the ndarray. -\end_layout - -\begin_layout Subsubsection -In-place -\end_layout - -\begin_layout Description -__iadd__ -\begin_inset LatexCommand index -name "ndarray!special methods!iadd" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__isub__ -\begin_inset LatexCommand index -name "ndarray!special methods!isub" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__imul__ -\begin_inset LatexCommand index -name "ndarray!special methods!imul" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__idiv__ -\begin_inset LatexCommand index -name "ndarray!special methods!idiv" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__itruediv__ -\begin_inset LatexCommand index -name "ndarray!special methods!itruediv" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__ifloordiv__ -\begin_inset LatexCommand index -name "ndarray!special methods!ifloordiv" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__imod__ -\begin_inset LatexCommand index -name "ndarray!special methods!imod" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__ipow__ -\begin_inset LatexCommand index -name "ndarray!special methods!ipow" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__ilshift__ -\begin_inset LatexCommand index -name "ndarray!special methods!ilshift" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__irshift__ -\begin_inset LatexCommand index -name "ndarray!special methods!irshift" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__iand__ -\begin_inset LatexCommand index -name "ndarray!special methods!iand" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__ixor__ -\begin_inset LatexCommand index -name "ndarray!special methods!ixor" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -__ior__ -\begin_inset LatexCommand index -name "ndarray!special methods!ior" - -\end_inset - - (other) -\end_layout - -\begin_layout Description -\InsetSpace ~ - These methods are implemented to handle the inplace operatiors ( -\family typewriter -+= -\family default -, -\family typewriter --= -\family default -, -\family typewriter -*= -\family default -, -\family typewriter -/= -\family default -, -\family typewriter -/= -\family default -, -\family typewriter -//= -\family default -, -\family typewriter -%= -\family default -, -\family typewriter -** -\family default -=, -\family typewriter -<< -\family default -=, -\family typewriter ->>= -\family default -, -\family typewriter -&= -\family default -, -\family typewriter -^= -\family default -, -\family typewriter -|= -\family default -). - The inplace operators are implemented using the corresponding ufunc and - its ability to take an output argument (which is set as self). - Using inplace operations can save space and time and is therefore encouraged - whenever appropriate. - -\end_layout - -\begin_layout Warning -In place operations will perform the calculation using the precision decided - by the data type of the two operands, but will silently downcast the result - (if necessary) so it can fit back into the array. - Therefore, for mixed precision calculations, a <op>= B can be different - than a = a <op> B. - For example, suppose a=ones((3,3)). - Then a+=3j is different than a=a+3j While they both perform the same computatio -n, a+=3j casts the result to fit back in a, while a=a+3j re-binds the name - a to the result. -\end_layout - -\begin_layout Subsubsection -Unary operations -\end_layout - -\begin_layout Description -__neg__ -\begin_inset LatexCommand index -name "ndarray!special methods!neg" - -\end_inset - - (self) -\end_layout - -\begin_layout Description -__pos__ -\begin_inset LatexCommand index -name "ndarray!special methods!pos" - -\end_inset - - (self) -\end_layout - -\begin_layout Description -__abs__ -\begin_inset LatexCommand index -name "ndarray!special methods!abs" - -\end_inset - - (self) -\end_layout - -\begin_layout Description -__invert__ -\begin_inset LatexCommand index -name "ndarray!special methods!invert" - -\end_inset - - (self) -\end_layout - -\begin_layout Description -\InsetSpace ~ - These functions are called in response to the unary operations ( -\family typewriter -- -\family default -, -\family typewriter -+ -\family default -, -\family typewriter -abs() -\family default -, -\family typewriter -~ -\family default -). - With the exception of __pos__, these are implemented using ufuncs (negative, - absolute, invert). - The unary -\family typewriter -+ -\family default - operator, however simply calls self.copy(), and can therefore be used to - get a copy of an array. - -\end_layout - -\begin_layout Description -__complex__ -\begin_inset LatexCommand index -name "ndarray!special methods!complex" - -\end_inset - - (self) -\end_layout - -\begin_layout Description -__int__ -\begin_inset LatexCommand index -name "ndarray!special methods!int" - -\end_inset - - (self) -\end_layout - -\begin_layout Description -__long__ -\begin_inset LatexCommand index -name "ndarray!special methods!long" - -\end_inset - - (self) -\end_layout - -\begin_layout Description -__float__ -\begin_inset LatexCommand index -name "ndarray!special methods!float" - -\end_inset - - (self) -\end_layout - -\begin_layout Description -__oct__ -\begin_inset LatexCommand index -name "ndarray!special methods!oct" - -\end_inset - - (self) -\end_layout - -\begin_layout Description -__hex__ -\begin_inset LatexCommand index -name "ndarray!special methods!hex" - -\end_inset - - (self) -\end_layout - -\begin_layout Description -\InsetSpace ~ - These functions are also defined for the -\family typewriter -ndarray -\family default - object to handle the operations -\family typewriter -complex() -\family default -, -\family typewriter -int() -\family default -, -\family typewriter -long() -\family default -, -\family typewriter -float() -\family default -, -\family typewriter -oct() -\family default -, and -\family typewriter -hex() -\family default -. - They work only on arrays that have one element in them and return the appropria -te scalar -\begin_inset LatexCommand index -name "ndarray!special methods|)" - -\end_inset - -. - -\end_layout - -\begin_layout Tip -The function called to implement many arithmetic special methods for arrays - can be modified using the function set_numeric_ops. - This function is called with keyword arguments indicating which operation(s) - to replace. - A dictionary is returned containing showing the old functions. - By default, these functions are set to the corresponding ufunc. - -\end_layout - -\begin_layout Section -Array indexing -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand label -name "sec:Array-indexing" - -\end_inset - - -\end_layout - -\begin_layout Standard -More powerful array -\begin_inset LatexCommand index -name "indexing|(" - -\end_inset - - indexing -\begin_inset LatexCommand index -name "ndarray!special methods!getitem" - -\end_inset - - was an important extension introduced by numarray, and was therefore an - important part of the development of NumPy. - In particular, the desire to select arbitrary elements based on their position - in the array, and according to a mask was desirable. - -\end_layout - -\begin_layout Standard -There are two kinds of indexing available using the -\family typewriter -X[obj] -\family default - syntax: basic slicing, and advanced indexing -\begin_inset LatexCommand index -name "ndarray!special methods!setitem" - -\end_inset - -. - For the description of this syntax given below, X is the array to-be-sliced - and obj is the -\emph on -selection -\emph default - object. - Furthermore, define -\begin_inset Formula $N\equiv$ -\end_inset - -X.ndim. - These two methods of slicing have different behavior and are triggered - depending on obj. - Adding additional functionality yet remaining compatible with old uses - of slicing complicated the rules a little. - Hopefully, after studying this section, you will have a firm grasp of what - kind of selection will be initiated depending on the selection object. -\end_layout - -\begin_layout Tip -in Python X[(exp1, exp2, ..., expN)] is equivalent to X[exp1, exp2, ..., expN] - as the latter is just syntactic sugar for the former. -\end_layout - -\begin_layout Subsection -Basic Slicing -\end_layout - -\begin_layout Standard -Basic slicing -\begin_inset LatexCommand index -name "ndarray!special methods!getslice" - -\end_inset - - extends Python's basic concept of slicing -\begin_inset LatexCommand index -name "ndarray!special methods!setslice" - -\end_inset - - to N dimensions. - Basic slicing occurs when obj is a slice object (constructed by start:stop:step - notation inside of brackets), an integer, or a tuple of slice objects and - integers. - Ellipsis and newaxis objects can be interspersed with these as well. - In order to remain backward compatible with a common usage in Numeric, - basic slicing is also initiated if the selection object is any sequence - (such as a list) containing slice objects, the ellipsis -\begin_inset LatexCommand index -name "ellipsis" - -\end_inset - - object, or the newaxis -\begin_inset LatexCommand index -name "newaxis" - -\end_inset - - object, but no integer arrays or other embedded sequences. - -\end_layout - -\begin_layout Standard -The standard rules of sequence slicing apply to basic slicing on a per-dimension - basis (including using a step index). - Some useful concepts to remember include: -\end_layout - -\begin_layout Itemize -The basic slice syntax is ' -\begin_inset Formula $i:j:k$ -\end_inset - -' where -\begin_inset Formula $i$ -\end_inset - - is the starting index, -\begin_inset Formula $j$ -\end_inset - - is the stopping index, and -\begin_inset Formula $k$ -\end_inset - - is the step ( -\begin_inset Formula $k\neq0$ -\end_inset - -). - This selects the -\begin_inset Formula $m$ -\end_inset - - elements (in the corresponding dimension) with index values -\begin_inset Formula $i,\, i+k,\,\ldots,\, i+(m-1)k$ -\end_inset - - where -\begin_inset Formula $m=q+(r\neq0)$ -\end_inset - - where -\begin_inset Formula $q$ -\end_inset - - and -\begin_inset Formula $r$ -\end_inset - - are the quotient and remainder obtained by dividing -\begin_inset Formula $j-i$ -\end_inset - - by -\begin_inset Formula $k$ -\end_inset - -: -\begin_inset Formula $j-i=qk+r$ -\end_inset - -, so that -\begin_inset Formula $i+\left(m-1\right)k<j.$ -\end_inset - - -\end_layout - -\begin_layout Itemize -Assume -\begin_inset Formula $n$ -\end_inset - - is the number of elements in the dimension being sliced. - Then, if -\begin_inset Formula $i$ -\end_inset - - is not given it defaults to 0 for -\begin_inset Formula $k>0$ -\end_inset - - and -\begin_inset Formula $n$ -\end_inset - - for -\begin_inset Formula $k<0$ -\end_inset - -. - If -\begin_inset Formula $j$ -\end_inset - - is not given it defaults to -\begin_inset Formula $n$ -\end_inset - - for -\begin_inset Formula $k>0$ -\end_inset - - and -\begin_inset Formula $-1$ -\end_inset - - for -\begin_inset Formula $k<0$ -\end_inset - -. - If -\begin_inset Formula $k$ -\end_inset - - is not given it defaults to 1. - Note that '::' is the same as ':' and means select all indices along this - axis. - -\end_layout - -\begin_layout Itemize -If the number of objects in the selection tuple is less than -\begin_inset Formula $N$ -\end_inset - -, then ':' is assumed for any remaining dimensions. -\end_layout - -\begin_layout Itemize -Ellipsis expand to the number of ':' objects needed to make a selection - tuple of the same length as X.ndim. - Only one ellipsis is expanded, any others are interpreted as more ':' -\end_layout - -\begin_layout Itemize -Each newaxis object in the selection tuple serves to expand the dimensions - of the resulting selection by one unit-length dimension. - The added dimension is the position of the newaxis object in the selection - tuple. - -\end_layout - -\begin_layout Itemize -An integer, -\begin_inset Formula $i$ -\end_inset - -, returns the same values as -\begin_inset Formula $i:i+1$ -\end_inset - - -\series bold -except -\series default - the dimensionality of the returned object is reduced by 1. - In particular, a selection tuple with the -\begin_inset Formula $p^{\textrm{th}}$ -\end_inset - - element an integer (and all other entries ':') returns the corresponding - sub-array with dimension -\begin_inset Formula $N-1$ -\end_inset - -. - If -\begin_inset Formula $N=1,$ -\end_inset - - then the returned object is an Array Scalar. - These objects are explained in Chapter -\begin_inset LatexCommand ref -reference "cha:Scalar-objects" - -\end_inset - -. -\end_layout - -\begin_layout Itemize -If the selection tuple has all entries ':' except the -\begin_inset Formula $p^{\textrm{th}}$ -\end_inset - - entry which is a slice object -\begin_inset Formula $i:j:k$ -\end_inset - -, then the returned array has dimension -\begin_inset Formula $N$ -\end_inset - - formed by concatenating the sub-arrays returned by integer indexing of - elements -\begin_inset Formula $i$ -\end_inset - -, -\begin_inset Formula $i+k$ -\end_inset - -, -\begin_inset Formula $i+(m-1)k<j$ -\end_inset - -, -\end_layout - -\begin_layout Itemize -Basic slicing with more than one non-':' entry in the slicing tuple, acts - like repeated application of slicing using a single non-':' entry, where - the non-':' entries are successively taken (with all other non-':' entries - replaced by ':'). - Thus, X[ind1,...,ind2,:] acts like X[ind1][...,ind2,:] under basic slicing. - Note this is NOT true for advanced slicing. - -\end_layout - -\begin_layout Itemize -You may use slicing to set values in the array, but (unlike lists) you can - never grow the array. - The size of the value to be set in X[obj] = value must be (broadcastable) - to the same shape as X[obj]. - -\end_layout - -\begin_layout Standard -Basic slicing always returns another -\emph on -view -\begin_inset LatexCommand index -name "ndarray!view" - -\end_inset - - -\emph default - of the array. - In other words, the returned array from a basic slicing operation uses - the same data as the original array. - This can be confusing at first, but it is faster and can save memory. - A copy can always be obtained if needed using the unary + operator (which - has lower precedence than slicing) or the .copy() method. - -\end_layout - -\begin_layout Tip -Remember that a slicing tuple can always be constructed as obj and used - in the x[obj] notation. - Slice objects can be used in the construction in place of the [start:stop:step] - notation. - For example, -\family typewriter -x[1:10:5,::-1] -\family default - can also be implemented as -\family typewriter -obj=(slice(1,10,5), slice(None,None,-1)); X[obj] -\family default -. - This can be useful for constructing generic code that works on arrays of - arbitrary dimension. -\end_layout - -\begin_layout Subsection -Advanced selection -\end_layout - -\begin_layout Standard -Advanced selection is triggered when the selection object, obj, is a non-tuple - sequence object, an ndarray (of data type integer or bool), or a tuple - with at least one sequence object or ndarray (of data type integer or bool). - There are two types of advanced indexing: integer and Boolean. - Advanced selection always returns a copy of the data (contrast with basic - slicing that returns a view). - -\end_layout - -\begin_layout Subsubsection -Integer -\end_layout - -\begin_layout Standard -Integer indexing allows selection of arbitrary items in the array based - on their -\begin_inset Formula $N$ -\end_inset - --dimensional index. - This kind of selection occurs when advanced selection is triggered and - the selection object is not an array of data type bool. - For the discussion below, when the selection object is not a tuple, it - will be referred to as if it had been promoted to a 1-tuple, which will - be called the selection tuple. - The rules of advanced integer-style indexing are: -\end_layout - -\begin_layout Itemize -if the length of the selection tuple is larger than -\begin_inset Formula $N$ -\end_inset - -(=X.ndim) an error is raised. -\end_layout - -\begin_layout Itemize -all sequences and scalars in the selection tuple are converted to intp indexing - arrays. - -\end_layout - -\begin_layout Itemize -all selection tuple objects must be convertible to intp arrays, or slice - objects, or the Ellipsis (...) object. -\end_layout - -\begin_layout Itemize -Exactly one Ellipsis object will be expanded, any other Ellipsis objects - will be treated as full slice (':') objects. - The Ellipsis object is replaced with as many full slice (':') objects as - needed to make the length of the selection tuple -\begin_inset Formula $N$ -\end_inset - -. - -\end_layout - -\begin_layout Itemize -If the selection tuple is smaller than -\begin_inset Formula $N$ -\end_inset - -, then as many ':' objects as needed are added to the end of the selection - tuple so that the modified selection tuple has length -\begin_inset Formula $N$ -\end_inset - -. -\end_layout - -\begin_layout Itemize -The shape of all the integer indexing arrays must be broadcastable to the - same shape. - Arrays are broadcastable if any of the following are satisfied -\end_layout - -\begin_deeper -\begin_layout Enumerate -The arrays all have exactly the same shape. -\end_layout - -\begin_layout Enumerate -The arrays all have the same number of dimensions and the length of each - dimensions is either a common length or 1. -\end_layout - -\begin_layout Enumerate -The arrays that have too few dimensions can have their shapes pre-pended - with a dimension of length 1 to satisfy property 2. - -\end_layout - -\end_deeper -\begin_layout Itemize -The shape of the output (or the needed shape of the object to be used for - setting) is the broadcasted shape. - -\end_layout - -\begin_deeper -\begin_layout Description -Example: If a.shape is (5,1), b.shape is (1,6), c.shape is (6,) and d.shape - is () so that d is a scalar, then a, b, c, and d are all broadcastable - to dimension (5,6). - The array -\begin_inset Quotes eld -\end_inset - -a -\begin_inset Quotes erd -\end_inset - - acts like a (5,6) array where a[:,0] is broadcast to the other columns, - -\begin_inset Quotes eld -\end_inset - -b -\begin_inset Quotes erd -\end_inset - - acts like a (5,6) array where b[0,:] is broadcast to the other rows, -\begin_inset Quotes eld -\end_inset - -c -\begin_inset Quotes erd -\end_inset - - acts like a (1,6) array and therefore a (5,6) where c[:] is broadcast to - every row, and finally -\begin_inset Quotes eld -\end_inset - -d -\begin_inset Quotes erd -\end_inset - - acts like a (5,6) array where the single values is repeated. - -\end_layout - -\end_deeper -\begin_layout Itemize -After expanding any ellipses and filling out any missing (':') objects in - the selection tuple, then let -\begin_inset Formula $N_{t}$ -\end_inset - - be the number of indexing arrays, and let -\begin_inset Formula $N_{s}=N-N_{t}$ -\end_inset - - be the number of slice objects. - Note that -\begin_inset Formula $N_{t}>0$ -\end_inset - - (or we wouldn't be doing advanced integer indexing). - -\end_layout - -\begin_layout Itemize -If -\begin_inset Formula $N_{s}=0$ -\end_inset - - then the -\begin_inset Formula $M$ -\end_inset - --dimensional result is constructed by varying the index tuple -\begin_inset Formula $\left(i_{1},\ldots,i_{M}\right)$ -\end_inset - - over the range of the result shape and for each value of the index tuple - setting: -\begin_inset Formula \[ -\textrm{result[$i_{1},\ldots,i_{M}$]=X[ind$_{1}$[$i_{1},\ldots i_{M}$], ind$_{2}$[$i_{1},\ldots,i_{M}$], \, etc.,\, ind$_{N}$[$i_{1},\ldots,i_{M}$]}.\] - -\end_inset - - -\end_layout - -\begin_deeper -\begin_layout Description -Example: Suppose the shape of the broadcasted indexing arrays is 3-dimensional - and -\begin_inset Formula $N$ -\end_inset - - is 2. - Then the result is found by letting -\begin_inset Formula $i,j,k$ -\end_inset - - run over the shape found by broadcasting -\begin_inset Formula $\textrm{ind}_{1},$ -\end_inset - - and -\begin_inset Formula $\textrm{ind}_{2},$ -\end_inset - -and for each -\begin_inset Formula $i,j,k$ -\end_inset - - setting result[ -\begin_inset Formula $i,j,k$ -\end_inset - -] = X[ -\begin_inset Formula $\textrm{ind}_{1}[i,j,k]$ -\end_inset - -, -\begin_inset Formula $\textrm{ind}_{2}[i,j,k]$ -\end_inset - -]. - -\end_layout - -\end_deeper -\begin_layout Itemize -If -\begin_inset Formula $N_{s}>0$ -\end_inset - -, then partial indexing is done. - This can be somewhat mind-boggling to understand, but if you think in terms - of the shapes of the arrays involved, it can be easier to grasp what happens. - In simple cases ( -\emph on -i.e. - -\emph default - one indexing array and -\begin_inset Formula $N-1$ -\end_inset - - slice objects) it does exactly what you would expect (concatenation of - repeated application of basic slicing). - The rule for partial indexing is that the shape of the result (or the interpret -ed shape of the object to be used in setting) is the shape of X with the - indexed subspace replaced with the broadcasted indexing subspace. - If the index subspaces are right next to each other, then the broadcasted - indexing space directly replaces all of the indexed subspaces in X. - If the indexing subspaces are separated (by slice objects), then the broadcaste -d indexing space is first, followed by the sliced subspace of X. - -\end_layout - -\begin_deeper -\begin_layout Description -Example\InsetSpace ~ -1: Suppose X.shape is (10,20,30) and ind is a (2,3,4) indexing intp - array, then result=X[...,ind,:] has shape (10,2,3,4,30) because the (20,)-shaped - subspace has been replaced with a (2,3,4)-shaped broadcasted indexing subspace. - If we let -\begin_inset Formula $i,j,k$ -\end_inset - - loop over the (2,3,4)-shaped subspace then result[...,i,j,k,:] = X[...,ind[i,j,k],:]. - This example produces the same result as X.take(ind,axis=-2). - -\end_layout - -\begin_layout Description -Example\InsetSpace ~ -2: Now let X.shape be (10,20,30,40,50) and suppose -\begin_inset Formula $\textrm{ind}_{1}$ -\end_inset - - and -\begin_inset Formula $\textrm{ind}_{2}$ -\end_inset - - are broadcastable to the shape (2,3,4). - Then X[:,ind -\begin_inset Formula $_{1}$ -\end_inset - -,ind -\begin_inset Formula $_{2}$ -\end_inset - -] has shape (10,2,3,4,40,50) because the (20,30)-shaped subspace from X - has been replaced with the (2,3,4) subspace from the indices. - However, X[:,ind -\begin_inset Formula $_{1}$ -\end_inset - -,:,ind -\begin_inset Formula $_{2}$ -\end_inset - -,:] has shape (2,3,4,10,30,50) because there is no unambiguous place to - drop in the indexing subspace, thus it is tacked-on to the beginning. - It is always possible to use .transpose() to move the sups pace anywhere - desired. - This example cannot be replicated using take. - -\end_layout - -\end_deeper -\begin_layout Subsubsection -Boolean -\end_layout - -\begin_layout Standard -This advanced selection occurs when obj is an array object of Boolean type - (such as may be returned from comparison operators). - It is always equivalent to (but faster than) X[obj.nonzero()] where as described - above obj.nonzero() returns a tuple (of length obj.ndim) of integer index - arrays showing the True elements of obj. - -\end_layout - -\begin_layout Standard -The special case when obj.ndim == X.ndim is worth mentioning. - In this case X[obj] returns a 1-dimensional array filled with the elements - of X corresponding to the True values of obj. - It The search order will be C-style (last index varies the fastest). - If obj has True values at entries that are outside of the bounds of X, - then an index error will be raised. -\end_layout - -\begin_layout Standard -You can also use Boolean arrays as element of the selection tuple. - In such instances, they will always be interpreted as nonzero(obj) and - the equivalent integer indexing will be done. - In general you can think of indexing with Boolean arrays as indexing with - nonzero(<Boolean>). -\end_layout - -\begin_layout Warning -the definition of advanced selection means that X[(1,2,3),] is fundamentally - different than X[(1,2,3)]. - The latter is equivalent to X[1,2,3] which will trigger basic selection - while the former will trigger advanced selection. - Be sure to understand why this is True. - You should also recognize that x[[1,2,3]] will trigger advanced selection, - but X[[1,2,slice(None)]] will trigger basic selection. -\end_layout - -\begin_layout Subsection -Flat Iterator indexing -\end_layout - -\begin_layout Standard -As mentioned previously, X.flat returns an iterator that will iterate over - the entire array (in C-contiguous style with the last index varying the - fastest). - This iterator object can also be indexed using basic slicing or advanced - indexing as long as the selection object is not a tuple. - This should be clear from the fact that X.flat is a 1-dimensional view. - X.flat can be used for integer indexing using 1-dimensional C-style-flat - indices. - The shape of any returned array is therefore the shape of the integer indexing -\begin_inset LatexCommand index -name "indexing|)" - -\end_inset - - object -\begin_inset LatexCommand index -name "ndarray|)" - -\end_inset - -. - -\end_layout - -\begin_layout Chapter -Basic Routines -\end_layout - -\begin_layout Quotation -Do not pray for tasks equal to your powers; pray for powers equal to your - tasks. - Then the doing of your work shall be no miracle, but you shall be the miracle. -\end_layout - -\begin_layout Right Address ---- -\emph on -Phillips Brooks -\end_layout - -\begin_layout Quote -Education isn't how much you have committed to memory, or even how much - you know. - It's being able to differentiate between what you do know and what you - don't. -\end_layout - -\begin_layout Right Address ---- -\emph on -Anatole France -\end_layout - -\begin_layout Section -Creating arrays -\end_layout - -\begin_layout Description -array -\begin_inset LatexCommand index -name "array" - -\end_inset - - (object=, dtype=None, copy=True, order=None, subok=False, ndmin=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Create a new ndarray of data type, dtype (or determined from object if - dtype is None). - The shape of the new array will be determined from object. - If copy is True, then ensure a copy of the object is made. - If copy is False, then the returned object is a copy of the array only - if dtype is not equivalent to the data type of object. - If order is 'Fortran' then the resulting array will be in Fortran order, - otherwise it is in C order. - If subok (subclasses are O.K.) is True then pass through subclasses of the - array object if possible. - If subok is False then only ndarray objects may be returned. - The ndmin parameter specifies that the returned array must have at least - the given number of dimensions. - -\end_layout - -\begin_layout Description -asarray -\begin_inset LatexCommand index -name "asarray" - -\end_inset - - (object=, dtype=None, order=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Exactly the same as array(...) except the default copy argument is False, - and subok is always False. - Using this function always returns the base class ndarray. - -\end_layout - -\begin_layout Description -asanyarray -\begin_inset LatexCommand index -name "asanyarray" - -\end_inset - - (object, dtype=None, order=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Thin wrapper around array(...) with subok=1. - You should use this routine if you are only making use of the array attributes, - and believe the calculations that will follow would work with any subclass - of the array. - Use of this routine increases the chance that array subclasses will interact - seamlessly with your function --- returning the same subclasses. - -\end_layout - -\begin_layout Description -require -\begin_inset LatexCommand index -name "require" - -\end_inset - - (object, dtype=None, requirements=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Require a Python object to be an ndarray (or a sub-class) of the given - data-type if it can be cast safely, otherwise raise an error. - The requirements, if given, are a sequence containing the requested combination - of the flags 'C_CONTIGUOUS' ('C'), 'F_CONTIGUOUS' ('F'), 'ALIGNED' ('A'), - 'WRITEABLE' ('W'), 'OWNDATA' ('O'), and the special directive 'ENSUREARRAY' - ('E'). - These strings dictate which flags should be set on the return array (note - only one of 'F_CONTIGUOUS' or 'C_CONTIGUOUS' should be used and 'F_CONTIGUOUS' - over-rides 'C_CONTIGUOUS'). - The special directive 'ENSUREARRAY' makes sure that a base-class ndarray - is returned instead of allowing sub-classes to pass through. - This function is particularly useful in a Python interface to C-code (say - called using ctypes -\begin_inset LatexCommand index -name "ctypes" - -\end_inset - -). - -\end_layout - -\begin_layout Description -arange -\begin_inset LatexCommand index -name "arange" - -\end_inset - - (start=, stop=None, step=1, dtype=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Function similar to Python's built-in range() function except it returns - an ndarray object. - Return a 1-d array of data type, dtype (or determined from the start, stop, - and step objects if None), that starts at start, ends -\emph on -before -\emph default - stop and is incremented by step. - The returned array has length -\begin_inset Formula $n$ -\end_inset - - where -\begin_inset Formula \[ -n=\left\lceil \frac{\textrm{stop}-\textrm{start}}{\textrm{step}}\right\rceil \] - -\end_inset - - with element -\begin_inset Formula $i$ -\end_inset - - equal to -\begin_inset Formula $\textrm{start}+i\cdot\textrm{step}.$ -\end_inset - - If stop is None, then the first argument is interpreted as stop and start - is 0. - -\end_layout - -\begin_layout Note -By definition of the ceiling function (denoted by -\begin_inset Formula $\left\lceil x\right\rceil $ -\end_inset - -), we know that -\begin_inset Formula $x\leq\left\lceil x\right\rceil <x+1$ -\end_inset - -, therefore this definition of the length of arange guarantees that -\begin_inset Formula $\textrm{start}+n\cdot\textrm{step}\geq\textrm{stop}$ -\end_inset - - as well as -\begin_inset Formula $\textrm{start}+(n-1)\cdot\textrm{step}<\textrm{stop}$ -\end_inset - -. - -\end_layout - -\begin_layout Description -isfortran -\begin_inset LatexCommand index -name "isfortran" - -\end_inset - - (arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to -\family typewriter -arr.flags.fnc -\family default - and therefore returns True only if arr is Fortran-contiguous but not also - C-contiguous. -\end_layout - -\begin_layout Description -empty -\begin_inset LatexCommand index -name "empty" - -\end_inset - - (shape=, dtype=int, order='C') -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an uninitialized array of data type, dtype, and given shape. - The memory layout defaults to C-style contiguous, but can be made Fortran-style - contiguous with a 'Fortran' order keyword. -\end_layout - -\begin_layout Description -empty_like -\begin_inset LatexCommand index -name "empty\\_like" - -\end_inset - - (arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Syntactic sugar for empty(a.shape, a.dtype, isfortran(arr)) -\end_layout - -\begin_layout Description -zeros -\begin_inset LatexCommand index -name "zeros" - -\end_inset - - (shape=, dtype=int, order='C') -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an array of data type dtype and given shape filled with zeros. - The memory layout may be altered from the default C-style contiguous with - the order keyword. -\end_layout - -\begin_layout Description -zeros_like -\begin_inset LatexCommand index -name "zeros\\_like" - -\end_inset - - (arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Syntactic sugar for zeros(a.shape, a.dtype, isfortran(arr)) -\end_layout - -\begin_layout Description -ones -\begin_inset LatexCommand index -name "ones" - -\end_inset - - (shape=, dtype=int, order='C') -\end_layout - -\begin_layout Description -\InsetSpace ~ - Syntactic sugar for a = zeros(shape, dtype, order); a+= 1. - -\end_layout - -\begin_layout Description -fromstring -\begin_inset LatexCommand index -name "fromstring" - -\end_inset - - (string=,dtype=int, count=-1, sep='') -\end_layout - -\begin_layout Description -\InsetSpace ~ - If sep is '', then return a new 1-d array with data-type descriptor given - by dtype and with memory initialized (copied) from the raw binary data - in string. - If count is non-negative, the new array will have count elements (with - a -\family typewriter -ValueError -\family default - raised if count requires more data than the string offers), otherwise the - size of the string must be a multiple of the itemsize implied by dtype, - and count will be the length of the string divided by the itemsize. - -\end_layout - -\begin_layout Description -\InsetSpace ~ - If sep is not '', then interpret the string in ASCII mode with the provided - separator and convert the string to an array of numbers. - Any additional white-space will be ignored. -\end_layout - -\begin_layout Description -fromfile -\begin_inset LatexCommand index -name "fromfile" - -\end_inset - - (file=, dtype=int, count=-1, sep='') -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a 1-d array of data type, dtype, from a file (open file object or - string with the name of a file to read). - The file will be read in binary mode if sep is the empty string. - Otherwise, the file will be read in text mode with sep providing the separator - string between the entries. - If count is -1, then the size will be determined from the file, otherwise, - up to count items will be read from the file. - If fewer than count items are read, then a RunTimeWarning is issued indicating - the number of items read. -\end_layout - -\begin_layout Description -frombuffer -\begin_inset LatexCommand index -name "frombuffer" - -\end_inset - - (buffer, dtype=intp, count=-1, offset=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Very similar to (binary-mode) fromstring in interpretation of the arguments, - except buffer can be any object exposing the buffer interface (or any object - with a __buffer__ attribute that returns a buffer exposing the buffer protocol). - The new array shares memory with the buffer object. - The new array will be read-only if the buffer does not expose a writeable - buffer. - -\end_layout - -\begin_layout Description -fromiter -\begin_inset LatexCommand index -name "fromiter" - -\end_inset - - (iterator_or_generator, dtype=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct an array from an iterator or a generator. - Only handles 1-dimensional cases. - By default the data-type is determined from the objects returned from the - iterator. - -\end_layout - -\begin_layout Description -load -\begin_inset LatexCommand index -name "load" - -\end_inset - - (file) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Load a NumPy binary file (.npy), a NumPy binary zipfile (.npz), or a pickled - Python object from an open file. - If file is a string, then open a file with that name first. - Which kind of file should be loaded is determined by the magic bytes at - the front of the file (not by filename extension). - See -\shape italic -save -\shape default - and -\shape italic -savez -\shape default - for functions which write .npy and .npz files from NumPy arrays. - If file is a binary zipfile, then an instance of NpzObj is returned. - This object is a simple wrapper around the zip-file which allows extraction - of the arrays stored within it. - The .files attribute of the NpzObj returns a list of all arrays in the archive. - These arrays are accessible through a dictionary-like interface (obj['name']) - or through attribute lookup through the .f attribute of the returned object - (obj.f.name). - If the file is a NumPy binary file (.npy), then the array itself is returned - from this function. - If the file contains a pickled object, then that object is returned. - -\end_layout - -\begin_layout Description -loads -\begin_inset LatexCommand index -name "loads" - -\end_inset - - (str) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Load a pickled array from a string. - Equivalent to cPickle.loads(str). - This function will likely be deprecated in the future. - Use cPickle instead. -\end_layout - -\begin_layout Description -save -\begin_inset LatexCommand index -name "save" - -\end_inset - - (file, arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Save the array into a file which can be a string or an open file-like object. - If the file is given as a string, then it will have .npy appended if it - does not already end with that extension. - The .npy file format is NumPy-specific and is documented in the numpy.lib.format - module. - It only stores a single array. - -\end_layout - -\begin_layout Description -savez -\begin_inset LatexCommand index -name "savez" - -\end_inset - - (file, *args, **kwds) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Save a sequence of arrays into a NumPy binary zipfile (.npz). - An .npz file is a regular zip-file containing multiple .npy files. - If keywords are given, then the keyword names are used as filenames (with - the .npy extension added) in the zip-file with the corresponding values - being converted to arrays and stored in the specified filename. - Any non-keyword arguments that are passed in results in the names arr_0, - arr_1, etc. - being used in the zip-file (if a keyword by one of those names also exists, - then a ValueError is raised). - -\end_layout - -\begin_layout Description -loadtxt -\end_layout - -\begin_layout Description -savetxt -\end_layout - -\begin_layout Description -DataSource -\end_layout - -\begin_layout Description -indices -\begin_inset LatexCommand index -name "indices" - -\end_inset - - (dimensions, dtype=intp) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an array of dtype representing -\begin_inset Formula $n$ -\end_inset - -(=len(dimensions)) grids of indices each with variation in a single direction. - The returned array has shape ( -\begin_inset Formula $n$ -\end_inset - -,)+dimensions. - Compare with mgrid. - -\end_layout - -\begin_layout MyCode ->>> indices((2,3)) -\newline -array([[[0, 0, 0], -\newline - [1, 1, 1]], -\newline - -\newline - [[0, 1, 2], -\newline - - [0, 1, 2]]]) -\end_layout - -\begin_layout Description -fromfunction -\begin_inset LatexCommand index -name "fromfunction" - -\end_inset - - (function, dimensions, **kwargs) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct an array from a function called on a tuple of index grids. - The function should be able to take array arguments and process them like - ufuncs (use vectorize if it doesn't). - The function should accept as many arguments as there are dimensions which - is a sequence of numbers indicating the length of the desired output for - each axis. - Keyword arguments to function may also be passed in as keywords to fromfunction. -\end_layout - -\begin_layout MyCode ->>> print fromfunction(lambda i,j: i+j, (2,3)) -\newline -[[ 0. - 1. - 2.] -\newline - [ 1. - 2. - 3.]] -\end_layout - -\begin_layout Description -identity -\begin_inset LatexCommand index -name "identity" - -\end_inset - - (n, dtype=intp) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a 2-d array of shape (n,n) and data type, dtype with ones along - the main diagonal. - -\end_layout - -\begin_layout Description -where -\begin_inset LatexCommand index -name "where" - -\end_inset - - (condition[, x, y]) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns an array shaped like condition, that has the elements of x and - y respectively where condition is respectively true or false. - If x and y are not given, then it is equivalent to nonzero(condition). -\end_layout - -\begin_layout Description -flatnonzero -\begin_inset LatexCommand index -name "flatnonzero" - -\end_inset - - (arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return indices that are non-zero in a flattened version of arr. - Equivalent to a.ravel().nonzero()[0]. -\end_layout - -\begin_layout Description -putmask -\begin_inset LatexCommand index -name "putmask" - -\end_inset - - (arr=, mask=, values=) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Performs the equivalent of -\end_layout - -\begin_layout LyX-Code -for n, obj in enumerate( -\series bold -mask -\series default -.flat): -\end_layout - -\begin_layout LyX-Code - if obj: -\end_layout - -\begin_layout LyX-Code - self.flat[n] = -\series bold -values -\series default -[n] -\end_layout - -\begin_layout Description -\InsetSpace ~ - The values array is repeated if it is too short. - In particular, this means that indexing on the values array is modular - it's length, which might be surprising you are expecting putmask to work - the same as arr[mask]=values. -\end_layout - -\begin_layout Description -lexsort -\begin_inset LatexCommand index -name "lexsort" - -\end_inset - - (keys=, axis=-1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an array of indices similar to argsort except sorting is done using - all of the provided keys. - First a sort is computed using key[0], then the indices are further altered - by sorting on key[1]. - This is repeated until sorting has been performed on all of the keys. - This is a useful function for multiple-field sorting. -\end_layout - -\begin_layout MyCode ->>> a = [1,2,1,3,1,5]; b = [0,4,5,6,2,3] -\newline ->>> ind = lexsort((b,a)) -\newline ->>> print - take(a,ind) -\newline -[1 1 1 2 3 5] -\newline ->>> print take(b,ind) -\newline -[0 2 5 4 6 3] -\end_layout - -\begin_layout Description -\InsetSpace ~ - Notice the order the keys had to be used in order to get a lexicographical - sorting order. - To clarify, suppose three equal-length sequences are fields of an underlying - data-type: (f1,f2,f3). - If we want to sort first on f1 and then on f2 and then on f3, the indices - that would accomplish that sort are obtained as lexsort((f3,f2,f1)). -\end_layout - -\begin_layout Section -Operations on two or more arrays -\end_layout - -\begin_layout Description -concatenate -\begin_inset LatexCommand index -name "concatenate" - -\end_inset - - (seq=, axis=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct a new array from elements of the sequence object seq concatenated - along the given axis. - The elements of the sequence object must have compatible types and be the - same shape. - If axis is None, then flatten each element of seq before concatenating - together to construct a 1-d array. -\end_layout - -\begin_layout Description -correlate -\begin_inset LatexCommand index -name "correlate" - -\end_inset - - (x, y, mode='valid') -\end_layout - -\begin_layout Description -\InsetSpace ~ - Compute the 1-d cross correlation of x and y keeping portions determined - by mode which may be 'valid' (0), 'same' (1), or 'full' (2). - The 'full' cross-correlation between two 1-d arrays is computed as -\begin_inset Formula \[ -z\left[n\right]=\sum_{i=\max\left(n-M,0\right)}^{\min\left(n,K\right)}x\left[i\right]y\left[n+i\right],\] - -\end_inset - -for -\begin_inset Formula $n=0\ldots K+M$ -\end_inset - - where -\begin_inset Formula $K$ -\end_inset - -=len( -\begin_inset Formula $x$ -\end_inset - -)-1 and -\begin_inset Formula $M$ -\end_inset - -=len( -\begin_inset Formula $y$ -\end_inset - -)-1, and we assume -\begin_inset Formula $K\geq M$ -\end_inset - - (without loss of generality because we can interchange the roles of -\begin_inset Formula $x$ -\end_inset - - and -\begin_inset Formula $y$ -\end_inset - - without effect). - For this formula to work, we assume that -\begin_inset Formula $x[i]=0$ -\end_inset - - when -\begin_inset Formula $i\notin\left[0,K-1\right]$ -\end_inset - - and -\begin_inset Formula $y[j]=0$ -\end_inset - - when -\begin_inset Formula $j\neq[0,M-1]$ -\end_inset - -. - -\end_layout - -\begin_layout Description -\InsetSpace ~ - If mode is 'same' then only the -\begin_inset Formula $K$ -\end_inset - - middle values are returned starting at -\begin_inset Formula $n=\left\lfloor \frac{M-1}{2}\right\rfloor $ -\end_inset - -. - If the flag has a value of 'valid' then only the middle -\begin_inset Formula $K-M+1=\left(K+1\right)-\left(M+1\right)+1$ -\end_inset - - output values are returned starting at -\begin_inset Formula $n=M.$ -\end_inset - - -\end_layout - -\begin_layout Description -convolve -\begin_inset LatexCommand index -name "convolve" - -\end_inset - - (x, y, mode='valid') -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convolution is very similar to correlation except it is defined with one - sequence reversed: -\begin_inset Formula \[ -z\left[n\right]=\sum_{i}x[i]y[n-i].\] - -\end_inset - - The mode keyword has the same effect as it does for correlation. - Convolution ('full') between two 1-d arrays implements polynomial multiplicatio -n where the array entries are viewed as coefficients for polynomials. -\end_layout - -\begin_deeper -\begin_layout Description -Example: Consider that -\begin_inset Formula $(x^{3}+4x^{2}+2)$ -\end_inset - - -\begin_inset Formula $\left(x^{4}+3x+1\right)$ -\end_inset - -= -\begin_inset Formula $x^{7}+4x^{6}+5x^{4}+13x^{3}+4x^{2}+6x+2.$ -\end_inset - - This can be determined by using the code -\family typewriter -convolve([1,4,0,2], [1,0,0,3,1]) -\family default - which returns -\family typewriter -[1,4,0,5,13,4,6,2]. - -\family default - Notice the one-to-one alignment between the elements of the arrays and - the coefficients on powers of -\begin_inset Formula $x$ -\end_inset - - in the polynomial. - -\end_layout - -\end_deeper -\begin_layout Description -outer -\begin_inset LatexCommand index -name "outer" - -\end_inset - - (a, b) -\end_layout - -\begin_layout Description -\InsetSpace ~ - compute an outerproduct which is syntactic sugar for a.ravel() [:,newaxis] - * b.ravel() [newaxis,:] (after first converting a and b to ndarrays). -\end_layout - -\begin_layout MyCode ->>> print outer([1,2,3],[10,100,1000]) -\newline -[[ 10 100 1000] -\newline - [ 20 200 2000] -\newline - - [ 30 300 3000]] -\end_layout - -\begin_layout Description -inner -\begin_inset LatexCommand index -name "inner" - -\end_inset - - (a, b) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Computes the inner product between two arrays. - This is an array that has shape a.shape[:-1] + b.shape[:-1] with elements - computed as the sum of the product of the elements from the last dimensions - of a and b. - In particular, let -\begin_inset Formula $I$ -\end_inset - - and -\begin_inset Formula $J$ -\end_inset - - be the super -\begin_inset Foot -status open - -\begin_layout Standard -A super index is 0 or more integer indices used to index into an N-dimensional - array. - How many indices a super index represents should be implied by context. -\end_layout - -\end_inset - - indices selecting the 1-dimensional arrays -\begin_inset Formula $a[I,:]$ -\end_inset - - and -\begin_inset Formula $b[J,:]$ -\end_inset - -, then the resulting array, -\begin_inset Formula $r$ -\end_inset - -, is -\begin_inset Formula \[ -r[I,J]=\sum_{k}a[I,k]b[J,k].\] - -\end_inset - - -\end_layout - -\begin_layout Description -dot -\begin_inset LatexCommand index -name "dot" - -\end_inset - - (a, b) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Computes the dot (matrix) product between two arrays. - The product-sum is over the last dimension of -\begin_inset Formula $a$ -\end_inset - - and the second-to-last dimension of -\begin_inset Formula $b$ -\end_inset - -. - Specifically, if -\begin_inset Formula $I$ -\end_inset - - and -\begin_inset Formula $J$ -\end_inset - - are super indices for -\begin_inset Formula $a[I,:]$ -\end_inset - - and -\begin_inset Formula $b[J,:,j]$ -\end_inset - - so that -\begin_inset Formula $j$ -\end_inset - - is the index of the last dimension of -\begin_inset Formula $b$ -\end_inset - -. - Then, the shape of the resulting array is a.shape[:-1] + b.shape[:-2] + (b.shape[- -1],) with elements. - -\begin_inset Formula \[ -r[I,J,j]=\sum_{k}a[I,k]b[J,k,j],\] - -\end_inset - - -\end_layout - -\begin_layout Description -\begin_inset LatexCommand index -name "vdot" - -\end_inset - -vdot (a, b) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Computes the dot product between two arrays (flattened into one-dimensional - vectors) after conjugating the first vector. - This is an inner-product following the physicists convention of conjugating - the first argument. -\begin_inset Formula \[ -r=\sum_{k}\overline{\textrm{a.flat}[k]}\textrm{b.flat}[k].\] - -\end_inset - - -\end_layout - -\begin_layout Description -tensordot -\begin_inset LatexCommand index -name "tensordot" - -\end_inset - - (a, b, axes=(-1,0)) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Computes a dot-product between two arrays where the sum is taken over the - axes specified by the 2-sequence which can have either scalar or sequence - entries. - The axes specified are summed over and the remaining axes are used to construct - the result. - So, for example, if -\begin_inset Formula $a$ -\end_inset - - is -\begin_inset Formula $3\times4\times5$ -\end_inset - - and -\begin_inset Formula $b$ -\end_inset - - is -\begin_inset Formula $4\times3\times2$ -\end_inset - - then if axes=([1,0],[0,1]) (or axes=([0,1],[1,0])) the result will be -\begin_inset Formula $5\times2$ -\end_inset - -. - Let -\begin_inset Formula $I$ -\end_inset - - represent the indices of the un-summed axes in -\begin_inset Formula $a$ -\end_inset - -, let -\begin_inset Formula $J$ -\end_inset - - represent the indices of the un-summed axes in -\begin_inset Formula $b$ -\end_inset - - and let -\begin_inset Formula $K$ -\end_inset - - represent the the indices of the axes summed over in both -\begin_inset Formula $a$ -\end_inset - - and -\begin_inset Formula $b$ -\end_inset - -. - Also, let -\begin_inset Formula $a_{t}$ -\end_inset - - represent a transposed version of -\begin_inset Formula $a$ -\end_inset - - where the axes to be summed over are pushed to the end, and let -\begin_inset Formula $b_{t}$ -\end_inset - - represent a transposed version of -\begin_inset Formula $b$ -\end_inset - - where the axes to be summed over are pushed to the front. - Then, using -\begin_inset Formula $\sum_{K}$ -\end_inset - - to represent a multi-index sum, the result can be written as -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -r[I,J]=\sum_{K}a_{t}[I,K]b_{t}[K,J]\] - -\end_inset - - -\end_layout - -\begin_layout Description -cross -\begin_inset LatexCommand index -name "cross" - -\end_inset - - (a, b, axisa=-1, axisb=-1, axisc=-1, axis=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns the cross product of two (arrays of) vectors. - The cross product is performed over the axes of the input arrays indicated - by the axisa, and axisb arguments. - For both arrays, the axis used must have dimension either 2 or 3. - If both axes used have dimension 2, then only the z-component of the equivalent - 3-d cross product is returned. - Otherwise, the entire vector is returned. - The axisc argument gives the axis of the vectors in the returned cross-product - result. - If axis is not None, then it is assumed that axisa=axisb=axisc=axis (regardless - of what else is specified). - -\end_layout - -\begin_layout Description -allclose -\begin_inset LatexCommand index -name "allclose" - -\end_inset - - (a, b, rtol= -\begin_inset Formula $10^{-5}$ -\end_inset - -, atol= -\begin_inset Formula $10^{-8}$ -\end_inset - -) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns true if all components of a and b are equal subject to the given - relative and absolute tolerances. - This returns true if every element of a and b satisfy -\begin_inset Formula \[ -\left|a-b\right|<\textrm{atol}+\textrm{rtol}\left|b\right|.\] - -\end_inset - - -\end_layout - -\begin_layout Section -Printing arrays -\end_layout - -\begin_layout Description -array2string -\begin_inset LatexCommand index -name "array2string" - -\end_inset - - (a) -\end_layout - -\begin_layout Description -\InsetSpace ~ - The default printing mechanism uses this function to produce a string from - an array. - -\end_layout - -\begin_layout Description -set_printoptions -\begin_inset LatexCommand index -name "set\\_printoptions" - -\end_inset - - (precision=None, theshold=None, edgeitems=None, linewidth=None, suppress=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Set options associated with representing an array. -\end_layout - -\begin_deeper -\begin_layout Description -precision the default number of digits of precision for floating point output - (default 8); -\end_layout - -\begin_layout Description -threshold total number of array elements which triggers printing only the - -\begin_inset Quotes eld -\end_inset - -ends -\begin_inset Quotes erd -\end_inset - - of the array rather than a full representation (default 1000); -\end_layout - -\begin_layout Description -edgeitems number of array elements in summary at beginning and end of each - dimension (default 3); -\end_layout - -\begin_layout Description -linewidth the number of characters per line (default 75); -\end_layout - -\begin_layout Description -suppress Boolean value indicating whether or not to suppress printing of - small floating point values using scientific notation (default False). -\end_layout - -\end_deeper -\begin_layout Description -get_printoptions -\begin_inset LatexCommand index -name "get\\_printoptions" - -\end_inset - - () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns the values of precision, threshold, edgeitems, linewidth, and suppress - that control printing of arrays. -\end_layout - -\begin_layout Description -set_string_function -\begin_inset LatexCommand index -name "set\\_string\\_function" - -\end_inset - - (func, repr=1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Set the function to use in response to str(array) or repr(array). - By default this function is array2string. - The function passed in must take an array argument and return a string. - If func is None, then the print function is reset to a simple internal - function. - -\end_layout - -\begin_layout Section -Functions redundant with methods -\end_layout - -\begin_layout Standard -Several functions are available primarily for purposes of backward compatibility - with old Numeric, and are therefore redundant. - The functions are all simple wrappers for asarray(a).<function>(*args, **kwds), - or are replaceable by attribute access. - The following list documents them. - It is not recommended that these functions be used in new programs, but - there are no plans for removing them as in functional form they work with - arbitrary sequences which is sometimes desirable. - The functions that mirror methods and attributes are: -\series bold -take -\series default - -\begin_inset LatexCommand index -name "take" - -\end_inset - -, -\series bold -reshape -\series default - -\begin_inset LatexCommand index -name "reshape" - -\end_inset - -, -\series bold -squeeze -\series default - -\begin_inset LatexCommand index -name "squeeze" - -\end_inset - -, -\series bold -choose -\series default - -\begin_inset LatexCommand index -name "choose" - -\end_inset - -, -\series bold -repeat -\series default - -\begin_inset LatexCommand index -name "repeat" - -\end_inset - -, -\series bold -put -\series default - -\begin_inset LatexCommand index -name "put" - -\end_inset - -, -\series bold -swapaxes -\series default - -\begin_inset LatexCommand index -name "swapaxes" - -\end_inset - -, -\series bold -transpose -\series default - -\begin_inset LatexCommand index -name "transpose" - -\end_inset - -, -\series bold -real -\series default - -\begin_inset LatexCommand index -name "real" - -\end_inset - -, -\series bold -imag -\series default - -\begin_inset LatexCommand index -name "imag" - -\end_inset - -, -\series bold -sort -\series default - -\begin_inset LatexCommand index -name "sort" - -\end_inset - -, -\series bold -argsort -\series default - -\begin_inset LatexCommand index -name "argsort" - -\end_inset - -, -\series bold -amax -\begin_inset LatexCommand index -name "amax" - -\end_inset - -, argmax -\series default - -\begin_inset LatexCommand index -name "argmax" - -\end_inset - -, -\series bold -amin -\begin_inset LatexCommand index -name "amin" - -\end_inset - - -\series default -, -\series bold -argmin -\series default - -\begin_inset LatexCommand index -name "argmin" - -\end_inset - -, -\series bold -ptp -\series default - -\begin_inset LatexCommand index -name "ptp" - -\end_inset - -, -\series bold -alen -\series default - -\begin_inset LatexCommand index -name "alen" - -\end_inset - -, -\series bold -searchsorted -\series default - -\begin_inset LatexCommand index -name "searchsorted" - -\end_inset - -, -\series bold -diagonal -\series default - -\begin_inset LatexCommand index -name "diagonal" - -\end_inset - -, -\series bold -trace -\series default - -\begin_inset LatexCommand index -name "trace" - -\end_inset - -, -\series bold -ravel -\series default - -\begin_inset LatexCommand index -name "ravel" - -\end_inset - -, -\series bold -nonzero -\series default - -\begin_inset LatexCommand index -name "nonzero" - -\end_inset - -, -\series bold -shape -\series default - -\begin_inset LatexCommand index -name "shape" - -\end_inset - -, -\series bold -compress -\series default - -\begin_inset LatexCommand index -name "compress" - -\end_inset - -, -\series bold -clip -\series default - -\begin_inset LatexCommand index -name "clip" - -\end_inset - -, -\series bold -std -\series default - -\begin_inset LatexCommand index -name "std" - -\end_inset - -, -\series bold -var -\series default - -\begin_inset LatexCommand index -name "var" - -\end_inset - -, -\series bold -mean -\series default - -\begin_inset LatexCommand index -name "mean" - -\end_inset - -, -\series bold -sum -\series default - -\begin_inset LatexCommand index -name "sum" - -\end_inset - -, -\series bold -cumsum -\series default - -\begin_inset LatexCommand index -name "cumsum" - -\end_inset - -, -\series bold -product -\series default - -\begin_inset LatexCommand index -name "product" - -\end_inset - -, -\series bold -cumproduct -\series default - -\begin_inset LatexCommand index -name "cumproduct" - -\end_inset - -, -\series bold -sometrue -\begin_inset LatexCommand index -name "sometrue" - -\end_inset - - -\series default - (method is .any), -\series bold -alltrue -\begin_inset LatexCommand index -name "alltrue" - -\end_inset - - -\series default - (method is .all), -\series bold -around -\begin_inset LatexCommand index -name "around" - -\end_inset - - -\series default - (method is .round), -\series bold -rank -\begin_inset LatexCommand index -name "rank" - -\end_inset - - -\series default - (attribute is .ndim), -\series bold -shape -\series default - -\begin_inset LatexCommand index -name "shape" - -\end_inset - -, -\series bold -size -\begin_inset LatexCommand index -name "size" - -\end_inset - - -\series default - (.size or .shape[axis]), and -\series bold -copy -\series default - -\begin_inset LatexCommand index -name "copy" - -\end_inset - -. - -\end_layout - -\begin_layout Section -Dealing with data types -\end_layout - -\begin_layout Description -dtype (obj, align=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a data-type object from any object. - See Chapter -\begin_inset LatexCommand ref -reference "cha:Data-descriptor-objects" - -\end_inset - - for a more detailed explanation of what can be interpreted as a data-type - object and the meaning of the align keyword. - -\end_layout - -\begin_layout Description -maximum_sctype (arg) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns the array-scalar type of highest precision of the same general - kind as arg which can be any recognized form for describing a data-type. -\end_layout - -\begin_layout Description -issctype (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns True if obj is an array data type (or a recognized alias for one) -\end_layout - -\begin_layout Description -obj2sctype (obj, default=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns the array type object corresponding to obj which can be an array - type already, a python type object, an actual array, or any recognized - alias for an array type object. - If no suitable data type object can be determined, return default. -\end_layout - -\begin_layout Description -sctype2char (sctype) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the typecode character associated with an array-scalar type dtype. - The first argument is first converted to a dtype if it needs to be. - -\end_layout - -\begin_layout Tip -the type attribute of data-type objects are actual Python type objects subclasse -d in a hierarchy of types. - This can often be useful to check data types generically. - For example, issubclass(dtype.type, integer) can check to see if the data - type is one of the 10 different integer types. - The issubclass function, however, raises an error if either argument is - not an actual type object. - NumPy defines _(arg1, arg2) that will return false instead of raise an - error. - Alternatively, dtype.kind is a character describing the class of the data-type - so dtype.kind in 'iu' would also check to see if the data-type is an integer - type. -\end_layout - -\begin_layout Description -can_cast (from=d1, to=d2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return Boolean value indicating whether or not data type d1 can be cast - to data type d2 safely (without losing precision or information). - -\end_layout - -\begin_layout Chapter -Additional Convenience Routines -\end_layout - -\begin_layout Quotation -A committee is twelve men doing the work of one. -\end_layout - -\begin_layout Right Address ---- -\emph on -John F. - Kennedy -\end_layout - -\begin_layout Quotation -Your mind can only hold one thought at a time. - Make it a positive and constructive one. -\end_layout - -\begin_layout Right Address ---- -\emph on -H. - Jackson Brown Jr. - -\end_layout - -\begin_layout Section -Shape functions -\end_layout - -\begin_layout Description -atleast_1d -\begin_inset LatexCommand index -name "atleast\\_1d" - -\end_inset - - (a1,a2,...,an) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Force a sequence of arrays (including array scalars) to each be at least - 1-d. - -\end_layout - -\begin_layout Description -atleast_2d -\begin_inset LatexCommand index -name "atleast\\_2d" - -\end_inset - - (a1,a2,...,an) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Force a sequence of arrays (including array scalars) to each be at least - 2-d. - Dimensions of length 1 are pre-pended to reach a two-dimensional array. -\end_layout - -\begin_layout Description -atleast_3d -\begin_inset LatexCommand index -name "atleast\\_3d" - -\end_inset - - (a1,a2,...,an) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Force a sequence of arrays (including array_scalars) to each be at least - 3-d. - Dimensions of length 1 are pre-pended to reach a two-dimensional array. -\end_layout - -\begin_layout Description -roll -\begin_inset LatexCommand index -name "roll" - -\end_inset - - (arr, shift, axis=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a new array with the contents of arr shifted (rolled) by the amount - given in the integer argument shift along the axis specified. - If axis is None, then the shift takes place in the ravelled array (but - the returned array has the same shape as arr). - Elements that shift outside the array are rolled back into the array from - the opposite side. - -\end_layout - -\begin_layout Description -rollaxis -\begin_inset LatexCommand index -name "rollaxis" - -\end_inset - - (arr, axis, start) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return arr transposed so that the provided axis is inserted into the shape - before start with the other dimensions rolled. - Thus, if arr.shape is (i,j,k,l) then rollaxis(arr, 2, 0) has shape (k,i,j,l) - and rollaxis(arr, 1, 3) has shape (i,k,j,l). -\end_layout - -\begin_layout Description -vstack -\begin_inset LatexCommand index -name "vstack" - -\end_inset - - (seq) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Stack a sequence of arrays along the first axis (row wise). - Arrays in seq must have the same shape along all dimensions but the first. - Rebuilds array divided by vsplit. - All 1-d arrays will be stacked row-wise. -\end_layout - -\begin_layout Description -hstack -\begin_inset LatexCommand index -name "hstack" - -\end_inset - - (seq) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Stack a sequence of arrays along the second axis (column wise). - Arrays in seq must have the same shape along all dimensions but the second. - Rebuilds array divided by hsplit. - Notice that 1-d arrays will be appended into a new 1-d array. - Use column_stack to get a 2-d array from 1-d arrays. - If some arrays are already 2-d, then the 1-d arrays need to have a dimension - added to the end ( -\emph on -e.g. - -\emph default - -\family typewriter -y[:,newaxis] -\family default -) in order to stack correctly. - -\end_layout - -\begin_layout Description -column_stack -\begin_inset LatexCommand index -name "column\\_stack" - -\end_inset - - (seq) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Stack a sequence of arrays as columns into a 2-d array. - 1-d arrays are converted to 2-d arrays and transposed. - All arrays must have shapes so that the resulting array is well defined. - Compare with -\series bold -hstack -\series default -. -\end_layout - -\begin_layout Description -row_stack -\begin_inset LatexCommand index -name "row\\_stack" - -\end_inset - - (seq) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Stack a sequence of 1-d arrays as rows into a 2-d array (alias for -\series bold -vstack -\series default -). - -\end_layout - -\begin_layout Description -dstack -\begin_inset LatexCommand index -name "dstack" - -\end_inset - - (seq) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Stack a sequence of arrays along the third axis (depth wise). - Arrays in seq must have the same shape along all dimensions but the third. - Rebuilds array divided by vsplit. -\end_layout - -\begin_layout Description -array_split -\begin_inset LatexCommand index -name "array\\_split" - -\end_inset - - (ary, i_or_s, axis=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Divide ary into a list of sub-arrays along the specified axis. - The i_or_s argument stands for indices_or_sections. - If i_or_s is an integer, ary is divided into that many equally-sized arrays. - If it is impossible to make an even split, each of the leading arrays in - the returned list have one additional member. - If i_or_s is a list of sorted integer, its entries define the indexes where - ary is split. - An empty list for i_or_s results in a single sub-array equal to the original - array. -\end_layout - -\begin_layout Description -split -\begin_inset LatexCommand index -name "split" - -\end_inset - - (ary, i_or_s, axis=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - The same as array_split() except if i_or_s is an integer and it is impossible - to make an even split, an error is raised. -\end_layout - -\begin_layout Description -hsplit -\begin_inset LatexCommand index -name "hsplit" - -\end_inset - - (ary, i_or_s) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Split a single array into multiple columns of sub-arrays (along the first - axis if 1-d or along the second second if >1-d). - Only works on arrays of 1 or more dimension. - -\end_layout - -\begin_layout Description -vsplit -\begin_inset LatexCommand index -name "vsplit" - -\end_inset - - () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Split a single array into multiple rows of sub-arrays (along the first - axis). - Only works on arrays of 2 or more dimensions. -\end_layout - -\begin_layout Description -dsplit -\begin_inset LatexCommand index -name "dsplit" - -\end_inset - - () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Split a single array into multiple sub-arrays along the third axis (depth). - Only works on arrays of 3 or more dimensions. -\end_layout - -\begin_layout Description -apply_along_axis -\begin_inset LatexCommand index -name "apply\\_along\\_axis" - -\end_inset - - (func1d, axis, arr, *args) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Execute func1d(arr[sel_i], *args) where func1d takes 1-d arrays and arr - is an N-d array, where sel_i is a selection object sufficient to select - a 1-d sub-array along the given axis. - The function is executed for all 1-d arrays along axis in arr. - -\end_layout - -\begin_layout Description -apply_over_axes -\begin_inset LatexCommand index -name "apply\\_over\\_axes" - -\end_inset - - (func, a, axes) -\end_layout - -\begin_layout Description -\InsetSpace ~ - For each axis in the axes sequence, call func as -\family typewriter -res=func(a, axis) -\family default -. - If res is the same shape as a then set -\family typewriter -a=res -\family default - and continue. - if -\family typewriter -res.ndim = a.ndim -1 -\family default -, then insert a dimension before axis and continue. - -\end_layout - -\begin_layout Description -expand_dims -\begin_inset LatexCommand index -name "expand\\_dims" - -\end_inset - - (a, axis) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Expand the shape of array a by including newaxis -\series bold -before -\series default - the given axis. -\end_layout - -\begin_layout Description -resize -\begin_inset LatexCommand index -name "resize" - -\end_inset - - (a, new_shape) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns a new array with the specified shape which can be any size. - The new array is filled with repeated copies of a. - This function is similar in spirit to a.resize(new_shape) except that it - fills in the new array with repeated copies and returns a new array. - -\end_layout - -\begin_layout Description -kron -\begin_inset LatexCommand index -name "kron" - -\end_inset - - (a, b) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a composite array with blocks from -\emph on -b -\emph default - scaled by elements of -\emph on -a -\emph default -. - The number of dimensions of -\emph on -a -\emph default - and -\emph on -b -\emph default - should be the same. - If not, then the input with fewer dimensions is pre-pended with ones (broadcast -) to the same shape as the input with more dimensions. - The return array has this same number of dimensions with shape given by - the product of the shape of -\emph on -a -\emph default - and the shape of -\emph on -b -\emph default -. - If either a or b is a scalar then this function is equivalent to multiply(a,b). - -\end_layout - -\begin_layout Description -\InsetSpace ~ - For example, if -\emph on -a -\emph default - and -\emph on -b -\emph default - are is 1-d the result is -\begin_inset Formula \[ -\left[\begin{array}{cccc} -a[0]*b & a[1]*b & \cdots & a[-1]*b\end{array}\right]\] - -\end_inset - - while if -\emph on -a -\emph default - and -\emph on -b -\emph default - are 2-d, the result is -\begin_inset Formula \[ -\left[\begin{array}{cccc} -a[0,0]*b & a[0,1]*b & \cdots & a[0,-1]*b\\ -a[1,0]*b & a[1,1]*b & \cdots & a[1,-1]*b\\ -\vdots & \vdots & \ddots & \vdots\\ -a[-1,0]*b & a[-1,1]*b & \cdots & a[-1,-1]*b\end{array}\right]\] - -\end_inset - - -\end_layout - -\begin_deeper -\begin_layout Description -Example: -\end_layout - -\end_deeper -\begin_layout MyCode ->>> kron([1,10,100],[5,6,7]) -\newline -array([ 5, 6, 7, 50, 60, 70, 500, 600, - 700]) -\newline ->>> kron([[1,10],[100,1000]],[[2,3],[4,5]]) -\newline -array([[ 2, 3, 20, - 30], -\newline - [ 4, 5, 40, 50], -\newline - [ 200, 300, 2000, 3000], -\newline - - [ 400, 500, 4000, 5000]]) -\end_layout - -\begin_layout Description -tile -\begin_inset LatexCommand index -name "tile" - -\end_inset - - (a, reps) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Tile an -\begin_inset Formula $N$ -\end_inset - --dimensional array using the shape information in reps to create a larger - -\begin_inset Formula $N$ -\end_inset - --dimensional array. - This is equivalent to kron(ones(reps, a.dtype), a). - The number of dimensions of a and the length of shape should be the same - or else 1's will be pre-pended to make them the same. - -\end_layout - -\begin_deeper -\begin_layout Description -Example: -\end_layout - -\end_deeper -\begin_layout MyCode ->>> tile([5,6,7],(1,2,3)) -\newline -array([[[5, 6, 7, 5, 6, 7, 5, 6, 7], -\newline - [5, - 6, 7, 5, 6, 7, 5, 6, 7]]]) -\end_layout - -\begin_layout Section -Basic functions -\end_layout - -\begin_layout Description -average -\begin_inset LatexCommand index -name "average" - -\end_inset - - (a, axis=None, weights=None, returned=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Computes the average along the indicated axis. - If axis is None, average over the entire array. - Inputs can be integer or floating types; result is type float. - If weights are given, the result is sum(a*weights)/sum(weights). - Therefore, weights must have shape equal to a.shape or be 1-d with length - a.shape[axis]. - Integer weights are converted to float. - If returned is True, then return a tuple showing both the result and the - sum of the weights (or count of the values). - The shape of these two results will be the same. - -\end_layout - -\begin_layout Description -cov -\begin_inset LatexCommand index -name "cov" - -\end_inset - - (x, y=None, rowvar=1, bias=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Compute the covariance matrix of data in x. - If x is a vector and y is None, then this function is equivalent to asarray(x).v -ar(). - Otherwise, x is interpreted as observations of several random variables. - If rowvar is True (default), then the variables are in the rows and the - observations of the variables are in the columns. - Otherwise, the variables are in the columns and the observations are in - the rows. - If y is given then it is treated as another variable or set of variables - to be added to x. - By default, a so-called unbiased estimate of the covariance matrix is made. - If bias is non-zero, then a biased normalization factor (with better mean-squar -e error performance) is used instead. - If -\begin_inset Formula $\mathbf{X}$ -\end_inset - - is a random vector, then the covariance matrix is defined as -\begin_inset Formula \[ -\mathbf{C}=E\left[\left(\mathbf{X}-E\mathbf{X}\right)\left(\mathbf{X}-E\mathbf{X}\right)^{H}\right].\] - -\end_inset - - It can be approximated as -\begin_inset Formula \[ -\mathbf{C}\approx\frac{1}{P}\sum_{i=0}^{N-1}\left(\mathbf{x}_{i}-\bar{\mathbf{x}}\right)\left(\mathbf{x}_{i}-\bar{\mathbf{x}}\right)^{H}\] - -\end_inset - - where -\begin_inset Formula $\mathbf{x}_{i}$ -\end_inset - - is an observation of -\begin_inset Formula $\mathbf{X}$ -\end_inset - - (as a column-vector), -\begin_inset Formula $N$ -\end_inset - - is the number of observations made and -\begin_inset Formula $P=N-1$ -\end_inset - - for an unbiased estimate or -\begin_inset Formula $P=N$ -\end_inset - - for a biased (but lower mean-squared error) estimate. - -\end_layout - -\begin_layout Description -corrcoef -\begin_inset LatexCommand index -name "corrcoef" - -\end_inset - - (x, y=None, rowvar=1, bias=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Estimate the correlation coefficient of x. - By default, each row of x contains a random variable with observations - of the random variable in the columns of x. - (If rowvar is False, the each column is a random variable with observations - in the rows). - The y argument can be used to append additional variables to x. - The -\begin_inset Formula $i^{\textrm{th}}$ -\end_inset - - row and -\begin_inset Formula $j^{\textrm{th}}$ -\end_inset - - column of the correlation coefficient matrix is defined as -\begin_inset Formula \[ -\rho_{ij}=\frac{C_{ij}}{\sqrt{C_{ii}C_{jj}}}\] - -\end_inset - - where -\begin_inset Formula $\mathbf{C}$ -\end_inset - - is the covariance matrix. - The rowvar and bias arguments are passed on to the cov function to estimate - -\begin_inset Formula $\mathbf{C}.$ -\end_inset - - -\end_layout - -\begin_layout Description -msort -\begin_inset LatexCommand index -name "msort" - -\end_inset - - (a) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a new array, sorted along the first axis. - Equivalent to b=a.copy(); b.sort(0) -\end_layout - -\begin_layout Description -median -\begin_inset LatexCommand index -name "median" - -\end_inset - - (m) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns the median of m along its first dimension. -\end_layout - -\begin_layout Description -bincount -\begin_inset LatexCommand index -name "bincount" - -\end_inset - - (list=, weights=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - The list argument is a 1-d integer array. - Let -\begin_inset Formula $r$ -\end_inset - - be the returned 1-d array whose length is (list.max()+1). - If weights is None, then -\begin_inset Formula $r[i]$ -\end_inset - - is the number of occurrences of -\begin_inset Formula $i$ -\end_inset - - in list. - If weight is present, then the -\begin_inset Formula $i^{\textrm{th}}$ -\end_inset - - element is -\begin_inset Formula \[ -r[i]=\sum_{j:\textrm{list}\left[j\right]=i}\textrm{weights}[j].\] - -\end_inset - - Notice that if weights is None, it is equivalent to a weights array of - all 1. - The length of weights must be the same as the length of list. - -\end_layout - -\begin_layout Description -digitize -\begin_inset LatexCommand index -name "digitize" - -\end_inset - - (x=,bins=) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an array of integers the same length as x with values -\begin_inset Formula $i$ -\end_inset - - such that -\begin_inset Formula $\textrm{bins}\left[i-1\right]\leq x<\textrm{bins}\left[i\right]$ -\end_inset - - if bins is monotonically increasing, or -\begin_inset Formula $\textrm{bins}[i]\leq x<\textrm{bins}[i-1]$ -\end_inset - - if bins is monotonically decreasing. - When -\begin_inset Formula $x$ -\end_inset - - is beyond the bounds of bins, return either -\begin_inset Formula $i=0$ -\end_inset - - or -\begin_inset Formula $i=$ -\end_inset - -len(bins) as appropriate. -\end_layout - -\begin_layout Description -histogram -\begin_inset LatexCommand index -name "histogram" - -\end_inset - - (x=, bins=None, range=None, normed=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct a histogram for the data in x (treated as one-dimensional array - of type float). - If bins is not a sequence, then bins should be the number of bins which - will be constructed ranging from range[0] to range[1] or x.min() to x.max() - if range is None. - If normed is True, then the histogram will be normalized and comparable - with a probability density function, otherwise it will be a count of the - number of items in each bin. - The return value is the tuple (n, bins) where n is the histogram. -\end_layout - -\begin_layout Description -histogram2d -\begin_inset LatexCommand index -name "histogram2d" - -\end_inset - - (x, y, bins=10, range=None, normed=False) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Compute the two-dimensional histogram for a dataset (x,y) given the bins. - Returns (histogram, xedges, yedges). - The bins argument can be either the number of bins or a sequence of the - bin edges if the x and y directions should have the same bins. - If the bins argument is a sequence of length 2, then separate bin edges - will be computed. - The first element can be either the number of bins or the bin edges for - the x-direction. - The second element is interpreted as the number of bins or the bin edges - for the y-direction. - The returned histogram array, H, is a count of the number of samples in - each bin. - The array is oriented such that H[i,j] is the number of samples falling - into binx[j] and biny[i] (notice the association x<->j and y<->i). - Setting normed to True returns a density rather than a bin-count. - The range argument allows specifying lower and upper bin edges (in a sequence - of length 2 with 2-length sequences in each entry). - The default is [[x.min(), x.max()],[y.min(), y.max()]]. - -\end_layout - -\begin_layout Description -histogramdd -\begin_inset LatexCommand index -name "histogramdd" - -\end_inset - - (sample, bins=10, range=None, normed=False) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Compute the -\begin_inset Formula $D$ -\end_inset - --dimensional histogram for a (vector) dataset contained in sample give the - bins. - The dataset is a sequence of -\begin_inset Formula $D$ -\end_inset - - arrays or an -\begin_inset Formula $N\times D$ -\end_inset - - array where -\begin_inset Formula $N$ -\end_inset - - is the number of samples and -\begin_inset Formula $D$ -\end_inset - - is the number of dimensions. - Returns (histogram, edges) where histogram is a -\begin_inset Formula $D$ -\end_inset - --dimensional array of shape given by the number of bins selected in each - axis containing the number of counts that a point in the sample data fell - into the volume bin specified. - The edges sequence has -\begin_inset Formula $D$ -\end_inset - --entries to specify the edge boundaries for each dimension. - The bins argument is a sequence of edge arrays or a sequence of the number - of bins. - If a scalar is given, it is assumed to be the number of bins for all dimensions. - The range is a length- -\begin_inset Formula $D$ -\end_inset - - sequence containing lower and upper bin edges which default to the min - and maximum of the respective datasets. - If normed is True, then a density rather than a bin-count is returned. - -\end_layout - -\begin_layout Description -logspace -\begin_inset LatexCommand index -name "logspace" - -\end_inset - - (start, stop, num=50, endpoint=True,base=10.0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evenly spaced samples on a logarithmic scale. - Returns num evenly spaced (in logspace) samples from base**start to base**stop. - If endpoint is True, then the last sample is base**stop. -\end_layout - -\begin_layout Description -linspace -\begin_inset LatexCommand index -name "linspace" - -\end_inset - - (start, stop, num=50, endpoint=True, retstep=False): -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evenly spaced samples. - Returns num evenly spaced samples from start to stop. - If endpoint is True, then the last sample is stop. - If retstep is True, then return the computed step size. -\end_layout - -\begin_layout Description -meshgrid -\begin_inset LatexCommand index -name "meshgrid" - -\end_inset - - (x, y) -\end_layout - -\begin_layout Description -\InsetSpace ~ - For 1-d arrays x, y with lengths Nx=len(x) and Ny = len(y), return X, Y - where X and Y are (Ny, Nx) shaped arrays with the elements of x and y repeated - to fill the array. - -\end_layout - -\begin_layout MyCode ->>> X,Y = meshgrid([1,2,3], [4,5,6,7]); print X; print Y -\newline -[[1 2 3] -\newline - [1 2 3] -\newline - - [1 2 3] -\newline - [1 2 3]] -\newline -[[4 4 4] -\newline - [5 5 5] -\newline - [6 6 6] -\newline - [7 7 7]] -\end_layout - -\begin_layout Description -select -\begin_inset LatexCommand index -name "select" - -\end_inset - - (condlist, choicelist, default=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns an array comprised from different elements of choicelist depending - on the list of conditions. - The condlist argument is a list of Boolean condition arrays. - The choicelist argument is a list of choice arrays (of the same size as - the arrays in condlist). - The result has the same size as the arrays in choicelist. - If condlist is [ -\begin_inset Formula $c_{0},\ldots,c_{N-1}$ -\end_inset - -], then choicelist must be of length -\begin_inset Formula $N$ -\end_inset - -. - The elements of choicelist can then be represented as [ -\begin_inset Formula $v_{0},\ldots,v_{N-1}$ -\end_inset - -]. - The default choice if none of the conditions are met is given as the default - argument. - The conditions are tested in order and the first one satisfied is used - to select the choice. - In other words, the elements of the output array are found from the following - tree (evaluated on an element-by-element basis) -\end_layout - -\begin_layout LyX-Code - -\series bold -if -\series default - -\begin_inset Formula $c_{0}$ -\end_inset - -: -\begin_inset Formula $v_{0}$ -\end_inset - - -\newline - -\series bold -elif -\series default - -\begin_inset Formula $c_{1}$ -\end_inset - -: -\begin_inset Formula $v_{1}$ -\end_inset - - -\newline -... -\newline - -\series bold -elif -\series default - -\begin_inset Formula $c_{N-1}$ -\end_inset - -: -\begin_inset Formula $v_{N-1}$ -\end_inset - - -\newline - -\series bold -else -\series default -: default -\end_layout - -\begin_layout Description -piecewise -\begin_inset LatexCommand index -name "piecewise" - -\end_inset - - (x, condlist, funclist, *args, **kw) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Compute a piecewise-defined function. - A piecewise defined function is -\begin_inset Formula \[ -f\left(x\right)=\left\{ \begin{array}{cc} -f_{1}\left(x\right) & x\in S_{1},\\ -f_{2}\left(x\right) & x\in S_{2},\\ -\vdots & \vdots\\ -f_{n}\left(x\right) & x\in S_{n}.\end{array}\right.\] - -\end_inset - -where -\begin_inset Formula $S_{1}$ -\end_inset - - are sets. - Thus, the function is defined differently over different sub-domains of - the input. - Such a function can be computed using -\family typewriter -select -\family default - but such an implementation means calling each -\begin_inset Formula $f_{i}$ -\end_inset - - over the entire region of -\begin_inset Formula $x.$ -\end_inset - - The piecewise call guarantees that each function -\begin_inset Formula $f_{i}$ -\end_inset - - will only be called over those values of -\begin_inset Formula $x$ -\end_inset - - in -\begin_inset Formula $S_{i}.$ -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Arguments: x is the array of values over which to call the function; condlist - is a sequence of Boolean (indicator) arrays (or a single Boolean array) - of the same shape as -\begin_inset Formula $x$ -\end_inset - - that defines the sets (True indicates that element of -\begin_inset Formula $x$ -\end_inset - - is in the set). - If needed, to match the length of funclist, an -\begin_inset Quotes eld -\end_inset - -otherwise -\begin_inset Quotes erd -\end_inset - - set will be added to condlist. - This otherwise set is defined as -\begin_inset Formula $S_{n}=\overline{\bigcup S_{i}}.$ -\end_inset - - The argument funclist is a list of functions to be called (or items to - be inserted) corresponding to the conditions. - Each of these functions can take extra arguments and key-word arguments - which are passed in as *args, and **kw using standard Python syntax. - Each of these functions should return vector output for vector input. - If the function is a scalar, then it will simply be inserted where appropriate - into the output. - It is the equivalent of a constant function. - -\end_layout - -\begin_deeper -\begin_layout Description -Example: Suppose we want to compute -\begin_inset Formula $f\left(x\right)=x^{2}\Pi\left(\frac{x}{3}\right)+u\left(x-5\right)$ -\end_inset - - where -\begin_inset Formula $\Pi\left(x\right)=1$ -\end_inset - - only when -\begin_inset Formula $\left|x\right|\leq1$ -\end_inset - - and -\begin_inset Formula $u\left(x\right)=1$ -\end_inset - - only when -\begin_inset Formula $x\geq0.$ -\end_inset - - This could be done using the code: -\end_layout - -\end_deeper -\begin_layout MyCode ->>> f1 = lambda x: x*x -\newline ->>> x = r_[-4:6:20j] -\newline ->>> y = piecewise(x,abs(x)<=3,[f1,0])+ -piecewise(x,x>=0,[1,0]) -\newline ->>> set_printoptions(precision=4); print y -\newline -[ 0. - 0. - 8.687 5.8615 3.59 1.8726 0.7091 0.0997 -\newline - 1.0443 1.5429 2.5956 4.2022 - 6.3629 9.0776 1. - 1. - 1. -\newline - 1. - 1. - 1. - ] -\end_layout - -\begin_layout Description -trim_zeros -\begin_inset LatexCommand index -name "trim\\_zeros" - -\end_inset - - (filt, trim='fb'): -\end_layout - -\begin_layout Description -\InsetSpace ~ - Trim the leading ('f' in trim) and trailing ('b' in trim) zeros from a - sequence according to the trim keyword. - -\end_layout - -\begin_layout Description -trapz -\begin_inset LatexCommand index -name "trapz" - -\end_inset - - (y, x=None, dx=1.0, axis=-1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - If -\begin_inset Formula $\mathbf{y}$ -\end_inset - - contains samples of a function: -\begin_inset Formula $y_{i}=f\left(x_{i}\right)$ -\end_inset - - then trapz can be used to approximate the integral of the function using - the trapezoidal rule. - If the sampling is not evenly spaced use -\begin_inset Formula $\mathbf{x}$ -\end_inset - - to pass in the sample positions. - Otherwise, only the sample-spacing is needed in dx. - The trapz function can work with many functions at a time stored in an - -\begin_inset Formula $N$ -\end_inset - --dimensional array. - The axis argument controls which axis defines the sampling axis (the other - dimensions are different functions). - The number of dimensions of the returned result is -\begin_inset Formula $y$ -\end_inset - -.ndim - 1. -\end_layout - -\begin_layout Description -diff -\begin_inset LatexCommand index -name "diff" - -\end_inset - - (x, n=1, axis=-1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Calculates the -\begin_inset Formula $n^{\textrm{th}}$ -\end_inset - - order, discrete difference along the given axis. -\end_layout - -\begin_layout Description -gradient -\begin_inset LatexCommand index -name "gradient" - -\end_inset - - (f, *varargs) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Calculate the gradient of an N-d scalar function, f. - Uses central differences on the interior and first differences on boundaries - to give the same shape for each component of the gradient. - The varargs variable can contain 0, 1, or N scalars corresponding to the - sample distances in each direction (default 1.0). - If f is N-d, then N arrays are returned each of the same shape as f, giving - the derivative of f with respect to each dimension. - -\end_layout - -\begin_layout Description -angle -\begin_inset LatexCommand index -name "angle" - -\end_inset - - (z, deg=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the angle of a complex number z (in degrees if deg is True). -\end_layout - -\begin_layout Description -unwrap -\begin_inset LatexCommand index -name "unwrap" - -\end_inset - - (p, discont=pi, axis=-1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Unwraps radian phase p by changing absolute jumps greater than discont - to their -\begin_inset Formula $2\pi$ -\end_inset - - complement along the given axis. - -\end_layout - -\begin_layout Description -sort_complex -\begin_inset LatexCommand index -name "sort\\_complex" - -\end_inset - - (x) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This is syntactic sugar for asarray(x).sort().astype(<cmplx_type>) where - cmplx_type is csingle if x.dtype is integral with fewer bits than intp, - clongfloat if x.dtype.type is longfloat, and cdouble for all other types. - The sorting is done by comparing the real part of the array, and then the - imaginary part if the real parts are the same. - -\end_layout - -\begin_layout Description -disp -\begin_inset LatexCommand index -name "disp" - -\end_inset - - (mesg, device=None, linefeed=1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Display a message to device (defaults to sys.stdout) with or without a closing - linefeed. -\end_layout - -\begin_layout Description -unique -\begin_inset LatexCommand index -name "unique" - -\end_inset - - (seq) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns unique items in the 1-dimensional seq. -\end_layout - -\begin_layout Description -extract -\begin_inset LatexCommand index -name "extract" - -\end_inset - - (condition, arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equivalent to arr.compress(condition.flat) and arr.flat[bool_(condition.flat)] - which extracts the elements of (flattened) arr according to the elements - of (flattened) condition that are True. - -\end_layout - -\begin_layout Description -place -\begin_inset LatexCommand index -name "place" - -\end_inset - - (arr, mask, vals) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Inverse of extract. - Equivalent to arr[abool(mask)] = vals but it uses a different algorithm. - -\end_layout - -\begin_layout Description -delete -\begin_inset LatexCommand index -name "delete" - -\end_inset - - (arr, indices, axis=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a new array with the sub-arrays indicated by indices along axis - removed. - If axis is None, then first ravel the array and set axis to -1. - The indices argument describes which sub-arrays along the given axis should - be removed. - It can be an integer, a slice object, or a sequence of integers. - A new array is created with the corresponding sub-arrays are removed. - -\end_layout - -\begin_layout Description -insert -\begin_inset LatexCommand index -name "insert" - -\end_inset - - (arr, indices, values, axis=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Create a new array with values inserted into arr before indices. - If axis is None, then first ravel the array and set axis to -1. - The indices argument describes which indices along the provided axis the - values should be inserted before. - It can be an integer, a slice object, or a sequence of integers. - The values argument must be broadcastable to the shape implied by where - they will be inserted. - -\end_layout - -\begin_layout Description -append -\begin_inset LatexCommand index -name "append" - -\end_inset - - (arr, values, axis=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a new array with values appended to the end of the array along axis. - -\end_layout - -\begin_layout Description -nansum -\begin_inset LatexCommand index -name "nansum" - -\end_inset - - (x, axis=None) -\end_layout - -\begin_layout Description -nanmax -\begin_inset LatexCommand index -name "nanmax" - -\end_inset - - (x, axis=None) -\end_layout - -\begin_layout Description -nanargmax -\begin_inset LatexCommand index -name "nanargmax" - -\end_inset - - (x, axis=None) -\end_layout - -\begin_layout Description -nanargmin -\begin_inset LatexCommand index -name "nanargmin" - -\end_inset - - (x, axis=None) -\end_layout - -\begin_layout Description -nanmin -\begin_inset LatexCommand index -name "nanmin" - -\end_inset - - (x, axis=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - These functions perform their respective operations over the given axis - (or the entire array if axis is None), after replacing any nans with appropriat -e values so as not to affect the calculation. - -\end_layout - -\begin_layout Description -vectorize -\begin_inset LatexCommand index -name "vectorize" - -\end_inset - - (pyfunc, otypes=None, doc=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This creates a class whose instances have a call method that invokes a - ufunc that has been dynamically built to call the python function pyfunc - internally. - The output types can be controlled by the otypes argument. - If it is None, then the output types will be determined upon first call - to the function using the provided inputs. - This can be reset, by re-setting the otypes attribute to -\begin_inset Quotes eld -\end_inset - - -\begin_inset Quotes erd -\end_inset - -. - The normal rules of array broadcasting are followed by the returned object. -\end_layout - -\begin_layout MyCode ->>> def myfunc(a,b): -\newline -... - if (a>b): return a -\newline -... - else: return b-1 -\newline ->>> vecfunc = vectorize(myfunc) -\newline ->>> vecfunc([[1,2,3],[5,6,9] -],[7,4,5]) -\newline -array([[6, 3, 4], -\newline - [6, 6, 9]]) -\end_layout - -\begin_layout Description -asarray_chkfinite -\begin_inset LatexCommand index -name "asarray\\_chkfinite" - -\end_inset - - (x) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Like asarray(x) except an error is raised if any of the values in x are - not finite. - -\end_layout - -\begin_layout Description -round_ -\begin_inset LatexCommand index -name "round\\_" - -\end_inset - - (x, decimals=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an array with all the elements of x rounded to decimals places. - Returns x if array is not floating point and rounds both the real and imaginary - parts separately if array is complex. - Rounds in the same way as standard python except for half-way values are - rounded to the nearest -\emph on -even -\emph default - number. -\end_layout - -\begin_layout Description -packbits (array, axis=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Pack an integer array of logical data (zero/non-zero) into bits of a uint8 - data-type along the dimension given by axis. - This dimension is shrunk by a factor of 8 (rounded up). - Each element in the input is converted to a bit in the output which is - set to 1 or 0 depending on whether the input is non-zero or not. - Thus, every 8-element chunk of the input is converted to a single byte - in the output. - If axis is None, then the bit-packing is done on the entire array as if - it were raveled. -\end_layout - -\begin_layout Description -unpackbits (array, axis=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Unpack bits of an array of uint8 data-type into a single uint8 byte for - each bit along the dimension given by axis. - This dimension is thus expanded 8-fold, but otherwise the output has the - same shape as the input. - If axis is None, then the input is treated as a 1-d array and expanded - 8-fold so that each bit of the input is given an output byte. - -\end_layout - -\begin_layout Description -add_docstring -\begin_inset LatexCommand index -name "add\\_docstring" - -\end_inset - - (obj, doc) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Adds a docstring to a built-in object, obj, that does not have a docstring - defined already. - The obj can be a built-in function-or-method, a typeobject, a method descriptor -, a getset descriptor, or a member descriptor. - This is useful for improving the documentation of objects defined in C-compiled - code without re-compiling. - If the object already has a docstring, a RuntimeError is raised. - If the object is not a supported type the code can add a docstring to, - a TypeError is raised. - -\end_layout - -\begin_layout Description -add_newdoc -\begin_inset LatexCommand index -name "add\\_newdoc" - -\end_inset - - (place, obj, doc) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Adds a docstring to the -\emph on -obj -\emph default - imported from -\emph on -place -\emph default - using exec 'from %s import %s' % (place, obj). - Thus, both place and obj should be strings. - If doc is a string, then a single docstring is added to obj from place. - If doc is a 2-tuple, then obj must be an object with attributes that need - to be commented. - The first element of the doc tuple is the attribute to be commented on - and the second element is the actual docstring. - If doc is a list, then it must be composed of elements that are 2-tuples - indicating that obj has several attributes that need to be documented. - -\end_layout - -\begin_layout Section -Polynomial functions -\end_layout - -\begin_layout Standard -There are two interfaces for dealing with polynomials -\begin_inset LatexCommand index -name "polynomials" - -\end_inset - -: a class-based interface, and a collection of functions to deal with a - polynomials represented as a simple list of coefficients. - This latter representation results from the is a one-to-one correspondence - between a length- -\begin_inset Formula $\left(n+1\right)$ -\end_inset - - sequence of coefficients -\begin_inset Formula $a_{n}\equiv a[n]$ -\end_inset - - and an -\begin_inset Formula $n^{\textrm{th}}$ -\end_inset - - order polynomial: -\begin_inset Formula \[ -p\left(x\right)=a_{0}x^{n}+a_{1}x^{n-1}+\cdots+a_{n-1}x+a_{n}.\] - -\end_inset - - Most of the functions below operate on and return a simple sequence of - coefficients representing a polynomial. - There is, however, a simple polynomial class that provides some utility - for doing simple algebra on polynomials. - -\end_layout - -\begin_layout Description -poly1d -\begin_inset LatexCommand index -name "poly1d" - -\end_inset - - (c_or_r, r=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This construction returns an instance of a simple polynomial class. - It can take either a list of coefficients on polynomial powers, or a sequence - of roots (if r=1). - The returned polynomial can be added, subtracted, multiplied, divided, - and taken to integer powers, resulting in new polynomials. - -\end_layout - -\begin_deeper -\begin_layout Description -.r roots of the polynomial -\end_layout - -\begin_layout Description -.o order of the polynomial -\end_layout - -\begin_layout Description -.c polynomial coefficients as an array (also -\series bold -__array__() -\series default - ) -\end_layout - -\begin_layout Description -__call__(x) evaluate the polynomial at x (can be an array) -\end_layout - -\begin_layout Description -__getitem__(x) p[k] returns the coefficient on the kth power of x (backwards - from indexing the coefficient array) -\end_layout - -\end_deeper -\begin_layout MyCode ->>> p=poly1d([2,5,7]) -\newline ->>> print p -\newline -2 -\newline -2 x + 5 x + 7 -\newline ->>> print p*[1,3,1] -\newline -4 - 3 2 -\newline -2 x + 11 x + 24 x + 26 x + 7 -\newline ->>> print p([0.5,0.6,3]) -\newline -[ 10. - 10.72 40. - ] -\newline ->>> print p.r -\newline -[-1.25+1.3919j -1.25-1.3919j] -\end_layout - -\begin_layout Description -poly -\begin_inset LatexCommand index -name "poly" - -\end_inset - - (roots_or_matrix) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a sequence of coefficients representing a polynomial given the sequence - of roots as an argument. - Alternatively, if the argument is a 2-d array, then return the characteristic - polynomial of the matrix. - -\end_layout - -\begin_layout Description -roots -\begin_inset LatexCommand index -name "roots" - -\end_inset - - (poly) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the roots of the polynomial represented by coefficients in poly -\end_layout - -\begin_layout Description -polyint -\begin_inset LatexCommand index -name "polyint" - -\end_inset - - (poly, m=1, k=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an exact -\begin_inset Formula $m^{\textrm{th}}$ -\end_inset - --order integral of the polynomial represented in poly. - If k is None, then use 0 for the integrating constants. - Otherwise, use the scalars in the sequence k as integrating constants. - Also available as .integ (m=1,k=0) method of poly1d objects. -\end_layout - -\begin_deeper -\begin_layout Description -Example: -\begin_inset Formula \begin{eqnarray*} -p\left(x\right) & = & x^{2}+3x+4\\ -\int\int p\left(x\right) & = & \frac{1}{12}x^{4}+\frac{1}{2}x^{3}+2x^{2}+k_{0}x+k_{1}\end{eqnarray*} - -\end_inset - - -\end_layout - -\end_deeper -\begin_layout MyCode ->>> print polyint([1,3,4],m=2,k=[5,3]) -\newline -[ 0.0833 0.5 2. - 5. - 3. - ] -\end_layout - -\begin_layout Description -polyder -\begin_inset LatexCommand index -name "polyder" - -\end_inset - - (poly, m) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an exact -\begin_inset Formula $m^{\textrm{th}}$ -\end_inset - --order derivative of the polynomial represented in poly. - Also available as .deriv(m=1) method of poly1d objects. -\end_layout - -\begin_deeper -\begin_layout Description -Example: -\begin_inset Formula \begin{eqnarray*} -p\left(x\right) & = & x^{3}+2x^{2}+4x+3\\ -\frac{dp}{dx}\left(x\right) & = & 3x^{2}+4x+4\end{eqnarray*} - -\end_inset - - -\end_layout - -\end_deeper -\begin_layout MyCode ->>> polyder([1,2,4,3]) -\newline -array([3, 4, 4]) -\end_layout - -\begin_layout Description -polyadd -\begin_inset LatexCommand index -name "polyadd" - -\end_inset - - (p1, p2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Add the two polynomials represented by coefficients: -\begin_inset Formula $p_{1}\left(x\right)+p_{2}\left(x\right)$ -\end_inset - - -\end_layout - -\begin_layout Description -polysub -\begin_inset LatexCommand index -name "polysub" - -\end_inset - - (p1, p2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return coefficients for the polynomial found by subtracting the two polynomials - represented by -\begin_inset Formula $p_{1}$ -\end_inset - - and -\begin_inset Formula $p_{2}$ -\end_inset - -: -\begin_inset Formula $p_{1}\left(x\right)-p_{2}\left(x\right)$ -\end_inset - - -\end_layout - -\begin_layout Description -polymul -\begin_inset LatexCommand index -name "polymul" - -\end_inset - - (p1, p2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the coefficients for -\begin_inset Formula $p_{1}\left(x\right)p_{2}\left(x\right)$ -\end_inset - - -\end_layout - -\begin_layout Description -polydiv -\begin_inset LatexCommand index -name "polydiv" - -\end_inset - - (p1, p2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the quotient, -\begin_inset Formula $q\left(x\right)$ -\end_inset - -, and remainder, -\begin_inset Formula $r\left(x\right)$ -\end_inset - -, so that -\begin_inset Formula $p_{1}\left(x\right)=q\left(x\right)p_{2}\left(x\right)+r\left(x\right),$ -\end_inset - - with the order of -\begin_inset Formula $r\left(x\right)$ -\end_inset - - less than the order of -\begin_inset Formula $p_{2}\left(x\right).$ -\end_inset - - -\end_layout - -\begin_layout Description -polyval -\begin_inset LatexCommand index -name "polyval" - -\end_inset - - (p, y) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Evaluate the polynomial -\begin_inset Formula $p$ -\end_inset - - at -\begin_inset Formula $y$ -\end_inset - -. - The argument, -\begin_inset Formula $y$ -\end_inset - -, can be a number or an array or a polynomial object. - If x is a polynomial object, then polyval performs polynomial composition: - -\begin_inset Formula $p\left(y\left(x\right)\right),$ -\end_inset - - otherwise polyval computes the value of the polynomial at each -\begin_inset Formula $y$ -\end_inset - -. - Uses Horner's rule for evaluation, but this can still lead to numerical - instabilities for wildly fluctuating coefficients. -\end_layout - -\begin_layout Description -polyfit -\begin_inset LatexCommand index -name "polyfit" - -\end_inset - - (x,y,N) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Compute a best-fit polynomial in -\begin_inset Formula $x$ -\end_inset - - of order -\begin_inset Formula $N$ -\end_inset - -, to the data, -\begin_inset Formula $y$ -\end_inset - -, in the sense of minimizing averaged-squared error between the measurement - and the model. - Useful for quick line-fitting -\begin_inset LatexCommand index -name "fitting" - -\end_inset - -. - -\end_layout - -\begin_layout Section -Set Operations -\end_layout - -\begin_layout Standard -The set operations -\begin_inset LatexCommand index -name "set operations|(" - -\end_inset - - were kindly contributed by Robert Cimrman. - These set operations are based on sorting functions and all expect 1-d - sequences with unique elements with the exception of unique1d and intersect1d_n -u which will flatten N-d nested-sequences to 1-d arrays and can handle non-uniqu -e elements. - -\end_layout - -\begin_layout Description -unique1d -\begin_inset LatexCommand index -name "unique1d" - -\end_inset - - (arr, retindx=False) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the unique elements of arr as a 1-d array. - If retindx is True, then also return the indices, ind, such that arr.flat[ind] - is the set of unique values. -\end_layout - -\begin_layout Description -intersect1d -\begin_inset LatexCommand index -name "intersect1d" - -\end_inset - - (a1, a2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the (sorted) intersection of a1 and a2 which is an array containing - the elements of a1 that are also in a2. - -\end_layout - -\begin_layout Description -intersect1d_nu -\begin_inset LatexCommand index -name "intersect1d\\_nu" - -\end_inset - - (a1, a2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the (sorted) intersection of a1 and a2 but allow a1 and a2 to be - N-d arrays with non-unique elements. - Equivalent to intersect1d(unique1d(a1), unique1d(a2)). - -\end_layout - -\begin_layout Description -union1d -\begin_inset LatexCommand index -name "union1d" - -\end_inset - - (a1, a2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the (sorted) union of a1 and a2 which is an array containing elements - that are in either a1 or a2. - -\end_layout - -\begin_layout Description -setdiff1d -\begin_inset LatexCommand index -name "setdiff1d" - -\end_inset - - (a1, a2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the set-difference of a1 and a2 which is an array containing the - elements of a1 that are -\series bold -not -\series default - in a2. -\end_layout - -\begin_layout Description -setxor1d -\begin_inset LatexCommand index -name "setxor1d" - -\end_inset - - (a1, a2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the (sorted) set containing the exclusive-or of the arrays a1 and - a2. - The exclusive-or contains elements that are in a1 or in a2 as long as the - element is not in both a1 and a2. - -\end_layout - -\begin_layout Description -setmember1d -\begin_inset LatexCommand index -name "setmember1d" - -\end_inset - - (tocheck, set) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a Boolean 1-d array of the length of tocheck which is True whenever - that element is contained in set and false when it is not. - Equivalent -\begin_inset LatexCommand index -name "set operations|)" - -\end_inset - - to array([x in set for x in tocheck]). -\end_layout - -\begin_layout Section -Array construction using index tricks -\end_layout - -\begin_layout Standard -The functions and classes in this category make it simpler to construct - arrays. - -\end_layout - -\begin_layout Description -ix_ -\begin_inset LatexCommand index -name "ix\\_" - -\end_inset - - (*args) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This indexing cross function is useful for forming indexing arrays necessary - to select out the cross-product of -\begin_inset Formula $N$ -\end_inset - - 1-dimensional arrays. - Note that the default indexing does not do a cross-product (which might - be unexpected for someone coming from other programming environments). - The default indexing is more general purpose. - Using the ix_ constructor can produce the indexing arrays necessary to - select a cross-product. -\end_layout - -\begin_layout Description -mgrid [index expression] -\end_layout - -\begin_layout Description -\InsetSpace ~ - This is an instance of a class. - It can be used to construct a filled -\begin_inset Quotes eld -\end_inset - -mesh-grid -\begin_inset Quotes erd -\end_inset - - using slicing syntax. - -\end_layout - -\begin_layout Description -ogrid [index expression] -\end_layout - -\begin_layout Description -\InsetSpace ~ - This is similar to mgrid except it returns an open grid, so as to save - space and time. - The broadcasting rules will ensure that any universal function operating - on the grid will act as if the ogrid had been the result of mgrid. -\end_layout - -\begin_layout Description -r_ -\begin_inset LatexCommand index -name "r\\_" - -\end_inset - - [index expression] -\end_layout - -\begin_layout Description -\InsetSpace ~ - This is a simple way to build up arrays quickly. - There are two use cases. - 1) If the index expression contains comma separated arrays, then stack - them along their first axis. - 2) If the index expression contains slice notation or scalars then create - a 1-d array with a range indicated by the slice notation. - In other-words the slice syntax start:stop:step is equivalent to arange(start, - stop, step) inside of the brackets. - However, if step is an imaginary number (i.e. - 100j) then its integer portion is interpreted as a number-of-points desired - and the start and stop are inclusive. - In other words start:stop:step -\family typewriter -j -\family default - is interpreted as linspace(start, stop, step, endpoint=1) inside of the - brackets. - After expansion of slice notation, all comma separated sequences are concatenat -ed together. -\end_layout - -\begin_layout Description -\InsetSpace ~ - Optional character strings placed as the first element of the index expression - can be used to change the output. - The strings 'r' or 'c' result in matrix output. - If the result is 1-d and 'r' is specified a -\begin_inset Formula $1\times N$ -\end_inset - - (row) matrix is produced. - If the result is 1-d and 'c' is specified, then a -\begin_inset Formula $N\times1$ -\end_inset - - (column) matrix is produced. - If the result is 2-d then both provide the same matrix result. - -\end_layout - -\begin_layout MyCode ->>> print r_[-1:1:9j,[0]*10,5,6] -\newline -[-1. - -0.75 -0.5 -0.25 0. - 0.25 0.5 0.75 1. - 0. - 0. -\newline - 0. - 0. - 0. - 0. - 0. - 0. - 0. - 0. - 5. - 6. - ] -\newline ->>> print r_['r',1,2,5,6] -\newline -[[1 2 5 6]] -\newline ->>> print r_['c',1,2,5,6] -\newline -[[1] -\newline - [2] -\newline - - [5] -\newline - [6]] -\end_layout - -\begin_layout Description -\InsetSpace ~ - A string integer specifies which axis to stack multiple comma separated - arrays along. - -\end_layout - -\begin_layout MyCode ->>> a=arange(6).reshape(2,3) -\newline ->>> r_[a,a] -\newline -array([[0, 1, 2], -\newline - [3, 4, 5], -\newline - - [0, 1, 2], -\newline - [3, 4, 5]]) -\newline ->>> r_['-1',a,a] -\newline -array([[0, 1, 2, 0, 1, - 2], -\newline - [3, 4, 5, 3, 4, 5]]) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A string of two comma-separated integers allows indication of the minimum - number of dimensions to force each entry into as the second integer (the - axis to concatenate along is still the first integer). - -\end_layout - -\begin_layout MyCode ->>> r_['0,2',[1,2,3],[4,5,6]] -\newline -array([[1, 2, 3], -\newline - [4, 5, 6]]) -\newline ->>> r_['1,2',[1, -2,3],[4,5,6]] -\newline -array([[1, 2, 3, 4, 5, 6]]) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A string with three comma-separated integers allows specification of the - axis to concatenate along, the minimum number of dimensions to force the - entries to, and which axis should contain the start of the arrays which - are less than the specified number of dimensions. - In other words the third integer allows you to specify where the the 1's - should be placed in the shape of the arrays that have their shapes upgraded. - By default, they are placed in the front of the shape tuple. - The third argument allows you to specify where the start of the array should - be instead. - Thus, a third argument of '0' would place the 1's at the end of the array - shape. - Negative integers specify where in the new shape tuple the last dimension - of upgraded arrays should be placed, so the default is '-1'. -\end_layout - -\begin_layout MyCode ->>> r_['0,2,0', [1,2,3], [4,5,6]] -\newline -array([[1], -\newline - [2], -\newline - [3], -\newline - - [4], -\newline - [5], -\newline - [6]]) -\newline ->>> r_['1,2,0', [1,2,3], [4,5,6]] -\newline -array([[1, - 4], -\newline - [2, 5], -\newline - [3, 6]]) -\end_layout - -\begin_layout Description -c_ -\begin_inset LatexCommand index -name "c\\_" - -\end_inset - - [index_expression] -\end_layout - -\begin_layout Description -\InsetSpace ~ - This is short-hand for r_['-1,2,0', index_expression] useful because of - its common occurence. - In particular, arrays will be stacked along their last axis after being - upgraded to at least 2-d with 1's post-pended to the shape (column vectors - made out of 1-d arrays). - -\end_layout - -\begin_layout Section -Other indexing devices -\end_layout - -\begin_layout Description -index_exp -\begin_inset LatexCommand index -name "index\\_exp" - -\end_inset - - [index expression] -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a tuple of Python objects that implements the index expression and - can be modified and placed in any other index expression. - -\end_layout - -\begin_layout MyCode ->>> index_exp[2:5,...,4,::-1] -\newline -(slice(2, 5, None), Ellipsis, 4, slice(None, None, - -1)) -\end_layout - -\begin_layout Description -s_ -\begin_inset LatexCommand index -name "s\\_" - -\end_inset - - [index expression] -\end_layout - -\begin_layout Description -\InsetSpace ~ - Translate index expressions into the equivalent Python objects. - This is similar to index_expression except a tuple is not always returned. - For example: -\end_layout - -\begin_layout MyCode ->>> s_[1:10] -\newline -slice(1, 10, None) -\newline ->>> s_[1:10,-3:4:0.5] -\newline -(slice(1, 10, None), slice(-3, - 4, 0.5)) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This provides a standard way to construct index expressions to pass to - functions and methods because Python does not allow slice expressions anywhere - except for inside brackets. - -\end_layout - -\begin_layout Description -ndindex -\begin_inset LatexCommand index -name "ndindex" - -\end_inset - - (*seq) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A sequence of -\begin_inset Formula $N$ -\end_inset - - integers are passed in as separate arguments. - These integers are used as the upper boundaries of an -\begin_inset Formula $N$ -\end_inset - --dimensional counter that starts at 0. - The object returned is an iterator that implements the counter. -\end_layout - -\begin_layout MyCode ->>> for index in ndindex(3,3,2): -\newline -... - print index, -\newline -(0, 0, 0) (0, 0, 1) (0, 1, 0) (0, 1, 1) (0, 2, 0) (0, 2, - 1) (1, 0, 0) (1, 0, 1) (1, 1, 0) (1, 1, 1) (1, 2, 0) (1, 2, 1) (2, 0, 0) - (2, 0, 1) (2, 1, 0) (2, 1, 1) (2, 2, 0) (2, 2, 1) -\end_layout - -\begin_layout Description -unravel_index -\begin_inset LatexCommand index -name "unravel\\_index" - -\end_inset - - (indx, dims) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert a flat index, indx, into an index tuple for an array of the given - shape. - Keep in mind that it may be more convenient to use indx with a.flat, then - to unravel the index. -\end_layout - -\begin_layout Section -Two-dimensional functions -\end_layout - -\begin_layout Standard -These functions all deal with or return two dimensional arrays. -\end_layout - -\begin_layout Description -eye -\begin_inset LatexCommand index -name "eye" - -\end_inset - - ( -\begin_inset Formula $N$ -\end_inset - -, -\begin_inset Formula $M$ -\end_inset - -=None, -\begin_inset Formula $k$ -\end_inset - -=0, dtype=float) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an -\begin_inset Formula $N\times M$ -\end_inset - - array of the given type with ones down the -\begin_inset Formula $k^{\textrm{th}}$ -\end_inset - - diagonal. - If -\begin_inset Formula $M$ -\end_inset - - is None, it defaults to -\begin_inset Formula $N$ -\end_inset - -. - Alternatively, if -\begin_inset Formula $M$ -\end_inset - - is a valid data type, then it becomes the data-type used. - -\end_layout - -\begin_layout Description -vander -\begin_inset LatexCommand index -name "vander" - -\end_inset - - ( -\begin_inset Formula $x$ -\end_inset - -, -\begin_inset Formula $N$ -\end_inset - -=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - The Vandermonde matrix of vector, -\begin_inset Formula $x$ -\end_inset - -. - The -\begin_inset Formula $i^{\textrm{th}}$ -\end_inset - - column of the return matrix is the -\begin_inset Formula $m_{i}^{\textrm{th}}$ -\end_inset - - power of -\begin_inset Formula $x$ -\end_inset - - where -\begin_inset Formula $m_{i}=N-i-1$ -\end_inset - -. - If -\begin_inset Formula $N$ -\end_inset - - is None, it defaults to the length of -\begin_inset Formula $x$ -\end_inset - -. - -\end_layout - -\begin_layout MyCode ->>> vander([1,2,3,4,5],3) -\newline -array([[ 1, 1, 1], -\newline - [ 4, 2, 1], -\newline - - [ 9, 3, 1], -\newline - [16, 4, 1], -\newline - [25, 5, 1]]) -\end_layout - -\begin_layout Description -diag -\begin_inset LatexCommand index -name "diag" - -\end_inset - - ( -\begin_inset Formula $v$ -\end_inset - -, -\begin_inset Formula $k$ -\end_inset - -=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the -\begin_inset Formula $k^{\textrm{th}}$ -\end_inset - - diagonal if -\begin_inset Formula $v$ -\end_inset - - is a 2-d array, or returns an array with -\begin_inset Formula $v$ -\end_inset - - as the -\begin_inset Formula $k^{\textrm{th}}$ -\end_inset - - diagonal if -\begin_inset Formula $v$ -\end_inset - - is a 1-d array. - -\end_layout - -\begin_layout MyCode ->>> diag(arange(12).reshape(4,3),k=1) -\newline -array([1, 5]) -\newline ->>> diag([1,4,5,7],k=-1) -\newline -array([ -[0, 0, 0, 0, 0], -\newline - [1, 0, 0, 0, 0], -\newline - [0, 4, 0, 0, 0], -\newline - [0, - 0, 5, 0, 0], -\newline - [0, 0, 0, 7, 0]]) -\end_layout - -\begin_layout Description -diagflat -\begin_inset LatexCommand index -name "diagflat" - -\end_inset - - ( -\begin_inset Formula $v$ -\end_inset - -, -\begin_inset Formula $k$ -\end_inset - -=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a 2-d array (of the same class as -\begin_inset Formula $v$ -\end_inset - -) by placing a flattened version of -\begin_inset Formula $v$ -\end_inset - - along the -\begin_inset Formula $k^{\textrm{th}}$ -\end_inset - - diagonal. - This differs from diag in that it only creates 2-d arrays and will work - with any object that can be converted to an array (returning that object - if it also defines an __array_wrap__ method). - -\end_layout - -\begin_layout Description -fliplr -\begin_inset LatexCommand index -name "fliplr" - -\end_inset - - (m) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the array, m, with rows preserved and columns reversed in the left-right - direction. - For m.ndim > 2, this works on the first two dimensions (equivalent to m[:,::-1]) -\end_layout - -\begin_layout Description -flipud -\begin_inset LatexCommand index -name "flipud" - -\end_inset - - (m) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the array, m, with columns preserved and rows reversed in the up-down - direction. - For m.ndim > 1, this works on the first dimension (equivalent to m[::-1]) -\end_layout - -\begin_layout Description -rot90 -\begin_inset LatexCommand index -name "rot90" - -\end_inset - - (m, k=1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Rotate the first two dimensions of an array, m, by k*90 degrees in the - counterclockwise direction. - Must have m.ndim >=2. -\end_layout - -\begin_layout Description -tri -\begin_inset LatexCommand index -name "tri" - -\end_inset - - ( -\begin_inset Formula $N$ -\end_inset - -, -\begin_inset Formula $M$ -\end_inset - -= -\begin_inset Formula $N$ -\end_inset - -, k=0, dtype=aint) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct an -\begin_inset Formula $N\times M$ -\end_inset - - array where all the diagonals starting from the lower left corner up to - the -\begin_inset Formula $\textrm{k}^{\textrm{th}}$ -\end_inset - - diagonal are all ones. - -\end_layout - -\begin_layout Description -triu -\begin_inset LatexCommand index -name "triu" - -\end_inset - - (m, k=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a upper-triangular 2-d array from m with all the elements below - the -\begin_inset Formula $\textrm{k}^{\textrm{th}}$ -\end_inset - - diagonal set to 0. - -\end_layout - -\begin_layout Description -tril -\begin_inset LatexCommand index -name "tril" - -\end_inset - - (m, k=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a lower-triangular 2-d array from m with all the elements above - the -\begin_inset Formula $\textrm{k}^{\textrm{th}}$ -\end_inset - - diagonal set to 0. - -\end_layout - -\begin_layout Description -mat -\begin_inset LatexCommand index -name "mat" - -\end_inset - - (data, dtype=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct a matrix from data. - Alias for numpy.asmatrix. - The calling syntax is the same as that function. - Note that data can be a string in which case the routine uses spaces and - semi-colons to construct the matrix: -\end_layout - -\begin_layout MyCode ->>> mat('1 3 4; 5 6 9') -\newline -matrix([[1, 3, 4], -\newline - [5, 6, 9]]) -\end_layout - -\begin_layout Description -bmat -\begin_inset LatexCommand index -name "bmat" - -\end_inset - - (obj, ldict=None, gdict=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Build a matrix from sub-blocks. - This is similar to mat, except the items in the nested-sequence, or string, - should be appropriately shaped 2-d arrays. - If obj is a string, then ldict and gdict can be used to alter where the - names represented in the string are found (default is current local and - global namespace). - -\end_layout - -\begin_layout MyCode ->>> A=mat('1 2; 3 4'); B=mat('5 6; 7 8') -\newline ->>> bmat('A, B; B, A') -\newline -matrix([[1, - 2, 5, 6], -\newline - [3, 4, 7, 8], -\newline - [5, 6, 1, 2], -\newline - [7, 8, 3, 4]]) -\end_layout - -\begin_layout Section -More data type functions -\end_layout - -\begin_layout Description -issubclass_ -\begin_inset LatexCommand index -name "issubclass\\_" - -\end_inset - - (arg1, arg2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns True if arg1 is a sub-class of arg2, otherwise returns False. - Similar to the built-in issubclass except it does not raise an error if - arg1 or arg2 are not types. - -\end_layout - -\begin_layout Description -issubdtype -\begin_inset LatexCommand index -name "issubdtype" - -\end_inset - - (arg1, arg2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns True if the type-object of the data-type represented by arg1 is - a sub class of the type-object of the data-type represented by arg2. -\end_layout - -\begin_layout Description -iscomplexobj -\begin_inset LatexCommand index -name "iscomplexobj" - -\end_inset - - (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a single True or False value depending on whether or not obj would - be interpreted as an array with complex-valued data type. -\end_layout - -\begin_layout Description -isrealobj -\begin_inset LatexCommand index -name "isrealobj" - -\end_inset - - (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a single True or False value depending on whether or not obj would - be interpreted as an array with real-valued data type. -\end_layout - -\begin_layout Description -isscalar -\begin_inset LatexCommand index -name "isscalar" - -\end_inset - - (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - True if obj is a scalar (an instance of an array data type, or a standard - Python scalar type). - There is also a sequence of called ScalarType defined in NumPy, so that - this can also be tested as type(obj) in numpy.ScalarType. - -\end_layout - -\begin_layout Description -nan_to_num -\begin_inset LatexCommand index -name "nan\\_to\\_num" - -\end_inset - - (arr) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns an array with non-finite numbers changed to finite numbers. - The mapping converts -\family typewriter -nan -\family default - to 0, -\family typewriter -inf -\family default - to the maximum value for the data type and -\family typewriter --inf -\family default - to the minimum value for the data type. -\end_layout - -\begin_layout Description -real_if_close -\begin_inset LatexCommand index -name "real\\_if\\_close" - -\end_inset - - (arr, tol=100) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a real arr if arr is complex with imaginary parts less than some - tolerance. - If tol > 1, then it represents a multiplicative factor on the value of - epsilon for the data type of arr. -\end_layout - -\begin_layout Description -cast -\begin_inset LatexCommand index -name "cast" - -\end_inset - - [dtype_or_alias] (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Cast obj to an array of the given type. - This is equivalent to array(obj, copy=0).astype(dtype_or_alias). - When one type is cast to another in this fashion, a very low-level operation - takes place. - Typically, you get what your C-compiler produces for the cast, but notice - that in the case of casting to a bool type, the value becomes either a - 0 or a 1. - -\end_layout - -\begin_layout MyCode ->>> cast[bool]([1,2,0,4,0]).astype(int) -\newline -array([1, 1, 0, 1, 0]) -\end_layout - -\begin_layout Description -asfarray -\begin_inset LatexCommand index -name "asfarray" - -\end_inset - - (a, dtype=float) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an array of inexact data type (floating or complexfloating). - -\end_layout - -\begin_layout Description -mintypecode -\begin_inset LatexCommand index -name "mintypecode" - -\end_inset - - (typechars, typeset='GDFgdf', default='d') -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a minimum data type character from typeset that handles all given - typechars. - The returned type character must correspond to the data type of the smallest - size such that an array of the returned type can handle the data from an - array of type t for each t in typechars. - If the typechars does not intersect with the typeset, then default is returned. - If an element of typechars is not a string, then t=asarray(t).dtypechar - is applied. -\end_layout - -\begin_layout Description -finfo -\begin_inset LatexCommand index -name "finfo" - -\end_inset - - (dtype) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This class allows exploration of the details of how a floating point number - is represented in the computer. - It can be instantiated by an inexact data type object (or an alias for - one). - Complex-valued data types are acceptable and are equivalent to their real-value -d counterparts. - The attributes of the class are -\end_layout - -\begin_deeper -\begin_layout Description -nmant The number of bits in the floating point mantissa, or fraction. -\end_layout - -\begin_layout Description -nexp The number of bits in the floating point exponent -\end_layout - -\begin_layout Description -machep Exponent of the smallest (most negative) power of 2 that when added - to 1.0 gives something different than 1.0. - -\end_layout - -\begin_layout Description -eps Floating point precision: 2**machep. -\end_layout - -\begin_layout Description -precision Number of decimal digits of precision: int(-log10(eps)) -\end_layout - -\begin_layout Description -resolution 10**(-precision) -\end_layout - -\begin_layout Description -negep Exponent of the smallest power of 2 that, subtracted from 1.0, gives - something different than 1.0. -\end_layout - -\begin_layout Description -epsneg Floating point precision: 2**negep. -\end_layout - -\begin_layout Description -minexp Smallest (most negative) power of 2 producing -\begin_inset Quotes eld -\end_inset - -normal -\begin_inset Quotes erd -\end_inset - - numbers (no leading zeros in the mantissa). - -\end_layout - -\begin_layout Description -tiny The smallest (in magnitude) usable floating point number equal to 2**minexp. -\end_layout - -\begin_layout Description -maxexp Smallest (positive) power of 2 that causes overflow. -\end_layout - -\begin_layout Description -max The largest usable floating value: (1-epsneg)* (2**maxep) -\end_layout - -\begin_layout Description -min The most negative usable floating value: -max -\end_layout - -\end_deeper -\begin_layout Description -\InsetSpace ~ - The most useful attributes are probably eps, max, min, and tiny. -\end_layout - -\begin_layout Section -Functions that behave like ufuncs -\end_layout - -\begin_layout Standard -These functions are Python functions built on top of universal functions - (ufuncs) and also take optional output arguments. - They broadcast like ufuncs but do not have ufunc attributes. -\end_layout - -\begin_layout Description -fix -\begin_inset LatexCommand index -name "fix" - -\end_inset - - (x, y=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Round x to the nearest integer towards zero. -\end_layout - -\begin_layout Description -isneginf -\begin_inset LatexCommand index -name "isneginf" - -\end_inset - - (x, y=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - True if -\begin_inset Formula $x=-\infty$ -\end_inset - -. - Should be the same as -\family typewriter -x==NumPy.NINF -\family default -. -\end_layout - -\begin_layout Description -isposinf -\begin_inset LatexCommand index -name "isposinf" - -\end_inset - - (x, y=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - True if -\begin_inset Formula $x=+\infty.$ -\end_inset - - Should be the same as -\family typewriter -x==NumPy.PINF -\family default -. -\end_layout - -\begin_layout Description -log2 -\begin_inset LatexCommand index -name "log2" - -\end_inset - - (x, y=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Compute the logarithm to the base 2 of -\begin_inset Formula $x.$ -\end_inset - - An optional output array may be provided. -\end_layout - -\begin_layout Section -Miscellaneous Functions -\end_layout - -\begin_layout Standard -Some miscellaneous functions are available in NumPy which are included largely - for compatibility with MLab of the old Numeric package. - One notable difference, however, is that due to a separate implementation - of the modified Bessel function, the kaiser window is available without - needing a separate library. - -\end_layout - -\begin_layout Description -sinc -\begin_inset LatexCommand index -name "sinc" - -\end_inset - - ( -\begin_inset Formula $x$ -\end_inset - -) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Compute the sinc function for -\begin_inset Formula $x$ -\end_inset - - which can be a scalar or array. - The sinc is defined as -\begin_inset Formula $y=\textrm{sinc}\left(x\right)=\frac{\sin\left(\pi x\right)}{\pi x}$ -\end_inset - - with the caveat that the limiting value (1.0) of the ratio is taken for - -\begin_inset Formula $x=0.$ -\end_inset - - -\end_layout - -\begin_layout Description -i0 -\begin_inset LatexCommand index -name "i0" - -\end_inset - - ( -\begin_inset Formula $x$ -\end_inset - -) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Modified Bessel function of the first kind of order 0. - Needed to compute the kaiser window. - The modified Bessel function is defined as -\begin_inset Formula \[ -I_{0}\left(x\right)=\frac{1}{\pi}\int_{0}^{\pi}e^{x\cos\theta}d\theta=\sum_{k=0}^{\infty}\frac{x^{2k}}{4^{k}\left(k!\right)^{2}}.\] - -\end_inset - - -\end_layout - -\begin_layout Description -blackman -\begin_inset LatexCommand index -name "blackman" - -\end_inset - - ( -\begin_inset Formula $M$ -\end_inset - -) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct an -\begin_inset Formula $M$ -\end_inset - --point Blackman smoothing window which is sequence of length -\begin_inset Formula $M$ -\end_inset - - with values given for -\begin_inset Formula $n=0\ldots M-1$ -\end_inset - - by -\begin_inset Formula \[ -w\left[n\right]=0.42-0.5\cos\left(2\pi\frac{n}{M-1}\right)+0.08\cos\left(4\pi\frac{n}{M-1}\right).\] - -\end_inset - - -\end_layout - -\begin_layout Description -bartlett -\begin_inset LatexCommand index -name "bartlett" - -\end_inset - - ( -\begin_inset Formula $M$ -\end_inset - -) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct an -\begin_inset Formula $M$ -\end_inset - --point Bartlett (triangular) smoothing window as -\begin_inset Formula \[ -w\left[n\right]=\left\{ \begin{array}{cc} -2\frac{n}{M-1} & 0\leq n\leq\frac{M-1}{2},\\ -2-2\frac{n}{M-1} & \frac{M-1}{2}<n\leq M-1.\end{array}\right.\] - -\end_inset - - -\end_layout - -\begin_layout Description -hanning -\begin_inset LatexCommand index -name "hanning" - -\end_inset - - ( -\begin_inset Formula $M$ -\end_inset - -) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct an -\begin_inset Formula $M$ -\end_inset - --point Hanning smoothing window defined as -\begin_inset Formula \[ -w\left[n\right]=\frac{1}{2}-\frac{1}{2}\cos\left(2\pi\frac{n}{M-1}\right).\] - -\end_inset - - -\end_layout - -\begin_layout Description -hamming -\begin_inset LatexCommand index -name "hamming" - -\end_inset - - ( -\begin_inset Formula $M$ -\end_inset - -) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct an -\begin_inset Formula $M$ -\end_inset - --point Hamming smoothing window defined for -\begin_inset Formula $n=0\ldots M-1$ -\end_inset - - as -\begin_inset Formula \[ -w\left[n\right]=0.54-0.46\cos\left(2\pi\frac{n}{M-1}\right).\] - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - All of the windowing functions are smoothing windows that attempt to balance - the inherent trade off between side-lobe height (ringing) and main-lobe - width (resolution) in the frequency domain. - A rectangular window has the smallest main-lobe width but the largest side-lobe - height. - A windowing (tapering) function tries to can help trade off main-lobe width - By sacrificing a little in resolution using a windowing function These - windows can be used to smooth data using the convolve function. - Figure -\begin_inset LatexCommand ref -reference "cap:window functions" - -\end_inset - - shows the windowing functions described so far and their time- and frequency-do -main behavior. - -\end_layout - -\begin_layout Standard -\begin_inset Float figure -wide false -sideways false -status open - -\begin_layout Standard -\begin_inset Graphics - filename Figures/fig1.eps - lyxscale 48 - width 49line% - keepAspectRatio - -\end_inset - - -\hfill - -\begin_inset Graphics - filename Figures/fig2.eps - lyxscale 48 - width 49line% - keepAspectRatio - -\end_inset - - -\end_layout - -\begin_layout Standard -\begin_inset Caption - -\begin_layout Standard -\begin_inset LatexCommand label -name "cap:window functions" - -\end_inset - -Blackman, Bartlett, Hanning, and Hamming windows in the time and frequency - domain showing the trade-off between main-lobe width and side-lobe height - (Figures made with matplotlib). -\end_layout - -\end_inset - - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The trade-off between main-lobe and side-lobe has been studied extensively. - Solutions that maximize energy in the main-lobe compared to energy in the - side-lobes can be found by finding an eigenvector which can be expensive - to compute for large window sizes. - A good approximation to these prolate-spheroidal windows is the Kaiser - window. - -\end_layout - -\begin_layout Description -kaiser -\begin_inset LatexCommand index -name "kaiser" - -\end_inset - - ( -\begin_inset Formula $M$ -\end_inset - -, -\begin_inset Formula $\beta$ -\end_inset - -) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct an -\begin_inset Formula $M$ -\end_inset - --point Kaiser smoothing window. - The -\begin_inset Formula $\beta$ -\end_inset - - parameter controls the width of the window (and the frequency-domain side-lobe - height and main-lobe width). - The window is defined as -\begin_inset Formula \[ -w\left[n\right]=\frac{1}{I_{0}\left(\beta\right)}I_{0}\left(\beta\sqrt{1-\frac{\left(2n-M-1\right)^{2}}{\left(M-1\right)^{2}}}\right).\] - -\end_inset - - There is an empirical relationship between -\begin_inset Formula $\beta$ -\end_inset - - and the side-lobe height which can be used in FIR filter design. - To achieve a side-lobe height of -\begin_inset Formula $-\alpha$ -\end_inset - -dB, the -\begin_inset Formula $\beta$ -\end_inset - - parameter is -\begin_inset Formula \[ -\beta=\left\{ \begin{array}{cc} -0.1002\left(\alpha-8.7\right) & \alpha>50,\\ -0.5842\left(\alpha-21\right)^{0.4}+0.07886\left(\alpha-21\right) & 21\leq\alpha\leq50,\\ -0 & \alpha<21.\end{array}\right.\] - -\end_inset - - The length -\begin_inset Formula $M$ -\end_inset - - of the window determines the transition width. - To obtain a transition width of -\begin_inset Formula $\Delta\omega$ -\end_inset - -rad/s the window-length must be at least: -\begin_inset Formula \[ -M=\frac{\alpha-8}{2.285\Delta\omega}+1.\] - -\end_inset - - -\end_layout - -\begin_layout Section -Utility functions -\end_layout - -\begin_layout Description -set_numeric_ops -\begin_inset LatexCommand index -name "set\\_numeric\\_ops" - -\end_inset - - (<op1>=func1, <op2>=func2, ...) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This function can be used to alter the operations used for internal array - calculations and array special methods. - Replaceable operations (and possible entries for <opN>) are add, subtract, - multiply, divide, remainder, power, sqrt, negative, absolute, invert, left_shif -t, right_shift, bitwise_and, bitwise_or, less, less_equal, equal, not_equal, - greater, greater_equal, floor_divide, true_divide, logical_or, logical_and, - floor, ceil, maximum, and minimum. - The example code below changes, then restores, the old Numeric behavior - of remainder (which was changed because it was not consistent with Python). - -\end_layout - -\begin_layout MyCode ->>> a = array([-3.,-2,-1,0,1,2,3]) -\newline ->>> print a % -2.1 -\newline -[-0.9 -2. - -1. - 0. - -1.1 -0.1 -1.2] -\newline ->>> oldops = set_numeric_ops(remainder=fmod) -\newline ->>> print a % - -2.1 -\newline -[-0.9 -2. - -1. - 0. - 1. - 2. - 0.9] -\newline ->>> newops = set_numeric_ops(**oldops) -\newline ->>> print a % -2.1 -\newline -[-0.9 -2. - -1. - 0. - -1.1 -0.1 -1.2] -\newline ->>> print 3 % -2.1 # comparison -\newline --1.2 -\end_layout - -\begin_layout Description -get_include -\begin_inset LatexCommand index -name "get\\_include" - -\end_inset - - () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the directory that contains the numpy include files. - The numpy.distutils automatically includes this directory in building extensions. - -\end_layout - -\begin_layout Description -get_numarray_include -\begin_inset LatexCommand index -name "get\\_numarray\\_include" - -\end_inset - - (type=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the directory that contains the numarray compatible C-API include - files. - If type is not None, then return a list containing both the numarray compatible - C-API include files and the numpy include files. - The latter form is only needed when building an extension without the use - of numpy.distutils. - -\end_layout - -\begin_layout Description -deprecate -\begin_inset LatexCommand index -name "deprecate" - -\end_inset - - (func, oldname, newname) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a deprecated function named 'oldname' that has been replaced by - 'newname'. - This new deprecated function issues a warning before calling the old function. - The name and docs of the function are also updated to be oldname instead - of the name that func has. - Example usage. - If you want to deprecate the function named 'old' in favor of a new function - named 'new' which has the same calling conention then this could be done - with the assignment -\end_layout - -\begin_deeper -\begin_layout LyX-Code -old = deprecate(new, 'old', 'new') -\end_layout - -\end_deeper -\begin_layout Chapter -Scalar objects -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand label -name "cha:Scalar-objects" - -\end_inset - - -\end_layout - -\begin_layout Quotation -Never worry about numbers. - Help one person at a time, and always start with the person nearest you. -\end_layout - -\begin_layout Right Address ---- -\emph on -Mother Teresa -\end_layout - -\begin_layout Quotation -A great many people think they are thinking when they are merely rearranging - their prejudices. -\end_layout - -\begin_layout Right Address ---- -\emph on -William James -\end_layout - -\begin_layout Standard -One -\begin_inset LatexCommand index -name "array scalars|(" - -\end_inset - - important new feature of NumPy is the addition of a new scalar object for - each of the 21 different data types that an array can have. - Do not confuse these scalar objects with the data-type objects. - There is one data-type object. - It contains a -\family typewriter -.type -\family default - attribute which points to the Python type that each element of the array - will be returned as -\begin_inset Foot -status open - -\begin_layout Standard -with the exception of object data-types which return the underlying object - and not a -\begin_inset Quotes eld -\end_inset - -scalar -\begin_inset Quotes erd -\end_inset - - type. - -\end_layout - -\end_inset - -. - The built-in data-types point have . -\family typewriter -type -\family default - attributes that point to these scalar objects. - Five (or six) of these new scalar objects are essentially equivalent to - fundamental Python types and therefore inherit from them as well as from - the generic array scalar type. - The bool_ data type is very similar to the Python BooleanType but does - not inherit from it because Python's BooleanType does not allow itself - to be inherited from, and on the C-level the size of the actual bool_ data - is not the same as a Python Boolean scalar. - Table -\begin_inset LatexCommand ref -reference "cap:Array-scalar-types" - -\end_inset - - shows which array scalars inherit from basic Python types. - -\end_layout - -\begin_layout Standard -\begin_inset Float table -wide false -sideways false -status open - -\begin_layout Standard -\begin_inset Caption - -\begin_layout Standard -\begin_inset LatexCommand label -name "cap:Array-scalar-types" - -\end_inset - -Array scalar types that inherit from basic Python types. - The intc array data type might also inherit from the IntType if it has - the same number of bits as the int_ array data type on your platform. -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -\align center -\begin_inset Tabular -<lyxtabular version="3" rows="6" columns="2"> -<features> -<column alignment="center" valignment="top" leftline="true" width="0"> -<column alignment="center" valignment="top" leftline="true" rightline="true" width="0"> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -array data type -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Python type -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -int_ -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -IntType -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -float_ -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -FloatType -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -complex_ -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -ComplexType -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -str_ -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -StringType -\end_layout - -\end_inset -</cell> -</row> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -unicode_ -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -UnicodeType -\end_layout - -\end_inset -</cell> -</row> -</lyxtabular> - -\end_inset - - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -The array scalars have the same attributes and methods as arrays and live - in a hierarchy of scalar types so they can be easily classified based on - their type objects. - However, because array scalars are immutable, and attributes change intrinsic - properties of the object, the -\series bold -array scalar attributes are not settable -\series default -. -\end_layout - -\begin_layout Standard -Array scalars can be detected using the hierarchy of data types. - For example, -\family typewriter -isinstance(val, generic) -\family default - will return True if val is an array scalar object. - Alternatively, what kind of array scalar is present can be determined using - other members of the data type hierarchy. - Thus, for example -\family typewriter -isinstance(val, complexfloating) -\family default - will return True if val is a complex valued type, while -\family typewriter -isinstance(val, flexible) -\family default - will return true if val is one of the flexible itemsize array types (string, - unicode, void). - -\end_layout - -\begin_layout Warning -The bool_ type is not a subclass of the int_ type (the bool_ type is not - even a number type). - This is different than Python's default implementation of bool as a sub-class - of int. -\end_layout - -\begin_layout Section -Attributes of array scalars -\end_layout - -\begin_layout Standard -The array scalar objects have an -\family typewriter -__array_priority__ -\family default - of NPY_SCALAR_PRIORITY (-1,000,000.0). - They also do not (yet) have a ctypes attribute. - Otherwise, they share the same attributes as arrays: -\end_layout - -\begin_layout Description -flags -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns True for CONTIGUOUS, OWNDATA, FORTRAN, and ALIGNED. - Always returns False for WRITEABLE, and UPDATEIFCOPY. - -\end_layout - -\begin_layout Description -shape -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns (). -\end_layout - -\begin_layout Description -strides -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns (). -\end_layout - -\begin_layout Description -ndim -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns 0. -\end_layout - -\begin_layout Description -data -\end_layout - -\begin_layout Description -\InsetSpace ~ - A read-only buffer object of size self.itemsize, -\end_layout - -\begin_layout Description -size -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return 1. -\end_layout - -\begin_layout Description -itemsize -\end_layout - -\begin_layout Description -\InsetSpace ~ - The number of bytes this scalar requires. -\end_layout - -\begin_layout Description -base -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns None. -\end_layout - -\begin_layout Description -dtype -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns data type descriptor corresponding to this array scalar. - -\end_layout - -\begin_layout Description -real -\end_layout - -\begin_layout Description -\InsetSpace ~ - The real part of the scalar. -\end_layout - -\begin_layout Description -imag -\end_layout - -\begin_layout Description -\InsetSpace ~ - The imaginary part of the scalar (or 0 if this is real). -\end_layout - -\begin_layout Description -flat -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a 1-d iterator object (of size 1). -\end_layout - -\begin_layout Description -T -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a reference to self. -\end_layout - -\begin_layout Description -__array_interface__ -\end_layout - -\begin_layout Description -\InsetSpace ~ - The Python-side to the array interface. - -\end_layout - -\begin_layout Description -__array_struct__ -\end_layout - -\begin_layout Description -\InsetSpace ~ - The C-side to the array interface -\end_layout - -\begin_layout Description -__array_priority__ -\end_layout - -\begin_layout Description -\InsetSpace ~ - -100.0 (very low-priority). - -\end_layout - -\begin_layout Description -__array_wrap__ (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns an array scalar from an array -\end_layout - -\begin_layout Section -Methods of array scalars -\end_layout - -\begin_layout Standard -Array scalars have exactly the same methods as arrays. - The default behavior of these methods is to internally convert the scalar - to an equivalent 0-dimensional array and to call the corresponding array - method. - The exceptions to these rules are given below. - In addition, math operations on array scalars are defined so that the same - hardware flags are set and used to interpret the results as for ufunc. - Therefore the error state used for ufuncs also carries over to the math - on array scalars. -\end_layout - -\begin_layout Description -__new__ (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - The default behavior is to return a new array or array scalar by calling - array(obj) with the corresponding data type. - There are two situations when this default behavior is delayed until another - approach is tried. - First, when the array scalar type inherits from a Python type, then the - Python types new method is called first and the default method is called - only if that approach fails. - The second situation is for the -\family typewriter -void -\family default - data type where a single integer-like argument will cause a void scalar - of that size to be created and initialized to 0. - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Notice that because array(obj) is called for new, if obj is a nested sequence, - then the return object could actually be an -\family typewriter -ndarray -\family default -. - Thus, arrays of the correct type can also be created by calling the array - data type name directly: -\end_layout - -\begin_layout MyCode ->>> uint32([[5,6,7,8],[1,2,3,4]]) -\newline -array([[5, 6, 7, 8], -\newline - [1, 2, 3, 4]], - dtype=uint32) -\end_layout - -\begin_layout Description -__array__ (<None>) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns a 0-dimensional array of the given data type, or of type(self) - if argument is None. -\end_layout - -\begin_layout Description -__array_wrap__ (array) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns a scalar array object from the first-element of the array. -\end_layout - -\begin_layout Description -__squeeze__ () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns self. -\end_layout - -\begin_layout Description -byteswap (<False>) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Trying to set the first (inplace) argument to True raises a ValueError. - Otherwise, this returns a new array scalar with the data byteswapped. - -\end_layout - -\begin_layout Description -__reduce__ () -\end_layout - -\begin_layout Description -\InsetSpace ~ - This is called to pickle an array scalar. - It returns a tuple of (numpy.core.multiarray.scalar, self.dtypestr, obj or - self.tostring()) which can be used to reconstruct the scalar on unpickling. - Notice that no state is written, because the entire scalar can be constructed - from just the string. - Also, if this is an object array scalar, then the Python object being reference -d is written. -\end_layout - -\begin_layout Description -__setstate__ () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Does nothing but return None. -\end_layout - -\begin_layout Description -setflags () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Does nothing, as flags cannot be set for scalars -\begin_inset LatexCommand index -name "array scalars|)" - -\end_inset - -. -\end_layout - -\begin_layout Section -Defining New Types -\end_layout - -\begin_layout Standard -There are two ways to effectively define a new type of array. - One way is to simply subclass the ndarray and overwrite the methods of - interest. - This will work to a degree, but internally certain behaviors are fixed - by the data type of the array. - To fully customize the data type of an array you need to define a new data-type - for the array, and register it with NumPy. - This new type can only be defined in C. - How to define a new data type in C will be discussed in the next part of - the book. -\end_layout - -\begin_layout Chapter -Data-type ( -\family typewriter -dtype -\family default -) Objects -\end_layout - -\begin_layout Quotation -We cannot expect that all nations will adopt like systems, for conformity - is the jailer of freedom and the enemy of growth. -\end_layout - -\begin_layout Right Address ---- -\emph on -John F. - Kennedy -\end_layout - -\begin_layout Quotation -What information consumes is rather obvious: it consumes the attention of - its recipients. - Hence, a wealth of information creates a poverty of attention and a need - to allocate that attention efficiently among the overabundance of information - sources that might consume it. -\end_layout - -\begin_layout Right Address ---- -\emph on -Herbert Simon -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand label -name "cha:Data-descriptor-objects" - -\end_inset - -It -\begin_inset LatexCommand index -name "dtype|(" - -\end_inset - - is important not to confuse the -\begin_inset Quotes eld -\end_inset - -array-scalars -\begin_inset Quotes erd -\end_inset - - with the -\begin_inset Quotes eld -\end_inset - -data-type objects. -\begin_inset Quotes erd -\end_inset - - It is true that an array-scalar can be interpreted as a data-type object - and so can be used to refer to the data-type of an array. - However, the data-type object is a separate Python object. - Every ndarray has an associated data-type object that completely defines - the data in the array (including any named fields). - For every built-in data-type object there is an associated type object - whose instances are the array-scalars. - Because of the association between each data-type object and a type-object - of the corresponding array scalar, the array-scalar type-objects can also - be thought of as data-types. - However, for the type objects of flexible array-scalars (string, unicode_, - and void), the type-objects alone are not enough to specify the full data-type - because the length is not given. - The data-type constructor, -\series bold -numpy.dtype -\series default -, converts any object that can be considered as a data-type into a data-type - object which is the actual object an ndarray looks to in order to interpret - each element of its data region. - Whenever a data-type is required in a NumPy function or method, supplying - a dtype object is always fastest. - If the object supplied is not a dtype object, then it will be converted - to one using dtype(obj). - Therefore, understanding data-type objects is the key to understanding - how data types are really represented and understood in NumPy. -\end_layout - -\begin_layout Section -Attributes -\begin_inset LatexCommand index -name "dtype!attributes|(" - -\end_inset - - -\end_layout - -\begin_layout Description -type -\begin_inset LatexCommand index -name "dtype!attributes!type" - -\end_inset - - The -\begin_inset LatexCommand index -name "The" - -\end_inset - - type object used to instantiate a scalar of this data-type. -\end_layout - -\begin_layout Description -kind -\begin_inset LatexCommand index -name "dtype!attributes!kind" - -\end_inset - - A character code (one of 'biufcSUV') identifying the general kind of data. - -\end_layout - -\begin_layout Description -char -\begin_inset LatexCommand index -name "dtype!attributes!char" - -\end_inset - - A unique character code for each of the 21 different built-in types. - -\end_layout - -\begin_layout Description -num -\begin_inset LatexCommand index -name "dtype!attributes!num" - -\end_inset - - A unique number for each of the 21 different built-in types roughly ordered - from least-to-most precision. - -\end_layout - -\begin_layout Description -str -\begin_inset LatexCommand index -name "dtype!attributes!str" - -\end_inset - - The array-protocol typestring of this data-type object. -\end_layout - -\begin_layout Description -name -\begin_inset LatexCommand index -name "dtype!attributes!name" - -\end_inset - - A bit-width name for this data-type (un-sized flexible data-type objects - are missing the width). - -\end_layout - -\begin_layout Description -byteorder -\begin_inset LatexCommand index -name "dtype!attributes!byteorder" - -\end_inset - - A character indicating the byte-order of this data-type object ('=' : native, - '<' : little-endian, '>' : big-endian, '|' : not applicable). - All built-in data-type objects have byteorder either '=' or '|'. - -\end_layout - -\begin_layout Description -itemsize -\begin_inset LatexCommand index -name "dtype!attributes!itemsize" - -\end_inset - - The element size of this data-type object. - For 18 of the 21 types this number is fixed by the data-type. - For the flexible data-types, this number can be anything. - -\end_layout - -\begin_layout Description -alignment -\begin_inset LatexCommand index -name "dtype!attributes!alignment" - -\end_inset - - The required alignment (in bytes) of this data-type according to the compiler. - More information is available in the C-API section. - -\end_layout - -\begin_layout Description -fields -\begin_inset LatexCommand index -name "dtype!attributes!fields" - -\end_inset - - A dictionary showing any named fields that have been defined for this data-type - (or None if there are no named fields). - Fields can be assigned to any built-in data-type ( -\emph on -e.g. - -\emph default - using the tuple input to the dtype constructor). - However, fields are most useful for (subtypes of) void data-types which - can be any size. - Fields are a convenient way to keep track of fixed-size sub-parts of the - total fixed-size array-element, or record. - A field is defined in terms of another dtype object and an offset (in bytes) - into the current record. - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The fields dictionary is indexed by keys that are the names of the fields. - Each entry in the dictionary is a tuple fully describing the field: (dtype, - offset[, title]). - If present, the optional title can actually be any object (if it is string - or unicode then it will also be a key in the fields dictionary, otherwise - it's meta-data). - Notice also, that the first two elements of the tuple can be passed directly - as arguments to the getfield and setfield attributes of an ndarray. - If field names are not specified in a constructor, they default to 'f0', - 'f2', ..., 'f<n-1>'. - -\end_layout - -\begin_layout Description -names -\begin_inset LatexCommand index -name "dtype!attributes!char" - -\end_inset - - An ordered list of field names. - This can be used to walk through all of the named fields in offset order. - Notice that the defined fields do not have to -\begin_inset Quotes eld -\end_inset - -cover -\begin_inset Quotes erd -\end_inset - - the record, but the itemsize of the container data-type object must always - be at least as large as the itemsizes of the data-type objects in the defined - fields. - This attribute is None if there are no fields. -\end_layout - -\begin_layout Description -subdtype -\begin_inset LatexCommand index -name "dtype!attributes!subdtype" - -\end_inset - - Numarray introduced the concept of a fixed-length record having fields - that were themselves arrays of another data-type. - This is supported at a fundamental level in NumPy using this attribute - which maintains the simplicity of defining a field by another data-type - object. - It either returns None or a tuple (base dtype, shape) where shape is a - tuple showing the size of the C-contiguous array and the base dtype object - indicates the data-type in each element of the subarray. - If a field whose dtype object has this attribute is retrieved, then the - extra dimensions implied by the shape are tacked on to the end of the retrieved - array. - -\end_layout - -\begin_layout Description -descr -\begin_inset LatexCommand index -name "dtype!attributes!descr" - -\end_inset - - An array-interface-compliant full description of the data-type. - The format is that required by the 'descr' key in the __array_interface__. -\end_layout - -\begin_layout Description -isbuiltin -\begin_inset LatexCommand index -name "dtype!attributes!isbuiltin" - -\end_inset - - A 1 if self is one of the built-in dtype objects; a 2 if self is a user-defined - dtype object; a 0, otherwise. -\end_layout - -\begin_layout Description -isnative -\begin_inset LatexCommand index -name "dtype!attributes!isnative" - -\end_inset - - True if this data-type object has a byteorder that is native to the platform; - otherwise False. -\end_layout - -\begin_layout Description -hasobject -\begin_inset LatexCommand index -name "dtype!attributes!hasobject" - -\end_inset - - True if self contains reference-counted objects in any of it's fields or - sub data-types. - Recall that what is actually in the ndarray memory representing the Python - object is the memory address of that object (a pointer). - Special handling may be required and this attribute is useful for distinguishin -g data-types that may contain arbitrary Python objects and data-types that - won't. - -\end_layout - -\begin_layout Description -flags -\begin_inset LatexCommand index -name "dtype!attributes!flags" - -\end_inset - - Bit-flags for the data-type describing how the data-type will be interpreted. - Bit-masks are in numpy.core.multiarray as the constants ITEM_HASOBJECT, LIST_PICK -LE, ITEM_IS_POINTER, NEEDS_INIT, NEEDS_PYAPI, USE_GETITEM, USE_SETITEM. - A full explanation of these flags is in the second part of this book. - These flags are largely useful for user-defined data-types. - -\begin_inset LatexCommand index -name "dtype!attributes|)" - -\end_inset - - -\end_layout - -\begin_layout Section -Construction -\end_layout - -\begin_layout Description -dtype (obj, align=0, copy=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset LatexCommand index -name "dtype!construction|(" - -\end_inset - -Return a new data-type object from obj. - The keyword argument, align, can only be nonzero if obj is a dictionary, - or a comma-separated string. - If it is non-zero in those cases it is used to add padding as needed to - the fields to match what the compiler that compiled NumPy would do to a - similar C-struct. - The copy argument guarantees a new copy of the data-type object, otherwise, - the result may just be a reference to a built-in data-type object. -\end_layout - -\begin_layout Description -\InsetSpace ~ - Objects that can be converted to a data-type object are described in the - following list. - Because every object in this list can be converted to a data-type object - it can also be used whenever a -\family typewriter -dtype -\family default - is requested by a function or method in NumPy. - -\end_layout - -\begin_deeper -\begin_layout Description -dtype -\begin_inset LatexCommand index -name "dtype!construction!from float" - -\end_inset - -Returns itself. -\end_layout - -\begin_layout Description -None -\begin_inset LatexCommand index -name "dtype!construction!from None" - -\end_inset - -Returns the default data-type descriptor object: float. -\end_layout - -\begin_layout Description -type-object -\begin_inset LatexCommand index -name "dtype!construction!from type" - -\end_inset - -Many Python type objects can be converted to data-type objects. -\end_layout - -\begin_deeper -\begin_layout Enumerate -Array-scalar types: The type-objects of the 21 built-in array scalars all - convert to an associated data-type object. - This is true for sub-classes as well. - Not all data-type information can be supplied with a type-object. - Flexible data-types with default itemsizes of 0, for example, require an - itemsize to be useful. -\end_layout - -\begin_deeper -\begin_layout Description -Examples: int32, float64, uint16, complex128 -\end_layout - -\end_deeper -\begin_layout Enumerate -Generic types: The generic hierarchical type objects convert to corresponding - dtype objects according to the associations: (numeric, inexact, floating) - --> float; complexfloating --> cfloat; (integer, signedinteger) --> int_; - unsignedinteger --> uint; character --> string; (generic, flexible) --> - void. - -\end_layout - -\begin_layout Enumerate -Builtin types: Several python types are equivalent to a corresponding array - scalar when used to generate a dtype object: int --> int_; bool --> bool_; - float --> float_; complex --> cfloat; str --> string; unicode --> unicode_; - buffer --> void; (all others) --> object_. -\end_layout - -\begin_deeper -\begin_layout Description -Examples: object, str, float, int -\end_layout - -\end_deeper -\begin_layout Enumerate -Any type object with the dtype attribute: The attribute will be accessed - and used directly. - The attribute must return something that is convertible into a dtype object. - -\end_layout - -\end_deeper -\begin_layout Description -string -\begin_inset LatexCommand index -name "dtype!construction!from string" - -\end_inset - -Several kinds of strings can be converted. - Recognized strings can be pre-pended with '>', or '<', to specify the byteorder. -\end_layout - -\begin_deeper -\begin_layout Enumerate -One-character strings: Each built-in data-type has a character code (the - updated Numeric typecodes), that uniquely identifies it. - -\end_layout - -\begin_deeper -\begin_layout Description -Examples: 'b', 'H', 'f', 'd', 'F', 'D', Float64, Int32, UInt16 -\end_layout - -\end_deeper -\begin_layout Enumerate -Array-protocol type strings: The first character specifies the kind of data - and the remaining characters specify how many bytes of data. - The supported kinds are 'b' --> Boolean, 'i' --> (signed) integer, 'u' - --> unsigned integer, 'f' --> floating-point, 'c' --> complex-floating - point, 'S', 'a' --> string, 'U' --> unicode, 'V' --> anything (void). - -\end_layout - -\begin_deeper -\begin_layout Description -Examples: 'i4', 'f8', 'c16', 'b1', 'S10', 'a25' -\end_layout - -\end_deeper -\begin_layout Enumerate -Comma-separated field formats: numarray introduced a short-hand notation - for specifying the format of a record as a comma-separated string of basic - formats. - A basic format in this context is an optional shape specifier followed - by an array-protocol type string. - Parenthesis are required on the shape if it is greater than 1-d. - NumPy allows a modification on the format in that any string that can uniquely - identify the type can be used to specify the data-type in a field. - This data-type defines fields named 'f0', 'f2', ..., 'f<N-1>' where N (>1) - is the number of comma-separated basic formats in the string. - If the optional shape specifier is provided, then the data-type for the - corresponding field contains a subdtype attribute providing the shape. - -\end_layout - -\begin_deeper -\begin_layout Description -Examples: -\begin_inset Quotes eld -\end_inset - -i4, (2,3)f8, f4 -\begin_inset Quotes erd -\end_inset - -; -\begin_inset Quotes eld -\end_inset - -a3, 3u8, (3,4)a10 -\begin_inset Quotes erd -\end_inset - - -\end_layout - -\end_deeper -\begin_layout Enumerate -Any string in NumPy.sctypeDict.keys(): -\end_layout - -\begin_deeper -\begin_layout Description -Examples: 'uint32', 'Int16', 'Uint64', 'Float64', 'Complex64' -\end_layout - -\end_deeper -\end_deeper -\begin_layout Description -tuple -\begin_inset LatexCommand index -name "dtype!construction!from tuple" - -\end_inset - -Three kinds of tuples each of length 2 can be converted into a data-type - object: -\end_layout - -\begin_deeper -\begin_layout Enumerate -(flexible dtype, itemsize): The first argument must be an object that is - converted to a flexible data-type object (one whose element size is 0), - the second argument is an integer providing the desired itemsize. -\end_layout - -\begin_deeper -\begin_layout Description -Examples: (void, 10); (str, 35), ('U', 10) -\end_layout - -\end_deeper -\begin_layout Enumerate -(fixed dtype, shape): The first argument is any object that can be converted - into a fixed-size data-type object. - The second argument is the desired shape of this type. - If the shape parameter is 1, then the data-type object is equivalent to - fixed dtype. -\end_layout - -\begin_deeper -\begin_layout Description -Examples: (int32, (2,5)); ('S10', 1)=='S10'; ('i4, (2,3)f8, f4', (2,3)) -\end_layout - -\end_deeper -\begin_layout Enumerate -(base dtype, new dtype): Both arguments must be convertible to data-type - objects in this case. - The base dtype is the data-type object that the new data-type builds on. - This is how you could assign named fields to any built-in data-type object. - -\end_layout - -\begin_deeper -\begin_layout Description -Examples: (int32, {'real':(int16,0), 'imag':(int16,2)}); (int32, (int8, - 4)); -\newline -('i4', [('r','u1'),('g','u1'),('b','u1'),('a','u1')]) -\end_layout - -\end_deeper -\end_deeper -\begin_layout Description -list -\begin_inset LatexCommand index -name "dtype!construction!from list" - -\end_inset - -(array description interface): This style is more fully described at -\begin_inset LatexCommand url -name "this site" -target "http://numpy.scipy.org/array_interface.html" - -\end_inset - -. - It consists of a list of fields where each field is described by a tuple - of length 2 or 3. - The first element of the tuple is the field name (if this is '' then a - standard field name, 'f#', is assigned). - The field name may also be a 2-tuple of strings where the first string - is either a -\begin_inset Quotes eld -\end_inset - -title -\begin_inset Quotes erd -\end_inset - - (which may be any string or unicode string) or meta-data for the field - which can be any object, and the second string is the -\begin_inset Quotes eld -\end_inset - -name -\begin_inset Quotes erd -\end_inset - - which must be a valid Python identifier. - The second element of the tuple can be anything that can be interpreted - as a data-type. - The optional third element of the tuple contains the shape if this field - represents an array of the data-type in the second element. - This style does not accept align=1 as it is assumed that all of the memory - is accounted for by the array interface description. - See the web-page for more examples. - Note that a 3-tuple with a third argument equal to 1 is equivalent to a - 2-tuple. -\end_layout - -\begin_layout Description -Examples: [('big','>i4'), ('little','<i4')]; [('R','u1'), ('G','u1'), ('B','u1') -, ('A','u1')] -\end_layout - -\begin_layout Description -dictionary -\begin_inset LatexCommand index -name "dtype!construction!from dict" - -\end_inset - -There are two dictionary styles. - The first is a standard dictionary format while the second accepted format - allows the fields attribute of dtype objects to be interpreted as a data-type. - -\end_layout - -\begin_deeper -\begin_layout Enumerate -names and formats: This style has two required and two optional keys. - The 'names' and 'formats' keys are required. - Their respective values are equal-length lists with the field names and - the field formats. - The field names must be strings and the field formats can be any object - accepted by dtypedescr constructor. - The optional keys in the dictionary are 'offsets' and 'titles' and their - values must each be lists of the same length as the 'names' and 'formats' - lists. - The 'offsets' value is a list of integer offsets for each field, while - the 'titles' value is a list of titles for each field (None can be used - if no title is desired for that field). - The titles can be any string or unicode object and will add another entry - to the fields dictionary keyed by the title and referencing the same field - tuple which will contain the title as an additional tuple member. - -\end_layout - -\begin_deeper -\begin_layout Description -Examples: {'names': ['r','g','b','a'], 'formats': [uint8, uint8, uint8, - uint8]}; {'names':['r','b'], 'formats': ['u1', 'u1'], 'offsets': [0, 2], - 'titles': ['Red pixel', 'Blue pixel']} -\end_layout - -\end_deeper -\begin_layout Enumerate -data-type object fields: This style is patterned after the format of the - fields dictionary in a data-type object. - It contains string or unicode keys that refer to (data-type, offset) or - (data-type, offset, title) tuples. - -\end_layout - -\begin_deeper -\begin_layout Description -Examples: {'col1': ('S10', 0), 'col2': (float32, 10), 'col3': (int, 14)} -\begin_inset LatexCommand index -name "dtype!construction|)" - -\end_inset - - -\end_layout - -\end_deeper -\end_deeper -\end_deeper -\begin_layout Section -Methods -\begin_inset LatexCommand index -name "dtype!methods|(" - -\end_inset - - -\end_layout - -\begin_layout Description -newbyteorder -\begin_inset LatexCommand index -name "dtype!methods!newbyteorder" - -\end_inset - -(<'swap'>) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct a new copy of self with its byteorder changed according to the - optional argument. - All changes are also propagated to the data-type objects of all fields - and sub-arrays. - If a byteorder of '|' (meaning ignore) is encountered it is left unchanged. - The default behavior is to swap the byteorder. - Other possible arguments are 'big' ('>'), 'little' ('<'), and 'native' - ('=') which recursively forces the byteorder of self (and it's field data-type - objects and any sub-arrays) to the corresponding byteorder. - -\end_layout - -\begin_layout Description -__reduce__ -\begin_inset LatexCommand index -name "dtype!methods!\\_\\_reduce\\_\\_" - -\end_inset - - () -\end_layout - -\begin_layout Description -__setstate__ -\begin_inset LatexCommand index -name "dtype!methods!\\_\\_setstate\\_\\_" - -\end_inset - - (state) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Data-type objects can be pickled because of these two methods. - The __reduce__() method returns a 3-tuple consisting of (callable object, - args, state), where the callable object is numpy.core.multiarray.dtype and - args is (typestring, 0, 1) unless the data-type inherits from void (or - is user-defined) in which case args is (typeobj, 0, 1). - The state is an 8-tuple with (version, endian, self.subdtype, self.names, - self.fields, self.itemsize, self.alignment, self.flags). - The self.itemsize and self.alignment entries are both -1 if the data-type - object is built-in and not flexible (because they are fixed on creation). - The setstate method takes the saved state and updates the date-type -\begin_inset LatexCommand index -name "dtype!methods|)" - -\end_inset - -object. -\begin_inset LatexCommand index -name "dtype|)" - -\end_inset - - -\end_layout - -\begin_layout Chapter -Standard Classes -\end_layout - -\begin_layout Quotation -To generalize is to be an idiot. - -\end_layout - -\begin_layout Right Address ---- -\emph on -William Blake -\end_layout - -\begin_layout Quotation -Not everything that can be counted counts, and not everything that counts - can be counted. -\end_layout - -\begin_layout Right Address ---- -\emph on -Albert Einstein -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "ndarray!subtyping|(" - -\end_inset - -The ndarray in NumPy is a -\begin_inset Quotes eld -\end_inset - -new-style -\begin_inset Quotes erd -\end_inset - - Python built-in-type. - Therefore, it can be inherited from (in Python or in C) if desired. - Therefore, it can form a foundation for many useful classes. - Often whether to sub-class the array object or to simply use the core array - component as an internal part of a new class is a difficult decision, and - can be simply a matter of choice. - NumPy has several tools for simplifying how your new object interacts with - other array objects, and so the choice may not be significant in the end. - One way to simplify the question is by asking yourself if the object you - are interested can be replaced as a single array or does it really require - two or more arrays at it's core. - For example, in the standard NumPy distribution, the matrix and records - classes inherit from the ndarray, while masked arrays use two ndarrays - as objects of its internal structure. -\end_layout - -\begin_layout Standard -Note that asarray(a) always returns the base-class ndarray. - If you are confident that your use of the array object can handle any subclass - of an ndarray, then asanyarray(a) can be used to allow subclasses to propagate - more cleanly through your subroutine. - In principal a subclass could redefine any aspect of the array and therefore, - under strict guidelines, asanyarray(a) would rarely be useful. - However, most subclasses of the arrayobject will not redefine certain aspects - of the array object such as the buffer interface, or the attributes of - the array. - One of important example, however, of why your subroutine may not be able - to handle an arbitrary subclass of an array is that matrices redefine the - '*' operator to be matrix-multiplication, rather than element-by-element - multiplication. -\end_layout - -\begin_layout Section -Special attributes and methods recognized by NumPy -\begin_inset LatexCommand index -name "ndarray!attributes!recognized by|(" - -\end_inset - - -\end_layout - -\begin_layout Description -__array_finalize__ (obj) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This method is called whenever the system internally allocates a new array - from obj, where obj is a subclass (subtype) of the (big)ndarray. - It can be used to change attributes of self after construction (so as to - ensure a 2-d matrix for example), or to update meta-information from the - -\begin_inset Quotes eld -\end_inset - -parent. -\begin_inset Quotes erd -\end_inset - - Subclasses inherit a default implementation of this method that does nothing. -\end_layout - -\begin_layout Description -__array_wrap__ (array) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This method should return an instance of the class from the ndarray object - passed in. - For example, this is called after every ufunc for the object with the highest - __array_priority__. - The ufunc-computed array object is passed in and whatever is returned is - passed to the user. - Subclasses inherit a default implementation of this method. -\end_layout - -\begin_layout Description -__array__ (dtype <None>) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This method is called to obtain an ndarray object when needed. - You should always guarantee this returns an actual ndarray object. - Subclasses inherit a default implementation of this method. - -\end_layout - -\begin_layout Description -__array_priority__ -\end_layout - -\begin_layout Description -\InsetSpace ~ - The value of this attribute is used to determine what type of object to - return in situations where there is more than one possibility for the Python - type of the returned object. - Subclasses inherit a default value of 1.0 for this attribute. -\begin_inset LatexCommand index -name "ndarray!attributes!recognized by|)" - -\end_inset - - -\begin_inset LatexCommand index -name "ndarray!subtyping|)" - -\end_inset - - -\end_layout - -\begin_layout Section -Matrix Objects -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "matrix|(" - -\end_inset - -Matrix objects inherit from the ndarray and therefore, they have the same - attributes and methods of ndarrays. - There are six important differences of matrix objects, however that may - lead to unexpected results when you use matrices but expect them to act - like arrays: -\end_layout - -\begin_layout Enumerate -Matrix objects can be created using a string notation to allow Matlab-style - syntax where spaces separate columns and semicolons (';') separate rows. - -\end_layout - -\begin_layout Enumerate -Matrix objects are always two-dimensional. - This has far-reaching implications, in that m.ravel() is still two-dimensional - (with a 1 in the first dimension) and item selection returns two-dimensional - objects so that sequence behavior is fundamentally different than arrays. -\end_layout - -\begin_layout Enumerate -Matrix objects over-ride multiplication to be matrix-multiplication. - -\series bold -Make sure you understand this for functions that you may want to receive - matrices. - Especially in light of the fact that asanyarray(m) returns a matrix when - m is a matrix. -\end_layout - -\begin_layout Enumerate -Matrix objects over-ride power to be matrix raised to a power. - The same warning about using power inside a function that uses asanyarray(...) - to get an array object holds for this fact. - -\end_layout - -\begin_layout Enumerate -The default __array_priority__ of matrix objects is 10.0, and therefore mixed - operations with ndarrays always produce matrices. - -\end_layout - -\begin_layout Enumerate -Matrices have special attributes which make calculations easier. - These are -\end_layout - -\begin_deeper -\begin_layout Enumerate -.T --- return the transpose of self -\end_layout - -\begin_layout Enumerate -.H --- return the conjugate transpose of self -\end_layout - -\begin_layout Enumerate -.I --- return the inverse of self -\end_layout - -\begin_layout Enumerate -.A --- return a view of the data of self as a 2d array (no copy is done). -\end_layout - -\end_deeper -\begin_layout Warning -Matrix objects over-ride multiplication, '*', and power, '**', to be matrix-mult -iplication and matrix power, respectively. - If your subroutine can accept sub-classes and you do not convert to base-class - arrays, then you must use the ufuncs multiply and power to be sure that - you are performing the correct operation for all inputs. - -\end_layout - -\begin_layout Standard -The matrix class is a Python subclass of the ndarray and can be used as - a reference for how to construct your own subclass of the ndarray. - Matrices can be created from other matrices, strings, and anything else - that can be converted to an -\family typewriter -ndarray -\family default -. - The name -\begin_inset Quotes eld -\end_inset - -mat -\begin_inset Quotes erd -\end_inset - - is an alias for -\begin_inset Quotes eld -\end_inset - -matrix -\begin_inset Quotes erd -\end_inset - - in NumPy. -\end_layout - -\begin_layout Description -Example\InsetSpace ~ -1: Matrix creation from a string -\end_layout - -\begin_layout MyCode ->>> a=mat('1 2 3; 4 5 3') -\newline ->>> print (a*a.T).I -\newline -[[ 0.2924 -0.1345] -\newline - [-0.1345 0.0819]] -\end_layout - -\begin_layout Description -Example\InsetSpace ~ -2: Matrix creation from nested sequence -\end_layout - -\begin_layout MyCode ->>> mat([[1,5,10],[1.0,3,4j]]) -\newline -matrix([[ 1.+0.j, 5.+0.j, 10.+0.j], -\newline - [ - 1.+0.j, 3.+0.j, 0.+4.j]]) -\end_layout - -\begin_layout Description -Example\InsetSpace ~ -3: Matrix creation from an array -\end_layout - -\begin_layout MyCode ->>> mat(random.rand(3,3)).T -\newline -matrix([[ 0.7699, 0.7922, 0.3294], -\newline - [ 0.2792, - 0.0101, 0.9219], -\newline - [ 0.3398, 0.7571, 0.8197]]) -\end_layout - -\begin_layout Description -matrix (data, dtype=None, copy=True) -\end_layout - -\begin_layout Description -\InsetSpace ~ - The sequence to convert to a matrix is passed in as data. - If dtype is None, then the data-type is determined from the data. - If copy is True, then a copy of the data is made, otherwise, the same data - buffer is used. - If no buffer can be found for data, then a copy is also made. - Note: The matrix object is actually a class and so using this syntax calls - matrix.__new__(matrix, data, dtype, copy) which is what happens whenever - you -\begin_inset Quotes eld -\end_inset - -call -\begin_inset Quotes erd -\end_inset - - any class object as a function. -\end_layout - -\begin_layout Description -mat -\end_layout - -\begin_layout Description -\InsetSpace ~ - Just another name for matrix. -\end_layout - -\begin_layout Description -asmatrix (data, dtype=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns the data without copying. - Equivalent to matrix(data, dtype, copy=False). -\end_layout - -\begin_layout Description -bmat (obj, ldict=None, gdict=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Build a matrix object from a string, nested sequence or an array. - This command lets you build up matrices from other other objects. - The ldict and gdict parameters are local and module (global) dictionaries - that are only used when obj is a string. - If they are not provided, then the local and module dictionaries present - when bmat is called are used. -\begin_inset LatexCommand index -name "matrix|)" - -\end_inset - - -\end_layout - -\begin_layout MyCode ->>> A = mat('2 2; 2 2'); B=mat('1 1; 1 1'); -\newline ->>> print bmat('A B; B A') -\newline -[[2 - 2 1 1] -\newline - [2 2 1 1] -\newline - [1 1 2 2] -\newline - [1 1 2 2]] -\end_layout - -\begin_layout Section -Memory-mapped-file arrays -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "memory maps|(" - -\end_inset - -Memory-mapped files are useful for reading and/or modifying small segments - of a large file with regular layout, without reading the entire file into - memory. - A simple subclass of the ndarray uses a memory-mapped file for the data - buffer of the array. - For small files, the over-head of reading the entire file into memory is - typically not significant, however for large files using memory mapping - can save considerable resources. - -\end_layout - -\begin_layout Note -Memory-mapped arrays use the the Python memory-map object which (prior to - Python 2.5) does not allow files to be larger than a certain size depending - on the platform. - This size is always < 2GB even on 64-bit systems. - -\end_layout - -\begin_layout Standard -The class is called memmap and is available in the NumPy namespace. - The __new__ method of the class has been re-written to have the following - syntax: -\end_layout - -\begin_layout Description -__new__ (cls, filename, dtype=uint8, mode='r+', offset=0, shape=None, order=0) - -\end_layout - -\begin_deeper -\begin_layout Description -filename The file name to be used as the array data buffer -\end_layout - -\begin_layout Description -dtype A data-type object used to interpret the file contents (including - byteorder). -\end_layout - -\begin_layout Description -mode The mode to open the file in. - Valid modes are 'readonly' or 'r', 'copyonwrite' or 'c', 'readwrite' or - 'r+', and 'write' or 'w+'. - This mode determines the WRITEABLE flag of the returned array. -\end_layout - -\begin_layout Description -offset An offset into the file to start the array data. -\end_layout - -\begin_layout Description -shape The desired shape of the array. - If this is None, then the returned array will be 1-d with the number of - elements determined by the file size and data type. -\end_layout - -\begin_layout Description -order Either 'C' or 'Fortran' to indicate the order that an N-D array should - be interpreted. - This only has an effect if the shape is greater than 2-D. -\end_layout - -\end_deeper -\begin_layout Standard -Memory-mapped-file arrays have one additional method (besides those they - inherit from the ndarray): self. -\series bold -sync -\series default -() which must be called manually by the user to ensure that any changes - to the array actually get written to disk. - -\end_layout - -\begin_layout Description -Example: -\end_layout - -\begin_layout MyCode ->>> a = memmap('newfile.dat', dtype=float, mode='w+', shape=1000) -\newline ->>> a[10] - = 10.0 -\newline ->>> a[30] = 30.0 -\newline ->>> del a -\newline ->>> b = fromfile('newfile.dat', dtype=float) -\newline ->>> - print b[10], b[30] -\newline -10.0 30.0 -\newline ->>> a = memmap('newfile.dat', dtype=float) -\newline ->>> print - a[10], a[30] -\newline -10.0 30.0 -\end_layout - -\begin_layout Section -Character arrays (numpy.char) -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "character arrays|(" - -\end_inset - -These are enhanced arrays of either string type or unicode_ type. - These arrays inherit from the ndarray, but specially-define the operations - +, *, and % on a (broadcasting) element-by-element basis. - These operations are not available on the standard ndarray of character - type. - In addition, the chararray has all of the standard string (and unicode) - methods, executing them on an element-by-element basis. - Perhaps the easiest way to create a chararray is to use self.view(chararray) - where self is an ndarray of string or unicode data-type. - However, a chararray can also be created using the numpy.chararray.__new__ - method. -\end_layout - -\begin_layout Description -__new__ (shape, itemsize, unicode=False, buffer=None, offset=0, strides=None, - order=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Create a new character array of string or unicode type and itemsize characters. - Create the array using buffer (with offset and strides) if it is not None. - If buffer is None, then construct a new array with strides in Fortran order - if len(shape) >=2 and order is 'Fortran' (otherwise the strides will be - in 'C' order). - -\end_layout - -\begin_layout Description -char.array (obj, itemsize=None, copy=True, unicode=False, order=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Create a chararray from the nested sequence obj. - If obj is an ndarray of data-type unicode_ or string, then its data is - wrapped by the chararray object and converted to the desired type (string - or unicode). - -\end_layout - -\begin_layout Standard -Another difference with the standard ndarray of string data-type is that - the chararray inherits the feature introduced by Numarray that white-space - at the end of any element in the array will be ignored on item retrieval - and comparison operations. - -\begin_inset LatexCommand index -name "character arrays|)" - -\end_inset - - -\end_layout - -\begin_layout Section -Record Arrays (numpy.rec) -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "record arrays|(" - -\end_inset - -NumPy provides a powerful data-type object that allows any ndarray to hold - (arbitrarily nested) record-like items with named-field access to the sub-types. - This is possible without any special record-array sub-class. - Consider the example where each item in the array is a simple record of - name, age, and weight. - You could specify a data-type for an array of such records using the following - data-type object: -\end_layout - -\begin_layout MyCode ->>> desc = dtype({'names': ['name', 'age', 'weight'], 'formats': ['S30', - 'i2', 'f4']}) -\newline ->>> a = array([('Bill',31,260.0),('Fred', 15, 145.0)],dtype=desc) -\newline ->>> - print a[0] -\newline -('Bill', 31, 260.0) -\newline ->>> print a['name'] -\newline -['Bill' 'Fred'] -\newline ->>> print - a['age'] -\newline -[31 15] -\newline ->>> print a['weight'] -\newline -[ 260. - 145.] -\newline ->>> print a[0]['name'], a[0]['age'], a[0]['weight'] -\newline -Bill 31 260.0 -\newline ->>> - print len(a[0]) -\newline -3 -\end_layout - -\begin_layout Standard -This example shows how a general array can be assigned named fields and - how these fields can be accessed. - In this case the a[0] object is an array-scalar of type void. - The void array-scalars are unique in that they contain references to (rather - than copies of) the underlying data whenever fields are defined. - Therefore, the record data can be modified in place: -\end_layout - -\begin_layout MyCode ->>> a[0]['name'] = 'George'; print a -\newline -[('George', 31, 260.0) ('Fred', 15, 145.0)] -\end_layout - -\begin_layout Standard -The recarray subclass and its accompanying record item add the ability to - access named fields through attribute lookup. - A quick way to get a record array is to use the view method of the ndarray. - -\end_layout - -\begin_layout MyCode ->>> r = a.view(recarray) -\newline ->>> print r.name -\newline -['George' 'Fred'] -\end_layout - -\begin_layout Standard -The numpy.core.records module (aliased to nump.rec when numpy is imported) - contains additional convenience functions for constructing record arrays. - All of the following constructors have two different mechanisms for specifying - the data-type. - Either the dtype= argument can be specified or the argument formats= can - be specified along with an optional set of four additional keyword arguments - (names=, titles=, aligned= and byteorder=). - In some cases neither dtype= nor formats= is required as the data-type - can be inferred from the object passed in as the first argument. -\end_layout - -\begin_layout Standard -The five argument method for specifying a data-type constructs a data-type - object internally. - The comma-separated formats string is used to specify the fields. - The names (and optional titles) of the fields can be specified by a comma-separ -ated string of names (or titles). - The aligned flag determines whether the fields are packed (False) or padded - (True) according to the platform compiler rules. - The byteorder argument allows specification of the byte-order for all of - the fields at once (they can also be specified individually in the formats - string). - The default byte-order is native to the platform. - -\end_layout - -\begin_layout Description -array (obj, dtype=None, shape=None, offset=0, strides=None, formats=None, - names=None, titles=None, aligned=False, byteorder=None, copy=True) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A general-purpose record array constructor that is a front-end to the other - constructors If obj is None, then call the -\series bold -recarray -\series default - constructor. - If obj is a string, then call the -\series bold -fromstring -\series default - constructor. - If obj is a list or a tuple then if the first object is an ndarray, then - call -\series bold -fromarrays -\series default -, otherwise call -\series bold -fromrecords -\series default -. - If obj is a recarray, then make a copy of the data in recarray (if copy - is True) and use the new formats, names, and titles. - If obj is a file then call -\series bold -fromfile -\series default -. - Finally, if obj is an ndarray, then return obj.view(recarray) and make a - copy of the data if copy is True. - Otherwise, call the __array_interface__ attribute and try to convert using - the information returned from that object. - Either dtype or the formats argument must be given if obj is None, a string, - or a file, and if obj is None so the recarray constructor will be called, - then shape must be given as well. - -\end_layout - -\begin_layout Description -fromarrays (array_list, dtype=None, shape=None, formats=None, names=None, - titles=None, aligned=False, byteorder=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Create a record array from a (flat) list of ndarrays. - The data from the arrays will be copied into the fields. - If formats is None and dtype is None, then the formats will be determined - from the arrays. - The names and titles arguments can be a list, tuple or a (comma-separated) - string specifying the names and/or titles to use for the fields. - If aligned is True, then the structure will be padded according to the - rules of the compiler that NumPy was compiled with. -\end_layout - -\begin_layout MyCode ->>> x1 = array([21,32,14]) -\newline ->>> x2 = array(['my','first','name']) -\newline ->>> x3 = - array([3.1, 4.5, 6.2]) -\newline ->>> r = rec.fromarrays([x1,x2,x3], names='id, word, number') -\newline -> ->> print r[1] -\newline -(32, 'first', 4.5) -\newline ->>> r.number -\newline -array([ 3.1, 4.5, 6.2]) -\newline ->>> r.word -\newline -chararra -y(['my', 'first', 'name'], -\newline - dtype='|S5') -\end_layout - -\begin_layout Description -fromrecords (rec_list, dtype=None, shape=None, formats=None, names=None, - titles=None, aligned=False, byteorder=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct a record array from a (nested) sequence of tuples that define - the records. - If formats are not given, they are deduced from the records, but this is - slower. - The field names and field titles can be specified. - If aligned is non-zero, then the record array is padded so that fields - are aligned as the platform compiler would do if the fields represented - a C-struct. -\end_layout - -\begin_layout MyCode ->>> recs = [('Bill', 31, 260.0), ('Fred', 15, 145.0)] -\newline ->>> r = rec.fromrecords(recs, - formats='S30,i2,f4', names='name, age, weight') -\newline ->>> print r.name -\newline -['Bill' 'Fred'] -\newline ->> -> print r.age -\newline -[31 15] -\newline ->>> print r.weight -\newline -[ 260. - 145.] -\end_layout - -\begin_layout Description -fromstring (datastring, dtype=None, shape=None, offset=0, formats=None, - names=None, titles=None, aligned=0, byteorder=None): -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct a record array using the provided datastring (at the given offset) - as the memory. - The record array will be read-only. - The byteorder argument may be used to specify the byteorder of all of the - fields at the same time. - A True aligned argument causes padding fields to be added as needed so - that the fields are aligned on boundaries determined by the compiler. - The shape of the returned array can also be specified. - -\end_layout - -\begin_layout Description -fromfile (fd, dtype=None, shape=None, offset=0, formats=None, names=None, - titles=None, aligned=False, byteorder=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct a record array from the (binary) data in the given file object, - fd. - This object may be an open file or a string to indicate a file to read - from. - If offset is non-zero, then data is read from the file at offset bytes - from the current position. - -\end_layout - -\begin_layout Standard -The following classes are also available in the numpy.core (and therefore - the numpy) namespace -\end_layout - -\begin_layout Description -record A subclass of the void array scalar type that allows field access - using attributes. - -\end_layout - -\begin_layout Description -recarray A subclass of the ndarray that allows field access using attributes -\end_layout - -\begin_deeper -\begin_layout Description -__new__ (subtype, shape, formats, names=None, titles=None, buf=None, offset=0, - strides=None, byteorder=None, aligned=0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct an array of the given subtype and shape with data-type (record, - dtype) where dtype is constructed from formats, names, and titles. - If buf is None, then create new memory. - Otherwise, use the memory of buf exposed through the buffer protocol. -\end_layout - -\end_deeper -\begin_layout Description -format_parser A class useful for creating a data-type descriptor from formats, - names, titles, and aligned arguments. - This is used by several of the record array constructors for consistency - in behavior. - -\end_layout - -\begin_deeper -\begin_layout Description -__init__ (self, formats, names, titles, aligned=False, byteorder=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Construct a data-type object from formats, names, titles, aligned, and - byteorder arguments. - Upon completion the constructed data-type object is in self._descr. - -\begin_inset LatexCommand index -name "record arrays|)" - -\end_inset - - -\end_layout - -\end_deeper -\begin_layout Section -Masked Arrays (numpy.ma) -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "masked arrays|(" - -\end_inset - -These are adapted from the masked arrays provided with Numeric. - Masked Arrays do not inherit from the ndarray, they simply use two ndarray - objects in their internal representation. - Fortunately, as I have not used masked arrays in my work, Paul Dubois (the - original author of MA for Numeric) adapted and modified the code for use - by NumPy. - Alexander Belopolsky (Sasha) added additional functions and improvements - -\end_layout - -\begin_layout Standard -Masked arrays are created using the masked array creation function. - -\end_layout - -\begin_layout Description -ma.array (data, dtype=None, copy=True, order='C', mask=ma.nomask, fill_value=None) -\end_layout - -\begin_deeper -\begin_layout Description -data Something that can be converted to an array. - If data is already a masked array, then if mask is ma.nomask, the mask used - be data.mask and the data used data.data. - -\end_layout - -\begin_layout Description -dtype The data-type of the underlying array -\end_layout - -\begin_layout Description -copy If copy is False, then every effort will be made to not copy the data. - -\end_layout - -\begin_layout Description -order Specify whether the array is in 'C', 'Fortran', or 'Any' order -\end_layout - -\begin_layout Description -mask Masked values are excluded from calculations. - If this is ma.nomask, then there are no masked values. - Otherwise, this should be an object that is convertible to an array of - Booleans with the same shape as data. -\end_layout - -\begin_layout Description -fill_value This value is used to fill in masked values when necessary. - The fill_value is not used for computation for functions within the ma - module. -\end_layout - -\end_deeper -\begin_layout Standard -Masked arrays have the same methods and attributes as arrays with the addition - of the mask attribute as well as the -\begin_inset Quotes eld -\end_inset - -hidden -\begin_inset Quotes erd -\end_inset - - attributes ._data and ._mask. - -\begin_inset LatexCommand index -name "masked arrays|)" - -\end_inset - - -\end_layout - -\begin_layout Section -Standard container class -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "user\\_array" - -\end_inset - - -\begin_inset LatexCommand index -name "container class" - -\end_inset - -For backward compatibility and as a standard -\begin_inset Quotes eld -\end_inset - -container -\begin_inset Quotes erd -\end_inset - - class, the UserArray from Numeric has been brought over to NumPy and named - -\series bold -numpy.lib.user_array.container -\series default - The container class is a Python class whose self.array attribute is an ndarray. - Multiple inheritance is probably easier with numpy.lib.user_array.container - than with the ndarray itself and so it is included by default. - It is not documented here beyond mentioning its existence because you are - encouraged to use the ndarray class directly if you can. - -\end_layout - -\begin_layout Section -Array Iterators -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "array iterator" - -\end_inset - -Iterators are a powerful concept for array processing. - Essentially, iterators implement a generalized for-loop. - If myiter is an iterator object, then the Python code -\end_layout - -\begin_layout LyX-Code -for val in myiter: -\end_layout - -\begin_layout LyX-Code - ... -\end_layout - -\begin_layout LyX-Code - some code involving val -\end_layout - -\begin_layout LyX-Code - ... -\end_layout - -\begin_layout Standard -calls val=myiter.next() repeatedly until StopIteration is raised by the iterator. - There are several ways to iterate over an array that may be useful: default - iteration, flat iteration, and -\begin_inset Formula $N$ -\end_inset - --dimensional enumeration. -\end_layout - -\begin_layout Subsection -Default iteration -\end_layout - -\begin_layout Standard -The default iterator of an ndarray object is the default Python iterator - of a sequence type. - Thus, when the array object itself is used as an iterator. - The default behavior is equivalent to: -\end_layout - -\begin_layout LyX-Code -for i in arr.shape[0]: -\end_layout - -\begin_layout LyX-Code - val = arr[i] -\end_layout - -\begin_layout Standard -This default iterator selects a sub-array of dimension -\begin_inset Formula $N-1$ -\end_inset - - from the array. - This can be a useful construct for defining recursive algorithms. - To loop over the entire array requires -\begin_inset Formula $N$ -\end_inset - - for-loops. - -\end_layout - -\begin_layout MyCode ->>> a = arange(24).reshape(3,2,4)+10 -\newline ->>> for val in a: -\newline -... - print 'item:', val -\newline -item: [[10 11 12 13] -\newline - [14 15 16 17]] -\newline -item: [[18 19 - 20 21] -\newline - [22 23 24 25]] -\newline -item: [[26 27 28 29] -\newline - [30 31 32 33]] -\end_layout - -\begin_layout Subsection -Flat iteration -\end_layout - -\begin_layout Standard -As mentioned previously, the flat attribute of ndarray objects returns an - iterator that will cycle over the entire array in C-style contiguous order. - -\end_layout - -\begin_layout MyCode ->>> for i, val in enumerate(a.flat): -\newline -... - if i%5 == 0: print i, val -\newline -0 10 -\newline -5 15 -\newline -10 20 -\newline -15 25 -\newline -20 30 -\end_layout - -\begin_layout Standard -Here, I've used the built-in enumerate iterator to return the iterator index - as well as the value. -\end_layout - -\begin_layout Subsection -N-dimensional enumeration -\end_layout - -\begin_layout Standard -Sometimes it may be useful to get the N-dimensional index while iterating. - The ndenumerate iterator can achieve this. -\end_layout - -\begin_layout MyCode ->>> for i, val in ndenumerate(a): -\newline -... - if sum(i)%5 == 0: print i, val -\newline -(0, 0, 0) 10 -\newline -(1, 1, 3) 25 -\newline -(2, 0, 3) 29 -\newline -(2, - 1, 2) 32 -\end_layout - -\begin_layout Subsection -Iterator for broadcasting -\end_layout - -\begin_layout Standard -The general concept of broadcasting is also available from Python using - the -\series bold -broadcast -\series default - iterator. - This object takes -\begin_inset Formula $N$ -\end_inset - - objects as inputs and returns an iterator that returns tuples providing - each of the input sequence elements in the broadcasted result. -\end_layout - -\begin_layout MyCode ->>> for val in broadcast([[1,0],[2,3]],[0,1]): -\newline -... - print val -\newline -(1, 0) -\newline -(0, 1) -\newline -(2, 0) -\newline -(3, 1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - The methods and attributes of the broadcast object are: -\end_layout - -\begin_deeper -\begin_layout Description -nd the number of dimensions in the broadcasted result. -\end_layout - -\begin_layout Description -shape the shape of the broadcasted result. -\end_layout - -\begin_layout Description -size the total size of the broadcasted result. -\end_layout - -\begin_layout Description -index the current (flat) index into the broadcasted array -\end_layout - -\begin_layout Description -iters a tuple of (broadcasted) NumPy.flatiter objects, one for each array. -\end_layout - -\begin_layout Description -reset () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Reset the multiter object to the beginning. -\end_layout - -\begin_layout Description -next () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Get the next tuple of objects from the (broadcasted) arrays -\end_layout - -\end_deeper -\begin_layout Chapter -Universal Functions -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand label -name "par:The-Ufunc-Object" - -\end_inset - - -\end_layout - -\begin_layout Quotation -Computers make it easier to do a lot of things, but most of the things they - make it easier to do don't need to be done. -\end_layout - -\begin_layout Right Address ---- -\emph on -Andy Rooney -\end_layout - -\begin_layout Quotation -People think computers will keep them from making mistakes. - They're wrong. - With computers you make mistakes faster. -\end_layout - -\begin_layout Right Address ---- -\emph on -Adam Osborne -\end_layout - -\begin_layout Section -Description -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "ufunc|(" - -\end_inset - -Universal functions are wrappers that provide a common interface to mathematical - functions that operate on scalars, and can be made to operate on arrays - in an element-by-element fashion. - All -\family typewriter -u -\family default -niversal -\family typewriter -func -\family default -tion -\family typewriter -s -\family default - ( -\family typewriter -ufuncs -\family default -) wrap some core function that takes -\begin_inset Formula $n_{i}$ -\end_inset - - (scalar) inputs and produces -\begin_inset Formula $n_{o}$ -\end_inset - - (scalar) outputs. - Typically, this core function is implemented in compiled code but a Python - function can also be wrapped into a universal function using the basic - method -\family typewriter -frompyfunc -\family default - in the umath module. - -\end_layout - -\begin_layout Description -frompyfunc (func, nin, nout) -\begin_inset LatexCommand index -name "frompyfunc" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - This function returns a new universal function wrapping a Python function - func with nin inputs and nout outputs. - The resulting universal function works using Object arrays for both input - and output. - The vectorize class makes use of frompyfunc internally. - You can view the source code using numpy.source(numpy.vectorize). -\end_layout - -\begin_layout Subsection -Broadcasting -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "broadcasting" - -\end_inset - -Each universal function takes array inputs and produces array outputs by - performing the core function element-wise on the inputs. - The standard broadcasting rules are applied so that inputs without exactly - the same shapes can still be usefully operated on. - Broadcasting can be understood by four rules: -\end_layout - -\begin_layout Enumerate -All input arrays with ndim smaller than the input array of largest ndim - have 1's pre-pended to their shapes. -\end_layout - -\begin_layout Enumerate -The size in each dimension of the output shape is the maximum of all the - input shapes in that dimension. -\end_layout - -\begin_layout Enumerate -An input can be used in the calculation if it's shape in a particular dimension - either matches the output shape or has value exactly 1. -\end_layout - -\begin_layout Enumerate -If an input has a dimension size of 1 in its shape, the first data entry - in that dimension will be used for all calculations along that dimension. - In other words, the stepping machinery of the ufunc will simply not step - along that dimension when otherwise needed (the stride will be 0 for that - dimension). - -\end_layout - -\begin_layout Standard -While perhaps a bit difficult to explain, broadcasting can be quite useful - and becomes second nature rather quickly. - Broadcasting is used throughout NumPy to decide how to handle non equally-shape -d arrays. - -\end_layout - -\begin_layout Subsection -Output type determination -\end_layout - -\begin_layout Standard -The output of the ufunc (and its methods) does not have to be an ndarray. - All output arrays will be passed to the __array_wrap__ method of any input - (besides ndarrays, and scalars) that defines it -\series bold -and -\series default - has the highest __array_priority__ of any other input to the universal - function. - The default __array_priority__ of the ndarray is 0.0, and the default __array_pr -iority__ of a subtype is 1.0. - Matrices have __array_priority__ equal to 10.0. - -\end_layout - -\begin_layout Standard -The ufuncs can also all take output arguments. - The output will be cast if necessary to the provided output array. - If a class with an __array__ method is used for the output, results will - be written to the object returned by __array__. - Then, if the class also has an __array_wrap__ method, the returned -\family typewriter -ndarray -\family default - result will be passed to that method just before passing control back to - the caller. - -\end_layout - -\begin_layout Subsection -Use of internal buffers -\end_layout - -\begin_layout Standard -Internally, buffers are used for misaligned data, swapped data, and data - that has to be converted from one data type to another. - The size of the internal buffers is settable on a per-thread basis. - There can be up to -\begin_inset Formula $2\left(n_{i}+n_{o}\right)$ -\end_inset - - buffers of the specified size created to handle the data from all the inputs - and outputs of a ufunc. - The default size of the buffer is 10,000 elements. - Whenever buffer-based calculation would be needed, but all input arrays - are smaller than the buffer size, those misbehaved or incorrect typed arrays - will be copied before the calculation proceeds. - Adjusting the size of the buffer may therefore alter the speed at which - ufunc calculations of various sorts are completed. - A simple interface for setting this variable is accessible using the function - -\end_layout - -\begin_layout Description -setbufsize (size) -\begin_inset LatexCommand index -name "setbufsize" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Set the buffer size to the given number of elements in the current thread. - Return the old buffer size (so that it can be reset later if desired). - -\end_layout - -\begin_layout Subsection -Error handling -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "error handling" - -\end_inset - -Universal functions can trip special floating point status registers in - your hardware (such as divide-by-zero). - If available on your platform, these registers will be regularly checked - during calculation. - The user can determine what should be done if errors are encountered. - Error handling is controlled on a per-thread basis. - Four errors can be individually configured: divide-by-zero, overflow, underflow -, and invalid. - The errors can each be set to ignore, warn, raise, or call. - The easiest way to configure the error mask is using the function -\end_layout - -\begin_layout Description -seterr (all=None, divide=None, over=None, under=None, invalid=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset LatexCommand index -name "seterr" - -\end_inset - -This will set the current thread so that errors can be handled if desired. - If one of the errors is set to 'call', then a function must be provided - using the seterrcall() routine. - If any of the arguments are None, then that error mask will be unchanged. - The return value of this function is a dictionary with the old error conditions. - Thus, you can restore the old condition after you are finished with your - function by calling seterr(**old). - If all is set, then all errors will be set to the specified value. - -\end_layout - -\begin_layout Description -seterrcall (callable) -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset LatexCommand index -name "seterrcall" - -\end_inset - -This sets the function to call when an error is triggered for an error condition - configured with the -\begin_inset Quotes eld -\end_inset - -call -\begin_inset Quotes erd -\end_inset - - handler. - This function should take two arguments: a string showing the type of error - that triggered the call, and an integer showing the state of the floating - point status registers. - Any return value of the call function will be ignored, but errors can be - raised by the function. - Only one error function handler can be specified for all the errors. - The status argument shows which errors were raised. - The return value of this routine is the old callable. - The argument passed in to this function must be any callable object with - the right signature or None. - -\end_layout - -\begin_layout Note -FPE_DIVIDEBYZERO, FPE_OVERFLOW, FPE_UNDERFLOW, and FPE_INVALID, are all - defined constants in NumPy. - The status flag returned for a 'call' error handling type shows which errors - were raised by adding these constants together. -\end_layout - -\begin_layout Subsection -Optional keyword arguments -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "ufunc!keyword arguments" - -\end_inset - -All ufuncs take optional keyword arguments. - These represent rather advanced usage and will likely not be used by most - users. - -\end_layout - -\begin_layout Description -sig= either a data-type, a tuple of data-types, or a special signature string - indicating the input and output types of a ufunc. - This argument allows you to specify a specific signature for a the 1-d - loop to use in the underlying calculation. - If the loop specified does not exist for the ufunc, then a TypeError is - raised. - Normally a suitable loop is found automatically by comparing the input - types with what is available and searching for a loop with data-types to - which all inputs can be cast safely. - This key-word argument lets you by-pass that search and choose a loop you - want. - A list of available signatures is available in the -\series bold -types -\series default - attribute of the ufunc object. - -\end_layout - -\begin_layout Description -extobj= a list of length 1, 2, or 3 specifying the ufunc buffer-size, the - error mode integer, and the error call-back function. - Normally, these values are looked-up in a thread-specific dictionary. - Passing them here bypasses that look-up and uses the low-level specification - provided for the error-mode. - This may be useful as an optimization for calculations requiring lots of - ufuncs on small arrays in a loop. - -\end_layout - -\begin_layout Section -Attributes -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "ufunc!attributes" - -\end_inset - -There are some informational attributes that universal functions possess. - None of the attributes can be set. - -\end_layout - -\begin_layout Description -__doc__ -\end_layout - -\begin_layout Description -\InsetSpace ~ - A docstring for each ufunc. - The first part of the docstring is dynamically generated from the number - of outputs, the name, and the number of inputs. - The second part of the doc string is provided at creation time and stored - with the ufunc. - -\end_layout - -\begin_layout Description -__name__ -\end_layout - -\begin_layout Description -\InsetSpace ~ - The name of this ufunc. -\end_layout - -\begin_layout Description -nin -\end_layout - -\begin_layout Description -\InsetSpace ~ - The number of inputs -\end_layout - -\begin_layout Description -nout -\end_layout - -\begin_layout Description -\InsetSpace ~ - The number of outputs -\end_layout - -\begin_layout Description -nargs -\end_layout - -\begin_layout Description -\InsetSpace ~ - The total number of inputs + outputs -\end_layout - -\begin_layout Description -ntypes -\end_layout - -\begin_layout Description -\InsetSpace ~ - The total number of different types for which this ufunc is defined. -\end_layout - -\begin_layout Description -types -\end_layout - -\begin_layout Description -\InsetSpace ~ - A list of length ntypes containing strings showing the types for which - this ufunc is defined. - Other types may still be used as inputs (and as output arrays), they will - just need casting. - For inputs, standard casting rules will be used to determine which of the - supplied internal functions that will be used (and therefore the default - type of the output). - Results will always be force-cast to any array provided to hold the output. - -\end_layout - -\begin_layout Description -identity -\end_layout - -\begin_layout Description -\InsetSpace ~ - A 1, 0, or None to show the identity for this universal function. - This identity is used for reduction on zero-sized arrays (arrays with a - shape that includes a 0). -\end_layout - -\begin_layout Standard -\begin_inset Float table -wide false -sideways false -status open - -\begin_layout Standard -\begin_inset Caption - -\begin_layout Standard -Universal function (ufunc) attributes. -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -\align center -\begin_inset Tabular -<lyxtabular version="3" rows="9" columns="2"> -<features> -<column alignment="center" valignment="top" leftline="true" width="0"> -<column alignment="center" valignment="top" leftline="true" rightline="true" width="0"> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Name -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Description -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -__doc__ -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Dynamic docstring. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -__name__ -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Name of ufunc -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -nin -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Number of input arguments -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -nout -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Number of output arguments -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -nargs -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Total number of arguments -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -ntypes -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Number of defined inner loops. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -types -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -List showing types for which inner loop is defined. -\end_layout - -\end_inset -</cell> -</row> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -identity -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Identity for this ufunc. -\end_layout - -\end_inset -</cell> -</row> -</lyxtabular> - -\end_inset - - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Section -Casting Rules -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "ufunc!casting rules" - -\end_inset - -At the core of every ufunc is a one-dimensional strided loop that implements - the actual function for a specific type combination. - When a ufunc is created, it is given a static list of inner loops and a - corresponding list of type signatures over which the ufunc operates. - The ufunc machinery uses this list to determine which inner loop to use - for a particular case. - You can inspect the -\family typewriter -.types -\family default - attribute for a particular ufunc to see which type combinations have a - defined inner loop and which output type they produce (the character codes - are used in that output for brevity). - -\end_layout - -\begin_layout Standard -Casting must be done on one or more of the inputs whenever the ufunc does - not have a core loop implementation for the input types provided. - If an implementation for the input types cannot be found, then the algorithm - searches for an implementation with a type signature to which all of the - inputs can be cast -\begin_inset Quotes eld -\end_inset - -safely. -\begin_inset Quotes erd -\end_inset - - The first one it finds in its internal list of loops is selected and performed - with types cast. - Recall that internal copies during ufuncs (even for casting) are limited - to the size of an internal buffer which is user settable. - -\end_layout - -\begin_layout Note -Universal functions in NumPy are flexible enough to have mixed type signatures. - Thus, for example, a universal function could be defined that works with - floating point and integer values. - See ldexp for an example. -\end_layout - -\begin_layout Standard -By the above description, the casting rules are essentially implemented - by the question of when a data type can be cast -\begin_inset Quotes eld -\end_inset - -safely -\begin_inset Quotes erd -\end_inset - - to another data type. - The answer to this question can be determined in Python with a function - call: can_cast (fromtype, totype). - Figure shows the results of this call for my 32-bit system on the 21 internally - supported types. - You can generate this table for your system with code shown in that Figure. -\end_layout - -\begin_layout Standard -\begin_inset Float figure -wide false -sideways false -status open - -\begin_layout MyCode ->>> def print_table(ntypes): -\newline -... - print 'X', -\newline -... - for char in ntypes: print char, -\newline -... - print -\newline -... - for row in ntypes: -\newline -... - print row, -\newline -... - for col in ntypes: -\newline -... - print int(can_cast(row, col)), -\newline -... - print -\newline ->>> print_table(typecodes['All']) -\newline -X ? b h i l q p B H I L Q - P f d g F D G S U V O -\newline -? 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -\newline -b 0 - 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 -\newline -h 0 0 1 1 1 1 1 0 0 0 0 0 0 - 1 1 1 1 1 1 1 1 1 1 -\newline -i 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 -\newline -l 0 0 - 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 -\newline -q 0 0 0 0 0 1 0 0 0 0 0 0 0 0 - 1 1 0 1 1 1 1 1 1 -\newline -p 0 0 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 1 1 1 1 1 1 -\newline -B 0 0 1 - 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -\newline -H 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1 - 1 1 1 1 1 1 1 1 -\newline -I 0 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 -\newline -L 0 0 0 0 - 0 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 -\newline -Q 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 - 0 1 1 1 1 1 1 -\newline -P 0 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 -\newline -f 0 0 0 0 0 - 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 -\newline -d 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 - 1 1 1 1 1 1 -\newline -g 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 1 1 -\newline -F 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 -\newline -D 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 - 1 1 1 1 1 -\newline -G 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 -\newline -S 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 -\newline -U 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 - 0 1 1 1 -\newline -V 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 -\newline -O 0 0 0 0 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 -\end_layout - -\begin_layout Standard -\begin_inset Caption - -\begin_layout Standard -Code segment showing the can cast safely table for a 32-bit system. -\end_layout - -\end_inset - - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -You should note that, while included in the table for completeness, the - 'S', 'U', and 'V' types cannot be operated on by ufuncs. - Also, note that on a 64-bit system the integer types may have different - sizes resulting in a slightly altered table. - -\end_layout - -\begin_layout Standard -Mixed scalar-array operations use a different set of casting rules that - ensure that a scalar cannot upcast an array unless the scalar is of a fundament -ally different kind of data ( -\emph on -i.e. - -\emph default - under a different hierachy in the data type hierarchy) then the array. - This rule enables you to use scalar constants in your code (which as Python - types are interpreted accordingly in ufuncs) without worrying about whether - the precision of the scalar constant will cause upcasting on your large - (small precision) array. - -\end_layout - -\begin_layout Section -Methods -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "ufunc!methods|(" - -\end_inset - -All ufuncs have 4 methods. - However, these methods only make sense on ufuncs that take two input arguments - and return one output argument. - Attempting to call these methods on other ufuncs will cause a -\family typewriter -ValueError -\family default -. - The reduce-like methods all take an axis keyword and a dtype keyword, and - the arrays must all have dimension >= 1. - The -\emph on -axis -\emph default - keyword specifies which axis of the array the reduction will take place - over and may be negative, but must be an integer. - The -\emph on -dtype -\emph default - keyword allows you to manage a very common problem that arises when naively - using <op>.reduce. - Sometimes you may have an array of a certain data type and wish to add - up all of its elements, but the result does not fit into the data type - of the array. - This commonly happens if you have an array of single-byte integers. - The dtype keyword allows you to alter the data type that the reduction - takes place over (and therefore the type of the output). - Thus, you can ensure that the output is a data type with large-enough precision - to handle your output. - The responsibility of altering the reduce type is mostly up to you. - There is one exception: if no dtype is given for a reduction on the -\begin_inset Quotes eld -\end_inset - -add -\begin_inset Quotes erd -\end_inset - - or -\begin_inset Quotes eld -\end_inset - -multiply -\begin_inset Quotes erd -\end_inset - - operations, then if the input type is an integer (or boolean) data-type - and smaller than the size of the int_ data type, it will be internally - upcast to the int_ (or uint) data type. - -\end_layout - -\begin_layout Warning -A reduce-like operation on an array with a data type that has range -\begin_inset Quotes eld -\end_inset - -too small -\begin_inset Quotes erd -\end_inset - - to handle the result will silently wrap. - You should use dtype to increase the data type over which reduction takes - place. -\end_layout - -\begin_layout Subsection -Reduce -\end_layout - -\begin_layout Description -<op>.reduce (array=, axis=0, dtype=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset LatexCommand index -name "ufunc!methods!reduce" - -\end_inset - -For each one-dimensional sequence along the -\emph on -axis -\emph default - dimension of the array, return a single number resulting from recursively - applying the operation to succesive elements along that dimension. - If the input array has -\begin_inset Formula $N$ -\end_inset - - dimensions, then the returned array has -\begin_inset Formula $N-1$ -\end_inset - - dimensions. - This produces the equivalent of the following Python code : -\end_layout - -\begin_layout LyX-Code ->>> indx = [index_exp[:]]*array.ndim -\newline ->>> indx[axis] = 0; N=array.shape[axis] -\newline ->>> - result = array[indx].astype(dtype) -\newline ->>> for i in range(1,N): -\newline -... - indx[axis] = i -\newline -... - <op>(result, array[indx], result) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Studying the above code can also help you gain an appreciation for how - to do generic indexing in Python using -\family typewriter -index_exp -\family default -. - For example, if <op> is add, then <op>.reduce produces a summation along - the given axis. - If <op> is prod, then a repeated multiply is performed. -\end_layout - -\begin_layout Subsection -Accumulate -\end_layout - -\begin_layout Description -<op>.accumulate (array=, axis=0, dtype=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset LatexCommand index -name "ufunc!methods!accumulate" - -\end_inset - -This method is similar to reduce, except it returns an array of the same - shape as the input, and keeps intermediate calculations. - The operation is still performed along the access. - This method underlies the operations of the cumsum and cumprod methods - of arrays. - The following Python code implements an equivalent of the accumulate method. -\end_layout - -\begin_layout LyX-Code ->>> i1 = [index_exp[:]]*array.ndim -\newline ->>> i2 = [index_exp[:]]*array.ndim -\newline ->>> i1[axis] - = 0; N=array.shape[axis] -\newline ->>> result = array.astype(dtype) -\newline ->>> for i in range(1,N): -\newline -... - i1[axis] = i -\newline -... - i2[axis] = i-1 -\newline -... - <op>(result[i1], array[i1], result[i2]) -\end_layout - -\begin_layout Subsection -Reduceat -\end_layout - -\begin_layout Description -<op>.reduceat (array=, indices=, axis=0, dtype=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset LatexCommand index -name "ufunc!methods!reduceat" - -\end_inset - -This method is a generalization of both reduce and accumulate. - It offers the ability to reduce along an axis but only between certain - indices. - The indices input must be a one dimensional (index) sequence. - Then, if -\begin_inset Formula $I_{k}$ -\end_inset - - is the -\begin_inset Formula $k^{\textrm{th}}$ -\end_inset - - element of indices, the reduceat method computes <op>.reduce(array[ -\begin_inset Formula $I_{k}$ -\end_inset - -: -\begin_inset Formula $I_{k+1}$ -\end_inset - -]). - This formula assumes -\begin_inset Formula $I_{k+1}>I_{k}$ -\end_inset - -, and also that -\begin_inset Formula $I_{k+1}$ -\end_inset - - is the length of the input array when -\begin_inset Formula $I_{k}$ -\end_inset - - is the last element. - There is no requirement that the indices be monotonic. - If -\begin_inset Formula $I_{k+1}\leq I_{k},$ -\end_inset - - then reduceat simply returns array[ -\begin_inset Formula $I_{k}$ -\end_inset - -] for that particular element of indices. - In these formulas, we have assumed that array is one dimensional (or axis - is 0). - If the array is -\begin_inset Formula $N$ -\end_inset - --dimensional and axis>0, then the index expression needs axis ':' (full - slice objects) inserted (i.e. - array[ -\begin_inset Formula $\underbrace{:,\ldots,:}_{\textrm{axis}},I_{k}:I_{k+1}$ -\end_inset - -]). - The effect is to slice along the axis dimension. - Equivalent Python code is -\end_layout - -\begin_layout LyX-Code ->>> i1 = [index_exp[:]]*array.ndim -\newline ->>> i2 = [index_exp[:]]*array.ndim -\newline ->>> outshape - = list(array.shape) -\newline ->>> N = array.shape[axis] -\newline ->>> outshape[axis] = len(indices) -\newline ->>> - result = zeros(outshape, dtype or array.dtype) -\newline ->>> for k,Ik in enumerate(indices -): -\newline -... - i1[axis] = k -\newline -... - try: -\newline -... - Ikp1 = indices[k+1] -\newline -... - except IndexError: -\newline -... - Ikp1 = N -\newline -... - if (Ikp1 > Ik): -\end_layout - -\begin_layout LyX-Code -... - i2[axis] = index_exp[Ik:Ikp1] -\newline -... - result[i1] = <op>.reduce(array[i2],axis=axis,dtype=dtype) -\newline -... - else: -\newline -... - result[i1] = array[Ik].astype(dtype) -\end_layout - -\begin_layout Description -\InsetSpace ~ - The returned array has as many dimensions as the input array, and is the - same shape except for the -\emph on -axis -\emph default - dimension which has shape equal to the length of indices (the number of - reduce operations that were performed). - If you ever have a need to compute multiple reductions over portions of - an array, then (if you can get your mind around what it is doing) reduceat - may be just what you were looking for. - -\end_layout - -\begin_deeper -\begin_layout Description -Example: Suppose a is a two-dimensional array of shape -\begin_inset Formula $10\times20$ -\end_inset - -. - Then, res=add.reduce (a, [0,3,1]) returns a -\begin_inset Formula $3\times20$ -\end_inset - - array with res[0,:] = add.reduce(a[:,0:3]), res[1,:] = a[:,3], and res[2,:] - = add.reduce(a[:,1:]). - -\end_layout - -\end_deeper -\begin_layout Subsection -Outer -\end_layout - -\begin_layout Description -<op>.outer (a, b) -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset LatexCommand index -name "ufunc!methods!outer" - -\end_inset - -This method computes an outer operation on <op>. - It computes <op>(a2, b2) where a2 is 'a' with b.ndim 1's post-pended to - it's shape and b2 is 'b' with a.ndim 1's pre-pended to its shape (broadcasting - takes care of this automatically in the code below). - The return shape has a.ndim + b.ndim dimensions. - Equivalent Python code is -\end_layout - -\begin_layout LyX-Code ->>> a.shape += (1,)*b.ndim -\newline ->>> <op>(a,b) -\newline ->>> a = a.squeeze() -\end_layout - -\begin_layout Standard -\InsetSpace ~ - Among many other uses, arithmetic tables can be conveniently built using - outer: -\begin_inset LatexCommand index -name "ufunc!methods|)" - -\end_inset - - -\end_layout - -\begin_layout MyCode ->>> multiply.outer([1,7,9,12],arange(5,12)) -\newline -array([[ 5, 6, 7, 8, - 9, 10, 11], -\newline - [ 35, 42, 49, 56, 63, 70, 77], -\newline - [ 45, 54, - 63, 72, 81, 90, 99], -\newline - [ 60, 72, 84, 96, 108, 120, 132]]) -\end_layout - -\begin_layout Section -Available ufuncs -\end_layout - -\begin_layout Standard -There are currently more than 60 universal functions defined on one or more - types, covering a wide variety of operations. - Some of these ufuncs are called automatically on arrays when the relevant - infix notation is used (i.e. - add(a,b) is called internally when a + b is written and a or b is an ndarray). - Nonetheless, you may still want to use the ufunc call in order to use the - optional output argument(s) to place the output(s) in an object (or in - objects) of your choice. - -\end_layout - -\begin_layout Standard -Recall that each ufunc operates element-by-element. - Therefore, each ufunc will be described as if acting on a set of scalar - inputs to return a set of scalar outputs. -\end_layout - -\begin_layout Note -The ufunc still returns its output(s) even if you use the optional output - argument(s). - -\end_layout - -\begin_layout Subsection -Math operations -\end_layout - -\begin_layout Description -add ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "add" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset Formula $y=x_{1}+x_{2}$ -\end_inset - -. - Called to implement -\family typewriter -x1+x2 -\family default - for arrays -\end_layout - -\begin_layout Description -subtract ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "subtract" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset Formula $y=x_{1}-x_{2}$ -\end_inset - -. - Called to implement -\family typewriter -x1-x2 -\family default - for arrays -\end_layout - -\begin_layout Description -multiply ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "multiply" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset Formula $y=x_{1}\cdot x_{2}$ -\end_inset - -. - Called to implement -\family typewriter -x1*x2 -\family default - for arrays. -\end_layout - -\begin_layout Description -divide ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "divide" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset Formula $y=x_{1}/x_{2}$ -\end_inset - - Integer division results in truncation. - Floating-point does not. - Called to implement -\family typewriter -x1/x2 -\family default - for arrays (when __future__.division is not active). - -\end_layout - -\begin_layout Description -true_divide ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "true\\_divide" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - This version of division always returns an inexact number so that integer - division returns floating point. - Called with __future__.division is active to implement -\family typewriter -x1/x2 -\family default - for arrays. -\end_layout - -\begin_layout Description -floor_divide ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "floor\\_divide" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - This version of division always results in truncation of an fractional - part remaining. - Called to implement -\family typewriter -x1//x2 -\family default - for arrays. -\end_layout - -\begin_layout Description -negative ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "negative" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset Formula $y=-x$ -\end_inset - -. - Called to implement -\family typewriter --x -\family default - for arrays. -\end_layout - -\begin_layout Description -power ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "power" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset Formula $y=x_{1}^{x_{2}}$ -\end_inset - -. - There is no three-term power ufunc defined. - This two-term power function is called to implement -\family typewriter -pow(x1,x2,<any>) -\family default - or -\family typewriter -x1**x2 -\family default - for arrays. - Note that the third term in -\family typewriter -pow -\family default - is ignored for array arguments. -\end_layout - -\begin_layout Description -remainder ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "remainder" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns -\begin_inset Formula $x-y$ -\end_inset - -*floor( -\begin_inset Formula $x/y$ -\end_inset - -). - Result has the sign of -\begin_inset Formula $y$ -\end_inset - -. - Called to implement -\family typewriter -x1%x2 -\family default -. -\end_layout - -\begin_layout Description -mod ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Same as remainder ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]). - -\end_layout - -\begin_layout Description -fmod ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset Formula $x_{1}=kx_{2}+y$ -\end_inset - - where -\begin_inset Formula $k$ -\end_inset - - is the largest integer satisfying this equation. - Computes C-like -\begin_inset Formula $x_{1}\%x_{2}$ -\end_inset - - element-wise. - This was the behavior of -\family typewriter -x1%x2 -\family default - in old Numeric. -\end_layout - -\begin_layout Description -absolute ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "absolute" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset Formula $y=\left|x\right|.$ -\end_inset - - Called to implement -\family typewriter -abs(x) -\family default - for arrays. - -\end_layout - -\begin_layout Description -rint (x, [, y]) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Round -\begin_inset Formula $x$ -\end_inset - - to the nearest integer. - Rounds half-way cases to the nearest even integer. -\end_layout - -\begin_layout Description -sign ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Sets -\begin_inset Formula $y$ -\end_inset - - according to -\begin_inset Formula \[ -\textrm{sign}\left(x\right)=\left\{ \begin{array}{cc} -1 & x:>0,\\ -0 & x=0,\\ --1 & x<0.\end{array}\right.\] - -\end_inset - - -\end_layout - -\begin_layout Description -conj ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "conj" - -\end_inset - - -\end_layout - -\begin_layout Description -conjugate ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "conjugate" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset Formula $y=\overline{x}$ -\end_inset - -; in other words, the complex conjugate of -\begin_inset Formula $x$ -\end_inset - -. -\end_layout - -\begin_layout Description -exp ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "exp" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset Formula $y=e^{x}.$ -\end_inset - - -\end_layout - -\begin_layout Description -log ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "log" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset Formula $y=\log\left(x\right)$ -\end_inset - -. - In other words, -\begin_inset Formula $y$ -\end_inset - - is the number so that -\begin_inset Formula $e^{y}=x$ -\end_inset - -. - -\end_layout - -\begin_layout Description -expm1 ( -\begin_inset Formula $x$ -\end_inset - -, [, -\begin_inset Formula $y$ -\end_inset - -]) -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset Formula $y=e^{x}-1.$ -\end_inset - - Calculated so that it is accurate for small -\begin_inset Formula $\left|x\right|.$ -\end_inset - - -\end_layout - -\begin_layout Description -log1p ( -\begin_inset Formula $x$ -\end_inset - -, [, -\begin_inset Formula $y$ -\end_inset - -]) -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset Formula $y=\log\left(1+x\right)$ -\end_inset - - but accurate for small -\begin_inset Formula $\left|x\right|.$ -\end_inset - - Returns the number -\begin_inset Formula $y$ -\end_inset - - such that -\begin_inset Formula $e^{y}-1=x$ -\end_inset - - -\end_layout - -\begin_layout Description -log10 ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "log10" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset Formula $y=\log10\left(x\right)$ -\end_inset - -. - In other words, -\begin_inset Formula $y$ -\end_inset - - is the number so that -\begin_inset Formula $10^{y}=x.$ -\end_inset - - -\end_layout - -\begin_layout Description -sqrt ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "sqrt" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset Formula $y=\sqrt{x}.$ -\end_inset - - -\end_layout - -\begin_layout Description -square ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset Formula $y=x*x$ -\end_inset - - -\end_layout - -\begin_layout Description -reciprocal ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset Formula $y=1/x$ -\end_inset - - -\end_layout - -\begin_layout Description -ones_like ( -\begin_inset Formula $x$ -\end_inset - -, [, -\begin_inset Formula $y$ -\end_inset - -]) -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset Formula $y=1$ -\end_inset - - If an output argument is not given the returned data-type is the same as - the input data type. -\end_layout - -\begin_layout Tip -The optional output arguments can be used to help you save memory for large - calculations. - If your arrays are large, complicated expressions can take longer than - absolutely necessary due to the creation and (later) destruction of temporary - calculation spaces. - For example, the expression 'G=a*b+c' is equivalent to t1=A*B; G=T1+C; - del t1; It will be more quickly executed as G=A*B; add(G,C,G) which is - the same as G=A*B; G+=C. -\end_layout - -\begin_layout Subsection -Trigonometric functions -\end_layout - -\begin_layout Standard -All trigonometric functions use radians when an angle is called for. - The ratio of degrees to radians is -\begin_inset Formula $180^{\circ}/\pi.$ -\end_inset - - -\end_layout - -\begin_layout Description -sin ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "sin" - -\end_inset - - -\end_layout - -\begin_layout Description -cos ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "cos" - -\end_inset - - -\end_layout - -\begin_layout Description -tan ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "tan" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The standard trignometric functions. - -\begin_inset Formula $y=\sin\left(x\right),$ -\end_inset - - -\begin_inset Formula $y=\cos\left(x\right),$ -\end_inset - - and -\begin_inset Formula $y=\tan\left(x\right).$ -\end_inset - - -\end_layout - -\begin_layout Description -arcsin ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "arcsin" - -\end_inset - - -\end_layout - -\begin_layout Description -arccos ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "arccos" - -\end_inset - - -\end_layout - -\begin_layout Description -arctan ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "arctan" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The inverse trigonometric functions: -\begin_inset Formula $y=\sin^{-1}\left(x\right),$ -\end_inset - - -\begin_inset Formula $y=\cos^{-1}\left(x\right)$ -\end_inset - -, -\begin_inset Formula $y=\tan^{-1}\left(x\right).$ -\end_inset - - These return the value of -\begin_inset Formula $y$ -\end_inset - - (in radians) such that -\begin_inset Formula $\sin\left(y\right)=x$ -\end_inset - - with -\begin_inset Formula $y\in\left[-\frac{\pi}{2},\frac{\pi}{2}\right]$ -\end_inset - -; -\begin_inset Formula $\cos\left(y\right)=x$ -\end_inset - - with -\begin_inset Formula $y\in\left[0,\pi\right]$ -\end_inset - -; and -\begin_inset Formula $\tan\left(y\right)=x$ -\end_inset - - with -\begin_inset Formula $y\in\left[-\frac{\pi}{2},\frac{\pi}{2}\right]$ -\end_inset - -, respectively. - -\end_layout - -\begin_layout Description -arctan2 ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "arctan2" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns -\begin_inset Formula $\tan^{-1}\left(\frac{x_{1}}{x_{2}}\right)$ -\end_inset - - but takes into account the sign on -\begin_inset Formula $x_{1}$ -\end_inset - - and -\begin_inset Formula $x_{2}$ -\end_inset - - to place the angle in the correct quadrant. - The angle -\begin_inset Formula $y$ -\end_inset - - is returned in the full range -\begin_inset Formula $-\pi<y\leq\pi$ -\end_inset - -. - The angle is chosen so that -\begin_inset Formula $\sin\left(y\right)=\frac{x_{1}}{\sqrt{x_{1}^{2}+x_{2}^{2}}},$ -\end_inset - - and -\begin_inset Formula $\cos\left(y\right)=\frac{x_{2}}{\sqrt{x_{1}^{2}+x_{2}^{2}}}.$ -\end_inset - - Particular values are showin in the following table: -\end_layout - -\begin_layout Standard -\align center -\begin_inset Tabular -<lyxtabular version="3" rows="5" columns="3"> -<features> -<column alignment="center" valignment="top" leftline="true" width="0"> -<column alignment="center" valignment="top" leftline="true" width="0"> -<column alignment="center" valignment="top" leftline="true" rightline="true" width="0"> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -\begin_inset Formula $x_{1}$ -\end_inset - - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -\begin_inset Formula $x_{2}$ -\end_inset - - -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -\begin_inset Formula $y=\textrm{arctan2}\left(x_{1},x_{2}\right)$ -\end_inset - - -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -0 -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -1 -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -0 -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -1 -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -0 -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -\begin_inset Formula $\frac{\pi}{2}$ -\end_inset - - -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -0 -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard --1 -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -\begin_inset Formula $\pi$ -\end_inset - - -\end_layout - -\end_inset -</cell> -</row> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard --1 -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -0 -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -\begin_inset Formula $-\frac{\pi}{2}$ -\end_inset - - -\end_layout - -\end_inset -</cell> -</row> -</lyxtabular> - -\end_inset - - -\end_layout - -\begin_layout Description -hypot ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "hypot" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns -\begin_inset Formula $y=\sqrt{x_{1}^{2}+x_{2}^{2}}.$ -\end_inset - - Given a complex number in cartesian form, arctan2 and hypot can be used - to compute phase and magnitude, quickly. -\end_layout - -\begin_layout Description -sinh ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "sinh" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Computes -\begin_inset Formula $y=\sinh\left(x\right)$ -\end_inset - - which is defined as -\begin_inset Formula $\frac{1}{2}\left(e^{x}-e^{-x}\right).$ -\end_inset - - -\end_layout - -\begin_layout Description -cosh ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "cosh" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Computes -\begin_inset Formula $y=\cosh\left(x\right)$ -\end_inset - - which is defined as -\begin_inset Formula $\frac{1}{2}\left(e^{x}+e^{-x}\right).$ -\end_inset - - -\end_layout - -\begin_layout Description -tanh ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "tanh" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Computes -\begin_inset Formula $y=\tanh\left(x\right)$ -\end_inset - - which is defined as -\begin_inset Formula $\left(e^{x}-e^{-x}\right)/\left(e^{x}+e^{-x}\right).$ -\end_inset - - -\end_layout - -\begin_layout Description -arcsinh ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "arcsinh" - -\end_inset - - -\end_layout - -\begin_layout Description -arccosh ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "arccosh" - -\end_inset - - -\end_layout - -\begin_layout Description -arctanh ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "arctanh" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - These compute the inverse hyperpolic functions. - -\begin_inset Formula $y=\textrm{arc}func\left(x\right)$ -\end_inset - - is the (principal) value of -\begin_inset Formula $y$ -\end_inset - - such that -\begin_inset Formula $func\left(y\right)=x.$ -\end_inset - - -\end_layout - -\begin_layout Subsection -Bit-twiddling functions -\end_layout - -\begin_layout Standard -These function all need integer arguments and they maniuplate the bit-pattern - of those arguments. -\end_layout - -\begin_layout Description -bitwise_and ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "bitwise\\_and" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Each bit in -\begin_inset Formula $y$ -\end_inset - - is the result of a bit-wise 'and' operation on the corresponding bits in - -\begin_inset Formula $x_{1}$ -\end_inset - - and -\begin_inset Formula $x_{2}$ -\end_inset - -. - Called to implement -\family typewriter -x1&x2 -\family default - for arrays. - -\end_layout - -\begin_layout Description -bitwise_or ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "bitwise\\_or" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Each bit in -\begin_inset Formula $y$ -\end_inset - - is the result of a bit-wise 'or' operation on the corresponding bits in - -\begin_inset Formula $x_{1}$ -\end_inset - - and -\begin_inset Formula $x_{2}$ -\end_inset - -. - Called to implement -\family typewriter -x1|x2 -\family default - for arrays. -\end_layout - -\begin_layout Description -bitwise_xor ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "bitwise\\_xor" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Each bit in -\begin_inset Formula $y$ -\end_inset - - is the result of a bit-wise 'xor' operation on the corresponding bits in - -\begin_inset Formula $x_{1}$ -\end_inset - - and -\begin_inset Formula $x_{2}$ -\end_inset - -. - An xor operation sets the output to 1 if one and only one of the input - bits is 1. - Called to implement -\family typewriter -x1^x2 -\family default - for arrays. - Using the bitwise_xor operation and the optional output argument you can - swap the values of two integer arrays of equivalent types without using - temporary arrays. -\end_layout - -\begin_layout MyCode ->>> a=arange(10) -\newline ->>> b=arange(10,20) -\newline ->>> bitwise_xor(a,b,a); bitwise_xor(a,b,b); -\newline ->> -> bitwise_xor(a,b,a) -\newline -array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19]) -\newline ->>> print - a; print b -\newline -[10 11 12 13 14 15 16 17 18 19] -\newline -[0 1 2 3 4 5 6 7 8 9] -\end_layout - -\begin_layout Description -invert ( -\begin_inset Formula $x$ -\end_inset - -, [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "invert" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Each bit in -\begin_inset Formula $y$ -\end_inset - - is the opposite of the corresponding bit in -\begin_inset Formula $x$ -\end_inset - -. - Called to implement -\family typewriter -~x -\family default - for arrays. -\end_layout - -\begin_layout Description -left_shift ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "left\\_shift" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Shifts the bits of -\begin_inset Formula $x_{1}$ -\end_inset - - to the left by -\begin_inset Formula $x_{2}$ -\end_inset - -. - Called to implement -\family typewriter -x1<<x2 -\family default - for arrays. - Provided there is no overflow, the result is equal to -\begin_inset Formula $y=x_{1}2^{x_{2}}.$ -\end_inset - - -\end_layout - -\begin_layout Description -right_shift ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "right\\_shift" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Shifts the bits of -\begin_inset Formula $x_{1}$ -\end_inset - - to the right by -\begin_inset Formula $x_{2}$ -\end_inset - -. - Called to implement -\family typewriter -x1>>x2 -\family default - for arrays. - Absent overflow, the result is equal to -\begin_inset Formula $y=x_{1}2^{-x_{2}}$ -\end_inset - -. -\end_layout - -\begin_layout Subsection -Comparison functions -\end_layout - -\begin_layout Standard -All of these functions (except maximum, minimum, and sign) return Boolean - arrays. - -\end_layout - -\begin_layout Description -greater ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "greater" - -\end_inset - - -\end_layout - -\begin_layout Description -greater_equal ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "greater\\_equal" - -\end_inset - - -\end_layout - -\begin_layout Description -less ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "less" - -\end_inset - - -\end_layout - -\begin_layout Description -less_equal ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "less\\_equal" - -\end_inset - - -\end_layout - -\begin_layout Description -not_equal ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "not\\_equal" - -\end_inset - - -\end_layout - -\begin_layout Description -equal ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "equal" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - These functions are called to implement -\family typewriter -x1>x2 -\family default -, -\family typewriter -x1>=x2 -\family default -, -\family typewriter -x1<x2 -\family default -, -\family typewriter -x1<=x2 -\family default -, -\family typewriter -x1!=x2 -\family default - (or -\family typewriter -x1<>x2 -\family default -), and -\family typewriter -x1==x2 -\family default -, respectively, for arrays. -\end_layout - -\begin_layout Description -\InsetSpace ~ - The fact that these functions return Boolean arrays make them very useful - in combination with advanced array indexing. - Thus, for example, arr[arr>10] = 10 clips large values to 10. - Used in conjunction with bitwise operators quite complicated expressions - are possible. - For example, arr[~((arr<10)&(arr>5))] = 0 clips all values outside of the - range -\begin_inset Formula $\left(5,10\right)$ -\end_inset - - to 0. - -\end_layout - -\begin_layout Warning -Do not use the Python keywords -\family typewriter -and -\family default - and -\family typewriter -or -\family default - to combine logical array expressions. - These keywords will test the truth value of the entire array (not element-by-el -ement as you might expect). - Use the bitwise operators: & and | instead. -\end_layout - -\begin_layout Description -logical_and ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "logical\\_and" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The output is the truth value of -\begin_inset Formula $x_{1}$ -\end_inset - - -\series bold -and -\series default - -\begin_inset Formula $x_{2}$ -\end_inset - -. - Numbers equal to 0 are considered False. - Nonzero numbers are True. -\end_layout - -\begin_layout Description -logical_or ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "logical\\_or" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The output, -\begin_inset Formula $y$ -\end_inset - -, is the truth value of -\begin_inset Formula $x_{1}$ -\end_inset - - -\series bold -or -\begin_inset Formula $x_{2}$ -\end_inset - - -\series default - . -\end_layout - -\begin_layout Description -logical_xor ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "logical\\_xor" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The output, -\begin_inset Formula $y$ -\end_inset - -, is the truth value of -\begin_inset Formula $x_{1}$ -\end_inset - - -\series bold -xor -\begin_inset Formula $x_{2}$ -\end_inset - - -\series default -, which is the same as ( -\begin_inset Formula $x_{1}$ -\end_inset - - and not -\begin_inset Formula $x_{2}$ -\end_inset - -) or (not -\begin_inset Formula $x_{1}$ -\end_inset - - and -\begin_inset Formula $x_{2}$ -\end_inset - -). -\end_layout - -\begin_layout Description -logical_not ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "logical\\_not" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The output, -\begin_inset Formula $y$ -\end_inset - - is the truth value of -\series bold -not -\series default - -\begin_inset Formula $x$ -\end_inset - -. - -\end_layout - -\begin_layout Warning -The Bitwise operators (& and |) are the proper way to combine element-by-element - array comparisons. - Be sure to understand the operator precedence: (a>2) & (a<5) is the proper - syntax because a>2 & a<5 will result in an error due to the fact that 2 - & a is evaluated first. -\end_layout - -\begin_layout Description -maximum ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "maximum" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The output, -\begin_inset Formula $y$ -\end_inset - -, is the larger of -\begin_inset Formula $x_{1}$ -\end_inset - - and -\begin_inset Formula $x_{2}$ -\end_inset - -. - -\end_layout - -\begin_layout MyCode ->>> maximum([1,0,5,10],[3,2,4,5]) -\newline -array([ 3, 2, 5, 10]) -\newline ->>> max([1,0,5,10],[3,2, -4,5]) -\newline -[3, 2, 4, 5] -\end_layout - -\begin_layout Tip -The Python function max() will find the maximum over a one-dimensional array, - but it will do so using a slower sequence interface. - The reduce method of the maximum ufunc is much faster. - Also, the max() method will not give answers you might expect for arrays - with greater than one dimension. - The reduce method of minimum also allows you to compute a total minimum - over an array. -\end_layout - -\begin_layout Description -minimum ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "minimum" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The output, -\begin_inset Formula $y$ -\end_inset - -, is the smaller of -\begin_inset Formula $x_{1}$ -\end_inset - - and -\begin_inset Formula $x_{2}$ -\end_inset - -. -\end_layout - -\begin_layout MyCode ->>> minimum([1,0,5,10],[3,2,4,5]) -\newline -array([1, 0, 4, 5]) -\newline ->>> min([1,0,5,10],[3,2,4,5] -) -\newline -[1, 0, 5, 10] -\end_layout - -\begin_layout Warning -the behavior of maximum(a,b) is than that of max(a,b). - As a ufunc, maximum(a,b) performs an element-by-element comparison of a - and b and chooses each element of the result according to which element - in the two arrays is larger. - In contrast, max(a,b) treats the objects a and b as a whole, looks at the - (total) truth value of a>b and uses it to return either a or b (as a whole). - A similar difference exists between minimum(a,b) and min(a,b). - -\end_layout - -\begin_layout Subsection -Floating functions -\end_layout - -\begin_layout Standard -Recall that all of these functions work element-by-element over an array, - returning an array output. - The description details only a single operation. -\end_layout - -\begin_layout Description -isreal ( -\begin_inset Formula $x$ -\end_inset - -) -\begin_inset LatexCommand index -name "isreal" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - True if -\begin_inset Formula $x$ -\end_inset - - has an imaginary part that is 0. -\end_layout - -\begin_layout Description -iscomplex ( -\begin_inset Formula $x$ -\end_inset - -) -\begin_inset LatexCommand index -name "iscomplex" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - True if -\begin_inset Formula $x$ -\end_inset - - has an imaginary part that is non-zero. - -\end_layout - -\begin_layout Description -isfinite ( -\begin_inset Formula $x$ -\end_inset - -) -\begin_inset LatexCommand index -name "isfinite" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - True if -\begin_inset Formula $x$ -\end_inset - - is a finite floating point number (not a NaN or an Inf). - -\end_layout - -\begin_layout Description -isinf ( -\begin_inset Formula $x$ -\end_inset - -) -\begin_inset LatexCommand index -name "isinf" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - True if -\begin_inset Formula $x$ -\end_inset - - is -\begin_inset Formula $\pm\infty$ -\end_inset - -. - -\end_layout - -\begin_layout Description -isnan ( -\begin_inset Formula $x$ -\end_inset - -) -\begin_inset LatexCommand index -name "isnan" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - True if -\begin_inset Formula $x$ -\end_inset - - is Not-a-Number. - This represents invalid results. - When a NaN is created, the invalid flag is set. - If you set the error mode of invalid to 'warn', 'raise', or 'call', then - the appropriate action will be performed on NaN creation. - -\end_layout - -\begin_layout Description -signbit ( -\begin_inset Formula $x$ -\end_inset - -) -\begin_inset LatexCommand index -name "signbit" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - True where the sign bit of the floating point number is set. - This should correspond to -\begin_inset Formula $x>0$ -\end_inset - - when -\begin_inset Formula $x$ -\end_inset - - is a finite number. - When, -\begin_inset Formula $x$ -\end_inset - - is NaN or infinite, then this tests the actual signbit. - -\end_layout - -\begin_layout Description -modf ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y_{1}$ -\end_inset - -, -\begin_inset Formula $y_{2}$ -\end_inset - -]) -\begin_inset LatexCommand index -name "modf" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Breaks up the floating point value -\begin_inset Formula $x$ -\end_inset - - into its fractional, -\begin_inset Formula $y_{1}$ -\end_inset - -, and integral, -\begin_inset Formula $y_{2}$ -\end_inset - -, parts. - Thus, -\begin_inset Formula $x=y_{1}+y_{2}$ -\end_inset - - with -\family typewriter -floor(y2)==y2 -\family default -. - -\end_layout - -\begin_layout Description -ldexp ( -\begin_inset Formula $x$ -\end_inset - -, -\begin_inset Formula $n$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "ldexp" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Fast multiply of a floating point number by an integral power of 2: -\begin_inset Formula $y=2^{n}x.$ -\end_inset - - -\end_layout - -\begin_layout Description -frexp ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -, -\begin_inset Formula $n$ -\end_inset - -]) -\begin_inset LatexCommand index -name "frexp" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Breaks up the floating point value -\begin_inset Formula $x$ -\end_inset - - into a normalized fraction, -\begin_inset Formula $y$ -\end_inset - - and an exponent, -\begin_inset Formula $n$ -\end_inset - - which corresponds to how the value is represented in the computer. - The results are such that -\begin_inset Formula $x=y2^{n}.$ -\end_inset - - Effectively, the inverse of ldexp. - -\end_layout - -\begin_layout Description -fmod ( -\begin_inset Formula $x_{1}$ -\end_inset - -, -\begin_inset Formula $x_{2}$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - -]) -\begin_inset LatexCommand index -name "fmod" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Computes the remainder of dividing -\begin_inset Formula $x_{1}$ -\end_inset - - by -\begin_inset Formula $x_{2}$ -\end_inset - -. - The result, -\begin_inset Formula $y$ -\end_inset - -, is -\begin_inset Formula $x_{1}-nx_{2}$ -\end_inset - - where -\begin_inset Formula $n$ -\end_inset - - is the quotient (rounded towards zero to an integer) of -\begin_inset Formula $x_{1}/x_{2}.$ -\end_inset - - -\end_layout - -\begin_layout Description -floor ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - - ]) -\begin_inset LatexCommand index -name "floor" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return -\begin_inset Formula $y=\left\lfloor x\right\rfloor $ -\end_inset - - where -\begin_inset Formula $y$ -\end_inset - - is the nearest integer smaller-than or equal to -\begin_inset Formula $x.$ -\end_inset - - Thus, -\begin_inset Formula $ $ -\end_inset - - -\begin_inset Formula $\left\lfloor x\right\rfloor \leq x<\left\lfloor x\right\rfloor +1$ -\end_inset - -. - -\end_layout - -\begin_layout Description -ceil ( -\begin_inset Formula $x$ -\end_inset - - [, -\begin_inset Formula $y$ -\end_inset - - ]) -\begin_inset LatexCommand index -name "ceil" - -\end_inset - - -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return -\begin_inset Formula $y=\left\lceil x\right\rceil $ -\end_inset - - where -\begin_inset Formula $y$ -\end_inset - - is the nearest integer greater-than or equal to -\begin_inset Formula $x$ -\end_inset - -. - Thus, -\begin_inset Formula $x\leq\left\lceil x\right\rceil <x+1.$ -\end_inset - - -\begin_inset LatexCommand index -name "ufunc|)" - -\end_inset - - -\end_layout - -\begin_layout Chapter -Basic Modules -\end_layout - -\begin_layout Quotation -It is the mark of an educated mind to rest satisfied with the degree of - precision which the nature of the subject admits and not to seek exactness - where only an approximation is possible. -\end_layout - -\begin_layout Right Address ---- -\emph on -Aristotle -\end_layout - -\begin_layout Quotation -"Oh no. - We're in the hands of engineers!" -\end_layout - -\begin_layout Right Address ---- -\emph on -Malcolm, Ian in 'Jurassic Park' -\end_layout - -\begin_layout Standard -The NumPy distribution contains some basic functionality equivalent to what - was available in the Numeric packages previously. - This section documents the new interfaces. - These are sub-packages of the NumPy namespace. - The linalg and fft capabilities are useful but limited. - You should install the full SciPy package to access more functionality. - The numpy.dual module contains functions that are defined in both SciPy - and NumPy. - If SciPy defines func, then numpy.dual.func will point to the SciPy version, - otherwise it will point to the NumPy version. - It must be imported specifically to be used. - Table -\begin_inset LatexCommand ref -reference "cap:Functions-in-numpy.dual" - -\end_inset - - shows the functions defined in numpy.dual that are in both NumPy and SciPy. -\end_layout - -\begin_layout Standard -\begin_inset Float table -wide false -sideways false -status open - -\begin_layout Standard -\begin_inset Caption - -\begin_layout Standard -\begin_inset LatexCommand label -name "cap:Functions-in-numpy.dual" - -\end_inset - -Functions in numpy.dual (both in NumPy and SciPy) -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Standard -\align center -\begin_inset Tabular -<lyxtabular version="3" rows="4" columns="2"> -<features> -<column alignment="center" valignment="top" leftline="true" width="0"> -<column alignment="center" valignment="middle" leftline="true" rightline="true" width="55text%"> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Family -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Functions -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Fourier Transforms -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -fft, ifft, fft2, ifft2, fftn, ifftn -\end_layout - -\end_inset -</cell> -</row> -<row topline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Linear Algebra -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -norm, det, inv, pinv, solve, eig, eigh, eigvals, eigvalsh, lstsq, cholesky, - svd -\end_layout - -\end_inset -</cell> -</row> -<row topline="true" bottomline="true"> -<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -Special Functions -\end_layout - -\end_inset -</cell> -<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none"> -\begin_inset Text - -\begin_layout Standard -i0 -\end_layout - -\end_inset -</cell> -</row> -</lyxtabular> - -\end_inset - - -\end_layout - -\end_inset - - -\end_layout - -\begin_layout Section -Linear Algebra ( -\family typewriter -linalg -\family default -) -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "linalg|(" - -\end_inset - -These functions are in the numpy.linalg sub-package. -\end_layout - -\begin_layout Description -inv (A) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the (matrix) inverse of the 2-d array A. - The result, X, is such that dot(A,X) is equal to eye(*A.shape) (to within - machine precision). - -\end_layout - -\begin_layout Description -solve (A,b) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Find the solution to the linear equation -\begin_inset Formula $\mathbf{Ax}=\mathbf{b}$ -\end_inset - -, where -\begin_inset Formula $A$ -\end_inset - - is a 2-d array and -\begin_inset Formula $b$ -\end_inset - - is a 1-d or 2-d array. - -\end_layout - -\begin_layout Description -tensorsolve (A, b, axes=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Find the solution, -\begin_inset Formula $x_{kl}$ -\end_inset - -, to the multi-index linear equation -\begin_inset Formula \[ -\sum_{kl}A_{ijkl}x_{kl}=b_{ij}.\] - -\end_inset - - The axes argument specifies which dimensions of -\begin_inset Formula $A$ -\end_inset - - are summed over. - If it is None, then the last A.ndim - b.ndim dimensions are summed over. - The result, therefore, has dimension x.ndim = A.ndim-b.ndim. - -\end_layout - -\begin_layout Description -tensorinv (A, ind=2) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Find the tensor inverse of -\begin_inset Formula $A$ -\end_inset - -, defined to be the tensor such that tensordot (Ainv, A) is an identity - operator. - -\end_layout - -\begin_layout Description -cholesky (A) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return, -\begin_inset Formula $\mathbf{L}$ -\end_inset - -, the Cholesky decomposition of -\begin_inset Formula $\mathbf{A}$ -\end_inset - -. - Cholesky decomposition is applicable to a Hermitian, positive definite - matrices. - When -\begin_inset Formula $\mathbf{A}=\mathbf{A}^{H}$ -\end_inset - - and -\begin_inset Formula $\mathbf{x}^{H}\mathbf{Ax}\geq0$ -\end_inset - - for all -\begin_inset Formula $\mathbf{x}$ -\end_inset - -, then decompositions of -\begin_inset Formula $\mathbf{A}$ -\end_inset - - can be found so that -\begin_inset Formula $\mathbf{A}=\mathbf{LL}^{H}$ -\end_inset - -, where -\begin_inset Formula $\mathbf{L}$ -\end_inset - - is lower-triangular. - -\end_layout - -\begin_layout Description -eigvals (A) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return all solutions ( -\begin_inset Formula $\lambda$ -\end_inset - -) to the equation -\begin_inset Formula $\mathbf{Ax}=\lambda\mathbf{x}$ -\end_inset - -. -\end_layout - -\begin_layout Description -eig (A) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return all solutions -\begin_inset Formula $\left(\lambda,\mathbf{x}\right)$ -\end_inset - - to the equation -\begin_inset Formula $\mathbf{Ax}=\lambda\mathbf{x}$ -\end_inset - -. - The first element of the return tuple contains all the eigenvalues. - The second element of the return tuple contains the eigenvectors in the - columns (x[:,i] is the ith eigenvector). -\end_layout - -\begin_layout Description -eigvalsh (U) -\end_layout - -\begin_layout Description -eigh (U) -\end_layout - -\begin_layout Description -\InsetSpace ~ - These functions are identical to eigvals and eig except they only work - with Hermitian matrices where -\begin_inset Formula $\mathbf{U}^{H}=\mathbf{U}$ -\end_inset - - (only the lower-triangular part of the array is used). -\end_layout - -\begin_layout Description -svd (A) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Compute the singular value decomposition of the 2-d array -\begin_inset Formula $\mathbf{A}$ -\end_inset - -. - Every -\begin_inset Formula $m\times n$ -\end_inset - - matrix can be decomposed into a pair of unitary matrices, -\begin_inset Formula $\mathbf{U}=\mathbf{U}^{H}$ -\end_inset - - ( -\begin_inset Formula $m\times m$ -\end_inset - -) and -\begin_inset Formula $\mathbf{V}=\mathbf{V}^{H}$ -\end_inset - - ( -\begin_inset Formula $n\times n$ -\end_inset - -) and an -\begin_inset Formula $m\times n$ -\end_inset - - -\begin_inset Quotes eld -\end_inset - -diagonal -\begin_inset Quotes erd -\end_inset - - matrix -\begin_inset Formula $\boldsymbol{\Sigma}$ -\end_inset - -, such that -\begin_inset Formula $\mathbf{A}=\mathbf{U\boldsymbol{\Sigma}}\mathbf{V}^{H}$ -\end_inset - -. - The only non-zero portion of -\begin_inset Formula $\boldsymbol{\Sigma}$ -\end_inset - - is the upper -\begin_inset Formula $r\times r$ -\end_inset - - block where -\begin_inset Formula $r=\min\left(m,n\right)$ -\end_inset - -. - The svd function returns three arrays as a tuple: ( -\begin_inset Formula $\mathbf{U}$ -\end_inset - -, -\begin_inset Formula $\boldsymbol{\sigma}$ -\end_inset - -, -\begin_inset Formula $\mathbf{V}^{H}$ -\end_inset - -). - The singular values are returned in the 1-d array -\begin_inset Formula $\boldsymbol{\sigma}$ -\end_inset - -. - If needed, the array -\begin_inset Formula $\boldsymbol{\Sigma}$ -\end_inset - - can be found (if really needed) using the command diag( -\begin_inset Formula $\boldsymbol{\sigma}$ -\end_inset - -) which creates the -\begin_inset Formula $r\times r$ -\end_inset - - diagonal block and then inserting this into a zeros matrix: -\end_layout - -\begin_layout MyCode ->>> A = random.rand(3,5) -\newline ->>> from numpy.dual import svd; U,s,Vh = svd(A) -\newline ->>> - r=min(*A.shape); Sig = zeros_like(A); -\newline ->>> Sig[:r,:r] = diag(s); print Sig -\newline -[[ - 2.1634 0. - 0. - 0. - 0. - ] -\newline - [ 0. - 0.7076 0. - 0. - 0. - ] -\newline - [ 0. - 0. - 0.2098 0. - 0. - ]] -\end_layout - -\begin_layout Description -pinv (A, rcond= -\begin_inset Formula $10^{-10}$ -\end_inset - -) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the generalized, pseudo inverse, of -\begin_inset Formula $A$ -\end_inset - -. - For invertible matrices, this is the same as the inverse. - -\end_layout - -\begin_layout Description -det (A) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the determinant of the array. - The determinant of an array is the product of its singular values. - -\end_layout - -\begin_layout Description -lstsq (A, b, rcond= -\begin_inset Formula $10^{-10}$ -\end_inset - -) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return (x, resids, rank, s) where x minimizes resids= -\begin_inset Formula $\left\Vert \mathbf{Ax}-\mathbf{b}\right\Vert _{2}$ -\end_inset - -. - The output rank is the rank of A and s is the singular values of a in descendin -g order. - Singular values less than s[0]*rcond are treated as 0. - If the rank of A is less than the number of columns of A or greater than - the number of rows, resids will be returned as an empty array. -\begin_inset LatexCommand index -name "linalg|)" - -\end_inset - - -\end_layout - -\begin_layout Section -Discrete Fourier Transforms ( -\family typewriter -fft -\family default -) -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "fft|(" - -\end_inset - -All of the algorithms here are most efficient if the length of the data - is a power of 2 (or decomposable into low prime factors). - -\end_layout - -\begin_layout Description -fft (x, n=None, axis=-1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return, X, the N-point Discrete Fourier Transform (DFT) of x along the - given axis using a fast algorithm. - If N is larger than x.shape[axis], then x will be zero-padded. - If N is smaller than x.shape[axis], then the first N items will be used. - The result is computed for -\begin_inset Formula $k=0\ldots n-1$ -\end_inset - - from the formula: -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -X\left[k\right]=\sum_{m=0}^{n-1}x[m]\exp\left(-j\frac{2\pi km}{n}\right).\] - -\end_inset - - -\end_layout - -\begin_layout Tip -The fft returns values for -\begin_inset Formula $k=0\ldots N-1$ -\end_inset - -. - Because -\begin_inset Formula $X\left[N-k\right]=X[-k]$ -\end_inset - - in the FFT formula, larger values of k correspond also to negative frequencies. -\end_layout - -\begin_layout Description -ifft (X, n=None, axis=-1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the inverse of the fft so that (ifft(fft(a)) == a within numerical - precision. - The order of frequencies must be the same as returned by fft. - The result is computed (using a fast algorithm) for -\begin_inset Formula $m=0\ldots n-1$ -\end_inset - - from the formula: -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -x\left[m\right]=\frac{1}{n}\sum_{k=0}^{n-1}X\left[k\right]\exp\left(j\frac{2\pi km}{n}\right).\] - -\end_inset - - -\end_layout - -\begin_layout Standard -Sometimes having the -\begin_inset Quotes eld -\end_inset - -negative -\begin_inset Quotes erd -\end_inset - - frequencies at the end of the output returned by fft can be a little confusing. - There are two ways to deal with this confusion. - In my opinion, the most useful way is to get a collection of DFT sample - frequencies and use them to keep track of where each frequency is. - The function -\family typewriter -fftfreq -\family default - provides these sample frequencies. - Making an x-y plot, where the sample frequencies are along the -\begin_inset Quotes eld -\end_inset - -x -\begin_inset Quotes erd -\end_inset - --axis and the result of the DFT is along the -\begin_inset Quotes eld -\end_inset - -y -\begin_inset Quotes erd -\end_inset - --axis provides a useful visualization with the zero-frequency at the center - of the plot. - The advantage of this approach is that your data is still in proper order - for using the -\family typewriter -ifft -\family default - function. - Some people, however, prefer to simply swap one-half of the output with - the other. - This is exactly what the function -\family typewriter -fftshift -\family default - does. - Of course, now the data is not in the proper order for the ifft function, - but to each his own. - -\end_layout - -\begin_layout Standard -The reason that the -\begin_inset Quotes eld -\end_inset - -negative -\begin_inset Quotes erd -\end_inset - - frequencies are in the upper part of the return signal was given in the - description of the DFT. - The reason is that the output of the DFT is just one period of a periodic - function (with period -\begin_inset Formula $n$ -\end_inset - -). - The traditional output of the FFT algorithm is to provide the portion of - the function from from -\begin_inset Formula $k=0$ -\end_inset - - to -\begin_inset Formula $k=n-1$ -\end_inset - -. - -\end_layout - -\begin_layout Description -fftshift (x, axes=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Shift zero-frequency component to the center of the spectrum. - This function swaps half-spaces for all axes listed (defaults to all of - them). - -\end_layout - -\begin_layout Description -ifftshift (x, axes=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Reverse the effect of the fftshift operation. - Thus, it takes zero-centered data and shifts it into the correct order - for the ifft operation. -\end_layout - -\begin_layout Description -fftfreq (n, d=1.0) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Provide the DFT sample frequencies. - The returned float array contains the frequency bins in the order returned - from the fft function. - If given, -\begin_inset Formula $d$ -\end_inset - - represents the sample-spacing. - The units on the frequency bins are cycles / unit. - For example, the following example computes the output frequencies (in - Hz) of the fft of -\begin_inset Formula $256$ -\end_inset - - samples of a voice signal sampled at 20000Hz. -\end_layout - -\begin_layout MyCode ->>> from numpy.fft import fftfreq; f=fftfreq(256,d=1./20e3) -\newline ->>> print f[0], - f[1], f[2], f[128] -\newline -0.0 78.125 156.25 -10000.0 -\end_layout - -\begin_layout Description -fft2 (x, s=None, axes=(-2,-1)) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the two-dimensional fft of the array x for each 2-d array formed - by axes. - The 2-d fft is computed as -\begin_inset Formula \[ -X\left[k_{0},k_{1}\right]=\sum_{m_{0}=0}^{s[0]-1}\sum_{m_{1}=0}^{s[1]-1}x\left[m_{0},m_{1}\right]\exp\left(-j\frac{2\pi k_{0}m_{0}}{s[0]}\right)\exp\left[-j\frac{2\pi k_{1}m_{1}}{s\left[1\right]}\right]\] - -\end_inset - - and can be realized by repeated application of the 1-d fft (first over - the axes[0] and then over axes[1]). - In other-words fft2(x,s,axes) is equivalent to fft(fft(x, s[0], axes[0]), - s[1], axes[1]). - The 2-d fft is returned for -\begin_inset Formula $k_{0}=0\ldots s[0]-1$ -\end_inset - - and -\begin_inset Formula $k_{1}=0\ldots s[1]-1.$ -\end_inset - - Symmetry ( -\begin_inset Formula $X\left[s[0]-k_{0},s[1]-k_{1}\right]=X[-k_{0},-k_{1}]$ -\end_inset - -) ensures that higher values of -\begin_inset Formula $k_{i}$ -\end_inset - - correspond to negative frequencies. - -\end_layout - -\begin_layout Description -ifft2 (X, s=None, axes=(-2,-1)) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the inverse of the two-dimension fft. - Thus, ifft2(fft2(x)) == x to within numerical precision. - Note that the -\begin_inset Quotes eld -\end_inset - -negative frequencies -\begin_inset Quotes erd -\end_inset - - must be -\end_layout - -\begin_layout Description -fftn (x, s=None, axes=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the -\begin_inset Formula $N$ -\end_inset - --dimensional fft of x. - If s is not given, then if axes is given, then -\begin_inset Formula $N$ -\end_inset - -=len(axes), otherwise -\begin_inset Formula $N$ -\end_inset - -=x.ndim. - If s is given, then -\begin_inset Formula $N$ -\end_inset - -=len(s). - Results are computed using a similar formula as for the 1- and 2-d FFT - with -\begin_inset Formula $N$ -\end_inset - - summations. - -\end_layout - -\begin_layout Description -ifftn (X, s=None, axes=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the -\begin_inset Formula $N$ -\end_inset - --dimensional inverse fft of -\begin_inset Formula $X$ -\end_inset - -. - Note that ifftn(fftn(x)) == x to within machine precision. - -\end_layout - -\begin_layout Standard -The Discrete Fourier transform returns complex-valued data (even for real-valued - input). - If the data was originally real-valued, then much of the output of the - full DFT is redundant. - Notice that if -\begin_inset Formula $x\left[m\right]$ -\end_inset - - is real, then -\begin_inset Formula \begin{eqnarray*} -X\left[n-k\right] & = & \sum_{m=0}^{n-1}x[m]\exp\left(-j\frac{2\pi\left(n-k\right)m}{n}\right)\\ - & = & \left[\sum_{m=0}^{n-1}x\left[m\right]\exp\left(-j\frac{2\pi km}{n}\right)\right]^{*}\\ - & = & X^{*}\left[k\right],\end{eqnarray*} - -\end_inset - -where -\begin_inset Formula $a^{*}$ -\end_inset - - denotes the complex-conjugate of -\begin_inset Formula $a$ -\end_inset - -. - So, the upper half of the fft output (the negative frequencies) is determined - exactly by the lower half of the output when the input is purely real. - This kind of symmetry is called Hermitian symmetry. - The real-valued Fourier transforms described next take advantage of Hermitian - symmetry to compute only the unique outputs more quickly. - -\end_layout - -\begin_layout Standard -The symmetry in higher dimensions is always about the origin. - If -\begin_inset Formula $N$ -\end_inset - - is the number of dimensions, then: -\begin_inset Formula \[ -X[n_{1}-k_{1},n_{2}-k_{2},\ldots n_{N}-k_{N}]=X^{*}\left[k_{1},k_{2},\ldots,k_{N}\right].\] - -\end_inset - -Thus, the data-savings remains constant at about 1/2 for higher dimensions - as well. - -\end_layout - -\begin_layout Description -rfft (x, n=None, axis=-1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Compute the first n//2+1 points of the -\begin_inset Formula $n$ -\end_inset - --point discrete Fourier transform of the real valued data along the given - axis. - The returned array will be just the first half of the -\family typewriter -fft -\family default -, corresponding to positive frequencies: rfft(x) == fft(x)[:n//2+1] -\end_layout - -\begin_layout Description -irfft (X, n=None, axis=-1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Compute the inverse -\begin_inset Formula $n$ -\end_inset - --point discrete Fourier transform along the given axis using the first n//2+1 - points. - To within numerical precision, irfft(rfft(x))==x. - -\end_layout - -\begin_layout Description -rfft2 (x, s=None, axes=(-2, -1)) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Compute only the first half-plane of the two-dimensional discrete Fourier - transform corresponding to unique values. - s[0] and -\begin_inset Formula $s[1]$ -\end_inset - --point DFTs will be computed along axes[0] and axes[1] dimensions, respectively. - Requires a real array. - If -\begin_inset Formula $s$ -\end_inset - - is None it defaults to the shape of -\begin_inset Formula $x.$ -\end_inset - - The real fft will be computed along the last axis specified in axes while - a full fft will be computed in the other dimension. -\end_layout - -\begin_layout Description -irfft2 (X, s=None, axes=(-2, -1)) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Compute the inverse of the 2-d DFT using only the first quadrant. - Returns a real array such that to within numerical precision irfft2(rfft2(x))== -x. -\end_layout - -\begin_layout Description -rfftn (x, s=None, axes=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Compute only the unique part of the -\begin_inset Formula $N$ -\end_inset - --dimensional DFT from a real-valued array. - If -\begin_inset Formula $s$ -\end_inset - - is None it defaults to the shape of x. - If axes is not given it defaults to all the axes (-n, -\begin_inset Formula $\ldots$ -\end_inset - -, -1). - The length of axes provides the dimensionality of the DFT. - The unique part of the real -\begin_inset Formula $N$ -\end_inset - --dimensional DFT is obtained by slicing the full fft along the last axis - specified and taking n//2+1 slices. - rfftn(x) == fft(x)[sliceobj] where sliceobj[axes[-1]] = slice(None,s[-1]//2+1,N -one). -\end_layout - -\begin_layout Description -irfftn (X, s=None, axes=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Compute the inverse DFT from the unique portions of the N-dimensional DFT - provided by -\family typewriter -rfftn -\family default -. -\end_layout - -\begin_layout Standard -Occasionally, the situation may arise where you have complex-valued data - with Hermitian symmetry (or real-valued symmetric data). - This ensures that the Fourier transform will be real. - The two functions below can calculate it without wasting extra space for - the zero-valued imaginary entries of the Discrete Fourier transform, or - the entire signal. -\end_layout - -\begin_layout Description -hfft (x, n=None, axis=-1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Calculate the -\begin_inset Formula $n$ -\end_inset - --point real-valued Fourier transform from (the first half of Hermitian-symmetric - data, x. - -\end_layout - -\begin_layout Description -ihfft (X, n=None, axis=-1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return (the first half-of) Hermitian-symmetric data from the real-valued - Fourier transform, X. -\begin_inset LatexCommand index -name "fft|)" - -\end_inset - - -\end_layout - -\begin_layout Section -Random Numbers ( -\family typewriter -random -\family default -) -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "random|(" - -\end_inset - -The random number capabilities surpass those that were available in Numeric. - The random number facilities were generously contributed by Robert Kern, - who has been a dedicated and patient help to many mailing list questioners. - Robert built the random package using Pyrex to build on top of his own - code as well as that of randomkit by Jean-Sebastien Roy as well as code - by Ivan Frohne. - The fundamental random number generator is the Mersenne Twister based on - code written by Makoto Matsumoto and Takuji Nishimura (and modified for - Python by Raymond Hettinger). - Random numbers from discrete and continuous distributions are available, - as well as some useful random-number-related utilities. - Many of the random number generators are based on algorithms published - by Luc Devroye in -\begin_inset Quotes eld -\end_inset - -Non-Uniform Random Variate Generation -\begin_inset Quotes erd -\end_inset - - available electronically at -\begin_inset LatexCommand htmlurl -target "http://cgm.cs.mcgill.ca/~luc/rnbookindex.html" - -\end_inset - - -\end_layout - -\begin_layout Standard -Each of the discrete and continuous random number generators take a size - keyword. - If this is None (default), then the size is determined from the additional - inputs (using ufunc-like broadcasting). - If no additional inputs are needed, or if these additional inputs are scalars, - then a single number is generated from the selected distribution. - If size is an integer, then a 1-d array of that size is generated filled - with random numbers from the selected distribution. - Finally, if size is a tuple, then an array of that shape is returned filled - with random numbers. - -\end_layout - -\begin_layout Standard -Many distributions take additional inputs as parameters. - These additional inputs must be broadcastable to each other (and to the - size parameter if it is not None). - The broadcasting behavior of the additional inputs is ufunc-like. - -\end_layout - -\begin_layout Subsection -Discrete Distributions -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "random!discrete|(" - -\end_inset - -Discrete random numbers take on only a countable number of values (typically - integers). - Each distribution has associated with it a probability mass function (pmf), - -\begin_inset Formula $p_{m}\left(k;\cdot\right),$ -\end_inset - - that is defined as the probability that the returned random number is -\begin_inset Formula $k$ -\end_inset - -. - The arguments after -\begin_inset Formula $k$ -\end_inset - - represent possible parameters to the distribution. - Thus, let -\begin_inset Formula $X\left(\cdot\right)$ -\end_inset - - represent the random number generator for a particular distribution. - Then, -\begin_inset Formula \[ -p_{m}\left(k;\cdot\right)=\textrm{Probability}\left\{ X\left(\cdot\right)=k\right\} .\] - -\end_inset - - -\end_layout - -\begin_layout Standard -It will be useful to define the discrete indicator function, -\begin_inset Formula $I_{S}\left(k\right),$ -\end_inset - - where -\begin_inset Formula $S$ -\end_inset - - is a set of integers (often represented by an interval). - -\begin_inset Formula $I_{S}\left(k\right)=1$ -\end_inset - - if -\begin_inset Formula $k\in S$ -\end_inset - -, otherwise -\begin_inset Formula $I_{S}\left(k\right)=0.$ -\end_inset - - This convenient notation isolates the relevance of a particular functional - form to a certain range. - Also, the formulas below make use of the following definition: -\begin_inset Formula \[ -\left(\begin{array}{c} -n\\ -k\end{array}\right)=\frac{n!}{k!\left(n-k\right)!}\] - -\end_inset - - where -\begin_inset Formula $k!=k\cdot\left(k-1\right)\cdot\cdots\cdot2\cdot1.$ -\end_inset - - -\end_layout - -\begin_layout Description -binomial (n, p, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This random number models the number of successes in -\begin_inset Formula $n$ -\end_inset - - independent trials of a random experiment where the probability of success - in each experiment is -\begin_inset Formula $p$ -\end_inset - -. - -\begin_inset Formula \[ -p_{m}\left(k\right)=\left(\begin{array}{c} -n\\ -k\end{array}\right)p^{k}\left(1-p\right)^{n-k}I_{\left[0,n\right]}\left(k\right).\] - -\end_inset - - -\end_layout - -\begin_layout Description -geometric (p, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This random number models the number of (independent) attempts required - to obtain a success where the probability of success on each attempt is - -\begin_inset Formula $p$ -\end_inset - -. - -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -p_{m}\left(k;p\right)=\left(1-p\right)^{k-1}p\, I_{\left[1,\infty\right)}\left(k\right).\] - -\end_inset - - -\end_layout - -\begin_layout Description -hypergeometric (ngood, nbad, nsample, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Imagine a probability theorists favorite urn filled with -\begin_inset Formula $n_{g}$ -\end_inset - - -\begin_inset Quotes eld -\end_inset - -good -\begin_inset Quotes erd -\end_inset - - objects and -\begin_inset Formula $n_{b}$ -\end_inset - - -\begin_inset Quotes eld -\end_inset - -bad -\begin_inset Quotes erd -\end_inset - - objects. - In other words there are two types of objects in a jar. - The hypergeometric random number models how many -\begin_inset Quotes eld -\end_inset - -good -\begin_inset Quotes erd -\end_inset - - objects will be present when -\begin_inset Formula $N$ -\end_inset - - items are taken out of the urn without replacement. -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -p\left(k;n_{g},n_{b},N\right)=\frac{\left(\begin{array}{c} -n_{g}\\ -k\end{array}\right)\left(\begin{array}{c} -n_{b}\\ -N-k\end{array}\right)}{\left(\begin{array}{c} -n_{g}+n_{b}\\ -N\end{array}\right)}I_{\left[N-n_{b},\textrm{min}\left(n,N\right)\right]}\left(k\right).\] - -\end_inset - - -\end_layout - -\begin_layout Description -logseries (p, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A random number whose pmf with terms proportional to the Taylor series - expansion of -\begin_inset Formula $\log\left(1-p\right)$ -\end_inset - -. - It has been used in biological studies to model the species abundance distribut -ion. - -\begin_inset Formula \[ -p_{m}\left(k;p\right)=-\frac{p^{k}}{k\log\left(1-p\right)}\, I_{\left[1,\infty\right)}\left(k\right).\] - -\end_inset - - -\end_layout - -\begin_layout Description -multinomial (n, pvals, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This generator produces random vectors of length -\begin_inset Formula $N$ -\end_inset - - where -\begin_inset Formula $N=\textrm{len}\left(pvals\right)$ -\end_inset - -. - The shape of the returned array is always the shape indicated by size + - ( -\begin_inset Formula $N,$ -\end_inset - -). - The multinomial distribution is a generalization of the binomial distribution. - This time, -\begin_inset Formula $n$ -\end_inset - - trials of an experiment are independently repeated but each trial results - in -\begin_inset Formula $N$ -\end_inset - - possible integers -\begin_inset Formula $k_{1},k_{2},\ldots,k_{N}$ -\end_inset - - with -\begin_inset Formula $\sum_{i=1}^{N}k_{i}=n.$ -\end_inset - - -\begin_inset Formula \begin{eqnarray*} -p_{m}\left(k_{1},k_{2},\ldots,k_{N};\cdot\right) & = & \textrm{Probability}\left\{ X\left(\cdot\right)=\left[k_{1},k_{2},\cdots,k_{N}\right]\right\} \\ - & = & \frac{n!}{k_{1}!k_{2}!\cdots k_{N}!}p_{1}^{k_{1}}p_{2}^{k_{2}}\cdots p_{N}^{k_{N}}\end{eqnarray*} - -\end_inset - -where -\begin_inset Formula $pvals=[p_{1},p_{2},\ldots,p_{N}].$ -\end_inset - - It must be true that -\begin_inset Formula $\sum_{i=1}^{N}p_{i}=1.$ -\end_inset - - Therefore, as long as -\begin_inset Formula $\sum_{i=1}^{N-1}p_{i}\leq1,$ -\end_inset - - the last entry in -\begin_inset Formula $pvals$ -\end_inset - - is computed as -\begin_inset Formula $1-\sum_{i=1}^{N-1}p_{i}$ -\end_inset - -. -\end_layout - -\begin_layout Description -negative_binomial (n, p, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Models the number of extra independent trials (beyond -\begin_inset Formula $n$ -\end_inset - -) required to accumulate a total of -\begin_inset Formula $n$ -\end_inset - - successes where the probability of success on each trial is -\begin_inset Formula $p.$ -\end_inset - - Equivalently, this random number models the number of failures encountered - while accumulating -\begin_inset Formula $n$ -\end_inset - - successes during independent trials of the experiment that succeeds with - probability, -\begin_inset Formula $p$ -\end_inset - -. - -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -p_{m}\left(k;n,p\right)=\left(\begin{array}{c} -k+n-1\\ -n-1\end{array}\right)p^{n}\left(1-p\right)^{k}\, I_{\left[0,\infty\right)}\left(k\right).\] - -\end_inset - - -\end_layout - -\begin_layout Description -poisson (lam=1.0, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This random number counts the number of successes in -\begin_inset Formula $n$ -\end_inset - - independent experiments (where the probability of success in each experiment - is -\begin_inset Formula $p$ -\end_inset - -) in the limit as -\begin_inset Formula $n\rightarrow\infty$ -\end_inset - - and -\begin_inset Formula $p\rightarrow0$ -\end_inset - - gets very small such that -\begin_inset Formula $\lambda=np\geq0$ -\end_inset - - is a constant. - It can be used, for example, to model how many typographical errors are - on each page of a book. -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -p\left(k;\lambda\right)=e^{-\lambda}\frac{\lambda^{k}}{k!}\, I_{\left[0,\infty\right)}\left(k\right).\] - -\end_inset - - -\end_layout - -\begin_layout Description -zipf (a, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - The probability mass function of this random number (also called the zeta - distribution) is -\begin_inset Formula \[ -p_{m}\left(k;a\right)=\frac{1}{\zeta\left(a\right)k^{a}}\, I_{\left[1,\infty\right)}\left(k\right),\] - -\end_inset - -where -\begin_inset Formula \[ -\zeta\left(a\right)=\sum_{n=1}^{\infty}\frac{1}{n^{a}}\] - -\end_inset - -is the Riemann zeta function. - Zipf distributions have been shown to characterize use of words in a natural - language (like English), the popularity of library books, and even the - use of the web. - The Zipf distribution describes collections that have a few items whose - probability of selection is very high, a medium number of items whose probabili -ty of selection is medium, and a huge number of items whose probability - of selection is very low. -\begin_inset LatexCommand index -name "random!discrete|)" - -\end_inset - - -\end_layout - -\begin_layout Subsection -Continuous Distributions -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "random!continuous|(" - -\end_inset - -Continuous random numbers can take on an uncountable number of values. - Therefore, the value returned by a continuous distribution is denoted -\begin_inset Formula $x$ -\end_inset - -. - Because there is an uncountable number of possibilities for the random - number -\begin_inset Foot -status open - -\begin_layout Standard -A computer actually always generates a random number from a discrete distributio -n because there are only a finite set of numbers that can be represented - by a computer. - However, for continuous random number generators, the resulting random - numbers usually approximate the continuous distribution well enough to - ignore the subtlety. -\end_layout - -\end_inset - -, a continuous distribution is modeled by a probability density function, - -\begin_inset Formula $f\left(x;\cdot\right).$ -\end_inset - - To obtain the probability that the random number generated by -\begin_inset Formula $X\left(\cdot\right)$ -\end_inset - - is in a certain interval, we integrate this density function: -\begin_inset Formula \[ -\int_{-\infty}^{b}f\left(x\right)dx=\textrm{Probability}\left\{ X\left(\cdot\right)\leq b\right\} .\] - -\end_inset - - -\end_layout - -\begin_layout Standard -To obtain a probability, we have to integrate -\begin_inset Formula $f\left(x\right)$ -\end_inset - - which is why it is called a density function. - Most continuous distributions are defined by their probability density - functions (pdf). - Some have basic origins, a few are derived from other distributions, and - some are used mainly for modelling unknown distributions. - -\end_layout - -\begin_layout Standard -Some of the parameters of the distributions are labeled as location ( -\emph on -loc -\emph default -) and -\emph on -scale -\emph default - parameters. - These parameters are not shown in the equation for the pdf. - because they affect the distribution in a known way. - This is due to the fact that if -\begin_inset Formula $X$ -\end_inset - - is a number drawn from a distribution with pdf -\begin_inset Formula $f_{X}\left(x\right),$ -\end_inset - - then -\begin_inset Formula $Y=Sx+L$ -\end_inset - - is a number drawn from a distribution with pdf -\begin_inset Formula \[ -f_{Y}\left(y\right)=\frac{1}{S}f_{X}\left(\frac{y-L}{S}\right).\] - -\end_inset - - Thus, from the standard from provided, the pdf of the actual random numbers - generated by fixing the location and scale parameters can be quickly found. -\end_layout - -\begin_layout Standard -In this section, the indicator function -\begin_inset Formula $I_{A}\left(x\right)$ -\end_inset - - will be used where -\begin_inset Formula $A$ -\end_inset - - is a set defined over all the real numbers. - For clarity, -\begin_inset Formula \[ -I_{A}\left(x\right)=\left\{ \begin{array}{cc} -1 & x\in A,\\ -0 & x\not\in A.\end{array}\right.\] - -\end_inset - - Also, the following functions are used in the definitions: -\begin_inset Formula \begin{eqnarray*} -\Gamma\left(x\right) & = & \int_{0}^{\infty}t^{x-1}e^{-t}dt=\left(x-1\right)\Gamma\left(x-1\right),\\ -B\left(a,b\right) & = & \frac{\Gamma\left(a\right)\Gamma\left(b\right)}{\Gamma\left(a+b\right)}.\end{eqnarray*} - -\end_inset - - -\end_layout - -\begin_layout Description -beta ( -\begin_inset Formula $a$ -\end_inset - -, -\begin_inset Formula $b$ -\end_inset - -, size=None) -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -f\left(x;a,b\right)=\frac{1}{B\left(a,b\right)}x^{a-1}\left(1-x\right)^{b-1}I_{\left(0,1\right)}\left(x\right).\] - -\end_inset - - -\end_layout - -\begin_layout Description -chisquare ( -\begin_inset Formula $\nu$ -\end_inset - -, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - If -\begin_inset Formula $Z_{1},\ldots,Z_{\nu}$ -\end_inset - - are random numbers from standard normal distributions, then -\begin_inset Formula $W=\sum_{k=1}^{\nu}Z_{k}^{2}$ -\end_inset - - is a random number from the chi-square -\begin_inset Formula $\left(\chi^{2}\right)$ -\end_inset - - distribution with -\begin_inset Formula $\nu$ -\end_inset - - degrees of freedom. - -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -f\left(x;\nu\right)=\frac{1}{2\Gamma\left(\frac{\nu}{2}\right)}\left(\frac{x}{2}\right)^{\nu/2-1}e^{-x/2}I_{\left[0,\infty\right)}\left(x\right).\] - -\end_inset - - -\end_layout - -\begin_layout Description -dirichlet ( -\begin_inset Formula $\boldsymbol{\alpha},$ -\end_inset - - size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A vector of random numbers which are drawn from a multivariate Dirichlet - distribution. - The length of the parameter vector, -\begin_inset Formula $\boldsymbol{\alpha},$ -\end_inset - - is the length, -\begin_inset Formula $N$ -\end_inset - -, of the random vector. - The joint pdf is: -\end_layout - -\begin_layout Description -\begin_inset Formula \[ -f\left(\mathbf{x},\boldsymbol{\alpha}\right)=\frac{\prod_{i=1}^{N}\Gamma\left(\alpha_{i}\right)}{\Gamma\left(\sum_{i=1}^{N}\alpha_{i}\right)}\prod_{i=1}^{N}x_{i}^{\alpha_{i}-1}.\] - -\end_inset - - -\series medium - -\end_layout - -\begin_layout Description -exponential (scale=1.0, size=None) -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -f\left(x\right)=e^{-x}I_{\left[0,\infty\right)}\left(x\right).\] - -\end_inset - - -\end_layout - -\begin_layout Description -f ( -\begin_inset Formula $\nu_{1}$ -\end_inset - -, -\begin_inset Formula $\nu_{2}$ -\end_inset - -, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - The distribution of -\begin_inset Formula $\frac{X_{1}/\nu_{1}}{X_{2}/\nu_{2}}$ -\end_inset - - where -\begin_inset Formula $X_{i}$ -\end_inset - - is chi-squared with -\begin_inset Formula $\nu_{i}$ -\end_inset - - degrees of freedom. -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -f\left(x;\nu_{1},\nu_{2}\right)=\frac{\nu_{2}^{\nu_{2}/2}\nu_{1}^{\nu_{1}/2}x^{\nu_{1}/2-1}}{\left(\nu_{2}+\nu_{1}x\right)^{\left(\nu_{1}+\nu_{2}\right)/2}B\left(\frac{\nu_{1}}{2},\frac{\nu_{2}}{2}\right)}I_{\left[0,\infty\right)}\left(x\right).\] - -\end_inset - - -\end_layout - -\begin_layout Description -gamma ( -\begin_inset Formula $a$ -\end_inset - -, scale=1.0, size=None) -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -f\left(x;a\right)=\frac{1}{\Gamma\left(a\right)}x^{a-1}e^{-x}I_{\left[0,\infty\right)}\left(x\right).\] - -\end_inset - - -\end_layout - -\begin_layout Description -gumbel (loc=0.0, scale=1.0, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A right-skewed extreme value distribution. - -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -f\left(x\right)=\exp\left[-x-e^{-x}\right].\] - -\end_inset - - -\end_layout - -\begin_layout Description -laplace (loc=0.0, scale=1.0, size=None) -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -f\left(x\right)=\frac{1}{2}e^{-\left|x\right|}.\] - -\end_inset - - -\end_layout - -\begin_layout Description -lognormal ( -\begin_inset Formula $\mu$ -\end_inset - -=0.0, -\begin_inset Formula $\sigma$ -\end_inset - -=1.0, size=None) -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -f\left(x;\mu,\sigma\right)=\frac{1}{\sigma x\sqrt{2\pi}}\exp\left[-\frac{1}{2}\left(\frac{\log x-\mu}{\sigma}\right)^{2}\right]I_{\left[0,\infty\right)}\left(x\right),\] - -\end_inset - -The parameters, -\begin_inset Formula $\mu$ -\end_inset - - and -\begin_inset Formula $\sigma$ -\end_inset - - are not the mean and variance of this distribution, but the parameters - of the underlying normal distribution. - Random numbers from this distribution are generated as -\begin_inset Formula $e^{\sigma Z+\mu}$ -\end_inset - - where -\begin_inset Formula $Z$ -\end_inset - - is a standard normal random number. - -\end_layout - -\begin_layout Description -logistic (loc=0.0, scale=1.0, size=None) -\begin_inset Formula \[ -f\left(x\right)=\frac{e^{-x}}{\left[1+e^{-x}\right]^{2}}I_{\left[0,\infty\right)}\left(x\right)\] - -\end_inset - - -\end_layout - -\begin_layout Description -multivariate_normal ( -\begin_inset Formula $\mathbf{\boldsymbol{\mu}}$ -\end_inset - -, -\begin_inset Formula $\mathbf{C}$ -\end_inset - -, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns a vector of random numbers which are jointly drawn from a multivariate - normal distribution. - The last-dimension of the output array contains the sample vector, which - is of length -\begin_inset Formula $N=\textrm{len}\left(mean\right).$ -\end_inset - - The covariance matrix must be -\begin_inset Formula $N\times N$ -\end_inset - -. - If -\begin_inset Formula $\boldsymbol{\mu}\equiv mean$ -\end_inset - - and -\begin_inset Formula $\mathbf{C}=cov$ -\end_inset - -, then the joint-pdf representing the returned random vector(s) is -\begin_inset Formula \[ -f\left(\mathbf{x}\right)=\frac{1}{\sqrt{\left(2\pi\right)^{N}\left|\mathbf{C}\right|}}\exp\left[-\frac{1}{2}\left(\mathbf{x}-\boldsymbol{\mu}\right)^{T}\mathbf{C}^{-1}\left(\mathbf{x}-\boldsymbol{\mu}\right)\right].\] - -\end_inset - - -\end_layout - -\begin_layout Description -noncentral_chisquare ( -\begin_inset Formula $\nu$ -\end_inset - -, -\begin_inset Formula $\lambda$ -\end_inset - -, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This is the distribution of -\begin_inset Formula $\sum_{i=1}^{\nu}\left(Z_{i}+\delta_{i}\right)^{2}$ -\end_inset - - where -\begin_inset Formula $Z_{i}$ -\end_inset - - are independent standard normal random numbers and -\begin_inset Formula $\delta_{i}$ -\end_inset - - are constants. - It is a a generalized Rayleigh-Rice distribution: -\end_layout - -\begin_deeper -\begin_layout Standard -\begin_inset Formula \[ -f\left(x;\nu,\lambda\right)=e^{-\left(\lambda+x\right)/2}\frac{1}{2}\left(\frac{x}{\lambda}\right)^{\left(\nu-2\right)/4}I_{\left(\nu-2\right)/2}\left(\sqrt{\lambda x}\right)I_{\left(0,\infty\right)}\left(x\right),\] - -\end_inset - - where -\begin_inset Formula $I_{\nu}\left(z\right)$ -\end_inset - - (a real-number in the subscript, not an interval) is the modified Bessel - Function of the first kind. - -\end_layout - -\end_deeper -\begin_layout Description -noncentral_f ( -\begin_inset Formula $\nu_{1}$ -\end_inset - -, -\begin_inset Formula $\nu_{2}$ -\end_inset - -, -\begin_inset Formula $\lambda$ -\end_inset - -, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - The pdf of this distribution is -\begin_inset Formula \begin{eqnarray*} -f\left(x;\nu_{1},\nu_{2},\lambda\right) & = & \exp\left[\frac{\lambda}{2}+\frac{\lambda v_{1}x}{2\left(\nu_{1}x+\nu_{2}\right)}\right]\nu_{1}^{\nu_{1}/2}\nu_{2}^{\nu_{2}/2}x^{\nu_{1}/2-1}\\ - & & \times\left(\nu_{2}+\nu_{1}x\right)^{-\left(\nu_{1}+\nu_{2}\right)/2}\\ - & & \times\frac{\Gamma\left(\frac{\nu_{1}}{2}\right)\Gamma\left(1+\frac{\nu_{2}}{2}\right)L_{n_{2}/2}^{n_{1}/2-1}\left(-\frac{\lambda\nu_{1}x}{2\left(\nu_{1}x+\nu_{2}\right)}\right)}{B\left(\frac{\nu_{1}}{2},\frac{\nu_{2}}{2}\right)\Gamma\left(\frac{\nu_{1}+\nu_{2}}{2}\right)}.\end{eqnarray*} - -\end_inset - - -\end_layout - -\begin_layout Description -normal (loc=0.0, scale=1.0, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - The normal, or Gaussian, distribution is the limiting distribution of independe -nt samples from any sufficiently well-behaved distributions (this is the - content of the celebrated central limit theorem). - The normal distribution is also the distribution of maximum entropy when - the mean and variance alone are fixed. - These two facts account for its name as well as the wide variety of situations - that can be usefully modelled using the normal distribution. - Because it is so widely used, the full pdf with the location -\begin_inset Formula $\left(\mu\right)$ -\end_inset - - and scale -\begin_inset Formula $\left(\sigma\right)$ -\end_inset - - parameters is provided: -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -f\left(x\right)=\frac{1}{\sigma\sqrt{2\pi}}\exp\left[-\frac{\left(x-\mu\right)^{2}}{2\sigma^{2}}\right].\] - -\end_inset - - -\end_layout - -\begin_layout Description -pareto ( -\begin_inset Formula $a$ -\end_inset - -, size=None) -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -f\left(x;a\right)=\frac{a}{x^{a+1}}I_{\left[1,\infty\right)}\left(x\right).\] - -\end_inset - - -\end_layout - -\begin_layout Description -power ( -\begin_inset Formula $a$ -\end_inset - -, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A special case of the beta distribution with -\begin_inset Formula $b=1.$ -\end_inset - - -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -f\left(x;a\right)=ax^{a-1}I_{\left[0,1\right]}\left(x\right).\] - -\end_inset - - -\end_layout - -\begin_layout Description -rand ( -\begin_inset Formula $d_{1}$ -\end_inset - -, -\begin_inset Formula $d_{2}$ -\end_inset - -, -\begin_inset Formula $\ldots$ -\end_inset - -, -\begin_inset Formula $d_{n}$ -\end_inset - -) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A convenient interface to obtain an array of shape -\begin_inset Formula $\left(d_{1},d_{2},\ldots,d_{n}\right)$ -\end_inset - - of uniform random numbers in the interval -\begin_inset Formula $\left[0,1\right).$ -\end_inset - - Notice the different convention for passing in the shape (as separate arguments - instead of a tuple). - The standard convention is used in the function numpy.random.random(shape) - for which this function is merely a convenient short-hand. - If you have a tuple named shape, then rand(*shape) will work correctly. -\end_layout - -\begin_layout Description -randint (low, high=None, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equally probably random integers in the range -\begin_inset Formula $low\leq x<high$ -\end_inset - -. - If -\begin_inset Formula $high$ -\end_inset - - is None, then the range is -\begin_inset Formula $0\leq x<low$ -\end_inset - -. - Similar to random_integers, but check the difference on the bounds. -\end_layout - -\begin_layout Description -randn ( -\begin_inset Formula $d_{1}$ -\end_inset - -, -\begin_inset Formula $d_{2}$ -\end_inset - -, -\begin_inset Formula $\ldots$ -\end_inset - -, -\begin_inset Formula $d_{n}$ -\end_inset - -) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A convenient interface to obtain an array of shape -\begin_inset Formula $\left(d_{1},d_{2},\ldots,d_{n}\right)$ -\end_inset - - of standard normal -\begin_inset Formula $\left(\mu=0,\,\sigma=1\right)$ -\end_inset - - random numbers. - Notice the different convention for passing in the shape (as separate arguments - intead of a tuple). - The standard convention is used in the function numpy.random.standard_normal(shap -e) for which this function is merely a convenient short-hand. - If you have a tuple named shape, then randn(*shape) will work correctly. -\end_layout - -\begin_layout Description -random_integers (low, high=None, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Equally probably random integers in the range -\begin_inset Formula $low\leq x\leq high$ -\end_inset - -. - If high is None, then the range is -\begin_inset Formula $1\leq x\leq low$ -\end_inset - -. - Similar to randint, but check the difference on the bounds. -\end_layout - -\begin_layout Description -rayleigh (scale=1.0, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Rayleigh-distributed random numbers can be obtained as -\begin_inset Formula $X=\sqrt{Z_{1}^{2}+Z_{2}^{2}}$ -\end_inset - - where -\begin_inset Formula $Z_{i}$ -\end_inset - - are independent standard normal random numbers. - The scale parameter is also the mode of the distribution (the value of - -\begin_inset Formula $X$ -\end_inset - - with highest probability). - -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -f\left(x\right)=xe^{-x^{2}/2}I_{[0,\infty)}\left(x\right)\] - -\end_inset - - -\end_layout - -\begin_layout Description -standard_cauchy (size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A Cauchy distribution is a heavy-tailed distribution with no variance. - It's distribution is that of the ratio of two standard normal distributions - -\begin_inset Formula $Z_{1}/Z_{2}.$ -\end_inset - - -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -f\left(x\right)=\frac{1}{\pi\left(1+x^{2}\right)}.\] - -\end_inset - - -\end_layout - -\begin_layout Description -standard_exponential (size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A standard exponetial random number with scale=1.0. - The pdf was given under the description of -\family typewriter -random.exponential -\family default -. -\end_layout - -\begin_layout Description -standard_gamma ( -\begin_inset Formula $a$ -\end_inset - -, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A standard gamma random number with scale=1.0. - The pdf was given under the description of -\family typewriter -random.gamma -\family default -. -\end_layout - -\begin_layout Description -standard_normal (size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A zero-mean, unit-variance, normally distributed random number often denoted - -\begin_inset Formula $Z.$ -\end_inset - - -\begin_inset Formula \[ -f\left(x\right)=\frac{1}{\sqrt{2\pi}}e^{-x^{2}/2}.\] - -\end_inset - - -\end_layout - -\begin_layout Description -standard_t ( -\begin_inset Formula $\nu$ -\end_inset - -, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Often called Student's t distribution, this random number distribution - arises in the problem of estimating the mean of normally distributed samples - when the sample-size is small. - The first parameter, -\begin_inset Formula $\nu$ -\end_inset - -, is the number of degrees of freedom of the distribution. - -\begin_inset Formula \[ -f\left(x;\nu\right)\frac{\Gamma\left(\frac{\nu+1}{2}\right)}{\sqrt{\pi\nu}\Gamma\left(\frac{\nu}{2}\right)\left[1+\frac{x^{2}}{\nu}\right]^{\frac{\nu+1}{2}}}.\] - -\end_inset - - -\end_layout - -\begin_layout Description -triangular (left, mode, right, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns random numbers according to a triangularly-shaped density that - starts at left, peaks at mode, and ends at right. -\end_layout - -\begin_layout Description -uniform (low=0.0, high=1.0, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns random numbers that are equally probable over the range -\begin_inset Formula $\left[low,\, high\right).$ -\end_inset - - -\end_layout - -\begin_layout Description -vonmises ( -\begin_inset Formula $\mu$ -\end_inset - -, -\begin_inset Formula $\kappa$ -\end_inset - -, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A continuous distribution that is well suited for circular attributes such - as angles, time of day, day of the year, etc. - The mean direction is -\begin_inset Formula $\mu$ -\end_inset - - and concentration (or dispersion) parameter is -\begin_inset Formula $\kappa.$ -\end_inset - - For small -\begin_inset Formula $\kappa$ -\end_inset - - the distribution tends towards a uniform distribution over -\begin_inset Formula $\left[-\pi,\pi\right].$ -\end_inset - - For large -\begin_inset Formula $\kappa$ -\end_inset - -, the distribution tends towards a normal distribution with mean -\begin_inset Formula $\mu$ -\end_inset - - and variance -\begin_inset Formula $1/\kappa.$ -\end_inset - - -\begin_inset Formula \[ -f\left(x\right)=\frac{e^{\kappa\cos\left(x-\mu\right)}}{2\pi I_{0}\left(\kappa\right)}I_{\left[-\pi,\pi\right]}\left(x\right).\] - -\end_inset - - -\end_layout - -\begin_layout Description -wald ( -\begin_inset Formula $\mu$ -\end_inset - -, -\begin_inset Formula $\lambda$ -\end_inset - -, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - This distribution is also called the inverse Gaussian distribution (and - the Wald distribution considered as a special case when -\begin_inset Formula $\mu=\lambda$ -\end_inset - -). - It can be generated by noticing that if -\begin_inset Formula $X$ -\end_inset - - is a wald random number then -\begin_inset Formula $\frac{\lambda\left(X-\mu\right)^{2}}{\mu^{2}X}$ -\end_inset - - is the square of a standard normal random number (i.e. - it is chi-square with one degree of freedom). - The pdf is -\begin_inset Formula \[ -f\left(x\right)=\sqrt{\frac{\lambda}{2\pi x^{3}}}e^{-\frac{\lambda\left(x-\mu\right)^{2}}{2\mu^{2}x}}.\] - -\end_inset - - -\end_layout - -\begin_layout Description -weibull ( -\begin_inset Formula $a$ -\end_inset - -, size=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - An extreme-value distribution: -\end_layout - -\begin_layout Standard -\begin_inset Formula \[ -f\left(x;c\right)=ax^{a-1}\exp\left(-x^{a}\right)I_{\left(0,\infty\right)}\left(x\right).\] - -\end_inset - - -\end_layout - -\begin_layout Subsection -Miscellaneous utilities -\end_layout - -\begin_layout Description -bytes (length) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a string of random bytes of the provided length. -\end_layout - -\begin_layout Description -get_state () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an object that holds the state of the random number generator (allows - you to restart simulations where you left off). -\end_layout - -\begin_layout Description -set_state (state) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Set the state of the random number generator. - The argument should be the returned object of a previous get_state command. -\end_layout - -\begin_layout Description -shuffle (sequence) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Randomly permute the items of any sequence. - If sequence is an array, then it must be 1-d. -\end_layout - -\begin_layout Description -permutation (n) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a permutation of the integers from 0 to n-1. - -\begin_inset LatexCommand index -name "random!continuous|)" - -\end_inset - - -\begin_inset LatexCommand index -name "random|)" - -\end_inset - - -\end_layout - -\begin_layout Section -Matrix-specific functions (matlib) -\end_layout - -\begin_layout Standard -This module contains functions that are geared specifically toward matrix - objects. - In particular it includes the functions -\series bold -empty -\series default -, -\series bold -ones -\series default -, -\series bold -zeros -\series default -, -\series bold -identity -\series default -, -\series bold -eye -\series default -, -\series bold -rand -\series default -, and -\series bold -randn -\series default - each of which returns a matrix object by default instead of an ndarray - object. -\end_layout - -\begin_layout Section -Ctypes utiltity functions (ctypeslib) -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "ctypeslib" - -\end_inset - -This module contains utility functions that make it easier to work with - the ctypes module. - -\end_layout - -\begin_layout Description -load_library (name, path) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Load a shared library named -\begin_inset Quotes eld -\end_inset - -name -\begin_inset Quotes erd -\end_inset - - (use the full name including any prefix but excluding the extension) located - in the directory indicated by path and return a ctypes library object whose - attributes are the functions in the library. - If ctypes is not available, this function will raise an ImportError. - If there is an error loading the library, ctypes raises an OSError. - The extension is appended to the library name (on a platform-dependent - basis) unless the name includes the -\begin_inset Quotes eld -\end_inset - -. -\begin_inset Quotes erd -\end_inset - - character in which case name is assumed to be the -\begin_inset Quotes eld -\end_inset - -full-name -\begin_inset Quotes erd -\end_inset - - of the library. - -\end_layout - -\begin_layout Description -ndpointer (dtype=None, ndim=None, shape=None, flags=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Create a class object that can be used in the argtypes list of a ctypes - function that will do basic type, number-of-dimensions, shape, and flags - checking on input array objects. - Setting an argtypes entry with the result of this function allows passing - arrays directly to ctypes-wrapped functions. - The returned class object will contain a from_param method as required - by ctypes. - This from_param method takes the array object, does data-type, number-of-dimens -ions, shape, and flags checking on the object and if all tests pass returns - an object that ctypes can use as the data area of the array. - Checking is not performed for any entries which are None in this class - creation function. - -\end_layout - -\begin_layout Chapter -Testing and Packaging -\end_layout - -\begin_layout Quotation -Research is what I'm doing when I don't know what I'm doing. -\end_layout - -\begin_layout Right Address ---- -\emph on -Werner von Braun -\end_layout - -\begin_layout Quotation -The most likely way for the world to be destroyed, most experts agree, is - by accident. - That's where we come in; we're computer professionals. - We cause accidents. -\end_layout - -\begin_layout Right Address ---- -\emph on -Nathaniel Borenstein -\end_layout - -\begin_layout Standard -There are two additional sub-packages distributed with NumPy that simplify - the process of distributing and testing code based on NumPy. - The numpy.distutils sub-package extends the standard distutils package to - handle Fortran code along with providing support for the auto-generated - code in NumPy. - The numpy.testing sub-package defines a few functions and classes for standardiz -ing unit-tests in NumPy. - These facilities can be used in your own packages that build on top of - NumPy. - -\end_layout - -\begin_layout Section -Testing -\end_layout - -\begin_layout Standard -In this sub-package are two classes and some useful utilities for writing - unit-tests -\end_layout - -\begin_layout Description -NumpyTestCase a subclass of unittest.TestCase which adds a measure method - that can determine the elasped time to execute a code string and enhances - the __call__ method -\end_layout - -\begin_layout Description -NumpyTest the test manager for NumPy which was extracted originally from - the SciPy code base. - This test manager makes it easy to add unit-tests to a package simply by - creating a tests sub-directory with files named test_<module>.py. - These test files should then define sub-classes of NumpyTestCase (or unittest.Te -stCase) named -\begin_inset Quotes eld -\end_inset - -test* -\begin_inset Quotes erd -\end_inset - -. - These classes should then define functions named -\begin_inset Quotes eld -\end_inset - -test* -\begin_inset Quotes erd -\end_inset - - or -\begin_inset Quotes eld -\end_inset - -bench* -\begin_inset Quotes erd -\end_inset - - or -\begin_inset Quotes eld -\end_inset - -check* -\begin_inset Quotes erd -\end_inset - - that contain the actual unit-tests. - The first keyword argument should specify the level above which this test - should be run. - -\end_layout - -\begin_layout Description -\InsetSpace ~ - To run the tests excecute NumpyTest(<package>).test(level=1, verbosity=1) - which will run all tests above the given level using the given verbosity. - Here <package> can be either a string or a previously imported module. - You can get the level and verbosity arguments from sys.argv using NumpyTest(<pac -kage>).run() with -v or --verbosity and -l or --level as command-line arguments. -\end_layout - -\begin_layout Description -set_local_path (reldir='', level=1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - prepend local directory (+ reldir) to sys.path. - The caller is responsible for removing this path using restore_path(). -\end_layout - -\begin_layout Description -set_package_path (level=1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - prepend package directory to sys.path. - This should be called from a test_file.py that satisfies the tree structure: - <somepath>/<somedir>/test_file.py. - The, the first existing path name from the list <somepath>/build/lib.<platform>- -<version>, <somepath>/.. - is pre-pended to sys.path. - The caller is responsible for removing this path using restore_path(). -\end_layout - -\begin_layout Description -restore_path () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Remove the first entry from sys.path. -\end_layout - -\begin_layout Description -assert_equal (actual, desired, err_msg='', verbose=1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Raise an assertion error if the two items are not equal. - Automatically calls assert_array_equal if actual or desired is an ndarray. - -\end_layout - -\begin_layout Description -assert_almost_equal (actual, desired, decimal=7, err_msg='', verbose=1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Raise an assertion error if the two items are not equal within decimal - places. - Automatically calls assert_array_almost_equal if actual or desired is an - ndarray. -\end_layout - -\begin_layout Description -assert_approx_equal (actual, desired, significant=7, err_msg='', verbose=1) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Raise an assertion error if the two items are not equal to within the given - significant digits. - Does not work on arrays. - -\end_layout - -\begin_layout Description -assert_array_equal (x, y, err_msg='') -\end_layout - -\begin_layout Description -\InsetSpace ~ - Raise an error if the two arrays x and y are not equal at every element. - -\end_layout - -\begin_layout Description -assert_array_less (x, y, err_msg='') -\end_layout - -\begin_layout Description -\InsetSpace ~ - Raise an error if the two arrays x and y have different shapes or if x - is not less than y at every element. - -\end_layout - -\begin_layout Description -assert_array_almost_equal (x, y, decimal=6, err_msg='') -\end_layout - -\begin_layout Description -\InsetSpace ~ - Raise an error if x and y are not equal to decimal places at every element. -\end_layout - -\begin_layout Description -jiffies () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a number of 1/100ths of a second that this process has been scheduled - in user mode. - Implemented using time.time() unless on Linux where the special /proc directory - filesystem is used. - -\end_layout - -\begin_layout Description -memusage () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the virtual memory size in bytes of the running python. - If the operation is not supported on the platform, then return None. - This works only on linux for now. -\end_layout - -\begin_layout Description -rand (*args) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return an array of random numbers with the given shape using only the standard - library random number generator. -\end_layout - -\begin_layout Description -runstring (astr, dict) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Run the given string in the dictionary provided. - Functional form for (exec astr in dict) that is useful for the failUnlessRaises - method of unittest.TestCase class. -\end_layout - -\begin_layout Section -NumPy Distutils -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "distutils" - -\end_inset - -NumPy provides enhanced distutils functionality to make it easier to build - and install sub-packages, auto-generate code, and extension modules that - use Fortran-compiled libraries. - To use features of numpy distutils use the setup command from numpy.distutils.cor -e. - A useful Configuration class is also provided in numpy.distutils.misc_util - that can make it easier to construct keyword arguments to pass to the setup - function (by passing the dictionary obtained from the todict() method of - the class). - More information is available in the NumPy Distutils Users Guide in <site-packa -ges>/numpy/doc/DISTUTILS.txt. -\end_layout - -\begin_layout Subsection -misc_util -\end_layout - -\begin_layout Description -Configuration (package_name=None, parent_name=None, top_path=None, package_path= -None, **attrs) -\end_layout - -\begin_layout Description -\InsetSpace ~ - -\begin_inset LatexCommand index -name "Configuration" - -\end_inset - -Construct a configuration instance for the given package name. - If parent_name is not None, then construct the package as a sub-package - of the parent_name package. - If top_path and package_path are None then they are assumed equal to the - path of the file this instance was created in. - The setup.py files in the numpy distribution are good examples of how to - use the Configuration instance. -\end_layout - -\begin_deeper -\begin_layout Description -self.todict () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a dictionary compatible with the keyword arguments of distutils - setup function. - Thus, this method may be used as setup(**config.todict()). -\end_layout - -\begin_layout Description -self.get_distribution () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the distutils distribution object for self. -\end_layout - -\begin_layout Description -self.get_subpackage (subpackage_name, subpackage_path=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a Configuration instance for the sub-package given. - If subpackage_path is None then the path is assumed to be the local path - plus the subpackage_name. - If a setup.py file is not found in the subpackage_path, then a default configura -tion is used. -\end_layout - -\begin_layout Description -self.add_subpackage (subpackage_name, subpackage_path=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Add a sub-package to the current Configuration instance. - This is useful in a setup.py script for adding sub-packages to a package. - The sub-package is contained in subpackage_path / subpackage_name and this - directory may contain a setup.py script or else a default setup (suitable - for Python-code-only subpackages) is assumed. - If the subpackage_path is None, then it is assumed to be located in the - local path / subpackage_name. - -\end_layout - -\begin_layout Description -self.add_data_files (*files) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Add files to the list of data_files to be included with the package. - The form of each element of the files sequence is very flexible allowing - many combinations of where to get the files from the package and where - they should ultimately be installed on the system. - The most basic usage is for an element of the files argument sequence to - be a simple filename. - This will cause that file from the local path to be installed to the installati -on path of the self.name package (package path). - The file argument can also be a relative path in which case the entire - relative path will be installed into the package directory. - Finally, the file can be an absolute path name in which case the file will - be found at the absolute path name but installed to the package path. -\end_layout - -\begin_layout Description -\InsetSpace ~ - This basic behavior can be augmented by passing a 2-tuple in as the file - argument. - The first element of the tuple should specify the relative path (under - the package install directory) where the remaining sequence of files should - be installed to (it has nothing to do with the file-names in the source - distribution). - The second element of the tuple is the sequence of files that should be - installed. - The files in this sequence can be filenames, relative paths, or absolute - paths. - For absolute paths the file will be installed in the top-level package - installation directory (regardless of the first argument). - Filenames and relative path names will be installed in the package install - directory under the path name given as the first element of the tuple. - An example may clarify: -\end_layout - -\begin_deeper -\begin_layout LyX-Code -self.add_data_files('foo.dat', -\newline -('fun', ['gun.dat', 'nun/pun.dat', '/tmp/sun.dat']), - -\newline -'bar/cat.dat', -\newline -'/full/path/to/can.dat') -\end_layout - -\begin_layout Standard -will install these data files to: -\end_layout - -\begin_layout LyX-Code -<package install directory>/ -\newline - foo.dat -\newline - fun/ -\newline - gun.dat -\newline - nun/ -\newline - pun.dat -\newline - sun.dat -\newline - - bar/ -\newline - car.dat -\newline - can.dat -\end_layout - -\begin_layout Standard -where <package install directory> is the package (or sub-package) directory - such as '/usr/lib/python2.4/site-packages/mypackage' ('C: -\backslash - -\backslash -Python2.4 -\backslash - -\backslash -Lib -\backslash - -\backslash -site-packages -\backslash - -\backslash -mypackage') or '/usr/lib/python2.4/site-packages/mypackage/mysubpackage' - ('C: -\backslash - -\backslash -Python2.4 -\backslash - -\backslash -Lib -\backslash - -\backslash -site-packages -\backslash - -\backslash -mypackage -\backslash - -\backslash -mysubpackage'). -\end_layout - -\end_deeper -\begin_layout Standard -\InsetSpace ~ - An additional feature is that the path to a data-file can actually be a - function that takes no arguments and returns the actual path(s) to the - data-files. - This is useful when the data files are generated while building the package. - -\end_layout - -\begin_layout Description -self.add_data_dir (data_path) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Recursively add files under data_path to the list of data_files to be installed - (and distributed). - The data_path can be either a relative path-name, or an absolute path-name, - or a 2-tuple where the first argument shows where in the install directory - the data directory should be installed to. - For example suppose the source directory contains fun/foo.dat and fun/bar/car.dat -\end_layout - -\begin_layout LyX-Code -self.add_data_dir('fun') -\newline -self.add_data_dir(('sun', 'fun')) -\newline -self.add_data_dir(('gun', - '/full/path/to/fun')) -\end_layout - -\begin_layout Standard -\InsetSpace ~ - Will install data-files to the locations -\end_layout - -\begin_layout LyX-Code -<package install directory>/ -\newline - fun/ -\newline - foo.dat -\newline - bar/ -\newline - car.dat -\newline - sun/ -\newline - - foo.dat -\newline - bar/ -\newline - car.dat -\newline - gun/ -\newline - foo.dat -\newline - car.dat -\end_layout - -\begin_layout Description -self.add_include_dirs (*paths) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Add the given sequence of paths to the beginning of the include_dirs list. - This list will be visible to all extension modules of the current package. -\end_layout - -\begin_layout Description -self.add_headers (*files) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Add the given sequence of files to the beginning of the headers list. - By default, headers will be installed under <python-include>/<self.name.replace('. -','/')>/ directory. - If an item of files is a tuple, then its first argument specifies the actual - installation location relative to the <python-include> path. -\end_layout - -\begin_layout Description -self.add_extension (name, sources, **kw) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Create and add an Extension instance to the ext_modules list. - The first argument defines the name of the extension module that will be - installed under the self.name package. - The second argument is a list of sources. - This method also takes the following optional keyword arguments that are - passed on to the Extension constructor: include_dirs, define_macros, undef_macr -os, library_dirs, libraries, runtime_library_dirs, extra_objects, swig_opts, - depends, language, f2py_options, module_dirs, and extra_info. - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The self.paths(...) method is applied to all lists that may contain paths. - The extra_info is a dictionary or a list of dictionaries whose content - will be appended to the keyword arguments. - The depends list contains paths to files or directories that the sources - of the extension module depend on. - If any path in the depends list is newer than the extension module, then - the module will be rebuilt. - -\end_layout - -\begin_layout Description -\InsetSpace ~ - The list of sources may contain functions (called source generators) which - must take an extension instance and a build directory as inputs and return - a source file or list of source files or None. - If None is returned then no sources are generated. - If the Extension instance has no sources after processing all source generators -, then no extension module is built. - -\end_layout - -\begin_layout Description -self.add_library (name, sources, **build_info) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Add a library to the list of libraries. - Allowed keyword arguments are depends, macros, include_dirs, extra_compiler_arg -s, and f2py_options. - The name is the name of the library to be built and sources is a list of - sources (or source generating functions) to add to the library. -\end_layout - -\begin_layout Description -self.add_scripts (*files) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Add the sequence of files to the beginning of the scripts list. - Scripts will be installed under the <prefix>/bin/ directory. - -\end_layout - -\begin_layout Description -self.paths (*paths) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Applies glob.glob(...) to each path in the sequence (if needed) and pre-pends - the local_path if needed. - Because this is called on all source lists, this allows wildcard characters - to be specified in lists of sources for extension modules and libraries - and scripts and allows path-names be relative to the source directory. -\end_layout - -\begin_layout Description -self.get_config_cmd () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns the numpy.distutils config command instance. -\end_layout - -\begin_layout Description -self.get_build_temp_dir () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a path to a temporary directory where temporary files should be - placed. -\end_layout - -\begin_layout Description -self.have_f77c () -\end_layout - -\begin_layout Description -\InsetSpace ~ - True if a Fortran 77 compiler is available (because a simple Fortran 77 - code was able to be compiled successfully). -\end_layout - -\begin_layout Description -self.have_f90c () -\end_layout - -\begin_layout Description -\InsetSpace ~ - True if a Fortran 90 compiler is available (because a simple Fortran 90 - code was able to be compiled successfully) -\end_layout - -\begin_layout Description -self.get_version () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a version string of the current package or None if the version informati -on could not be detected. - This method scans files named __version__.py, <packagename>_version.py, version.py -, and __svn_version__.py for string variables version, __version__, and <packagen -ame>_version, until a version number is found. -\end_layout - -\begin_layout Description -self.make_svn_version_py () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Appends a data function to the data_files list that will generate __svn_version -__.py file to the current package directory. - This file will be removed from the source directory when Python exits (so - that it can be re-generated next time the package is built). - This is intended for working with source directories that are in an SVN - repository. - -\end_layout - -\begin_layout Description -self.make_config_py () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Generate a package __config__.py file containing system information used - during the building of the package. - This file is installed to the package installation directory. -\end_layout - -\begin_layout Description -self.get_info (*names) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return information (from system_info.get_info) for all of the names in the - argument list in a single dictionary. - -\end_layout - -\end_deeper -\begin_layout Description -get_numpy_include_dirs () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the include directory where the numpy/arrayobject.h and numpy/ufuncobject. -h files are found. - This should be added to the include_dirs of any extension module built - using NumPy. - If numpy.distutils is used to build the extension, then this directory is - added automatically. - -\end_layout - -\begin_layout Description -get_numarray_include_dirs () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the include directory where the numpy/libnumarray.h file is found. - This should be added to the include_dirs of any extension module that relies - on the Numarray-compatible C-API. - -\end_layout - -\begin_layout Description -dict_append (d, **kwds) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Add the keyword arguments given as entries in the dictionary provided as - the first argument. - If the entry is already present, then assume it is a list and extend the - list with the keyword value. -\end_layout - -\begin_layout Description -appendpath (prefix, path) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Platform-independent intelligence for appending path to prefix. - It replaces '/' in the prefix and the path with the correct path-separator - on the platform ad returns a full path name that will be valid for the - platform. - -\end_layout - -\begin_layout Description -allpath (name) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert a '/' separated pathname to one using the platform's path separator. -\end_layout - -\begin_layout Description -dot_join (*args) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Converts a sequence of string arguments to a string joined by '.' (removing - any empty strings). - -\end_layout - -\begin_layout Description -generate_config_py (extension, build_dir) -\end_layout - -\begin_layout Description -\InsetSpace ~ - A suitable function that can be used in a source list. - This constructs a python file that contains system_info information used - during building the package. - Generally easier to use a Configuration instance and the config.make_config_py() - method. -\end_layout - -\begin_layout Description -get_cmd (cmdname, _cache={}) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns an instance of the distutils command object named cmdname if the - setup distribution instance has been initialized. - Caches the result in _cache[cmdname] and gets it from there if present. -\end_layout - -\begin_layout Description -terminal_has_colors () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Tries to determine if the stdout terminal can be written to using ANSI - colors. - Returns 1 if it can be determined that ANSI colors are acceptable or 0 - if not. - -\end_layout - -\begin_layout Description -red_text (s) -\end_layout - -\begin_layout Description -green_text (s) -\end_layout - -\begin_layout Description -yellow_text (s) -\end_layout - -\begin_layout Description -blue_text (s) -\end_layout - -\begin_layout Description -cyan_text (s) -\end_layout - -\begin_layout Description -\InsetSpace ~ - If terminal_has_colors() is true, then these commands return a string with - the necessary codes prepended to display the given string argument in the - specified color on an ANSI terminal. - If terminal_has_colors() is false, then these functions simply return the - input argument. - -\end_layout - -\begin_layout Description -cyg2win32 (path) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Convert a cygwin path beginning with /cygdrive to a standard win32 path - name. - -\end_layout - -\begin_layout Description -all_strings (lst) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return True if all items in the input list are string objects otherwise - return False. -\end_layout - -\begin_layout Description -has_f_sources (sources) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return True if any of the source files listed in the input argument are - Fortran files because its name matches against the compiled regular expression - -\series bold -fortran_ext_match -\series default -. -\end_layout - -\begin_layout Description -has_cxx_sources (sources) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return True if any of the source files listed in the input argument are - C++ files because its name matches against the compiled regular expression - -\series bold -cxx_ext_match -\series default -. -\end_layout - -\begin_layout Description -filter_sources (sources) -\end_layout - -\begin_layout Description -\InsetSpace ~ - From the provided list of sources, return four lists of filenames containing - C, C++, Fortran, and Fortran 90 module sources respectively. - The compiled regular expressions used in this search (which are also available - in the misc_util module) are cxx_ext_match, fortran_ext_match, f90_ext_match, - and f90_module_name_match. - -\end_layout - -\begin_layout Description -get_dependencies (sources) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Scan the files in the sources list for include statements. -\end_layout - -\begin_layout Description -is_local_src_dir (directory) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return True if the provided directory is the local current working directory. - -\end_layout - -\begin_layout Description -get_ext_source_files (ext) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Get sources and any include files in the same directory from an Extension - instance. -\end_layout - -\begin_layout Description -get_script_files (scripts) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Returns the list scripts with all non-string arguments removed. -\end_layout - -\begin_layout Subsection -Other modules -\end_layout - -\begin_layout Description -system_info.get_info (name) -\end_layout - -\begin_layout Description -\InsetSpace ~ - For the given string representing a particular resource, return a dictionary - that is compatible with the distutils.setup keyword arguments. - If this is an empty dictionary, then the requested resource is not available. - Some of the names that can be checked are 'lapack_opt', 'blas_opt', 'fft_opt', - 'fftw', 'fftw3', 'fftw2', 'djbfft', 'numpy', 'numarray', 'boost_python', - 'agg2', 'wx', 'gdk', 'xft', 'freetype2'. - -\end_layout - -\begin_layout Description -system_info.get_standard_file (filename) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return a list of length 0 to 3 containing the full-path filenames for the - filename provided. - The filename is searched for in three places in the following order 1) - the system-wide location which is the directory that the system_info file - is located in; 2) the directory specified by the environment variable HOME; - and 3) the current local directory. - -\end_layout - -\begin_layout Description -cpuinfo.cpu an instance of a cpuinfo class that defines methods for checking - various aspects of the cpu. - The info attribute is a list of length (# of CPUs). - Each entry is a dictionary providing technical information about that CPU. - -\end_layout - -\begin_layout Description -log.set_verbosity (level) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Set the distutils logging threshold and return the previously stored value. - The level is an integer that corresponds to distutils.log thresholds: -1 - <--> ERROR, 0 <--> WARN, 1 <--> INFO, and 2 <--> DEBUG. - -\end_layout - -\begin_layout Description -exec_command -\end_layout - -\begin_deeper -\begin_layout Description -exec_command (command, execute_in='', use_shell=None, use_tee=None, _with_python -=1, **env) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return (status, output) of the executed command. - The command input is a string of executable and arguments. - The output contains both stderr and stdout messages. - If execute_in is given, then change to the provided directory prior to - executing the command and afterwords restore to the current directory. - On NT, and DOS systems the returned status is correct for external commands. - However, wild cards will not work for non-posix systems. -\end_layout - -\begin_layout Description -splitcmdline (line) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Inverse of ' '.join(sys.argv) -\end_layout - -\begin_layout Description -find_executable (exe, path=None) -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return full path of an executable using information from the PATH environment - variable. - Equivalent to the POSIX 'which' command. -\end_layout - -\begin_layout Description -get_pythonexe () -\end_layout - -\begin_layout Description -\InsetSpace ~ - Return the full path to the python executable with some fixes for nt and - dos to replace pythonw with python if it is encountered. - A basic wrapper around sys.executable. -\end_layout - -\end_deeper -\begin_layout Section -Conversion of .src files -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand index -name "code generation" - -\end_inset - -NumPy distutils supports automatic conversion of source files named <somefile>.sr -c. - This facility can be used to maintain very similar code blocks requiring - only simple changes between blocks. - During the build phase of setup, if a template file named <somefile>.src - is encountered, a new file named <somefile> is constructed from the template - and placed in the build directory to be used instead. - Two forms of template conversion are supported. - The first form occurs for files named named <file>.ext.src where ext is a - recognized Fortran extension (f, f90, f95, f77, for, ftn, pyf). - The second form is used for all other cases. - -\end_layout - -\begin_layout Subsection -Fortran files -\end_layout - -\begin_layout Standard -This template converter will replicate all -\series bold -function -\series default - and -\series bold -subroutine -\series default - blocks in the file with names that contain '<...>' according to the rules - in '<...>'. - The number of comma-separated words in '<...>' determines the number of times - the block is repeated. - What these words are indicates what that repeat rule, '<...>', should be replaced - with in each block. - All of the repeat rules in a block must contain the same number of comma-separa -ted words indicating the number of times that block should be repeated. - If the word in the repeat rule needs a comma, leftarrow, or rightarrow, - then prepend it with a backslash ' -\backslash -'. - If a word in the repeat rule matches ' -\backslash - -\backslash -<index>' then it will be replaced with the <index>-th word in the same repeat - specification. - There are two forms for the repeat rule: named and short. -\end_layout - -\begin_layout Subsubsection -Named repeat rule -\end_layout - -\begin_layout Standard -A named repeat rule is useful when the same set of repeats must be used - several times in a block. - It is specified using <rule1=item1, item2, item3,..., itemN>, where N is the - number of times the block should be repeated. - On each repeat of the block, the entire expression, '<...>' will be replaced - first with item1, and then with item2, and so forth until N repeats are - accomplished. - Once a named repeat specification has been introduced, the same repeat - rule may be used -\series bold -in the current block -\series default - by referring only to the name (i.e. - <rule1>. - -\end_layout - -\begin_layout Subsubsection -Short repeat rule -\end_layout - -\begin_layout Standard -A short repeat rule looks like <item1, item2, item3, ..., itemN>. - The rule specifies that the entire expression, '<...>' should be replaced - first with item1, and then with item2, and so forth until N repeats are - accomplished. - -\end_layout - -\begin_layout Subsubsection -Pre-defined names -\end_layout - -\begin_layout Standard -The following predefined named repeat rules are available: -\end_layout - -\begin_layout Itemize -<prefix=s,d,c,z> -\end_layout - -\begin_layout Itemize -<_c=s,d,c,z> -\end_layout - -\begin_layout Itemize -<_t=real, double precision, complex, double complex> -\end_layout - -\begin_layout Itemize -<ftype=real, double precision, complex, double complex> -\end_layout - -\begin_layout Itemize -<ctype=float, double, complex_float, complex_double> -\end_layout - -\begin_layout Itemize -<ftypereal=float, double precision, -\backslash - -\backslash -0, -\backslash - -\backslash -1> -\end_layout - -\begin_layout Itemize -<ctypereal=float, double, -\backslash - -\backslash -0, -\backslash - -\backslash -1> -\end_layout - -\begin_layout Subsection -Other files -\end_layout - -\begin_layout Standard -Non-Fortran files use a separate syntax for defining template blocks that - should be repeated using a variable expansion similar to the named repeat - rules of the Fortran-specific repeats. - The template rules for these files are: -\end_layout - -\begin_layout Enumerate -\begin_inset Quotes eld -\end_inset - -/**begin repeat -\begin_inset Quotes erd -\end_inset - - on a line by itself marks the beginning of a segment that should be repeated. -\end_layout - -\begin_layout Enumerate -Named variable expansions are defined using #name=item1, item2, item3, ..., - itemN# and placed on successive lines. - These variables are replaced in each repeat block with corresponding word. - All named variables in the same repeat block must define the same number - of words. - -\end_layout - -\begin_layout Enumerate -In specifying the repeat rule for a named variable, item*N is short-hand - for item, item, ..., item repeated N times. - In addition, parenthesis in combination with *N can be used for grouping - several items that should be repeated. - Thus, #name=(item1, item2)*4# is equivalent to #name=item1, item2, item1, - item2, item1, item2, item1, item2# -\end_layout - -\begin_layout Enumerate -\begin_inset Quotes eld -\end_inset - -*/ -\begin_inset Quotes erd -\end_inset - - on a line by itself marks the end of the the variable expansion naming. - The next line is the first line that will be repeated using the named rules. -\end_layout - -\begin_layout Enumerate -Inside the block to be repeated, the variables that should be expanded are - specified as @name@. - -\end_layout - -\begin_layout Enumerate -\begin_inset Quotes eld -\end_inset - -/**end repeat**/ -\begin_inset Quotes erd -\end_inset - - on a line by itself marks the previous line as the last line of the block - to be repeated. - -\end_layout - -\begin_layout Standard -\begin_inset Include \input{capi.lyx} -preview false - -\end_inset - - -\end_layout - -\begin_layout Standard -\begin_inset LatexCommand printindex - -\end_inset - - -\end_layout - -\end_body -\end_document diff --git a/numpy/doc/numpybook/runcode.py b/numpy/doc/numpybook/runcode.py deleted file mode 100644 index a0b82340b..000000000 --- a/numpy/doc/numpybook/runcode.py +++ /dev/null @@ -1,148 +0,0 @@ -# This script takes a lyx file and runs the python code in it. -# Then rewrites the lyx file again. -# -# Each section of code portion is assumed to be in the same namespace -# where a from numpy import * has been applied -# -# If a PYNEW inside a Note is encountered, the name space is restarted -# -# The output (if any) is replaced in the file -# by the output produced during the code run. -# -# Options: -# -n name of code section (default MyCode) -# - -import sys -import optparse -import cStringIO -import re -import os - -newre = re.compile(r"\\begin_inset Note.*PYNEW\s+\\end_inset", re.DOTALL) - -def getoutput(tstr, dic): - print "\n\nRunning..." - print tstr, - tempstr = cStringIO.StringIO() - sys.stdout = tempstr - code = compile(tstr, '<input>', 'exec') - try: - res = eval(tstr, dic) - sys.stdout = sys.__stdout__ - except SyntaxError: - try: - res = None - exec code in dic - finally: - sys.stdout = sys.__stdout__ - if res is None: - res = tempstr.getvalue() - else: - res = tempstr.getvalue() + '\n' + repr(res) - if res != '': - print "\nOutput is" - print res, - return res - -# now find the code in the code segment -def getnewcodestr(substr, dic): - end = substr.find('\\layout ') - lines = substr[:end].split('\\newline') - outlines = [] - first = 1 - cmd = '' - lines.append('dummy') - for line in lines: - line = line.strip() - if (line[:3]=='>>>') or (line == 'dummy'): - # we have a new output - pyoutstr = getoutput(cmd, dic).strip() - if pyoutstr != '': - pyout = pyoutstr.split('\n') - outlines.extend(pyout) - cmd = line[4:] - elif (line[:3]=='...'): - # continuation output - cmd += "\n%s" % line[4:] - else: - # first line or output - if first: - first = 0 - cmd = line - else: - continue - if line != 'dummy': - outlines.append(line) - return "\n\\newline \n".join(outlines), end - - -def runpycode(lyxstr, name='MyCode'): - schobj = re.compile(r"\\layout %s\s+>>> " % name) - outstr = cStringIO.StringIO() - num = 0 - indx = [] - for it in schobj.finditer(lyxstr): - indx.extend([it.start(), it.end()]) - num += 1 - - if num == 0: - print "Nothing found for %s" % name - return lyxstr - - start = 0 - del indx[0] - indx.append(len(lyxstr)) - edic = {} - exec 'from numpy import *' in edic - exec 'set_printoptions(linewidth=65)' in edic - # indx now contains [st0,en0, ..., stN,enN] - # where stX is the start of code segment X - # and enX is the start of \layout MyCode for - # the X+1 code section (or string length if X=N) - for k in range(num): - # first write everything up to the start of the code segment - substr = lyxstr[start:indx[2*k]] - outstr.write(substr) - if start > 0: - mat = newre.search(substr) - # if PYNEW found, then start a new namespace - if mat: - edic = {} - exec 'from numpy import *' in edic - exec 'set_printoptions(linewidth=65)' in edic - # now find the code in the code segment - # endoutput will contain the index just past any output - # already present in the lyx string. - substr = lyxstr[indx[2*k]:indx[2*k+1]] - lyxcodestr, endcode = getnewcodestr(substr, edic) - # write the lyx for the input + new output - outstr.write(lyxcodestr) - outstr.write('\n') - start = endcode + indx[2*k] - - outstr.write(lyxstr[start:]) - return outstr.getvalue() - - -def main(args): - usage = "%prog {options} filename" - parser = optparse.OptionParser(usage) - parser.add_option('-n','--name', default='MyCode') - - options, args = parser.parse_args(args) - if len(args) < 1: - parser.error("incorrect number of arguments") - - os.system('cp -f %s %s.bak' % (args[0], args[0])) - fid = file(args[0]) - str = fid.read() - fid.close() - print "Processing %s" % options.name - newstr = runpycode(str, options.name) - fid = file(args[0],'w') - fid.write(newstr) - fid.close() - -if __name__ == "__main__": - main(sys.argv[1:]) diff --git a/numpy/doc/reference/__init__.py b/numpy/doc/reference/__init__.py deleted file mode 100644 index 8664ea04d..000000000 --- a/numpy/doc/reference/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -import os - -ref_dir = os.path.join(os.path.dirname(__file__)) - -__all__ = [f[:-3] for f in os.listdir(ref_dir) if f.endswith('.py') and - not f.startswith('__')] -__all__.sort() - -__doc__ = 'The following topics are available:\n' + \ - '\n - '.join([''] + __all__) - -__all__.extend(['__doc__']) |