diff options
author | Eugeniy E. Mikhailov <evgmik@gmail.com> | 2021-01-29 16:23:05 -0500 |
---|---|---|
committer | Eugeniy E. Mikhailov <evgmik@gmail.com> | 2021-01-29 16:23:05 -0500 |
commit | 3983eb46023c1edd00617729ba929057fda8d0bd (patch) | |
tree | 816ad084f355000656c43da9160f1c257bbb1ddc | |
download | l1magic-3983eb46023c1edd00617729ba929057fda8d0bd.tar.gz l1magic-3983eb46023c1edd00617729ba929057fda8d0bd.zip |
Initial import from https://statweb.stanford.edu/~candes/software/l1magic/v1.11
Additional Clean up of Mac dirs and tex generated files
47 files changed, 12509 insertions, 0 deletions
diff --git a/Data/RandomStates.mat b/Data/RandomStates.mat Binary files differnew file mode 100644 index 0000000..baa8e5b --- /dev/null +++ b/Data/RandomStates.mat diff --git a/Data/boats.mat b/Data/boats.mat Binary files differnew file mode 100644 index 0000000..2af166c --- /dev/null +++ b/Data/boats.mat diff --git a/Data/camera.mat b/Data/camera.mat Binary files differnew file mode 100644 index 0000000..cd3d2e0 --- /dev/null +++ b/Data/camera.mat diff --git a/Measurements/A_f.m b/Measurements/A_f.m new file mode 100644 index 0000000..3a793aa --- /dev/null +++ b/Measurements/A_f.m @@ -0,0 +1,30 @@ +% A_f.m +% +% Takes "scrambled Fourier" measurements. +% +% Usage: b = A_f(x, OMEGA, P) +% +% x - N vector +% +% b - K vector = [real part; imag part] +% +% OMEGA - K/2 vector denoting which Fourier coefficients to use +% (the real and imag parts of each freq are kept). +% +% P - Permutation to apply to the input vector. Fourier coeffs of +% x(P) are calculated. +% Default = 1:N (no scrambling). +% +% Written by: Justin Romberg, Caltech +% Created: October 2005 +% Email: jrom@acm.caltech.edu +% + +function b = A_f(x, OMEGA, P) + +N = length(x); +if (nargin < 3), P = 1:N; end + +fx = 1/sqrt(N)*fft(x(P)); +b = [sqrt(2)*real(fx(OMEGA)); sqrt(2)*imag(fx(OMEGA))]; + diff --git a/Measurements/A_fhp.m b/Measurements/A_fhp.m new file mode 100644 index 0000000..a7aef36 --- /dev/null +++ b/Measurements/A_fhp.m @@ -0,0 +1,25 @@ +% A_fhp.m +% +% Takes measurements in the upper half-plane of the 2D Fourier transform. +% +% Usage: b = A_fhp(x, OMEGA) +% +% x - N vector +% +% b - K vector = [mean; real part(OMEGA); imag part(OMEGA)] +% +% OMEGA - K/2-1 vector denoting which Fourier coefficients to use +% (the real and imag parts of each freq are kept). +% +% Written by: Justin Romberg, Caltech +% Created: October 2005 +% Email: jrom@acm.caltech.edu +% + +function y = A_fhp(x, OMEGA) + +n = round(sqrt(length(x))); + +yc = 1/n*fft2(reshape(x,n,n)); +y = [yc(1,1); sqrt(2)*real(yc(OMEGA)); sqrt(2)*imag(yc(OMEGA))]; + diff --git a/Measurements/At_f.m b/Measurements/At_f.m new file mode 100644 index 0000000..9addfe3 --- /dev/null +++ b/Measurements/At_f.m @@ -0,0 +1,32 @@ +% At_f.m +% +% Adjoint for "scrambled Fourier" measurements. +% +% Usage: x = At_f(b, N, OMEGA, P) +% +% b - K vector = [real part; imag part] +% +% N - length of output x +% +% OMEGA - K/2 vector denoting which Fourier coefficients to use +% (the real and imag parts of each freq are kept). +% +% P - Permutation to apply to the input vector. Fourier coeffs of +% x(P) are embedded. +% Default = 1:N (no scrambling). +% +% Written by: Justin Romberg, Caltech +% Created: October 2005 +% Email: jrom@acm.caltech.edu +% + + +function x = At_f(b, N, OMEGA, P) + +if (nargin < 4), P = 1:N; end + +K = length(b); +fx = zeros(N,1); +fx(OMEGA) = sqrt(2)*b(1:K/2) + i*sqrt(2)*b(K/2+1:K); +x = zeros(N,1); +x(P) = sqrt(N)*real(ifft(fx)); diff --git a/Measurements/At_fhp.m b/Measurements/At_fhp.m new file mode 100644 index 0000000..a7879af --- /dev/null +++ b/Measurements/At_fhp.m @@ -0,0 +1,28 @@ +% At_fhp.m +% +% Adjoint of At_fhp (2D Fourier half plane measurements). +% +% Usage: x = At_fhp(b, OMEGA, n) +% +% b - K vector = [mean; real part(OMEGA); imag part(OMEGA)] +% +% OMEGA - K/2-1 vector denoting which Fourier coefficients to use +% (the real and imag parts of each freq are kept). +% +% n - Image is nxn pixels +% +% x - N vector +% +% Written by: Justin Romberg, Caltech +% Created: October 2005 +% Email: jrom@acm.caltech.edu +% + +function x = At_fhp(y, OMEGA, n) + +K = length(y); + +fx = zeros(n,n); +fx(1,1) = y(1); +fx(OMEGA) = sqrt(2)*(y(2:(K+1)/2) + i*y((K+3)/2:K)); +x = reshape(real(n*ifft2(fx)), n*n, 1); diff --git a/Measurements/LineMask.m b/Measurements/LineMask.m new file mode 100644 index 0000000..d7e985f --- /dev/null +++ b/Measurements/LineMask.m @@ -0,0 +1,47 @@ +% LineMask.m +% +% Returns the indicator of the domain in 2D fourier space for the +% specified line geometry. +% Usage : [M,Mh,mi,mhi] = LineMask(L,N) +% +% Written by : Justin Romberg +% Created : 1/26/2004 +% Revised : 12/2/2004 + +function [M,Mh,mi,mhi] = LineMask(L,N) + + +thc = linspace(0, pi-pi/L, L); +%thc = linspace(pi/(2*L), pi-pi/(2*L), L); + +M = zeros(N); + +% full mask +for ll = 1:L + + if ((thc(ll) <= pi/4) | (thc(ll) > 3*pi/4)) + yr = round(tan(thc(ll))*(-N/2+1:N/2-1))+N/2+1; + for nn = 1:N-1 + M(yr(nn),nn+1) = 1; + end + else + xc = round(cot(thc(ll))*(-N/2+1:N/2-1))+N/2+1; + for nn = 1:N-1 + M(nn+1,xc(nn)) = 1; + end + end + +end + + +% upper half plane mask (not including origin) +Mh = zeros(N); +Mh = M; +Mh(N/2+2:N,:) = 0; +Mh(N/2+1,N/2+1:N) = 0; + + +M = ifftshift(M); +mi = find(M); +Mh = ifftshift(Mh); +mhi = find(Mh); diff --git a/Notes/Figs/l1eqexample_minl2.eps b/Notes/Figs/l1eqexample_minl2.eps new file mode 100644 index 0000000..61bab40 --- /dev/null +++ b/Notes/Figs/l1eqexample_minl2.eps @@ -0,0 +1,374 @@ +%!PS-Adobe-2.0 EPSF-1.2 +%%Creator: MATLAB, The Mathworks, Inc. +%%Title: ./Notes/Figs/l1eqexample_minl2.eps +%%CreationDate: 11/20/2005 23:22:44 +%%DocumentNeededFonts: Helvetica +%%DocumentProcessColors: Cyan Magenta Yellow Black +%%Extensions: CMYK +%%Pages: 1 +%%BoundingBox: 70 215 543 589 +%%EndComments + +%%BeginProlog +% MathWorks dictionary +/MathWorks 160 dict begin +% definition operators +/bdef {bind def} bind def +/ldef {load def} bind def +/xdef {exch def} bdef +/xstore {exch store} bdef +% operator abbreviations +/c /clip ldef +/cc /concat ldef +/cp /closepath ldef +/gr /grestore ldef +/gs /gsave ldef +/mt /moveto ldef +/np /newpath ldef +/cm /currentmatrix ldef +/sm /setmatrix ldef +/rm /rmoveto ldef +/rl /rlineto ldef +/s {show newpath} bdef +/sc {setcmykcolor} bdef +/sr /setrgbcolor ldef +/sg /setgray ldef +/w /setlinewidth ldef +/j /setlinejoin ldef +/cap /setlinecap ldef +/rc {rectclip} bdef +/rf {rectfill} bdef +% page state control +/pgsv () def +/bpage {/pgsv save def} bdef +/epage {pgsv restore} bdef +/bplot /gsave ldef +/eplot {stroke grestore} bdef +% orientation switch +/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def +% coordinate system mappings +/dpi2point 0 def +% font control +/FontSize 0 def +/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0] + makefont setfont} bdef +/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse + exch dup 3 1 roll findfont dup length dict begin + { 1 index /FID ne {def}{pop pop} ifelse } forall + /Encoding exch def currentdict end definefont pop} bdef +/isroman {findfont /CharStrings get /Agrave known} bdef +/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse + exch FMS} bdef +/csm {1 dpi2point div -1 dpi2point div scale neg translate + dup landscapeMode eq {pop -90 rotate} + {rotateMode eq {90 rotate} if} ifelse} bdef +% line types: solid, dotted, dashed, dotdash +/SO { [] 0 setdash } bdef +/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef +/DA { [6 dpi2point mul] 0 setdash } bdef +/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 + dpi2point mul] 0 setdash } bdef +% macros for lines and objects +/L {lineto stroke} bdef +/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef +/AP {{rlineto} repeat} bdef +/PDlw -1 def +/W {/PDlw currentlinewidth def setlinewidth} def +/PP {closepath eofill} bdef +/DP {closepath stroke} bdef +/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto + neg 0 exch rlineto closepath} bdef +/FR {MR stroke} bdef +/PR {MR fill} bdef +/L1i {{currentfile picstr readhexstring pop} image} bdef +/tMatrix matrix def +/MakeOval {newpath tMatrix currentmatrix pop translate scale +0 0 1 0 360 arc tMatrix setmatrix} bdef +/FO {MakeOval stroke} bdef +/PO {MakeOval fill} bdef +/PD {currentlinewidth 2 div 0 360 arc fill + PDlw -1 eq not {PDlw w /PDlw -1 def} if} def +/FA {newpath tMatrix currentmatrix pop translate scale + 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef +/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale + 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef +/FAn {newpath tMatrix currentmatrix pop translate scale + 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef +/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale + 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef +/vradius 0 def /hradius 0 def /lry 0 def +/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def +/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef + /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly + vradius add translate hradius vradius scale 0 0 1 180 270 arc + tMatrix setmatrix lrx hradius sub uly vradius add translate + hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix + lrx hradius sub lry vradius sub translate hradius vradius scale + 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub + translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix + closepath} bdef +/FRR {MRR stroke } bdef +/PRR {MRR fill } bdef +/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def + newpath tMatrix currentmatrix pop ulx rad add uly rad add translate + rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad + sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix + closepath} bdef +/FlrRR {MlrRR stroke } bdef +/PlrRR {MlrRR fill } bdef +/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def + newpath tMatrix currentmatrix pop ulx rad add uly rad add translate + rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad + sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix + closepath} bdef +/FtbRR {MtbRR stroke } bdef +/PtbRR {MtbRR fill } bdef +/stri 6 array def /dtri 6 array def +/smat 6 array def /dmat 6 array def +/tmat1 6 array def /tmat2 6 array def /dif 3 array def +/asub {/ind2 exch def /ind1 exch def dup dup + ind1 get exch ind2 get sub exch } bdef +/tri_to_matrix { + 2 0 asub 3 1 asub 4 0 asub 5 1 asub + dup 0 get exch 1 get 7 -1 roll astore } bdef +/compute_transform { + dmat dtri tri_to_matrix tmat1 invertmatrix + smat stri tri_to_matrix tmat2 concatmatrix } bdef +/ds {stri astore pop} bdef +/dt {dtri astore pop} bdef +/db {2 copy /cols xdef /rows xdef mul dup 3 mul string + currentfile exch readhexstring pop + dup 0 3 index getinterval /rbmap xdef + dup 2 index dup getinterval /gbmap xdef + 1 index dup 2 mul exch getinterval /bbmap xdef pop pop}bdef +/it {gs np dtri aload pop moveto lineto lineto cp c + cols rows 8 compute_transform + rbmap gbmap bbmap true 3 colorimage gr}bdef +/il {newpath moveto lineto stroke}bdef +currentdict end def +%%EndProlog + +%%BeginSetup +MathWorks begin + +0 cap + +end +%%EndSetup + +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: 70 215 543 589 +MathWorks begin +bpage +%%EndPageSetup + +%%BeginObject: obj1 +bplot + +/dpi2point 12 def +portraitMode 0216 7344 csm + + 628 274 5682 4487 MR c np +125 dict begin %Colortable dictionary +/c0 { 0.000000 0.000000 0.000000 sr} bdef +/c1 { 1.000000 1.000000 1.000000 sr} bdef +/c2 { 0.900000 0.000000 0.000000 sr} bdef +/c3 { 0.000000 0.820000 0.000000 sr} bdef +/c4 { 0.000000 0.000000 0.800000 sr} bdef +/c5 { 0.910000 0.820000 0.320000 sr} bdef +/c6 { 1.000000 0.260000 0.820000 sr} bdef +/c7 { 0.000000 0.820000 0.820000 sr} bdef +c0 +1 j +1 sg + 0 0 6918 5186 PR +6 w +0 4226 5361 0 0 -4226 899 4615 4 MP +PP +-5361 0 0 4226 5361 0 0 -4226 899 4615 5 MP stroke +4 w +DO +SO +6 w +0 sg + 899 4615 mt 6260 4615 L + 899 389 mt 6260 389 L + 899 4615 mt 899 389 L +6260 4615 mt 6260 389 L + 899 4615 mt 6260 4615 L + 899 4615 mt 899 389 L + 899 4615 mt 899 4561 L + 899 389 mt 899 442 L +%%IncludeResource: font Helvetica +/Helvetica /ISOLatin1Encoding 120 FMSR + + 866 4760 mt +(0) s +1422 4615 mt 1422 4561 L +1422 389 mt 1422 442 L +1356 4760 mt +(50) s +1946 4615 mt 1946 4561 L +1946 389 mt 1946 442 L +1846 4760 mt +(100) s +2469 4615 mt 2469 4561 L +2469 389 mt 2469 442 L +2369 4760 mt +(150) s +2993 4615 mt 2993 4561 L +2993 389 mt 2993 442 L +2893 4760 mt +(200) s +3516 4615 mt 3516 4561 L +3516 389 mt 3516 442 L +3416 4760 mt +(250) s +4040 4615 mt 4040 4561 L +4040 389 mt 4040 442 L +3940 4760 mt +(300) s +4563 4615 mt 4563 4561 L +4563 389 mt 4563 442 L +4463 4760 mt +(350) s +5087 4615 mt 5087 4561 L +5087 389 mt 5087 442 L +4987 4760 mt +(400) s +5610 4615 mt 5610 4561 L +5610 389 mt 5610 442 L +5510 4760 mt +(450) s +6134 4615 mt 6134 4561 L +6134 389 mt 6134 442 L +6034 4760 mt +(500) s + 899 4615 mt 952 4615 L +6260 4615 mt 6206 4615 L + 628 4659 mt +(-0.4) s + 899 4086 mt 952 4086 L +6260 4086 mt 6206 4086 L + 628 4130 mt +(-0.3) s + 899 3558 mt 952 3558 L +6260 3558 mt 6206 3558 L + 628 3602 mt +(-0.2) s + 899 3030 mt 952 3030 L +6260 3030 mt 6206 3030 L + 628 3074 mt +(-0.1) s + 899 2502 mt 952 2502 L +6260 2502 mt 6206 2502 L + 798 2546 mt +(0) s + 899 1973 mt 952 1973 L +6260 1973 mt 6206 1973 L + 698 2017 mt +(0.1) s + 899 1445 mt 952 1445 L +6260 1445 mt 6206 1445 L + 698 1489 mt +(0.2) s + 899 917 mt 952 917 L +6260 917 mt 6206 917 L + 698 961 mt +(0.3) s + 899 389 mt 952 389 L +6260 389 mt 6206 389 L + 698 433 mt +(0.4) s + 899 4615 mt 6260 4615 L + 899 389 mt 6260 389 L + 899 4615 mt 899 389 L +6260 4615 mt 6260 389 L +gs 898 389 5363 4227 MR c np +/c8 { 0.000000 0.000000 1.000000 sr} bdef +c8 +11 327 10 0 11 -702 10 539 11 -868 10 2531 11 -1984 10 864 +11 120 10 -1173 11 548 10 76 11 -27 10 -274 11 139 10 -952 +11 586 10 -73 10 -162 11 895 10 147 11 -696 10 636 11 -538 +10 143 11 -670 10 1050 11 -132 10 1286 11 -1290 10 -794 11 54 +10 -302 11 590 10 224 10 587 11 -550 10 171 11 384 10 -807 +11 877 10 -468 11 269 10 -1609 11 1394 10 -151 11 -411 10 718 +11 1046 10 -1393 11 734 10 -1592 10 155 11 1176 10 -177 11 -962 +10 407 11 516 10 -1444 11 904 10 222 11 306 10 -1308 11 1381 +10 469 11 -1119 10 790 11 -796 10 438 10 1 11 151 10 -6 +11 -565 10 483 11 -699 10 -101 11 970 10 -390 11 145 10 520 +11 -233 10 -129 11 -1440 10 1557 11 -279 10 -507 10 611 11 -440 +10 396 11 669 10 -621 11 -1078 10 1373 11 366 10 -1320 11 -55 +10 319 11 -528 10 512 5223 2641 100 MP stroke +11 -655 10 38 11 385 10 840 10 -928 11 248 10 679 11 159 +10 -686 11 386 10 -345 11 -41 10 252 11 -136 10 -199 11 -62 +10 289 11 652 10 -466 11 299 10 -50 10 -1167 11 249 10 298 +11 238 10 1058 11 -755 10 -720 11 199 10 -528 11 193 10 128 +11 -738 10 608 11 2 10 717 11 -1154 10 23 10 305 11 578 +10 -79 11 -305 10 565 11 578 10 -1220 11 -26 10 1381 11 -725 +10 -310 11 509 10 132 11 -855 10 561 11 -19 10 -261 10 78 +11 557 10 -649 11 684 10 -283 11 -1198 10 556 11 -651 10 721 +11 19 10 715 11 -903 10 481 11 -230 10 1023 11 -1519 10 59 +10 594 11 -129 10 181 11 62 10 234 11 -347 10 -506 11 1009 +10 -428 11 34 10 -514 11 -326 10 385 11 -298 10 744 11 148 +10 -432 10 148 11 1385 10 -1336 11 42 10 36 11 184 10 -765 +11 371 10 -101 11 -271 4186 2958 100 MP stroke +10 149 11 677 10 -438 11 286 10 -571 11 964 10 -506 10 -600 +11 99 10 55 11 483 10 410 11 -364 10 47 11 -131 10 -150 +11 41 10 -655 11 605 10 483 11 -76 10 -1895 11 1142 10 1415 +10 -1125 11 367 10 328 11 -55 10 745 11 -2631 10 1830 11 -69 +10 482 11 548 10 -1454 11 -613 10 495 11 728 10 -335 11 126 +10 -481 10 395 11 823 10 -1301 11 738 10 -831 11 -177 10 573 +11 -1078 10 866 11 1118 10 -1760 11 612 10 27 11 181 10 -81 +11 149 10 454 10 -967 11 -314 10 1315 11 -327 10 -190 11 -78 +10 284 11 -683 10 613 11 -1035 10 39 11 1037 10 101 11 830 +10 -1692 11 655 10 -298 10 -131 11 27 10 -208 11 -101 10 649 +11 -600 10 397 11 156 10 -53 11 384 10 -709 11 489 10 -477 +11 416 10 113 11 -792 10 755 10 -894 11 304 10 285 11 -241 +10 -149 11 956 10 -160 3150 2188 100 MP stroke +11 -407 10 603 11 -419 10 -106 11 -348 10 274 11 180 10 153 +11 -300 10 -738 10 1104 11 -454 10 -219 11 1205 10 -826 11 489 +10 -194 11 515 10 -869 11 -251 10 626 11 -456 10 402 11 -997 +10 1039 11 -421 10 243 10 79 11 6 10 123 11 -814 10 647 +11 -551 10 781 11 -618 10 841 11 -517 10 -266 11 -251 10 61 +11 299 10 -244 11 61 10 608 10 -724 11 -54 10 -91 11 362 +10 201 11 -370 10 226 11 339 10 -1240 11 971 10 -832 11 1100 +10 241 11 -554 10 -605 11 866 10 -96 10 -137 11 277 10 -150 +11 -478 10 801 11 -164 10 165 11 -1225 10 652 11 -360 10 761 +11 -326 10 -1381 11 1365 10 -334 11 410 10 -230 10 146 11 485 +10 -312 11 -739 10 -392 11 1407 10 -653 11 423 10 83 11 -646 +10 677 11 -350 10 80 11 -131 10 330 11 -221 10 -561 10 612 +11 121 10 377 11 -360 2113 2353 100 MP stroke +10 -749 11 1639 10 -401 11 -125 10 617 11 -1058 10 -69 11 -622 +10 538 11 -601 10 200 11 797 10 -297 10 -349 11 749 10 -47 +11 -363 10 39 11 -31 10 -367 11 836 10 -243 11 -313 10 422 +11 -71 10 -2 11 -994 10 257 11 575 10 -376 10 457 11 76 +10 -681 11 546 10 -1328 11 840 10 80 11 63 10 26 11 -92 +10 -21 11 427 10 -127 11 51 10 -1 11 123 10 65 10 17 +11 -1077 10 648 11 -66 10 891 11 -756 10 737 11 -520 10 -493 +11 771 10 153 11 -410 10 -107 11 -797 10 719 11 307 10 -579 +10 249 11 336 10 -4 11 -175 10 230 11 -458 10 276 11 -70 +10 57 11 -58 10 -550 11 701 10 -552 11 232 10 -736 11 1504 +10 -1044 10 -612 11 1595 10 -539 11 -244 10 -115 11 169 10 -196 +11 -457 10 575 11 783 10 -126 11 -886 10 -152 11 458 10 -189 +11 -88 10 -113 10 505 1077 2514 100 MP stroke +11 -252 10 37 11 -308 10 68 11 215 10 511 11 217 10 -947 +11 375 10 1460 11 -805 10 -654 11 -1581 10 2081 11 45 10 -255 +909 2307 17 MP stroke +gr + +c8 + +end %%Color Dict + +eplot +%%EndObject + +epage +end + +showpage + +%%Trailer +%%EOF diff --git a/Notes/Figs/l1eqexample_minl2.pdf b/Notes/Figs/l1eqexample_minl2.pdf Binary files differnew file mode 100644 index 0000000..8498cb8 --- /dev/null +++ b/Notes/Figs/l1eqexample_minl2.pdf diff --git a/Notes/Figs/l1eqexample_recovered.eps b/Notes/Figs/l1eqexample_recovered.eps new file mode 100644 index 0000000..8a8ca09 --- /dev/null +++ b/Notes/Figs/l1eqexample_recovered.eps @@ -0,0 +1,382 @@ +%!PS-Adobe-2.0 EPSF-1.2 +%%Creator: MATLAB, The Mathworks, Inc. +%%Title: ./l1eqexample_recovered.eps +%%CreationDate: 11/20/2005 22:34:10 +%%DocumentNeededFonts: Helvetica +%%DocumentProcessColors: Cyan Magenta Yellow Black +%%Extensions: CMYK +%%Pages: 1 +%%BoundingBox: 70 215 543 583 +%%EndComments + +%%BeginProlog +% MathWorks dictionary +/MathWorks 160 dict begin +% definition operators +/bdef {bind def} bind def +/ldef {load def} bind def +/xdef {exch def} bdef +/xstore {exch store} bdef +% operator abbreviations +/c /clip ldef +/cc /concat ldef +/cp /closepath ldef +/gr /grestore ldef +/gs /gsave ldef +/mt /moveto ldef +/np /newpath ldef +/cm /currentmatrix ldef +/sm /setmatrix ldef +/rm /rmoveto ldef +/rl /rlineto ldef +/s {show newpath} bdef +/sc {setcmykcolor} bdef +/sr /setrgbcolor ldef +/sg /setgray ldef +/w /setlinewidth ldef +/j /setlinejoin ldef +/cap /setlinecap ldef +/rc {rectclip} bdef +/rf {rectfill} bdef +% page state control +/pgsv () def +/bpage {/pgsv save def} bdef +/epage {pgsv restore} bdef +/bplot /gsave ldef +/eplot {stroke grestore} bdef +% orientation switch +/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def +% coordinate system mappings +/dpi2point 0 def +% font control +/FontSize 0 def +/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0] + makefont setfont} bdef +/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse + exch dup 3 1 roll findfont dup length dict begin + { 1 index /FID ne {def}{pop pop} ifelse } forall + /Encoding exch def currentdict end definefont pop} bdef +/isroman {findfont /CharStrings get /Agrave known} bdef +/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse + exch FMS} bdef +/csm {1 dpi2point div -1 dpi2point div scale neg translate + dup landscapeMode eq {pop -90 rotate} + {rotateMode eq {90 rotate} if} ifelse} bdef +% line types: solid, dotted, dashed, dotdash +/SO { [] 0 setdash } bdef +/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef +/DA { [6 dpi2point mul] 0 setdash } bdef +/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 + dpi2point mul] 0 setdash } bdef +% macros for lines and objects +/L {lineto stroke} bdef +/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef +/AP {{rlineto} repeat} bdef +/PDlw -1 def +/W {/PDlw currentlinewidth def setlinewidth} def +/PP {closepath eofill} bdef +/DP {closepath stroke} bdef +/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto + neg 0 exch rlineto closepath} bdef +/FR {MR stroke} bdef +/PR {MR fill} bdef +/L1i {{currentfile picstr readhexstring pop} image} bdef +/tMatrix matrix def +/MakeOval {newpath tMatrix currentmatrix pop translate scale +0 0 1 0 360 arc tMatrix setmatrix} bdef +/FO {MakeOval stroke} bdef +/PO {MakeOval fill} bdef +/PD {currentlinewidth 2 div 0 360 arc fill + PDlw -1 eq not {PDlw w /PDlw -1 def} if} def +/FA {newpath tMatrix currentmatrix pop translate scale + 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef +/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale + 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef +/FAn {newpath tMatrix currentmatrix pop translate scale + 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef +/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale + 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef +/vradius 0 def /hradius 0 def /lry 0 def +/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def +/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef + /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly + vradius add translate hradius vradius scale 0 0 1 180 270 arc + tMatrix setmatrix lrx hradius sub uly vradius add translate + hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix + lrx hradius sub lry vradius sub translate hradius vradius scale + 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub + translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix + closepath} bdef +/FRR {MRR stroke } bdef +/PRR {MRR fill } bdef +/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def + newpath tMatrix currentmatrix pop ulx rad add uly rad add translate + rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad + sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix + closepath} bdef +/FlrRR {MlrRR stroke } bdef +/PlrRR {MlrRR fill } bdef +/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def + newpath tMatrix currentmatrix pop ulx rad add uly rad add translate + rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad + sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix + closepath} bdef +/FtbRR {MtbRR stroke } bdef +/PtbRR {MtbRR fill } bdef +/stri 6 array def /dtri 6 array def +/smat 6 array def /dmat 6 array def +/tmat1 6 array def /tmat2 6 array def /dif 3 array def +/asub {/ind2 exch def /ind1 exch def dup dup + ind1 get exch ind2 get sub exch } bdef +/tri_to_matrix { + 2 0 asub 3 1 asub 4 0 asub 5 1 asub + dup 0 get exch 1 get 7 -1 roll astore } bdef +/compute_transform { + dmat dtri tri_to_matrix tmat1 invertmatrix + smat stri tri_to_matrix tmat2 concatmatrix } bdef +/ds {stri astore pop} bdef +/dt {dtri astore pop} bdef +/db {2 copy /cols xdef /rows xdef mul dup 3 mul string + currentfile exch readhexstring pop + dup 0 3 index getinterval /rbmap xdef + dup 2 index dup getinterval /gbmap xdef + 1 index dup 2 mul exch getinterval /bbmap xdef pop pop}bdef +/it {gs np dtri aload pop moveto lineto lineto cp c + cols rows 8 compute_transform + rbmap gbmap bbmap true 3 colorimage gr}bdef +/il {newpath moveto lineto stroke}bdef +currentdict end def +%%EndProlog + +%%BeginSetup +MathWorks begin + +0 cap + +end +%%EndSetup + +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: 70 215 543 583 +MathWorks begin +bpage +%%EndPageSetup + +%%BeginObject: obj1 +bplot + +/dpi2point 12 def +portraitMode 0216 7344 csm + + 628 341 5682 4420 MR c np +125 dict begin %Colortable dictionary +/c0 { 0.000000 0.000000 0.000000 sr} bdef +/c1 { 1.000000 1.000000 1.000000 sr} bdef +/c2 { 0.900000 0.000000 0.000000 sr} bdef +/c3 { 0.000000 0.820000 0.000000 sr} bdef +/c4 { 0.000000 0.000000 0.800000 sr} bdef +/c5 { 0.910000 0.820000 0.320000 sr} bdef +/c6 { 1.000000 0.260000 0.820000 sr} bdef +/c7 { 0.000000 0.820000 0.820000 sr} bdef +c0 +1 j +1 sg + 0 0 6918 5186 PR +6 w +0 4226 5361 0 0 -4226 899 4615 4 MP +PP +-5361 0 0 4226 5361 0 0 -4226 899 4615 5 MP stroke +4 w +DO +SO +6 w +0 sg + 899 4615 mt 6260 4615 L + 899 389 mt 6260 389 L + 899 4615 mt 899 389 L +6260 4615 mt 6260 389 L + 899 4615 mt 6260 4615 L + 899 4615 mt 899 389 L + 899 4615 mt 899 4561 L + 899 389 mt 899 442 L +%%IncludeResource: font Helvetica +/Helvetica /ISOLatin1Encoding 120 FMSR + + 866 4760 mt +(0) s +1422 4615 mt 1422 4561 L +1422 389 mt 1422 442 L +1356 4760 mt +(50) s +1946 4615 mt 1946 4561 L +1946 389 mt 1946 442 L +1846 4760 mt +(100) s +2469 4615 mt 2469 4561 L +2469 389 mt 2469 442 L +2369 4760 mt +(150) s +2993 4615 mt 2993 4561 L +2993 389 mt 2993 442 L +2893 4760 mt +(200) s +3516 4615 mt 3516 4561 L +3516 389 mt 3516 442 L +3416 4760 mt +(250) s +4040 4615 mt 4040 4561 L +4040 389 mt 4040 442 L +3940 4760 mt +(300) s +4563 4615 mt 4563 4561 L +4563 389 mt 4563 442 L +4463 4760 mt +(350) s +5087 4615 mt 5087 4561 L +5087 389 mt 5087 442 L +4987 4760 mt +(400) s +5610 4615 mt 5610 4561 L +5610 389 mt 5610 442 L +5510 4760 mt +(450) s +6134 4615 mt 6134 4561 L +6134 389 mt 6134 442 L +6034 4760 mt +(500) s + 899 4422 mt 952 4422 L +6260 4422 mt 6206 4422 L + 728 4466 mt +(-1) s + 899 4038 mt 952 4038 L +6260 4038 mt 6206 4038 L + 628 4082 mt +(-0.8) s + 899 3654 mt 952 3654 L +6260 3654 mt 6206 3654 L + 628 3698 mt +(-0.6) s + 899 3270 mt 952 3270 L +6260 3270 mt 6206 3270 L + 628 3314 mt +(-0.4) s + 899 2886 mt 952 2886 L +6260 2886 mt 6206 2886 L + 628 2930 mt +(-0.2) s + 899 2502 mt 952 2502 L +6260 2502 mt 6206 2502 L + 798 2546 mt +(0) s + 899 2117 mt 952 2117 L +6260 2117 mt 6206 2117 L + 698 2161 mt +(0.2) s + 899 1733 mt 952 1733 L +6260 1733 mt 6206 1733 L + 698 1777 mt +(0.4) s + 899 1349 mt 952 1349 L +6260 1349 mt 6206 1349 L + 698 1393 mt +(0.6) s + 899 965 mt 952 965 L +6260 965 mt 6206 965 L + 698 1009 mt +(0.8) s + 899 581 mt 952 581 L +6260 581 mt 6206 581 L + 798 625 mt +(1) s + 899 4615 mt 6260 4615 L + 899 389 mt 6260 389 L + 899 4615 mt 899 389 L +6260 4615 mt 6260 389 L +gs 898 389 5363 4227 MR c np +/c8 { 0.000000 0.000000 1.000000 sr} bdef +c8 +11 1 10 0 11 -1 10 1 11 -1 10 1921 11 -1921 10 1 +11 0 10 -1 11 0 10 0 11 1 10 -1 11 1 10 -1921 +11 1920 10 0 10 0 11 1 10 0 11 -1 10 1 11 -1 +10 1 11 -1 10 1 11 0 10 1920 11 -1920 10 -1 11 0 +10 0 11 0 10 1 10 0 11 -1 10 1 11 0 10 -1 +11 1921 10 -1920 11 0 10 -1 11 1 10 0 11 -1 10 1 +11 1920 10 -1920 11 0 10 -1 10 0 11 1 10 0 11 -1 +10 0 11 1 10 -1 11 1 10 -1 11 1 10 -1 11 1 +10 0 11 -1 10 1 11 -1 10 1 10 -1 11 1 10 0 +11 -1 10 1 11 -1 10 0 11 1 10 0 11 0 10 0 +11 0 10 0 11 -1 10 1 11 0 10 -1 10 1 11 -1 +10 1 11 1920 10 -1920 11 -1 10 1 11 0 10 -1 11 -1920 +10 1920 11 0 10 0 5223 2502 100 MP stroke +11 0 10 0 11 0 10 1 10 -1 11 0 10 1 11 0 +10 -1 11 1 10 0 11 0 10 0 11 0 10 -1 11 0 +10 1 11 0 10 0 11 0 10 0 10 -1 11 0 10 0 +11 1 10 1920 11 -1920 10 -1 11 1 10 -1 11 0 10 1 +11 -1 10 0 11 0 10 0 11 0 10 0 10 0 11 1 +10 0 11 -1 10 1 11 0 10 -1 11 0 10 1 11 0 +10 -1 11 1 10 0 11 -1 10 0 11 1 10 0 10 0 +11 0 10 -1 11 1 10 0 11 -1 10 0 11 0 10 0 +11 0 10 1 11 -1 10 1 11 0 10 0 11 -1 10 0 +10 1 11 0 10 -1 11 1 10 0 11 0 10 -1 11 1 +10 0 11 0 10 -1 11 0 10 0 11 0 10 1 11 0 +10 -1 10 0 11 1921 10 -1921 11 1 10 0 11 0 10 -1 +11 0 10 0 11 0 4186 2502 100 MP stroke +10 0 11 1 10 0 11 0 10 -1 11 1 10 -1 10 0 +11 0 10 0 11 1 10 0 11 0 10 0 11 0 10 -1 +11 1 10 -1 11 0 10 1 11 0 10 -1921 11 1920 10 1 +10 -1 11 1 10 0 11 0 10 0 11 -1921 10 1921 11 0 +10 0 11 1920 10 -1921 11 0 10 0 11 1 10 0 11 0 +10 -1 10 1 11 0 10 -1 11 1 10 -1 11 0 10 1 +11 -1921 10 1921 11 1920 10 -1921 11 0 10 0 11 1 10 -1 +11 1 10 0 10 -1 11 0 10 1 11 0 10 -1 11 0 +10 1 11 -1 10 1 11 -1 10 0 11 1 10 0 11 0 +10 -1 11 1 10 -1 10 0 11 0 10 0 11 0 10 1 +11 -1 10 0 11 0 10 0 11 1 10 -1 11 1 10 -1 +11 0 10 1 11 -1 10 1 10 -1 11 0 10 0 11 0 +10 0 11 1 10 -1 3150 2502 100 MP stroke +11 0 10 1 11 -1 10 0 11 0 10 1 11 0 10 -1 +11 0 10 0 10 1 11 0 10 -1 11 1 10 0 11 0 +10 0 11 0 10 0 11 -1 10 1 11 -1 10 1 11 -1 +10 1 11 0 10 0 10 0 11 0 10 0 11 -1 10 1 +11 -1 10 1 11 -1 10 1 11 0 10 0 11 -1 10 0 +11 1 10 0 11 -1 10 1 10 -1 11 0 10 0 11 0 +10 1 11 -1 10 1 11 -1 10 0 11 1 10 -1 11 1 +10 0 11 -1 10 0 11 1 10 -1 10 0 11 1 10 0 +11 -1 10 1 11 -1 10 1 11 -1 10 1 11 -1 10 0 +11 0 10 0 11 1 10 -1 11 1 10 0 10 -1 11 1 +10 -1 11 0 10 0 11 1 10 -1 11 0 10 1 11 -1 +10 1 11 -1 10 0 11 0 10 1 11 0 10 -1 10 1 +11 0 10 0 11 -1 2113 2502 100 MP stroke +10 0 11 1 10 0 11 0 10 0 11 -1 10 0 11 0 +10 1 11 -1921 10 1920 11 1 10 0 10 -1 11 1 10 0 +11 -1 10 1 11 -1 10 1 11 0 10 0 11 0 10 0 +11 0 10 0 11 -1 10 0 11 1 10 -1 10 1 11 0 +10 -1 11 1 10 -1 11 0 10 0 11 0 10 0 11 0 +10 0 11 1 10 -1 11 0 10 0 11 1 10 0 10 0 +11 -1 10 1 11 -1 10 1 11 -1 10 1 11 0 10 -1 +11 1 10 0 11 -1 10 0 11 0 10 1 11 0 10 -1 +10 0 11 1 10 0 11 -1 10 1 11 -1 10 1 11 -1 +10 0 11 1 10 -1 11 1 10 -1 11 0 10 0 11 1921 +10 -1921 10 -1920 11 1921 10 0 11 -1 10 0 11 0 10 0 +11 0 10 0 11 1 10 0 11 -1 10 -1920 11 1921 10 -1 +11 0 10 0 10 0 1077 2502 100 MP stroke +11 0 10 0 11 0 10 0 11 1 10 0 11 0 10 -1 +11 1 10 1920 11 -1920 10 -1 11 -1920 10 1921 11 0 10 0 +909 2501 17 MP stroke +gr + +c8 + +end %%Color Dict + +eplot +%%EndObject + +epage +end + +showpage + +%%Trailer +%%EOF diff --git a/Notes/Figs/l1eqexample_recovered.pdf b/Notes/Figs/l1eqexample_recovered.pdf Binary files differnew file mode 100644 index 0000000..21f97eb --- /dev/null +++ b/Notes/Figs/l1eqexample_recovered.pdf diff --git a/Notes/Figs/l1eqexample_signal.eps b/Notes/Figs/l1eqexample_signal.eps new file mode 100644 index 0000000..fb4d0d1 --- /dev/null +++ b/Notes/Figs/l1eqexample_signal.eps @@ -0,0 +1,382 @@ +%!PS-Adobe-2.0 EPSF-1.2 +%%Creator: MATLAB, The Mathworks, Inc. +%%Title: ./l1eqexample_signal.eps +%%CreationDate: 11/20/2005 22:31:40 +%%DocumentNeededFonts: Helvetica +%%DocumentProcessColors: Cyan Magenta Yellow Black +%%Extensions: CMYK +%%Pages: 1 +%%BoundingBox: 70 215 543 583 +%%EndComments + +%%BeginProlog +% MathWorks dictionary +/MathWorks 160 dict begin +% definition operators +/bdef {bind def} bind def +/ldef {load def} bind def +/xdef {exch def} bdef +/xstore {exch store} bdef +% operator abbreviations +/c /clip ldef +/cc /concat ldef +/cp /closepath ldef +/gr /grestore ldef +/gs /gsave ldef +/mt /moveto ldef +/np /newpath ldef +/cm /currentmatrix ldef +/sm /setmatrix ldef +/rm /rmoveto ldef +/rl /rlineto ldef +/s {show newpath} bdef +/sc {setcmykcolor} bdef +/sr /setrgbcolor ldef +/sg /setgray ldef +/w /setlinewidth ldef +/j /setlinejoin ldef +/cap /setlinecap ldef +/rc {rectclip} bdef +/rf {rectfill} bdef +% page state control +/pgsv () def +/bpage {/pgsv save def} bdef +/epage {pgsv restore} bdef +/bplot /gsave ldef +/eplot {stroke grestore} bdef +% orientation switch +/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def +% coordinate system mappings +/dpi2point 0 def +% font control +/FontSize 0 def +/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0] + makefont setfont} bdef +/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse + exch dup 3 1 roll findfont dup length dict begin + { 1 index /FID ne {def}{pop pop} ifelse } forall + /Encoding exch def currentdict end definefont pop} bdef +/isroman {findfont /CharStrings get /Agrave known} bdef +/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse + exch FMS} bdef +/csm {1 dpi2point div -1 dpi2point div scale neg translate + dup landscapeMode eq {pop -90 rotate} + {rotateMode eq {90 rotate} if} ifelse} bdef +% line types: solid, dotted, dashed, dotdash +/SO { [] 0 setdash } bdef +/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef +/DA { [6 dpi2point mul] 0 setdash } bdef +/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 + dpi2point mul] 0 setdash } bdef +% macros for lines and objects +/L {lineto stroke} bdef +/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef +/AP {{rlineto} repeat} bdef +/PDlw -1 def +/W {/PDlw currentlinewidth def setlinewidth} def +/PP {closepath eofill} bdef +/DP {closepath stroke} bdef +/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto + neg 0 exch rlineto closepath} bdef +/FR {MR stroke} bdef +/PR {MR fill} bdef +/L1i {{currentfile picstr readhexstring pop} image} bdef +/tMatrix matrix def +/MakeOval {newpath tMatrix currentmatrix pop translate scale +0 0 1 0 360 arc tMatrix setmatrix} bdef +/FO {MakeOval stroke} bdef +/PO {MakeOval fill} bdef +/PD {currentlinewidth 2 div 0 360 arc fill + PDlw -1 eq not {PDlw w /PDlw -1 def} if} def +/FA {newpath tMatrix currentmatrix pop translate scale + 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef +/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale + 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef +/FAn {newpath tMatrix currentmatrix pop translate scale + 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef +/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale + 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef +/vradius 0 def /hradius 0 def /lry 0 def +/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def +/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef + /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly + vradius add translate hradius vradius scale 0 0 1 180 270 arc + tMatrix setmatrix lrx hradius sub uly vradius add translate + hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix + lrx hradius sub lry vradius sub translate hradius vradius scale + 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub + translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix + closepath} bdef +/FRR {MRR stroke } bdef +/PRR {MRR fill } bdef +/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def + newpath tMatrix currentmatrix pop ulx rad add uly rad add translate + rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad + sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix + closepath} bdef +/FlrRR {MlrRR stroke } bdef +/PlrRR {MlrRR fill } bdef +/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def + newpath tMatrix currentmatrix pop ulx rad add uly rad add translate + rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad + sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix + closepath} bdef +/FtbRR {MtbRR stroke } bdef +/PtbRR {MtbRR fill } bdef +/stri 6 array def /dtri 6 array def +/smat 6 array def /dmat 6 array def +/tmat1 6 array def /tmat2 6 array def /dif 3 array def +/asub {/ind2 exch def /ind1 exch def dup dup + ind1 get exch ind2 get sub exch } bdef +/tri_to_matrix { + 2 0 asub 3 1 asub 4 0 asub 5 1 asub + dup 0 get exch 1 get 7 -1 roll astore } bdef +/compute_transform { + dmat dtri tri_to_matrix tmat1 invertmatrix + smat stri tri_to_matrix tmat2 concatmatrix } bdef +/ds {stri astore pop} bdef +/dt {dtri astore pop} bdef +/db {2 copy /cols xdef /rows xdef mul dup 3 mul string + currentfile exch readhexstring pop + dup 0 3 index getinterval /rbmap xdef + dup 2 index dup getinterval /gbmap xdef + 1 index dup 2 mul exch getinterval /bbmap xdef pop pop}bdef +/it {gs np dtri aload pop moveto lineto lineto cp c + cols rows 8 compute_transform + rbmap gbmap bbmap true 3 colorimage gr}bdef +/il {newpath moveto lineto stroke}bdef +currentdict end def +%%EndProlog + +%%BeginSetup +MathWorks begin + +0 cap + +end +%%EndSetup + +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: 70 215 543 583 +MathWorks begin +bpage +%%EndPageSetup + +%%BeginObject: obj1 +bplot + +/dpi2point 12 def +portraitMode 0216 7344 csm + + 628 341 5682 4420 MR c np +125 dict begin %Colortable dictionary +/c0 { 0.000000 0.000000 0.000000 sr} bdef +/c1 { 1.000000 1.000000 1.000000 sr} bdef +/c2 { 0.900000 0.000000 0.000000 sr} bdef +/c3 { 0.000000 0.820000 0.000000 sr} bdef +/c4 { 0.000000 0.000000 0.800000 sr} bdef +/c5 { 0.910000 0.820000 0.320000 sr} bdef +/c6 { 1.000000 0.260000 0.820000 sr} bdef +/c7 { 0.000000 0.820000 0.820000 sr} bdef +c0 +1 j +1 sg + 0 0 6918 5186 PR +6 w +0 4226 5361 0 0 -4226 899 4615 4 MP +PP +-5361 0 0 4226 5361 0 0 -4226 899 4615 5 MP stroke +4 w +DO +SO +6 w +0 sg + 899 4615 mt 6260 4615 L + 899 389 mt 6260 389 L + 899 4615 mt 899 389 L +6260 4615 mt 6260 389 L + 899 4615 mt 6260 4615 L + 899 4615 mt 899 389 L + 899 4615 mt 899 4561 L + 899 389 mt 899 442 L +%%IncludeResource: font Helvetica +/Helvetica /ISOLatin1Encoding 120 FMSR + + 866 4760 mt +(0) s +1422 4615 mt 1422 4561 L +1422 389 mt 1422 442 L +1356 4760 mt +(50) s +1946 4615 mt 1946 4561 L +1946 389 mt 1946 442 L +1846 4760 mt +(100) s +2469 4615 mt 2469 4561 L +2469 389 mt 2469 442 L +2369 4760 mt +(150) s +2993 4615 mt 2993 4561 L +2993 389 mt 2993 442 L +2893 4760 mt +(200) s +3516 4615 mt 3516 4561 L +3516 389 mt 3516 442 L +3416 4760 mt +(250) s +4040 4615 mt 4040 4561 L +4040 389 mt 4040 442 L +3940 4760 mt +(300) s +4563 4615 mt 4563 4561 L +4563 389 mt 4563 442 L +4463 4760 mt +(350) s +5087 4615 mt 5087 4561 L +5087 389 mt 5087 442 L +4987 4760 mt +(400) s +5610 4615 mt 5610 4561 L +5610 389 mt 5610 442 L +5510 4760 mt +(450) s +6134 4615 mt 6134 4561 L +6134 389 mt 6134 442 L +6034 4760 mt +(500) s + 899 4422 mt 952 4422 L +6260 4422 mt 6206 4422 L + 728 4466 mt +(-1) s + 899 4038 mt 952 4038 L +6260 4038 mt 6206 4038 L + 628 4082 mt +(-0.8) s + 899 3654 mt 952 3654 L +6260 3654 mt 6206 3654 L + 628 3698 mt +(-0.6) s + 899 3270 mt 952 3270 L +6260 3270 mt 6206 3270 L + 628 3314 mt +(-0.4) s + 899 2886 mt 952 2886 L +6260 2886 mt 6206 2886 L + 628 2930 mt +(-0.2) s + 899 2502 mt 952 2502 L +6260 2502 mt 6206 2502 L + 798 2546 mt +(0) s + 899 2117 mt 952 2117 L +6260 2117 mt 6206 2117 L + 698 2161 mt +(0.2) s + 899 1733 mt 952 1733 L +6260 1733 mt 6206 1733 L + 698 1777 mt +(0.4) s + 899 1349 mt 952 1349 L +6260 1349 mt 6206 1349 L + 698 1393 mt +(0.6) s + 899 965 mt 952 965 L +6260 965 mt 6206 965 L + 698 1009 mt +(0.8) s + 899 581 mt 952 581 L +6260 581 mt 6206 581 L + 798 625 mt +(1) s + 899 4615 mt 6260 4615 L + 899 389 mt 6260 389 L + 899 4615 mt 899 389 L +6260 4615 mt 6260 389 L +gs 898 389 5363 4227 MR c np +/c8 { 0.000000 0.000000 1.000000 sr} bdef +c8 +11 0 10 0 11 0 10 0 11 0 10 1921 11 -1921 10 0 +11 0 10 0 11 0 10 0 11 0 10 0 11 0 10 -1920 +11 1920 10 0 10 0 11 0 10 0 11 0 10 0 11 0 +10 0 11 0 10 0 11 0 10 1921 11 -1921 10 0 11 0 +10 0 11 0 10 0 10 0 11 0 10 0 11 0 10 0 +11 1921 10 -1921 11 0 10 0 11 0 10 0 11 0 10 0 +11 1921 10 -1921 11 0 10 0 10 0 11 0 10 0 11 0 +10 0 11 0 10 0 11 0 10 0 11 0 10 0 11 0 +10 0 11 0 10 0 11 0 10 0 10 0 11 0 10 0 +11 0 10 0 11 0 10 0 11 0 10 0 11 0 10 0 +11 0 10 0 11 0 10 0 11 0 10 0 10 0 11 0 +10 0 11 1921 10 -1921 11 0 10 0 11 0 10 0 11 -1920 +10 1920 11 0 10 0 5223 2502 100 MP stroke +11 0 10 0 11 0 10 0 10 0 11 0 10 0 11 0 +10 0 11 0 10 0 11 0 10 0 11 0 10 0 11 0 +10 0 11 0 10 0 11 0 10 0 10 0 11 0 10 0 +11 0 10 1921 11 -1921 10 0 11 0 10 0 11 0 10 0 +11 0 10 0 11 0 10 0 11 0 10 0 10 0 11 0 +10 0 11 0 10 0 11 0 10 0 11 0 10 0 11 0 +10 0 11 0 10 0 11 0 10 0 11 0 10 0 10 0 +11 0 10 0 11 0 10 0 11 0 10 0 11 0 10 0 +11 0 10 0 11 0 10 0 11 0 10 0 11 0 10 0 +10 0 11 0 10 0 11 0 10 0 11 0 10 0 11 0 +10 0 11 0 10 0 11 0 10 0 11 0 10 0 11 0 +10 0 10 0 11 1921 10 -1921 11 0 10 0 11 0 10 0 +11 0 10 0 11 0 4186 2502 100 MP stroke +10 0 11 0 10 0 11 0 10 0 11 0 10 0 10 0 +11 0 10 0 11 0 10 0 11 0 10 0 11 0 10 0 +11 0 10 0 11 0 10 0 11 0 10 -1920 11 1920 10 0 +10 0 11 0 10 0 11 0 10 0 11 -1920 10 1920 11 0 +10 0 11 1921 10 -1921 11 0 10 0 11 0 10 0 11 0 +10 0 10 0 11 0 10 0 11 0 10 0 11 0 10 0 +11 -1920 10 1920 11 1921 10 -1921 11 0 10 0 11 0 10 0 +11 0 10 0 10 0 11 0 10 0 11 0 10 0 11 0 +10 0 11 0 10 0 11 0 10 0 11 0 10 0 11 0 +10 0 11 0 10 0 10 0 11 0 10 0 11 0 10 0 +11 0 10 0 11 0 10 0 11 0 10 0 11 0 10 0 +11 0 10 0 11 0 10 0 10 0 11 0 10 0 11 0 +10 0 11 0 10 0 3150 2502 100 MP stroke +11 0 10 0 11 0 10 0 11 0 10 0 11 0 10 0 +11 0 10 0 10 0 11 0 10 0 11 0 10 0 11 0 +10 0 11 0 10 0 11 0 10 0 11 0 10 0 11 0 +10 0 11 0 10 0 10 0 11 0 10 0 11 0 10 0 +11 0 10 0 11 0 10 0 11 0 10 0 11 0 10 0 +11 0 10 0 11 0 10 0 10 0 11 0 10 0 11 0 +10 0 11 0 10 0 11 0 10 0 11 0 10 0 11 0 +10 0 11 0 10 0 11 0 10 0 10 0 11 0 10 0 +11 0 10 0 11 0 10 0 11 0 10 0 11 0 10 0 +11 0 10 0 11 0 10 0 11 0 10 0 10 0 11 0 +10 0 11 0 10 0 11 0 10 0 11 0 10 0 11 0 +10 0 11 0 10 0 11 0 10 0 11 0 10 0 10 0 +11 0 10 0 11 0 2113 2502 100 MP stroke +10 0 11 0 10 0 11 0 10 0 11 0 10 0 11 0 +10 0 11 -1920 10 1920 11 0 10 0 10 0 11 0 10 0 +11 0 10 0 11 0 10 0 11 0 10 0 11 0 10 0 +11 0 10 0 11 0 10 0 11 0 10 0 10 0 11 0 +10 0 11 0 10 0 11 0 10 0 11 0 10 0 11 0 +10 0 11 0 10 0 11 0 10 0 11 0 10 0 10 0 +11 0 10 0 11 0 10 0 11 0 10 0 11 0 10 0 +11 0 10 0 11 0 10 0 11 0 10 0 11 0 10 0 +10 0 11 0 10 0 11 0 10 0 11 0 10 0 11 0 +10 0 11 0 10 0 11 0 10 0 11 0 10 0 11 1921 +10 -1921 10 -1920 11 1920 10 0 11 0 10 0 11 0 10 0 +11 0 10 0 11 0 10 0 11 0 10 -1920 11 1920 10 0 +11 0 10 0 10 0 1077 2502 100 MP stroke +11 0 10 0 11 0 10 0 11 0 10 0 11 0 10 0 +11 0 10 1921 11 -1921 10 0 11 -1920 10 1920 11 0 10 0 +909 2502 17 MP stroke +gr + +c8 + +end %%Color Dict + +eplot +%%EndObject + +epage +end + +showpage + +%%Trailer +%%EOF diff --git a/Notes/Figs/l1eqexample_signal.pdf b/Notes/Figs/l1eqexample_signal.pdf Binary files differnew file mode 100644 index 0000000..d3480fa --- /dev/null +++ b/Notes/Figs/l1eqexample_signal.pdf diff --git a/Notes/Figs/phantom_backproj.eps b/Notes/Figs/phantom_backproj.eps new file mode 100644 index 0000000..df35a4f --- /dev/null +++ b/Notes/Figs/phantom_backproj.eps @@ -0,0 +1,1861 @@ +%!PS-Adobe-2.0 EPSF-1.2 +%%Creator: MATLAB, The Mathworks, Inc. +%%Title: ./Notes/Figs/phantom_backproj.eps +%%CreationDate: 11/21/2005 14:01:36 +%%DocumentNeededFonts: Helvetica +%%DocumentProcessColors: Cyan Magenta Yellow Black +%%Pages: 1 +%%BoundingBox: 137 227 496 583 +%%EndComments + +%%BeginProlog +% MathWorks dictionary +/MathWorks 160 dict begin +% definition operators +/bdef {bind def} bind def +/ldef {load def} bind def +/xdef {exch def} bdef +/xstore {exch store} bdef +% operator abbreviations +/c /clip ldef +/cc /concat ldef +/cp /closepath ldef +/gr /grestore ldef +/gs /gsave ldef +/mt /moveto ldef +/np /newpath ldef +/cm /currentmatrix ldef +/sm /setmatrix ldef +/rm /rmoveto ldef +/rl /rlineto ldef +/s {show newpath} bdef +/sc {setcmykcolor} bdef +/sr /setrgbcolor ldef +/sg /setgray ldef +/w /setlinewidth ldef +/j /setlinejoin ldef +/cap /setlinecap ldef +/rc {rectclip} bdef +/rf {rectfill} bdef +% page state control +/pgsv () def +/bpage {/pgsv save def} bdef +/epage {pgsv restore} bdef +/bplot /gsave ldef +/eplot {stroke grestore} bdef +% orientation switch +/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def +% coordinate system mappings +/dpi2point 0 def +% font control +/FontSize 0 def +/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0] + makefont setfont} bdef +/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse + exch dup 3 1 roll findfont dup length dict begin + { 1 index /FID ne {def}{pop pop} ifelse } forall + /Encoding exch def currentdict end definefont pop} bdef +/isroman {findfont /CharStrings get /Agrave known} bdef +/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse + exch FMS} bdef +/csm {1 dpi2point div -1 dpi2point div scale neg translate + dup landscapeMode eq {pop -90 rotate} + {rotateMode eq {90 rotate} if} ifelse} bdef +% line types: solid, dotted, dashed, dotdash +/SO { [] 0 setdash } bdef +/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef +/DA { [6 dpi2point mul] 0 setdash } bdef +/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 + dpi2point mul] 0 setdash } bdef +% macros for lines and objects +/L {lineto stroke} bdef +/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef +/AP {{rlineto} repeat} bdef +/PDlw -1 def +/W {/PDlw currentlinewidth def setlinewidth} def +/PP {closepath eofill} bdef +/DP {closepath stroke} bdef +/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto + neg 0 exch rlineto closepath} bdef +/FR {MR stroke} bdef +/PR {MR fill} bdef +/L1i {{currentfile picstr readhexstring pop} image} bdef +/tMatrix matrix def +/MakeOval {newpath tMatrix currentmatrix pop translate scale +0 0 1 0 360 arc tMatrix setmatrix} bdef +/FO {MakeOval stroke} bdef +/PO {MakeOval fill} bdef +/PD {currentlinewidth 2 div 0 360 arc fill + PDlw -1 eq not {PDlw w /PDlw -1 def} if} def +/FA {newpath tMatrix currentmatrix pop translate scale + 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef +/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale + 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef +/FAn {newpath tMatrix currentmatrix pop translate scale + 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef +/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale + 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef +/vradius 0 def /hradius 0 def /lry 0 def +/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def +/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef + /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly + vradius add translate hradius vradius scale 0 0 1 180 270 arc + tMatrix setmatrix lrx hradius sub uly vradius add translate + hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix + lrx hradius sub lry vradius sub translate hradius vradius scale + 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub + translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix + closepath} bdef +/FRR {MRR stroke } bdef +/PRR {MRR fill } bdef +/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def + newpath tMatrix currentmatrix pop ulx rad add uly rad add translate + rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad + sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix + closepath} bdef +/FlrRR {MlrRR stroke } bdef +/PlrRR {MlrRR fill } bdef +/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def + newpath tMatrix currentmatrix pop ulx rad add uly rad add translate + rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad + sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix + closepath} bdef +/FtbRR {MtbRR stroke } bdef +/PtbRR {MtbRR fill } bdef +/stri 6 array def /dtri 6 array def +/smat 6 array def /dmat 6 array def +/tmat1 6 array def /tmat2 6 array def /dif 3 array def +/asub {/ind2 exch def /ind1 exch def dup dup + ind1 get exch ind2 get sub exch } bdef +/tri_to_matrix { + 2 0 asub 3 1 asub 4 0 asub 5 1 asub + dup 0 get exch 1 get 7 -1 roll astore } bdef +/compute_transform { + dmat dtri tri_to_matrix tmat1 invertmatrix + smat stri tri_to_matrix tmat2 concatmatrix } bdef +/ds {stri astore pop} bdef +/dt {dtri astore pop} bdef +/db {2 copy /cols xdef /rows xdef mul dup string + currentfile exch readhexstring pop + /bmap xdef pop pop} bdef +/it {gs np dtri aload pop moveto lineto lineto cp c + cols rows 8 compute_transform + {bmap} image gr}bdef +/il {newpath moveto lineto stroke}bdef +currentdict end def +%%EndProlog + +%%BeginSetup +MathWorks begin + +0 cap + +end +%%EndSetup + +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: 137 227 496 583 +MathWorks begin +bpage +%%EndPageSetup + +%%BeginObject: obj1 +bplot + +/dpi2point 12 def +portraitMode 0216 7344 csm + + 1429 340 4312 4278 MR c np +125 dict begin %Colortable dictionary +/c0 { 0.000000 0.000000 0.000000 sr} bdef +/c1 { 1.000000 1.000000 1.000000 sr} bdef +/c2 { 0.900000 0.000000 0.000000 sr} bdef +/c3 { 0.000000 0.820000 0.000000 sr} bdef +/c4 { 0.000000 0.000000 0.800000 sr} bdef +/c5 { 0.910000 0.820000 0.320000 sr} bdef +/c6 { 1.000000 0.260000 0.820000 sr} bdef +/c7 { 0.000000 0.820000 0.820000 sr} bdef +c0 +1 j +1 sg + 0 0 6914 5188 PR +6 w +0 -4228 4228 0 0 4228 1463 388 4 MP +PP +-4228 0 0 -4228 4228 0 0 4228 1463 388 5 MP stroke +gs 1463 388 4229 4229 MR c np +gs np 1464 389 mt 0 4227 rl 4227 0 rl 0 -4227 rl cp c np +[4227 0 0 4227 1464 389] cc +/picstr 256 string def +256 256 8 [256.000000 0 0 256.000000 0 0] L1i +857D75615048484844443C343C3034303840404050616D6D6161595959615D595048444040444444 +546169715D59545048444038342C20242440505950403838343434281C1404182838383424202424 +28282430505D65696954504C3C38344048484844403C383430383C40485054544C40404444383C38 +2C2824282C2C34303434303030303034404038403C383C485054504C44403C303438383C44484C4C +4034383C4C50546165615D5030282C2C282424243038342410000C1824303034383C44545D544828 +24202830343C404854595D61716D61544040403C4040484C595D5D5959596565716D615040403C38 +303430383438444444444850617179897D71695D4C4C444044403C3838343438383C404054697175 +6D655D595D615D5D50483C403C4040445461696959504C48443C38302C28282C2C4859615D44403C +403C34281C100C14282C34241C24242828282C3C5965656D61544C4840383030383C4848443C383C +443840484C54544C48443C343838343C3C3838343028242C2C282C343C4040444438383030383C40 +4C5454504C443C4440383C4044483C383430383C484C505D696561543C30302C2824281C24302824 +0C040C1824303C404044486169615030302C282830383C444C4C545D6D696154403C3C383C3C444C +59595D5D5D616971797569543C3C3C383834343838383C40404048485969717D7D7565594C44443C +3C3C3834343438403C404444546571756D655D54595D5D5048443838383838384C5D6161504C4444 +444440343028282C304C6169614C44444444403024181820303438241C141C202C303444485D6169 +594C48403C3828243044504C3C3838444C4C48544C545048443C383830343C3440504C40342C2418 +18242C38485459483C40342C3030344044505450594C4C50483C383C484C40302828383840444C59 +655D594844383430241C18182434302C1C14101C2C384444484854656D655434302C2C3034404444 +444450546565594C383834343438404450595D54546169717D756954404040383C34343434383838 +384040485465717D79716159504844403C3C3838383430383838383C5059696D655D59505450504C +444038303434343448596161504C44484844443C302C302C344C616969504C48484840342C282C2C +344044342C2828282420303C40505D544C403C343C3C34302C3C4C444444444C4C48404854595054 +48403834343034444C48484840301C1818203444505050544C382C30303438405050595948444850 +504844444448382C30343C3830383C4850594C40403428282C2C282830403C302824202430384448 +4C50596D6D655438303030303C40444848485054656159483434303030343C4048505050545D6169 +71695D503C383438342C30383838383C3C40445054616D79797565595048404038383434342C2C30 +38343838444C5D59544C484044444840404040383434383848546165504C48444444443C34342C2C +3C4C5D69655448484C4C48382C2C34383C4C484034302C2C282C3438343848444C403C40403C3834 +3438484048504C484C4040383C44505D5954483C383C444444444440383434302C34344048504C4C +4848383438404C54595048403C40444C4C5050484044343034383C3C3C3C3C4C444434343C383430 +302C30343C4444383430282434444C504C4C596971655440303034383C404448484C505969615448 +34343030343C3C3C40444044444C50595D614C44383434342C2C2830343438384040445059657179 +797565595044403C3430303424242828303434343C48505048443C3C403C40404038383430343434 +4859616154504C484848403C3434302C34485D6D69595054484844443C3C4444404C484038302C28 +242C3034303440404848444C4C50443C3C383C44545448484038343034404C595D5D545059595440 +3C3C38343C444448484444403C404440445959504C5054545048403830383C444C4C5954443C3438 +3C44504C4C4044483C3C34343834342C303030383C4044383C4034343C4048485954616D71614C38 +303438383C40484C4C50545965615944302C2C2C3034343C3C3C3C404044484C5450483834303430 +28242424303030303C3C445059657579696150504C403C383030302C242024282C302C3838484C50 +4C403C3C403C3C403C38342C2C282C304050595D504C484C4844403C38302C2C3C485D7169615450 +4C5048483C444844404C48443428281C202C303434383440484848545450505050483C4C50594C44 +3C303034343C445054595D69696159504434383C445450505050544C44403C4854595D6565595450 +4C403838343430404C545D50483C444C50505054544848443C343838383834242428283440404438 +40403C384444504C5459656D75614C403030343C4044484C504C505061594C402C2824282C303438 +3C3C3C4044444450504C48343428302C28242024282C2C30383C4048505465695450444038383030 +2828282020242830343430383848504C4C403C3C3838383C403C38302C2828243848505444484444 +403C3C38342C2C2C3C48616D6D695D5D545044443C44484040404038342C201C2834383834342C40 +404C54595D5454504C444050595950483C4044443C4040445461716D655D594C484C4C54595D5454 +54545D615D54504C505D5D5D696D6150403C40404448404050595959504044484C50545D5954483C +3C2838383C3C3C3020242C34343838383C40403440444C545D616D6D71654C40303030383C404448 +48484848544C4438202824282C34383C3838383C4044445050504434343030303028242020242428 +30303838404854543C38383434342C28282420242024242834302C3838445050503C44403C383438 +3C3834303028282438404C54443C3C38383834342C2828243C445D716D7161594C4844383C444440 +3C34343834302424343838383C3428343C50615D695D594C383C3C40484C504C5059504C4C4C4C54 +69757169655954595D5D595D5D65657171656961616165615D595961697175654C48484C50505954 +5459504C403C383448595D695D614C38302834403C3C403C28282C34342C2C34383C40383844484C +5965717171614840282C2C34383C40403C3C3C4454483C342428282C2C3034383834384444484450 +50504038342C2C302820241C20202428282C38343438383C30303030343028242420181818202428 +2C2C3034343C4848484044404038383438383C34342C28243840484C403834343438342C2C282028 +3C4054656D615048403C3830303C3C3C403438383830242C383C403C38282C2C4059696961595444 +383C3434384448545959595D545965696D797575716D6D696D71757169717979797D716D797D7571 +6D6D6D7171717569615D54545D59595D594C4838343038344050546169695440282C2C3C4048443C +3028303434302C383834382C30383C40485461696559443C2C242C30343C403C3C383C404C443C38 +2428283030343434343C3C44444C444C48483830302C282824201C18181820242428303434303030 +2C2C34303030282020201C1814181C2424242C2C303C44404440403C3834302C3034383838302828 +38404C50403834302C3030302C282828383C4C595D5944382C24241C28383C403C30343838303038 +383C3C3C38302C34485961655D54483C34343434343C4C545054595961717171696975757D858185 +898D918D8D91898D8D8991919195918D8585817975716969696D6D61595954595D54403834343030 +3844505D65615944302C343C444444403C303034302C2834383434281C20242C384454595950403C +2C2C2C343838383434383C4050483C3428282C34343834302C34383C404448483C40382C28242020 +20181814181C20202028303034342C30383440403C3C3C343434302C2424242C2C3030383C444C4C +5050484440403C38383C3C40403C343448545D655048444040444840343430384444545D5D594438 +2C282C2C383C44484438383C48403C484C4C4C504040444C54656D7165594C4C44404444404C5D61 +65656D7575797D7D797D819199A5BAB6B6B6B2BAB6B6B6B2B6B6B6BABEB6BAB6BABAA599917D7D79 +79797575756D69696965504444403C4044485965716D655448444444545459544C3C3C443830303C +403C38382C2C282C3844545D5D5448443C34383C48504C48444848506159504434343C40403C3C38 +383C4444485054544C4C4038382C2828282020242C30343034383C4040443838384048484444443C +3C403830302C2C3434343C444048505454544C483C403C3C3840444040403C384859616959504C4C +484C48443C34303C44444C545959443C3434283040444C54443834404040444C4C5054504C444454 +545D696D655D5D594C4C4C5054595961697D89858185857D7D95A1B2C6D2DAD2CED2D6D6CECEC6BA +BACACED2DADAD6D2D2DAD2C6B2A1957D7D81818185897D6D6961615950484444505959656D695D54 +54444850595D59544C443C403C30303C4C484040302C34343C405450544C444440383C4450545454 +54505054655D5444343C4040404440383C4044404C505959544C443C403830303028282C30383C38 +38444444484C403838444C4C4C4C4C444040403C38343838383040484C505461615D504C44403C3C +3C40444440403C3C4C5D69715D594C48484848403830303840485059545448403834303C44484C54 +444038404048504C5459544C443C484C484859616161615D5D54545D615D616D7D919D999DA5A1A1 +A9B2BEBECEDAE2EAEEEEEEE2DEDACACACACADAE2E2EEF2EEEAE2DACEBEBAB2A9A1A1A19D999D9585 +756965655D544C54545D5D5D615948484C484048505D615D5050483C3C3038404C4844443C303438 +40485050544C48403C3438404C545050505059596D65594838384040444440404040444850505D61 +61544C48443C2C343434343438403C4040484C50504C48383C484C59504C4C4C4440444040403C38 +3C38444C505454616561505048484044404044484444403C4C5D6569594C4444484840342C2C243C +444C505050544C403C343840484C54544440383C4059615959544C4440404440403C48596165595D +595D69716D6D718191A1C6CABEBABABEC2CACECECED6E6EEFAFAFAEEE2DAD6D2D2D6DEE6F2FAFFFA +EEE6D6CACECECAC2BEBAB6BACAC6A59589797571756554505454616159483C40444444444854615D +5D6154403830383C4C5048484038383C3C48504C4C4C4C443C2C3438404850504C484C5465615948 +383C40404848444448484C4C505061656154504C4840343838383C3C3C403C444C4C4C5059504840 +40485054595950504848444040404440404048545959596165695459504C444444484C50504C4440 +4C5961695448403C3C38343434303040444C4C5050504C3C3C3434444C545D504444443C4C61655D +5454443C383C44404448485D657169696D71797575858999A9C6D6D2CECECACED6D6DADAD6DEEAFA +FFFAF2E2DEE2E6E2E2E6E2DEE6F6FFFFFFEADED6DADAD6D6CECACECACED6CAB2A1918D7D75756D65 +61656D615D4848444444403C404C5D596165614C383C3C3C4859504C4434343C3C48484848444C44 +4034383C4040404440404450655D54483C404C4C504C4848484C5054595465616154595450483C3C +3C40403C3C4044485054595954504C40444C50545D595959504844444440444440444C545D595D65 +6D696159544C4C4C4C484C504C4844404C545D5D4840383838383430303034444C4C4844484C4840 +38303844484C544C44444840546161595948383840484C4C50505465717D797981858D8D959DA1AE +BAC2CAD6DAD6D2D6DADADEDEE2E6EEF2F6F2EAE2E2E2E6E6E6E6DEE2E6EAF6F6F6EEE6E2DEDEDEDA +D6D2D6DAD6CAC6BEB6A9A5998D898179717179716554505050504C4440404C5D5D65615440403C3C +44504C48443C30383C4448404044484C483C383C3C3C40403C384044595950483C44484C504C4C50 +505450595D5D6969655954595048443C40403C403C4044505959595D54504C444C50595D5D5D5D5D +59504C444448484040485059615D6569716D69615D595454504C484C504844384450505440444040 +403C383038383C48485044404848484038343C48485050484C484840545D6165594C4048505D5D59 +5D616165717D89919DA5B6B6B2B2B6BABEC2D2E2EAEADEDAD6DEE6E2E2E6E2E2E6E6E6EAE6E2E2DE +DEE2E2E6EAE6E6E6E2E2E6E2E2E6DEDADADEEAEADED2C6C2C2BEBAB6B6B29D958981757169656161 +616161544C48505D69655D543C404044404C5048483C34383C44404038404C4C504440403C404444 +44404040504C484438404850504C5054595D59616165696D65615D5D5450443C3C44404040484C59 +59595D5D5959504C5454596161615D5959544C4C48484C48444C5059655D656D7175716561595454 +4C4C4C48444038344448505444444448403C38383834405048504440484C484038383C444C595950 +50504C50506169695D504C5459616561656569697991A1B2CACECAC6C2BEBEBECACED6EAEEF2E6E2 +E2E6E6E2DEDADAD2C6CECED6D6D6DADEDEDAD6D6D6D2D2CAD2DADADEE2E6E6E6E6E6F2EEE6D6D2CE +C6C6C6C6C6C6CAC2A99D8D796969696969696561595454616D6961504C4448484854544C443C3834 +3C444440383C4C4C5444404440444044484444405048444034384044484C505459595965696D716D +6961596559504840404444444448505454595D5D5D5954544C485054595950504848404040444440 +38404C505D5954656165615950484844403C383430302C2838404448403C3C3C3834302C2C2C3440 +3C3C34343C44403C3438444C50594C484844444844505D6150484C4C5459595D696569697D9DB2D6 +D6D2CAC6BEBABAC2C6CED2DEE2EAE6DEDEDADAD6CECAC2AEA1A5B2B6C2C2BEBABABABEC2BAB2A5A5 +AEC2C6CED6DADADEDEEAEAE2DAD2D2CEC6C2C2C2C6C6CACECEA999796D6D696D65615D5954504C54 +655D5040443C3C40444854504C44383438383C342C303C40443834343438383C3838383C44403C34 +282C3034383C4448484C4C505961655D6554595950483C343C3C403C3C3C44444C5054595050484C +4C48505050544C48484840404044403C38404C5059594C50505954504840403834343434302C2420 +303C40483C3C3834302C2C282C2C343C3C3C38343C44484438485054545948444038384040506161 +4C484848505D6575756D75818DB6D2DEDED6CEC2BEBEBACACECED2CADEE6E6DEDADAC6B6B2A5A199 +999599A1A9B2B2AEAEB2AEA9A19995999DA1A1AEB6C6DADADEE6E6DACAD2D6D6D2C2C2C2C2CACED6 +D6CAB289817971797D6D6154504C50506161503C3C303438404454545450483840403C342C344040 +3C3C34343030303434343434443C382C20242C303838383C3C44444850545950504C59594C483C34 +38383C3C383C4040444850504C4C4448484448505050504C48443840404044403C44444C50484044 +48484C4440343438383434302C282420303C4040383C3C38302C2C2C3030404444443C38404C4C48 +44505050504C3C3C3030404444505D5950545059616D757975798DA5B2CED6E2E6D6CEC6BEC2C6CE +CAC6C6C6CED6CECAC6BEAEA99D919591898D89919DA1A5A5A5A5A19D95898D8D91918D99A5AEBAC6 +CED2D6CEC2C6CACED2CECAC2C6CACEDEDACECAAEA18D7D7D817D71655D545954595D4C403C382C2C +38384C505050504044444438343C48484848383C34303030343434344040382C1C242830303C3C3C +3C383840444C4C4844444850484440383C403C3C38343C44484C4C4C4C4440484040444C4C50504C +44403C3C444044403840444844382C2C383C40383C3434343830302C2C28281C3038444C4044403C +3C3834303838444048443C3840484C4C44505050503C302C2C384444444C5D59696565696975817D +8999B2BEC6C6D6DEE2D6CEC2B6C2C2C2BEBAB6A9A5B2BABEB6A9A599918D898989817D81859999A1 +A19999898181858D8D89898D95A1A9B6C2BAB2A5A5BABAC2CAC6CABAC2CAD2DED6CEC2C2BAB6A191 +85857D6D6D656D69595D48403C3C3428282C3C50504C4C404844443C383C444C484C404038343438 +38383C3C4840382C1C24282C3030343C3838383C3844403C2C303C4444403C343C3C3C3C34383C40 +484C4C4848403C40403C40484C5054504848403C3C3C3C34343C4040382C201C3034403438343434 +3434342C30282C2C3C4450594C4C4C4C40383838343444404840403840484C44444C4C4C48383028 +2C3C48505059616575716D6975898D99B6BEC6CACEC6CAD2DACEC2BAB6BEBAB6A9A1999999A1B2B2 +AEA191898D8D89817D7D797D7D8995959591897D7D79818181898D898591A1AEB6B6A599999DA1AE +BABEC2BABABECAD2CAC2C2CACACAC6BAA19191796D7175756561595048403828283038484C484840 +4448403C3840444C484C3C3C3C38343C44444848594C44382C2C2830303434383838343834443834 +20242C3C403C383030383838383C40444C504C48443C3C3C34403C485054545048443C3C383C342C +282C343C30241C1C2C303834343838383C3C3838343834304448545D54504C4C403C3C3C38384440 +48484038384044404448484C4434302C3C505D5D615D5D6D7975757D91959DBAC2CACECEC2B2B6CA +CACEC2BAAEA9A19D958D8D9595999DA19D958D8D898585817D797579757D89898985797575757D7D +81858185898D959DA5A1999591919199A1A5AEB2BABECAC6C2B2AEC2CECECEC6C2A5999581797979 +6D595D5D59544C382C303444484444403C403C3838444C4C484C3C3C3C38383C44484C505D504844 +303838383C383C3C3C3C383838403830242028343C302824282C343434383C444C50504C443C3C34 +3840404450595448443C3434343428202428343C302820203038443C3C403C403C3C3C3C3C3C3834 +444C59615450504C443C3C38384048484C40383434403C3C4040444C4440403C505D656169595971 +7579818D99AEBAC2CACECEC6BEB6BABEBEC6B69D959599918D898591918D89918D8D898585858181 +7D757175757979817D7579757571757D8181818181858D8D958D8D9191899191959D99999DB2C2BA +B6B2B2BAC2CED2D2CAC2B69D91817D796D595465615D594C3C4040444C443C3C34383C34383C4450 +4C5044383838383C44484C505D594C44383C403C3C3C4040444040404048403828242C343C302820 +1C242C2C303038404450544C40404034403C40404C4C50484030302C282C24242830383C3434302C +383C44403C4440403C3C403C383C3C3C44505D695950484840403C3C38444C48483C34302C302C40 +484C505950484048545D6161615D596D798591A1B6BEC6CECECEC6C2C2BAAEA9AEA59D958D8D8989 +818185858585817D8185898585818179796D7171757D7175756D797571717179797D7D8181858581 +7D818985858985858D8D9191919DA1A9A1A5B6BEC2C6D2D6D2CAC6BAA19589796D59545D5D595454 +4440484C595048403828302C3038404C5054483C3C3C3C3840444C54655950443C403C3C3C403C3C +404044404448443C303438383C382C2420202824282C3040444C48483C403C4038383C3C48484844 +383034343034342C343C3C443C34302C344044443C443C3C40403C3C383838384454616959504C48 +44443C4034404C48443028202030344854545954484040505459596161656D75859DA9BEC2C2CAD2 +CEC6BEBABAAEA59591959189898585817D7D7D7D79757175797D8585817D817D7575757175716D65 +656D6D71717575797D817D7D81817979757575797D81858585898989898D918D8D9DA5B2B6BECAD6 +D6D2CAC6C2AEA1897969615D595454504C4040485454504C44303020242C384C505044343C3C403C +40444C54655D5444383C3C3C3C3C4440403C44404C48483C30343840443C38302830302C30343038 +44484844383C38383838343C404C4C4C48403C3C3C3C38383C4444403C3434303444484844443C40 +3C404040403C3C384C5961695954504C4C48403830404444382C242424303C4C5050595044444454 +595D656D6D79757D9DC2CEC6CACECACAC2BEBAB2AEA599858189818985858181817D7979716D716D +6D797D898985857D797575797171696161656D6D797575797D8581858579796D717171717D7D8185 +898589858581857D81919DA5B2BABEC6CED2D6CECAD2C6A18175756D655D5954544444444C594C4C +48383028282830404C48443034404448484C50546561594C3C3C40404040443C403C4444504C4C38 +3438383C4044443C343838383C3C40484C4C4840383438383C3C3C40484C4C4C50444444443C3838 +444444403C403430304048504444403C4040403C383C3C3C4C5D656959545450504034282830343C +383028242024384850545D5048404859616D717575798199BED2D6CECABEC2C2BEBEB2A595918581 +75797D85858181857D79756D696D716D696D79818985817D7975716D6D656161615D616969717979 +7D8181857D756D696D716D6971797D8589858181817D756D7D7D898DA1B2BEC2C6C6C2CAD2DAD6C2 +9981797571696961594C40484C59505048342824282C34404438342828303C484C4C505465655D4C +3C403C383C4040403C404444544C44383838403C4044444438383C4044444850504C4C444038383C +38383C444450545454504C484844443C4848483C40403C343440444C44404440403C3C38383C3838 +4859656554504C483830241C20303840382C24201C24384C5459594C44485D6971717975818D9DB2 +C2CACEC6BEC6C6C2BEB2958D898581797571757D85858579756D6565696569696569717D81858181 +79757169655D6161615D5961697175797D81817D796D6965696D6569696D7579818D89857D756D71 +75797D818995B2C2C6CACAC2CAD2CEC6B29D8D7D7171716D695D48444C5954504C342420242C3440 +483C30201C202C3440444C50656559483C3C403C383C3C4040444048504C44383840444040484848 +40444448484C505454545044403C3838403C4040404C545959505054544C4C4C5454544844404038 +383C484C4844443C3C3C38343430343848545D6548444038342C201C24383840382C28201C243C50 +5454594C4C596D71757D85899599AEB6C2CAC6CACEC6BEBAB299898181817D79756D797D85857575 +6D69656965656569656569757D8581817D71695D5D656565656161595D6971798181817571696569 +696565696D6D6D757D7D85857D79697171757979818999B6BEC2CACECACACEC6B6AE9991857D7975 +6D6D59484C545450503C242028303440483C38241C1C282C303C4044615D544838383434383C3C3C +3C44444C504C403C3C4444484C545454504C4C545454545959544C4040403C404444404444485054 +59545454545450595D59545050504C444440484C4C48403C38342C2C2828282C444C54594C484038 +3028241C24343840382C2420182844545D5954505469757D7D858D9199A9BAC2C2C6CACECEC2BAAE +9D8D8179797D7D79796D717D818175716561656569695D616165656979818989796D655D5D616569 +69615D5959656D7985897D7565616561615D6969696D696D79798581796D69717175717179818D9D +B2BEC2CED2CACAC6C6BAAE998D89817979756954505459595044281C28283440483C38281C20242C +343C444859504C48302C2C2C302C30383C40484C50484444444C545454595D615D50545454545459 +5454484444404444484844404048545959595454545454615D5450504C505048444848504C484038 +38342C2C28242024384C59614C4838342824241C28343C40342C201C1828445465695D545D717579 +7D959599AEBEC2C2BECACACEC6BAA1958D857D79757D79757575717979796D616561656161655D61 +65656965717D85857D6D5D595D5D656969615459545D6D7D8585796D61656165615D656569696969 +69717D79756D6D6D7171716D7579858D99A5BACAD2CECEC2C6C2BEAE9991917975716D5D54596961 +54442C1C2028343C444038281C2020242C34444C5D544C3C2824282C2C2C30343840484C50484844 +485050505954595D61545454545459595D544840444448484C484848484850595961595959545059 +544C4444444448403C444854504C48403C38343430282828404C545D48403C302824242028343840 +3830201C1C34546575715450616D7581999D9DB2B6BEC6C2BEC2C6CABEA1958D857D757971797975 +75716D71796D65656561656161655D5D656561656D7981857D695D595D61656969615D59545D657D +85817965616165655D5D65616969696D696971756D696D6D7171716D75717D859195A5BECACAC6C2 +CACAC2BAB2999D957D716D5D50546D7165543420202838404840382C202420242C383C4859544C44 +2C2C2C34343438384048484C54484438404848484C4C50595D54595959595D595950484848484C4C +4C4C504C4C484C595D5D5D5D59595450483C3C38403C3C3C3844484C544C4C404040403C38383430 +4044505D50483C302C242820343C3C3C302C2828304C5D697165485969798995999DB6BABAC2BEB6 +BABEC2BEAE9D9185817975757175757979756D696D696D65616165655D616161616565616975797D +75695D59616569696965615D545D69757D7971655D61616161616161696969696D71696965696D75 +716D6D6D7175758185919DAEBEC2C2BEBEC6C6BEBAB69995918979655948616D695D4C342C303438 +44444038202424282C38444C595048443434383C3C404040404848504C4844343C4040443C40444C +54595959595D5D59594C484C4C504C4C4C484C484844444C5459595D5959504C403C3C3834343834 +343844484C444C484C4848403C3430283C4C5465544C4038302C2C2C3C3C4440383838343C4C5965 +6D614C6171858995A5B2BAB6BEBAB6B6B6AEA9A9A19185817D7975717171797D75716D6159656969 +616161616161655D5D6569656965716D6D6D65615D656969656561595D616D6D6D7161656165615D +5D65616565656569716D65595D69697175716D6D6D71757D818591A1A9A9B2BEBEBEC2C2BABAAEA1 +95858171614C5D6965594C3C383C4040444840402C2C2C30343C485061544C402C34383C40444448 +484C444844403830343838383C404048505459595D595450484044484848484C3C40404040403C44 +4C59595959595048403C38343834343028304048595054504C4444403C3038384454616554504440 +383434384848504C483C3C3444505D6969545D757D8191A5AEB2B6B6BEBAB2B2A99999A199918985 +7D757175717575757569655D5465696D656161615D6161656169656D6961615D6571696961656D69 +6969615961656D65616161656961655D6161616165696969756D65545D61656D6D6D71696D6D7179 +81859199A1999DB2BABEC2C2BAB2AEA9A58D817D715D5465695D50443840445054544C4838343438 +3C404850615D54443838303C3C4040484C504C5044403028303838403840444850545D5D5959544C +443840403C3C403C30343C3C383830404450595954504C403C403C3434303030303850545D544C4C +4844403C38383C384C616D6D544C44403C3C38404C4C544C4440444454595D6D6D6971797D859DA5 +A9B2B6B6BAAEB2A59D9195999591857D79717571717571716D65655D506569716D65695D61656161 +5D69716961595054616D6D6D6969696D6D6565616569696159505961656D655D5D616565656D6D75 +796965505D615D65696971696D716D797D819191999195A1AEBAB6C2BAB6B2A9A599857D7971656D +695D59544448444C5059504C4038403C40444854696D614C38383834383C3C444848505954503830 +303434383C40484048545459595950443C303434383C34303030303434343438404854545048443C +3438343034383C40404454595D50484440403C404444444054656D7159504C443C38344050545954 +4C4C4444545961797975797D8591A5AEB6BABEBEB2A9A59591898991918D85817971717575716D6D +65656561595D69717169696561616561616D6D655D5050505D6971716D716D716D6969696D6D6559 +5050505D616D69615D616565696D6D79756D5D5961615D5D65696971716D6D757D818D918D898D95 +9DB2B2BAC2BABAB2AEA591817D7975757561595448485050595D59504038383C44484C546D6D6554 +3C40403C3C383838404450595954444444403C3C383C403840444C545454443C3430303030303030 +282C2C30302C2C2C3C484C5450403C34303838383C404440404454595D5044443C443C4448484440 +54616971595044443C3C3848595D6159504844505961718175817D7D85A1AEB2BABEC2BAAEA9998D +898981898991898179757975716D6561696569655D59657175716D6965616165696D6961504C5450 +54656D71717171716D6D6D6D6D696154505450505D656965615D6569717175797565595D61655D61 +59616969717571757D858D8985818D9195A1B2BABEC2BEBAB2B2A1857D7D7D717D6D5D5954484C54 +5D655D59483C3C3C4444505471656150404040403C383C343C44505D5950444444484444403C3C34 +383C4450594C483C282828302C2C2C282428242824242C2838444C5448403C3C3C3C3C4040403C40 +403C48504C4C40403C3C404444484444545D615D4848444844443C50595D6959504C485969717579 +757D758191AEB6BAC2BEBAB6AE9D8D85817D7D818D9189857979796D6D655D61656565615959616D +71757169656D696565656159504C504C4C59697575757571717171717165544C5054504C54616161 +65656D6971757975716159596165615D59596169697579757D858D89817D85898D99A9B6BABABEC2 +BAB6AE917D757971757571695D4C4C545D6D6159503C444444444448595D59504040403C3C383434 +3C404C4C504840404440444448444440403C444C594C443424282424242424242424282424242420 +2C445059544844444448444440403C4040343844484C3C40383C3C444848443C44484C504C4C4C48 +4440405461696559544C54717975716D6D79818DAEBABAC2BABABAB6A19189817979797D89919189 +8179757161615D61696965615D5D5D697175716D65696D696D615454545054505454657175797575 +757175716D6154505054505050546169696D6D6D71797D756D615D5D616565615D595D616D71757D +85898D8981797D81859199A9BABABABEC2BABAAE8D7D7969696D7179715950595D69696154444044 +484C4C4850484440383C4040383434303C384C48483C38444440444448484C48484448595D50442C +20242424242824242C2C28242024282C3444595D544848484C4C44403C3C34383834344444484040 +3C3C3C403C38383038444C594C4C4840444444595D656150545D6D7571716961758995AEC2BEBEBE +BABAB2A1958D857D7575757585919591817971656161616569716D6961615D656D71756D6D6D716D +695D5459595454545954616D7581797171757D71695D50545454545954545D65696D7175757D7571 +655D616169696D65615D5D5D616D75798991898579797D7D85899599A5B6BABEC2C2C2C2AE958571 +5D697175796D61595465655D5944444440484C4C594840342830303434343434383C44444438383C +3C38404044484C504C484C59615D48382C2824202428282C302C2C2C2C30383838485D5954444C50 +5048483C3434343434302C3C4044403C38303830343434344048545D5048403C3C3C405459615D59 +616169716D6D5D698995B6C6CAC2C2C2BEAEA1958D85817575757975819195898175696565616169 +6D717169656161616D7579797571716D5D59595D59595459545D5D65757D7D797979797165595954 +545459595959595D6D6D75797D81797165616165656D6D6965595D6165657179858D8D81797D797D +7D89899599A5B2C2C6C6C2CAC6B68D85695D6D6D716965615D5D615954403C3C3C404C5059504438 +2C2C2828282C2830383C444440303438383838383C484850505048595D614C3C3C38342C28282C30 +38343438383C3C3C3C48595D59505048504844383430302C2C2C2C3C40443C303430303030343434 +404C54615448403C3C3840545461616159545D656165657991B6CECECAC2CAC2B6A5998D89817D79 +75757975858D8D89796D6565696165696D7171696965616169757979797971655D5D5D6161615D5D +5D59616571797D7979797971655D5959595D5D5D5D595D5D65717981817D796D65616169656D6D6D +69615D656561697181858981797D7D7D8185858D959DA9BAC6CEC6CACECEB28D79656561655D5459 +615D5D545440383C38404854615048382C282C242428242C283840403C3430303034303438444854 +4C54545D615D4C40403C3C383834343848443C383C383840444C595954504C4C4840383830343030 +2C28242C343838302C2C282C303434303C4C54615048403C343440505D695D50484C504C59696D7D +9DC6D6D2C6C6C6BEA99D8D8581817D7975797579798585817169656569656569696D71696565615D +6175798179757161616161616161615D5D6161656D7579797979756D615D5D5D5961615D5D5D6161 +61717981857D796561616161696D6D69696561656561656D798181797D79817D818581858D95A5B2 +C2CACACAD2D2C2997D6D695950504C485059695D504034343840484C6154483828282C2824202424 +2830383830282C30343434303838404C505054595D5D544C443C3C403C3C44484C50484848484444 +444454595954484C4844404038302C2820201C2C383C3430303434383834302C3C48545D50483C3C +3838485D6165544C404448505D69758DB2CADAD2CAC6BEB6A1998D857D817D7D797D7D79797D7D79 +756D69696969696D6D6D6D6D696961616571818179796D6965656565656565616165696969717981 +81797169696561616165616161616565696D7D81858575696561656569696D716D6965656965696D +71757D757D8181818181858189959DA9BEC6CACAD2D6C6AE8971696150484440485061615D483438 +3C3C48505D544838242428302C2C28282C30383830202424282C30383C40484C50505D5D5D594C48 +48484C484C4C504C504C505050544C50544C4C4C4C504C4C504840382C282424242424282C3C3838 +3C3C3C383430302C4048545D4C444034383C50595961504438444C5D65717D99B6D2DAD2CAC6B6A5 +99918979797D7D7D7D7D7975716D7575756D696965696D6D6D7175716D65616569757D797D6D696D +696969696969696565696D696D6D7D8181796D696569656161696565656569696D6D71817D7D756D +6961656D6D717171716D69656965696D6D6D6D71757D858181818181818D99A1AEBACACACED6CEB2 +957971655D4C4034404C5D5959503C343840444C5D5444382428282C303838343434383028242424 +2424242838404850505454505054505954505954545450505454595454504C50545048484C505048 +4440383028242020201C1C28303C403C4440403C342C28283C4854594C443C38383C4C545954443C +344859656D757D9DBAD2DACEC2BEA99D9189817D7979797D7D756D6D61616D75756D6D6D6569696D +717175716D696569716D757971716D6D6971696569696D6961656D6D696D7D858179696969696161 +696D696961696D696D6D75797D79717569616569717171756D6969656969696D6D6961616D757D85 +817D818181859195A1AEBEC2CED6D2B6997D75696559483438405054544C3C38383C444C59544438 +242028303838384038403C3428202020242424242C384044485454544C4C54595454545D595D5954 +615D615954504C504C4C44484C50504C4440342C2824202020181C2C384048404440443C342C2428 +3C4C545D48443C403C385050544C443C445461656D7991A5BED6D2CAC2B2A19189817D7979757979 +75716D6561616971756D6D696569656D717171716D6D696D756D69716D756D6D6D7171696D71696D +69656969717579818179716D656565656D696D6969716D6D6D6D7971756D6D756D69696D6D717175 +716569656969696D6D656161697179797D7D7D7D7D81858D99A5B2C2CACED2BAA18D796D655D5440 +344048545050383C404044485D5048382020243038403C443C48403C2C1C1C24202024242C344044 +4C5059504C485054545454595D65616165615D59545050544C483C3C4450545448403C2C28242020 +2024242C383C484448404038342828283C4C59594448403834384C4854504848595D61617D8D9DAE +C6D2CACAB2A5998985797D7579757571716D6565615D696D75716D69696969696D6D6D716D6D6D71 +6D6D65696D716D6D7175756D6D75716D6D696971757D7979797579756D65696D6D71716D6D71716D +6D7175716D69717171696D6D717171716D696D6965696D6D69655D616569757575797D7D7D7D8189 +8D9DA5B2CAC6CEC2A99989795D5D5D5444444C50484C38383C444844545444382424283038404048 +444C403C3024242020202028283840485459544840404C54595459595D6165656165615D54505048 +403C3840485459544C444434302C302C2828282C3C444C4448483C3C302C2C28384450594C403838 +34384450595454595D615D718591A9B6CACACEC6A99D9589857D797579716D6D6961616161616569 +75756D6969696969696D71717171716D69655D616D71757575717575757171716D7171717D817D79 +797D7D79716D6D6D7171717575716D7171757571656169696D6D71717171716D716D6D6965697171 +696161616565696D7175797D797D81898D95A1A9C6CAC2C2B6A98D816D5D5D59505054594C443C38 +3C3C444C594C4034242C2C30383C484C485444402C282828282C2C2C3440444C5459594C443C4448 +505454545D6165616159504C5050504C443C3C38404C59594C443C3C3C3C403C3C38302C3C44504C +48403C3430342C2430485959403C34302C3848505D61545965616D8591A1B2BAC2CACAB6A5998D85 +81817D79757169615D616161615D5D6971716D6D696969696D6D717175756D71695D615D69717975 +71797979757175757175797D7D817D79757D817D7975757175796D717975716D7579756D61656169 +6D6D7571717175716D6D696969656D71655D5D61616565616571757D7D818585899199A5B6C6C6BE +B6B29D8D81695D5D50505D5D504C4030343840445954483024283430343C444C5054483C2C30343C +383C3838383C444C59594C483C4044485454545050545D614444484C5050504C403C3C38444C5459 +504C48484844404444403C38444C54544444342C2C2C24243C50595D40382C2C2C3C4C54615D505D +69697D95A1A9AEBEBEC2BAA99D9589857D81857D716961595D615D615D5D5D656D6D716969696D69 +6D6D757575756D69615D615D65717579797D797D797979757575798181857D757579818181797575 +75797975797579757975716561656161696D71757579717571716D656569696D655D5D5D61616561 +5D696D75818585858989959DA9B6BEBABAAEA99D91796565594C5961544C4430302C3C405D594C38 +24242C30303C484C595D4C48383C4044403C444444444C50595450483C40444450545450504C4844 +38343C40444C484440403C343C48505D5959544C484C4C4C48483C38445461614C402C2C20242C34 +444C505438302C2C2C3C4C595D50505D6D7589A5A5A9B2BEB2B2A9A5998981817D817D756D615959 +5D615D61595D59656D717169656D6D696D717575757569655D5D615D616D757D7D7D7D797D757D75 +79797981817D7979797579818179757975797579797979797D756D61616561616169757175757571 +6D716D656569696961595959615D61615D5D6571797D858185858999A1A5AEAEBEAEA5A1A1857169 +594C505D595040303030303C54504C40342C282430304854696559483C3C4444484848444C505959 +5D504C3C38404444484C4C48404034383438383C40383C38383C3834405059656161595954545450 +50504C404C5D6561443C302C2830343040505954403430302C445454594C50617585A5A9A5AEB6B6 +A9A599998D858181817979716161595D6165616159615D616971756D6D716D6D7171757975756965 +5D6161616169757D857D817D7D797979797D818181797979797979817D817D797979797979817D81 +7D756D616565615D656575757979757971717569696D6D6961595D595D616565615D656571797D85 +8181858D9599A1A9B6B6A9A1A5A17D715D4C4C595459483034343840545950443438342C30384850 +696D6550444C504C4C4C505054545D6165595040383C40403C4038403C3C3834343434383C302824 +2C2C2C304054656969615D5D59595D59504C4C4450615D54403C343844403C3848484C503C343030 +38484C5954485069758DAEA5A9AEB6A99D91918D8981857D797971615D5D595D6561616165615D5D +656D757175716D7171757575756D6565616161656569758181857D7D7D797981817D7D7D7579797D +7D7979757D7D7D817D7975797979817D7D7569656565616161656D7579797979757175716D6D6965 +59595D615D6161655D5D5D61657179797D817D89898D9199A9B2A9A5A1A58571655044545D504C3C +3834383C504C484838404448403C444C61656554444C4C505459545459595D656965594034303030 +282C343C3838343030343038302C2420282C3034404C65717165655D5D545D595954504C505D5454 +404048444440403C4C5454503C343034384C50544C44596D75A1AEA9A9B6AE9D9189898981818179 +797169615D59595D65615D616965615D656D717975756D71757975756D696D65655D61696D6D757D +89897D817D7979818581797975797D7D7979757579798185817D75797D7D81857D756D6D69656165 +6169656D75797D7975717571717169615D6161655D5D65655D59596165697179797D7D818585898D +99A9B2A9A5A599716959404C5454503C3834383C545454504044444C5050484C5D5D61504C505054 +595950595961616D6D654C4038302C2C20282C34383034302C303434302420242C302C30404C6165 +6D696561655D5D5D595450484C5454545050504C4844403C44545459403434343C504C54484C6169 +7DA5AEA9B2B6A595897D8181817D75716D6965615D59595D616565656565615D5D65717D7D757175 +7D79756D697569656965696D6D6D717D858985817D797D8189857D797579797979757975757D8589 +817D79797D81858179716D6D6D6D65656165716971797D817D757579797161595D5D656561656561 +5D5D5D616569696D6D75797D817D7D8991A1B2AEA9A59D7965614848544C5040383C38445D595948 +40444850545D59595D5D5D50485050595959595D5D61656961614C40342C302C282028303430302C +302C30302C28242C2C2C2C343C485D6569656161615D545954504C4848545D65615450504840383C +48545D543C3C3838444C50544C59656D91AEAEB2B6AE99897D757D8181756D69696965615D59595D +616565656969615D59657179817D757D7D79756D6D71716D69696D716D716D75818989857D7D7D81 +858179757979797D797975797579818585817D7D8185857D71696D6D6D6D69656D696D7171797D81 +8179797D796D61595D616565616165615D595D61616569696969717D7D79717D8999AEB2AEA9A98D +69615950595050443C3C4040595D594C403C4450595D5D696D65594C484C505459545959595D6169 +655D483C382C302C2C24282C30302C30282C3434302828303030343C404454596165616159504C4C +4C4848504C616569655D544844403C384C5954544440403C485454615D65697999B2B2B6B2A99181 +7175797D7971655D616561615D595D5D61616169696961615961717D8581817D7D796D717171716D +696D717171716D6D7D898D85817D8181817D79797D7D79797979797979797D8181817D7D85898179 +6D696D6D6D716D65696D717575757D81818181817D7161595D5D6565656161615D5D5D5D65616161 +5D617175757975718191A9B2B6AEA9957165655D6159594C3C4040445959594C3C404848505D616D +6D69614C504C484848484C545D5D615D595040403C3434303028283034342C2830383C3828282C2C +3030343C404450595D5D5D54504844404040445054656969695D4C484444403C4C4C595D4C44403C +4C545D6D61697595AEBAB6B6A99989796D717579756961615D615D5D5D5D595D616565696D656565 +5D61717981858581796D7179797575756D6D7171716D716D7D898D898585857D7D7579757D7D7979 +797579797579797D7D858181858581796D716D6D6D6D6D69717175797D75717D81818581796D615D +656565696561655D5D5D5D5D5D5D615D6161697175717171798999A9B2AEB2A5917169616D5D5450 +4040445061595050404448484C546571716D6554504440403C40444C50595D5D594C444038343030 +2C2C282C383C383044443C342828302C3030383C4040445050545048444038383844545950546165 +6154504C484040384450616150444040505D6D69617185A5BEBEBAB69D8D7D7571696D6D69655D61 +5D615D615D5D5D61616565656565616161616D7D8989817D7171757975757575716D71716D717571 +7585858D8585817975757579797D757575757975797975797981858589817D716D71716D71716D6D +757575797D7975757D7D85897D6D61616161616561616161615D5D61615D615D615D6165696D6D71 +757D8D9DAEB2BABAA185716169715D5440404850616554443C44444C505959656965545459544034 +34343840444C50505044403C3834303028302828343C44445050443428282C303434383C44443C48 +484844443C3C34304054595D54505D5D5D5050484C44403448596169544844405D6971696D819DB6 +C6BEBEB699897D756D696969656965656161615D5D5D6161616565696D6565615D65718189858179 +75797D797979797971717171757975757585898D8D89817975797979797979717179757979797975 +7981858D89817D6D717175756D6D6D6D7579797D7D817D79797D85898571655D6565616965616561 +615D5D5D616161616561656165696D6D79818995AEBABAC2B29D816D69716D5D40444C596D655D4C +3C4448504C5454615D5D5054595950402C30343840444844443C404038343030302C2C2834445050 +54504438302C2C302C34343C38383438444440403C38343C4C5054504440505D5D5454444038383C +5059656554484048656D75717D91AEC2CABEBEA595897D7971696561696561616561615959596161 +615D65696565616161657185898579797579797979797979716D6D7175757975717985898D818175 +757979797575756D6D757175797D79797581818D857D756D71757571716D6D6D75797D7D7D7D7D79 +75798589857165616161616165616161615D59595D616161615D616561656D75797D8991A1BABAC6 +C2AE8D7D6D716D65443C485469696154443C3C44485959615D50404050544C48383034383C404440 +303034343830302C2C2C2C3038445059544C40343034383838343434343830343C40443C3C3C484C +4C4C4C44404050596159544438383C3C4C5D6569544C4054696D79798DA9C2CACAC2BEA199897975 +6D656969716D6965656161595D5D6565656565696D65655D6569717D8181797979797D7D79797979 +71717175717579797979858D8D857D756D7979797979797975757579797D7971757D858989817175 +7579757175716D6D75797D7D81817D7D757981817D7569655D6165696561656561615D615D616161 +6165696969696971757985959DBABEC6CAC2A98D7979696554404C546D69655440443C3C48545965 +59503C3C404848484844383838403C382C2C302C2C3030343434343034404C54504438343438343C +3830302C2C302828383C4040484848484C483C3438384C59615048443C403C404C545D614C4C4C5D +6D757D899DBACACEC6C2AE9D9581796D6569656D71716D6D696161615D5D65696565696565615D5D +65696D717575757579797D7975797975757575757175797979798189898579797179757579757979 +797575757579797579798585857D7175757575717175717571797D797D81797975757575756D6D69 +5D5D61616165656165615D5D6161616569696D6D6D6969696D79819199A9BEC6CECAB69989797169 +5D4C505065615D544440443C44485061594C38343038444844444444403C383424242C28282C2C34 +383434343438445050483838383C383834303034342C2824303C484C48484C504840383834384850 +5950404440444448505D61655050505D6D758595B2C2CED2C6BEA59D9185756D6969697575796D71 +6D69696965656565656D6D6961615D616565696D697171757D7D7D797579757979757975757D797D +7D818589857D797575717579797D79797D7979797979757979798185857D7D7D7979797575757575 +757579797D817D7975717169716D6969615D616165696965616165656969696D6D6D757575696D6D +7175858D99A1BAC6D2CEC2B2918171695D505454696561594C48484448404C544C44343034343C44 +4C4844444C483C2C2024282C302C2C3038383838383848505044383430383C383430303434342C24 +2C404848404848444038343834343C444C48404844484444545D5D615054506169718999BAC6D2CE +C6AE9D998D8179756D696D75757571716D6D6D6565696D69696D65615D6159656565615D656D7575 +79797575717575797979797575797D7D7D85817D7D797D7979717579757D79797979797579797579 +81817D7D797D81797979797575757575757575717979797575756D6961656969655D615D61616965 +6569656569696D696D71717579716D7175797D89959DAEC6CED2C2BA99856D696150545465616159 +4844484448404848403830303430343C444848404848402820282C2C30302C30383834303438444C +4C40383034343C3C38383838383438383844444C484848443C3838383028343C4450484440444044 +545D6161595454656D7991AEBEC6D2CEC2A5A1958981797571717179797975717171716565696D6D +7171696D655D5D616561595D616D7575757579797175757D7D7D79797D797D81858981797979857D +7571757979817D79797D7D797979757981897D75757D85817D797979757579797D75757579797175 +75796D65616169696161616569656D6D69656565656D716D6D71757D7D71717575798189959DA5C2 +CAD2C6BAA98D756965545459656561594440444044444C443C30282C3438343C444848484C404034 +3834303434343438383834343038404C3C38382C3030383C3C383C3C3C3C444040484C4C4C484844 +3C38382C24202834445040443C383C384C545D655D545465718599B2BECACEBAA99D958D85897D7D +71717175797D756D6D71716969696D6D75716D696565615D61595959616D75757171717171757579 +7D7D7D7979797D81858581717579817D7575757D7D7D79757579797D7D79797981857D716D7D8585 +7D7D7979797975797975757171716D71757971655D6161656165656569696D716D6D65696D6D6D69 +6D757979797171757D7D858589959DA9BECEC6BEAE95816D6554595D695D59503C403C3C44404C40 +34281C242C3438384448484C4C4C444040403838383C3438383830302C38383C2C3034343438383C +3C404844504C4848484C54595D5048403C34302C281C203C4850444440343430484859615454596D +7D91A5B6BECEC6B29D91898185857D79757175797D7D7D757171716D6D7175757571716D69696565 +61595D595D6D6D716D6D6D6D7179797D7D7D8179797D818989857D71757D81817D7D797D7D7D7975 +7579797D7D7D7D8185857D716D79818985817D79797D797D7D7D7971716D6D6D7171716161656165 +69696D696D6D6D717571696D6D6D6D7175797D7D7D7975797D7D8581818D91A1B2C6CEBAB2A18D79 +69595959655D504C34383840404450443C1C1C24282C343C3C484C5D59544C4448484C4C4448403C +383838343434302C1C2C303034383C404448505959504C50484C596161594C40342C2828201C283C +485448403C30302C3440505D4C4C50718191AEBAC2C2B29D8D89858585817D71717171757D7D7D71 +7171757571757579757171716D65615D5D5D5D5D6165696D656569697179797D7D7D817D7D858589 +8581757171797D817D7D7D7D79797575757575797D7D8181858179716D717D818981857D7D7D797D +7D7D7971696969656D6D6965696561656165696D716D6D757571717175717171717D817D79757571 +75797D818585898DA1B2C2BEB6A98D7D715050506154483C3034343C4044544438281C1C24282834 +3C485461615448444C4C4C59594C4444403C383430302C1C1C28303834383C4048545D5D5959504C +4C4C616D6559443C3834282020242C3C4850483C3830282034484854444454797D95B2BABEB6A18D +7D817D817D7D7D756D716D717D81817975757575757575757979756D65655D5D5D5D5D5D59656965 +6969696971797D817D817D797D8189858179757571717D7D85817D79797D7575757179797D818589 +8181756D717179818589858179797D81818179716D696969696D696165656565656569696D717575 +75757171757575757981817D716D717175797D7D8581858191A5B6BAB6AE957D7959484C5D4C4C38 +282C34383C484C4438282420202430343C445965695D4C48484C54595D5D5448403C38343830281C +2028303C3C383C48545D5D6161595450545465696954443C34342C282C28283C3C48443838302424 +34404C544444617981A9BAB6BAAE8D7D7979797D757975756D71717579817D797575797979797575 +7575716D6561595D615D5D61595D61656D6D6D75757979797D797D8181858581797179757571797D +8585817D7D7D79757575797D7D818589817D71717175717981898985817D797D7D7D7D7575716D71 +6965696569656969656169696D7579757571757575797575797D817D7571716D71757979817D7D7D +818DAEB6B6B6A9817965484859504438282830383844483C38282428282834343C40546569655450 +4C505461615D5D54483C383C3C342820282834383C404C505059595D615D61595D5D61615D544038 +34303438303028343C3C44383024242834444C5048486D7589B6B6B6B29D81797979757971797571 +6D6D696D757D8179717171757179797979796D655D595961615D5D5D59596169716D717179797979 +797981858589857D75757175716D758185897D817D81797975757D7D81818985857D717171717175 +7D858D89857D797D7D797D7975717175716965656569696D6D65616569757D797575797171717171 +7D81817971696D6D6D7579757D797D7D7D819DAEB6B6B68979714C4C545048382C24243038443C38 +34242C3034342C303840545D615D5D5954615D5D5D5D5950504C4440383428282C2C30404C545450 +50545454545D616161595059595448383438383838302C343C3C40342C2828243840505450597175 +95B2B2AEA9997D75757975757171716D69696D6D757D7D7D71716D6D717571757971696554545961 +5D595D54545D616D71716D717579797D7D7D8189898985797575757571717581858585817D7D7D79 +7979797D8185898985797571757575757985898985818181817D7D7975717575716969616169696D +6D6961616D75797D797175716D6971717D818175716D6D696D6D757579797D75797D95A9AEB2B295 +79755D5459544438242C282C34403C38342830343838383038485054544C596161615D5454545950 +5459544C4034302C2C2C3850595D5954545050505054545D544C44484C5048403C3C40403C342C34 +4444402C282C28243C48545959617579A1AEA9A1A18579716D717571716D696D6969696D71798179 +716D6D6D6D716D7171695D505050545954595454595D61696D6D6D717579797D7D7D818D89897D75 +71757979757975798181857D7D818179797D7D7D7D8985857D79797575757571757D898D89818181 +817D7979757171757169696565656D696D69656161697179756D716D6D6D71757D817D756D6D6D69 +6969717575797171757D89A1A1A9AEA17D75615D5D54483C242C302C30404444342C343C403C3838 +40484C4848444C545D5954505050505459595D5D50382C302C34404C59655D54545450504C504C4C +4440383C484C4C484440443C403C3434444444383C343030444C59695D65717DA1A9A1A19D7D796D +6D69696969696D696D656D697179857D756D6D656969716D696150484C505454504C4C5050545D65 +6D717171757D7D81817D81898585797171797979757575757D8189857D8585818181817D85898581 +7979797575797971717985858981818585817D797575757571696561656565696D6969655D657175 +75716D69696D71757D857D71696D6969656D6D6D716D6D7171797D9DA1A1A9A58171655D65544C40 +2C30343C3C44444838343C403C444044484C4844383840444C4C504C50505459595D695D5040382C +3C403C4450595D5454505050484444403C342C303C4454504C444440403C383440404844443C3834 +44595D6D5D616D81A1A59DA18979796D6D65656969696969696565656971797571716D69696D6D65 +61544C4C4C484848444048484848546165696D6D75797D7D7D818585817D75717175757975757571 +75818589818585898581818189898179757975757575757171757D81818585818181817D75717171 +6D65616165656161656565696565697171716D6D696D71757979756D6565656565696D6D6D69696D +6D757989A1A1A9A5816D615D6D5D54443438404444484440383840404044444C4C54443C2C283438 +4044484C5050545959615D54483C403C5048403C485459595459504C44444438342C2828384C5459 +544C4C4844443C303C44505048444444505D65715D617191A9A5A5A1857979756D69656565656169 +656565656571757971716D696D6D69655954504C4C4848444040404444484C5965696D6975797D7D +7D81817D7D7979757575797D797579797981858985858D8D8D898185898585797D79757579797975 +7579797D818589858581817D717575756D6161616161615D6569656969696D6D757171716D6D7175 +7D79716565656565696569696969697175797985A5A5A9A991716159716559504444444854544440 +343C4444484848545450483424242C34384444444C5459595D5D5950444448505454484044505959 +50504444444440342C2424283C44505950504C4C4844342C384C59545050484C596975755D657599 +A9A5A99D817975756D616561616161656565615D616D757971717171716D655950544C4C4C444444 +40403C404044484C5965696D71797D8181817D797975717575797979797579797581898D8D898D8D +8D8985898D8581797D7D757579797979797575797D818985858581797575756D65616561615D5D5D +61656569696971696D7175757571717579756D615D6161656565656565696571757579819DAEA5AE +997561597171655448485050595D503C303844484C4C5050544C44382424242C343C444448445454 +5D5D5448444C5454544C484C485054544C444444444038342420282C30444C50504C484C443C342C +3C50595D54545054617579795D697D99A9A5A989797575756D69615D5D5D656165655D5D5D697179 +757571716D655954505044484440403C3C38383840404048545D616975757D85817D79756D717171 +79797571757175797579818D918D919191918D918D857D797D79757171797D797571716D797D8589 +8989817D7571716D655D61615D59595D5D61616565616D6D696D6D757575757979716D5D5D5D6161 +6569616161696D717575757D8DAEA9A99D7D655975716D5D504C54545D5D543C2C383C444C48484C +5048402C2828202430344044444444505459544C504C4C594C50504C545959504C44444444383428 +242C3030344850544C48484040383834444C59615959545D69717D795D7D95A5A9A5A5857D757171 +7169655D5D61616565655D6169717579797579716D655450504844403C443C3C3C3C3C3C3C404044 +505961696D757D85898179716D71717579797571757179797D7D818991959599959591918D858185 +7D7D75757179797D7571716D758185918D8985797975716D615D61615D615D5D6161656161656969 +696975757579797D7D757169615D61656965656161696D71757579818DA9A9AEA995795971756D61 +5954595D655D504434383C3C4044484C504C44302C2C2820283438444444444C54595D5950545050 +4C4C5054544C545050444040403428243034383834405050504840383834343C4450595D505D5954 +6971796D6D899DB2B6AEA18579717571716D65616561616569696561616D71757979796D6D5D5448 +48443C4040403C3C3C3C4040403C3C4048505D61697579817D7D756D6D7175757979757579757575 +7D797D899195999D9995959189817D817D7975757579797D7979716D717D85858D89817979756D69 +615D616161615D5D5D5D6165615D6565656D7179757D7D7D79716D65616165696965656565697171 +7175757D89A1B2B6B29D85656971696550545D54615D54444038343838404850504C403434343030 +24283440404044545459505959544C4C4848484C4C444C50594C4440383028303434383C3C444C50 +50403834303438343C50545D595D5450696569697591A5BAB6B29589757175717169696565656969 +656565615D6169717979716D69594C48443C3C40403C3C3C3C403C3C3C3C3838404C595D616D757D +7D756D6969717179797571757575797D797D7D898D99959D9995958D897D7D7D817D75717575797D +7D75716D71757D8589857D7575716D6159595D5D616161615D5D6161615D61616569717575757D7D +716D656161656565696D6969696D6971717575798999B2BABAA58D71656161614C505D5961595440 +383C34303034404C4C4C403838343434302830384044505954504850504C48484C4848444840404C +54595444383434383C403C403C404C4C483C383434383C3C384C54615D5454505D616571819DA9BE +BAAE9189817D79716D7171716D696965656969616165697579757165615450483C3C3C4040403C3C +44403C403C3C3C38404C5961656D7579796D6D6969717979757575757979797D7D7D7D8591A19DA1 +9D9D9D9185817D81817D7979757575757979756D717575818985817D7D75695D595D615D615D6165 +5D616165615D5D5D656D6D7171757D7D796D69656569656569696D6D71716D7171797D818995AEBE +BEA9997D6D6159594C5454616159503C40403C3434383C484C4C3C383C3C403C3834343848545954 +504444484448484C4C48444040403C4850545948403434403C3C3C4040404848484034343C403C3C +3C48546154505448545D697D819DB2C2BAA9958581817D79717171716D6961656569696565697179 +797169615D544C40403C3C40403C383C40403C4040403C404448545D61696D7571696D696D757979 +71757571797D7D7D7D7D7D81919DA5A5A5A199918181818181817975757575757D7975716D71717D +85817D7D79716961615D6161616161615D59616161615D6161696D716D6D757D7971696565696D69 +65656D7171717171798185858995A9BABEAE997D756159504454505465544C404040403C34344048 +4848404040403C4040343440485954504C4044444444484C4444444440403C38485450484440403C +3C4040404438384040403840444444403C4854594C4848384C5D698585A5B2C2B2A195898589817D +7575757169696165656961656565717575695D5D544C48443C3C3C403C403C40403C3C4040403C40 +4044545961656969656969696D757975717575757D7D817D79797D818999A1A5A59D958981817D81 +81817D7975757575797D7971716D7175797D7D797571615D5D595D5D5D5D595D5D5D6161615D615D +6565696969656D797575696565656D6965656D6D717575717D8189898D95A5B6C2B2A17D7D655948 +384448505954483C444844444038404040383844404040403C404048485054483C3C444444444444 +38383C4044403C3C4448504840484C48403C403C3830303C3C3C3C44404444404050505048403C30 +4854718189A9BAC2B6A5958D89897D7D757D7575696961656169656565656971695D59594C4C4844 +40403C3C383C40403C3C4044403840403C404C595D61595D61656D6D717579797575717581817D79 +797D798185959DA5A59D9585817D817D7D81817D757579797D7D7D7575756D717171797575695D5D +5D5D54595D595454595D595D5D5D6561656969656961696D756D696565696D6569656D6975757975 +7D818D8D8D95A5B2BEB6A5857D6D5048303C40485054504444444444443C403C3C30343C40444044 +484C48444C504C443C40444840403838303438404444403C3C484C4C4C5050504C48443C34302838 +3C4044444444444C444844444C3C3C344459717D9DB2C6C2B6A1958D8D8D858179797975716D6965 +656569696565696D65615D544C484844403C383C383C4040403C40444044404440404C54595D5454 +5D656D7171757579797975797D8181817D7D818185919DA1A19D8D81858581858585817D7D7D7D7D +7D7D7D79757575716D6D757571695D5D5D54545459505054545459545D5961656569656165696969 +71716D696D6D6969696D71717179797D81858D8D9195A1B6BEC2AE997D715944343C3C4C44484844 +4C4444444448443C382C343440484C50545050504C4C483C3C404448403C343428303C4040404448 +444C48504C50544C504C443C302C24303C48484440404044404044444C383838445D717DA1B2C2BE +B6A19591918D897D7D7975757571716D6D69696D69656D61615D54504C484440443C3C3438383C3C +403C404040444440444048545450505459656D7171757979757979797981818181818585858D9599 +95958989858985858585817D7D7D7D7D818181797979756D6D696D716D655D5D59545450504C4C50 +50505050545D6165656565656561656565716D6D75716D75757575757175797D818D8D919195A1B6 +BAC2AE9D7D715D4438383C4C4444404044403C4044484C4034283034404C50544C54504C50484844 +48444040403C3028282C343C3C38404C484C4C505450504C4C44403C3028202440484C40403C403C +3830404C4C403C3C48616D7D9DB2BAB6A5959591918D89818181797579757171716D71716D656161 +5D54544C4C4844403C3838343838383C443C404040403C3C3C404848484C4850545D657171757579 +79757579797D81858585858585898D8D8D8D85858589898D89857D7D7D797D8181817D7979757171 +69656565616159544C4C4C4C4C4C4C504C484C4C50595D5D6161656161615D616565697175757575 +7575757575798185858D9195919191A1B2BAAE9D816D654C3C4040504C4030383C403C40404C4C44 +28242C344044484C50505054504848484C40383C3C342C282430303838404C4448444C5459544C48 +40403C38382C242C40484C44403C3C30282C44485448403C4C616D85A1B2B6B6998D919195918989 +85817979797979797579797571615D5D5454504C4844444040383838383C38383C3C3C3C3C3C3C3C +3C404044404448505459616D71757575797979797D7D858989898585898985858585858989898D91 +8D8981817D7D7D7D7D817D797975716D69615D5D59595450484848484848484844444C4C54595D61 +65656161615D5D5D61616575797D7D797D7D79757979818589899199918D8D95B2B6AEA1896D654C +40404C5448442828303C3C40444C48402C28303C3C404440484C5459544C4448444C403838302C24 +2C303034404C484C4440485459595048403C3C3430303838404C50483C40342C20283C4C544C4440 +5465719DAEB2BAB299918D9191918D8D89817D7D797D7D7D7D817D797169615D5D59504C48444840 +403C3C3C3C3C383C383C3C3C3C3C3C3C4044403C3C404850545D656D6D7171797979797D7D85898D +8D8D8D8985898185858185858D8D9191918D857D817D8181817D7D797D79756D69615D545454544C +484844444844444444444C5054595D61616565616161616561656D757D818581817D79797D7D8189 +8D8D8D9191898D99B2B6B2AE9D71695440444C54483C281C283440404C544C40383C343438404044 +4C505959544840444C48484034302C28282C3040485048443C3C3C5459594C48403C343430383C3C +4850504C44382C2020283C4854544440546575A9B2B2BAAE95958D918D8D8989897D7D7D797D8185 +89857D756D6961615D59504C444C44403C3C3C3C3C3C34383834383C383C384044403C343844484C +505965696D7575757579797D7D85898D8D8D898989897D7D7D7D89898D8D91918D8D857D817D7D7D +7D817D7D7979716965615D4C484C4C4C48444440444040404444484C50595D5D6165656161616165 +65656D717985898D898179797D7D7D898989898D8D899195AEB6B2B2A9756954404454504838241C +202C3C4450505048403C383434383C444C505D5D54403C3C44484C483C3028282C303C484848443C +383C3C444C504C4440383430303C40444C59545040302420202038485454444459697DB2AEB6BA9D +9591918D8985857D8181817D7D81858D8D85796D696561615D5D594C44443C403C3C3C3C3C383C38 +3834383834383840403C3830384044484C596165696D757175797D797D8189898D89898589897D75 +797D898D898D918D8D8D85817D817D7D7D7D7979797971615D5D5948404444484840403C40403C40 +4048484C5054595D5D5D6161616565616565656D757D898D9185817D818581817D818585898D8D91 +9DBAB6AEB27D65544444545044342020202430405059594C44403C3430383C44484C504C483C3C3C +3C44484444382C2C3040444C4C403C34383C3C3C4044483C403834384040484C4850595940282020 +20243848545444485D6981B6AEB6BA9D99958D898981817D7D7D8181818991918581756969696165 +615D594C48404038383C383C38383C3C34383838383C40403C383430343C40444C546169656D6D71 +757975797D81898589858589898581757581858989898D8D8D8D85817D7D7D7D7D7979797D756961 +5D5450443C3C40444844403C3C40403C444844484C505959595D5D656565656969656D6D6D798189 +9191898181817D7D7D7D7D858589919599B6B6A9B67D695D48405050443020201C202840595D504C +4C4844443C383C40404848443C3C3C38343C404C4C443C303C444C50443C30343838383440444440 +383C404844444848444C504C442C1C1C242434485050484C5D718DB6AEBAB29D99918D8985817D7D +79797D81858D8D8981756D6D696969656161594C484040403C403838383C3C3834343434383C403C +3C383434343C3C444C545D6561696D6D717979757D818585858985898D8581757581858D89898D89 +89898581797D817D7D797979797569615D5048403C3C3C444444403C383C3C3C44484444484C5959 +615D5D65656569696D6D696D71717981898D8D85817D79797D7D7D8185898D9999B2BAAEB6896D5D +4C44484C443020201C1C2C444C505044484C484848403C3C444844403438383830303C444C4C403C +4C4C504C403434383C383C383844484840404C4C4C4C48484044484840302824282830484C4C5054 +6579A5BAB2BEB29D918D8D898581817D7D7D81818D8D8585797171716969656165615D5048484444 +4440403C383C3C383834343438403C3C383438343438404C50545D6165656D6D71797979797D8989 +85898D9189857D79797D858991918D898989818181817D7D7D79797979716D65615044403C3C3C3C +40404440383C3C40444448444C545D616161656569696969696D696D7171717981858D8D85817D79 +7D7D7D81858D8D9199AEBEB2BAA57961504C4C48442C24242028303C4448444048484C504C4C4040 +4C4C483C3C3C383C3834344048504C4C545D544C4434383438383838384048484848444850504844 +38343C403C3030302C282C4444545954657DAEBAB6BEA5998D8D898581817D7D797D81858D817D71 +6D6D6D6D6969656161615D4C484444404444403C403C3C3C38383434383C38343434343834383C48 +5050595D6165696D6D757D79797985858989858985817D7D7D7D81858989898985857D818181817D +797D7D79757165655948403C3C3838383840403C3C383C404040444C4C545D616161616565696969 +656969696D6D6D6D7181858D85817D7979797D7D8189898D99A5BEB6BAA97D655054504040282428 +2C2C30383C3C303844485050484448484C48443C38383838343434404854595465615D4C3C403C38 +3838383830384448504C484848484840382C3438343838343434303C405954546989A9BEBABE9D95 +8D8D85857D7D7D7D7D81858981816D65696969656969656561615D4C4840444444444040403C3C3C +3C3438383838343034383834303C444C5054595D616565696D757979797D8185898989857D7D7979 +7D7D7D81898D8D898585817D7D7D7D7D79797979756D6965594C4438383C3C3834383C3C3C3C3C40 +4444444C4C505D6561615D6565696D6D6965696565696965656D81818985817979797D7981858D8D +959DBEBABEA985655050543C382C30303034383034342C384048484848484C504844383038383838 +38383C3C4C5961656D69615448403C3834383834343440505954504C4844403C34282C2C34403838 +3434383C4C595D546D8DA9C2BEBA999589898185817D7D817D858181797165655D65656561656565 +61655D4C4444404444444040404040443C3C38383838343034383C3C3C40444C505459595D616165 +6D71757575797D81858989857D797D7D81817D81898D8D8985817D7979797D7979757975716D6965 +545048404040383430343C3C3C3C4044484848484C505D6165616561656D6D69696565616565655D +696575798181857D7D797981817D89899599BABEC2A58969505959483834343438383C3428282434 +384040444C505459504034343438343438384048505D696D796D65594C443C383834343038344054 +5D61544C4440383430281C2838404038383C343C546161547589A5C2BEB69D918D8581817D7D7D7D +7D7D797D6D6969655D61616161615D5D5D6161504440444040444048444444444440403C38343434 +3438383C3C4048505454595959595D616971717175797D8181858981797D7D8181817D7D85898985 +85857D7979797979757171716D6D69615D4C4840403C3834343434384044444848484C4C50545D5D +5D61616169716D65616161615D5D615D6569696D7D797D7D7979797D7D8185899199B6BEBEA58575 +545D5D5438303834343C40342818242C303840404C50615D5440343830343038383C404C54656D79 +797561594C4C444038343430303840545D61594C443C3830282018343C44403C383C30405965695D +7981A5BEBEB29D918D85897D7D797D7D797D7569656565655D5D5D5D5D595959595D5D5044444444 +4444484C48484444444444403C38343438383C403C444C54545054545054545D6571757979797D7D +8189817D757D817D81817D797D898D858185817D7D7D7D79716969656965615D5950484044403C3C +3834383C444848484848505459595D5D6161616165696961615D5D5D5D5D5D5D6565656969757975 +7979797D7D85858D919DB2BABEA581755969615440303838383C4438301420242C3438404C59615D +54403830303434383C44484C5961717979716154545048483C343030303C40485959594C483C302C +1C141C304448484440342C445D6571698181A5BEB6A9998D8981857D797D797D7975696169656161 +5D5D5D5959545959595D544844404444484C504C4C4848484C484C443C3838383C383C4040444C50 +5054544C4C505459616D717579797D7D85818179757D7D7D7D7D7D797D818589818581817D797D75 +6D6965615D615D595950484444403C3C38383C3C444C4C4C4C4C5054595D65616161616161656961 +5D5D595959595D5D616165696169717979797D79798181898D99A9B6BAA5817D6971655D442C3440 +444848442C181018283038484C5959594C4040303030343844485054546171796D6161595450504C +48403834403C4044505459504438302014182028404C544C4030344861697571859DB2BEAE998D85 +857D7D7D797D7975756D6561616161615D5D615D59595D595D544C44404040484C484C4C4C48504C +4C4C4C48403C3C3C40404044444C48505054504C484C4C505965717579797D81817D8175797D7D7D +7D7D797979858185858581817D7D79716561615D5D595954504C5048444040403C3C3C40484C4C50 +50545054595D6165655D5D5D5D5D61615D5D59595D5D5D5D6161616161656D7175797D79797D7D85 +858D99AEBEB299856D75695D443430404C54484024201414202C38445059545044403C4034344048 +485050505961616D595D6159545054504844444448444044485059504034281C141C2428404C544C +3C343C4C616D757585A1BAC2A99189817D79797D79797971696565655D616161615D61615D5D5D59 +595450443C3C40404448484C4C4C4C4C50504C4C4444404440404444484C484C4C4C4C484448484C +54616D7579797D7D817D79757979797D7D797979797D818585858581817D756D6161615959545050 +50484C4C44444444444044444C4C545050505454595461615D615959595D615D5D615D5D5D615D5D +6161615D65656569717575797D797D7D858D95A9C2BAA58575756D61483C343C48544C3C24201C14 +1C2838405059504840404444444044444C505054545D5D544450595D54545050484854544448443C +445050504034281C2020282838484C483C40484C616D717585A1BAC6A995858179797D7979756D6D +69696565616161616165615D5D615D5959544C443C3C4040444448484C544C545450504C48484444 +44404444484C484848484C484848444C54616971757979817D7D79757579797D7D79797979798181 +8981817D7D797569655D5D5954504C4C48484C48444440444444484C4C5050545450595454595D5D +61615954595D5D5D5D5D615D5D5D61616161615D656569696D6D7575797D797D858995AECABEA589 +79756D614C48403C444C48382824202020283840505450443C444444505044484C5050505D545044 +38444C595D54504C4C59545950444040404C4C4C4030282428282C303444484438404C4C61696D71 +85A5BEC2AE9D8D857D7D7979796D6969656565696565656165656561615D545454504C4440404444 +444844485054545054504C4C4848484448444044484844484C48484848484C484C59656D71797D7D +7D797175797D7979797D7D7D79757D818585817D7979716561615D59544C4C4C4844484844404448 +48484C4C4C4C50545454595954545D6165615D595D595D5959596161616565616165616165656565 +6569697575797D7D85919DB2C6C6AE8575716D615050443844484434302C2828242830444C504C40 +4040404C54545448484C5059544844383438404C59595450595D595950483C403C3C4444402C282C +30343030344444403C44484C6171717985A9BEC2AE9D918D857D75756965655D6165656165696965 +696D6565655D595054544C4C44484848484448484C4C50505050484C505048484444444444444448 +4C504C484C4848484C505D656D757D7D797171797979797D7D7D7D7D7D75758185897D7979756965 +5D5D5D545050504C4840444444444044484C50504C4C50545054505450595D656561615D615D5D59 +595D5D656565696565656561616161615D65656975757D859195A1B2C6C2AE897D7571614C4C4840 +40444438303034302C2C2C4048483C3C44404850595959544C505454483C34343430344450595459 +5D5D5954544C4C40382C383838302C34383C3C38383C4040444C48485D6D757D89B2BEBEAE9D918D +858179696959595D6161656165696569696D696D69655954545454544C4C48484C4C4844444C484C +4C444C50505048444440404044444448484C4C4C484848444850595D6975797975697179797D7D7D +7D7D7D7D7D75717D81857D75716D6D615D5D595454504C4C4840444440404044444C505454504850 +504C5050505961696565696969615D59595D65696D696965696565616161615D5954596569798185 +9195A1B2C6C2B68981796D614C4C504844443C38383C403C383034383C3C3038404C50545459595D +544C544C40343034303030404450595D5D5D595454544C443428242C3438383C3C40404034384448 +544C50485461758189AEBABEAE9D9185857D796961545D5D616161616169656D6D696D6D69655D59 +5454595959544C4C4C4C4444484C484C4C484850504C4C44403C404040444848484C50504C4C4844 +484C5459656D6D71716D7175797D7D7D7D7D7D7D7D7971797D7979756D6D65615D615D5954545048 +444444403C403C40444C5050504848505050545450546569696971716D655D5D5D6165696D6D696D +696165615D5D5D5D5959545D69797D858995A1B2C2BEB68D857965594C544C5448443C3844444040 +403C3C3830282834445054595459595959544C443C2C303028282C34404859595D54545959595040 +342414242C4040404040444030303C4C5950504C4C5D757989AEB6BAA5958D818175756D615D5D59 +615D5D5D5D6165696D6D696569655D5D59595D5D61544C4C4C484444484C4C4848444C4C48484440 +3C3C3C3C3C444444404850504C4C4C4848484C545D65656D6969717575797979797979797975716D +757571716D696161615D5954595448404440403C3C3C3C3C404448484C4C484C4C50545454596169 +69696D796D6961616161656965696D6D655D5D5D595D595D5459595D69717581859199A9BEBAB28D +7D795D505050545D4C403434444444444444443024182838405059595954545959594840302C2828 +2828282C384C5059595954595D594C44342418142C40484848444438302C344C54545050485D7575 +89A9B2BE9D918D817975716961655D5959595D6165616165696D6D6969656561595D61615D54504C +4C484444484C4C484844484C484440403C3C404040404044444850504C4C4C444848485059616565 +65696D7171757575757575797971716D71756D71696561615D5D59545454484040403C3C3C3C383C +404044484C4848484C50545454596169696D7175716D656165696969696D6965615D5D615D595450 +545D615D65717579819195A5C2BAB28D7975614850545959503C303840484C4C4C4C443018182834 +444C595D59545459545048342C2824282C2C303038485059595D61655954483C30241C1830405450 +4C4C44383424344859595450446171799DAEB2BA9D9589817979696561656565595D596161616161 +69716D6D65696969616165655D59544C484844484C504C4C4848484844403C404044404040444448 +48485050504C484848484C50595D656161696D6D717175757575717575756D696D7571716D69655D +5D545459545048484444403C3C4040403C3C40444848484C50545959595D65696D717175756D6969 +6D696D696D6D7165615D5D5D5D5459546161615D65697979818D999DBEB6B2A17D75614450545D5D +4C382C383C485054545944341C2024303C48505961615959544C4438302C2C282C3034383C405054 +5D5D615D544844342C28242834404C54504C40342C24384C595D544C40616D7DA9AEAEB699958981 +757569656569616565615D5D61616165656D69696569696965656D695D5D544C4848485054504848 +4848404444403C40444440403C44444C48484C50504C4844444C4C505459615D616969696D717171 +71717171716D6D6969716D716D69655D59545459544C4848484040383C404044403C40444444484C +4C50595D616165656D7575757979716D6D6D696969696D65655D5D5D59595D61615D656565697575 +8189959DB6AEB2A97D6D61404C54615D503C28343C485454595044382C24282C344048545D5D5D5D +5450403C3834302C30303C40404048545D6159504C4438302C2C34383448485054483C342C2C3850 +595D5944445D6D81AEA9AEAE9191898579756D69696D696565616561596161656165656969696969 +69656D69615D54504C50505454484448444440404040404444444440404040484C48484C484C4444 +484C4C505454596161696569696D716D6D7171716D696D6D6D6D6D716D69656159505450504C4848 +44403C3C3C404444443C3C4044404448504C5461656969697171757975797171716D6D6D69656561 +61615D545D615D6161656965656D757985899191B2AEA9AE816D5D4444596159543C303038404C59 +59504C383C342C2C3038444C5059615D54484040403C303034383C3C3C3C3C4C545D594C443C3434 +30343C4440445454504438302C343C50595D5940485D7181A9A5AEA5998D897D7979756D71696D65 +69616561595D5D61616165656969696D696D6969695D5454545454504C404044404044443C404044 +48444844404044404848484C48484448484C4C505054595D616561656D6D6D71716D71716D69696D +6D6D6D6D7169655D54505050504848443C403C3C404440444040404044444444484C4C59656D7171 +717175797975757171696D6D6969615D5D5959545D615D65616969716D7579797D858D99A5AEA1A5 +816D5D4840596159503C382C343C48545D594844483C3834343840444C595D594C403C3C3C3C3834 +343C3434383C3C48505450483C343838383C44484C4C545D50403C302C40404C5D6550404859717D +A99DA9A9958D81797D7D7D79796D6D6965656561615D5D595D5D6165656969696D6D6969655D5954 +595D504844403C40403C403C3C404444444848484040404444404444484C4844484C4C4C504C545D +61615D65697171716D71716D6965696D6D6D696D69696561545054504C484040403C3C4044444844 +444440404040404448484C545D6975757175757579757575716D6D6965615D5D595D5D5D61616161 +65696D79797D7979797D8995A9A599A57D7159484050615D4C404030344040546159505048484038 +3C3834404854595048403C3838343C3838303034383C404048484C40343434343C444C484C505954 +504438383C48484C61614C4850596D819D99B2AE95897D7D7D797D79797169696569696965615D5D +59595D6161656D6D6D716D65655D595D5D5450403C383C3C40403C3C3C403C44484C484444443C40 +4040444444484448484C504C4C4C505461616165696D6D716D6D6D6D6D6D696D656D696969696559 +5450504C4844403C4038404040484848443C3C3C3C4044484448484C596975797975717175757575 +75716965615D59595D5D5D616565656169697175797979797D798591A9A9959D816D5950484C6161 +4C48483C383C4854595D54504C50484038383838444C4C4C44443C383434343C3C343430383C4040 +3C403C3834303030404C4C50505454545450403848484C4C5D5D545954546D7D9DA5B6AE95897D7D +7D75757175716D6D656969696961596159595D5D5D616D6D696D716965615D615950443C3C3C3C3C +3C403C3C383C404448484848444444403C3C444844484848444C504C48484C505D61616569696D71 +716D696D6D6D696969696565696965545454504C4C483C3C3C4040404444444840403C383C404844 +4448484C54617175797575757579717175716561615D595D6159616965656565696D717171757579 +797D8591A9B2A1997969545459545D5D4C4C48483840505454545454504C4C44343434383C3C4040 +40403C383434343C3C3C343038403C3830302C343C342C38444C50545454485059544848504C5050 +595D5D615954697DA1AEBAB69189857D7975757571716D716D6969696565615D59615D595D616969 +6D6D6D6D6965615D5448403C38383C403C3C403C383C404048484844444444444040444444444848 +444C4C4844484C5059616165656D6D6D6D6D6D6D6D6D6969696965616565615454544C4C48444040 +404044444044444440403C3840444444484844485459697179797579797571756D6D65615D61615D +5D6161656565696D716D716D717571797981858DB2B6A99D7D655459615D5D544C50484C44485054 +5048545454504C443C30343C383034343C3C403834343C3C403C3C34383838302820283034343440 +484C5059595044484C5054595954545450595D6561546985A1B6BAB2918D817D7D79757571716D6D +6D6D6565656161595D6161616161616D6D6D716D6D6D61594C44403C383838383C383C3C383C4044 +40484848444844444040404444484844444848444448484C54616565696D6D69696D71716D696D69 +6565655D5D615954505450484840404040444444444444404040403C404040444444484C54596169 +71797D79757975717165656161615D5D5D61616565656D6D6D6D7171717175797D7D898DB2B6B2A1 +8165505D655D59505454545954504C4C4844505959545048443438343028202C30383C3C343C3C40 +4440403C34302C281C1820282C3840444C505454544C443C4C4C61656565615950505D69615D6985 +A5BABAAE9589817D797971757171716D6D6D6D6961655D5D5D5D5D5D6169696D71717171716D6150 +4844403C38383838383838383840404044444844444C4848403C404044484848484044404044444C +545D6561696D6D71716D716D69696D696965615D5D5D54545450504844403C404448484040444044 +4040403C3C3C3C404044484C595D616569757D7D75757575716969655D5D5D5D5D5D6561696D6971 +6D71717175717579797D8991AEB6B69D7D65595D65595050595D6161655D4C4C3C4450595454504C +4440382C28201C202C303038404040444C4844403428241C181C1824303C4848504C50504C48483C +44546971716D6D61484C5D6565616D7DA1BAB6B29589817979797975716D716D6D696D6965616165 +615D5D615D6D757575717175716D5D504844443C38343030303030343C4440404844484848484848 +444040404044444844443C40444044484C596565656D6D6D6D71716D696D696565615D5D59545454 +544C48444440444448484444444444444040443C383438383C3C4450595D61656971797979757979 +79716961615D5D61615D6165696D696D6D71717175757579797D8995B2B6B69D79695D6161594844 +5D6D6D6D716954443C484C4C50504C4C48483C2C24181C181C2428344044484C5050483C34241814 +181C1C1C2C404C545050504C44404044445D717D7D796D5D4C445965696569819DBABAAE95857D79 +7D797971756D7165696969656561656565615D5D656D75797D797571757165544C44403C38302C28 +28282C3440444444444848484C4C4848444440383C44484C484040403C3C44484C545D65696D6D6D +7171716D6D6965656565595959545054545048403C40444448484848444444444444444038303030 +343C4450595D616969757D7D7979818179756D65615D5D61656561656569696965716D7571797979 +797D8195AEB6BA997D65616965544048596D79797D715D40444040404C50504C50483C28181C1C18 +141824343C4850505050483C3024181418181C1C2C40505954545048403C3C44445D758185796D59 +48445D657165658199BAB6B295857D7D79757971716D6D6565696161616165696561616165697579 +7D7D7975797565544C48403C38342C28242430343C40444444444848484C484C4840403C38444848 +4840383C3C3C40444C545D69696D6D6D7171716D6D6D696561615959544C5054545048403C444448 +48484844444440444044404038342C30343C44505959616969757D817D7D81817975696561616161 +6565615D6165696565716D71717975797D7D8595AEB6BA997D65656D655944485469798181755D40 +40383C3C444C5050544C3C281818181414182430404C50505950443C30242018141C1824303C4C54 +5D544C484440403C485D717D81796554444C61657169617D9DBEB6AE9589817D7575757171716D6D +69656161615D616565656565656D75717579797D797569594C48443C38342C2C282830383C404040 +44444444484848484444403838404C4848403C383C3C404448506165696D7171717571716D6D6961 +5D5D5959544C5054505048404044484848484444444440444040403C3C343034343C4854595D6165 +6D757D7D857D7D757571696565656561615D5D5D616165696D6D7171717575757D818995AEB6BE99 +7D61697165614C405465798179715948383C3C40444850595048382C20181814141C20303C445059 +595044382C24242418182028343C48505D594C4444403C3C4C596D798179544C484C617175695D7D +9DC2B6AE91897D7D757971716D75696D696561615D615D6161656969616D6971757D797D7D796D5D +4C44403C383434302C3034383C403C404044444440484C4C44403C383844484C483C40383C3C3C44 +4C505D6169717171717571716D6D6965615D595450504C545450483C3C4044444C48443C40404440 +403C443C3C3838383C444C505D5D61696D798185817D7D7571696961656965615D595D5D61616969 +6D69756D7571797981818991AEB6C29D815D697571614C484C54757D7569544C383C3C4040485459 +4C403430241C14182020242C3C44505950484434302C2C28241C28303438445059594C4440403C44 +545961757965594C485961717965617D9DBEB6A98D857D7D757571717171696D696161615D616161 +616565656569657171797D7D797971615444403C383834343430383C383C40404044444440484444 +44403C383C4448484444443C3C3C3C4048545D6569716D6D71717171716D6D655D5D595450545450 +50504C403C404044444444404440404040403C3C3C3C383C40445054545D6169717D8181817D7971 +6D65656565656561615D615D616165696D697171717579757D818991AEBABEA18165697971615948 +4C596579715D545040383C38404850504C3C34302C24182428282C303444485044443C3430303434 +3030303438403C4C4C4C4C444040404C5459596169616150595D5D6D71656975A1B6B6AE8D7D7975 +75717171716D696969656561616565615D655D6161656D6D757979797575756D5D4C4040383C3834 +34303838383C404044404440444044404440403C4044484C4448403C3C4044444C505D61656D6D6D +6D71716D6D6D6D6561615D54505054505450484440404044404040444044404040403C383C3C383C +444C5450595D65717D7D7D7D7D7975756D6D655D615D655D616565616165656969696D7171757179 +797D8191B2BABAA5796969716D5D5D54505D5D6561545450483C3C3C404848484438383430282C2C +3034303034404844443C3C383838343838403C34383C404044484C484440445050545050595D6159 +6161596969656D759DAEB2A591817975717171716D6D6D6565656969696561615D59595D61657171 +717179757575797161594C403C3C383434343438383C4040444448444040404038383C404444484C +44484840404044484850596165696D6D6D6D6D716D6D6D6565655D5954545450544C4C4844403838 +403C40404444444440403C383C3C3C40444C5454596571757D817D79797571717171655D5D59595D +615D656569696565656D6D6D75757575797D8595A9BAB2A17971696969596161545D5D54504C504C +4C403C404448403C3C3C383430383C34343438383C3C3C444034383C3C40403C404044403C3C4038 +3C44484848444C48504C4C4848595D5D6565595D61617975A1A9AEA58D8175717571717571696965 +65656D69656161615954595961696971717575717579797569615444403C383C403C3834383C4044 +4448444440403C3C38343C444444444448484844444444444C50596161696D696D6D716D6D6D6D69 +65655D5D545454504C4C4C48443C34383C3840404444484440404038383C444C4C5054595D6D7579 +7D81817D75717571756D655D59595459615D5D61696D6565656969717575757979798595A9B2AEA1 +797D6561615965615D5954484448484C4848444444444038343C383438403C40383C3C3C3C383840 +383C3C3C4044404448484C4C403C38343840484C50444C4C48444C3C3C4C5461656159595D617979 +A5A9AEA59181757171716D71716969656569696961615D5959595959616965696D757575797D7D75 +6D655D5048444040403C38383C3C40404444444040403C3C38383C4444484440484C44444444484C +4C505461656D6D6D6D7171716D6D6D6D69695D5D54545450484C4C48443C383838383C4040444844 +44403C3C3C40444C54595D61697179797D81817D7975756D6D65656159595959595D616165696965 +696D6D7175717575797D8995A9B2AEA97D7D655D5D5D656561544C3C3C4844484848404C48443C34 +3034383C48484844444044403C3C3C38303840404048484C5050504C484034343034404C4C48504C +4448403834444C5D615D61595465757DA1AEB2A191857975716D69696D696D65656965655D615954 +59595D5D5D6165696D7175797D7D79797169615D504844444440403C3C3C3C44444044403C383838 +3C3C404444444444444844484C48484C4C50545D6569696D71717171696D6D6D696961615950544C +4C48484844403C38383838384044404444404040444448505959616971757D7D817D81817975716D +6D69615D595D5959595D615D65656969696D696D6D6D757579818995A5B6AEA58179695459655D61 +5D4C443438404444484C48484C3C302C30303C44484C50504C4848444040383030303C4448445059 +595954545044342C2C30383C4050484C4C4C403834384059615D65544C69757DA5A9B2AE89857D79 +6D696965656D6965656565615D615954595D595D61616969716D75797D7D7D79716D6561594C484C +484440403C3C3C40484440403838383C3C3C444444484040444848484C4C484C5050545D6169696D +71716D696D6D6D716965655D5954544C48484C4844403C3C383438383C4044484440404444485059 +616165717575797D7D8181817D7571716D6961615D595D59595D615D6165696569696D69696D7175 +8185898DB2B2A9A57D75695059655D615944383438404C4C4848503C3C342C282C30445054545959 +59504848443C30303030303C4044545D5D5D5D5D54443C302C2C28303C4850504C483C3834284050 +5D595D544C65757D9DA9AEAE91897979716D6965696D616561615D61656159595D615D6161656569 +6D717D79797D7D79717165615D59504C5048443C403C38404444443C383C38383C40444844444440 +4448484C4C4C4C48484C505D6565697175716D6D716D6D6965696559595050484448484844443C38 +383438383C404444403C4044444C59616165717575757D797D81817D7D79716D6969656161616161 +5D5D6165615D61616965716D656D71757D7D8D95B2B2A99D7D756548545D5D6154402C34383C484C +5050483C30282C2C303C44545D5D5D615D5448403C343430303030303848545D61656561544C4840 +342824203448545450443C383024344C5961594C4465757D999DAEB2918D81757171716969696165 +5D595D6165615D5D61615D65656965696D7175797979797575756561615D59544C4C4844403C3C40 +4044403C38383838404448484440444444444448484C4C48484C54596169697175716D6D71716D65 +696D615954504C4C484844484444403C383438383C3C4440404044484C5059656D6D757575757D7D +79797D7D7D75716969656969656165615D5D6165615D5D5D6565696D6971757579819195B6AE9D99 +7D7565444C59655D50382830383C44505454483820242C3440484C54616565656154483830343030 +302C2C2C3848505D65655D5454544C443428181834444C54504438342C24304C5461594440597175 +8995A5B2958D857D7575756965615D5D5959615D615D5D5D616165696D696565656D75757D757171 +71756D6165615D545048484C4844404038383C38383834383C444444404440404444444444485048 +484C50596169696D6D716D6D6D6D696969696154504C4848484448444444403834343434383C3838 +40444C5054545D656971757975757D79717579817971696565656D6D6965615D5D5D5D655D615D5D +616165696D7979797D898D99B6A9958975715940445961544C30282C343C4450544C44341C1C2838 +484C5959596165655D544C382C2C2C30343030344044505961615D5954544C3C382818242C3C4854 +4C44383024283844545D543C3C506D758999A9AE99918D858575756D61595D59615D615D5D5D6165 +6565696969656161656D75717975716D756D6D6965615D595450504C4C48443C38343C3834343838 +3C44484440444440403C444848484C4C4848505961656D6D6D716D71716D65656D6D5D54504C4448 +444844404448443C38343434383834383C485050545D61696D757579797979797171797D75716D65 +6161656D69696565656561615D615D655D615D656D757585898D919DAEA99989756D503C3C546154 +44382828343C445054484030281C2C3C405059595D6165655D544840343030343030303C44444C59 +6165615D595048402C2824282834404C4C44382C242C343C5059503C3C4C61798D9DA9AE9599958D +857975695D545D5961615D615D65656D69656D6D69655D5D6169716D757571716D6D696D65615D59 +54504C504C4844403C38383838383C3C404444444044403C3C404044484C4C4C48484C595D69696D +6D6D71716D69656969695D54504C44404044444444444440383838343438383C44484C54595D696D +7175797D7975757175757979716D65615D5D6569696965696D656961616161655D5D59616D757985 +8D959999B2A9A18D79614C3C3C5054503C342C28303C444C4C44342C2C282C30444C545D61656961 +595048443C3030302C2C343C44484C5961616565594C4838342830302C2C38444444342824303834 +44544840404C5D7185A1A9B69D9D999589817165615D59616565616161656569656D6D716965615D +61656D696D756D6D6D6969696561595D5450545450504844403C383C3C3C38404044404440404038 +38404448484C4C504C444C545D65696D6D69716D6D69616D6D656159504C44403C40444044404440 +40383C3838383844484C54596165696D75757979757571717171756D6969655D595D65656D6D6965 +696969616565696561595D616571818995999D9DB6A9A189715D4C40404850443838302428384448 +483C303034342C343C4C505D69696565594C4C4840342C2C282C3840484C50545D6165615D4C3C38 +3430383C34303838383830282430343040484040484C546D81A5AEBAA19995958581717165656561 +6169616161656565696D6D6D65615D5D5D656165656D6D6D6D65656565615D595D54545454504848 +444040403C3C383C40444040444040383C3C44484C4C505050484850595D61696965696D6965656D +6D696159544C40403C4040443C3C44403C383C3C40404044484C595D61696D757579797975716D71 +716D6D656561615D595D5D6169696D696569696565656D656565696571758185959599A1BAAEA581 +6D544C443C4048403038302828303C38383C34383C3C34343C4050616569655D5450504840383028 +283438404C50545454615D61594C443C343C3C403C3C34282C282C2828343438383C403C4C4C546D +85A9B6BAA195918581817D79757169656565656961616565696D6965615D5D5D5961616161656969 +696561656965615D5959595454504C484844404044403C4040404044444040383C4040484C504C4C +4C4C444C545D61616165696965616D6D6965655D544844403C40444444403C40403C404040404048 +4850595D696D717175797D7971696D716D696561615D5D595D595D5D65696D69656565656D656965 +69697179797D8581899195A1BAB2A9816D544C4C3C403C3838343428282C28302C343C4040403C38 +4048505D656165595959544C403834282C3840484C595D5D5450595950504C3C3844444040402C20 +1C2024282C343038382C38405454597585A5B2B6A1918D818985818179756D6D6565656561616165 +656965615D615D615D61615D5D5D65696565656565655D5D59595D5954504C4C484440404444403C +40404044403C383C3C40444848504C4C4C4C48444C595D65656165656165696969656159544C4440 +403C3C40484040403C4444404040444C505059616D71717175757971716D6D6969655D5D5D5D5D5D +5D5D5D5D6165696565615D61656965696D71757D8185858981898DA1B6B2A5857159545040382C38 +383034282824201C202C404040444438405054545D5D54595D61594C443C382C3C44484C545D655D +54504C4C4C4C4C444448484848402C1810182024343434383424303C5961617185A1B6B6A9959189 +858D85858175757165656565616161656165696561616161615D6161595D61656965656969656161 +5D595D595959504C484844404444444444404444403C3C3C3C44484C4C54544C504C48484C545965 +656161656165696D696D6559545048443C3C404044444044444444444444484C5059656971717171 +75757575716D6D6D65655D5D61615D5D5D6161616565616165616161696969697179798185898D85 +898D91A5B2B6A18171615D593C3024343834303420201810182C4048484848444450505050505459 +5D655D504C48443C4C4850545D655D59594C404048484448545050504C3C2C1C0C10182034303438 +3024283859656565819DAEAEA9959191918D8D85817D797571696561616161656565656961615D5D +615D5D5D595959616569696D696969615D595D595450504844444040404444484844444040403C3C +404044484C5054504C4C48484C5459616161615D616969696D6D5D5950504844403C40404044444C +48444840404048484C59616571757171757D75717571716D655D5D59615D5D5D595D5D5D65616161 +6561616161656D75797D818189918D91919195A9A9AE997D65656559382824303834303420181008 +1C2C384C4C5050544848484C40445059595D615D5450484C5D545059616154544440403C3C484450 +5D5D5950483428201408101C343430342824243C5961695D717DA5B2A99D9195958D8D8985857D79 +7971695D65656161616161615D5D5D59595D595D5954595D6569696D696965655D5D5D54504C4440 +403C3C404044484C48484C403C3C3C3C3C4444484C4C50504C4C4C484854595D6161615D616D6969 +6D695959504C4844403C403C404C48484C484440444040444C505D656D717175757575717571716D +656159595D595D595959595D5D5D5D5D616165655D6971797D8185858D918D95919199A5AEA17D71 +5D6961593C242428343034301C0C0810202434444C545D5D5044483C3C404448545461615950545D +65655D615D544C443C40403C384044546165615944302C201C10082028343834282C283C545D654C +6979A1B6A9A195959191918D898581817D757169656561615D59616161616159595D595954545D5D +61656969696965656159595450443C3C3C3C3C4040444448484848443C3C383C3C44484448485050 +504C4C484850595D61655D5D65696D69696559504C504C4440384040444C4C4C4C48444044444044 +484C59656D6D6D717575757171716D696561595959595D59545D5D5D5D5D595D616165656971757D +8185898D8D91919191959DA9B2A1796950695D5438282828343430241C040C181C282C40545D615D +5444403C3C4040404450505D615D6569716D695D54484040403C3C3C383444595D65655D44382C20 +1C140C1828344438302C24344C59614C657DA1BEAEA195918D8D89898D8D8985857975756565615D +5D5D61616161615D595D5D545454595D61696569696969656159544C48443C383838383C4040484C +4C4C4848443C383C3C44444044444C5050504C4C48545D5D61656161656D6D6D69615450484C4844 +44404048484C504C50484440404040444450596165696D7175757571716D7165655D5959595D5D59 +5D5D5D5D5D5D59595D61656979757D8585898D8D89898D8991919DAEBEA17D654C65594C34242C30 +38403424140810141C2434405961615D5944383C3C403C40404048545D696D71757169594844403C +3C403C38383840545D61655948382C24201418202C38484030282834445961595D81A1BEAE9D918D +898D8589898D8D8D8581797D756D6161595D615D5D5D6159595D5D5959595961696D696965696561 +59544C48444038383834383C3C444848484C4C4444443C40404444444044484C5050505050545961 +65615D65696D716D695D544C4C484844484448484850504C4C484440404040444850595D6161696D +7171716D716D716D655D5D5D5D5D5D5D595D5D59595D595961616D757D7D85858D8D8D8989858985 +8D8D9DAEBAA17D5D59615944342828303C4838281C14101C1C2434445965615D54403838383C403C +3C40444859697175797169503C3C38383C383834343C4850595D5D504C44382C281C242C2C40443C +342820303C54615D6579A1BAAE9D918D858985858D899189898981817979695D615D5D595D59595D +615D5D595D595D656D6D65656965615D5D50504840403C3434383834344044484C4C4C4844403C40 +404444404440484C545454505054595D61616165696D7171695D504C4C484C484844484848505050 +4C4844383C40404448505959616565696D696D6D6D6D75716D615D615D5D5D5D59545959545D5D5D +5D69797D81818989898D8989858589858D919DA9BA9D79655D61543C302028343C443C2828201820 +28384048505D5D59504C3C343438383C38383C3C506971797575614C403030303434343434445050 +545D59545450443C2C283438383C3C38382824383C505D5D6975A1B6B2A995898985898585898D8D +898581818979796965615D5D595D5D5D6161615D5D5D616569696D656961615D5D544C484040403C +34343434343840484C484C484844444040444444404444485454505959595D5D6161656D716D7171 +655D544C4C4C4C48484C4C4C4C5050504C4440383C4044485459595D616565696969696D6D71716D +696161616161616159595D595D5D616169797D898585858989898985858985898995A9B2B6A17569 +5D61503C34242434383C3834342C242834404C505459615450504434343434343030303C4C617175 +6D615D5040302C30302C303034484C545459595454504440383C40403C3C3430302C2C403C4C5959 +6D7199B2B2A9918989858D858581858589898985898581796D615D615D5D5D5D6165696561616161 +696D69656165655D5D5448444044403C3C34383030383C44484C4C4C48444444444440444044484C +50595959595D5D5D5D61696D7175716D6961544C4C484C4C484C4C4C505050504C403C3838444850 +54595D5D5D61616969696965696D6D6D65616161656561615D595D5D5D5D616D757D858985898989 +85858181858D85898991AEB2B699756D595D4C3C3C282C302C343C3C3C4038343C444C5054595954 +544C483430302C30302C30405059616D5D54545044342C2828282C2C3C444C4C50504850504C4C48 +4448484444402C282C2C344444485054697181A9A9A58D8585818985817D818181898D8989858181 +716D61615D5D5D5D65656961615D5D61656561616165615D5450484444403C403C34302C2C34343C +4448484C444444404044403C444448484C545959595D61595965696D71716D696965545044484C48 +484C4C4C54504C4C443C3C383840485059595D5D5D5D6161656969656565696561615D6161656561 +5D5D5D5D615D69717D818589898989817D7D7D81858981858991A9A9AE81756959504C4444342C28 +28283C444044444044484C4C4C4850504C4C443C2C2C2828282C34445054505D4C54504848403428 +282C3034404048444C444044484C59595050544C48382C28282C3C44484C484C616D79A5A5A58D85 +85858185817D79817D899189858985857D796D615D615D61656969615D5D6161616961656561615D +5450504C4440403C3C3830282830343C4040484C4848444040404040444448484C5059595D5D6559 +5969697171716D69696559504C484848484C505059504C48443C38343844505459595D5D61616165 +65696569696569656161595D61656565655D615D616D757D85818985898D857D7D79798185818585 +8991A9A5A97D716550484C48483C2C28242C34484C544C5054544C484440444C44484040302C2C28 +283040484850504C4444484C444440302C2C30383C44444C48383C3844505454595D544C4C3C2C28 +28283C4848504044596979A1A1A58D85818181817D7D7D7D81818D8D858985898585756965616161 +61656561595D6169656969656561615D5454504C48403C40403C30282830343C384044444448483C +3C3C444044444C505054595D5D615D5959616D7175716D6D6D695D544C4C48444450505050504C44 +44403C383844545D59595D61615D5D616569656969696D65695D5D59616565616161616569758181 +898589858D8D81817D797D7D81818181858DA5A1A1796D5D4444544C483C2828282C3C4C4C545D54 +54505040383C38484C48443C382C2C2C304044444C484044384040484844403C3034303C4044444C +4038383C444C4C4C545D59545040302420283C4C50503C3C5465759999A191857D7D7D7D7D7D8181 +817D858985898D898985817169615D65615D655D5D656565696D69656965615D595050504C484040 +4038382C28303438383C44444448443C3C3C40444044484C5059595D61655D5D5D6571757571716D +69656154504848444850504C504C48444440404044505459595D6161615D5D616565696D69696D69 +6565655D59615D61655D6169717D85898989898589817D81817D7D7D7D7D7D7D8591A19D99756959 +3C405450503C282024304050545959504C4C48443C383C444C4844403C3034303C40444848404038 +3C4044404044404040343C40404444443C3C403C3C44504C5461655D504438281C28404C59503C34 +4C656D91919D9D857D797D81818181857D7D7D7D898D91919189857D6D655D616161616161656965 +69696D69656565615D595954504C4844403C38342C30383C3C3C40444044404040403C4040444C50 +54595D616565616161656D75797571716D6D6154504C484848484C4C505048484C4844444C545959 +5D61615D6165656569696D69696D6D6D6969656161615D61615D656D7981858D918D8D85817D7D81 +858181817D7D7981899D9D95916D65503840505950402C20283844505D616150484C403C4044403C +48484444443C3440403C44404044403C383C4848403C3C383C383C404444443C3C4040403C383844 +59616561543C34282424444859544034405D657D899999857D79797D8581817D7D79757D7D8D9191 +8D89817971655D615D5D6165656569656569696561656161615D595954504C48403C3C3834303438 +383C3C4040443C3C403C3C404044484C5454595D65655D6161657179757171716D656159504C4848 +48484C4C4C4C4C484C4C4C4C54545959616161616165656965696D696969696965696565655D5D59 +615D6571798189898D918D7D7D75797D7D7D81817D79797D85999D8981695D443440545D4C482424 +2C34405461656159443838404040403C40444444403C3838383C4040484840383038404848403C40 +3C3C40404448484444403C3C34302C38545D6565544038303028404C545040343C54617989959D81 +7D79797D7D8581757D7D79798185898989897D756D69656565616565696969696565656161616165 +655D5D595454504C483C3C3C3C38383838383C4040403C3C3C3C383C3C44444C50545D6165656565 +656971757571716D69656159504C4C4C48484C4C504C4C505050545459595961656561616565696D +6D696965656969696969696561615D656565696D757D89898985817D797979797581817D7D7D7981 +819D95897965593C3440545450402C343438445965655D59382C303440404444444C4844403C3C3C +403C3C4448403830303438444844403C384040485054504444403C3430302C384C595D6150443C3C +3838404854484030384861758D959D85817D797D7D81817579797575797D81858985797571717169 +65696565696969696965656165656565655D5D5D5D5954504C44404444403C34343C404040403C3C +3C3C3C383C4048484C545D5D61696D717175757571756D6965655D5D5450504C484C4C5050505050 +50595D61655D6165696565656565656D6D6969696565696D69696969616165616571717175798185 +817D797575757579758181817D797D81859D959175654C3834404C544C403C3840404854615D594C +382C30303840444848505450484040383C404044443834303038384044444038304048505D5D5450 +483C383834303040444C5959504C48483C404C445448403438405D6D89959D95817D757D81817D7D +79797575757575797D7D7D7971717171696D6D6D696D69696D696969616161656D656161615D5954 +504C4848484C4038383C404040403C3C3C3C38383C4048484C4C59615D7179797981796D75716969 +6565615D595454504C4C545450545459596169696965656969656565696969716D69696569696D6D +69696D6969696D697171717179797D7975757575717579797D81858181798185959D9589715D4038 +34404C54444C443C484C50545D594C4440303038383C40484C505D5D50484030344044443C383834 +2C3034384044403C4048545454595448403C3C383430303C40405054505450483C484C4C54483C38 +3C3C5065758D99998181797D81857D7D71757571716D6D71757D797975757579756D6D6D696D6969 +6969696965656165656565655D595954545050504C4C443C3C38383C3C40383C38383C383C404044 +4850545961717D818585796D6D696D656561615D5D5D5954544C5454545454595D656D6D6D6D6569 +69656165696969696D69696569696D6D6D696D69696969757571717575757D716D6D6D7171757575 +7D818585817D858199998D7565543C3C384048544C4C483C48505450595040403C303034383C3C40 +48545450545448403C4044403834302C283030383C40403C4C545054594C4C484040403C40303038 +3C40444450505450484C50545448403440405061698D9595817D7D7D81817975717171716D716971 +7175797579757D797D75716D6D69696569656169656561696965656561615D595450595450544C44 +3C38383838404038343838383C3C4444485050546579818989897D716969696561615D615D5D5954 +54595D5454545459656D757171716965656569656969696D6D6569696D65696D69696D6D69697179 +757975797575756D6D69716D717171757979818181817D8199958D69615040403440485454504C48 +505450504848443C383430403C4040404448485954505450404044403C3430282C283038383C4454 +59545450484040484844403C38343C404044443840484C4C4C5454595048443C4848505965899999 +897D7D7579797571716D6D716D6D6D71716D7575797D7D7D858175716D6D6D616561616565616165 +6D69656165615D59545D5D5D59544C4C40383834383C404038383838383C4444484C4C596D798591 +958D7D756969656161615D595D615D59615D595450595461696D757979756D656565696965696D6D +6965656965616565656D6D6D717179817D7D7D797571696D6D696D6D71716D7171757979797D818D +999D8965594C48443C4444505454544C505048403C444840403C34383C404444443C3C485059545D +54443C3C3C30282C282C30384040485959595950403840444448403C34343C404048443C3C444C4C +48595D5D544444444C5050546585A1A199857979756D6D65696971717171716D7169717579798181 +85897D7571716D6965655D61656565656D69696965656159595D6565615D5454483C3834383C3C40 +34383C3C403C404848484C61718185919589857D6D65656165615D615D615D596161595954595965 +71757D7D7D797169656569696969696D6965696961616969696D717175798581818179797571696D +696D6D6D7171696D69717175797D8599A1A1856550504C4C40404050595D59484C50483C40484C44 +444038343C404840403C384050595D5D5D48404438342C28282C303C4444485461545048443C343C +403C403C3434404040483C38383C44485059545D54484440545D59545D7999A59589797169656965 +69696D6D696D6D6D6D6D6D6971757D8185858179756D6D6569616161656165656569696965655D59 +5D616565656159544C4038383838383C3C3C3838383C404444484C61717D859999897D796D656561 +61615959595D6161615D595454595D69717581817D7571696161696969656969696965656161656D +696D7175797D8585817D7571696D696969696969696D6969696D656971798995A199755D54595D54 +404044505D54595048443C383C404844444438343C403C403830384048505961594C44443C302C28 +30343C3C40404C505954594C4440342C3838383834384040484438343438383C4C5D616554504840 +54656D6154718DA19181756965616569656D6969696965696D6D656D6D7D818185858179796D6D69 +6565616165616165616569696561615D656569696D695D5950483C343434383C383C38383C3C4040 +4C485465757D859195897D79716965655D615D5D59596161615D5454505D6569757981857975716D +656565656965696569656565616169696D7171797D81818581817D6D6D6569696561656565656D65 +6965656969758191A18D6D545D6D655440484C5065615D4C403C3838383C484C44443C383C383834 +2C303C4048595459504C4040403C30303C40403C3C484C4C505D59504C4438302830343034444844 +48443C38383834344459656D655D544C5D6971714C697D9991857969656561656569696965656569 +696961716D7985858989857D7D756D6D6965696561656165616569656565616169696D71716D6965 +59504034343434383C3C3C383C4044484C505D6D757D858D9189817D756D69696561615D595D5D61 +5D545950545D69757D8181817D7979716965696565696565656569616569696D716D797D8185898D +8985796D6D616565615D616565656965656565696D798591997D694C7171695D485059616D655948 +38383C3C3C40484C484C4838343430282C3840484C5959504C4C483C3C40403C4C403C383844484C +4C59595048443C342820282C304448484C4438383838342C3C59617169695D505D6D6D7954546989 +918979696161656165656165616161656569656565717D89898989857D757169696965696561615D +615D616161615D61696D6D7175716D695D50483C343434383C3C3C383C40444848506171757D8985 +89897D79796D65616161595959595D615D545454596169758181817D7D7979716961656561615D61 +6161656569696D6D6D7579818585898989817165616565615D5D5D61616161656165656569798991 +89655450756D6959505965656D61543C2C3438383C3C48504C4C48342C282024303840485054544C +4C484438383C404C4C4840343844484C545D545048403C342C202028344048504C40383C3C3C342C +3C54656D69695950596571755D5D65859189756965656165615D61616161616961696565616D797D +858581817D7D7971656D6D6D6965615D615D5D655D6161616D6D71757171716D655D4C4038383838 +3C4040404040484C485969717579817D818179797575696165615D5D5D5D5D5D5959595961657179 +81817D797D7975716961615D6161616161656569696D6D6971797D818581858581796D656565695D +615D595D5D5D5961656169656975859185655959716D6559505D69696961543C30343C3C403C4450 +544C44382820202830384048505059504C4848383844484C443C4040484C50545D59505044403C34 +2C2420203040485454443C3C3838343448505D6561616154595D656D59656985918D7D6D65656565 +615D595D5D5D5D6561616969656D758181817D7D7D7979756D6D6D6D6D65615D5D615D6161616165 +6D757571717171756D615448403C3C40404044444444484C5061697171797D7D7D7D797575716D65 +615D5D5D61616161615D5D5D656D757D817D7975757D79756961615D6161615D5D656569696D6D6D +75797D7D7D7D818181756D656965615D615959595959595D656565696D7D898D816965596D655D5D +5461615D615D4C4834343C3C3C404859594C4434201C202C30383C405050595D54504C4840404044 +383C404C595D5D5459504C4C48403C34302820202C3848504C444440403C38384C4C545D59545450 +595D5D6D5D696D798D8D89716565615D5D5D595D615D6165615D615D6571797D7D85817979757975 +71696565696561615D5D5D61615D656D6D6D757571717175716D5D544844403C404444484444484C +54616971757979797975797575716D6561615D5D61615D59596161656D757D7D7D79757579797575 +7165616161615D5D6161616565656D757979797D797D857D7D7971656161595D615959595959595D +5D6165697189898D796D696171615D595054545D59504C4838383C4040484850544C3C302420282C +3438404448484C54545D5D594C403C383038445061696561544C4C4848403C34302C20203438404C +48444C48484038384C485050504C484C5D6165695D657179918D8D757165615D5D5D59595D616161 +616161616971797D7D797D757571797571716961656561616159595D5D61656D71757D7975757579 +796D6561544844404448484448484C505D656D6D757979757179757571716D6961615D5D5D61615D +59616569717579817D7579757D7D79757165615D615D5D65656561615D69717579797579797D797D +7D7D756961615D5D5D59595454595D5D5D656571758989917971655D6965655D4C484C504C504848 +383840484850484C50443C382420283034384044484848506165696154443830383440595D656565 +594C48444448444034302830343C40403C4448504C4038404C484C4440444440596565655D617175 +959591796D6561616161615D616561655D5D61616571797D7575757575757575757169615D5D6161 +61615D6165656971717579757575717575716D65615D50484448484848505059616971717575756D +6D7171757171696965615D595D5D59595D656D717179797D7975757575797571756D656565616565 +65615D5D6169717979757975797579798179756965615D595D595D5D596161616161656979919195 +7571615D6565655944444440444C44483C38404C504C484448444038302C30343C40444444444854 +6561615D594034383C3C40485061696154544C48444848403C38343C3C4044443C4848484840383C +44444C443C3C403C505D6561545971798D99959171695D656165616165696561615D61616975757D +75716D6D717575797975716D615D5D61655D615D61696D71757D79757575717171716D6D61615D50 +4C5050505050546169696D757171716D6D6D6D717571696D69615D595D595D595D696D7179797979 +7171757575797D75757169616161616565615D616D7175797D757575717171757D7979696561595D +5D5D61615D616161616169719195998D7571595465655D503C403C3C444840403C3440484C4C4C40 +484C44404034383C40444844484C545461655D5048403C3C3C38444448505D5D545459504C484C40 +403C404448484C44443C3C443C3C384044445040383034384C59616950506D7989A1999979695D61 +656565656569656565655D61697175757571716D7179797979756D6D655D61655D615D6165656D75 +7579757575757171716D716D6969615950504C5054505965696D717971716D6969696D6D75716D6D +6D6559595954545961697175797975757171757571757975756D65656561656165615D656D6D7979 +797979716D7171757975756D615D61616161656165656161615D69759599A185796D50506961594C +38343034404C40403C343C3C444040484C504C4C484040403C4C484C50545454595D50444040383C +343C44484C4C5050545454595950484444404C54595450444038302C34343844485050403C342C30 +4854616559506579859D9999857569616565656D616969656165656975797575756D6D6D69757975 +79756D6D696559616565656565696D71757575757575716D716D7171696D69655954505454545D65 +6D71797571716D6969696D717575716D69695D5D59595961696D75757D797171716D717171757571 +6D696565696D6969655D65696D6D797D797D756D6D6D6D75797979756D6565616165655D69656565 +6169758599999D8579655059656154482C2C343840504C444434303430343C444C54595D59504444 +44484C59595454504C4C4C4848443C342C383C484C504C484850505050504C4C4848545D59594C40 +38302824282C3044505450403C302C243C4C5965595461798191999D917571656565696969656D65 +6569656975757971756D6D65696D7579797971696569616165656561616D716D7571696D6D717171 +6D6D6D6D6D6D69655D545054545965696D7575716D6D656561656D69717575716D6D615959545961 +696D71757575717171716D6969656D6D696D696565696969656569656971797D7D796D6965696D75 +757D7575696569656569616965696565657175919D998D7D7961505965594C3C2428303C4050504C +40302C28242C344044505D595D5448484C4C50505450504844484C48443C382C2C383C444C4C4848 +48484C50504C5059544C595D595D4C3C2C28242824242C404C5950443C302C24344859655D596179 +81899DA1A181757169696D6D6D69696565696565757175716D6D6D6D6D7171757D75716D6D6D6561 +65616161656D71716D6D696D696D6D6D6D696D6D6D716D69655D5450545D65696D7575716D6D6565 +656569696D6D756D6D6D615954596165696D757579716D6D6D6D6969696569696D6D696565656565 +65696D696D71797D7971716D6D696D6D717575756565696561656569696D6D6D757981A1A19D8581 +755D545D655944342428303C404C5948382824242C282C3440505D5D5D59505459504C504C4C4844 +444448484038382C343838404448484848484C484C505054545D61595D594838302C2828281C2040 +4850544C40342C283C445965615D6575818999A9A99D857975717169696D696D6561656D71717171 +69696D716D7175797D797971656969696961655D616D6D71756D6D716D71716D6D696D6D6D71716D +6565594C545D69696D717171716D696565696D716D6D716D6D6D6159545D69656D71757171756D6D +716D71696D6969716D656961616965696D6969656D7579817975716D71696969717571716D696165 +69656D65697171757985A1A9A999858171615D6161594438282C343C4850504440201C28282C3034 +3C4C595D59615D5954504C4C484C4444444444443C38343434303438403C484C4844484C4844484C +4C596159544C443C30302C24202028384450484840383030404854655D616571798589A5AEA19181 +797575716D6D6569616161656D6D6D6D65696D716D6D7575757975716969656165615D5D61697175 +716D716D6D6D6D6D69696D65696D696969656150546165696D6D696D6D6D6D6161696D6D6D69696D +6969655959656965696D71696571696D6D6D6D6D6D6D696D6D696561656165696565656971757D79 +75756D6D6D6969616971716D69656565696569696D75757D8191A5AEA58985796D615D5961544840 +3030343C44444C403428202428303434404450545961594C4C4844484C4844444444383C34343034 +383434383C3C48484C4C4844443C3C403C50545D61544840342C2C282424303C3C50504848483C3C +4454545D59595D71757D89A1B6AEA18D817979756D6D69656561656D6D6D6D6D6D717169696D716D +757575756D69656565656161656D717579717571696D6D716D69696569696D6D696561595D5D6969 +6D6D6D6D6D6D6D69696D6D6D6D69696D696D61615D6569656D6D6D6965696D71716D6D6971716D75 +716D6969656569696565656D7579757571716D6D696D6D696D6D71716D6565656569696D75797981 +8DA1AEB6A1897D75715D5954595450443C384844444C4C3C3C2C24242C303038404C59615D595040 +403C3C444448484844403838383430343C34343834404444444444403C383028304450595D544844 +38302C2C282434404450484C444844444C54595D4C59596D71797D8DAEB2A595857D7979716D6565 +61616169696D716D6D6D6D6969696D696D716D71696D696965656561696D71797575756D6D6D7171 +696965656165696965655D5D615D656969656D6D696D696969696D6D6D6965696965616561616565 +696D69616165696D716D6D696D6D7171716D696965696D696D696969716D756D6D6D696965696969 +6D71716D6D65616165656D7179797D8995A5B6AE8D7D7571695454485D5450484040444048444C44 +3C3024282C30343C484C595D595048302C343C3C40444044403C38303430343C383838383C404040 +3C3C3C3C38302824304048595D50504C44382C2C242438444C54484448484C4C545959614C505465 +6D797581A1B6AE998D817D7D7971615D5D61616D6D716D6969696D6965696565696D6D716D696965 +6565696D7175797D7979796D71716D716561615D5D616569696561656561616565656969696D6969 +6969716D6965616165616569696169696969655D5D6165696D6D716D6D757171757171716D6D6969 +6969696D7171716D6969696569696169696D756D6D656561616571797D7D858D9DB2BAA18175756D +61504C485D54544C48444444404450484038242430303C485054546159484030282C303C3C383838 +3C3838343434383844444034383834383434342C2C342C2C3C40404C59544C484C40342828283C44 +54504844404448485D5D6565504C4C5D697971758DAEB6A59589817D7D716D5D595D5D65696D716D +6D6561615D5D6569656969656D716D6969697175797D81817D7975716D7171696965615D5D616169 +69616569696961655D656565696969696969696D6565655D696569716D6565696961615D5D616565 +6971716D6D717171797975797571696D6D6D6D6D69696D696969615D615D6169696D6D6D6561615D +6171757D7D858D99AEBAB28D7971756559444848615D59544444403C40445050443C2C2C2C384450 +4C5054594C44403C303038302C30303034303034303C40445450443030303434342C302C2C302830 +3C3C44444848504C484C44382C303C4450504C443C3C44445969696D594C3C4C656D716D859DB2AE +A1918D8581756D6561595D65656D6D616161615D5D5D6165696565696D6D69696D6D717D81818181 +817D7D7971716D69615D615D5D61656969616965696D69615D6565656569656565696D696565615D +656D6D6D696D65696965615D595D5D656D6D71717579757579797D7D7D716D6D69696D6D6D696D6D +6961615D5D5D5D5D5D696965695D5D656D717981859195A5B2B6A18971716D614C38485065656150 +4040343840484C50444030303C484C4C4C544C4C48443C3C342C3430302C2C3030302C2C2C405054 +655D48343028282C282C283028302C343C40444844404040484850483C3844485450484440383C40 +59656D6D544C3C405D6571657D8DA5B2B29D91897D796D69655D545D616565616565615D5D5D6161 +6161656565656D71716D758585898581817D7D797575716D6961595D5D61616561656D65696D6D61 +656569656165615D5D656969656565616571716D6D6D696561615D5D595961697175757575797575 +757D858181756D6D716D65656965656565615D5D595D615D5D6161615D5961656D7179818D95A5B6 +BAAE91816971655D3C38485069695D50383434383C445054444438404C504C48444044444C444040 +3430302C302828242824242C304459656159483828282C302C2C2C302C2C2C384040484C3C403C38 +404C4C4C44445050544C4844403C38345061656D5D4C403C50616D657585A1A9A9A1958D85796D65 +5D5D5D5D5D6569655D65615D5D595D6161656161656569717171798585898D81817D7D7D7571716D +6969615D61615D5D5D6D716D6D756D61616561616165655D6165696961616561656D757175757161 +5D5D5D5D595D6569717575757D7D79797985858185796D716D65656965656965655D5D5959595D59 +6161615D5D61616169717D899199A9B2B2A98D796D716150383C4854695D59483034383840444854 +5050484850504C443C3C403C4C484440382C30303028282C2C28242434445961594C4038282C302C +2C282C303430343C40404C4840403C403C40484C484C59615D4C4444403838344454656D5950403C +4C596D61657989A5A5A5998D857D6D655D5D61655D6161656161595D5D5D595D6165616565656969 +71717989899189857D79797979716D6D696969655D5D5D59616D717171756D6561615D5D61616161 +6161656965616165656D757579797165595D595961616569717575797D7975798181898585797171 +696565656561656561595D5959545D595D5D615D6561616169718189959DAEAEA99181696971594C +3C404C546961503C30343438404448596159504C504C4440444040444C5044443C343438302C282C +2C2C2828343C4C5948403C3828282C30302C2C3034303844444C544C484440404444404044505961 +695D4C443C3C3C34444C5961504C48404C5461655D717D9D9DA1918D898175656161616569656161 +5D615D5D5959595D5D6161656D656969697581858D918985817D79797571716D69696565615D5D59 +6571757979716D656961615D61615D61615D616565656569656D71797D7D75695D5D595D61616165 +6D7575797979797D81858D89817D75656561656D656165615D595959595959545D5D656969656565 +6979858D9195A5A5A18175616965544C4044484C5D54484030343438404C59696159544844444848 +444444484C544C48483C343834302C2C2C282828383C40443C3434342C24242C3434303434344044 +4850544C44404048484848484450596165615948403C3430445054594C4440404859595D5461697D +9199A18D8D857971616169656D69615D61615D595D5054595D616165696965656171858991918985 +858179757571716965656969616159596571797D79716D6969655D5D5D5D616161615D616565696D +696D7179817D796959595D5D616161656971757975797D817D858D8D85816D615D61696965616561 +5D59545D59595959545D696D696965657581899191A5A19985716959615D59484040404850504C40 +2C30343C44596165615D54484C4C4C4C4C4444485059544C48443838383034302C24202C3030343C +4038302C282420282C2C2C3438404C505459544C4C4840444C4C484844505961655959544C403C3C +485054503C3C3C3C4C59544C40505D6D91999D9189897D796D65716D716D696161595D5459545054 +5961656569696561616D818D9191858585857D757575716D65696569615D595D6971757D7D716D6D +6D69615D5D5D5D61615D5D6165696D6D6D71757D7D79796D61595D5D656165656D71797575797D81 +8185918D8979695D5D6169696565615D595054595459545D5D656D716D7169717D81898D95A59D95 +716559485059594C383C38384C5048443434384850545965615D54484C5050504840485050595954 +5450483C34302C2C242020282C30343C3838342C2820181C242828303C4859595D5D54504C484440 +444C504C4C59545954595954544C483C444C50503C2C3430405459503C445D657D91999D89857D7D +796D757571756D65655D5D5454545054595D61616165615D5D6D7989958D8185858581756D756D65 +6561656965615D656D75797D756D6969716D6561595D595D5D5D6161696D71716D7171797D7D7971 +695D616161616165656D7571757D8181818189918575695D595D6161616565595954545454545961 +6169717175756D7D8181898DA1A19585696148405059544030342C38484C48403440485050545954 +59595D505054504844484C50545961615D614C40342C2C241C1820282C3438383038383830281C14 +20242C343C485D65696559504C444C48404C504C50615D61544C504C48484C4450504C4834282830 +40505D59443C5061718D99A19989817D797979797979756D6D655D59545054545D5D5D616561615D +656D7581918D85858185817D71716965696165696565696D7175797D756D7171716D65655D5D5D5D +5D6161616D6D7175757571757D7D79757165616165615D69656D7175797D817D81858D9181756D61 +545D6161616161615954545959596169697175757979797D81858D99A19D917565594048595D5040 +30282834444C48483C4444484C504C54615D6554505450444C504850545D696D69614C4034302820 +142028303838383030383C34342C241C24242428344C5D5D6969615D50504C4C444448444C616161 +50443C40444444404C4C484830282828344C545D4C3C485D6979919D9989857D797D817D7D79796D +696D655D5454505059595D5D615D595D616D757D85858181817D7D7D796D61616561656961616D71 +757979756D6D6D71716569655D5D5D61616161656D6D6D7575716D6D797D8179716D5D5D61616165 +61656D797D79797D818189857D71695D5454595D5D615D5D54545454596165656975757D7D818179 +81898D9DA195816D614C40505D544C34282828304848484C3C3C40403C38445061616550484C4848 +4C5054545D656D6D61615038282424281C242C34343C383034383C3C3830342C2C2C282834485461 +6969615D595954504C5048444C5D6161504438342C38383844545D54342C2C282840505450444459 +6D7589999D99898579818589857D797571716D695D5954505454595D595D54616971757D81818181 +817D797975716561615D65656165717179797D71716D7175716D6969696161616165656D71717175 +75756D717581817D756D655D61615D616165757579797D7D818181817D756D655950545459595959 +5054595965696D6D717579818985857D85899DA1998D79715D484C545950402C2C2C303450595440 +3434342C3034445061615D4C4448504C50595D5D61656D696154483428282C2C2C343034383C3434 +30343C403C3C38342C2C303038484C5D65655959595D5959544C404048545D614C3C2C2C28282C34 +4450545438302C2C283C48544C4448506169718D9999898981898991917D797D757571696154504C +5054545954595961696D71757575797D7D7D7D79757565615D5D61615D6D7171757D757171697175 +71696965696561616561656D6D7175797D756D7575798179756D69595D5D59595D657571797D797D +7D7D79757971696559505450545054544C505461696D717179757D8D91898985898D9D9D91756D65 +5950485054483C2C2C2C303C54505040302828242C2C3C4C615D50443C404C54595D615D595D6565 +5D4C48342C2C303038383C3C403834303C40404844403C3C34303430404C5461655D59595D595454 +5950483C4C4C5050443C3028282C24283850595D403C302C283C404C5044405461656D7D8D999991 +8991918D9189818179797971655D544C50545059545D5D656D6979796D75757581797D7971716969 +5D59615D65717575757D757571717575716D6569696D6965696D716D717179797979757175758179 +79716D61595D545D65697171797D797D757979717D7969655D545450545054504C545D656D757575 +7D7D89919195918D91999D9581716961594448544C443C2C3030404461594C382824282828303C44 +50504C483C444C545454595D59595D6561544C40303430343C40404448403C3C4848444848444444 +38383834485065696154504C5050545450443C3C484C50504438382C2C2C24243448545444443C38 +2C3844484848444C6161616D7D91999995959595919185817979756D69615D545050545959595D65 +6D6D75796D6D6D6D757D757975716D6D61595959697175757979757971717975716D696969717169 +6D71756D6D757979797971717575797D79757165595954616969717175797D757171717179756969 +5D54545454505050545D61696D7175797D858D9195999595999D95816D6565614C484C484C443C2C +3C40484854504434242428282C34384450504848383C444C5050505050505461696550443438383C +44444448484048484C4C4C504C4844403C3C3840506165695D545048443C44403C3834384C545D50 +443C342C282428203440485048403C403C3C40484C404444545D615D6D81999995999999958D8985 +7D7575716D655D5D5950505459595D697171716D6969696D7171797575716D69655D545D69717579 +7D797575757575756D6D69696D717571717971716D717575757975757171757D79716D655D545D61 +65696D7171797571716D6D6D7175716D61545054505050595D5D656D6D71717D8189899599999995 +9999856D5D6161544848444C48443C404440444C54484034202824282C343C445059504834303438 +3C403C444850545969655D4C40383C3C4044484C504C4C4C5454595454504C4C4C4840484C596169 +59544C403C383434343C343448505D594C4038342C24282838444C4C4044403C3C40504C4C40403C +5059615461798D99A1A1999D95918581817979756D6D656161595459595D656D6D716D696965696D +7571757575716D6D65655D616D7171797D7D797575757571716D6971717575797979757575717575 +75797571717575797971716D615D656569696D717575717571716D6D7175716D695D545054545D61 +61656D6D7175757D818591959D99A5A1998D796150615950404044504C5444404044484454504438 +282824283038404C595D4C443030343030303438404C5459655D54484440484C504C545954595454 +595D615D5D5D595450483C444C596165594C403C38343434302C2434484C5954504840382C242024 +38444C54403C383C3C3C545959443C343C54595450697D91A1B2A19D959189817D7D79756D6D6969 +6565615D595D656D716D69656565656D7171717575756D6D69656569697175797979797175757175 +6D696D71757579818179797975757175797575756D717175797171696965656969696D71716D7175 +7169696D6D6D716D69615954595D656569696D71757579797D859195A1A5B2A5957D65505459543C +344044595D594040403C40445950483C282024303840485054594C443020242C2C2C303438404854 +615D5448403C48505459615D5D615D5D6161656161615959544C444444485454504C443830303030 +302C2830384050504C48403834281C1C3444505444383030383C5059615440382C404C5048596989 +9DAEA9A1958D8981797D79797171716D6D6961615D5465696D6D6561616565696D696D6D71716969 +6561696D6D6D7575757171717571756D65656D7171757D85857D757575756D6D7579757169696D6D +71756D6D716D656569656D6D6D6D6971716D6D65696D7169656150545D6169696D6D757179757979 +81858D95A1AEB2A18D6D5944504C402C344054615954403C383840485954483820202C3438404850 +50503C342C2024282828282C3440484C5050484440404C54595D6165656561617169656561655D59 +50484848444C5454544C443C34302C2C2C2C2C30343C444044443C3430302C203444505D48403830 +34344C5D615D4C4030383C4C444C6581A1AEB2A99991898581817D7575757571716D6D6969656569 +6D69655D5D61656D69696D6D6D6D696965697171757575717175717171716D696565696D75798185 +898179797171716D7575716D6D6D6D697175757575756969696969696D6D6D71756D696565696D6D +6561616165696D716D75757575797D8185859199A9B6B2A1816548404838342C3C485961594C3834 +3440484C6554483C24303434343C444444443C302C24242828282C2C383C444C505048444448484C +595D656169696971696965615D5D595448445054505954505048403C34302C282824243438383C34 +38383434302C28243848545D4C443C3C343040545D59484438383840444059719DA9B6B29D918985 +857D797575797575717171716D716D656D6961615D615D616965696965696965656D7D79797D7571 +6D6D6D6D6D6D69656161696971798181858179756D716D6D71716D6D696965656D757D7D797D6D65 +696965616569696D6D65696569656D6D65696D6569696D6D71757975757979818589919DB2B6A9A1 +755940403C3434344044545D5040343840404C54655D50402C2C30343438383C343C38342C1C2020 +24282C30343840484C50544C504C444854595D6165656969656154505050545D54545D5950595D54 +5440383430302C2C2824283034383C3030302C2C2C2828243C485965504C48383434404859594844 +3C404840403C4C5D85A9AEB6A599918985817D7D7979817575757171717579716D695D5D5D5D5D61 +61696969656165696575797D8181796D6D696D6D696965615D5D6165717D858181857D7169696969 +6D6D6D6969656165697985817D79756569655D6165696D69696965656565696D7175716969697171 +757D75797D797D81858D95A5B6B2A985614C40403C443C3840445050483C34383C4C505969615040 +2C2C303430303430343C38302C201C20242428282C30384C4C595950595954545D54505054596569 +4C50505050504C50505461655D5D5D505048443830282C2C28202430343838303430302824242428 +38445465594C4C4040344050504C4444404050504838405D759DB2AEA99999898585817D81797979 +7975757171797D797569615D5D595D6165696965656561656D7979818181796D656565656565615D +5D5D5D657181818585817D716965696969696561615D6161697985858179796D655D61656569696D +6D69656565656975797975716D7171757975757D797D8181899599A9AEB29D755D403848504C383C +4040484C4C3C34404450545D6D5D4C402C2C2C2C2C343438343838302C201C20242424283038404C +4C54595961615450504C505050545050404040404444484C50596561615D5D595448443C342C2C2C +28242430343834343028302C282020243440546154504C44403C44505054444044405059594C3850 +7181A1A9A9A59D958985817D7D7D757571757575798585858171615D59595961656969656161615D +6D797981857D7975696161615D595D595459616D717D8585858579716D65656161615D5959595961 +717981858179796D595D5D61656D6D696965616165697181818581797171716D7175797D79818189 +9599A5A9A9A1817150384C59594C3C3C3C404C4C4C443C4444505459655D483C2C2C282C34342C34 +3434383030201C202428242C303C445050595961616959504C48484444444044383838343434383C +4C596565695D545454504C443C382C2C28242834343C34302C302C302C2828202C38485450504C48 +48484C595D5D504440404C595D5D4C4C6575899DA5A59D998D8D8981817D75716D75757581858989 +8171695D5459595D616965655D59595D69757D7D857975756D655D5D5D59595459596171757D8185 +857D7971716961615D5D595954545D6571757D857D8175695D545959656569696561615D69717581 +898985817171756D7175797D7D85898D999DA5A59D8979654C4C5D5959483C3C3C48545454484448 +484C50545D504438283030343834343030343C343024202028282C343C4448505050596565655D4C +403C3838383C3C3830303430303030344054596165594C504C48484840403834302C2C3838403030 +2828242C303028283440484C484C4C4844444C5D69695D504C404459615D5059616D7D8595A5A5A1 +99918D85817D7571696D7179898D898D7D716D61595459595961615D5D5959616D757D857D797971 +6D695D5D5954544C5054697175797D8585797575756D5D5954595954545461656D797D7D857D756D +5D59595D5D5D6561616161616D7171818D89898579716D697171797D81898D95A1A5A99589817165 +59505D5D59403C484854616154484040484C4C4C504C483C34343838342C302C34304038342C2830 +30343C38404044484C4C54656559594034343434343834302C2C2C2C2C30302C40545459544C4444 +444444403C3C3C3C383840444040342C2828282C2C382C2C384C50594444404444444459656D695D +5048445059655D5D6175797D8199A9A5A19589857D7D75716D6969798989898D79756D655D595454 +595D5D5D54545D696D757D85797D75716965655D5054504C50596571797D81817D797979756D6159 +5454544C545D5D6169757D798581796D655954545D5D5D5D5D5D616969717979898989897969696D +717579798185919DA5A99981817D79655D5D65594C44444C5465655D54404040404048485D545444 +3838403434302C2C30344040403C3438383438383C3C4040444048545D59544430343430302C3030 +2C28282C2C2C2C2C404C545D5D4C443438403C38383C3C3434384850544C3C342C2C2C3038403834 +445459614844383C3C40445461696D69655950545961616561717D7D7D899DA9A59D8D817975756D +6D6D6571818D898979717169655D5954595D5D615954616D71717D7D7979756D6D6D6D655954544C +50616D71797D7D7D79797D7975716959545954545D656565697179797D7D757169615459615D615D +5D61656D6D71717D89898D8171696D716D7575757D8999A1A59D8D817D81796969656159544C5461 +656561594C3C3C383C38444C695D594C404044403834302C343C48544C4434343034383434383C38 +34444C5D5D54504030303030302C2C302824242824282C303C48595D5448443C3838302C30303434 +383C444C5050443C383434383840443C4C545D614C44403C383838485D69696165655D5961615D5D +5D6579797D818D95A19989857971716D6D6569757D818985796D6D696561615D54545D595059616D +757179716D75716D696D6D6961544C4C5465696D757D79757575797575716D5D5050505D61656561 +6971716D717971716D615954595D595D6165656D717171798589817D756D696D6D716D758185959D +918D817D7D7D6961616165655D5961615D61615444343434383C445065655D54484C444040383438 +3C444C4C4844383430302828283034343C4448545D59484034302C282C28282824242C2824242030 +3C48545D544C483C383C342C282C2C2C2C34485054504844403C40403C3C403C50596165544C4844 +3C403C40505D6559595D5D596565655D595D6D7179798189959991817D75756D6D656D7D79818581 +796D6D6D65655D615D545D595061656D71757569656D716D6D6D6D65655D4C545D65696D71797575 +71717575716D696554505D6161696965696D6D69697575716D656150595959616561696975716D79 +8185817D7D71696D6D7571797D89918D85817979756D5D59616969695D5D5959545D59483C343C38 +40444C5469696159484844444844404444444C504C483028282424282C303C383C484C545D544840 +342428282C2C282428282428282428304048545D5950443C38342C30303030302C30404854544C4C +444044444840444850596165595048484038383C4C54594C50484C485D6569695954596D75757585 +91999191897D757169696D7D7981817979716D6D69656161615D5D545061656971716D6965656D71 +717169656965615D6165696D6D75716D6D7175716D6D6D6961616161616169696D696565696D6D6D +69696554545D5D656565696D716D71797981817D81716D6D757179858D899189817175756D59545D +6D6D695D4C50484C48504C483830343C444850596965615D504C48504C4844484C4C5050443C2C28 +2C2C2C30302C34383C4450545D544C40302C282828242824282C28282C242834404854615D504444 +343030302C283434343C484C54504C4848484C4C4C48403C5061696D615448403C342C3444484C3C +383C3C40485D6975696554616D7D7579899D9D8D918175716D6D75797D797971716D716969696569 +65616154546565696D6D6565616569697175716969656D696565656D696D6D6D696D6D6D71696D69 +6D6D6165616D6D6D6965615D6565696D69656559546165696D696D6D6D71717171797D7D7D797571 +7579818D899595857571796D61546569756D614C403C38343844403C2C282C343C485461716D6559 +444C505454504C4C484C5050484438303030282C3030303844444C5D5D5048403428282C282C2828 +2C302C2C2C28303C40485459544C40403830302C3434383C3C4850505D5950444444444444443C40 +5059656D5D54483C342C24243844443C302C2C2C345065756D6D5D616D7579797D85A19989897D75 +71717D7D7D81716D6D696D6D696D69656965615D5D6165696D6965655D5D616571716D6D71717575 +6D696565656969696569696969696D7179756D6969696D6D61615D5D656565696965615D6165656D +65696D696D6D696D6D758181818179797D7D8989959D81757575756D655D6D71796554382C2C2C2C +38404034202024303848545D6D6961544848504C4C484848485054594C4C4438383434343034343C +44404C54595048443C302830302C302C3838342C30303840404C5054544C4444403C38383C3C3C3C +3C4C545D6154544C44403C3834302C344C5D65695048443C30303024304040403434242424385469 +6D695D5D717575757981899D9991897D79797D81817D756D6965616D69716D69656561656D655D69 +6D6565615D5D61616975717175797D7D796D65615D656565656565616569717D7D7D756D696D7169 +615D5D595D656169695D656D656169696D6D7169696165696D757D818181817D818D95999D817D75 +717575715D5D6D6D6D593C2828243034383C382C20282C2C384048506D6965503834383C40444848 +4C54545D595048383C383C3C3C3C404848444C5450504C40403830302C343834383C38343038444C +4850595459594C504C4840403C3C403C3C4850595D545048443C3830342828283C54656550484038 +302C3030384448443430282424304C596161615965757D79717D81859599918D858585818981756D +6969656165716D69696961656D6D69696561616161615961696D75797D8185818179695D5D596161 +656159616169798585858175717169655D595D615D61616569696D6D69656D6D6D7171655D5D6969 +6D7581898185898D91959D95857D796D797D7565596161655D50342828282C303C403C34282C282C +343C4854696559402C2C303838404048484C545D594C44383C403C4044445050544C595950545048 +4C44383038383C34403C3C404044444C505D5D5959595450504C443C403C3C383840485054505048 +3C38343430302C2C404C595D4C4C403430242C24344448483C342C28242C48545D5454545D6D7981 +79717D7D818D919195958985898175716D656565656D6D69696165696D716D71655D616161615961 +61696D81858989898179695959596165656159595D6D7D858D898581796965615D59615D5D615D65 +716D716D6969656D6D6D6D615D5D656D7179818985899995959591857D796D7581796D5D54545461 +544C30242C2C303844443C302024202C34404C4C5D594C442C343838383C4040484C4C544C443C38 +383C3C40404C5454545959595959594C4C4444403C3C3C3C4844484844485454595D5D595954504C +504C483C3C3838343040485050484C44443C4038302C2C2C3C4C596148403830302824202C404448 +3C38302C2828445459544C484C617979796D75797D858D919DA19989897D757171695D5D6169696D +655D6D6D7175757565615D615D5D5D6161656D7D8D8D8D8D8575695D545D6161615D59545D6D7985 +918D8D85796965615D5D5D5D5D5D6165757575716D7165696D6969615959657171757D898995A59D +95918981797169757975614C4C4C545D59482C2830303438403C38281C2028303038444861594C40 +303434343C444448444C48504C443C30343838403C4C50544C505459545959545054484044484444 +444444484C5459545D5D5954504C50484848443838403834344448545448484440403C3834303430 +404C595D504840383028201C283844483C3028242428445461594C48444C6975796D696D757D858D +9DA5A9A1897D79716D69615D5D6161616565696D757D7D716D65615D5D59615D6165757D89919191 +8575696159545D61615D5459616D798995958D857571655D5D5D5959595D656D717D7D796D6D6569 +65616559595D656D71797D899DA5A59D8D8981756D696D7975694C44484C59615948302C282C2C34 +403C3420141C2430384048505D594C40343838383C44444444484850504440343438403C3C48484C +48504C5050595D5D5459544C48444044444040484850505059595050504C4C5054504C483C443C34 +34444859484840403C403C3C3434343044545D61544C443C3C30282420303840342C242024283850 +61615048484050616D6D65696D71798599A5A5AEA1857D75756965615D61615D59656D7171797975 +71696D61595D61616569717D859195918575695D6161596161595D5D6169758995998D817971655D +5D5D5D595D69697175797971717169596161615D5D616571757D859DAEA5A5998579716D69656D6D +6150444848506165543C2C2824282C303830281C1C28303C3C444C54615D5444343C383840404040 +4044484854444034343C484048505454504C4C4C4C5054544C4C4C48443C3C403C38383C444C5050 +59544C4C484C505050545450484C4440444844504C4840443C403C3C343838384C59616959544C44 +4038342C2838404030201C181C28344C545950484C4C505D6165616169717575859DA5AEA5A19581 +7571696961615D5959696D717579757171716D6961595D616571757D898D999581756D696165615D +595D5D5D696D7585999D8D857D756D5D5D59595D656D717171757D797571695D5D5D615D65656D75 +8195A1A5A9A19D8579717169616165615D50504C48505959503830201C1C202C3C3C342028343840 +444C54596961594C383C3C383C3C403C444048484C4448403C444C4C50595450504C484848485054 +4C4C4C403C38383C3838403C484C4C4C4C44404040404444484C4C4C48444038404848504C4C4844 +44403C3C34343438485965715D595048404038382C3844483C241C140C20243C4C50484440444459 +616961595D61697579818DA5A9A1A19985796D69656159545D65696D797975756D6D6D6969615D61 +656D757D81899189817571656565615D5D5D5D61656D79818D95898179756D6159595D6565696D6D +75757979716D696159595D616569758195A1A1A9A18981797569615D5961696159484444484C5450 +402C24141820283840403428343440404850595D6D655948383434383C3C404044484C4C50484440 +3440444C504C4C4C444440404040404C4C4C4844383C38383C3C44445050545950403C3C30383430 +3C4044443C3C383840404C4C484C48484444443C3C4040404C5965715D59544C444440383440484C +403028241C2018283840444040403C48545D655D5D595D6975798189A1A9A5A59D85756D69615959 +6565656D71757575716D716D696D65656D7171798185857D7D756D6D696D656561616565696D7581 +81898581757171695D616965696D6D7175757575716D6D655D59616569718599A5A5A59D85817975 +6D5D54595D656159484044444448443C2C202420282C303C44443C30383C44445054595D7161544C +4040403C3C404044484848484C48403C34383C3C44484440343438343C3C40505450505044443C3C +4048484C595D5D59504844403C3830282C30343C38302828343C4844444844444444404040403C40 +4C5D656D6561615D5048443C38444C504C3834282830282834383C343434383C4C59615954505971 +75757D818199A5A9A5A191816D61595D6969656D6D6D797575757171716D71757571757981857D7D +797571716D6D6569696165696D6D757D81858581797571716D6965696D6D7175797D716D7169716D +615D5D69798D9DA5A5A199817D797575715950545961594C3C3C383838403C383030382C2C343848 +4C443C343C4048505D6165656D655D4C403C40403C4040404444444044483C34282830383C383430 +28303C4040484C5059595D544C484840444C4C505D616161544844403C38342C2C30343834281C20 +2C303C3C38343C3C40443C38383C3834485461696161616159544C4844485454504038302C34342C +383C40343028282C3C4C5959504C4C69757D7D75818189A19DA5A19589696169656969716D697175 +75716D7171757D817D79797D817D7571717175716D6D6D716D6965656D757171757D81817D75797D +7D756D6D69696D757971696D756D6D6D6D656985919DA1999D85817D757D7D75694C485059594C3C +2C2C30343844403C343C3830343C4050504C404044485059615D5D5D69615448343838383838403C +383834343C3C302C241C2834383834302C343C4044484C5461615D59504C4C444C4C4C595D616561 +5048443C383C383430383C3C342C201C2C343C38343434343838342C302C302C404C596559595454 +5450504C48505D595948443838403C383840443C2C2C28282C3C444C484850596D79816D6D7D818D +9D9D9D99958579757169696D696D6D6D797971717579858985817D797D79756D6D6D6D7571757971 +6D756D696D6D6D6D717D7D817D7D8185857D71696D6D757571716D6D717171797D7D859195999999 +897D7D6D697D796D595048484C443C2C2C2C303040484840404044403C44485954544844484C4C54 +5454595961544C402C2C2C302C30303430303030383C342C20202C343C3C3C34343C3C3C3C484C54 +61615D5D594C4C50504C505D595D615950444040403C383830383C403C34282434343C3834343034 +38342C2C2C28242034404850484C4848484C4848484C5954594C444040484048444C4C503C302828 +28343C40403C484C61717575696D757D898D9995958D95958979756D656D6D6D7175757579898D8D +8985857D716D6D6D6965697179857D79797979716D656569717575758189858989857D6D6D71716D +71716D69757D818D99998D919191898579716969717175614C483840403C34282C2C344054505448 +4C48504844444C545050484444444844444848485048403420242428282C3034302C3030343C3434 +282C343C44403834383C4040404448505D615D5D61544C50544C5054595D5D5954483C404040403C +30384044443C38343C40443C383430343834343028242424303844483C3C3C3C3C3C3C3C40445454 +5048403C444C44484450505448443C3834344044484448444C615D656569717975798591919DA5A1 +A59581716D6D6D717171797985919591918D8D8175656D6965696D75818981817D7D7D796D696965 +6D756D79858D8D918D8D897D7171696D71717171798D9DA9A5A99D918D7D7571756D656565596150 +48484448444034343C40444C59545448504C5044404448505050403C383838383C3C3C3844443830 +242424282C3030343030343838403C4038383C44484038303C40444444404C54595D5D5959544C54 +44444C50545D594C4C483C4440443C383438444C4840384040484C48403C3C383430302C28282420 +30383C44383838383838383434344044483C38343C4444443C4850504844403C3C384044444C5454 +54595450595D6171757175757591A5A9AEAEA18575716D7575757981919995959591897D796D6965 +65656D7D818D89818181817975696165696D7581818D9195918D8D85757171717571757D8DA9B6B6 +B2A99575756D6D716D5D595450545D5454544C44483C38404044444C54544C404C4C4C4038383C48 +403C30303434343438383434443C383020242828282C2C30343C383C444848404038404C50483C34 +3C3C444448404C50505D615954504844404044484C5454504C483C403C404444383C484C4C40404C +4C505048444444403C34302C2424242030303840383434383834343430303840403C3030383C383C +30344448483C3C3C3C3C40444450545459545459615D5D616969716D718185A1AEAEA1998D857981 +7D7D7D8995A199959591858175756D656169717985898D8D8989817D756D65616971797D898D9195 +959595897D7575797D7D8995A5AEB6B6A98D816D696965615954595D5954595D54545044443C3C40 +3C4040484C4838384440403C34303C403C342C3030303034343434343C34302C20242424282C303C +3C404040484C4C4C4C40404C504C40384444444044404850545959504C4440403C3C4448484C504C +48484040444044403C40485059484C50545D5D4C4C48484844403C38302824243034384034343838 +3430303438303C44444030343C383C3C302C383C403C3C34383C3C4048595D59594C48505965615D +5D656D6971818991A5A99D999595918D95898995999DA1A1999589817975756D6975798185898D95 +9185817D797575696D797D81898D99999D99958D8D81818D89919999A1A9B6B2998D816D65655D54 +545961544C4C505D5D5D5D48443C3C3C383C4044403C303440443C3C343040404038303430302C30 +343434344038342C2024283034383C404444444C48595954504C485D504C4440444844484844484C +5054504C4C48403C383C404444484C48483C3C38404444403C404C505450545D615D5D54544C4C4C +48403C3C38343024303C3C40343434343430302C38343C404444343038384040382C384044403834 +3438343048545D5D54443C44505D615954545D697575818D918D9D9591999D999595A1A9A1A1A1A1 +999591857D7975797D7D7D81898D8D918D8985817979797D7D7D81858D9599999D9D99999D998D8D +95999D99A1A9999D9585797165594C4C5059544C403C48595D61594C34343834343C4448443C303C +44443C3C30344040403830342C302C3430303030403C3C3024303438383C3C4848484C5054595D5D +5954545954504844444848443C40444C4C504C4848443C3C343C4040444848483834383438383C40 +3C4048505D59546161695D5954504C484844403C3C34302C384048483830302C302C302C34303844 +44443834383C403C383038404448403C383438304859595D543C34343C4C54504C444861717D797D +817575797D8D959DA1A5A9B2B6B2B2A59D958D85817D8185898D85818989918D898D81817D818989 +898585898D91999DA1AEAEA9A9A19D99999591858581818D89817D7161444044484C443830344459 +61615D4C343834383C404848443C343C4044403834344044443430302C2C2C2C2C2C303448484038 +2C303438383C4448484C4C50595D655D6154595D544C484444443C3C383C3C404C4C484844443C34 +384040404448403C343838343C3C3C38343C48505D615D69657161615954504C444844403C38342C +3C485054403C34383430303034383844484C3C3C40404840383034444C5448403C3C383448616569 +5448403C3C404848403C3C50616D797D71716D656D757D8995AEB6B2B2B6B6AEA5A9A19185858D99 +99999591898D8D89898D8985899195999D958D8D99A9AEA9A9B2AEA9A5A9A18D8179757571797D7D +857D71614C343438403C383438404C596D6965503C384040404C544C4438343C4048403C38384844 +4034343430302C34343438405454483C2C343838404448444C4C54595D616D61655D61615448403C +3C444040383C3C3C44444C48444444383C4444484444403C38383C383C3C3C3C38384450595D6571 +71796D65615D5450484844444040383848505D5D4C4844444844443C343838484C50484848484C44 +383834405054504C484840444C616D6D6150484844484C4C483C444C59656D75655D616161696D75 +7D8DAEB6AEA9A9A5A1A1A19D99A1AEAEB2AEA9A19D958D85858991999DA5AEB2B2B2A9A1A5A9A5A5 +A5A5A5A5AEA181756D6969696D7169717D71695D4C4034444444403C40485065757165544C44484C +4C50545044383C3C484C484444404C48443438343C4044444444484C615D544838383C3C4444484C +50505D5D6165757171655D5D54483C40404440403C403C40444848484C4844403C4444484C48443C +3C383C3C383838383C3C4854545D65717179716D655D5450484844484C4C4440545D656954544C50 +4C50504C444040484C544C5050505048403830404C5450504C4C4C50505D6D71695D59544C485054 +5448505450656D69655D5959595D656D7985919599A5958D91959999A1AEB2B6BABEBEB6AEA5999D +9D99A1A9B2BABABABABAB6A9A19D99918D95A1958D85796D655D5D616165697171716954544C444C +4C4840444C545D6D75716159595050505454544C44343C444850504C4C484C48443C40444C504C4C +504C54546D69615440444C4C4848484850545961656D756D6D655D59595040403C40403C40403C40 +40484C544C48483C383C40404440403C383834302C2C30343434404850506169696D656159545048 +4448484C484C48445461656D54504C4C4C504C4C4844404C5454505454594C403434283044484844 +4844485454506569695D54544C4444505059615D50545D595050504C50545D6D71798585817D756D +65757D8599A5AEAEB6BEC2BEB2A9998D8D99A5AEBABEBEB6B2B6AEA1898179656D75797D7D7D7169 +65595459595D5D5D616559505D5D504C483C38444C505D697169595D5D4C484C444C4844342C383C +444C54504C484C4C443C444448484C4C4C4C50597169615444484C4C4C484848485054545D616965 +65615050504438383834343034383C3C4044444840403C383030343C403838303030282824242428 +2C303844484C595D6565655D504844404040444C50484040545D656D544C4848484C4C4C40403C44 +54545459595448382C2424243840483C3838444C504C595D5D5D4C5044403C404C5D656559544848 +44444848484C5D697175797D796D65616561616D79859DA9A5A9A9A199959191919191959DA9A9A5 +A9A58D7D716565616165697575716D6561594C5050545050504C595D656154483834383C48485D61 +6161545954483C3C40484038282828303848545454504C4C40383C404848484848484C5971656154 +40404850504444404044444C596161615D594C48483C34302C2828282C2C3434343C3C4040343034 +241C2C30302C24201C1C14141418181C24242C3438444C505D59504C4440342C3030383C403C3434 +405059614C44404040403C3C3C3830304448505959544834281C1814202C383024282C343C404844 +4850443C3C302C3040545D6159503C34343034383840506169717971656154504C595D5959616975 +858D858179756D71716D75757D858989797169615D61594C50546161697169615948403C40403C3C +3C40545D615D50382824283438404C4C4C5048443C302C28343830241418202838485454504C403C +282834383C383C3C3C404850655D504434343C403C3830302C343C40484C54594C4C483838302828 +241C1C1414181C2024282C30302C20242420283430282020201C181818181C20282834383C485059 +5D54504C443838343034383C383030304854596150484040444844403C38303444505961615D4C3C +342C241C1C2C2C2C24202830343C383C4854544440343030405961696550483C3838343C444C505D +717575715D4C4C484C5D5D5954545D616D6D716D61616561616561616D6D6D71656159595D5D5D4C +484C4C596D6D6D69544C4C4844404440444C54696961543828282C343C4C50484040443C382C2424 +30303020202830343C4C5D5D5950483C302C30383C40444040404854655D5448343030383C3C3434 +34383444485050595450483C3834303028201C1C1818202420242830342820243028303028302820 +24201C1C1C1C20242C2C303C404C595961504C4C483C38383838383834302C283848596150504848 +4C48444440383834445061656165504838302C24283030302020282C343C3430444C50443C38303C +485D69717961504438404044504C504C5D6D6D5D594C40405054505459504C50545459505461595D +61595D5950595959545054595454544C3C4048595D69655444484C50484848444854617D71695940 +342830343C4C4C44343C483C342C242030303028282C343848546561615D483C3030343C40404848 +48485054655D4C3C2C303434383C383838383C44484C4C5D59544C44403430342820201C1C1C2024 +20283028343028304040403C343028282424201C181C202C3034343C3C5054596159504844403838 +343C38302C282C24384850594C50484C4C4C4C4444383434445065696565544C40382C2C24343838 +2C28342C34383028384450484040384C505D7175756150443C3834485454504C4850545448483C38 +444C5454545454443C3C48545054505050505454544840404859545959544840383C444850504844 +444C54544C3C404448546579796D594C48303838444844382C34403C34342C2C383834242C303844 +50546565695D48403030343C404848484C4850505D544C4028302C2C343C3C3838383C444850545D +5454503C3C3838342C20201C1C202424242830343C40404050504C484438302C282828241C202430 +3038343C405054545D54504C48403838383838302C282C283848545D4C48444444484448443C3834 +404C6971696D5D54443C3430282C343C3034403C4044382C30444C4840383C4C545D656D69615040 +34302C404C545450483C344044444C54504C4850545050483C30303C445050505050504840303440 +4C50545450484850504C40403C3038444C4C544C4430383C445465696D6559504834343844444434 +303C4C4C444038303C342C2834344044545D696D6D65483C3034383C40444844444448505D594C3C +2C2C282C3438383838384048484C5459505450404038383434242020242828242C30384048485050 +5D61544C4840383830303030242C2C303C403C38404C59595D505048443C3C383C3834302C282828 +38445059484440404044403C3C3C3C38445469716D6961544C44383430303C403C4044444C443C38 +303C3C40382C38445459595D595444302C28303C4850545950443C343C485459544C484848483830 +343C3C3838484844444848403C404438383C4848484448545454483C343C444C505050483C342C34 +344859595D595450403028343C383C343C444C544C44403C403C3030343C444C545D6D6D71695040 +34383838383C40404040484C5954483C2828282C3038383C383C40444850505954544C403840403C +34302C283034302C34383C484C54615D656961505044403C383434343030343C444440404C546161 +6559544C443C3834383430282424282434444C5448404040444444403834303044546D717171615D +59544C3C3430383C44444444443C383430303C40382C343844484C484444403430303C4040545D61 +5D4C443C3840485454544840382C2C3040444C44343438343438383848504C4434302C343C445054 +504840343C444C595D5D544040403434384444484848443C343028343C383434383C444848444444 +3C3830343C4C54595D617175716D54402C282C343C4040404044444C59504438282828282C343438 +343C3C44485454615D61544C404044403C343030383430343C3C444C505D6965716D655950484440 +403838383838384044443C44505D696D695D595048444038342C28202424282838404C5448444444 +4440403C383430303C546D75757169615950483C342C343440443C3C3C2C2C2828203038343C3C3C +404444343C444040343844444C546161544C403C444440484048443C342C2C384040404444342424 +24243448484848443C302C303840443C444044443C4450545D5D5448444440384044443C3440443C +38383834342C242C2C303440403C443C343028303C485059616D75797971543C2C2C3034383C3C40 +444448485950443828282424242830343840444850595D6969695D50403C44444038383838383840 +4040444C54616D717975695D50484C444444403C383C3C3C404040405061696D655D5954484C4840 +3C383028282C2C2C404C50544848484444444440383438383C54696D65615954544C483C3024282C +3C3C34342C20202024202830384C48485054443C34383438444850504C4C5459504C48403C3C383C +40444C483838383034383C3C34342C24243034384044403C383C383840483C3C38343C3C44484C50 +54504C48505450483C3438343844504C44404834302424282424283038343838282420303C444C54 +54596569716D543C34303034384044444448484C59544C402C2C2C2C2830383C44484C4850595D65 +6D696150404040403C3C3C383C4044444448484C5965757985797565545048444840403C38383838 +3C403C3C5065696D615D545450504C4C443830343034383C4C54616959545450483C3C3838302C2C +304C5D695D4C4C4444403C342C20142030383430282824241C2420304454505054544848403C3840 +4C484C484C5044444438443C38404040444C4C44444034383428282C302C30343830303434303038 +3C384040404848403C40403C40443C4444444C48484C4C5040383C40484450504C4C504430242820 +28282C283034342C1C101C2834383C40484C50616D6150302C282830343C3C485054595D6D65544C +38343430303038444C4C505054546161716965503C3C403C383838383C3C404444484C5061717985 +89817969544C484844403C34342C30303844444050616971616154545054545048403C3C3C404444 +5965696D5D5D59544C44403C302C24282844505950443C383834302C20180C20343C3834241C2024 +2828202C50595D596154544C403C3C444C4C484C44403834303C4040404848485048444C48404030 +282420242C2C38383838303028282C2C38444444443C44484448484440403C303038404448484C50 +443C3C404C50545D5459544C2C242C2C28242024343838301C08141C282C30343C4048545D544828 +2824282C383C4048545D5D61716D65544440403C3C3C40485054545054546561716D655040444038 +30302C34343C404444484C5069758189 +gr +gr + +4 w +DO +SO +6 w +0 sg +1463 388 mt 5691 388 L +1463 4616 mt 5691 4616 L +1463 388 mt 1463 4616 L +5691 388 mt 5691 4616 L +1463 4616 mt 5691 4616 L +1463 388 mt 1463 4616 L +1463 388 mt 5691 388 L +1463 4616 mt 5691 4616 L +1463 388 mt 1463 4616 L +5691 388 mt 5691 4616 L + +end %%Color Dict + +eplot +%%EndObject + +epage +end + +showpage + +%%Trailer +%%EOF diff --git a/Notes/Figs/phantom_backproj.pdf b/Notes/Figs/phantom_backproj.pdf Binary files differnew file mode 100644 index 0000000..59de9bb --- /dev/null +++ b/Notes/Figs/phantom_backproj.pdf diff --git a/Notes/Figs/phantom_orig.eps b/Notes/Figs/phantom_orig.eps new file mode 100644 index 0000000..4a9ce1e --- /dev/null +++ b/Notes/Figs/phantom_orig.eps @@ -0,0 +1,1861 @@ +%!PS-Adobe-2.0 EPSF-1.2 +%%Creator: MATLAB, The Mathworks, Inc. +%%Title: ./Notes/Figs/phantom_orig.eps +%%CreationDate: 11/21/2005 14:01:12 +%%DocumentNeededFonts: Helvetica +%%DocumentProcessColors: Cyan Magenta Yellow Black +%%Pages: 1 +%%BoundingBox: 137 227 496 583 +%%EndComments + +%%BeginProlog +% MathWorks dictionary +/MathWorks 160 dict begin +% definition operators +/bdef {bind def} bind def +/ldef {load def} bind def +/xdef {exch def} bdef +/xstore {exch store} bdef +% operator abbreviations +/c /clip ldef +/cc /concat ldef +/cp /closepath ldef +/gr /grestore ldef +/gs /gsave ldef +/mt /moveto ldef +/np /newpath ldef +/cm /currentmatrix ldef +/sm /setmatrix ldef +/rm /rmoveto ldef +/rl /rlineto ldef +/s {show newpath} bdef +/sc {setcmykcolor} bdef +/sr /setrgbcolor ldef +/sg /setgray ldef +/w /setlinewidth ldef +/j /setlinejoin ldef +/cap /setlinecap ldef +/rc {rectclip} bdef +/rf {rectfill} bdef +% page state control +/pgsv () def +/bpage {/pgsv save def} bdef +/epage {pgsv restore} bdef +/bplot /gsave ldef +/eplot {stroke grestore} bdef +% orientation switch +/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def +% coordinate system mappings +/dpi2point 0 def +% font control +/FontSize 0 def +/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0] + makefont setfont} bdef +/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse + exch dup 3 1 roll findfont dup length dict begin + { 1 index /FID ne {def}{pop pop} ifelse } forall + /Encoding exch def currentdict end definefont pop} bdef +/isroman {findfont /CharStrings get /Agrave known} bdef +/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse + exch FMS} bdef +/csm {1 dpi2point div -1 dpi2point div scale neg translate + dup landscapeMode eq {pop -90 rotate} + {rotateMode eq {90 rotate} if} ifelse} bdef +% line types: solid, dotted, dashed, dotdash +/SO { [] 0 setdash } bdef +/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef +/DA { [6 dpi2point mul] 0 setdash } bdef +/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 + dpi2point mul] 0 setdash } bdef +% macros for lines and objects +/L {lineto stroke} bdef +/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef +/AP {{rlineto} repeat} bdef +/PDlw -1 def +/W {/PDlw currentlinewidth def setlinewidth} def +/PP {closepath eofill} bdef +/DP {closepath stroke} bdef +/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto + neg 0 exch rlineto closepath} bdef +/FR {MR stroke} bdef +/PR {MR fill} bdef +/L1i {{currentfile picstr readhexstring pop} image} bdef +/tMatrix matrix def +/MakeOval {newpath tMatrix currentmatrix pop translate scale +0 0 1 0 360 arc tMatrix setmatrix} bdef +/FO {MakeOval stroke} bdef +/PO {MakeOval fill} bdef +/PD {currentlinewidth 2 div 0 360 arc fill + PDlw -1 eq not {PDlw w /PDlw -1 def} if} def +/FA {newpath tMatrix currentmatrix pop translate scale + 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef +/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale + 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef +/FAn {newpath tMatrix currentmatrix pop translate scale + 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef +/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale + 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef +/vradius 0 def /hradius 0 def /lry 0 def +/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def +/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef + /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly + vradius add translate hradius vradius scale 0 0 1 180 270 arc + tMatrix setmatrix lrx hradius sub uly vradius add translate + hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix + lrx hradius sub lry vradius sub translate hradius vradius scale + 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub + translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix + closepath} bdef +/FRR {MRR stroke } bdef +/PRR {MRR fill } bdef +/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def + newpath tMatrix currentmatrix pop ulx rad add uly rad add translate + rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad + sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix + closepath} bdef +/FlrRR {MlrRR stroke } bdef +/PlrRR {MlrRR fill } bdef +/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def + newpath tMatrix currentmatrix pop ulx rad add uly rad add translate + rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad + sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix + closepath} bdef +/FtbRR {MtbRR stroke } bdef +/PtbRR {MtbRR fill } bdef +/stri 6 array def /dtri 6 array def +/smat 6 array def /dmat 6 array def +/tmat1 6 array def /tmat2 6 array def /dif 3 array def +/asub {/ind2 exch def /ind1 exch def dup dup + ind1 get exch ind2 get sub exch } bdef +/tri_to_matrix { + 2 0 asub 3 1 asub 4 0 asub 5 1 asub + dup 0 get exch 1 get 7 -1 roll astore } bdef +/compute_transform { + dmat dtri tri_to_matrix tmat1 invertmatrix + smat stri tri_to_matrix tmat2 concatmatrix } bdef +/ds {stri astore pop} bdef +/dt {dtri astore pop} bdef +/db {2 copy /cols xdef /rows xdef mul dup string + currentfile exch readhexstring pop + /bmap xdef pop pop} bdef +/it {gs np dtri aload pop moveto lineto lineto cp c + cols rows 8 compute_transform + {bmap} image gr}bdef +/il {newpath moveto lineto stroke}bdef +currentdict end def +%%EndProlog + +%%BeginSetup +MathWorks begin + +0 cap + +end +%%EndSetup + +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: 137 227 496 583 +MathWorks begin +bpage +%%EndPageSetup + +%%BeginObject: obj1 +bplot + +/dpi2point 12 def +portraitMode 0216 7344 csm + + 1429 340 4312 4278 MR c np +125 dict begin %Colortable dictionary +/c0 { 0.000000 0.000000 0.000000 sr} bdef +/c1 { 1.000000 1.000000 1.000000 sr} bdef +/c2 { 0.900000 0.000000 0.000000 sr} bdef +/c3 { 0.000000 0.820000 0.000000 sr} bdef +/c4 { 0.000000 0.000000 0.800000 sr} bdef +/c5 { 0.910000 0.820000 0.320000 sr} bdef +/c6 { 1.000000 0.260000 0.820000 sr} bdef +/c7 { 0.000000 0.820000 0.820000 sr} bdef +c0 +1 j +1 sg + 0 0 6914 5188 PR +6 w +0 -4228 4228 0 0 4228 1463 388 4 MP +PP +-4228 0 0 -4228 4228 0 0 4228 1463 388 5 MP stroke +gs 1463 388 4229 4229 MR c np +gs np 1464 389 mt 0 4227 rl 4227 0 rl 0 -4227 rl cp c np +[4227 0 0 4227 1464 389] cc +/picstr 256 string def +256 256 8 [256.000000 0 0 256.000000 0 0] L1i +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3030303030303030303030303030303030 +30FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF303030303030 +30303030303030303030303030303030303030303030FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF30303030303030303030303030303030303030303030303030303030303030303030 +3030FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF30303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030FFFFFF +FFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF30303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030FFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFF +FFFFFFFFFFFFFF303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030303030303030FFFFFFFFFFFFFF +FFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFF303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030FFFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF30303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030FFFFFFFFFFFFFFFFFFFFFFFF +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000FF +FFFFFFFFFFFFFFFFFFFF303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030FFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFF303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030FFFFFFFFFFFFFFFFFFFFFF000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFF +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +FFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000FFFFFFFFFFFFFFFFFFFF3030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030FFFFFFFFFFFFFFFFFFFF000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFF3030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030303030303030303030303030FFFFFFFFFF +FFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFF +FFFFFFFF303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030FFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000FFFFFFFFFFFFFFFFFF30303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030303030FFFFFFFFFFFFFFFFFF00 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFF30303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030FFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000FF +FFFFFFFFFFFFFFFF3030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030FFFFFFFFFFFFFFFFFF00000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000FFFFFFFFFFFFFFFFFF3030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30FFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFF3030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030FFFFFFFFFFFFFFFFFF00000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000FFFFFFFFFFFFFFFF303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030303030303030303030303030FFFFFFFFFF +FFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000FFFFFFFFFFFFFFFF303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFF +FFFFFF30303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030303030303030FFFFFFFFFFFFFFFF000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000FFFFFFFFFFFFFFFF30303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF30303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030FFFFFFFFFFFFFFFF000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00FFFFFFFFFFFFFF3030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +FFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFFFFFF30303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030FFFFFFFFFFFFFFFF00000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFF30 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030303030303030FFFFFFFFFFFFFF +FF000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000FFFFFFFFFFFFFF3030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000FFFFFFFFFFFFFF3030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030FFFFFFFFFFFFFF000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000FFFFFF +FFFFFFFF303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000FFFFFFFFFFFFFF3030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030303030303030303030304C4C4C4C4C4C4C +4C4C4C4C4C4C4C303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030FFFFFFFFFFFFFF00000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFF3030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030FFFFFF +FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000FFFFFFFFFFFFFF303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C30303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030FFFFFFFFFFFFFF00000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000FFFFFFFFFFFF303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030304C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C30303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030FFFFFFFFFFFF000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFF +FF303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000FFFFFFFFFFFF303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030FFFFFFFFFFFF00000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000FFFFFFFFFFFF303030303030303030 +3030303030303030303030303030303030303030303030303030303030303030303030303030304C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C30303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30FFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00FFFFFFFFFFFF303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030FFFFFFFFFFFF0000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFFFF303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030304C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C30303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030FFFFFFFFFFFF +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFF3030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C30303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030FFFFFFFFFFFF000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000FFFFFFFFFFFF303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030FFFFFFFFFFFF00000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000FFFFFFFFFF303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030304C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030FFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000FFFF +FFFFFFFF303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C3030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030FFFFFFFFFFFF0000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000FFFFFFFFFF303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C30303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030FFFFFF +FFFF0000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFF3030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030FFFFFFFFFFFF000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000FFFFFFFFFF303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030303030FFFFFFFFFF0000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000FFFFFFFFFFFF3030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030304C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030FFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF +FF303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030FFFFFFFFFF000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000FFFFFFFFFFFF3030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3030303030303030 +303030303030303030303030303030303030303030303030303030303030303030303030303030FF +FFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000FFFFFFFFFF3030303030303030 +3030303030303030303030303030303030303030303030303030303030303030303030303030304C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C30303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030FFFFFFFFFF00000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000FFFFFFFFFFFF3030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C303030303030303030303030303030 +3030303030303030303030303030303030303030303030303030303030303030FFFFFFFFFFFF0000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000FFFFFFFFFF3030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030303030304C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030FFFFFFFFFF0000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFF30 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C30303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030FFFFFFFFFF00000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000FFFFFFFFFF3030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030FFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000FFFFFFFFFF30303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030304C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030FFFFFFFFFF0000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00FFFFFFFFFF30303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030FFFFFFFFFF00 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFF30303030303030303030303030303030303030 +3030303030303030303030000000000000003030303030303030303030304C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C3030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030FFFFFFFFFF000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFF303030 +30303030303030303030303030303030303030303030303030000000000000000000000030303030 +30303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030FFFFFFFFFF0000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000FFFFFFFF30303030303030303030303030303030303030303030303030303030 +0000000000000000000000000000303030303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030FFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000FFFFFFFFFF303030303030303030303030 +303030303030303030303030303030000000000000000000000000000000003030303030304C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C3030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030FFFFFFFFFF000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000FF +FFFFFFFF303030303030303030303030303030303030303030303030303030000000000000000000 +000000000000000000303030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C30303030303030303030303030 +303030303030303030303030303030303030303030303030303030303030303030303030FFFFFFFF +FF000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000FFFFFFFF303030303030303030303030303030303030303030 +30303030303000000000000000000000000000000000000000003030304C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C30303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030FFFFFFFF0000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000FFFFFFFFFF3030303030 +30303030303030303030303030303030303030303030000000000000000000000000000000000000 +00000030304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030303030303030FFFFFFFFFF000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000FFFFFFFFFF3030303030303030303030303030303030303030303030303030000000 +0000000000000000000000000000000000000000304C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030FFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000FFFFFFFF3030303030303030303030303030 +303030303030303030303030300000000000000000000000000000000000000000000000004C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C3030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030FFFFFFFF0000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000FFFFFF +FFFF3030303030303030303030303030303030303030303030303030000000000000000000000000 +00000000000000000000000000184C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C30303030303030303030303030 +3030303030303030303030303030303030303030303030303030303030303030303030303030FFFF +FFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000FFFFFFFFFF30303030303030303030303030303030303030303030 +3030303000000000000000000000000000000000000000000000000000004C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C3030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030FFFFFFFFFF000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000FFFFFFFF30303030303030 +30303030303030303030303030303030303030300000000000000000000000000000000000000000 +000000000000184C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C30303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030FFFFFFFF0000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000FFFFFFFF30303030303030303030303030303030303030303030303030303000000000 +0000000000000000000000000000000000000000000018184C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C303030303030 +30303030300000000030303030303030303030303030303030303030303030303030303030303030 +30303030303030FFFFFFFF0000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000FFFFFFFFFF303030303030303030303030303030 +30303030303030303030300000000000000000000000000000000000000000000000000000001818 +184C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C303030303030303000000000000000003030303030303030303030303030 +3030303030303030303030303030303030303030303030FFFFFFFFFF000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF +FF303030303030303030303030303030303030303030303030303000000000000000000000000000 +00000000000000000000000000001818184C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3030303030303000000000000000 +000000303030303030303030303030303030303030303030303030303030303030303030303030FF +FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000FFFFFFFF303030303030303030303030303030303030303030303030 +303030000000000000000000000000000000000000000000000000000000001818184C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C303030303030300000000000000000000000003030303030303030303030303030303030303030 +30303030303030303030303030303030FFFFFFFF0000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000FFFFFFFF3030303030303030 +30303030303030303030303030303030303030000000000000000000000000000000000000000000 +00000000000000181818184C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3030303030300000000000000000000000000030303030 +3030303030303030303030303030303030303030303030303030303030303030FFFFFFFF00000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000FFFFFFFFFF3030303030303030303030303030303030303030303030303030300000000000 +0000000000000000000000000000000000000000000000181818184C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C30303030300000 +00000000000000000000000000303030303030303030303030303030303030303030303030303030 +3030303030303030FFFFFFFFFF000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000FFFFFFFFFF30303030303030303030303030303030 +30303030303030303030300000000000000000000000000000000000000000000000000000000000 +181818184C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C3030303030000000000000000000000000000000003030303030303030303030 +303030303030303030303030303030303030303030303030FFFFFFFFFF0000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF30 +30303030303030303030303030303030303030303030303030303000000000000000000000000000 +0000000000000000000000000000000018181818184C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C30303030000000000000000000000000 +00000000003030303030303030303030303030303030303030303030303030303030303030303030 +30FFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000FFFFFFFF30303030303030303030303030303030303030303030303030 +303030000000000000000000000000000000000000000000000000000000000018181818184C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +30303000000000000000000000000000000000000030303030303030303030303030303030303030 +3030303030303030303030303030303030FFFFFFFF00000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000FFFFFFFF303030303030303030 +30303030303030303030303030303030303030000000000000000000000000000000000000000000 +00000000000000000018181818184C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C30303000000000000000000000000000000000000000003030 +303030303030303030303030303030303030303030303030303030303030303030FFFFFFFF000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000FFFFFFFFFF303030303030303030303030303030303030303030303030303030300000000000 +0000000000000000000000000000000000000000000000000018181818184C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C303030000000000000 +00000000000000000000000000003030303030303030303030303030303030303030303030303030 +303030303030303030FFFFFFFFFF0000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000FFFFFFFF303030303030303030303030303030303030 +30303030303030303030300000000000000000000000000000000000000000000000000000000000 +000018181818184C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C30303000000000000000000000000000000000000000000030303030303030303030 +3030303030303030303030303030303030303030303030303030FFFFFFFF00000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF3030 +30303030303030303030303030303030303030303030303030303000000000000000000000000000 +00000000000000000000000000000000000000181818184C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C30303000000000000000000000000000000000 +00000000000030303030303030303030303030303030303030303030303030303030303030303030 +3030FFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000FFFFFFFF3030303030303030303030303030303030303030303030303030 +30303000000000000000000000000000000000000000000000000000000000000000001818181818 +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C303030 +00000000000000000000000000000000000000000000303030303030303030303030303030303030 +303030303030303030303030303030303030FFFFFFFF000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000FFFFFFFF30303030303030303030 +30303030303030303030303030303030303030000000000000000000000000000000000000000000 +000000000000000000000000181818184C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C30303000000000000000000000000000000000000000000000003030 +30303030303030303030303030303030303030303030303030303030303030303030FFFFFFFF0000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000FFFFFFFF30303030303030303030303030303030303030303030303030303030300000000000 +0000000000000000000000000000000000000000000000000000000000181818184C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C30303030000000000000000000 +00000000000000000000000000003030303030303030303030303030303030303030303030303030 +30303030303030303030FFFFFFFF0000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000FFFFFFFF303030303030303030303030303030303030 +30303030303030303030300000000000000000000000000000000000000000000000000000000000 +0000000000001818184C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C3030303000000000000000000000000000000000000000000000000030303030303030303030 +3030303030303030303030303030303030303030303030303030FFFFFFFF00000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF303030 +30303030303030303030303030303030303030303030303030303000000000000000000000000000 +00000000000000000000000000000000000000000000001818184C4C4C4C4C4C4C4C4C4C4C4C4C4C +4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3030303000000000000000000000000000000000000000 +00000000000030303030303030303030303030303030303030303030303030303030303030303030 +303030FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000FFFFFFFF303030303030303030303030303030303030303030303030303030 +30303000000000000000000000000000000000000000000000000000000000000000000000000000 +18184C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C3030303030000000 +00000000000000000000000000000000000000000000303030303030303030303030303030303030 +30303030303030303030303030303030303030FFFFFFFF0000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000FFFFFFFF3030303030303030303030 +30303030303030303030303030303030303030000000000000000000000000000000000000000000 +000000000000000000000000000000000018184C4C4C4C4C4C4C4C4C4C4C4C65654C4C4C4C4C4C4C +4C4C4C4C4C4C4C303030303000000000000000000000000000000000000000000000000000003030 +3030303030303030303030303030303030303030303030303030303030303030303030FFFFFFFF00 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00FFFFFFFF3030303030303030303030303030303030303030303030303030303030300000000000 +00000000000000000000000000000000000000000000000000000000000000000000184C4C4C4C4C +4C4C4C4C4C6565656565654C4C4C4C4C4C4C4C4C4C4C303030303030000000000000000000000000 +00000000000000000000000000003030303030303030303030303030303030303030303030303030 +3030303030303030303030FFFFFFFF00000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000FFFFFFFF30303030303030303030303030303030303030 +30303030303030303030300000000000000000000000000000000000000000000000000000000000 +0000000000000000000000184C4C4C4C4C4C4C656565656565656565654C4C4C4C4C4C4C4C303030 +30303000000000000000000000000000000000000000000000000000000030303030303030303030 +303030303030303030303030303030303030303030303030303030FFFFFFFF000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF303030 +30303030303030303030303030303030303030303030303030303030000000000000000000000000 +00000000000000000000000000000000000000000000000000000000304C4C4C4C4C4C6565656565 +65656565654C4C4C4C4C4C3030303030303030000000000000000000000000000000000000000000 +00000000000030303030303030303030303030303030303030303030303030303030303030303030 +303030FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000FFFFFFFF303030303030303030303030303030303030303030303030303030 +30303030000000000000000000000000000000000000000000000000000000000000000000000000 +000000003030304C4C4C6565656565656565656565654C4C4C303030303030303030300000000000 +00000000000000000000000000000000000000000000303030303030303030303030303030303030 +30303030303030303030303030303030303030FFFFFFFF0000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000FFFFFF303030303030303030303030 +30303030303030303030303030303030303030300000000000000000000000000000000000000000 +00000000000000000000000000000000000000000030303030306565656565656565656565653030 +30303030303030303030000000000000000000000000000000000000000000000000000000003030 +303030303030303030303030303030303030303030303030303030303030303030303030FFFFFF00 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00FFFFFF303030303030303030303030303030303030303030303030303030303030303000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000303030 +30304C4C4C4C4C4C4C4C4C4C4C4C3030303030303030303030300000000000000000000000000000 +00000000000000000000000000303030303030303030303030303030303030303030303030303030 +303030303030303030303030FFFFFF00000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFF3030303030303030303030303030303030303030 +30303030303030303030303000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000303030304C4C4C4C4C4C4C4C4C4C4C4C30303030303030303030 +30000000000000000000000000000000000000000000000000000000003030303030303030303030 +30303030303030303030303030303030303030303030303030303030FFFFFFFF0000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000FFFFFFFF30303030 +30303030303030303030303030303030303030303030303030303030000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000030303030304C4C4C4C4C +4C4C4C4C4C3030303030303030303030300000000000000000000000000000000000000000000000 +00000000003030303030303030303030303030303030303030303030303030303030303030303030 +30303030FFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000FFFFFFFF30303030303030303030303030303030303030303030303030303030 +30303030000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000030303030304C4C4C4C4C4C4C4C4C4C30303030303030303030303000000000000000 +00000000000000000000000000000000000000000030303030303030303030303030303030303030 +3030303030303030303030303030303030303030FFFFFFFF00000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000FFFFFFFF303030303030303030303030 +30303030303030303030303030303030303030303000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000030303030304C4C4C4C4C4C4C4C30303030 +30303030303030300000000000000000000000000000000000000000000000000000000000303030 +303030303030303030303030303030303030303030303030303030303030303030303030FFFFFFFF +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +FFFFFFFF303030303030303030303030303030303030303030303030303030303030303030000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000030 +30303030304C4C4C4C4C4C3030303030303030303030303000000000000000000000000000000000 +00000000000000000000000000303030303030303030303030303030303030303030303030303030 +303030303030303030303030FFFFFFFF000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFF3030303030303030303030303030303030303030 +30303030303030303030303030000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000030303030303030303030303030303030303030303030303000 +00000000000000000000000000000000000000000000000000000000303030303030303030303030 +30303030303030303030303030303030303030303030303030303030FFFFFFFF0000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000FFFFFFFF30303030 +30303030303030303030303030303030303030303030303030303030300000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000003030303030303030 +30303030303030303030303030303000000000000000000000000000000000000000000000000000 +00000000303030303030303030303030303030303030303030303030303030303030303030303030 +30303030FFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000FFFFFFFF30303030303030303030303030303030303030303030303030303030 +30303030303000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000003030303030303030303030303030303030303030303030000000000000000000 +00000000000000000000000000000000000000003030303030303030303030303030303030303030 +3030303030303030303030303030303030303030FFFFFFFF00000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000FFFFFFFF303030303030303030303030 +30303030303030303030303030303030303030303030000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000030303030303030303030303030303030 +30303030303000000000000000000000000000000000000000000000000000000000000030303030 +303030303030303030303030303030303030303030303030303030303030303030303030FFFFFFFF +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +FFFFFFFF303030303030303030303030303030303030303030303030303030303030303030300000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00303030303030303030303030303030303030303030000000000000000000000000000000000000 +00000000000000000000003030303030303030303030303030303030303030303030303030303030 +303030303030303030303030FFFFFFFF000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFF3030303030303030303030303030303030303030 +30303030303030303030303030300000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000003030303030303030303030303030303030303030300000 +00000000000000000000000000000000000000000000000000000030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030FFFFFFFF0000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000FFFFFFFF30303030 +30303030303030303030303030303030303030303030303030303030303030000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000030303030303030 +30303030303030303030303030300000000000000000000000000000000000000000000000000000 +00000030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030FFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000FFFFFFFF30303030303030303030303030303030303030303030303030303030 +30303030303030000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000030303030303030303030303030303030303030300000000000000000000000 +00000000000000000000000000000000000000303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030FFFFFFFF00000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000FFFFFFFF303030303030303030303030 +30303030303030303030303030303030303030303030300000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000003030303030303030303030303030 +30303030300000000000000000000000000000000000000000000000000000000000303030303030 +303030303030303030303030303030303030303030303030303030303030303030303030FFFFFFFF +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +FFFFFFFF303030303030303030303030303030303030303030303030303030303030303030303000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00003030303030303030303030303030303030303000000000000000000000000000000000000000 +00000000000000000000303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030FFFFFFFF000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFF3030303030303030303030303030303030303030 +30303030303030303030303030303030000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000030303030303030303030303030303030303000000000 +00000000000000000000000000000000000000000000000000003030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030FFFFFFFF0000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000FFFFFFFF30303030 +30303030303030303030303030303030303030303030303030303030303030300000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000303030303030 +30303030303030303030303000000000000000000000000000000000000000000000000000000000 +00303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030FFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000FFFFFFFF30303030303030303030303030303030303030303030303030303030 +30303030303030300000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000003030303030303030303030303030303030000000000000000000000000 +00000000000000000000000000000000003030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030FFFFFFFF00000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000FFFFFFFF303030303030303030303030 +30303030303030303030303030303030303030303030303030000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000030303030303030303030303030 +30303030000000000000000000000000000000000000000000000000000000000030303030303030 +303030303030303030303030303030303030303030303030303030303030303030303030FFFFFFFF +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +FFFFFFFF303030303030303030303030303030303030303030303030303030303030303030303030 +30000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000030304C4C4C4C4C4C3030303030303030300000000000000000000000000000000000000000 +00000000000000003030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030FFFFFFFF000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFF3030303030303030303030303030303030303030 +30303030303030303030303030303030300000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000304C4C4C4C4C4C4C4C303030303030300000000000 +00000000000000000000000000000000000000000000000030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030FFFFFFFF0000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000FFFFFFFF30303030 +30303030303030303030303030303030303030303030303030303030303030303030000000000000 +00000000000000000000000000000000000000000000000000000000000000000000004C4C4C4C4C +4C4C4C4C4C3030303030300000000000000000000000000000000000000000000000000000000000 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030FFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000FFFFFFFF30303030303030303030303030303030303030303030303030303030 +30303030303030303030000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000184C4C4C4C4C4C4C4C4C30303030303000000000000000000000000000 +00000000000000000000000000000030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030FFFFFFFF00000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000FFFFFFFF303030303030303030303030 +30303030303030303030303030303030303030303030303030300000000000000000000000000000 +000000000000000000000000000000000000000000000000000018184C4C4C4C4C4C4C4C4C4C3030 +30303000000000000000000000000000000000000000000000000000000000303030303030303030 +303030303030303030303030303030303030303030303030303030303030303030303030FFFFFFFF +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00FFFFFF303030303030303030303030303030303030303030303030303030303030303030303030 +30303000000000000000000000000000000000000000000000000000000000000000000000000000 +000018184C4C4C4C4C4C4C4C4C4C3030303030000000000000000000000000000000000000000000 +00000000000030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030FFFFFF00000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000FFFFFF3030303030303030303030303030303030303030 +30303030303030303030303030303030303030000000000000000000000000000000000000000000 +00000000000000000000000000000000000018184C4C4C4C4C4C4C4C4C4C30303030300000000000 +00000000000000000000000000000000000000000000303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030FFFFFF000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000FFFFFF30303030 +30303030303030303030303030303030303030303030303030303030303030303030303000000000 +0000000000000000000000000000000000000000000000000000000000000000000018184C4C4C4C +4C4C4C4C4C4C30303030000000000000000000000000000000000000000000000000000000003030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030FFFFFF000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000FFFFFF30303030303030303030303030303030303030303030303030303030 +30303030303030303030303000000000000000000000000000000000000000000000000000000000 +0000000000000000000000184C4C4C4C4C4C4C4C4C30303030300000000000000000000000000000 +00000000000000000000000000303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030FFFFFF0000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000FFFFFF303030303030303030303030 +30303030303030303030303030303030303030303030303030303030000000000000000000000000 +00000000000000000000000000000000000000000000000000000018184C4C4C4C4C4C4C4C303030 +30300000000000000000000000000000000000000000000000000000003030303030303030303030 +303030303030303030303030303030303030303030303030303030303030303030303030FFFFFF00 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00FFFFFF303030303030303030303030303030303030303030303030303030303030303030303030 +30303030300000000000000000000000000000000000000000000000000000000000000000000000 +00000000004C4C4C4C4C4C3030303030303000000000000000000000000000000000000000000000 +00000000303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030FFFFFF00000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000FFFFFF3030303030303030303030303030303030303030 +30303030303030303030303030303030303030303000000000000000000000000000000000000000 +00000000000000000000000000000000000000000030304C4C303030303030303030000000000000 +00000000000000000000000000000000000000003030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030FFFFFF000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF303030 +30303030303030303030303030303030303030303030303030303030303030303030303030300000 +00000000000000000000000000000000000000000000000000000000000000000000000000303030 +30303030303030303030000000000000000000000000000000000000000000000000003030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000FFFFFFFF303030303030303030303030303030303030303030303030303030 +30303030303030303030303030300000000000000000000000000000000000000000000000000000 +00000000000000000000000000303030303030303030303030300000000000000000000000000000 +00000000000000000000003030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030FFFFFFFF0000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000FFFFFF3030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030000000000000000000 +00000000000000000000000000000000000000000000000000000000003030303030303030303030 +30300000000000000000000000000000000000000000000000003030303030303030303030303030 +3030303030303030303030303030303030303030303030303030303030303030303030FFFFFF0000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000FFFFFF3030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030000000000000000000000000000000000000000000000000000000000000000000 +00000000003030303030303030303030303000000000000000000000000000000000000000000000 +00003030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030FFFFFF0000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000FFFFFF30303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303000000000000000000000000000000000 +00000000000000000000000000000000000000000030303030303030303030303030000000000000 +00000000000000000000000000000000003030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030FFFFFF00000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000FFFFFF303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +00000000000000000000000000000000000000000000000000000000000000000000000000303030 +30303030303030303030000000000000000000000000000000000000000000003030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030FFFFFF00000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000FFFFFF303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030300000000000000000000000000000000000000000000000 +00000000000000000000000000303030303030303030303030300000000000000000000000000000 +00000000000000003030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030FFFFFF000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000FFFFFFFF30303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303000000000000000 +00000000000000000000000000000000000000000000000000000000003030303030303030303030 +30300000000000000000000000000000000000000000003030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030FFFFFFFF0000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000FFFFFFFF30303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030000000000000000000000000000000000000000000000000000000000000 +00000000003030303030303030303030303000000000000000000000000000000000000000003030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030FFFFFFFF0000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000FFFFFF303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030300000000000000000000000000000 +00000000000000000000000000000000000000000030303030303030303030303030000000000000 +00000000000000000000000000003030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030303030FFFFFF0000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000FFFFFF3030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303000000000000000000000000000000000000000000000000000000000000000000000303030 +30303030303030303030300000000000000000000000000000000000003030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030FFFFFF0000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000FFFFFF3030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030000000000000000000000000000000000000000000 +00000000000000000000000000303030303030303030303030303000000000000000000000000000 +00000000303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030FFFFFF00000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000FFFFFF30303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303000000000 +00000000000000000000000000000000000000000000000000000000003030303030303030303030 +30303000000000000000000000000000000000303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030FFFFFF000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000FFFFFFFF303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030000000000000000000000000000000000000000000000000000000 +00000000003030303030303030303030303030000000000000000000000000000000303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030FFFFFFFF000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000FFFFFF3030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030300000000000000000000000 +00000000000000000000000000000000000000000030303030303030303030303030303000000000 +00000000000000000030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030FFFFFF000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000FFFFFF30 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303000000000000000000000000000000000000000000000000000000000000000303030 +30303030303030303030303000000000000000000000000030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30FFFFFF000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000FFFFFF30303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030300000000000000000000000000000000000 +00000000000000000000000000303030303030303030303030303030300000000000000000000030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030FFFFFF0000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000FFFFFFFF3030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303000 +00000000000000000000000000000000000000000000000000000000303030303030303030303030 +30303030303000000000000000003030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030303030303030303030FFFFFFFF00000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000FFFFFF3030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030000000000000000000000000000000000000000000000000 +00000000303030303030303030303030303030303030303000000030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030FFFFFF0000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000FFFFFF30303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303000000000000000 +00000000000000000000000000000000000000003030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030FFFFFF00000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000FFFFFF +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030000000000000000000000000000000000000000000000000000030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +FFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000FFFFFFFF3030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030300000000000000000000000000000 +00000000000000000000003030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030FFFFFFFF000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000FFFFFF30303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303000000000000000000000000000000000000000000000000030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030FFFFFF000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000FFFFFF30303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030300000000000000000000000000000000000000000 +00000030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030FFFFFF000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000FFFFFFFF3030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030000000 +00000000000000000000000000000000000030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030FFFFFFFF0000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000FF +FFFF3030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030300000000000000000000000000000000000000000303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030303030303030303030303030303030FFFF +FF000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000FFFFFF30303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030000000000000000000 +00000000000000000030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030FFFFFF0000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000FFFFFF303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303000000000000000000000000000000030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030303030FFFFFF00000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000FFFFFF3030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030300000000000000000000000000000 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030FFFFFF0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000FFFFFF30303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030000000000000000000003030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030FFFFFF00000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +FFFFFF30303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030000000000000003030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030FFFFFF +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000FFFFFF3030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030FFFFFF00000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000FFFFFF30303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030FFFFFF000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000FFFFFFFF303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000FFFFFF3030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030FFFFFF000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000FFFFFF3030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030303030303030303030303030FFFFFF0000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000FFFFFFFF303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030FFFFFFFF0000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000FFFFFF3030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030303030FFFFFF0000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000FFFFFFFF30303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30FFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000FFFFFF303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030FFFFFF0000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000FFFFFF303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030303030303030FFFFFF00000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000FFFFFF30303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030FFFFFF0000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000FFFFFF +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030FFFFFF00000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000FFFFFF3030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030303030303030303030303030FF +FFFF0000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000FFFFFF30303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030FFFFFF00000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000FFFFFF303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030303030FFFFFF00000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000FFFFFF3030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030FFFFFF00000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +FFFFFF30303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030FFFFFF00000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFF303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030FFFFFF +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000FFFFFF30303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030FFFFFF00000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000FFFFFFFF303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030FFFFFFFF000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000FFFFFF3030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030FFFFFF00000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000FFFFFFFF30303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030303030303030303030303030303030304C +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030FFFFFFFF000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000FFFFFF303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030304C4C4C3030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030FFFFFF000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF30 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030304C4C4C4C4C303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030FFFFFFFF000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000FFFFFFFF303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030303030304C4C4C4C4C303030303030304C +4C303030304C4C4C4C4C303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030FFFFFFFF000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000FFFFFF3030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +304C4C4C4C4C4C4C4C4C4C3030304C4C4C4C3030304C4C4C4C4C3030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +FFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000FFFFFFFF30303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030304C4C4C4C4C4C4C4C4C4C4C4C304C4C4C4C4C4C30304C4C4C +4C4C4C30303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030FFFFFFFF000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000FFFFFFFF3030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030304C4C4C4C4C4C4C4C +4C4C4C4C304C4C4C4C4C4C30304C4C4C4C4C4C303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030303030FFFFFFFF000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000FF +FFFF3030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030304C4C4C4C4C4C4C4C4C4C30304C4C4C4C4C4C30304C4C4C4C4C4C3030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030FFFFFF00000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000FFFFFFFF303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030304C4C4C4C4C4C4C30303030304C4C +4C4C3030304C4C4C4C4C303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030FFFFFFFF000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000FFFFFFFF30303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030304C4C4C4C4C3030303030303030303030303030 +303030303030303030303030303030303030303030303030303030303030303030303030FFFFFFFF +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000FFFFFFFF303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030304C4C +4C4C3030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030FFFFFFFF00000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000FFFFFFFF3030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030304C4C4C3030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030FFFFFFFF000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000FFFFFFFF30303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030FFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000FFFFFFFF3030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030FFFFFFFF00000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030303030303030303030FFFFFFFF00000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000FFFFFFFF3030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030FFFFFFFF0000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000FFFFFFFFFF303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030FFFFFFFFFF00000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000FFFFFFFF303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030303030303030303030303030303030FFFF +FFFF0000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000FFFFFFFF30303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030FFFFFFFF0000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +FFFFFFFF303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030FFFFFFFF0000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000FFFFFFFF30303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF3030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030FFFFFFFF000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000FFFFFFFF30303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030303030303030FFFFFFFF000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000FFFFFFFFFF30303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030FFFFFFFFFF00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000FFFFFFFFFF303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030FFFFFFFFFF00000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000FFFFFFFFFF30303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030FFFFFF +FFFF0000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000FF +FFFFFFFF303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030FFFFFFFFFF0000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFFFF30303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030FFFFFFFFFF0000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFF30 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30FFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000FFFFFFFFFF303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030FFFFFFFFFF00000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000FFFFFFFFFF30303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030FFFFFFFFFF00000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000FFFFFFFFFFFF3030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030FFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000FFFFFFFFFFFF3030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030FFFFFFFFFFFF000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +FFFFFFFFFFFF30303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030FFFFFFFFFFFF +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000FFFFFFFFFFFF30303030303030303030303030303030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +3030303030303030FFFFFFFFFFFF0000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFF +FFFF3030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030303030303030303030303030FFFFFFFFFFFFFF0000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000FFFFFFFFFFFFFF3030303030303030303030303030303030303030 +303030303030303030303030303030303030303030303030303030303030303030303030FFFFFFFF +FFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFF3030 +30303030303030303030303030303030303030303030303030303030303030303030303030303030 +30303030303030303030FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000FFFFFFFFFFFFFFFFFF3030303030303030303030303030303030303030303030 +3030303030303030303030303030303030303030303030FFFFFFFFFFFFFFFFFF0000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFF30303030 +303030303030303030303030303030303030303030303030303030303030303030303030FFFFFFFF +FFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000FFFFFFFFFFFFFFFFFFFF30303030303030303030303030303030303030303030303030 +303030303030303030FFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF3030303030 +303030303030303030303030303030303030303030FFFFFFFFFFFFFFFFFFFFFFFF00000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF303030303030303030303030FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFF0000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000 +gr +gr + +4 w +DO +SO +6 w +0 sg +1463 388 mt 5691 388 L +1463 4616 mt 5691 4616 L +1463 388 mt 1463 4616 L +5691 388 mt 5691 4616 L +1463 4616 mt 5691 4616 L +1463 388 mt 1463 4616 L +1463 388 mt 5691 388 L +1463 4616 mt 5691 4616 L +1463 388 mt 1463 4616 L +5691 388 mt 5691 4616 L + +end %%Color Dict + +eplot +%%EndObject + +epage +end + +showpage + +%%Trailer +%%EOF diff --git a/Notes/Figs/phantom_orig.pdf b/Notes/Figs/phantom_orig.pdf Binary files differnew file mode 100644 index 0000000..e3746e4 --- /dev/null +++ b/Notes/Figs/phantom_orig.pdf diff --git a/Notes/Figs/phantom_sampling.eps b/Notes/Figs/phantom_sampling.eps new file mode 100644 index 0000000..18445d0 --- /dev/null +++ b/Notes/Figs/phantom_sampling.eps @@ -0,0 +1,1861 @@ +%!PS-Adobe-2.0 EPSF-1.2 +%%Creator: MATLAB, The Mathworks, Inc. +%%Title: ./Notes/Figs/phantom_sampling.eps +%%CreationDate: 11/21/2005 14:02:29 +%%DocumentNeededFonts: Helvetica +%%DocumentProcessColors: Cyan Magenta Yellow Black +%%Pages: 1 +%%BoundingBox: 137 227 496 583 +%%EndComments + +%%BeginProlog +% MathWorks dictionary +/MathWorks 160 dict begin +% definition operators +/bdef {bind def} bind def +/ldef {load def} bind def +/xdef {exch def} bdef +/xstore {exch store} bdef +% operator abbreviations +/c /clip ldef +/cc /concat ldef +/cp /closepath ldef +/gr /grestore ldef +/gs /gsave ldef +/mt /moveto ldef +/np /newpath ldef +/cm /currentmatrix ldef +/sm /setmatrix ldef +/rm /rmoveto ldef +/rl /rlineto ldef +/s {show newpath} bdef +/sc {setcmykcolor} bdef +/sr /setrgbcolor ldef +/sg /setgray ldef +/w /setlinewidth ldef +/j /setlinejoin ldef +/cap /setlinecap ldef +/rc {rectclip} bdef +/rf {rectfill} bdef +% page state control +/pgsv () def +/bpage {/pgsv save def} bdef +/epage {pgsv restore} bdef +/bplot /gsave ldef +/eplot {stroke grestore} bdef +% orientation switch +/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def +% coordinate system mappings +/dpi2point 0 def +% font control +/FontSize 0 def +/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0] + makefont setfont} bdef +/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse + exch dup 3 1 roll findfont dup length dict begin + { 1 index /FID ne {def}{pop pop} ifelse } forall + /Encoding exch def currentdict end definefont pop} bdef +/isroman {findfont /CharStrings get /Agrave known} bdef +/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse + exch FMS} bdef +/csm {1 dpi2point div -1 dpi2point div scale neg translate + dup landscapeMode eq {pop -90 rotate} + {rotateMode eq {90 rotate} if} ifelse} bdef +% line types: solid, dotted, dashed, dotdash +/SO { [] 0 setdash } bdef +/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef +/DA { [6 dpi2point mul] 0 setdash } bdef +/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 + dpi2point mul] 0 setdash } bdef +% macros for lines and objects +/L {lineto stroke} bdef +/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef +/AP {{rlineto} repeat} bdef +/PDlw -1 def +/W {/PDlw currentlinewidth def setlinewidth} def +/PP {closepath eofill} bdef +/DP {closepath stroke} bdef +/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto + neg 0 exch rlineto closepath} bdef +/FR {MR stroke} bdef +/PR {MR fill} bdef +/L1i {{currentfile picstr readhexstring pop} image} bdef +/tMatrix matrix def +/MakeOval {newpath tMatrix currentmatrix pop translate scale +0 0 1 0 360 arc tMatrix setmatrix} bdef +/FO {MakeOval stroke} bdef +/PO {MakeOval fill} bdef +/PD {currentlinewidth 2 div 0 360 arc fill + PDlw -1 eq not {PDlw w /PDlw -1 def} if} def +/FA {newpath tMatrix currentmatrix pop translate scale + 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef +/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale + 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef +/FAn {newpath tMatrix currentmatrix pop translate scale + 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef +/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale + 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef +/vradius 0 def /hradius 0 def /lry 0 def +/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def +/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef + /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly + vradius add translate hradius vradius scale 0 0 1 180 270 arc + tMatrix setmatrix lrx hradius sub uly vradius add translate + hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix + lrx hradius sub lry vradius sub translate hradius vradius scale + 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub + translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix + closepath} bdef +/FRR {MRR stroke } bdef +/PRR {MRR fill } bdef +/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def + newpath tMatrix currentmatrix pop ulx rad add uly rad add translate + rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad + sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix + closepath} bdef +/FlrRR {MlrRR stroke } bdef +/PlrRR {MlrRR fill } bdef +/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def + newpath tMatrix currentmatrix pop ulx rad add uly rad add translate + rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad + sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix + closepath} bdef +/FtbRR {MtbRR stroke } bdef +/PtbRR {MtbRR fill } bdef +/stri 6 array def /dtri 6 array def +/smat 6 array def /dmat 6 array def +/tmat1 6 array def /tmat2 6 array def /dif 3 array def +/asub {/ind2 exch def /ind1 exch def dup dup + ind1 get exch ind2 get sub exch } bdef +/tri_to_matrix { + 2 0 asub 3 1 asub 4 0 asub 5 1 asub + dup 0 get exch 1 get 7 -1 roll astore } bdef +/compute_transform { + dmat dtri tri_to_matrix tmat1 invertmatrix + smat stri tri_to_matrix tmat2 concatmatrix } bdef +/ds {stri astore pop} bdef +/dt {dtri astore pop} bdef +/db {2 copy /cols xdef /rows xdef mul dup string + currentfile exch readhexstring pop + /bmap xdef pop pop} bdef +/it {gs np dtri aload pop moveto lineto lineto cp c + cols rows 8 compute_transform + {bmap} image gr}bdef +/il {newpath moveto lineto stroke}bdef +currentdict end def +%%EndProlog + +%%BeginSetup +MathWorks begin + +0 cap + +end +%%EndSetup + +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: 137 227 496 583 +MathWorks begin +bpage +%%EndPageSetup + +%%BeginObject: obj1 +bplot + +/dpi2point 12 def +portraitMode 0216 7344 csm + + 1429 340 4312 4278 MR c np +125 dict begin %Colortable dictionary +/c0 { 0.000000 0.000000 0.000000 sr} bdef +/c1 { 1.000000 1.000000 1.000000 sr} bdef +/c2 { 0.900000 0.000000 0.000000 sr} bdef +/c3 { 0.000000 0.820000 0.000000 sr} bdef +/c4 { 0.000000 0.000000 0.800000 sr} bdef +/c5 { 0.910000 0.820000 0.320000 sr} bdef +/c6 { 1.000000 0.260000 0.820000 sr} bdef +/c7 { 0.000000 0.820000 0.820000 sr} bdef +c0 +1 j +1 sg + 0 0 6914 5188 PR +6 w +0 -4228 4228 0 0 4228 1463 388 4 MP +PP +-4228 0 0 -4228 4228 0 0 4228 1463 388 5 MP stroke +gs 1463 388 4229 4229 MR c np +gs np 1464 389 mt 0 4227 rl 4227 0 rl 0 -4227 rl cp c np +[4227 0 0 4227 1464 389] cc +/picstr 256 string def +256 256 8 [256.000000 0 0 256.000000 0 0] L1i +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000FF0000000000 +00000000000000000000000000000000000000000000FF0000000000000000000000000000000000 +000000000000FF0000000000000000000000000000000000000000FF000000000000000000000000 +000000000000FF0000000000000000000000000000000000FF000000000000000000000000000000 +0000FF000000000000000000000000000000000000FF000000000000000000000000000000000000 +0000FF0000000000000000000000000000000000000000000000FF00000000000000000000000000 +0000000000000000000000000000FF00000000000000000000000000000000000000000000000000 +0000000000000000000000FF000000000000000000000000000000000000000000000000000000FF +00000000000000000000000000000000000000000000FF0000000000000000000000000000000000 +000000FF000000000000000000000000000000000000FF0000000000000000000000000000000000 +FF0000000000000000000000000000000000FF000000000000000000000000000000000000FF0000 +000000000000000000000000000000000000FF000000000000000000000000000000000000000000 +00FF000000000000000000000000000000000000000000000000000000FF00000000000000000000 +00000000000000000000000000000000000000000000000000000000FF0000000000000000000000 +00000000000000000000000000000000FF00000000000000000000000000000000000000000000FF +00000000000000000000000000000000000000FF000000000000000000000000000000000000FF00 +00000000000000000000000000000000FF0000000000000000000000000000000000FF0000000000 +00000000000000000000000000FF00000000000000000000000000000000000000FF000000000000 +00000000000000000000000000000000FF0000000000000000000000000000000000000000000000 +00000000FF0000000000000000000000000000000000000000000000000000000000000000000000 +0000000000FF0000000000000000000000000000000000000000000000000000FF00000000000000 +000000000000000000000000000000FF0000000000000000000000000000000000000000FF000000 +0000000000000000000000000000FF0000000000000000000000000000000000FF00000000000000 +00000000000000000000FF0000000000000000000000000000000000FF0000000000000000000000 +000000000000000000FF00000000000000000000000000000000000000000000FF00000000000000 +00000000000000000000000000000000000000FF0000000000000000000000000000000000000000 +000000000000000000000000000000000000000000FF000000000000000000000000000000000000 +000000000000000000FF00000000000000000000000000000000000000000000FF00000000000000 +000000000000000000000000FF0000000000000000000000000000000000FF000000000000000000 +0000000000000000FF0000000000000000000000000000000000FF00000000000000000000000000 +00000000FF00000000000000000000000000000000000000FF000000000000000000000000000000 +00000000000000FF000000000000000000000000000000000000000000000000000000FF00000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000FF00 +0000000000000000000000000000000000000000000000000000FF00000000000000000000000000 +0000000000000000FF00000000000000000000000000000000000000FF0000000000000000000000 +000000000000FF0000000000000000000000000000000000FF000000000000000000000000000000 +0000FF0000000000000000000000000000000000FF00000000000000000000000000000000000000 +FF000000000000000000000000000000000000000000FF0000000000000000000000000000000000 +00000000000000000000FF0000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000FF000000000000000000000000000000000000000000000000 +0000FF00000000000000000000000000000000000000000000FF0000000000000000000000000000 +00000000FF000000000000000000000000000000000000FF00000000000000000000000000000000 +FF00000000000000000000000000000000FF000000000000000000000000000000000000FF000000 +000000000000000000000000000000FF00000000000000000000000000000000000000000000FF00 +00000000000000000000000000000000000000000000000000FF0000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000FF00000000000000 +00000000000000000000000000000000000000FF0000000000000000000000000000000000000000 +00FF00000000000000000000000000000000000000FF0000000000000000000000000000000000FF +00000000000000000000000000000000FF00000000000000000000000000000000FF000000000000 +0000000000000000000000FF00000000000000000000000000000000000000FF0000000000000000 +00000000000000000000000000FF0000000000000000000000000000000000000000000000000000 +FF000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000FF0000000000000000000000000000000000000000000000000000FF000000 +000000000000000000000000000000000000FF000000000000000000000000000000000000FF0000 +000000000000000000000000000000FF00000000000000000000000000000000FF00000000000000 +000000000000000000FF0000000000000000000000000000000000FF000000000000000000000000 +000000000000FF000000000000000000000000000000000000000000FF0000000000000000000000 +000000000000000000000000000000FF000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000FF00000000000000000000000000 +000000000000000000000000FF000000000000000000000000000000000000000000FF0000000000 +00000000000000000000000000FF0000000000000000000000000000000000FF0000000000000000 +0000000000000000FF00000000000000000000000000000000FF0000000000000000000000000000 +000000FF000000000000000000000000000000000000FF0000000000000000000000000000000000 +00000000FF00000000000000000000000000000000000000000000000000FF000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000FF00000000000000000000000000000000000000000000000000FF00000000000000000000 +0000000000000000000000FF000000000000000000000000000000000000FF000000000000000000 +00000000000000FF00000000000000000000000000000000FF000000000000000000000000000000 +00FF00000000000000000000000000000000FF000000000000000000000000000000000000FF0000 +00000000000000000000000000000000000000FF0000000000000000000000000000000000000000 +0000000000FF00000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000FF0000000000000000000000000000000000000000 +0000000000FF000000000000000000000000000000000000000000FF000000000000000000000000 +000000000000FF00000000000000000000000000000000FF00000000000000000000000000000000 +FF00000000000000000000000000000000FF00000000000000000000000000000000FF0000000000 +00000000000000000000000000FF000000000000000000000000000000000000000000FF00000000 +000000000000000000000000000000000000000000FF000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000FF000000 +00000000000000000000000000000000000000000000FF0000000000000000000000000000000000 +000000FF000000000000000000000000000000000000FF00000000000000000000000000000000FF +00000000000000000000000000000000FF00000000000000000000000000000000FF000000000000 +00000000000000000000FF000000000000000000000000000000000000FF00000000000000000000 +00000000000000000000FF00000000000000000000000000000000000000000000000000FF000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000FF00000000000000000000000000000000000000000000000000FF +0000000000000000000000000000000000000000FF000000000000000000000000000000000000FF +00000000000000000000000000000000FF000000000000000000000000000000FF00000000000000 +0000000000000000FF00000000000000000000000000000000FF0000000000000000000000000000 +00000000FF0000000000000000000000000000000000000000FF0000000000000000000000000000 +0000000000000000000000FF00000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000FF000000000000000000 +000000000000000000000000000000FF0000000000000000000000000000000000000000FF000000 +000000000000000000000000000000FF00000000000000000000000000000000FF00000000000000 +0000000000000000FF000000000000000000000000000000FF000000000000000000000000000000 +00FF000000000000000000000000000000000000FF00000000000000000000000000000000000000 +00FF000000000000000000000000000000000000000000000000FF00000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000FF000000000000000000000000000000000000000000000000FF00000000000000 +00000000000000000000000000FF0000000000000000000000000000000000FF0000000000000000 +0000000000000000FF000000000000000000000000000000FF000000000000000000000000000000 +FF00000000000000000000000000000000FF0000000000000000000000000000000000FF00000000 +00000000000000000000000000000000FF0000000000000000000000000000000000000000000000 +00FF0000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000FF000000000000000000000000000000 +000000000000000000FF00000000000000000000000000000000000000FF00000000000000000000 +00000000000000FF00000000000000000000000000000000FF000000000000000000000000000000 +FF000000000000000000000000000000FF00000000000000000000000000000000FF000000000000 +0000000000000000000000FF00000000000000000000000000000000000000FF0000000000000000 +00000000000000000000000000000000FF0000000000000000000000000000000000000000000000 +000000000000000000FF000000000000000000000000000000000000000000000000000000000000 +00FF0000000000000000000000000000000000000000000000FF0000000000000000000000000000 +000000000000FF0000000000000000000000000000000000FF000000000000000000000000000000 +FF000000000000000000000000000000FF000000000000000000000000000000FF00000000000000 +0000000000000000FF0000000000000000000000000000000000FF00000000000000000000000000 +00000000000000FF0000000000000000000000000000000000000000000000FF0000000000000000 +0000000000000000000000000000000000000000000000FF0000FF00000000000000000000000000 +000000000000000000000000000000000000FF000000000000000000000000000000000000000000 +0000FF00000000000000000000000000000000000000FF0000000000000000000000000000000000 +FF000000000000000000000000000000FF000000000000000000000000000000FF00000000000000 +0000000000000000FF000000000000000000000000000000FF000000000000000000000000000000 +0000FF00000000000000000000000000000000000000FF0000000000000000000000000000000000 +000000000000FF00000000000000000000000000000000000000000000000000000000000000FF00 +000000FF000000000000000000000000000000000000000000000000000000000000FF0000000000 +00000000000000000000000000000000000000FF00000000000000000000000000000000000000FF +00000000000000000000000000000000FF000000000000000000000000000000FF00000000000000 +0000000000000000FF000000000000000000000000000000FF000000000000000000000000000000 +FF00000000000000000000000000000000FF00000000000000000000000000000000000000FF0000 +00000000000000000000000000000000000000000000FF0000000000000000000000000000000000 +00000000000000000000000000FF000000000000FFFF000000000000000000000000000000000000 +0000000000000000000000FF0000000000000000000000000000000000000000000000FF00000000 +000000000000000000000000000000FF0000000000000000000000000000000000FF000000000000 +000000000000000000FF0000000000000000000000000000FF0000000000000000000000000000FF +000000000000000000000000000000FF0000000000000000000000000000000000FF000000000000 +00000000000000000000000000FF0000000000000000000000000000000000000000000000FF0000 +000000000000000000000000000000000000000000000000000000FFFF000000000000000000FF00 +00000000000000000000000000000000000000000000000000000000FF0000000000000000000000 +000000000000000000000000FF00000000000000000000000000000000000000FF00000000000000 +000000000000000000FF000000000000000000000000000000FF0000000000000000000000000000 +FF0000000000000000000000000000FF000000000000000000000000000000FF0000000000000000 +0000000000000000FF00000000000000000000000000000000000000FF0000000000000000000000 +000000000000000000000000FF000000000000000000000000000000000000000000000000000000 +0000FF000000000000000000000000FF000000000000000000000000000000000000000000000000 +0000000000FF0000000000000000000000000000000000000000000000FF00000000000000000000 +0000000000000000FF00000000000000000000000000000000FF0000000000000000000000000000 +00FF0000000000000000000000000000FF0000000000000000000000000000FF0000000000000000 +00000000000000FF00000000000000000000000000000000FF000000000000000000000000000000 +000000FF0000000000000000000000000000000000000000000000FF000000000000000000000000 +0000000000000000000000000000000000FF0000000000000000000000000000FF00000000000000 +00000000000000000000000000000000000000000000FF0000000000000000000000000000000000 +0000000000FF00000000000000000000000000000000000000FF0000000000000000000000000000 +00FF000000000000000000000000000000FF0000000000000000000000000000FF00000000000000 +00000000000000FF000000000000000000000000000000FF000000000000000000000000000000FF +00000000000000000000000000000000000000FF0000000000000000000000000000000000000000 +0000FF0000000000000000000000000000000000000000000000000000000000FF00000000000000 +000000000000000000FF0000000000000000000000000000000000000000000000000000000000FF +00000000000000000000000000000000000000000000FF0000000000000000000000000000000000 +00FF00000000000000000000000000000000FF0000000000000000000000000000FF000000000000 +0000000000000000FF0000000000000000000000000000FF0000000000000000000000000000FF00 +000000000000000000000000000000FF000000000000000000000000000000000000FF0000000000 +0000000000000000000000000000000000FF00000000000000000000000000000000000000000000 +00000000000000FF000000000000000000000000000000000000FF00000000000000000000000000 +00000000000000000000000000000000FF000000000000000000000000000000000000000000FF00 +0000000000000000000000000000000000FF00000000000000000000000000000000FF0000000000 +000000000000000000FF0000000000000000000000000000FF0000000000000000000000000000FF +0000000000000000000000000000FF00000000000000000000000000000000FF0000000000000000 +00000000000000000000FF000000000000000000000000000000000000000000FF00000000000000 +00000000000000000000000000000000000000000000FF0000000000000000000000000000000000 +000000FFFF000000000000000000000000000000000000000000000000000000FF00000000000000 +000000000000000000000000000000FF000000000000000000000000000000000000FF0000000000 +00000000000000000000FF0000000000000000000000000000FF0000000000000000000000000000 +FF0000000000000000000000000000FF0000000000000000000000000000FF000000000000000000 +000000000000FF000000000000000000000000000000000000FF0000000000000000000000000000 +0000000000000000FF000000000000000000000000000000000000000000000000000000FFFF0000 +000000000000000000000000000000000000000000FF000000000000000000000000000000000000 +000000000000000000FF00000000000000000000000000000000000000000000FF00000000000000 +00000000000000000000FF00000000000000000000000000000000FF000000000000000000000000 +0000FF00000000000000000000000000FF00000000000000000000000000FF000000000000000000 +0000000000FF00000000000000000000000000000000FF0000000000000000000000000000000000 +FF00000000000000000000000000000000000000000000FF00000000000000000000000000000000 +0000000000000000000000FF0000000000000000000000000000000000000000000000000000FF00 +0000000000000000000000000000000000000000000000000000FF00000000000000000000000000 +0000000000000000FF000000000000000000000000000000000000FF000000000000000000000000 +000000FF0000000000000000000000000000FF00000000000000000000000000FF00000000000000 +000000000000FF0000000000000000000000000000FF000000000000000000000000000000FF0000 +00000000000000000000000000000000FF000000000000000000000000000000000000000000FF00 +0000000000000000000000000000000000000000000000000000FF00000000000000000000000000 +000000000000000000000000000000FF000000000000000000000000000000000000000000000000 +000000FF000000000000000000000000000000000000000000FF0000000000000000000000000000 +000000FF000000000000000000000000000000FF0000000000000000000000000000FF0000000000 +0000000000000000FF00000000000000000000000000FF0000000000000000000000000000FF0000 +00000000000000000000000000FF0000000000000000000000000000000000FF0000000000000000 +00000000000000000000000000FF0000000000000000000000000000000000000000000000000000 +00FF000000000000000000000000000000000000000000000000000000000000FF00000000000000 +0000000000000000000000000000000000000000FF00000000000000000000000000000000000000 +0000FF0000000000000000000000000000000000FF000000000000000000000000000000FF000000 +00000000000000000000FF00000000000000000000000000FF00000000000000000000000000FF00 +000000000000000000000000FF000000000000000000000000000000FF0000000000000000000000 +000000000000FF000000000000000000000000000000000000000000FF0000000000000000000000 +00000000000000000000000000000000FF0000000000000000000000000000000000000000000000 +000000000000000000FF000000000000000000000000000000000000000000000000000000FF0000 +000000000000000000000000000000000000FF0000000000000000000000000000000000FF000000 +000000000000000000000000FF00000000000000000000000000FF00000000000000000000000000 +FF00000000000000000000000000FF00000000000000000000000000FF0000000000000000000000 +00000000FF0000000000000000000000000000000000FF0000000000000000000000000000000000 +000000FF000000000000000000000000000000000000000000000000000000FF0000000000000000 +0000000000000000000000000000000000000000000000000000FF00000000000000000000000000 +0000000000000000000000000000FF0000000000000000000000000000000000000000FF00000000 +00000000000000000000000000FF0000000000000000000000000000FF0000000000000000000000 +0000FF00000000000000000000000000FF00000000000000000000000000FF000000000000000000 +00000000FF0000000000000000000000000000FF0000000000000000000000000000000000FF0000 +000000000000000000000000000000000000FF000000000000000000000000000000000000000000 +000000000000FF000000000000000000000000000000000000000000000000000000000000000000 +000000FFFF0000000000000000000000000000000000000000000000000000FF0000000000000000 +000000000000000000000000FF00000000000000000000000000000000FF00000000000000000000 +00000000FF00000000000000000000000000FF00000000000000000000000000FF00000000000000 +000000000000FF00000000000000000000000000FF0000000000000000000000000000FF00000000 +000000000000000000000000FF0000000000000000000000000000000000000000FF000000000000 +0000000000000000000000000000000000000000FFFF000000000000000000000000000000000000 +000000000000000000000000000000000000000000FF000000000000000000000000000000000000 +00000000000000FF0000000000000000000000000000000000000000FF0000000000000000000000 +000000000000FF0000000000000000000000000000FF00000000000000000000000000FF00000000 +0000000000000000FF000000000000000000000000FF00000000000000000000000000FF00000000 +00000000000000000000FF0000000000000000000000000000000000FF0000000000000000000000 +000000000000000000FF00000000000000000000000000000000000000000000000000FF00000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000FF00 +000000000000000000000000000000000000000000000000FF000000000000000000000000000000 +0000000000FF00000000000000000000000000000000FF0000000000000000000000000000FF0000 +0000000000000000000000FF000000000000000000000000FF000000000000000000000000FF0000 +0000000000000000000000FF0000000000000000000000000000FF00000000000000000000000000 +000000FF0000000000000000000000000000000000000000FF000000000000000000000000000000 +00000000000000000000FF0000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000FF000000000000000000000000000000000000000000000000 +00FF0000000000000000000000000000000000000000FF000000000000000000000000000000FF00 +00000000000000000000000000FF00000000000000000000000000FF000000000000000000000000 +FF000000000000000000000000FF00000000000000000000000000FF000000000000000000000000 +0000FF000000000000000000000000000000FF0000000000000000000000000000000000000000FF +00000000000000000000000000000000000000000000000000FF0000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000FF00000000000000 +000000000000000000000000000000000000FF00000000000000000000000000000000000000FF00 +000000000000000000000000000000FF0000000000000000000000000000FF000000000000000000 +000000FF000000000000000000000000FF000000000000000000000000FF00000000000000000000 +0000FF0000000000000000000000000000FF00000000000000000000000000000000FF0000000000 +0000000000000000000000000000FF00000000000000000000000000000000000000000000000000 +FF000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000FF00000000000000000000000000000000000000000000000000FF00000000 +000000000000000000000000000000FF000000000000000000000000000000FF0000000000000000 +000000000000FF000000000000000000000000FF000000000000000000000000FF00000000000000 +0000000000FF000000000000000000000000FF0000000000000000000000000000FF000000000000 +000000000000000000FF00000000000000000000000000000000000000FF00000000000000000000 +000000000000000000000000000000FF000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000FFFF000000000000000000000000 +000000000000000000000000FF000000000000000000000000000000000000FF0000000000000000 +0000000000000000FF00000000000000000000000000FF000000000000000000000000FF00000000 +0000000000000000FF000000000000000000000000FF000000000000000000000000FF0000000000 +0000000000000000FF00000000000000000000000000000000FF0000000000000000000000000000 +00000000FF000000000000000000000000000000000000000000000000FFFF000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000FF000000000000000000000000000000000000000000000000FF00000000000000000000 +0000000000000000FF000000000000000000000000000000FF00000000000000000000000000FF00 +0000000000000000000000FF000000000000000000000000FF000000000000000000000000FF0000 +00000000000000000000FF00000000000000000000000000FF000000000000000000000000000000 +FF000000000000000000000000000000000000FF0000000000000000000000000000000000000000 +00000000FF0000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000FF000000000000000000000000000000000000 +0000000000FF00000000000000000000000000000000000000FF0000000000000000000000000000 +00FF00000000000000000000000000FF000000000000000000000000FF0000000000000000000000 +FF0000000000000000000000FF000000000000000000000000FF00000000000000000000000000FF +000000000000000000000000000000FF00000000000000000000000000000000000000FF00000000 +00000000000000000000000000000000000000FF0000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000FF00 +00000000000000000000000000000000000000000000FF0000000000000000000000000000000000 +00FF000000000000000000000000000000FF00000000000000000000000000FF0000000000000000 +00000000FF0000000000000000000000FF0000000000000000000000FF0000000000000000000000 +00FF00000000000000000000000000FF000000000000000000000000000000FF0000000000000000 +00000000000000000000FF0000000000000000000000000000000000000000000000FF0000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000FF0000000000000000000000000000000000000000000000FF +000000000000000000000000000000000000FF000000000000000000000000000000FF0000000000 +00000000000000FF000000000000000000000000FF0000000000000000000000FF00000000000000 +00000000FF000000000000000000000000FF000000000000000000000000FF000000000000000000 +000000000000FF000000000000000000000000000000000000FF0000000000000000000000000000 +000000000000000000FF000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000FF00000000000000 +00000000000000000000000000000000FF000000000000000000000000000000000000FF00000000 +00000000000000000000FF00000000000000000000000000FF0000000000000000000000FF000000 +0000000000000000FF0000000000000000000000FF0000000000000000000000FF00000000000000 +000000000000FF0000000000000000000000000000FF000000000000000000000000000000000000 +FF0000000000000000000000000000000000000000000000FF000000000000000000000000000000 +0000000000000000000000000000000000FF00000000000000000000000000000000000000000000 +000000000000000000FF0000000000000000000000000000000000000000000000FF000000000000 +0000000000000000000000FF000000000000000000000000000000FF000000000000000000000000 +FF0000000000000000000000FF0000000000000000000000FF0000000000000000000000FF000000 +0000000000000000FF000000000000000000000000FF000000000000000000000000000000FF0000 +000000000000000000000000000000FF0000000000000000000000000000000000000000000000FF +00000000000000000000000000000000000000000000000000000000000000FF0000FF0000000000 +0000000000000000000000000000000000000000000000000000FFFF000000000000000000000000 +00000000000000000000FF0000000000000000000000000000000000FF0000000000000000000000 +000000FF000000000000000000000000FF0000000000000000000000FF0000000000000000000000 +FF0000000000000000000000FF0000000000000000000000FF000000000000000000000000FF0000 +000000000000000000000000FF0000000000000000000000000000000000FF000000000000000000 +00000000000000000000000000FFFF00000000000000000000000000000000000000000000000000 +000000000000FF00000000FFFF000000000000000000000000000000000000000000000000000000 +00000000FF00000000000000000000000000000000000000000000FF000000000000000000000000 +0000000000FF00000000000000000000000000FF00000000000000000000000000FF000000000000 +00000000FF0000000000000000000000FF0000000000000000000000FF00000000000000000000FF +00000000000000000000000000FF00000000000000000000000000FF000000000000000000000000 +0000000000FF00000000000000000000000000000000000000000000FF0000000000000000000000 +0000000000000000000000000000000000000000FFFF00000000000000FF00000000000000000000 +000000000000000000000000000000000000000000FF000000000000000000000000000000000000 +00000000FF00000000000000000000000000000000FF0000000000000000000000000000FF000000 +000000000000000000FF0000000000000000000000FF00000000000000000000FF00000000000000 +000000FF0000000000000000000000FF000000000000000000000000FF0000000000000000000000 +000000FF00000000000000000000000000000000FF00000000000000000000000000000000000000 +000000FF00000000000000000000000000000000000000000000000000000000000000FF00000000 +000000000000FFFF000000000000000000000000000000000000000000000000000000000000FF00 +0000000000000000000000000000000000000000FF0000000000000000000000000000000000FF00 +000000000000000000000000FF000000000000000000000000FF0000000000000000000000FF0000 +0000000000000000FF00000000000000000000FF0000000000000000000000FF0000000000000000 +00000000FF00000000000000000000000000FF0000000000000000000000000000000000FF000000 +000000000000000000000000000000000000FF000000000000000000000000000000000000000000 +000000000000000000FFFF00000000000000000000000000FF000000000000000000000000000000 +000000000000000000000000000000FF000000000000000000000000000000000000000000FF0000 +000000000000000000000000000000FF00000000000000000000000000FF00000000000000000000 +00FF0000000000000000000000FF00000000000000000000FF00000000000000000000FF00000000 +00000000000000FF0000000000000000000000FF00000000000000000000000000FF000000000000 +0000000000000000000000FF000000000000000000000000000000000000000000FF000000000000 +000000000000000000000000000000000000000000000000FF000000000000000000000000000000 +00FFFF0000000000000000000000000000000000000000000000000000000000FF00000000000000 +0000000000000000000000000000FF00000000000000000000000000000000FF0000000000000000 +0000000000FF000000000000000000000000FF00000000000000000000FF00000000000000000000 +FF00000000000000000000FF00000000000000000000FF000000000000000000000000FF00000000 +000000000000000000FF00000000000000000000000000000000FF00000000000000000000000000 +0000000000000000FF0000000000000000000000000000000000000000000000000000000000FFFF +00000000000000000000000000000000000000FFFF00000000000000000000000000000000000000 +000000000000000000FFFF0000000000000000000000000000000000000000FF0000000000000000 +0000000000000000FF00000000000000000000000000FF0000000000000000000000FF0000000000 +0000000000FF00000000000000000000FF00000000000000000000FF00000000000000000000FF00 +00000000000000000000FF00000000000000000000000000FF000000000000000000000000000000 +00FF0000000000000000000000000000000000000000FFFF00000000000000000000000000000000 +000000000000000000000000FFFF0000000000000000000000000000000000000000000000FF0000 +000000000000000000000000000000000000000000000000000000FF000000000000000000000000 +0000000000000000FF000000000000000000000000000000FF00000000000000000000000000FF00 +00000000000000000000FF00000000000000000000FF00000000000000000000FF00000000000000 +000000FF00000000000000000000FF0000000000000000000000FF00000000000000000000000000 +FF000000000000000000000000000000FF0000000000000000000000000000000000000000FF0000 +000000000000000000000000000000000000000000000000000000FF000000000000000000000000 +0000000000000000000000000000FFFF000000000000000000000000000000000000000000000000 +00000000FF0000000000000000000000000000000000000000FF0000000000000000000000000000 +00FF00000000000000000000000000FF0000000000000000000000FF00000000000000000000FF00 +0000000000000000FF000000000000000000FF00000000000000000000FF00000000000000000000 +00FF00000000000000000000000000FF000000000000000000000000000000FF0000000000000000 +000000000000000000000000FF000000000000000000000000000000000000000000000000000000 +00FFFF0000000000000000000000000000000000000000000000000000000000FF00000000000000 +000000000000000000000000000000000000000000FF000000000000000000000000000000000000 +0000FF000000000000000000000000000000FF000000000000000000000000FF0000000000000000 +000000FF00000000000000000000FF000000000000000000FF000000000000000000FF0000000000 +0000000000FF0000000000000000000000FF000000000000000000000000FF000000000000000000 +000000000000FF0000000000000000000000000000000000000000FF000000000000000000000000 +00000000000000000000000000000000FF0000000000000000000000000000000000000000000000 +000000000000000000FFFF000000000000000000000000000000000000000000000000000000FF00 +000000000000000000000000000000000000FF000000000000000000000000000000FF0000000000 +0000000000000000FF00000000000000000000FF00000000000000000000FF000000000000000000 +FF000000000000000000FF00000000000000000000FF00000000000000000000FF00000000000000 +000000000000FF000000000000000000000000000000FF0000000000000000000000000000000000 +0000FF000000000000000000000000000000000000000000000000000000FFFF0000000000000000 +000000000000000000000000000000000000000000000000000000FF000000000000000000000000 +000000000000000000000000000000FF00000000000000000000000000000000000000FF00000000 +0000000000000000000000FF000000000000000000000000FF00000000000000000000FF00000000 +000000000000FF000000000000000000FF000000000000000000FF00000000000000000000FF0000 +0000000000000000FF000000000000000000000000FF000000000000000000000000000000FF0000 +0000000000000000000000000000000000FF00000000000000000000000000000000000000000000 +0000000000FF00000000000000000000000000000000000000000000000000000000000000000000 +00000000FFFF0000000000000000000000000000000000000000000000000000FF00000000000000 +000000000000000000000000FF000000000000000000000000000000FF0000000000000000000000 +FF0000000000000000000000FF000000000000000000FF000000000000000000FF00000000000000 +0000FF000000000000000000FF0000000000000000000000FF0000000000000000000000FF000000 +000000000000000000000000FF00000000000000000000000000000000000000FF00000000000000 +00000000000000000000000000000000000000FFFF00000000000000000000000000000000000000 +00000000000000000000000000000000000000000000FF0000000000000000000000000000000000 +000000000000000000FFFF000000000000000000000000000000000000FF00000000000000000000 +00000000FF000000000000000000000000FF00000000000000000000FF000000000000000000FF00 +0000000000000000FF000000000000000000FF000000000000000000FF00000000000000000000FF +000000000000000000000000FF0000000000000000000000000000FF000000000000000000000000 +000000000000FFFF0000000000000000000000000000000000000000000000000000FF0000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000FF +FF0000000000000000000000000000000000000000000000000000FF000000000000000000000000 +000000000000FF0000000000000000000000000000FF0000000000000000000000FF000000000000 +00000000FF000000000000000000FF000000000000000000FF000000000000000000FF0000000000 +00000000FF00000000000000000000FF0000000000000000000000FF000000000000000000000000 +0000FF000000000000000000000000000000000000FF000000000000000000000000000000000000 +0000000000000000FFFF000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000FFFF000000000000000000000000000000000000000000 +00000000FF000000000000000000000000000000000000FF0000000000000000000000000000FF00 +00000000000000000000FF00000000000000000000FF000000000000000000FF0000000000000000 +FF0000000000000000FF000000000000000000FF00000000000000000000FF000000000000000000 +0000FF0000000000000000000000000000FF000000000000000000000000000000000000FF000000 +00000000000000000000000000000000000000000000FFFF00000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000FF00000000 +000000000000000000000000000000000000000000FF000000000000000000000000000000000000 +FF00000000000000000000000000FF0000000000000000000000FF00000000000000000000FF0000 +00000000000000FF0000000000000000FF0000000000000000FF000000000000000000FF00000000 +000000000000FF0000000000000000000000FF00000000000000000000000000FF00000000000000 +0000000000000000000000FF00000000000000000000000000000000000000000000000000FF0000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000FFFF000000000000000000000000000000000000000000000000FF00 +0000000000000000000000000000000000FF00000000000000000000000000FF0000000000000000 +000000FF000000000000000000FF000000000000000000FF0000000000000000FF00000000000000 +00FF000000000000000000FF000000000000000000FF0000000000000000000000FF000000000000 +00000000000000FF000000000000000000000000000000000000FF00000000000000000000000000 +0000000000000000000000FFFF000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000FF000000000000000000 +000000000000000000000000000000FF0000000000000000000000000000000000FF000000000000 +0000000000000000FF00000000000000000000FF00000000000000000000FF0000000000000000FF +0000000000000000FF0000000000000000FF0000000000000000FF00000000000000000000FF0000 +0000000000000000FF0000000000000000000000000000FF00000000000000000000000000000000 +00FF000000000000000000000000000000000000000000000000FF00000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000FFFF0000000000000000000000000000000000000000000000FFFF000000000000 +00000000000000000000FF00000000000000000000000000FF0000000000000000000000FF000000 +000000000000FF0000000000000000FF0000000000000000FF0000000000000000FF000000000000 +0000FF000000000000000000FF0000000000000000000000FF00000000000000000000000000FF00 +000000000000000000000000000000FFFF0000000000000000000000000000000000000000000000 +FFFF0000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000FF0000000000000000000000000000 +00000000000000000000FF00000000000000000000000000000000FF000000000000000000000000 +00FF00000000000000000000FF000000000000000000FF0000000000000000FF0000000000000000 +FF0000000000000000FF0000000000000000FF000000000000000000FF00000000000000000000FF +00000000000000000000000000FF00000000000000000000000000000000FF000000000000000000 +000000000000000000000000000000FF000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000FFFF0000000000000000000000000000000000000000000000FF000000000000000000000000 +00000000FF000000000000000000000000FF0000000000000000000000FF0000000000000000FF00 +00000000000000FF0000000000000000FF0000000000000000FF0000000000000000FF0000000000 +000000FF0000000000000000000000FF000000000000000000000000FF0000000000000000000000 +0000000000FF0000000000000000000000000000000000000000000000FFFF000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000FF00000000000000000000000000000000000000 +00000000FF00000000000000000000000000000000FF000000000000000000000000FF0000000000 +0000000000FF000000000000000000FF0000000000000000FF00000000000000FF00000000000000 +FF0000000000000000FF000000000000000000FF00000000000000000000FF000000000000000000 +000000FF00000000000000000000000000000000FF00000000000000000000000000000000000000 +00000000FF0000000000000000000000000000000000000000000000000000000000000000000000 +00FFFF00000000000000000000000000000000000000000000000000000000000000000000FFFF00 +000000000000000000000000000000000000000000FF00000000000000000000000000000000FF00 +0000000000000000000000FF00000000000000000000FF0000000000000000FF0000000000000000 +FF00000000000000FF00000000000000FF0000000000000000FF0000000000000000FF0000000000 +0000000000FF000000000000000000000000FF00000000000000000000000000000000FF00000000 +000000000000000000000000000000000000FFFF0000000000000000000000000000000000000000 +0000000000000000000000000000FFFF000000FFFF00000000000000000000000000000000000000 +000000000000000000000000000000FFFF000000000000000000000000000000000000000000FF00 +000000000000000000000000000000FF0000000000000000000000FF00000000000000000000FF00 +00000000000000FF0000000000000000FF00000000000000FF00000000000000FF00000000000000 +00FF0000000000000000FF00000000000000000000FF0000000000000000000000FF000000000000 +00000000000000000000FF000000000000000000000000000000000000000000FFFF000000000000 +00000000000000000000000000000000000000000000000000000000FFFF00000000000000FFFF00 +000000000000000000000000000000000000000000000000000000000000000000FF000000000000 +000000000000000000000000000000FF000000000000000000000000000000FF0000000000000000 +00000000FF000000000000000000FF000000000000000000FF00000000000000FF00000000000000 +FF00000000000000FF00000000000000FF000000000000000000FF000000000000000000FF000000 +000000000000000000FF000000000000000000000000000000FF0000000000000000000000000000 +00000000000000FF0000000000000000000000000000000000000000000000000000000000000000 +0000FFFF0000000000000000000000FFFF0000000000000000000000000000000000000000000000 +00000000000000000000FFFF0000000000000000000000000000000000000000FFFF000000000000 +0000000000000000FF000000000000000000000000FF000000000000000000FF0000000000000000 +FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF00000000000000 +00FF000000000000000000FF000000000000000000000000FF0000000000000000000000000000FF +FF0000000000000000000000000000000000000000FFFF0000000000000000000000000000000000 +00000000000000000000000000000000FFFF000000000000000000000000000000FFFF0000000000 +00000000000000000000000000000000000000000000000000000000FF0000000000000000000000 +00000000000000000000FF0000000000000000000000000000FF0000000000000000000000FF0000 +00000000000000FF0000000000000000FF00000000000000FF00000000000000FF00000000000000 +FF00000000000000FF0000000000000000FF000000000000000000FF0000000000000000000000FF +0000000000000000000000000000FF000000000000000000000000000000000000000000FF000000 +000000000000000000000000000000000000000000000000000000000000FFFF0000000000000000 +0000000000000000000000FFFFFF0000000000000000000000000000000000000000000000000000 +0000000000FFFF0000000000000000000000000000000000000000FF000000000000000000000000 +0000FF0000000000000000000000FF000000000000000000FF00000000000000FF00000000000000 +FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF00000000000000 +0000FF0000000000000000000000FF0000000000000000000000000000FF00000000000000000000 +00000000000000000000FFFF00000000000000000000000000000000000000000000000000000000 +000000FFFFFF000000000000000000000000000000000000000000000000FFFF0000000000000000 +0000000000000000000000000000000000000000000000FF00000000000000000000000000000000 +00000000FF0000000000000000000000000000FF0000000000000000000000FF0000000000000000 +FF0000000000000000FF00000000000000FF000000000000FF000000000000FF00000000000000FF +0000000000000000FF0000000000000000FF0000000000000000000000FF00000000000000000000 +00000000FF0000000000000000000000000000000000000000FF0000000000000000000000000000 +0000000000000000000000000000000000FFFF000000000000000000000000000000000000000000 +0000000000000000FFFF000000000000000000000000000000000000000000000000000000000000 +FFFF00000000000000000000000000000000000000FF0000000000000000000000000000FF000000 +00000000000000FF000000000000000000FF00000000000000FF00000000000000FF000000000000 +FF000000000000FF00000000000000FF00000000000000FF000000000000000000FF000000000000 +00000000FF0000000000000000000000000000FF00000000000000000000000000000000000000FF +FF000000000000000000000000000000000000000000000000000000000000FFFF00000000000000 +0000000000000000000000000000000000000000000000000000FFFF000000000000000000000000 +000000000000000000000000000000000000FF00000000000000000000000000000000000000FF00 +00000000000000000000000000FF00000000000000000000FF0000000000000000FF000000000000 +00FF00000000000000FF000000000000FF000000000000FF00000000000000FF00000000000000FF +0000000000000000FF00000000000000000000FF0000000000000000000000000000FF0000000000 +0000000000000000000000000000FF00000000000000000000000000000000000000000000000000 +0000000000FFFF000000000000000000000000000000000000000000000000000000000000000000 +00000000FFFF0000000000000000000000000000000000000000000000000000000000FFFF000000 +000000000000000000000000000000FFFF00000000000000000000000000FF000000000000000000 +00FF0000000000000000FF00000000000000FF000000000000FF000000000000FF000000000000FF +000000000000FF00000000000000FF0000000000000000FF00000000000000000000FF0000000000 +0000000000000000FFFF000000000000000000000000000000000000FFFF00000000000000000000 +00000000000000000000000000000000000000FFFF00000000000000000000000000000000000000 +00000000000000000000000000000000000000000000FFFF00000000000000000000000000000000 +00000000000000000000000000FFFF000000000000000000000000000000000000FF000000000000 +000000000000FF00000000000000000000FF0000000000000000FF00000000000000FF0000000000 +00FF000000000000FF000000000000FF000000000000FF00000000000000FF0000000000000000FF +00000000000000000000FF000000000000000000000000FF00000000000000000000000000000000 +0000FFFF0000000000000000000000000000000000000000000000000000000000FFFF0000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +FFFFFF00000000000000000000000000000000000000000000000000000000FF0000000000000000 +00000000000000000000FF000000000000000000000000FF00000000000000000000FF0000000000 +000000FF000000000000FF000000000000FF000000000000FF000000000000FF000000000000FF00 +0000000000FF0000000000000000FF00000000000000000000FF000000000000000000000000FF00 +0000000000000000000000000000000000FF00000000000000000000000000000000000000000000 +000000000000FFFFFF00000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000FFFF00000000000000000000000000000000000000 +0000000000000000FFFF0000000000000000000000000000000000FF000000000000000000000000 +FF000000000000000000FF0000000000000000FF000000000000FF000000000000FF000000000000 +FF000000000000FF000000000000FF000000000000FF0000000000000000FF000000000000000000 +FF000000000000000000000000FF0000000000000000000000000000000000FFFF00000000000000 +0000000000000000000000000000000000000000FFFF000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000FFFF00 +0000000000000000000000000000000000000000000000000000FF00000000000000000000000000 +00000000FF000000000000000000000000FF000000000000000000FF00000000000000FF00000000 +000000FF000000000000FF0000000000FF0000000000FF000000000000FF00000000000000FF0000 +0000000000FF000000000000000000FF000000000000000000000000FF0000000000000000000000 +000000000000FF000000000000000000000000000000000000000000000000000000FFFF00000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000FFFF0000000000000000000000000000000000000000000000 +000000FFFF00000000000000000000000000000000FF000000000000000000000000FF0000000000 +00000000FF00000000000000FF000000000000FF000000000000FF0000000000FF0000000000FF00 +0000000000FF000000000000FF00000000000000FF000000000000000000FF000000000000000000 +000000FF00000000000000000000000000000000FFFF000000000000000000000000000000000000 +0000000000000000FFFF000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000FFFF0000000000 +000000000000000000000000000000000000000000FF00000000000000000000000000000000FF00 +0000000000000000000000FF0000000000000000FF00000000000000FF000000000000FF00000000 +0000FF0000000000FF0000000000FF000000000000FF000000000000FF00000000000000FF000000 +0000000000FF000000000000000000000000FF00000000000000000000000000000000FF00000000 +00000000000000000000000000000000000000000000FFFF00000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000FFFFFF000000000000000000000000000000000000000000000000FFFF +000000000000000000000000000000FFFF0000000000000000000000FF0000000000000000FF0000 +0000000000FF000000000000FF0000000000FF0000000000FF0000000000FF0000000000FF000000 +000000FF00000000000000FF0000000000000000FF0000000000000000000000FFFF000000000000 +000000000000000000FFFF000000000000000000000000000000000000000000000000FFFFFF0000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000FFFF0000000000000000 +00000000000000000000000000000000FF00000000000000000000000000000000FF000000000000 +00000000FF000000000000000000FF000000000000FF000000000000FF0000000000FF0000000000 +FF0000000000FF0000000000FF000000000000FF000000000000FF000000000000000000FF000000 +00000000000000FF00000000000000000000000000000000FF000000000000000000000000000000 +000000000000000000FFFF0000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000FFFF0000000000000000000000000000000000000000000000FFFF0000000000 +00000000000000000000FF00000000000000000000FF0000000000000000FF00000000000000FF00 +00000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000 +0000FF0000000000000000FF00000000000000000000FF000000000000000000000000000000FFFF +0000000000000000000000000000000000000000000000FFFF000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000FFFF000000000000000000000000 +0000000000000000000000FFFF0000000000000000000000000000FF00000000000000000000FF00 +00000000000000FF000000000000FF000000000000FF00000000FF0000000000FF0000000000FF00 +000000FF000000000000FF000000000000FF0000000000000000FF00000000000000000000FF0000 +000000000000000000000000FFFF0000000000000000000000000000000000000000000000FFFF00 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000FFFF0000000000000000000000000000000000000000000000FF00000000000000000000 +00000000FF00000000000000000000FF0000000000000000FF000000000000FF0000000000FF0000 +000000FF00000000FF00000000FF0000000000FF0000000000FF000000000000FF00000000000000 +00FF00000000000000000000FF0000000000000000000000000000FF000000000000000000000000 +0000000000000000000000FFFF000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000FFFFFF0000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000FFFFFF000000000000000000000000000000 +000000000000FFFF00000000000000000000000000FF00000000000000000000FF00000000000000 +FF000000000000FF0000000000FF0000000000FF00000000FF00000000FF0000000000FF00000000 +00FF000000000000FF00000000000000FF00000000000000000000FF000000000000000000000000 +00FFFF000000000000000000000000000000000000000000FFFFFF00000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000FFFFFF00000000FFFFFFFF +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00FFFF000000000000000000000000000000000000000000FF00000000000000000000000000FFFF +000000000000000000FF00000000000000FF000000000000FF00000000FF0000000000FF00000000 +FF00000000FF0000000000FF00000000FF000000000000FF00000000000000FF0000000000000000 +00FFFF00000000000000000000000000FF000000000000000000000000000000000000000000FFFF +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00FFFFFFFF0000000000000000000000FFFFFF000000000000000000000000000000000000000000 +00000000000000000000000000000000000000FFFF00000000000000000000000000000000000000 +00FFFF00000000000000000000000000FF000000000000000000FF00000000000000FF0000000000 +FF0000000000FF00000000FF00000000FF00000000FF00000000FF0000000000FF0000000000FF00 +000000000000FF000000000000000000FF00000000000000000000000000FFFF0000000000000000 +000000000000000000000000FFFF0000000000000000000000000000000000000000000000000000 +0000000000000000000000000000FFFFFF000000000000000000000000000000000000FFFFFF0000 +00000000000000000000000000000000000000000000000000000000000000000000000000FFFF00 +00000000000000000000000000000000000000FF00000000000000000000000000FF000000000000 +000000FF000000000000FF0000000000FF0000000000FF00000000FF00000000FF00000000FF0000 +0000FF0000000000FF0000000000FF000000000000FF000000000000000000FF0000000000000000 +0000000000FF0000000000000000000000000000000000000000FFFF000000000000000000000000 +000000000000000000000000000000000000000000000000000000FFFFFF00000000000000000000 +0000000000000000000000000000FFFFFFFF00000000000000000000000000000000000000000000 +000000000000000000000000000000FFFF00000000000000000000000000000000000000FFFF0000 +00000000000000000000FF0000000000000000FF00000000000000FF0000000000FF00000000FF00 +000000FF00000000FF00000000FF00000000FF00000000FF0000000000FF00000000000000FF0000 +000000000000FF000000000000000000000000FFFF00000000000000000000000000000000000000 +FFFF00000000000000000000000000000000000000000000000000000000000000000000000000FF +FFFFFF00000000000000000000000000000000000000000000000000000000000000FFFFFF000000 +000000000000000000000000000000000000000000000000000000000000000000FFFFFF00000000 +0000000000000000000000000000FF000000000000000000000000FF0000000000000000FF000000 +000000FF0000000000FF0000000000FF000000FF00000000FF00000000FF000000FF0000000000FF +0000000000FF000000000000FF0000000000000000FF000000000000000000000000FF0000000000 +00000000000000000000000000FFFFFF000000000000000000000000000000000000000000000000 +000000000000000000000000FFFFFF00000000000000000000000000000000000000000000000000 +00000000000000000000000000FFFFFFFF0000000000000000000000000000000000000000000000 +000000000000000000000000FFFF0000000000000000000000000000000000FFFF00000000000000 +00000000FF0000000000000000FF000000000000FF0000000000FF00000000FF00000000FF000000 +FF000000FF00000000FF00000000FF0000000000FF000000000000FF0000000000000000FF000000 +0000000000000000FFFF0000000000000000000000000000000000FFFF0000000000000000000000 +000000000000000000000000000000000000000000000000FFFFFFFF000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000FFFFFF00000000 +000000000000000000000000000000000000000000000000000000000000FFFF0000000000000000 +000000000000000000FFFF00000000000000000000FF0000000000000000FF000000000000FF0000 +0000FF00000000FF00000000FF000000FF000000FF00000000FF00000000FF00000000FF00000000 +0000FF0000000000000000FF00000000000000000000FFFF00000000000000000000000000000000 +00FFFF00000000000000000000000000000000000000000000000000000000000000000000FFFFFF +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000FFFFFF00000000000000000000000000000000000000000000000000 +0000000000000000FFFF0000000000000000000000000000000000FF00000000000000000000FFFF +00000000000000FF0000000000FF0000000000FF000000FF00000000FF000000FF000000FF000000 +00FF000000FF0000000000FF0000000000FF00000000000000FFFF00000000000000000000FF0000 +000000000000000000000000000000FFFF0000000000000000000000000000000000000000000000 +00000000000000000000FFFFFF000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000FFFFFFFF0000000000 +0000000000000000000000000000000000000000000000000000FFFF000000000000000000000000 +00000000FFFF00000000000000000000FF00000000000000FF0000000000FF00000000FF00000000 +FF000000FF000000FF000000FF000000FF00000000FF00000000FF0000000000FF00000000000000 +FF00000000000000000000FFFF00000000000000000000000000000000FFFF000000000000000000 +00000000000000000000000000000000000000000000FFFFFFFF0000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000FFFFFF0000000000000000000000000000000000000000000000000000 +00000000FFFF00000000000000000000000000000000FF00000000000000000000FF000000000000 +00FF0000000000FF00000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000 +00FF0000000000FF00000000000000FF00000000000000000000FF00000000000000000000000000 +000000FFFF000000000000000000000000000000000000000000000000000000000000FFFFFF0000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000FFFFFFFF000000000000 +00000000000000000000000000000000000000000000FFFFFF0000000000000000000000000000FF +FF000000000000000000FF000000000000FF0000000000FF00000000FF000000FF000000FF000000 +FF000000FF000000FF000000FF00000000FF0000000000FF000000000000FF000000000000000000 +FFFF0000000000000000000000000000FFFFFF000000000000000000000000000000000000000000 +00000000000000FFFFFFFF0000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000FFFFFF000000000000000000000000000000000000000000000000000000 +00FFFF0000000000000000000000000000FF000000000000000000FF000000000000FF0000000000 +FF00000000FF000000FF0000FF000000FF000000FF0000FF000000FF00000000FF0000000000FF00 +0000000000FF000000000000000000FF0000000000000000000000000000FFFF0000000000000000 +0000000000000000000000000000000000000000FFFFFF0000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000FFFFFF0000000000000000 +00000000000000000000000000000000000000FFFF00000000000000000000000000FFFF00000000 +00000000FF000000000000FF0000000000FF000000FF000000FF000000FF0000FF0000FF000000FF +000000FF000000FF0000000000FF000000000000FF0000000000000000FFFF000000000000000000 +00000000FFFF000000000000000000000000000000000000000000000000000000FFFFFF00000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000FFFFFFFF00000000000000000000000000000000000000000000000000FFFF00 +000000000000000000000000FF0000000000000000FFFF0000000000FF00000000FF000000FF0000 +00FF000000FF0000FF0000FF000000FF000000FF000000FF00000000FF0000000000FFFF00000000 +00000000FF00000000000000000000000000FFFF0000000000000000000000000000000000000000 +0000000000FFFFFFFF00000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000FFFFFF000000000000000000 +000000000000000000000000000000FFFF000000000000000000000000FFFF0000000000000000FF +0000000000FF00000000FF000000FF000000FF0000FF0000FF0000FF0000FF000000FF000000FF00 +000000FF0000000000FF0000000000000000FFFF000000000000000000000000FFFF000000000000 +000000000000000000000000000000000000FFFFFF00000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000FFFFFFFF00000000000000000000000000000000000000000000FFFFFF00000000 +00000000000000FFFF00000000000000FF0000000000FF00000000FF0000FF000000FF0000FF0000 +FF0000FF0000FF000000FF0000FF00000000FF0000000000FF00000000000000FFFF000000000000 +0000000000FFFFFF00000000000000000000000000000000000000000000FFFFFFFF000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000FFFFFF00000000000000000000 +000000000000000000000000FFFF0000000000000000000000FF00000000000000FF0000000000FF +000000FF000000FF0000FF0000FF0000FF0000FF0000FF0000FF000000FF000000FF0000000000FF +00000000000000FF0000000000000000000000FFFF00000000000000000000000000000000000000 +000000FFFFFF00000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000FFFFFF000000000000000000000000000000000000000000FFFF0000000000000000 +0000FFFF000000000000FF0000000000FF000000FF0000FF0000FF0000FF0000FF0000FF0000FF00 +00FF0000FF000000FF0000000000FF000000000000FFFF00000000000000000000FFFF0000000000 +00000000000000000000000000000000FFFFFF000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00FFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000FFFFFFFF0000000000000000000000 +0000000000000000FFFF00000000000000000000FF000000000000FF00000000FF000000FF000000 +FF0000FF00FF0000FF0000FF00FF0000FF000000FF000000FF00000000FF000000000000FF000000 +00000000000000FFFF00000000000000000000000000000000000000FFFFFFFF0000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000FFFFFFFFFFFF00000000000000FFFFFFFFFFFFFF00000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000FFFFFF000000000000000000000000000000000000FFFF000000000000000000FFFF00 +00000000FF00000000FF000000FF0000FF0000FF0000FF00FF00FF0000FF0000FF0000FF000000FF +00000000FF0000000000FFFF000000000000000000FFFF0000000000000000000000000000000000 +00FFFFFF000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000FFFFFFFFFFFFFF0000000000000000000000000000 +000000000000FFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000FFFFFFFF000000000000000000000000 +00000000FFFFFF0000000000000000FF0000000000FFFF000000FF000000FF0000FF00FF0000FF00 +FF00FF0000FF00FF0000FF000000FF000000FFFF0000000000FF0000000000000000FFFFFF000000 +00000000000000000000000000FFFFFFFF0000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFF0000000000 +0000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFF00000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000FFFFFF00000000000000000000000000000000FFFF00000000000000FFFF0000000000FF +000000FF0000FF0000FF0000FF00FF00FF00FF00FF0000FF0000FF0000FF000000FF0000000000FF +FF00000000000000FFFF00000000000000000000000000000000FFFFFF0000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000FFFFFF +FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000FFFFFFFFFFFFFF000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000FFFFFFFF00000000000000000000000000 +00FFFF00000000000000FF0000000000FF000000FF0000FF0000FF00FF00FF00FF00FF00FF00FF00 +00FF0000FF000000FF0000000000FF00000000000000FFFF0000000000000000000000000000FFFF +FFFF0000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000FFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFF +FFFF0000000000000000000000000000000000000000000000000000000000000000000000000000 +000000FFFFFF00000000000000000000000000FFFF000000000000FFFF00000000FF000000FF0000 +FF00FF00FF00FF00FF00FF00FF00FF00FF0000FF000000FF00000000FFFF000000000000FFFF0000 +0000000000000000000000FFFFFF0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000FFFFFFFFFFFFFF000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000FFFFFFFFFFFFFF000000000000000000000000000000 +00000000000000000000000000000000000000000000FFFFFF000000000000000000000000FFFF00 +0000000000FFFF000000FF000000FF00FF0000FFFF00FF00FF00FF00FFFF0000FF00FF000000FF00 +0000FFFF000000000000FFFF000000000000000000000000FFFFFF00000000000000000000000000 +000000000000000000000000000000000000000000000000FFFFFFFFFFFFFF000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00FFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000000000 +00FFFFFFFF00000000000000000000FFFFFF0000000000FF000000FF0000FF0000FF00FF00FFFF00 +FF00FFFF00FF00FF0000FF0000FF000000FF0000000000FFFFFF00000000000000000000FFFFFFFF +00000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFF +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000FFFFFFFFFFFFFF00000000000000000000 +000000000000000000000000000000000000000000FFFFFF00000000000000000000FFFF00000000 +FFFF0000FFFF00FF0000FFFF00FF00FFFFFF00FF00FFFF0000FF00FFFF0000FFFF00000000FFFF00 +000000000000000000FFFFFF00000000000000000000000000000000000000000000000000000000 +000000FFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000FFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000 +FFFFFFFF0000000000000000FFFF00000000FF000000FF00FF00FF00FFFF00FFFFFF00FFFF00FF00 +FF00FF000000FF00000000FFFF0000000000000000FFFFFFFF000000000000000000000000000000 +000000000000000000000000FFFFFFFFFFFFFF000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFF00000000 +0000000000000000000000000000000000000000FFFFFF00000000000000FFFF000000FFFF0000FF +00FF00FFFF00FFFFFFFFFF00FFFF00FF00FF0000FFFF000000FFFF00000000000000FFFFFF000000 +000000000000000000000000000000000000000000FFFFFFFFFFFFFF000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000FFFFFFFFFFFFFF0000000000000000000000000000000000000000FF +FFFF000000000000FFFF000000FF0000FF00FF00FFFFFFFFFFFFFFFFFF00FF00FF0000FF000000FF +FF000000000000FFFFFF0000000000000000000000000000000000000000FFFFFFFFFFFFFF000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFF +FFFF00000000000000000000000000000000FFFFFFFF00000000FFFF0000FFFF00FF00FFFFFFFFFF +FFFFFFFFFFFF00FF00FFFF0000FFFF00000000FFFFFFFF00000000000000000000000000000000FF +FFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000FFFFFFFFFFFFFF00000000000000000000000000FFFF +FF000000FFFFFF00FF00FF00FFFFFFFFFFFFFFFFFF00FF00FF00FFFFFF000000FFFFFF0000000000 +0000000000000000FFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00FFFFFFFFFFFFFF000000000000000000FFFFFFFF0000FFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFF +FFFF0000FFFFFFFF000000000000000000FFFFFFFFFFFFFF00000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000FFFFFFFFFFFFFF000000000000FFFFFF +00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF000000000000FFFFFFFFFFFFFF00000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFF +FFFF0000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFF0000 +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +FFFFFFFFFFFFFF000000000000FFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF00000000 +0000FFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000FFFFFFFFFFFFFF000000000000000000FFFFFFFF0000FFFFFFFFFF00FFFFFF +FFFFFFFF00FFFFFFFFFF0000FFFFFFFF000000000000000000FFFFFFFFFFFFFF0000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000FFFFFFFFFFFFFF00000000000000000000000000FFFF +FF000000FFFFFF00FF00FF00FFFFFFFFFFFFFFFFFF00FF00FF00FFFFFF000000FFFFFF0000000000 +0000000000000000FFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFF000000000000 +00000000000000000000FFFFFFFF00000000FFFF0000FFFF00FF00FFFFFFFFFFFFFFFFFFFFFF00FF +00FFFF0000FFFF00000000FFFFFFFF00000000000000000000000000000000FFFFFFFFFFFFFF0000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF +FFFFFF0000000000000000000000000000000000000000FFFFFF000000000000FFFF000000FF0000 +FF00FF00FFFFFFFFFFFFFFFFFF00FF00FF0000FF000000FFFF000000000000FFFFFF000000000000 +0000000000000000000000000000FFFFFFFFFFFFFF00000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000FFFFFFFFFFFFFF000000000000000000000000000000000000000000000000FFFFFF00 +000000000000FFFF000000FFFF0000FF00FF00FFFF00FFFFFFFFFF00FFFF00FF00FF0000FFFF0000 +00FFFF00000000000000FFFFFF000000000000000000000000000000000000000000000000FFFFFF +FFFFFFFF000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000FFFFFFFFFFFFFF00000000000000000000000000000000000000 +0000000000000000FFFFFFFF0000000000000000FFFF00000000FF000000FF00FF00FF00FFFF00FF +FFFF00FFFF00FF00FF00FF000000FF00000000FFFF0000000000000000FFFFFFFF00000000000000 +0000000000000000000000000000000000000000FFFFFFFFFFFFFF00000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000FFFFFFFFFFFFFF00000000000000000000 +000000000000000000000000000000000000000000FFFFFF00000000000000000000FFFF00000000 +FFFF0000FFFF00FF0000FFFF00FF00FFFFFF00FF00FFFF0000FF00FFFF0000FFFF00000000FFFF00 +000000000000000000FFFFFF00000000000000000000000000000000000000000000000000000000 +000000FFFFFFFFFFFFFF000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFF00 +000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF000000 +00000000000000FFFFFF0000000000FF000000FF0000FF0000FF00FF00FFFF00FF00FFFF00FF00FF +0000FF0000FF000000FF0000000000FFFFFF00000000000000000000FFFFFFFF0000000000000000 +0000000000000000000000000000000000000000000000000000FFFFFFFFFFFF0000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000FFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000000000000000 +000000000000FFFFFF000000000000000000000000FFFF000000000000FFFF000000FF000000FF00 +FF0000FFFF00FF00FF00FF00FFFF0000FF00FF000000FF000000FFFF000000000000FFFF00000000 +0000000000000000FFFFFF0000000000000000000000000000000000000000000000000000000000 +0000000000000000FFFFFFFFFFFFFF00000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000FFFFFFFFFFFFFF00000000000000000000000000000000000000000000 +00000000000000000000000000000000000000FFFFFF00000000000000000000000000FFFF000000 +000000FFFF00000000FF000000FF0000FF00FF00FF00FF00FF00FF00FF00FF00FF0000FF000000FF +00000000FFFF000000000000FFFF00000000000000000000000000FFFFFF00000000000000000000 +00000000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFF0000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000FFFFFFFFFFFFFF00000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000FFFFFFFF0000000000 +000000000000000000FFFF00000000000000FF0000000000FF000000FF0000FF0000FF00FF00FF00 +FF00FF00FF00FF0000FF0000FF000000FF0000000000FF00000000000000FFFF0000000000000000 +000000000000FFFFFFFF000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000FFFFFFFFFFFFFF00000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFF00000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000FFFFFF00000000000000000000000000000000FFFF00000000000000FFFF0000000000FF +000000FF0000FF0000FF0000FF00FF00FF00FF00FF0000FF0000FF0000FF000000FF0000000000FF +FF00000000000000FFFF00000000000000000000000000000000FFFFFF0000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000FFFFFF +FFFFFFFF00000000000000000000000000000000000000000000000000000000000000000000FFFF +FFFFFFFFFF0000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFF00000000000000000000000000000000FFFFFF00 +00000000000000FF0000000000FFFF000000FF000000FF0000FF00FF0000FF00FF00FF0000FF00FF +0000FF000000FF000000FFFF0000000000FF0000000000000000FFFFFF0000000000000000000000 +0000000000FFFFFFFF00000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000FFFFFFFFFFFFFF00000000000000000000000000 +00000000000000FFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000FFFFFF0000000000000000 +00000000000000000000FFFF000000000000000000FFFF0000000000FF00000000FF000000FF0000 +FF0000FF0000FF00FF00FF0000FF0000FF0000FF000000FF00000000FF0000000000FFFF00000000 +0000000000FFFF000000000000000000000000000000000000FFFFFF000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000FFFFFFFFFFFFFF00000000000000FFFFFFFFFFFF0000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00FFFFFFFF00000000000000000000000000000000000000FFFF00000000000000000000FF000000 +000000FF00000000FF000000FF000000FF0000FF00FF0000FF0000FF00FF0000FF000000FF000000 +FF00000000FF000000000000FF00000000000000000000FFFF000000000000000000000000000000 +00000000FFFFFFFF0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000FFFFFFFFFFFF0000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000FFFFFF000000000000000000000000000000000000000000FFFF +00000000000000000000FFFF000000000000FF0000000000FF000000FF0000FF0000FF0000FF0000 +FF0000FF0000FF0000FF0000FF000000FF0000000000FF000000000000FFFF000000000000000000 +00FFFF000000000000000000000000000000000000000000FFFFFF00000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000FFFFFF00000000000000000000 +000000000000000000000000FFFF0000000000000000000000FF00000000000000FF0000000000FF +000000FF000000FF0000FF0000FF0000FF0000FF0000FF0000FF000000FF000000FF0000000000FF +00000000000000FF0000000000000000000000FFFF00000000000000000000000000000000000000 +000000FFFFFF00000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000FF +FFFFFF00000000000000000000000000000000000000000000FFFFFF0000000000000000000000FF +FF00000000000000FF0000000000FF00000000FF0000FF000000FF0000FF0000FF0000FF0000FF00 +0000FF0000FF00000000FF0000000000FF00000000000000FFFF0000000000000000000000FFFFFF +00000000000000000000000000000000000000000000FFFFFFFF0000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000FFFFFF000000000000000000000000000000000000000000000000FF +FF000000000000000000000000FFFF0000000000000000FF0000000000FF00000000FF000000FF00 +0000FF0000FF0000FF0000FF0000FF000000FF000000FF00000000FF0000000000FF000000000000 +0000FFFF000000000000000000000000FFFF00000000000000000000000000000000000000000000 +0000FFFFFF0000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000FFFFFFFF000000000000000000000000 +00000000000000000000000000FFFF00000000000000000000000000FF0000000000000000FFFF00 +00000000FF00000000FF000000FF000000FF000000FF0000FF0000FF000000FF000000FF000000FF +00000000FF0000000000FFFF0000000000000000FF00000000000000000000000000FFFF00000000 +000000000000000000000000000000000000000000FFFFFFFF000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000FFFFFF +000000000000000000000000000000000000000000000000000000FFFF0000000000000000000000 +0000FFFF0000000000000000FF000000000000FF0000000000FF000000FF000000FF000000FF0000 +FF0000FF000000FF000000FF000000FF0000000000FF000000000000FF0000000000000000FFFF00 +000000000000000000000000FFFF0000000000000000000000000000000000000000000000000000 +00FFFFFF000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000FFFFFF000000000000000000000000000000000000000000000000000000 +00FFFF0000000000000000000000000000FF000000000000000000FF000000000000FF0000000000 +FF00000000FF000000FF0000FF000000FF000000FF0000FF000000FF00000000FF0000000000FF00 +0000000000FF000000000000000000FF0000000000000000000000000000FFFF0000000000000000 +0000000000000000000000000000000000000000FFFFFF0000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000FFFFFFFF0000000000000000000000000000 +0000000000000000000000000000FFFFFF0000000000000000000000000000FFFF00000000000000 +0000FF000000000000FF0000000000FF00000000FF000000FF000000FF000000FF000000FF000000 +FF000000FF00000000FF0000000000FF000000000000FF000000000000000000FFFF000000000000 +0000000000000000FFFFFF00000000000000000000000000000000000000000000000000000000FF +FFFFFF00000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000FFFFFF0000 +00000000000000000000000000000000000000000000000000000000FFFF00000000000000000000 +000000000000FF00000000000000000000FF00000000000000FF0000000000FF00000000FF000000 +FF000000FF000000FF000000FF000000FF000000FF00000000FF0000000000FF00000000000000FF +00000000000000000000FF00000000000000000000000000000000FFFF0000000000000000000000 +00000000000000000000000000000000000000FFFFFF000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000FFFFFFFF0000000000000000000000000000000000000000000000000000000000 +0000FFFF00000000000000000000000000000000FFFF00000000000000000000FF00000000000000 +FF0000000000FF00000000FF00000000FF000000FF000000FF000000FF000000FF00000000FF0000 +0000FF0000000000FF00000000000000FF00000000000000000000FFFF0000000000000000000000 +0000000000FFFF00000000000000000000000000000000000000000000000000000000000000FFFF +FFFF0000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000FFFFFF0000000000000000000000000000000000 +00000000000000000000000000000000FFFF0000000000000000000000000000000000FF00000000 +000000000000FFFF00000000000000FF0000000000FF0000000000FF000000FF00000000FF000000 +FF000000FF00000000FF000000FF0000000000FF0000000000FF00000000000000FFFF0000000000 +0000000000FF0000000000000000000000000000000000FFFF000000000000000000000000000000 +000000000000000000000000000000000000FFFFFF00000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000FFFFFF00000000 +000000000000000000000000000000000000000000000000000000000000FFFF0000000000000000 +000000000000000000FFFF00000000000000000000FF0000000000000000FF000000000000FF0000 +0000FF00000000FF00000000FF000000FF000000FF00000000FF00000000FF00000000FF00000000 +0000FF0000000000000000FF00000000000000000000FFFF00000000000000000000000000000000 +00FFFF00000000000000000000000000000000000000000000000000000000000000000000FFFFFF +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000FFFFFFFF00000000000000000000000000000000000000000000000000000000000000 +00000000FFFF0000000000000000000000000000000000FFFF0000000000000000000000FF000000 +0000000000FF000000000000FF0000000000FF00000000FF00000000FF000000FF000000FF000000 +00FF00000000FF0000000000FF000000000000FF0000000000000000FF0000000000000000000000 +FFFF0000000000000000000000000000000000FFFF00000000000000000000000000000000000000 +00000000000000000000000000000000FFFFFFFF0000000000000000000000000000000000000000 +000000000000000000000000000000000000FFFFFF00000000000000000000000000000000000000 +0000000000000000000000000000000000FFFFFF000000000000000000000000000000000000FF00 +0000000000000000000000FF0000000000000000FF000000000000FF0000000000FF0000000000FF +000000FF00000000FF00000000FF000000FF0000000000FF0000000000FF000000000000FF000000 +0000000000FF000000000000000000000000FF000000000000000000000000000000000000FFFFFF +000000000000000000000000000000000000000000000000000000000000000000000000FFFFFF00 +000000000000000000000000000000000000000000000000000000000000FFFFFFFF000000000000 +00000000000000000000000000000000000000000000000000000000000000FFFF00000000000000 +000000000000000000000000FFFF000000000000000000000000FF0000000000000000FF00000000 +000000FF0000000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF +0000000000FF00000000000000FF0000000000000000FF000000000000000000000000FFFF000000 +00000000000000000000000000000000FFFF00000000000000000000000000000000000000000000 +000000000000000000000000000000FFFFFFFF000000000000000000000000000000000000000000 +000000FFFFFF00000000000000000000000000000000000000000000000000000000000000000000 +0000000000FFFF0000000000000000000000000000000000000000FF000000000000000000000000 +00FF000000000000000000FF000000000000FF0000000000FF0000000000FF00000000FF00000000 +FF00000000FF00000000FF0000000000FF0000000000FF000000000000FF000000000000000000FF +00000000000000000000000000FF0000000000000000000000000000000000000000FFFF00000000 +0000000000000000000000000000000000000000000000000000000000000000000000FFFFFF0000 +00000000000000000000000000000000FFFFFF000000000000000000000000000000000000000000 +00000000000000000000000000000000000000FFFF00000000000000000000000000000000000000 +00FFFF00000000000000000000000000FF000000000000000000FF00000000000000FF0000000000 +FF0000000000FF00000000FF00000000FF00000000FF00000000FF0000000000FF0000000000FF00 +000000000000FF000000000000000000FF00000000000000000000000000FFFF0000000000000000 +000000000000000000000000FFFF0000000000000000000000000000000000000000000000000000 +0000000000000000000000000000FFFFFF0000000000000000000000FFFFFFFF0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000FFFF0000000000 +00000000000000000000000000000000FF00000000000000000000000000FFFF0000000000000000 +00FF00000000000000FF000000000000FF00000000FF0000000000FF00000000FF00000000FF0000 +000000FF00000000FF000000000000FF00000000000000FF000000000000000000FFFF0000000000 +0000000000000000FF000000000000000000000000000000000000000000FFFF0000000000000000 +000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF000000 +00FFFFFF000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000FFFFFF000000000000000000000000000000000000000000FFFF0000000000000000 +0000000000FF00000000000000000000FF00000000000000FF000000000000FF0000000000FF0000 +000000FF00000000FF00000000FF0000000000FF0000000000FF000000000000FF00000000000000 +FF00000000000000000000FF00000000000000000000000000FFFF00000000000000000000000000 +0000000000000000FFFFFF0000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000FFFFFF000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000FFFF000000000000000000000000000000000000 +0000000000FF0000000000000000000000000000FF00000000000000000000FF0000000000000000 +FF000000000000FF0000000000FF0000000000FF00000000FF00000000FF0000000000FF00000000 +00FF000000000000FF0000000000000000FF00000000000000000000FF0000000000000000000000 +000000FF0000000000000000000000000000000000000000000000FFFF0000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000FFFF00000000 +00000000000000000000000000000000000000FFFF0000000000000000000000000000FF00000000 +000000000000FF0000000000000000FF000000000000FF000000000000FF00000000FF0000000000 +FF0000000000FF00000000FF000000000000FF000000000000FF0000000000000000FF0000000000 +0000000000FF0000000000000000000000000000FFFF000000000000000000000000000000000000 +0000000000FFFF000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000FFFF0000000000000000000000000000000000000000000000FFFF0000000000 +00000000000000000000FF00000000000000000000FF0000000000000000FF00000000000000FF00 +00000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000 +0000FF0000000000000000FF00000000000000000000FF000000000000000000000000000000FFFF +0000000000000000000000000000000000000000000000FFFF000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000FFFF00000000000000000000000000000000 +0000000000000000FF00000000000000000000000000000000FF00000000000000000000FF000000 +000000000000FF000000000000FF000000000000FF0000000000FF0000000000FF0000000000FF00 +00000000FF000000000000FF000000000000FF000000000000000000FF00000000000000000000FF +00000000000000000000000000000000FF0000000000000000000000000000000000000000000000 +00FFFF00000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000FFFFFF0000 +00000000000000000000000000000000000000000000FFFF000000000000000000000000000000FF +FF0000000000000000000000FF0000000000000000FF00000000000000FF000000000000FF000000 +0000FF0000000000FF0000000000FF0000000000FF000000000000FF00000000000000FF00000000 +00000000FF0000000000000000000000FFFF000000000000000000000000000000FFFF0000000000 +00000000000000000000000000000000000000FFFFFF000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000FFFF0000000000000000000000000000000000000000000000000000FF0000 +0000000000000000000000000000FF000000000000000000000000FF0000000000000000FF000000 +00000000FF000000000000FF000000000000FF0000000000FF0000000000FF000000000000FF0000 +00000000FF00000000000000FF0000000000000000FF000000000000000000000000FF0000000000 +0000000000000000000000FF0000000000000000000000000000000000000000000000000000FFFF +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000FFFF000000000000000000000000000000 +0000000000000000000000FFFF00000000000000000000000000000000FF00000000000000000000 +0000FF000000000000000000FF00000000000000FF000000000000FF000000000000FF0000000000 +FF0000000000FF000000000000FF000000000000FF00000000000000FF000000000000000000FF00 +0000000000000000000000FF00000000000000000000000000000000FFFF00000000000000000000 +00000000000000000000000000000000FFFF00000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000FFFF00 +0000000000000000000000000000000000000000000000000000FF00000000000000000000000000 +00000000FF000000000000000000000000FF000000000000000000FF00000000000000FF00000000 +000000FF000000000000FF0000000000FF0000000000FF000000000000FF00000000000000FF0000 +0000000000FF000000000000000000FF000000000000000000000000FF0000000000000000000000 +000000000000FF000000000000000000000000000000000000000000000000000000FFFF00000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000FFFF000000000000000000000000000000000000000000000000000000 +FFFF0000000000000000000000000000000000FF000000000000000000000000FF00000000000000 +0000FF0000000000000000FF000000000000FF000000000000FF000000000000FF000000000000FF +000000000000FF000000000000FF0000000000000000FF000000000000000000FF00000000000000 +0000000000FF0000000000000000000000000000000000FFFF000000000000000000000000000000 +000000000000000000000000FFFF0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000FFFFFF00000000000000000000000000 +000000000000000000000000000000FF000000000000000000000000000000000000FF0000000000 +00000000000000FF00000000000000000000FF0000000000000000FF000000000000FF0000000000 +00FF000000000000FF000000000000FF000000000000FF000000000000FF0000000000000000FF00 +000000000000000000FF000000000000000000000000FF0000000000000000000000000000000000 +00FF00000000000000000000000000000000000000000000000000000000FFFFFF00000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000FFFF +0000000000000000000000000000000000000000000000000000000000FFFF000000000000000000 +000000000000000000FF000000000000000000000000FF00000000000000000000FF000000000000 +0000FF00000000000000FF000000000000FF000000000000FF000000000000FF000000000000FF00 +000000000000FF0000000000000000FF00000000000000000000FF000000000000000000000000FF +000000000000000000000000000000000000FFFF0000000000000000000000000000000000000000 +000000000000000000FFFF0000000000000000000000000000000000000000000000000000000000 +000000000000000000000000FFFF0000000000000000000000000000000000000000000000000000 +000000FFFF000000000000000000000000000000000000FFFF00000000000000000000000000FF00 +000000000000000000FF0000000000000000FF00000000000000FF000000000000FF000000000000 +FF000000000000FF000000000000FF00000000000000FF0000000000000000FF0000000000000000 +0000FF00000000000000000000000000FFFF000000000000000000000000000000000000FFFF0000 +000000000000000000000000000000000000000000000000000000FFFF0000000000000000000000 +0000000000000000000000000000000000000000000000000000FFFF000000000000000000000000 +000000000000000000000000000000000000FF00000000000000000000000000000000000000FF00 +00000000000000000000000000FF00000000000000000000FF0000000000000000FF000000000000 +00FF00000000000000FF000000000000FF000000000000FF00000000000000FF00000000000000FF +0000000000000000FF00000000000000000000FF0000000000000000000000000000FF0000000000 +0000000000000000000000000000FF00000000000000000000000000000000000000000000000000 +0000000000FFFF000000000000000000000000000000000000000000000000000000000000000000 +FFFF000000000000000000000000000000000000000000000000000000000000FFFF000000000000 +00000000000000000000000000FF0000000000000000000000000000FF00000000000000000000FF +000000000000000000FF00000000000000FF00000000000000FF000000000000FF000000000000FF +00000000000000FF00000000000000FF000000000000000000FF00000000000000000000FF000000 +0000000000000000000000FF00000000000000000000000000000000000000FFFF00000000000000 +0000000000000000000000000000000000000000000000FFFF000000000000000000000000000000 +0000000000000000000000000000FFFF000000000000000000000000000000000000000000000000 +00000000000000FF0000000000000000000000000000000000000000FF0000000000000000000000 +000000FF0000000000000000000000FF0000000000000000FF0000000000000000FF000000000000 +00FF000000000000FF000000000000FF00000000000000FF0000000000000000FF00000000000000 +00FF0000000000000000000000FF0000000000000000000000000000FF0000000000000000000000 +000000000000000000FF000000000000000000000000000000000000000000000000000000000000 +00FFFF000000000000000000000000000000000000000000000000FFFFFF00000000000000000000 +000000000000000000000000000000000000000000FFFF0000000000000000000000000000000000 +000000FF0000000000000000000000000000FF0000000000000000000000FF000000000000000000 +FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF00000000000000 +FF00000000000000FF000000000000000000FF0000000000000000000000FF000000000000000000 +0000000000FF0000000000000000000000000000000000000000FFFF000000000000000000000000 +00000000000000000000000000000000000000FFFFFF000000000000000000000000000000000000 +00FFFF000000000000000000000000000000000000000000000000000000000000000000FF000000 +000000000000000000000000000000000000FF0000000000000000000000000000FF000000000000 +0000000000FF000000000000000000FF0000000000000000FF00000000000000FF00000000000000 +FF00000000000000FF00000000000000FF0000000000000000FF000000000000000000FF00000000 +00000000000000FF0000000000000000000000000000FF0000000000000000000000000000000000 +00000000FF000000000000000000000000000000000000000000000000000000000000000000FFFF +000000000000000000000000000000FFFF0000000000000000000000000000000000000000000000 +00000000000000000000FFFF0000000000000000000000000000000000000000FFFF000000000000 +0000000000000000FF000000000000000000000000FF000000000000000000FF0000000000000000 +FF00000000000000FF00000000000000FF00000000000000FF00000000000000FF00000000000000 +00FF000000000000000000FF000000000000000000000000FF0000000000000000000000000000FF +FF0000000000000000000000000000000000000000FFFF0000000000000000000000000000000000 +00000000000000000000000000000000FFFF0000000000000000000000FFFF000000000000000000 +00000000000000000000000000000000000000000000000000FF0000000000000000000000000000 +00000000000000FF000000000000000000000000000000FF000000000000000000000000FF000000 +000000000000FF000000000000000000FF00000000000000FF00000000000000FF00000000000000 +FF00000000000000FF000000000000000000FF000000000000000000FF0000000000000000000000 +00FF000000000000000000000000000000FF000000000000000000000000000000000000000000FF +00000000000000000000000000000000000000000000000000000000000000000000FFFF00000000 +000000FFFF00000000000000000000000000000000000000000000000000000000000000000000FF +FF000000000000000000000000000000000000000000FF00000000000000000000000000000000FF +0000000000000000000000FF00000000000000000000FF0000000000000000FF0000000000000000 +FF00000000000000FF00000000000000FF0000000000000000FF0000000000000000FF0000000000 +0000000000FF0000000000000000000000FF00000000000000000000000000000000FF0000000000 +00000000000000000000000000000000FFFF00000000000000000000000000000000000000000000 +000000000000000000000000FFFF000000FFFF000000000000000000000000000000000000000000 +00000000000000000000000000FFFF00000000000000000000000000000000000000000000FF0000 +0000000000000000000000000000FF000000000000000000000000FF00000000000000000000FF00 +00000000000000FF0000000000000000FF00000000000000FF00000000000000FF00000000000000 +00FF0000000000000000FF00000000000000000000FF000000000000000000000000FF0000000000 +0000000000000000000000FF00000000000000000000000000000000000000000000FFFF00000000 +000000000000000000000000000000000000000000000000000000000000FFFF0000000000000000 +00000000000000000000000000000000000000000000000000000000FF0000000000000000000000 +000000000000000000000000FF00000000000000000000000000000000FF00000000000000000000 +0000FF00000000000000000000FF000000000000000000FF0000000000000000FF00000000000000 +FF00000000000000FF0000000000000000FF000000000000000000FF00000000000000000000FF00 +0000000000000000000000FF00000000000000000000000000000000FF0000000000000000000000 +000000000000000000000000FF000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000FFFF0000000000000000000000000000000000000000000000FF000000000000000000000000 +00000000FF000000000000000000000000FF0000000000000000000000FF0000000000000000FF00 +00000000000000FF0000000000000000FF0000000000000000FF0000000000000000FF0000000000 +000000FF0000000000000000000000FF000000000000000000000000FF0000000000000000000000 +0000000000FF0000000000000000000000000000000000000000000000FFFF000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000FF00000000000000000000000000000000000000000000 +0000FF00000000000000000000000000000000FF00000000000000000000000000FF000000000000 +00000000FF000000000000000000FF0000000000000000FF0000000000000000FF00000000000000 +00FF0000000000000000FF000000000000000000FF00000000000000000000FF0000000000000000 +0000000000FF00000000000000000000000000000000FF0000000000000000000000000000000000 +00000000000000FF0000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000FFFF00000000000000 +00000000000000000000000000000000FFFF00000000000000000000000000000000FF0000000000 +0000000000000000FF0000000000000000000000FF000000000000000000FF0000000000000000FF +0000000000000000FF0000000000000000FF0000000000000000FF000000000000000000FF000000 +0000000000000000FF00000000000000000000000000FF00000000000000000000000000000000FF +FF0000000000000000000000000000000000000000000000FFFF0000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000FF000000000000000000000000000000000000000000000000FF0000000000000000 +000000000000000000FF0000000000000000000000000000FF00000000000000000000FF00000000 +000000000000FF0000000000000000FF0000000000000000FF0000000000000000FF000000000000 +0000FF00000000000000000000FF00000000000000000000FF0000000000000000000000000000FF +0000000000000000000000000000000000FF00000000000000000000000000000000000000000000 +0000FF00000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000FFFF000000000000000000000000000000000000 +000000000000FF000000000000000000000000000000000000FF00000000000000000000000000FF +0000000000000000000000FF000000000000000000FF000000000000000000FF0000000000000000 +FF0000000000000000FF000000000000000000FF000000000000000000FF00000000000000000000 +00FF00000000000000000000000000FF000000000000000000000000000000000000FF0000000000 +00000000000000000000000000000000000000FFFF00000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000FF00000000 +000000000000000000000000000000000000000000FF000000000000000000000000000000000000 +FF00000000000000000000000000FF0000000000000000000000FF00000000000000000000FF0000 +00000000000000FF0000000000000000FF0000000000000000FF000000000000000000FF00000000 +000000000000FF0000000000000000000000FF00000000000000000000000000FF00000000000000 +0000000000000000000000FF00000000000000000000000000000000000000000000000000FF0000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000FFFF00000000000000000000000000000000000000000000000000FF000000 +000000000000000000000000000000FF0000000000000000000000000000FF000000000000000000 +0000FF00000000000000000000FF000000000000000000FF0000000000000000FF00000000000000 +00FF000000000000000000FF00000000000000000000FF0000000000000000000000FF0000000000 +000000000000000000FF000000000000000000000000000000000000FF0000000000000000000000 +0000000000000000000000000000FFFF000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000FFFF000000000000000000000000000000 +0000000000000000000000FF000000000000000000000000000000000000FF000000000000000000 +0000000000FF0000000000000000000000FF00000000000000000000FF000000000000000000FF00 +0000000000000000FF000000000000000000FF000000000000000000FF00000000000000000000FF +0000000000000000000000FF0000000000000000000000000000FF00000000000000000000000000 +0000000000FF0000000000000000000000000000000000000000000000000000FFFF000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000FF00 +00000000000000000000000000000000000000000000000000FFFF00000000000000000000000000 +0000000000FF0000000000000000000000000000FF000000000000000000000000FF000000000000 +00000000FF000000000000000000FF000000000000000000FF000000000000000000FF0000000000 +00000000FF00000000000000000000FF000000000000000000000000FF0000000000000000000000 +000000FF000000000000000000000000000000000000FFFF00000000000000000000000000000000 +00000000000000000000FF0000000000000000000000000000000000000000000000000000000000 +000000000000000000000000FFFF0000000000000000000000000000000000000000000000000000 +FF00000000000000000000000000000000000000FF000000000000000000000000000000FF000000 +0000000000000000FF0000000000000000000000FF000000000000000000FF000000000000000000 +FF000000000000000000FF000000000000000000FF0000000000000000000000FF00000000000000 +00000000FF000000000000000000000000000000FF00000000000000000000000000000000000000 +FF0000000000000000000000000000000000000000000000000000FFFF0000000000000000000000 +000000000000000000000000000000000000000000000000000000FF000000000000000000000000 +000000000000000000000000000000FF00000000000000000000000000000000000000FF00000000 +0000000000000000000000FF000000000000000000000000FF00000000000000000000FF00000000 +000000000000FF000000000000000000FF000000000000000000FF00000000000000000000FF0000 +0000000000000000FF000000000000000000000000FF000000000000000000000000000000FF0000 +0000000000000000000000000000000000FF00000000000000000000000000000000000000000000 +0000000000FF00000000000000000000000000000000000000000000000000000000000000000000 +00FFFF000000000000000000000000000000000000000000000000000000FF000000000000000000 +00000000000000000000FF000000000000000000000000000000FF00000000000000000000000000 +FF00000000000000000000FF00000000000000000000FF000000000000000000FF00000000000000 +0000FF00000000000000000000FF00000000000000000000FF00000000000000000000000000FF00 +0000000000000000000000000000FF00000000000000000000000000000000000000FF0000000000 +00000000000000000000000000000000000000000000FFFF00000000000000000000000000000000 +00000000000000000000000000000000FF0000000000000000000000000000000000000000000000 +0000000000FF0000000000000000000000000000000000000000FF00000000000000000000000000 +0000FF000000000000000000000000FF0000000000000000000000FF00000000000000000000FF00 +0000000000000000FF000000000000000000FF00000000000000000000FF00000000000000000000 +00FF000000000000000000000000FF000000000000000000000000000000FF000000000000000000 +0000000000000000000000FF00000000000000000000000000000000000000000000000000000000 +FF0000000000000000000000000000000000000000000000000000000000FFFF0000000000000000 +0000000000000000000000000000000000000000FF00000000000000000000000000000000000000 +00FF000000000000000000000000000000FF00000000000000000000000000FF0000000000000000 +000000FF00000000000000000000FF000000000000000000FF000000000000000000FF0000000000 +0000000000FF0000000000000000000000FF00000000000000000000000000FF0000000000000000 +00000000000000FF0000000000000000000000000000000000000000FF0000000000000000000000 +0000000000000000000000000000000000FFFF000000000000000000000000000000000000000000 +0000000000FF0000000000000000000000000000000000000000000000000000000000FF00000000 +00000000000000000000000000000000FF000000000000000000000000000000FF00000000000000 +000000000000FF0000000000000000000000FF00000000000000000000FF00000000000000000000 +FF00000000000000000000FF00000000000000000000FF0000000000000000000000FF0000000000 +0000000000000000FF000000000000000000000000000000FF000000000000000000000000000000 +0000000000FF0000000000000000000000000000000000000000000000000000000000FF00000000 +00000000000000000000000000000000000000FFFF00000000000000000000000000000000000000 +000000000000000000FFFF0000000000000000000000000000000000000000FF0000000000000000 +0000000000000000FF00000000000000000000000000FF0000000000000000000000FF0000000000 +0000000000FF00000000000000000000FF00000000000000000000FF00000000000000000000FF00 +00000000000000000000FF00000000000000000000000000FF000000000000000000000000000000 +00FF0000000000000000000000000000000000000000FFFF00000000000000000000000000000000 +000000000000000000000000FFFF00000000000000000000000000000000000000FFFF0000000000 +000000000000000000000000000000000000000000000000FF000000000000000000000000000000 +000000000000FF00000000000000000000000000000000FF00000000000000000000000000FF0000 +00000000000000000000FF00000000000000000000FF00000000000000000000FF00000000000000 +000000FF00000000000000000000FF000000000000000000000000FF000000000000000000000000 +00FF00000000000000000000000000000000FF000000000000000000000000000000000000000000 +FF0000000000000000000000000000000000000000000000000000000000FFFF0000000000000000 +0000000000000000FF000000000000000000000000000000000000000000000000000000000000FF +000000000000000000000000000000000000000000FF0000000000000000000000000000000000FF +00000000000000000000000000FF0000000000000000000000FF0000000000000000000000FF0000 +0000000000000000FF00000000000000000000FF0000000000000000000000FF0000000000000000 +000000FF00000000000000000000000000FF0000000000000000000000000000000000FF00000000 +0000000000000000000000000000000000FF00000000000000000000000000000000000000000000 +0000000000000000FF00000000000000000000000000FFFF00000000000000000000000000000000 +0000000000000000000000000000FF000000000000000000000000000000000000000000FF000000 +0000000000000000000000000000FF00000000000000000000000000FF0000000000000000000000 +00FF0000000000000000000000FF00000000000000000000FF00000000000000000000FF00000000 +00000000000000FF000000000000000000000000FF00000000000000000000000000FF0000000000 +000000000000000000000000FF000000000000000000000000000000000000000000FF0000000000 +00000000000000000000000000000000000000000000000000FFFF00000000000000000000FF0000 +0000000000000000000000000000000000000000000000000000000000FF00000000000000000000 +000000000000000000000000FF00000000000000000000000000000000FF00000000000000000000 +00000000FF000000000000000000000000FF0000000000000000000000FF00000000000000000000 +FF00000000000000000000FF0000000000000000000000FF000000000000000000000000FF000000 +0000000000000000000000FF00000000000000000000000000000000FF0000000000000000000000 +0000000000000000000000FF00000000000000000000000000000000000000000000000000000000 +000000FF00000000000000FFFF000000000000000000000000000000000000000000000000000000 +00000000FF00000000000000000000000000000000000000000000FF000000000000000000000000 +0000000000FF00000000000000000000000000FF00000000000000000000000000FF000000000000 +00000000FF0000000000000000000000FF0000000000000000000000FF00000000000000000000FF +00000000000000000000000000FF00000000000000000000000000FF000000000000000000000000 +0000000000FF00000000000000000000000000000000000000000000FF0000000000000000000000 +0000000000000000000000000000000000000000FFFF00000000FF00000000000000000000000000 +000000000000000000000000000000000000FFFF0000000000000000000000000000000000000000 +0000FF0000000000000000000000000000000000FF0000000000000000000000000000FF00000000 +0000000000000000FF0000000000000000000000FF0000000000000000000000FF00000000000000 +00000000FF0000000000000000000000FF000000000000000000000000FF00000000000000000000 +00000000FF0000000000000000000000000000000000FF0000000000000000000000000000000000 +0000000000FFFF00000000000000000000000000000000000000000000000000000000000000FF00 +00FF00000000000000000000000000000000000000000000000000000000000000FF000000000000 +0000000000000000000000000000000000FF0000000000000000000000000000000000FF00000000 +0000000000000000000000FF000000000000000000000000FF0000000000000000000000FF000000 +0000000000000000FF0000000000000000000000FF0000000000000000000000FF00000000000000 +0000000000FF000000000000000000000000000000FF0000000000000000000000000000000000FF +0000000000000000000000000000000000000000000000FF00000000000000000000000000000000 +000000000000000000000000000000FF000000000000000000000000000000000000000000000000 +0000000000000000FF0000000000000000000000000000000000000000000000FF00000000000000 +0000000000000000000000FF0000000000000000000000000000FF00000000000000000000000000 +FF0000000000000000000000FF0000000000000000000000FF0000000000000000000000FF000000 +0000000000000000FF00000000000000000000000000FF0000000000000000000000000000FF0000 +00000000000000000000000000000000FF0000000000000000000000000000000000000000000000 +FF000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000FF00000000000000000000000000000000 +00000000000000FF000000000000000000000000000000000000FF00000000000000000000000000 +0000FF000000000000000000000000FF000000000000000000000000FF0000000000000000000000 +FF0000000000000000000000FF000000000000000000000000FF000000000000000000000000FF00 +0000000000000000000000000000FF000000000000000000000000000000000000FF000000000000 +0000000000000000000000000000000000FF00000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000FF00 +00000000000000000000000000000000000000000000FF0000000000000000000000000000000000 +00FF000000000000000000000000000000FF00000000000000000000000000FF0000000000000000 +00000000FF0000000000000000000000FF0000000000000000000000FF0000000000000000000000 +00FF00000000000000000000000000FF000000000000000000000000000000FF0000000000000000 +00000000000000000000FF0000000000000000000000000000000000000000000000FF0000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000FF0000000000000000000000000000000000000000000000FF0000 +0000000000000000000000000000000000FF000000000000000000000000000000FF000000000000 +00000000000000FF000000000000000000000000FF0000000000000000000000FF00000000000000 +00000000FF000000000000000000000000FF00000000000000000000000000FF0000000000000000 +00000000000000FF00000000000000000000000000000000000000FF000000000000000000000000 +0000000000000000000000FF00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000FF0000000000000000000000 +00000000000000000000000000FF000000000000000000000000000000000000FF00000000000000 +0000000000000000FF00000000000000000000000000FF000000000000000000000000FF00000000 +0000000000000000FF000000000000000000000000FF000000000000000000000000FF0000000000 +0000000000000000FF000000000000000000000000000000FF000000000000000000000000000000 +000000FF000000000000000000000000000000000000000000000000FF0000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000FFFF000000000000000000000000000000000000000000000000FF0000000000000000000000 +00000000000000FF00000000000000000000000000000000FF00000000000000000000000000FF00 +0000000000000000000000FF000000000000000000000000FF000000000000000000000000FF0000 +00000000000000000000FF00000000000000000000000000FF000000000000000000000000000000 +00FF000000000000000000000000000000000000FF00000000000000000000000000000000000000 +0000000000FFFF000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000FF00000000000000000000000000000000000000000000 +000000FF00000000000000000000000000000000000000FF000000000000000000000000000000FF +0000000000000000000000000000FF000000000000000000000000FF000000000000000000000000 +FF000000000000000000000000FF000000000000000000000000FF00000000000000000000000000 +00FF000000000000000000000000000000FF00000000000000000000000000000000000000FF0000 +0000000000000000000000000000000000000000000000FF00000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000FF00000000000000 +000000000000000000000000000000000000FF00000000000000000000000000000000000000FF00 +000000000000000000000000000000FF0000000000000000000000000000FF000000000000000000 +000000FF000000000000000000000000FF000000000000000000000000FF00000000000000000000 +0000FF0000000000000000000000000000FF00000000000000000000000000000000FF0000000000 +0000000000000000000000000000FF00000000000000000000000000000000000000000000000000 +FF000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000FF00000000000000000000000000000000000000000000000000FF000000000000 +0000000000000000000000000000FF000000000000000000000000000000FF000000000000000000 +0000000000FF00000000000000000000000000FF000000000000000000000000FF00000000000000 +0000000000FF00000000000000000000000000FF0000000000000000000000000000FF0000000000 +00000000000000000000FF0000000000000000000000000000000000000000FF0000000000000000 +0000000000000000000000000000000000FF00000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000FF0000000000000000000000000000000000 +0000000000000000FF0000000000000000000000000000000000000000FF00000000000000000000 +000000000000FF0000000000000000000000000000FF00000000000000000000000000FF00000000 +0000000000000000FF000000000000000000000000FF00000000000000000000000000FF00000000 +00000000000000000000FF00000000000000000000000000000000FF000000000000000000000000 +0000000000000000FF00000000000000000000000000000000000000000000000000FF0000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000FF0000 +0000000000000000000000000000000000000000000000FF00000000000000000000000000000000 +00000000FF0000000000000000000000000000000000FF0000000000000000000000000000FF0000 +0000000000000000000000FF000000000000000000000000FF000000000000000000000000FF0000 +0000000000000000000000FF0000000000000000000000000000FF00000000000000000000000000 +00000000FF0000000000000000000000000000000000000000FF0000000000000000000000000000 +0000000000000000000000FF00000000000000000000000000000000000000000000000000000000 +0000000000000000000000FFFF0000000000000000000000000000000000000000000000000000FF +0000000000000000000000000000000000000000FF00000000000000000000000000000000FF0000 +000000000000000000000000FF00000000000000000000000000FF00000000000000000000000000 +FF00000000000000000000000000FF00000000000000000000000000FF0000000000000000000000 +000000FF00000000000000000000000000000000FF00000000000000000000000000000000000000 +00FF0000000000000000000000000000000000000000000000000000FFFF00000000000000000000 +0000000000000000000000000000000000000000000000000000FF00000000000000000000000000 +0000000000000000000000000000FF0000000000000000000000000000000000000000FF00000000 +00000000000000000000000000FF0000000000000000000000000000FF0000000000000000000000 +0000FF00000000000000000000000000FF00000000000000000000000000FF000000000000000000 +00000000FF0000000000000000000000000000FF0000000000000000000000000000000000FF0000 +000000000000000000000000000000000000FF000000000000000000000000000000000000000000 +000000000000FF000000000000000000000000000000000000000000000000000000000000000000 +00FF000000000000000000000000000000000000000000000000000000FF00000000000000000000 +00000000000000000000FF0000000000000000000000000000000000FF0000000000000000000000 +00000000FF00000000000000000000000000FF00000000000000000000000000FF00000000000000 +000000000000FF00000000000000000000000000FF000000000000000000000000000000FF000000 +0000000000000000000000000000FF0000000000000000000000000000000000000000FF00000000 +0000000000000000000000000000000000000000000000FF00000000000000000000000000000000 +00000000000000000000000000000000FF0000000000000000000000000000000000000000000000 +00000000FF000000000000000000000000000000000000000000FF00000000000000000000000000 +00000000FF000000000000000000000000000000FF00000000000000000000000000FF0000000000 +0000000000000000FF00000000000000000000000000FF00000000000000000000000000FF000000 +000000000000000000000000FF0000000000000000000000000000000000FF000000000000000000 +000000000000000000000000FF000000000000000000000000000000000000000000000000000000 +FF000000000000000000000000000000000000000000000000000000000000FF0000000000000000 +00000000000000000000000000000000000000FF0000000000000000000000000000000000000000 +00FF0000000000000000000000000000000000FF000000000000000000000000000000FF00000000 +00000000000000000000FF00000000000000000000000000FF00000000000000000000000000FF00 +00000000000000000000000000FF000000000000000000000000000000FF00000000000000000000 +00000000000000FF000000000000000000000000000000000000000000FF00000000000000000000 +0000000000000000000000000000000000FF00000000000000000000000000000000000000000000 +000000000000FF000000000000000000000000000000000000000000000000000000FF0000000000 +00000000000000000000000000000000FF000000000000000000000000000000000000FF00000000 +0000000000000000000000FF0000000000000000000000000000FF00000000000000000000000000 +FF00000000000000000000000000FF0000000000000000000000000000FF00000000000000000000 +0000000000FF000000000000000000000000000000000000FF000000000000000000000000000000 +000000000000FF000000000000000000000000000000000000000000000000000000FF0000000000 +000000000000000000000000000000000000000000FF000000000000000000000000000000000000 +000000000000000000FF00000000000000000000000000000000000000000000FF00000000000000 +00000000000000000000FF00000000000000000000000000000000FF000000000000000000000000 +0000FF00000000000000000000000000FF00000000000000000000000000FF000000000000000000 +0000000000FF00000000000000000000000000000000FF0000000000000000000000000000000000 +FF00000000000000000000000000000000000000000000FF00000000000000000000000000000000 +0000000000000000000000FF0000000000000000000000000000000000000000000000FFFF000000 +000000000000000000000000000000000000000000000000FF000000000000000000000000000000 +00000000000000FF000000000000000000000000000000000000FF00000000000000000000000000 +0000FF0000000000000000000000000000FF0000000000000000000000000000FF00000000000000 +00000000000000FF0000000000000000000000000000FF000000000000000000000000000000FF00 +0000000000000000000000000000000000FF00000000000000000000000000000000000000000000 +FF000000000000000000000000000000000000000000000000000000FFFF00000000000000000000 +00000000000000000000FF0000000000000000000000000000000000000000000000000000000000 +FF000000000000000000000000000000000000000000FF0000000000000000000000000000000000 +00FF00000000000000000000000000000000FF0000000000000000000000000000FF000000000000 +0000000000000000FF0000000000000000000000000000FF0000000000000000000000000000FF00 +000000000000000000000000000000FF000000000000000000000000000000000000FF0000000000 +00000000000000000000000000000000FF0000000000000000000000000000000000000000000000 +000000000000FF000000000000000000000000000000000000FF0000000000000000000000000000 +000000000000000000000000000000FF00000000000000000000000000000000000000000000FF00 +0000000000000000000000000000000000FF00000000000000000000000000000000FF0000000000 +000000000000000000FF0000000000000000000000000000FF0000000000000000000000000000FF +0000000000000000000000000000FF00000000000000000000000000000000FF0000000000000000 +00000000000000000000FF00000000000000000000000000000000000000000000FF000000000000 +0000000000000000000000000000000000000000000000FF00000000000000000000000000000000 +FF0000000000000000000000000000000000000000000000000000000000FF000000000000000000 +00000000000000000000000000FF00000000000000000000000000000000000000FF000000000000 +000000000000000000FF000000000000000000000000000000FF0000000000000000000000000000 +FF0000000000000000000000000000FF000000000000000000000000000000FF0000000000000000 +00000000000000FF00000000000000000000000000000000000000FF000000000000000000000000 +00000000000000000000FF0000000000000000000000000000000000000000000000000000000000 +FF0000000000000000000000000000FF000000000000000000000000000000000000000000000000 +0000000000FF0000000000000000000000000000000000000000000000FF00000000000000000000 +0000000000000000FF00000000000000000000000000000000FF0000000000000000000000000000 +00FF0000000000000000000000000000FF0000000000000000000000000000FF0000000000000000 +00000000000000FF00000000000000000000000000000000FF000000000000000000000000000000 +000000FF0000000000000000000000000000000000000000000000FF000000000000000000000000 +0000000000000000000000000000000000FF000000000000000000000000FF000000000000000000 +0000000000000000000000000000000000000000FF00000000000000000000000000000000000000 +00000000FF00000000000000000000000000000000000000FF000000000000000000000000000000 +00FF000000000000000000000000000000FF0000000000000000000000000000FF00000000000000 +00000000000000FF000000000000000000000000000000FF00000000000000000000000000000000 +FF00000000000000000000000000000000000000FF00000000000000000000000000000000000000 +00000000FF0000000000000000000000000000000000000000000000000000000000FF0000000000 +00000000FFFF0000000000000000000000000000000000000000000000000000000000FF00000000 +00000000000000000000000000000000000000FF00000000000000000000000000000000000000FF +0000000000000000000000000000000000FF000000000000000000000000000000FF000000000000 +0000000000000000FF0000000000000000000000000000FF000000000000000000000000000000FF +0000000000000000000000000000000000FF00000000000000000000000000000000000000FF0000 +000000000000000000000000000000000000000000FF000000000000000000000000000000000000 +0000000000000000000000FFFF000000000000FF0000000000000000000000000000000000000000 +00000000000000000000FF000000000000000000000000000000000000000000000000FF00000000 +000000000000000000000000000000FF00000000000000000000000000000000FF00000000000000 +0000000000000000FF000000000000000000000000000000FF000000000000000000000000000000 +FF000000000000000000000000000000FF00000000000000000000000000000000FF000000000000 +00000000000000000000000000FF000000000000000000000000000000000000000000000000FF00 +0000000000000000000000000000000000000000000000000000000000FF00000000FF0000000000 +0000000000000000000000000000000000000000000000000000FF00000000000000000000000000 +00000000000000000000FF00000000000000000000000000000000000000FF000000000000000000 +0000000000000000FF000000000000000000000000000000FF000000000000000000000000000000 +FF000000000000000000000000000000FF000000000000000000000000000000FF00000000000000 +00000000000000000000FF00000000000000000000000000000000000000FF000000000000000000 +0000000000000000000000000000FF00000000000000000000000000000000000000000000000000 +000000000000FF0000FF000000000000000000000000000000000000000000000000000000000000 +00FF0000000000000000000000000000000000000000000000FF0000000000000000000000000000 +000000000000FF0000000000000000000000000000000000FF000000000000000000000000000000 +FF000000000000000000000000000000FF000000000000000000000000000000FF00000000000000 +0000000000000000FF0000000000000000000000000000000000FF00000000000000000000000000 +00000000000000FF0000000000000000000000000000000000000000000000FF0000000000000000 +0000000000000000000000000000000000000000000000FF00000000000000000000000000000000 +00000000000000000000000000000000FF0000000000000000000000000000000000000000000000 +00FF00000000000000000000000000000000000000FF0000000000000000000000000000000000FF +00000000000000000000000000000000FF000000000000000000000000000000FF00000000000000 +0000000000000000FF00000000000000000000000000000000FF0000000000000000000000000000 +000000FF00000000000000000000000000000000000000FF00000000000000000000000000000000 +0000000000000000FF00000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000FF0000000000000000 +00000000000000000000000000000000FF0000000000000000000000000000000000000000FF0000 +000000000000000000000000000000FF00000000000000000000000000000000FF00000000000000 +0000000000000000FF000000000000000000000000000000FF000000000000000000000000000000 +00FF0000000000000000000000000000000000FF0000000000000000000000000000000000000000 +FF000000000000000000000000000000000000000000000000FF0000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000FF000000000000000000000000000000000000000000000000FF0000000000000000 +000000000000000000000000FF000000000000000000000000000000000000FF0000000000000000 +0000000000000000FF000000000000000000000000000000FF000000000000000000000000000000 +FF00000000000000000000000000000000FF000000000000000000000000000000000000FF000000 +0000000000000000000000000000000000FF00000000000000000000000000000000000000000000 +0000FF00000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000FF000000000000000000000000000000000000 +00000000000000FF0000000000000000000000000000000000000000FF0000000000000000000000 +00000000000000FF00000000000000000000000000000000FF000000000000000000000000000000 +FF000000000000000000000000000000FF00000000000000000000000000000000FF000000000000 +000000000000000000000000FF0000000000000000000000000000000000000000FF000000000000 +00000000000000000000000000000000000000FF0000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000FF000000 +00000000000000000000000000000000000000000000FF0000000000000000000000000000000000 +000000FF000000000000000000000000000000000000FF00000000000000000000000000000000FF +00000000000000000000000000000000FF00000000000000000000000000000000FF000000000000 +00000000000000000000FF000000000000000000000000000000000000FF00000000000000000000 +00000000000000000000FF00000000000000000000000000000000000000000000000000FF000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000FF00000000000000000000000000000000000000000000000000FF0000 +00000000000000000000000000000000000000FF000000000000000000000000000000000000FF00 +000000000000000000000000000000FF00000000000000000000000000000000FF00000000000000 +000000000000000000FF00000000000000000000000000000000FF00000000000000000000000000 +0000000000FF000000000000000000000000000000000000000000FF000000000000000000000000 +00000000000000000000000000FF0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000FF000000000000000000000000 +00000000000000000000000000FF000000000000000000000000000000000000000000FF00000000 +0000000000000000000000000000FF00000000000000000000000000000000FF0000000000000000 +0000000000000000FF00000000000000000000000000000000FF0000000000000000000000000000 +0000FF000000000000000000000000000000000000FF000000000000000000000000000000000000 +000000FF00000000000000000000000000000000000000000000000000FF00000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000FF00000000000000000000000000000000000000000000000000FF0000000000000000000000 +00000000000000000000FF000000000000000000000000000000000000FF00000000000000000000 +00000000000000FF00000000000000000000000000000000FF000000000000000000000000000000 +00FF0000000000000000000000000000000000FF000000000000000000000000000000000000FF00 +0000000000000000000000000000000000000000FF00000000000000000000000000000000000000 +000000000000FF000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000FF00000000000000000000000000000000000000000000 +00000000FF000000000000000000000000000000000000000000FF00000000000000000000000000 +0000000000FF0000000000000000000000000000000000FF00000000000000000000000000000000 +FF00000000000000000000000000000000FF0000000000000000000000000000000000FF00000000 +0000000000000000000000000000FF000000000000000000000000000000000000000000FF000000 +0000000000000000000000000000000000000000000000FF00000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000FF00000000000000 +00000000000000000000000000000000000000FF0000000000000000000000000000000000000000 +00FF00000000000000000000000000000000000000FF0000000000000000000000000000000000FF +00000000000000000000000000000000FF00000000000000000000000000000000FF000000000000 +0000000000000000000000FF00000000000000000000000000000000000000FF0000000000000000 +00000000000000000000000000FF0000000000000000000000000000000000000000000000000000 +FF000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000FF0000000000000000000000000000000000000000000000000000FF0000000000 +0000000000000000000000000000000000FF000000000000000000000000000000000000FF000000 +000000000000000000000000000000FF00000000000000000000000000000000FF00000000000000 +000000000000000000FF000000000000000000000000000000000000FF0000000000000000000000 +00000000000000FF00000000000000000000000000000000000000000000FF000000000000000000 +0000000000000000000000000000000000FF00000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000FF0000000000000000000000000000000000 +00000000000000000000FF000000000000000000000000000000000000000000FF00000000000000 +000000000000000000000000FF0000000000000000000000000000000000FF000000000000000000 +0000000000000000FF0000000000000000000000000000000000FF00000000000000000000000000 +00000000FF00000000000000000000000000000000000000FF000000000000000000000000000000 +000000000000FF000000000000000000000000000000000000000000000000000000FF0000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000FF0000 +00000000000000000000000000000000000000000000000000FF0000000000000000000000000000 +0000000000000000FF00000000000000000000000000000000000000FF0000000000000000000000 +000000000000FF0000000000000000000000000000000000FF000000000000000000000000000000 +0000FF0000000000000000000000000000000000FF00000000000000000000000000000000000000 +FF00000000000000000000000000000000000000000000FF00000000000000000000000000000000 +0000000000000000000000FF00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000FF0000000000000000000000000000000000000000000000000000 +FF00000000000000000000000000000000000000000000FF00000000000000000000000000000000 +00000000FF0000000000000000000000000000000000FF0000000000000000000000000000000000 +FF0000000000000000000000000000000000FF0000000000000000000000000000000000FF000000 +0000000000000000000000000000000000FF00000000000000000000000000000000000000000000 +FF0000000000000000000000000000000000000000000000000000FF000000000000000000000000 +00000000000000000000000000000000000000000000000000000000FF0000000000000000000000 +00000000000000000000000000000000FF00000000000000000000000000000000000000000000FF +00000000000000000000000000000000000000FF000000000000000000000000000000000000FF00 +00000000000000000000000000000000FF0000000000000000000000000000000000FF0000000000 +00000000000000000000000000FF00000000000000000000000000000000000000FF000000000000 +00000000000000000000000000000000FF0000000000000000000000000000000000000000000000 +00000000FF0000000000000000000000000000000000000000000000000000000000000000000000 +000000FF000000000000000000000000000000000000000000000000000000FF0000000000000000 +0000000000000000000000000000FF0000000000000000000000000000000000000000FF00000000 +0000000000000000000000000000FF0000000000000000000000000000000000FF00000000000000 +00000000000000000000FF000000000000000000000000000000000000FF00000000000000000000 +00000000000000000000FF00000000000000000000000000000000000000000000FF000000000000 +000000000000000000000000000000000000000000FF000000000000000000000000000000000000 +000000000000000000000000000000000000FF000000000000000000000000000000000000000000 +000000000000FF0000000000000000000000000000000000000000000000FF000000000000000000 +0000000000000000000000FF000000000000000000000000000000000000FF000000000000000000 +0000000000000000FF0000000000000000000000000000000000FF00000000000000000000000000 +0000000000FF0000000000000000000000000000000000000000FF00000000000000000000000000 +00000000000000000000FF000000000000000000000000000000000000000000000000000000FF00 +00000000000000000000000000000000 +gr +gr + +4 w +DO +SO +6 w +0 sg +1463 388 mt 5691 388 L +1463 4616 mt 5691 4616 L +1463 388 mt 1463 4616 L +5691 388 mt 5691 4616 L +1463 4616 mt 5691 4616 L +1463 388 mt 1463 4616 L +1463 388 mt 5691 388 L +1463 4616 mt 5691 4616 L +1463 388 mt 1463 4616 L +5691 388 mt 5691 4616 L + +end %%Color Dict + +eplot +%%EndObject + +epage +end + +showpage + +%%Trailer +%%EOF diff --git a/Notes/Figs/phantom_sampling.pdf b/Notes/Figs/phantom_sampling.pdf Binary files differnew file mode 100644 index 0000000..f467f0b --- /dev/null +++ b/Notes/Figs/phantom_sampling.pdf diff --git a/Notes/Figs/phantom_tv.eps b/Notes/Figs/phantom_tv.eps new file mode 100644 index 0000000..41a7efa --- /dev/null +++ b/Notes/Figs/phantom_tv.eps @@ -0,0 +1,1861 @@ +%!PS-Adobe-2.0 EPSF-1.2 +%%Creator: MATLAB, The Mathworks, Inc. +%%Title: ./Notes/Figs/phantom_tv.eps +%%CreationDate: 11/21/2005 14:01:56 +%%DocumentNeededFonts: Helvetica +%%DocumentProcessColors: Cyan Magenta Yellow Black +%%Pages: 1 +%%BoundingBox: 137 227 496 583 +%%EndComments + +%%BeginProlog +% MathWorks dictionary +/MathWorks 160 dict begin +% definition operators +/bdef {bind def} bind def +/ldef {load def} bind def +/xdef {exch def} bdef +/xstore {exch store} bdef +% operator abbreviations +/c /clip ldef +/cc /concat ldef +/cp /closepath ldef +/gr /grestore ldef +/gs /gsave ldef +/mt /moveto ldef +/np /newpath ldef +/cm /currentmatrix ldef +/sm /setmatrix ldef +/rm /rmoveto ldef +/rl /rlineto ldef +/s {show newpath} bdef +/sc {setcmykcolor} bdef +/sr /setrgbcolor ldef +/sg /setgray ldef +/w /setlinewidth ldef +/j /setlinejoin ldef +/cap /setlinecap ldef +/rc {rectclip} bdef +/rf {rectfill} bdef +% page state control +/pgsv () def +/bpage {/pgsv save def} bdef +/epage {pgsv restore} bdef +/bplot /gsave ldef +/eplot {stroke grestore} bdef +% orientation switch +/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def +% coordinate system mappings +/dpi2point 0 def +% font control +/FontSize 0 def +/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0] + makefont setfont} bdef +/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse + exch dup 3 1 roll findfont dup length dict begin + { 1 index /FID ne {def}{pop pop} ifelse } forall + /Encoding exch def currentdict end definefont pop} bdef +/isroman {findfont /CharStrings get /Agrave known} bdef +/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse + exch FMS} bdef +/csm {1 dpi2point div -1 dpi2point div scale neg translate + dup landscapeMode eq {pop -90 rotate} + {rotateMode eq {90 rotate} if} ifelse} bdef +% line types: solid, dotted, dashed, dotdash +/SO { [] 0 setdash } bdef +/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef +/DA { [6 dpi2point mul] 0 setdash } bdef +/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 + dpi2point mul] 0 setdash } bdef +% macros for lines and objects +/L {lineto stroke} bdef +/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef +/AP {{rlineto} repeat} bdef +/PDlw -1 def +/W {/PDlw currentlinewidth def setlinewidth} def +/PP {closepath eofill} bdef +/DP {closepath stroke} bdef +/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto + neg 0 exch rlineto closepath} bdef +/FR {MR stroke} bdef +/PR {MR fill} bdef +/L1i {{currentfile picstr readhexstring pop} image} bdef +/tMatrix matrix def +/MakeOval {newpath tMatrix currentmatrix pop translate scale +0 0 1 0 360 arc tMatrix setmatrix} bdef +/FO {MakeOval stroke} bdef +/PO {MakeOval fill} bdef +/PD {currentlinewidth 2 div 0 360 arc fill + PDlw -1 eq not {PDlw w /PDlw -1 def} if} def +/FA {newpath tMatrix currentmatrix pop translate scale + 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef +/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale + 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef +/FAn {newpath tMatrix currentmatrix pop translate scale + 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef +/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale + 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef +/vradius 0 def /hradius 0 def /lry 0 def +/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def +/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef + /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly + vradius add translate hradius vradius scale 0 0 1 180 270 arc + tMatrix setmatrix lrx hradius sub uly vradius add translate + hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix + lrx hradius sub lry vradius sub translate hradius vradius scale + 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub + translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix + closepath} bdef +/FRR {MRR stroke } bdef +/PRR {MRR fill } bdef +/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def + newpath tMatrix currentmatrix pop ulx rad add uly rad add translate + rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad + sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix + closepath} bdef +/FlrRR {MlrRR stroke } bdef +/PlrRR {MlrRR fill } bdef +/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def + newpath tMatrix currentmatrix pop ulx rad add uly rad add translate + rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad + sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix + closepath} bdef +/FtbRR {MtbRR stroke } bdef +/PtbRR {MtbRR fill } bdef +/stri 6 array def /dtri 6 array def +/smat 6 array def /dmat 6 array def +/tmat1 6 array def /tmat2 6 array def /dif 3 array def +/asub {/ind2 exch def /ind1 exch def dup dup + ind1 get exch ind2 get sub exch } bdef +/tri_to_matrix { + 2 0 asub 3 1 asub 4 0 asub 5 1 asub + dup 0 get exch 1 get 7 -1 roll astore } bdef +/compute_transform { + dmat dtri tri_to_matrix tmat1 invertmatrix + smat stri tri_to_matrix tmat2 concatmatrix } bdef +/ds {stri astore pop} bdef +/dt {dtri astore pop} bdef +/db {2 copy /cols xdef /rows xdef mul dup string + currentfile exch readhexstring pop + /bmap xdef pop pop} bdef +/it {gs np dtri aload pop moveto lineto lineto cp c + cols rows 8 compute_transform + {bmap} image gr}bdef +/il {newpath moveto lineto stroke}bdef +currentdict end def +%%EndProlog + +%%BeginSetup +MathWorks begin + +0 cap + +end +%%EndSetup + +%%Page: 1 1 +%%BeginPageSetup +%%PageBoundingBox: 137 227 496 583 +MathWorks begin +bpage +%%EndPageSetup + +%%BeginObject: obj1 +bplot + +/dpi2point 12 def +portraitMode 0216 7344 csm + + 1429 340 4312 4278 MR c np +125 dict begin %Colortable dictionary +/c0 { 0.000000 0.000000 0.000000 sr} bdef +/c1 { 1.000000 1.000000 1.000000 sr} bdef +/c2 { 0.900000 0.000000 0.000000 sr} bdef +/c3 { 0.000000 0.820000 0.000000 sr} bdef +/c4 { 0.000000 0.000000 0.800000 sr} bdef +/c5 { 0.910000 0.820000 0.320000 sr} bdef +/c6 { 1.000000 0.260000 0.820000 sr} bdef +/c7 { 0.000000 0.820000 0.820000 sr} bdef +c0 +1 j +1 sg + 0 0 6914 5188 PR +6 w +0 -4228 4228 0 0 4228 1463 388 4 MP +PP +-4228 0 0 -4228 4228 0 0 4228 1463 388 5 MP stroke +gs 1463 388 4229 4229 MR c np +gs np 1464 389 mt 0 4227 rl 4227 0 rl 0 -4227 rl cp c np +[4227 0 0 4227 1464 389] cc +/picstr 256 string def +256 256 8 [256.000000 0 0 256.000000 0 0] L1i +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101014101010101014 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101014101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101014101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101410101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101410101010141410141010141010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010141014FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF141010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101014 +10101010101010101010101010101010101010101010101010FAFFFAFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFA10101014101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA1014141010 +10101014101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFF1414101010101410101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10141010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010FFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFF1010101414101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101014FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA14141010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101414FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFF1414101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010101010101010101014FF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4040404040404040404040404040404040 +40FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF141410101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF404040404040 +40404040404040404040404040404040404040404044FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFF10141010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010FFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFF40404040404040404040404040404040404040404040404040404040404040404040 +4044FAFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF14101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1014FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1410 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404044 +FFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFF101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010FFFFFFFFFFFFFFFFFF +FFFFFFFFFFFA40404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404044FAFFFFFFFFFFFFFFFFFFFFFFFFFFFF10101410101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101014FFFFFFFFFFFFFFFFFFFFFFFFFFFF404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040FAFFFF +FFFFFFFFFFFFFFFFFFFFFA1414101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101014FFFFFFFFFFFFFFFFFFFFFFFFFF40404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040FAFAFFFFFFFFFFFFFFFFFFFFFA101410101010101010101010 +10101010141010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101010101010101014FFFFFFFFFF +FFFFFFFFFFFFFF404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040404040404040404044FAFFFFFFFFFFFF +FFFFFFFFFA1018101014101010101010101010101010101010101410101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101014FFFFFFFFFFFFFFFFFFFFFFFFFF404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404044FAFAFFFFFFFFFFFFFFFFFFFFF61C10101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010FFFFFFFFFFFFFFFFFFFFFFFF40404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040FFFAFFFFFFFFFFFFFFFFFFF2 +1C101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010101010101010101010FF +FFFFFFFFFFFFFFFFFFFF404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040FFFFFFFFFFFFFFFFFFFFF21C10101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010FFFFFFFFFFFFFFFFFFFFFF404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040404040FFFFFFFFFFFFFFFFFFFFF2181014101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101010FFFFFFFFFFFFFFFFFFFFFF +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +FFFFFFFFFFFFFFFFFFFFF21814101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10141010FFFFFFFFFFFFFFFFFFFF4040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040FFFFFFFFFFFFFFFFFFF61810140C1010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010FFFFFFFFFFFFFFFFFFFF4040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040404040404040404040404040404040FFFFFFFFFF +FFFFFFFFF61814141010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101014FFFFFFFFFFFF +FFFFFFFF404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404044FAFFFFFFFFFFFFFFFFF6181010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101014FFFFFFFFFFFFFFFFFF40404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040404040404040FAFFFFFFFFFFFFFFF224 +0C0C1410101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101014FFFFFFFFFFFFFFFFFF40404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040FAFFFFFFFFFFFFFFEE3C000C101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010101010101010101010FF +FFFFFFFFFFFFFFFF4440404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404044FAFFFFFFFFFFFFFAEE28081010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010FAFFFFFFFFFFFFFFFF4040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +44FAFFFFFFFFFFFFFAF61C1010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101010FFFFFFFFFFFFFFFFFA4040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404044FAFFFFFFFFFFFFFFFA14101010101010101010101010 +10101010101010101010101014101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101014FFFFFFFFFFFFFFFF404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040404040404040404040404040404044FAFFFFFFFF +FFFFFF10101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010FFFFFFFFFFFFFFFF404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404044FFFFFFFFFFFFFFFF1010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101010101010101010FFFFFFFFFF +FFFFFF40404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040404040404040404044FAFAFFFFFFFFFFFA101410 +10101014141010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010FFFFFFFFFFFFFFFF40404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404048FAFFFFFFFFFFFFFF1014141010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010FFFFFFFFFFFFFFFF40404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040404044FAFFFFFFFFFFFFFF101410101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10FFFFFFFFFFFFFF4440404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040403C40404040404044 +FAFFFFFFFFFFFF141014101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010FFFFFFFFFFFFFFFF40404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040403C4440404040404044FAFFFFFFFFFFFFFF14101410101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010FFFFFFFFFFFFFFFF40 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040404040404040404044FAFFFFFFFFFFFF +FF141010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010FFFFFFFFFFFFFF4040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404044FAFFFFFFFFFFFA1810101014101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010FFFFFFFFFFFFFF4040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040404044FAFFFFFFFFFFFA180C10141410 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101014FAFFFF +FFFFFFFF404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040444044404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404044FAFAFFFFFFFAFA140C141010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101014FFFFFFFFFFFFFF4040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404059595459595959 +59595959595959404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404044FAFFFFFFFFFFF61C101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101014FFFFFFFFFFFFFF4040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040595959595959595959595959595959595954404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404048FAFFFF +FFFFFAF61C1010101010141010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010FFFFFFFFFFFFFF404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404059595959595959595959595959595959595959 +59595940404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404044FAFFFFFFFFFAFA14101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010FFFFFFFFFFFF404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040445459595959 +59595959595959595959595959595959595959595940404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404044FFFFFFFFFFFA141410 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010FFFFFFFFFFFF +FF404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040595959595959595959595959595959595959595959595959595959594040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040FFFFFFFFFFFFFF1414101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101014FFFFFFFFFFFF404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404059595959595959595959595959595959 +59595959595959595959595959595954404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404044FAFFFFFFFFFA14141410101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010FFFFFFFFFFFF404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404054 +59595959595959595959595959595959595959595959595959595959595959595940404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +44FAFFFFFFFFFA141414101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10FFFFFFFFFFFF404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040405959595959595959595959595959595959595959595959595959 +59595959595959595959404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404044FAFFFFFFFFFA1410101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010FFFFFFFFFFFF404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040405959595959595959595959 +59595959595959595959595959595959595959595959595959595940404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404044FAFFFFFFFFFA +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101010101010FFFFFFFFFFFF4040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040405959595959595959595959595959595959595959595959595959595959595959595959 +59595944404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040FFFAFFFFFFF6101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010FFFFFFFFFFFF404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040405959595959595959595959595959595959595959 +59595959595959595959595959595959595959594040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040404048FAFFFFFFFFFA10101014101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010FFFFFFFFFF404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040405959595959 +59595959595959595959595959595959595959595959595959595959595959595959595959404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404044FAFFFFFFFA14101014141010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101010101010101010101010FFFF +FFFFFFFF404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040595959595959595959595959595959595959595959595959595959595959 +59595959595959595959595959594040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040FFFFFFFFFFFA1010101414101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010FFFFFFFFFF404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040405459595959595959595959595959 +59595959595959595959595959595959595959595959595959595959595940404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040FAFFFF +FFFA1010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101010FFFFFFFFFFFF4040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40595959595959595959595959595959595959595959595959595959595959595959595959595959 +59595959595954404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404044FAFFFFFFFFFA101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010FFFFFFFFFF404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040405959595959595959595959595959595959595959595959 +59595959595959595959595959595959595959595959594040404040404040404040404040404040 +404040404040404040404040404040404040404040404040404040404040FAFFFFFFFF1010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010FFFFFFFFFFFF4040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040405959595959595959 +59595959595959595959595959595959595959595959595959595959595959595959595959595959 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040FAFFFFFFFFFF10101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010101010101010FFFFFFFF +FF404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040405959595959595959595959595959595959595959595959595959595959595959 +59595959595959595959595959595959404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040404040FAFFFFFFFF101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010FFFFFFFFFFFF4040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404059595959595959595959595959595959 +59595959595959595959595959595959595959595959595959595959595959544440404040404040 +404040404040404040404040404040404040404040404040404040404040404040404040404040FA +FFFFFFFFFF1010101010101010101410101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101014FFFFFFFFFF4040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404054 +59595959595959595959595959595959595959595959595959595959595959595959595959595959 +59595959595959595440404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040FAFFFFFFFA14101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010FFFFFFFFFFFA4040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404059595959595959595959595959595959595959595959595959 +59595959595959595959595959595959595959595959595959404040404040404040404040404040 +4040404040404040404040404040404040404040404040404040404040404044FAFFFFFFFFFF1410 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010FFFFFFFFFF4040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040595959595959595959 +59595959595959595959595959595959595959595959595959595959595959595959595959595959 +59404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040FAFFFFFFFA1410101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010FFFFFFFFFA40 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404059595959595959595959595959595959595959595959595959595959595959595959 +59595959595959595959595959595959595940404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040FAFFFFFFFA14101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010FFFFFFFFFF4040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040595959595959595959595959595959595959 +59595959595959595959595959595959595959595959595959595959595959595954404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040FFFFFFFFFA101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010FFFFFFFFFF40404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040405959 +59595959595959595959595959595959595959595959595959595959595959595959595959595959 +59595959595959595959404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040FAFFFFFFFF1010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +14FFFFFFFFFF40404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040405959595959595959595959595959595959595959595959595959 +59595959595959595959595959595959595959595959595959594040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040FAFFFFFFFF14 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010FFFFFFFFFF40404040404040404040404040404040404040 +404040404040404040403C1010101010101440404040404040404040404059595959595959595959 +59595959595959595959595959595959595959595959595959595959595959595959595959595959 +59594040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404044FAFFFFFFFF101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101010101014FFFFFFFFFF404040 +4040404040404040404040404040404040404040404040404014101010101010101010143C404040 +40404040405959595959595959595959595959595959595959595959595959595959595959595959 +59595959595959595959595959595959595959404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040404040FFFFFFFFFF1010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010FFFFFFFF40404040404040404040404040404040404040404040404040404040 +14101010101010101010101014144040404040404059595959595959595959595959595959595959 +59595959595959595959595959595959595959595959595959595959595959595959594040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040FFFFFFFF1410101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010FFFFFFFFFF404040404040404040404040 +40404040404040404040404040404014101010101010101010101010101010404040404040595959 +59595959595959595959595959595959595959595959595959595959595959595959595959595959 +59595959595959595959594040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040FFFFFFFFFF101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010101010101010101010FF +FFFFFFFF404040404040404040404040404040404040404040404040404040101010101010101010 +10101010101010101040404040595959595959595959595959595959595959595959595959595959 +59595959595959595959595959595959595959595959595959595940404040404040404040404040 +404040404040404040404040404040404040404040404040404040404040404040404040FFFFFFFF +FF101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010FFFFFFFF404040404040404040404040404040404040404040 +40404040404010101010101010101010101010101010101010143C40405959595959595959595959 +59595959595959595959595959595959595959595959595959595959595959595959595959595959 +59595440404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040FFFFFFFF1410101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010141010FFFFFFFFFF4040404040 +40404040404040404040404040404040404040404040101010101010101010101010101010101010 +10101440405959595959595959595959595959595959595959595959595959595959595959595959 +59595959595959595959595959595959595954404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040404040404040404040FFFFFFFFFF101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010FFFFFFFFFF4040404040404040404040404040404040404040404040404040101010 +10101010101010101010101010101010101010143C59595959595959595959595959595959595959 +59595959595959595959595959595959595959595959595959595959595959595959594040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040FAFFFFFFFF141010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101014FFFFFFFF4040404040404040404040404040 +40404040404040404040404040101010101010101010101010101010101010101010101010545959 +59595959595959595959595959595959595959595959595959595959595959595959595959595959 +59595959595959595959594040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040FFFFFFFA1410101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010FFFFFF +FFFF4040404040404040404040404040404040404040404040404040101010101010101010101010 +101010101010101010101010102C5959595959595959595959595959595959595959595959595959 +59595959595959595959595959595959595959595959595959595940404040404040404040404040 +4040404040404040404040404040404040404040404040404040404040404040404040404040FFFF +FFFFFF14101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010FFFFFFFFFA40404040404040404040404040404040404040404040 +40404040141010101010101010101010101010101010101010101010101059595959595959595959 +59595959595959595959595959595959595959595959595959595959595959595959595959595959 +59594040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040FAFFFFFFFF101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101014FFFFFFFA40404040404040 +40404040404040404040404040404040404040401010101010101010101010101010101010101010 +10101010101428545959595959595959595959595959595959595959595959595959595959595959 +59595959595959595959595959595959595940404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040FFFFFFFF1010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010FFFFFFFF40404040404040404040404040404040404040404040404040404010101010 +10101010101010101010101010101010101010101010282C54595959595959595959595959595959 +59595959595959595959595959595959595959595959595959595959595959595959404040404040 +40404040401410101440404040404040404040404040404040404040404040404040404040404040 +40404040404040FFFFFFFF1010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010FFFFFFFFFF404040404040404040404040404040 +40404040404040404040401410101010101010101010101010101010101010101010101010142828 +2C595959595959595959595959595959595959595959595959595959595959595959595959595959 +59595959595959595959404040404040404010101010101010144040404040404040404040404040 +4040404040404040404040404040404040404040404040FFFFFFFFFF101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010101010101010FFFFFFFF +FF404040404040404040404040404040404040404040404040404010101010101010101010101010 +10101010101010101010101010102828285959595959595959595959595959595959595959595959 +59595959595959595959595959595959595959595959595959594040404040404014101010101010 +101014404040404040404040404040404040404040404040404040404040404040404040404044FF +FFFFFFFF101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010FFFFFFFF404040404040404040404040404040404040404040404040 +40404010101010101010101010101010101010101010101010101010101010282828545959595959 +59595959595959595959595959595959595959595959595959595959595959595959595959595959 +54404040404040401010101010101010101010104040404040404040404040404040404040404040 +40404040404040404040404040404040FFFFFFFF1010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101014FFFFFFFF4040404040404040 +40404040404040404040404040404040404040101010101010101010101010101010101010101010 +10101010101010282828285959595959595959595959595959595959595959595959595959595959 +59595959595959595959595959595959594040404040401410101010101010101010101440404040 +4040404040404040404040404040404040404040404040404040404040404040FFFFFFFF14101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010FFFFFFFFFA4040404040404040404040404040404040404040404040404040401410101010 +10101010101010101010101010101010101010101010102828282C59595959595959595959595959 +59595959595959595959595959595959595959595959595959595959595959595940404040401414 +10101010101010101010101014404040404040404040404040404040404040404040404040404040 +4040404040404040FFFFFFFFFF101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010FFFFFFFFFF40404040404040404040404040404040 +40404040404040404040401010101010101010101010101010101010101010101010101010101014 +2828282C545959595959595959595959595959595959595959595959595959595959595959595959 +59595959595959594040404040101410101010101010101010101010144040404040404040404040 +404040404040404040404040404040404040404040404040FAFFFFFFFF1010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101010101010101010FFFFFFFF40 +40404040404040404040404040404040404040404040404040404010101010101010101010101010 +10101010101010101010101010101010282828282C59595959595959595959595959595959595959 +59595959595959595959595959595959595959595959595440404040101010101010101010101010 +10101010104040404040404040404040404040404040404040404040404040404040404040404040 +40FFFFFFFF1010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010FFFFFFFF40404040404040404040404040404040404040404040404040 +40404010101010101010101010101010101010101010101010101010101010142828282828545959 +59595959595959595959595959595959595959595959595959595959595959595959595959595954 +40404014101010101010101010101010101010101040404040404040404040404040404040404040 +4040404040404040404040404040404040FFFFFFFF10101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010FFFFFFFF404040404040404040 +40404040404040404040404040404040404040101010101010101010101010101010101010101010 +101010101010101014282828282C5959595959595959595959595959595959595959595959595959 +59595959595959595959595959595440404014101010101010101010101010101010101010104040 +404040404040404040404040404040404040404040404040404040404040404040FFFFFFFF101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010FFFFFFFFFF404040404040404040404040404040404040404040404040404040401010101010 +10101010101010101010101010101010101010101010101410282828282854595959595959595959 +5959595959595959595959595959595959595959595959595959595959595940403C101010101010 +10101010101010101010101010104040404040404040404040404040404040404040404040404040 +404040404040404040FFFFFFFFFF1010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010FFFFFFFF404040404040404040404040404040404040 +40404040404040404040401010101010101010101010101010101010101010101010101010101010 +10102828282828595959595959595959595959595959595959595959595959595959595959595959 +59595959595940404010101010101010101010101010101010101010101040404040404040404040 +4040404040404040404040404040404040404040404040404040FFFFFFFF10101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010FFFFFFFF4040 +40404040404040404040404040404040404040404040404040404010101010101010101010101010 +101010101010101010101410101010101010102828282C5959595959595959595959595959595959 +59595959595959595959595959595959595959595940404010101010101010101010101010101010 +10101010101040404040404040404040404040404040404040404040404040404040404040404040 +4040FFFFFFFF10101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101014FFFFFFFF4040404040404040404040404040404040404040404040404040 +4040401010101010101010101010101010101010101010101010101010101010101014282828282C +59595959595959595959595959595959595959595959595959595959595959595959595959404040 +10101010101010101010101010101010101010101010404040404040404040404040404040404040 +404040404040404040404040404040404040FFFFFFFF141010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101414FFFFFFFF40404040404040404040 +40404040404040404040404040404040404040101010101010101010101010101010101010101010 +10101010101010101010101028282828545959595959595959595959595959595959595959595959 +59595959595959595959595940404014141010101010101010101010101010101010101010104040 +40404040404040404040404040404040404040404040404040404040404040404040FFFFFFFF1010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010FFFFFFFF40404040404040404040404040404040404040404040404040404040401010101010 +10101010101010101010101010101010101010101010101010101010102828282C59595959595959 +59595959595959595959595959595959595959595959595959595440404040141010101010101010 +10101010101010101010101010144040404040404040404040404040404040404040404040404040 +40404040404040404040FFFFFFFF1010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010FFFFFFFA404040404040404040404040404040404040 +40404040404040404040401010101010101010101010101010101010101010101010101010101010 +10101010101028282859595959595959595959595959595959595959595959595959595959595959 +59594040404014101010101010101010101010101010101010101010101040404040404040404040 +4040404040404040404040404040404040404040404040404040FFFFFFFF10101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010101010FFFFFFFF404040 +40404040404040404040404040404040404040404040404040404010101010101010101010101010 +1010101010101010101010101010101010101010101014282C285959595959595959595959595959 +59595959595959595959595959595959544040404010101010101010101010101010101010101010 +1010101010143C404040404040404040404040404040404040404040404040404040404040404040 +404040FFFFFFFA101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101014FFFFFFFF404040404040404040404040404040404040404040404040404040 +40404010101010101010101010101010101010101010101010101010101010101010101010101014 +242C5459595959595959595959595959595959595959595959595959595959594040404040101010 +10101010101010101010101010101010101010101010404040404040404040404040404040404040 +40404040404040404040404040404040404040FFFFFFFF1010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010FFFFFFFA4040404040404040404040 +40404040404040404040404040404040404040101010101010101010101010101010101010101010 +1010101010101010101010101010101014282C5959595959595959595959596D6D59595959595959 +59595959595959404040404014101010101010101010101010101010101010101010101010144040 +4040404040404040404040404040404040404040404040404040404040404040404040FFFFFFFF10 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +14FFFFFFFF4040404040404040404040404040404040404040404040404040404040401010101010 +10101010101010101010101010101010101010101010101010101010101010101014285959595959 +595959595D71716D71716D5959595959595959595959404040404040141010101010101010101010 +10101010101010101010101010104040404040404040404040404040404040404040404040404040 +4040404040404040404040FFFFFFFF10101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101014FFFFFFFF40404040404040404040404040404040404040 +40404040404040404040401410101010101010101010101010101010101010101010101010101010 +10101010101010101010142C595959595959597171717171717171716D5959595959595959404040 +40404014101010101010101010101010101010101010101010101010101040404040404040404040 +404040404040404040404040404040404040404040404040404040FFFFFFFF101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010101010FFFFFFFA404040 +40404040404040404040404040404040404040404040404040404040101010101010101010101010 +10101010101010101010101010101010101010101010101010101014445459595959597171717171 +71717171715959595959594040404040404040101010101010101010101010101010101010101010 +10101010101440404040404040404040404040404040404040404040404040404040404040404040 +404040FFFFFFFF101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101014FFFFFFFF444040404040404040404040404040404040404040404040404040 +40404040101010101010101010101010101010101010101010101010101010101010101010101010 +101010103C40405959596D7171717171717171717171545959404040404040404040401010101010 +10101010101010101010101010101010101010101010404040404040404040404040404040404040 +40404040404040404040404040404040404044FAFFFFFF1010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010FFFFFF404040404040404040404040 +40404040404040404040404040404040404040401010101010101010101010101010101010101010 +10101010101010101010101010101010101010101440404040406D717171717171716D6D71714040 +40404040404040404040141010101010101010101010101010101010101010101010101010104040 +404040404040404040404040404040404040404040404040404040404040404040404044FFFFFF10 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10FFFFFF404040404040404040404040404040404040404040404040404040404040404010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010404040 +40405959595959595959595959594040404040404040404040401010101010101010101010101010 +101010101010101010101010103C4040404040404040404040404040404040404040404040404040 +404040404040404040404040FFFFFA14101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010FFFFFFFF4040404040404040404040404040404040404040 +40404040404040404040404010101010101010101010101010101010101010101010101010101010 +10101010101010101010101014144040404459595959595959595959595940404040404040404040 +40101010101010101010101010101010101010101010101010101010104040404040404040404040 +40404040404040404040404040404040404040404040404040404040FFFFFFFA1010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101010101010FFFFFFFF40404040 +40404040404040404040404040404040404040404040404040404040101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101040404040405959595959 +59595959594040404040404040404040401010101010101010101010101010101010101010101010 +10101010104040404040404040404040404040404040404040404040404040404040404040404040 +40404040FFFFFFFF1010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010FFFFFFFF40404040404040404040404040404040404040404040404040404040 +40404040141010101010101010101010101010101010101010101010101010101010101010101010 +1010101010143C404040405959595959595959595440404040404040404040404010101010101010 +10101010101010101010101010101010101010101440404040404040404040404040404040404040 +4040404040404040404040404040404040404040FFFFFFFF10101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010FFFFFFFF404040404040404040404040 +40404040404040404040404040404040404040404010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010144040404040595959595959595440404040 +40404040404040401010101010101010101010101010101010101010101010101010101014404040 +404040404040404040404040404040404040404040404040404040404040404040404040FFFFFFFF +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +FFFFFFFF404040404040404040404040404040404040404040404040404040404040404040101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101440 +40404040405959595959594040404040404040404040404010101010101010101010101010101010 +10101010101010101010101010404040404040404040404040404040404040404040404040404040 +404040404040404040404040FFFFFFFF101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101014FFFFFFFF4040404040404040404040404040404040404040 +40404040404040404040404040101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010103C404040404040404040404040404040404040404040404014 +10101010101010101010101010101010101010101010101010101010404040404040404040404040 +40404040404040404040404040404040404040404040404040404040FFFFFFFA1010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101010101010FFFFFFFA40404040 +40404040404040404040404040404040404040404040404040404040401410101010101010101010 +10101010101010101010101010101010101010101010101010101010101010104040404040404040 +40404040404040404040404040404010101010101010101010101010101010101010101010101010 +10101010404040404040404040404040404040404040404040404040404040404040404040404040 +40404040FFFFFFFF1010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010FFFFFFFF40404040404040404040404040404040404040404040404040404040 +40404040404010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010144040404040404040404040404040404040404040404040101010101010101010 +10101010101010101010101010101010101010104040404040404040404040404040404040404040 +4040404040404040404040404040404040404040FFFFFFFF10101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010FFFFFFFF404040404040404040404040 +40404040404040404040404040404040404040404040141010101010101010101010101010101010 +10101010101010101010101010101010101010101010101438404040404040404040404040404040 +40404040404010101010101010101010101010101010101010101010101010101010101040404040 +404040404040404040404040404040404040404040404040404040404040404040404040FFFFFFFF +14101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101014 +FFFFFFFF404040404040404040404040404040404040404040404040404040404040404040401410 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +14404040404040404040404040404040404040404040101010101010101010101010101010101010 +10101010101010101010104040404040404040404040404040404040404040404040404040404040 +404040404040404040404040FFFFFFFF101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010FFFFFFFF4040404040404040404040404040404040404040 +40404040404040404040404040401410101010101010101010101010101010101010101010101010 +10101010101010101010101010101010104040404040404040404040404040404040404040401010 +10101010101010101010101010101010101010101010101010101040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040FFFFFFFF1010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101010101010FFFFFFFA40404040 +40404040404040404040404040404040404040404040404040404040404040141010101010101010 +10101010101010101010101010101010101010101010101010101010101010101440404040404040 +40404040404040404040404040401010101010101010101010101010101010101010101010101010 +10101440404040404040404040404040404040404040404040404040404040404040404040404040 +40404040FFFFFFFF1010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101014FFFFFFFF40404040404040404040404040404040404040404040404040404040 +40404040404040101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010143C404040404040404040404040404040404040401010101010101010101010 +10101010101010101010101010101010101010404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040FFFFFFFF10101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010FFFFFFFF404040404040404040404040 +404040404040404040404040404040404040404040403C1410101010101010101010101010101010 +10101010101010101010101010101010101010101010101010144040404040404040404040404040 +40404040401010101010101010101010101010101010101010101010101010101010404040404040 +404040404040404040404040404040404040404040404040404040404040404040404040FFFFFFFF +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +FFFFFFFA404040404040404040404040404040404040404040404040404040404040404040404014 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10104040404040404040404040404040404040404010101010101010101010101010101010101010 +10101010101010101014404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040FFFFFFFF101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101014FFFFFFFA4040404040404040404040404040404040404040 +4040404040404040404040404040403C101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101040404040404040404040404040404040404014101010 +10101010101010101010101010101010101010101010101010144040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040FFFFFFFA1010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101010101010FFFFFFFF40404040 +40404040404040404040404040404040404040404040404040404040404040401010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010404040404040 +40404040404040404040404010101010101010101010101010101010101010101010101010101010 +10404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040FFFFFFFF1010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010141010FFFFFFFA40404040404040404040404040404040404040404040404040404040 +40404040404040401410101010101010101010101010101010101010101010101010101010101010 +10101010101010101010144040404040404040404040404040404040101010101010101010101010 +10101010101010101010101010101010144040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040FFFFFFFF10101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010FFFFFFFF404040404040404040404040 +40404040404040404040404040404040404040404040404040101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101040404040404040404040404040 +40404040101010101010101010101010101010101010101010101010101010101040404040404040 +404040404040404040404040404040404040404040404040404040404040404040404040FFFFFFFF +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +FFFFFFFF404040404040404040404040404040404040404040404040404040404040404040404040 +3C141010101010101010101010101010101010101010101010101010101010101010101010101010 +101014404054595959595940404040404040403C1010101010101010101010101010101010101010 +10101010101010104040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040FFFFFFFF101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010FFFFFFFA4040404040404040404040404040404040404040 +40404040404040404040404040404040401410101010101010101010101010101010101010101010 +10101010101010101010101010101010101010405959595959595959404040404040401410101010 +10101010101010101010101010101010101010101010101040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404044FAFFFFFF1010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101010101010FFFFFFFF40404040 +40404040404040404040404040404040404040404040404040404040404040404040141010101010 +10101010101010101010101010101010101010101010101010101010101010101010105459595959 +59595959594040404040401410101010101010101010101010101010101010101010101010101014 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040FFFFFFFF1010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010FFFFFFFF40404040404040404040404040404040404040404040404040404040 +40404040404040404040101010101010101010101010101010101010101010101010101010101010 +10101010101010101010102859595959595959595940404040404014101010101010101010101010 +10101010101010101010101010101040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040FFFFFFFF10101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010FFFFFFFF404040404040404040404040 +40404040404040404040404040404040404040404040404040401410101010101010101010101010 +10101010101010101010101010101010101010101010101010102828595959595959595959594040 +40404014101010101010101010101010101010101010101010101010101010404040404040404040 +404040404040404040404040404040404040404040404040404040404040404040404040FFFFFFFF +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101014 +14FFFFFF404040404040404040404040404040404040404040404040404040404040404040404040 +40404010101010101010101010101010101010101010101010101010101010101010101010101010 +10102828595959595959595959594040404040101010101010101010101010101010101010101010 +10101010101040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040FFFFFF10101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010FFFFFF4040404040404040404040404040404040404040 +40404040404040404040404040404040404040141010101010101010101010101010101010101010 +10101010101010101010101010101010101428285459595959595959595440404040401010101010 +10101010101010101010101010101010101010101014404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040FFFFFA141010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010101014FFFFFA40404040 +40404040404040404040404040404040404040404040404040404040404040404040404010101010 +10101010101010101010101010101010101010101010101010101010101010101010242C54595959 +59595959595940404040141010101010101010101010101010101010101010101010101010104040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040FFFFFF141010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101014FFFFFF40404040404040404040404040404040404040404040404040404040 +40404040404040404040404014101010101010101010101010101010101010101010101010101010 +101010101010101010101428505D5959595959595940404040401410101010101010101010101010 +10101010101010101010101010404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040FFFFFF1010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010FFFFFF404040404040404040404040 +4040404040404040404040404040404040404040404040404040403C141010101010101010101010 +101010101010101010101010101010101010101010101010101010242C5959595959595959404040 +40401410101010101010101010101010101010101010101010101010144040404040404040404040 +404040404040404040404040404040404040404040404040404040404040404040404040FFFFFF10 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10FFFFFF404040404040404040404040404040404040404040404040404040404040404040404040 +40404040401410101010101010101010101010101010101010101010101010101010101010101010 +10101014145459595959594040404040404014101010101010101010101010101010101010101010 +10101010404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040FFFFFF10101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101014FFFFFF4040404040404040404040404040404040404040 +40404040404040404040404040404040404040403C14101010101010101010101010101010101010 +10101010101010101010101010101010101010101040405959404040404040404040101010101010 +10101010101010101010101010101010101010144040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040FFFFFF101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010101010FFFFFFFF404040 +404040404040404040404040404040404040404040404040404040404040404040404040403C1410 +10101010101010101010101010101010101010101010101010101010101010101010101010404040 +40404040404040404040101010101010101010101010101010101010101010101010144040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040FFFFFFFF101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010FAFFFFFF404040404040404040404040404040404040404040404040404040 +404040404040404040404040403C1810101010101010101010101010101010101010101010101010 +10101010101010101010101010404040404040404040404040401010101010101010101010101010 +10101010101010101010104040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040FFFFFFFF1010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101014FFFFFF4040404040404040404040 +4040404040404040404040404040404040404040404040404040404040403C141010101010101010 +10101010101010101010101010101010101010101010101010101010104040404040404040404040 +40401010101010101010101010101010101010101010101010104040404040404040404040404040 +4040404040404040404040404040404040404040404040404040404040404040404040FFFFFF1410 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010FFFFFF4040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040141010101010101010101010101010101010101010101010101010101010101010 +10101010104040404040404040404040404010101010101010101010101010101010101010101010 +10104040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040FFFFFF1010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010FFFFFF40404040404040404040404040404040404040 +40404040404040404040404040404040404040404040403C14101010101010101010101010101010 +10101010101010101010101010101010101010101040404040404040404040404040101010101010 +10101010101010101010101010101010104040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040404040FFFFFF10101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101014FFFFFF404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +14101010101010101010101010101010101010101010101010101010101010101010101010404040 +40404040404040404040101010101010101010101010101010101010101010104040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040FFFFFF10101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010FFFFFF404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040401010101010101010101010101010101010101010101010 +10101010101010101010101010404040404040404040404040401010101010101010101010101010 +10101010101010144040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040FFFFFF101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010FFFFFFFF40404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404014101010101010 +10101010101010101010101010101010101010101010101010101010144040404040404040404040 +40401010101010101010101010101010101010101010144040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040FFFFFFFF1010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010FFFFFFFA40404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040101010101010101010101010101010101010101010101010101010101010 +10101010104040404040404040404040404010101010101010101010101010101010101010144040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040FFFFFFFF1010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010FFFFFF404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040401410101010101010101010101010 +10101010101010101010101010101010101010101040404040404040404040404040101010101010 +10101010101010101010101010144040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040404040404040FFFFFF1010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101010101010101010FFFFFF4040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404014101010101010101010101010101010101010101010101010101010101010101014404040 +40404040404040404040401010101010101010101010101010101010144040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040FFFFFF1010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010FFFFFF4040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040141010101010101010101010101010101010101010 +10101010101010101010101010404040404040404040404040404010101010101010101010101010 +10101010404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040FFFFFF10101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010FFFFFF40404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040403C14101010 +10101010101010101010101010101010101010101010101010101010144040404040404040404040 +40404010101010101010101010101010101010404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040FFFFFF101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101014FFFFFFFF404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040141010101010101010101010101010101010101010101010101010 +10101010104040404040404040404040404040141010101010101010101010101010404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040FFFFFFFF101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101014FFFFFF4040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040401414101010101010101010 +10101010101010101010101010101010101010101040404040404040404040404040404014101010 +10101010101010101040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040FFFFFF141010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010101010101014FFFFFF40 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040403C14101010101010101010101010101010101010101010101010101010101010404040 +40404040404040404040404014101010101010101010101040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40FFFFFF101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101014FFFFFF40404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040401410101010101010101010101010101010 +10101010101010101010101010404040404040404040404040404040401410101010101010101440 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040FFFFFF1010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101014FAFFFFFA4040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404014 +10101010101010101010101010101010101010101010101010101014404040404040404040404040 +40404040403C14101010101014104040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040404040404040404040404040FFFFFFFF10101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101014FFFFFF4040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040141010101010101010101010101010101010101010101010 +10101010404040404040404040404040404040404040404010101040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040FFFFFF1410101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101014FFFFFF40404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404010101010101010 +10101010101010101010101010101010101010104040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040FFFFFF10101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010FFFFFA +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040141010101010101010101010101010101010101010101010101040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +FFFFFF10101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101014FFFFFFFF4040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040401414101010101010101010101010 +10101010101010101010104040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040FFFFFFFF101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101014FFFFFF40404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404014101010101010101010101010101010101010101010101040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040FFFFFF101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101014FFFFFA40404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040401410101010101010101010101010101010101010 +10101040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040FFFFFF101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101014140C14FFFFFFFA4040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040141010 +10101010101010101010101010101010101040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040FAFFFFFF1010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010101010101014100C14FF +FFFF4040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040401410101010101010101010101010101010101010404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040404040404040404040404040404040404040FFFF +FF101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101014141010FFFFFF40404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040101010101010101010 +10101010101010101040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040FFFFFF1010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101014101010FAFFFF404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404010101010101010101010101010101040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040404040404040FFFFFF10101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010FFFFFF4040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040401010101010101010101010101014 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040FFFFFF1010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101014FFFFFF40404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040141010101010101010104040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040FFFFFF10101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +FFFFFF40404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040141010101010104040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040FFFFFF +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101414FFFFFA4040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040FFFFFF14101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010101010FFFFFF40404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040FFFFFF101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101014FFFFFFFA404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040FFFFFFFF101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101410101010 +1010101010101010101010101010101010101010101010141414FFFFFA4040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040FFFFFF101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1414FFFFFF4040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040404040404040404040404040404040FFFFFF1010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101014FAFFFFFF404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040FFFFFFFF1010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101010101010101014FFFFFA4040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040404040404040FFFFFF1010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010FFFFFFFF40404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40FFFFFFFF1010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010FFFFFF404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040FFFFFF1010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101014FAFFFF444040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040404040404040404040FFFFFA10101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101014FFFFFF40404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040FFFFFF1010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010FFFFFA +44404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040FFFFFF10101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101014101014FFFFFF4040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040404040404040404040404040404040FF +FFFF1010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010FFFFFA44404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404044FFFFFF10101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101014FFFFFA404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040404040404040FFFFFF14101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010FFFFFF4040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040FFFFFF10101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101014 +FFFFFF40404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040FFFFFF14101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010FFFFFF444040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040FFFFFF +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010101014FAFFFF40404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040FFFFFF14101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010FAFFFFFF404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040404040FFFFFFFF101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101014101010101010FFFFFF4040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040FFFFFF14101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1014FAFFFFFF40404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404054 +44404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040FFFFFFFA101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010FAFFFA404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040405959594040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040FFFFFF101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101014101010101010101010101010101014FAFFFFFA44 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040405459595959404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040FFFFFFFA101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101014FAFFFAFA444040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404059595959544040404040404059 +54404040405959595959404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040FFFFFFFA141010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101014FAFFFA4440404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40595959595959595959544040405459595440404059595959594040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +FFFFFF14101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101014FAFFFFFA44404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040595959595959595959595959405959595959544040595959 +59595940404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040FFFFFFFF141010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101014FAFFFFFF4440404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040405959595959595959 +59595959445959595959594040595959595959404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040404040404040FFFFFFFF101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010101010101010101014FF +FFFF4440404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404454595959595959595959404054595959595940405959595959594040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404044FFFFFF10101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101014FFFFFFFA444040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040445959595959595940404040445459 +59544040405959595959404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040FFFFFFFF101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101010101014FFFFFFFA44404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404059595959594040404040404040404040404040 +404040404040404040404040404040404040404040404040404040404040404040404040FFFFFFFF +14101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101014FFFFFFFA404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040405959 +59594040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040FFFFFFFF14101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010FFFFFFFA4440404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040405959594040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040404040FFFFFFFF101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010FFFFFFFA44404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040FFFFFFFF10101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101014FFFFFFFA4440404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040FFFFFFFF10101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010101010101014FAFFFFFA +44404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040404040404040404040404040FFFFFFFA10101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010FAFFFFFA4440404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040FFFFFFFF1010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101014FAFFFFFFFA404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040FFFFFFFFFF10101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101014FAFFFFFF404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040404040404040404040404040404040404040FFFF +FFFF1010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101014F6FFFFFF44404040404040404040404040 +4040404040404040404040404040404040404040404040404040404040403C404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040FFFFFFFA1410101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101014 +F6FFFFFF444040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040FFFFFFFA1010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101014FFFFFAFA44404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040FFFFFFFF141010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010FFFAFAFA4040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040FFFFFFFF101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101014FAFFFFFF40404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040404040404040404040FFFFFFFF101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101414FAFFFFFFFA40404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040FFFFFFFFFF10101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101014FAFFFFFFFA404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040FFFFFFFFFF10101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101014FAFFFFFFFA40404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040FFFFFF +FFFF1410101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010101010101010101014FA +FFFFFFFA404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040FFFFFFFFFF1410101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101014FAFFFFFFFA40404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040404040FFFFFFFFFF1010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101010101010101010101010101014FAFFFFFFFFFA44 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40FFFFFFFFFFFF101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010FFFFFFFAFA404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040FFFFFFFFFF10101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010FFFFFFFFFA44404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040FFFFFFFFFF10101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101014FFFFFFFFFFFF4040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040FFFFFFFFFFFF1010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010141014FFFAFFFFFFFF4040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040FFFFFFFFFFFF101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101014 +FFFAFFFFFFFA40404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040FFFFFFFFFFFF +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101014101010101414FAFFFFFFFAFA40404040404040404040404040404040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +4040404040404040FFFFFFFFFFFF1410101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101010101010101010101018FFFAFFFFFF +FFFA4040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040404040404040404040404040FFFFFFFFFFFFFF1410101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101414FAFFFFFFFFFFFA4040404040404040404040404040404040404040 +404040404040404040404040404040404040404040404040404040404040404040404040FFFFFFFF +FFFFFF10101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101414FAFFFFFFFFFFFA4040 +40404040404040404040404040404040404040404040404040404040404040404040404040404040 +40404040404040404040FFFFFFFFFFFFFF1010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101414FAFFFFFFFFFFFFFFFF4040404040404040404040404040404040404040404040 +4040404040404040404040404040404040404040404040FFFFFFFFFFFFFFFFFA1010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010101410FFFFFFFFFFFFFFFFFFFA40404040 +404040404040404040404040404040404040404040404040404040404040404040404040FFFFFFFF +FFFFFFFFFFFF14101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010141010 +1010101010FFFFFFFFFFFFFFFFFFFF40404040404040404040404040404040404040404040404040 +404040404040404044FAFFFFFFFFFFFFFFFFFF101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010101010101010101010101010101010101010101010FFFFFFFFFFFFFFFFFFFFFFFF4040404040 +404440404040404040404040404040404440404040FFFFFFFFFFFFFFFFFFFFFFFA10101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +1010FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA444040404040404040444044FAFFFFFFFFFAFFFFFFFF +FFFFFFFFFFFF10101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +101010101010101010101010101010101010101414FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF141010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10FAFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFF101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101014FFFFFFFFFFFAFFFFFFFFFFFFFFFFFAFFFFFF +FFFF1414141010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010141010101010101410101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101010101010101010101010101010101010101010101010101010 +10101010101010101010101010101410101010101010101010101010101010101010101010101010 +10101010101010101010101010101010 +gr +gr + +4 w +DO +SO +6 w +0 sg +1463 388 mt 5691 388 L +1463 4616 mt 5691 4616 L +1463 388 mt 1463 4616 L +5691 388 mt 5691 4616 L +1463 4616 mt 5691 4616 L +1463 388 mt 1463 4616 L +1463 388 mt 5691 388 L +1463 4616 mt 5691 4616 L +1463 388 mt 1463 4616 L +5691 388 mt 5691 4616 L + +end %%Color Dict + +eplot +%%EndObject + +epage +end + +showpage + +%%Trailer +%%EOF diff --git a/Notes/Figs/phantom_tv.pdf b/Notes/Figs/phantom_tv.pdf Binary files differnew file mode 100644 index 0000000..1e6c7db --- /dev/null +++ b/Notes/Figs/phantom_tv.pdf diff --git a/Notes/l1magic.bib b/Notes/l1magic.bib new file mode 100644 index 0000000..2ce760e --- /dev/null +++ b/Notes/l1magic.bib @@ -0,0 +1,214 @@ + + +@article{alizadeh03se, + Author = {F. Alizadeh and D. Goldfarb}, + Date-Added = {2005-07-15 15:21:25 -0700}, + Date-Modified = {2005-07-15 15:23:10 -0700}, + Journal = {Math. Program., Ser. B}, + Keywords = {optimization, second-order cone programming}, + Local-Url = {alizadeh03se.pdf}, + Pages = {3--51}, + Title = {Second-order cone programming}, + Volume = {95}, + Year = {2003}} + + +@book{boyd04co, + Author = {S. Boyd and L. Vandenberghe}, + Date-Modified = {2005-02-01 19:48:02 -0800}, + Local-Url = {boyd04co.pdf}, + Publisher = {Cambridge University Press}, + Title = {Convex Optimization}, + Year = {2004}} + + +@article{candes04ne, + Author = {E. Cand\`es and T. Tao}, + Date-Modified = {2005-02-01 18:39:06 -0800}, + Journal = {submitted to IEEE Trans.\ Inform.\ Theory}, + Local-Url = {candes04ne.pdf}, + Month = {November}, + Note = {Available on the ArXiV preprint server: {\tt math.CA/0410542}}, + Title = {Near-optimal signal recovery from random projections and universal encoding strategies}, + Year = {2004}} + + +@article{candes04ro, + Author = {E. Cand\`es and J. Romberg and T. Tao}, + Date-Modified = {2005-02-01 18:38:11 -0800}, + Journal = {Submitted to IEEE Trans.\ Inform.\ Theory}, + Local-Url = {candes04ro.pdf}, + Month = {June}, + Note = {Available on theArXiV preprint server: {\tt math.GM/0409186}}, + Title = {Robust uncertainty principles: {E}xact signal reconstruction from highly incomplete frequency information}, + Year = {2004}} + + +@misc{candes05da, + Author = {E. Cand\`es and T. Tao}, + Date-Added = {2005-06-09 15:50:04 -0700}, + Date-Modified = {2005-06-09 15:51:39 -0700}, + Howpublished = {Manuscript}, + Keywords = {l1 minimization}, + Local-Url = {candes05da.pdf}, + Month = {May}, + Title = {The {D}antzig selector: statistical estimation when $p$ is much smaller than $n$}, + Year = {2005}} + + +@article{candes05de, + Author = {E. J. Cand\`es and T. Tao}, + Date-Modified = {2005-11-10 18:35:41 -0800}, + Journal = {To appear in IEEE Trans. Inform. Theory}, + Keywords = {l1 minimization, channel coding, sparse approximation}, + Local-Url = {candes04de.pdf}, + Month = {December}, + Title = {Decoding by Linear Programming}, + Year = {2005}} + + +@article{candes05qu, + Author = {E. Cand\`es and J. Romberg}, + Date-Modified = {2005-07-25 16:02:31 -0700}, + Journal = {To appear in Foundations of Comput. Math.}, + Local-Url = {candes05qu.pdf}, + Title = {Quantitative robust uncertainty principles and optimally sparse decompositions}, + Year = {2005}} + + +@article{candes05st, + Author = {E. Cand\`es and J. Romberg and T. Tao}, + Date-Added = {2005-03-09 15:46:42 -0800}, + Date-Modified = {2005-07-06 11:37:57 -0700}, + Journal = {Submitted to Communications on Pure and Applied Mathematics}, + Keywords = {basis pursuit, exact recovery, sparse approximation}, + Local-Url = {StableRecovery_submittedJune18.pdf}, + Month = {March}, + Title = {Stable signal recovery from incomplete and inaccurate measurements}, + Year = {2005}} + +@article{chan99no, + Author = {T. Chan and G. Golub and P. Mulet}, + Date-Modified = {2005-07-25 11:01:52 -0700}, + Journal = {SIAM J. Sci. Comput.}, + Keywords = {total variation, SOCP}, + Local-Url = {chan99no.pdf}, + Pages = {1964--1977}, + Title = {A nonlinear primal-dual method for total variation-based image restoration}, + Volume = {20}, + Year = {1999}} + + +@article{chen99at, + Author = {S. S. Chen and D. L. Donoho and M. A. Saunders}, + Date-Modified = {2005-02-01 19:31:45 -0800}, + Journal = {SIAM J. Sci. Comput.}, + Local-Url = {chen99at.pdf}, + Pages = {33--61}, + Title = {Atomic decomposition by basis pursuit}, + Volume = {20}, + Year = {1999}} + + +@techreport{goldfarb04se, + Author = {D. Goldfarb and W. Yin}, + Date-Added = {2005-04-28 23:28:23 -0700}, + Date-Modified = {2005-04-28 23:30:01 -0700}, + Institution = {Columbia University}, + Keywords = {total variation, socp}, + Local-Url = {goldfarb04se.pdf}, + Title = {Second-order cone programming methods for total variation-based image restoration}, + Year = {2004}} + + +@article{hintermueller05in, + Author = {H. Hinterm\"uller and G. Stadler}, + Date-Added = {2005-11-01 15:55:09 -0800}, + Date-Modified = {2005-11-01 15:57:35 -0800}, + Journal = {To appear in SIAM J. Sci. Comput.}, + Keywords = {total variation}, + Local-Url = {hintermueller05in.pdf}, + Title = {An infeasible primal-dual algorithm for {TV}-based inf-convolution-type image restoration}, + Year = {2005}} + + +@article{lobo98ap, + Author = {M. Lobo and L. Vanderberghe and S. Boyd and H. Lebret}, + Date-Added = {2005-10-27 13:24:01 -0700}, + Date-Modified = {2005-10-27 13:26:03 -0700}, + Journal = {Linear Algebra and its Applications}, + Local-Url = {lobo98ap.pdf}, + Pages = {193--228}, + Title = {Applications of second-order cone programming}, + Volume = {284}, + Year = {1998}} + + +@book{nesterov94in, + Address = {Philadelphia}, + Author = {Y. E. Nesterov and A. S. Nemirovski}, + Publisher = {SIAM Publications}, + Title = {Interior Point Polynomial Methods in Convex Programming}, + Year = {1994}} + +@book{nocedal99nu, + Address = {New York}, + Author = {J. Nocedal and S. J. Wright}, + Publisher = {Springer}, + Title = {Numerical Optimization}, + Year = {1999}} + + +@article{paige75so, + Author = {C. C. Paige and M. Saunders}, + Date-Added = {2005-11-09 15:39:31 -0800}, + Date-Modified = {2005-11-09 15:41:44 -0800}, + Journal = {SIAM J. Numer. Anal.}, + Keywords = {symmlq, linear systems}, + Local-Url = {paige75so.pdf}, + Month = {September}, + Number = {4}, + Title = {Solution of sparse indefinite systems of linear equations}, + Volume = {12}, + Year = {1975}} + + +@book{renegar01ma, + Author = {J. Renegar}, + Date-Added = {2005-11-10 13:38:49 -0800}, + Date-Modified = {2005-11-10 13:41:09 -0800}, + Keywords = {optimization, interior point methods}, + Publisher = {SIAM}, + Series = {MPS-SIAM Series on Optimization}, + Title = {A mathematical view of interior-point methods in convex optimization}, + Year = {2001}} + + +@article{rudin92no, + Author = {L. I. Rudin and S. Osher and E. Fatemi}, + Journal = {Physica D}, + Pages = {259--68}, + Title = {Nonlinear total variation noise removal algorithm}, + Volume = {60}, + Year = {1992}} + + +@misc{shewchuk94in, + Author = {J. R. Shewchuk}, + Date-Added = {2005-05-02 15:38:06 -0700}, + Date-Modified = {2005-07-15 15:55:22 -0700}, + Howpublished = {Manuscript}, + Keywords = {conjugate gradients}, + Local-Url = {shewchuk94in.pdf}, + Month = {August}, + Title = {An introduction to the conjugate gradient method without the agonizing pain}, + Url = {www.cs.cmu.edu/~quake-papers/painless-conjugate-gradient.pdf}, + Year = {1994}} + + +@book{wright97pr, + Author = {S. J. Wright}, + Publisher = {SIAM Publications}, + Title = {Primal-Dual Interior-Point Methods}, + Year = {1997}} + diff --git a/Notes/l1magic_notes.pdf b/Notes/l1magic_notes.pdf Binary files differnew file mode 100644 index 0000000..b4f4ed7 --- /dev/null +++ b/Notes/l1magic_notes.pdf diff --git a/Notes/l1magic_notes.tex b/Notes/l1magic_notes.tex new file mode 100644 index 0000000..cb38b95 --- /dev/null +++ b/Notes/l1magic_notes.tex @@ -0,0 +1,1124 @@ +\documentclass{article} + +\usepackage{amsmath,amssymb,cite,graphicx,array} + +\newcommand{\bpm}{\left(\begin{matrix}} +\newcommand{\epm}{\end{matrix}\right)} +\newcommand{\grad}{\nabla} +\newcommand{\dx}{\Delta x} +\newcommand{\du}{\Delta u} +\newcommand{\dt}{\Delta t} +\newcommand{\dv}{\Delta v} +\newcommand{\dz}{\Delta z} +\newcommand{\dlam}{\Delta\lambda} +\newcommand{\dnu}{\Delta\nu} +\newcommand{\packname}{{\sc $\ell_1$-magic}\ } + +\newcommand{\R}{\mathbb{R}} +\newcommand{\<}{\langle} +\renewcommand{\>}{\rangle} + +\newcommand{\diag}{\operatorname{diag}} +\newcommand{\vzero}{\mathbf{0}} +\newcommand{\vone}{\mathbf{1}} + +% formatting +\parindent = 0 pt +\parskip = 8 pt +\addtolength{\textwidth}{1in} +\addtolength{\oddsidemargin}{-0.5in} +\addtolength{\textheight}{1.6in} +\addtolength{\topmargin}{-0.8in} + +%------------------------------------------------------------------------------- + +\title{\packname: Recovery of Sparse Signals\\ via Convex Programming} + +\author{Emmanuel Cand\`es and Justin Romberg, Caltech} + +\date{October 2005} + +\begin{document} + +\maketitle + +%------------------------------------------------------------------------------- +\section{Seven problems} + +A recent series of papers +\cite{candes04ro,candes04ne,candes05qu,candes05st,candes05da,candes05de} develops a theory of signal recovery from highly incomplete information. The central results state that a sparse vector $x_0\in\R^N$ can be recovered from a small number of linear measurements $b=Ax_0\in\R^K,~K\ll N$ (or $b=Ax_0+e$ when there is measurement noise) by solving a convex program. + +As a companion to these papers, this package includes MATLAB code that implements this recovery procedure in the seven contexts described below. The code is not meant to be cutting-edge, rather it is a proof-of-concept showing that these recovery procedures are computationally tractable, even for large scale problems where the number of data points is in the millions. + +The problems fall into two classes: those which can be recast as linear programs (LPs), and those which can be recast as second-order cone programs (SOCPs). The LPs are solved using a generic path-following primal-dual method. The SOCPs are solved with a generic log-barrier algorithm. The implementations follow Chapter 11 of +\cite{boyd04co}. + +For maximum computational efficiency, the solvers for each of the seven problems are implemented separately. They all have the same basic structure, however, with the computational bottleneck being the calculation of the Newton step (this is discussed in detail below). The code can be used in either ``small scale'' mode, where the system is constructed explicitly and solved exactly, or in ``large scale'' mode, where an iterative matrix-free algorithm such as conjugate gradients (CG) is used to approximately solve the system. + +Our seven problems of interest are: +\begin{itemize} +% +\item {\bf Min-$\ell_1$ with equality constraints.} The program +\[ +(P_1) \quad \min~\|x\|_1\quad\text{subject~to}\quad Ax=b, +\] +also known as {\em basis pursuit}, finds the vector with smallest {\em $\ell_1$ norm} +\[ +\|x\|_1 ~:=~ \sum_i |x_i| +\] +that explains the observations $b$. +As the results in \cite{candes04ro,candes04ne} show, if a sufficiently sparse $x_0$ exists such that $Ax_0=b$, +then $(P_1)$ will find it. When $x,A,b$ have real-valued entries, $(P_1)$ can be recast as an LP (this is discussed in detail in \cite{chen99at}). +% +\item {\bf Minimum $\ell_1$ error approximation.} Let $A$ be a $M\times N$ matrix with full rank. Given $y\in\R^M$, the program +\[ +(P_A) \quad \min_x~\|y-Ax\|_1 +\] +finds the vector $x\in\R^N$ such that the {\em error} $y-Ax$ has minimum +$\ell_1$ norm (i.e. we are asking that the difference between $Ax$ and $y$ be sparse). +This program arises in the context of channel coding \cite{candes05de}. + +Suppose we have a channel code that produces a codeword $c=Ax$ for a message $x$. The message travels over the channel, and has an unknown number of its entries corrupted. The decoder observes $y = c + e$, where $e$ is the corruption. +If $e$ is sparse enough, then the decoder can use $(P_A)$ to recover $x$ exactly. Again, $(P_A)$ can be recast as an LP. +% +\item {\bf Min-$\ell_1$ with quadratic constraints.} This program finds the +vector with minimum $\ell_1$ norm that comes close to explaining the observations: +\[ +(P_2) \quad \min~\|x\|_1\quad\text{subject~to}\quad \|Ax-b\|_2\leq \epsilon, +\] +where $\epsilon$ is a user specified parameter. As shown in \cite{candes05st}, if a sufficiently sparse $x_0$ exists such that $b = Ax_0 + e$, for some small error term $\|e\|_2\leq\epsilon$, then the solution $x^\star_2$ to $(P_2)$ will be close to $x_0$. That is, $\|x^\star_2-x_0\|_2\leq C\cdot\epsilon$, where $C$ is a small constant. $(P_2)$ can be recast as a SOCP. +% +\item {\bf Min-$\ell_1$ with bounded residual correlation.} Also referred to as the {\em Dantzig Selector}, +the program +\[ +(P_D) \quad \min~\|x\|_1\quad\text{subject~to}\quad \|A^*(Ax-b)\|_\infty\leq\gamma, +\] +where $\gamma$ is a user specified parameter, +relaxes the equality constraints of $(P_1)$ in a different way. $(P_D)$ requires that the residual $Ax-b$ +of a candidate vector $x$ not be too correlated with any of the columns of $A$ (the product $A^*(Ax-b)$ measures each of these correlations). If $b = Ax_0 + e$, where $e_i\sim \mathcal{N}(0,\sigma^2)$, then the solution $x^\star_D$ to $(P_D)$ has near-optimal minimax risk: +\[ +E\|x^\star_D-x_0\|^2_2 \leq C (\log N)\cdot\sum_i \min(x_0(i)^2, \sigma^2), +\] +(see \cite{candes05da} for details). For real-valued $x,A,b$, $(P_D)$ can again be recast as an LP; in the complex case, there is an equivalent SOCP. +% +\end{itemize} +It is also true that when $x,A,b$ are complex, the programs $(P_1),(P_A),(P_D)$ can be written as SOCPs, but we will not pursue this here. + +If the underlying signal is a 2D image, an alternate recovery model is that the +{\em gradient} is sparse \cite{rudin92no}. +Let $x_{ij}$ denote the pixel in the $i$th row and $j$ column of an $n\times n$ image $x$, and +define the operators +\[ +D_{h;ij}x = \begin{cases} x_{i+1,j}-x_{ij} & i < n\\ +0 & i = n \end{cases} +\qquad +D_{v;ij}x = \begin{cases} x_{i,j+1}-x_{ij} & j < n\\ +0 & j = n \end{cases}, +\] +and +\begin{equation} +\label{eq:Dij} +D_{ij}x = \left(\begin{array}{c} D_{h;ij}x \\ D_{v;ij}x \end{array}\right). +\end{equation} +The $2$-vector $D_{ij}x$ can be interpreted as a kind of discrete gradient of the digital image $x$. +The {\em total variation} of $x$ is simply the sum of the magnitudes of this discrete gradient at every point: +\[ +\operatorname{TV}(x) := \sum_{ij} \sqrt{(D_{h;ij}x)^2 + (D_{v;ij}x)^2} = +\sum_{ij} \|D_{ij}x\|_2. +\] + +With these definitions, we have three programs for image recovery, +each of which can be recast as a SOCP: +\begin{itemize} +% +\item {\bf Min-TV with equality constraints.} +\[ +(TV_1) \quad \min~\operatorname{TV}(x) \quad\text{subject~to}\quad Ax=b +\] +If there exists a piecewise constant $x_0$ with sufficiently few edges (i.e.\ $D_{ij}x_0$ is nonzero for only a small number of indices $ij$), then $(TV_1)$ will recover $x_0$ exactly --- see \cite{candes04ro}. +% +\item {\bf Min-TV with quadratic constraints.} +\[ +(TV_2) \quad \min~\operatorname{TV}(x) \quad\text{subject~to}\quad \|Ax-b\|_2\leq\epsilon +\] +Examples of recovering images from noisy observations using $(TV_2)$ were presented in \cite{candes05st}. Note that if $A$ is the identity matrix, $(TV_2)$ reduces to the standard Rudin-Osher-Fatemi image restoration problem \cite{rudin92no}. See also +\cite{chan99no,goldfarb04se,hintermueller05in,lobo98ap} for SOCP solvers specifically designed for the total-variational functional. + +% +\item {\bf Dantzig TV.} +\[ +(TV_D) \quad \min~\operatorname{TV}(x) \quad\text{subject~to}\quad \|A^*(Ax-b)\|_\infty\leq\gamma +\] +This program was used in one of the numerical experiments in \cite{candes05da}. +% +\end{itemize} + +In the next section, we describe how to solve linear and second-order cone programs using modern interior point methods. + + +%------------------------------------------------------------------------------- +\section{Interior point methods} + +Advances in interior point methods for convex optimization over the past 15 years, led by the seminal work \cite{nesterov94in}, have made large-scale solvers for the seven problems above feasible. Below we overview the generic LP and SOCP solvers used in the \packname package to solve these problems. + +%------------------------------------------------------------------------------- +\subsection{A primal-dual algorithm for linear programming} +\label{sec:primaldual} + +In Chapter 11 of \cite{boyd04co}, Boyd and Vandenberghe outline a relatively simple primal-dual +algorithm for linear programming which we have followed very closely for the implementation of +$(P_1)$,$(P_A)$, and $(P_D)$. For the sake of completeness, and to set up the notation, we briefly review their algorithm here. + +The standard-form linear program is +\begin{align*} +\min_{z}~ \<c_0,z\> \quad\text{subject~to}\quad + A_0 z & = b, \\[-2mm] + f_i(z) &\leq 0, +\end{align*} +where the search vector $z\in\R^N$, $b\in\R^K$, $A_0$ is a $K\times N$ matrix, and each of the $f_i,~i=1,\ldots,m$ is a linear functional: +\[ +f_i(z) = \<c_i,z\> + d_i, +\] +for some $c_i\in\R^N$, $d_i\in\R$. At the optimal point $z^\star$, there will exist dual vectors $\nu^\star\in\R^K,\lambda^\star\in\R^m,\lambda^\star\geq 0$ such that the Karush-Kuhn-Tucker conditions are satisfied: +\begin{align*} +(KKT)\quad\quad +c_0 + A_0^T\nu^\star + \sum_i \lambda^\star_i c_i & = \mathbf{0}, \\ +\lambda^\star_i f_i(z^\star) & = 0,~~i=1,\ldots,m, \\ +A_0 z^\star & = b, \\ +f_i(z^\star) & \leq 0, ~~i=1,\ldots,m.\\ +\end{align*} +In a nutshell, the primal dual algorithm finds the optimal $z^\star$ (along with optimal dual vectors $\nu^\star$ and $\lambda^\star$) by solving this system of nonlinear equations. The solution procedure is the classical Newton method: at an {\em interior point} $(z^k, \nu^k, \lambda^k)$ (by which we mean $f_i(z^k) < 0$, $\lambda^k > 0$), the system is linearized and solved. +However, the step to new point $(z^{k+1}, \nu^{k+1}, \lambda^{k+1})$ must be modified so that we remain in the interior. + +In practice, we relax the {\em complementary slackness} condition $\lambda_i f_i = 0$ to +\begin{equation} +\label{eq:relaxedcs} +\lambda^k_i f_i(z^k) = -1/\tau^k, +\end{equation} +where we judiciously increase the parameter $\tau^k$ as we progress through the Newton iterations. This biases the solution of the linearized equations towards the interior, allowing a smooth, well-defined ``central path'' from an interior point to the solution on the boundary (see +\cite{nocedal99nu,wright97pr} for an extended discussion). + +The primal, dual, and central residuals quantify how close a point $(z,\nu,\lambda)$ is to satisfying $(KKT)$ with \eqref{eq:relaxedcs} in place of the slackness condition: +\begin{eqnarray*} +r_{\mathrm{dual}} & = & c_0 + A_0^T\nu + \sum_i \lambda_i c_i \\ +r_{\mathrm{cent}} & = & -\Lambda f - (1/\tau)\mathbf{1} \\ +r_{\mathrm{pri}} & = & A_0 z-b,\\ +\end{eqnarray*} +where $\Lambda$ is a diagonal matrix with $(\Lambda)_{ii} = \lambda_i$, and +$f = \bpm f_1(z) & \ldots & f_m(z) \epm^T$. + +From a point $(z,\nu,\lambda)$, we want to find a step $(\dz,\dnu,\dlam)$ such that +\begin{equation} +\label{eq:res0} +r_\tau(z+\dz,\nu+\dnu,\lambda+\dlam) = 0. +\end{equation} +Linearizing \eqref{eq:res0} with the Taylor expansion around $(z,\nu,\lambda)$, +\[ +r_\tau(z+\dz,\nu+\dnu,\lambda+\dlam) \approx +r_\tau(z,\nu,\lambda) + J_{r_\tau}(z,\nu\lambda) +\bpm \dz \\ \dnu \\ \dlam \epm, +\] +where $J_{r_\tau}(z,\nu\lambda)$ is the Jacobian of $r_\tau$, we have the system +\[ +\bpm \mathbf{0} & A_0^T & C^T \\ +-\Lambda C & \mathbf{0} & -F \\ +A_0 & \mathbf{0} & \mathbf{0} +\epm +\bpm \dz \\ \dv \\ \dlam \epm = +- \bpm +c_0 + A_0^T\nu + \sum_i \lambda_i c_i \\ +-\Lambda f - (1/\tau)\mathbf{1} \\ +A_0 z-b +\epm, +\] +where $m\times N$ matrix $C$ has the $c^T_i$ as rows, and $F$ is diagonal with +$(F)_{ii} = f_i(z)$. +We can eliminate $\dlam$ using: +\begin{equation} +\label{eq:dlambda} +\dlam = -\Lambda F^{-1}C\dz - \lambda - (1/\tau)f^{-1} +\end{equation} +leaving us with the core system +\begin{equation} +\label{eq:pdnewton} +\bpm -C^TF^{-1}\Lambda C & A_0^T \\ A_0 & \mathbf{0} \epm \bpm \dz \\ \dnu \epm = +\bpm -c_0 + (1/\tau)C^Tf^{-1} - A_0^T\nu +\\ b-A_0 z \epm. +\end{equation} + +With the $(\dz,\dnu,\dlam)$ we have a step direction. To choose the step length $0<s\leq 1$, we ask that it satisfy two criteria: +\begin{enumerate} +\item $z+s\dz$ and $\lambda+s\dlam$ are in the interior, i.e.\ $f_i(z+s\dz)<0,~\lambda_i > 0$ for all $i$. +% +\item The norm of the residuals has decreased sufficiently: +\[ +\|r_\tau(z+s\dz,\nu+s\dnu,\lambda+s\dlam)\|_2 \leq (1-\alpha s)\cdot\|r_\tau(z,\nu,\lambda) \|_2, +\] +where $\alpha$ is a user-sprecified parameter (in all of our implementations, we have set $\alpha=0.01$). +\end{enumerate} +Since the $f_i$ are linear functionals, item $1$ is easily addressed. +We choose the maximum step size that just keeps us in the interior. Let +\[ +\mathcal{I}^+_f = \{i : \<c_i,\dz\> > 0\},\quad +\mathcal{I}^-_\lambda \{i : \dlam < 0\}, +\] +and set +\[ +s_{\mathrm{max}} = 0.99\cdot\min\{1,~ +\{-f_i(z)/\<c_i,\dz\>,~i\in\mathcal{I}^+_f\},~ +\{-\lambda_i/\dlam_i,~i\in\mathcal{I}^-_\lambda\}\}. +\] +Then starting with $s=s_{\mathrm{max}}$, we check if item $2$ above is satisfied; if not, we set $s^\prime = \beta\cdot s$ and try again. +We have taken $\beta=1/2$ in all of our implementations. + +When $r_{\mathrm{dual}}$ and $r_{\mathrm{pri}}$ are small, the {\em surrogate duality gap} $\eta = -f^T\lambda$ is an approximation to how close a certain $(z,\nu,\lambda)$ is to being opitmal +(i.e.\ $\<c_0,z\>-\<c_0,z^\star\>\approx\eta$). The primal-dual algorithm repeats the Newton iterations described above until $\eta$ has decreased below a given tolerance. + +Almost all of the computational burden falls on solving \eqref{eq:pdnewton}. When the matrix $-C^TF^{-1}\Lambda C$ is easily invertible (as it is for $(P_1)$), or there are no equality constraints (as in $(P_A),(P_D)$), \eqref{eq:pdnewton} can be reduced to a symmetric positive definite set of equations. + +When $N$ and $K$ are large, forming the matrix and then solving the linear system of equations in \eqref{eq:pdnewton} is infeasible. However, if fast algorithms exist for applying $C,C^T$ and $A_0,A_0^T$, we can use a ``matrix free'' solver such as Conjugate Gradients. CG is iterative, requiring a few hundred applications of +the constraint matrices (roughly speaking) to get an accurate solution. A CG solver (based on the very nice exposition in \cite{shewchuk94in}) is included with the \packname package. + +The implementations of $(P_1),(P_A),(P_D)$ are nearly identical, save for the calculation of the Newton step. In the Appendix, we derive the Newton step for each of these problems using notation mirroring that used in the actual MATLAB code. + +%------------------------------------------------------------------------------- +\subsection{A log-barrier algorithm for SOCPs} +\label{sec:logbarrier} + +Although primal-dual techniques exist for solving second-order cone programs +(see \cite{alizadeh03se,lobo98ap}), their implementation is not quite as straightforward as in the LP case. Instead, we have implemented each of the SOCP recovery problems using a {\em log-barrier method}. The log-barrier method, for which we will again closely follow the generic (but effective) algorithm described in \cite[Chap. 11]{boyd04co}, is conceptually more straightforward than the primal-dual method described above, but at its core is again solving for a series of Newton steps. + +Each of $(P_2),(TV_1),(TV_2),(TV_D)$ can be written in the form +\begin{align} +\nonumber +\min_z~\<c_0,z\> \quad\text{subject~to}\quad A_0z & = b \\ +\label{eq:socp} +f_i(z) &\leq 0,~~i=1,\ldots,m +\end{align} +where each $f_i$ describes either a constraint which is linear +\[ +f_i = \<c_i,z\> + d_i +\] +or second-order conic +\[ +f_i(z) = \frac{1}{2}\left(\|A_i z\|_2^2 - (\<c_i,z\> + d_i)^2\right) +\] +(the $A_i$ are matrices, the $c_i$ are vectors, and the $d_i$ are scalars). + + +The standard log-barrier method transforms \eqref{eq:socp} +into a series of linearly constrained programs: +\begin{equation} +\label{eq:logbarrier} +\min_z ~ \<c_0,z\> + \frac{1}{\tau^k} \sum_{i} +-\log(-f_i(z)) \quad\text{subject~to}\quad A_0 z=b, +\end{equation} +where $\tau^k > \tau^{k-1}$. The inequality constraints have been incorporated into the functional via a penalty function\footnote{The choice of $-\log(-x)$ for the barrier function is not arbitrary, it has a property (termed {\em self-concordance}) that is very important for quick convergence of \eqref{eq:logbarrier} to \eqref{eq:socp} both in theory and in practice (see the very nice exposition in \cite{renegar01ma}).} +which is infinite when the constraint is violated (or even met exactly), and smooth elsewhere. As $\tau^k$ gets large, the solution $z^k$ to \eqref{eq:logbarrier} approaches the solution $z^\star$ to \eqref{eq:socp}: +it can be shown that $\<c_0,z^k\> - \<c_0,z^\star\> < m/\tau^k$, i.e.\ we are within $m/\tau^k$ of the optimal value after iteration $k$ ($m/\tau^k$ is called the {\em duality gap}). +The idea here is that each of the smooth subproblems can be solved to fairly high accuracy with just a few iterations of Newton's method, especially +since we can use the solution $z^k$ as a starting point for subproblem $k+1$. + +At log-barrier iteration $k$, Newton's method (which is again iterative) proceeds by forming a series of quadratic approximations to \eqref{eq:logbarrier}, and minimizing each by solving a system of equations (again, we might need to modify the step length to stay in the interior). The quadratic approximation of the functional +\[ +f_0(z) = \<c_0,z\> + \frac{1}{\tau}\sum_i -\log(-f_i(z)) +\] +in \eqref{eq:logbarrier} around a point $z$ is given by +\[ +f_0(z+\dz) ~\approx~ z + \<g_z,\dz\> + \frac{1}{2}\<H_z \dz,\dz\> ~:=~ q(z+\dz), +\] +where $g_z$ is the gradient +\[ +g_z = c_0 + \frac{1}{\tau}\sum_i \frac{1}{-f_i(z)}\grad f_i(z) +\] +and $H_z$ is the Hessian matrix +\[ +H_z ~=~ \frac{1}{\tau}\sum_i \frac{1}{f_i(z)^2} \grad f_i(z) (\grad f_i(z))^T ~+ ~ +\frac{1}{\tau}\sum_i \frac{1}{-f_i(z)}\grad^2 f_i(z). +\] +Given that $z$ is feasible (that $A_0 z=b$, in particular), the $\dz$ that minimizes $q(z+\dz)$ subject to $A_0 z=b$ is the solution to the set of linear equations +\begin{equation} +\label{eq:lbnewton} +\tau \bpm H_z & A_0^T \\ A_0 & \vzero \epm \bpm \dz \\ v \epm= -\tau g_z. +\end{equation} +(The vector $v$, which can be interpreted as the Lagrange multipliers for the quality constraints in the quadratic minimization problem, is not directly used.) + +In all of the recovery problems below with the exception of $(TV_1)$, there are no equality constraints ($A_0=\vzero$). In these cases, the system \eqref{eq:lbnewton} is symmetric positive definite, and thus can be solved using CG when the problem is ``large scale''. For the $(TV_1)$ problem, we use the SYMMLQ algorithm (which is similar to CG, and works on symmetric but indefinite systems, see\cite{paige75so}). + +With $\dz$ in hand, we have the Newton step direction. The step length $s\leq 1$ is chosen so that +\begin{enumerate} +% +\item $f_i(z+s\dz) < 0$ for all $i=1,\ldots,m$, +% +\item The functional has decreased suffiently: +\[ +f_0(z+s\dz) < f_0(z) + \alpha s\dz \<g_z,\dz\>, +\] +where $\alpha$ is a user-specified parameter (each of the implementations below uses $\alpha=0.01$). This requirement basically states that the decrease must be within a certain percentage of that predicted by the linear model at $z$. +% +\end{enumerate} +As before, we start with $s=1$, and decrease by multiples of $\beta$ until both these conditions are satisfied (all implementations use $\beta = 1/2$). + + +The complete log-barrier implementation for each problem follows the outline: +\begin{enumerate} +\item Inputs: a feasible starting point $z^0$, a tolerance $\eta$, and parameters $\mu$ and an initial $\tau^1$. Set $k=1$. +\item Solve \eqref{eq:logbarrier} via Newton's method (followed by the backtracking line search), using $z^{k-1}$ as an initial point. Call the solution $z^k$. +\item If $m/\tau^k < \eta$, terminate and return $z^k$. +\item Else, set $\tau^{k+1} = \mu\tau^k,~k=k+1$ and go to step 2. +\end{enumerate} +In fact, we can calculate in advance how many iterations the log-barrier algorithm will need: +\[ +\mathrm{barrier~iterations} = \left\lceil \frac{\log m - \log\eta -\log\tau^1}{\log\mu}\right\rceil. +\] +The final issue is the selection of $\tau^1$. Our implementation chooses $\tau^1$ conservatively; it is set so that the duality gap $m/\tau^1$ after the first iteration is equal to $\<c_0,z^0\>$. + +In Appendix, we explicitly derive the equations for the Newton step for each of $(P_2),(TV_1),(TV_2),(TV_D)$, again using notation that mirrors the variable names in the code. + + +%------------------------------------------------------------------------------- +\section{Examples} +\label{sec:examples} + +To illustrate how to use the code, the \packname package includes m-files for solving specific instances of each of the above problems (these end in ``\texttt{\_example.m}'' in the main directory). + +\subsection{$\ell_1$ with equality constraints} + +We will begin by going through \texttt{l1eq\_example.m} in detail. This m-file creates a sparse signal, takes a limited number of measurements of that signal, and recovers the signal exactly by solving $(P_1)$. The first part of the procedure is for the most part self-explainatory: +\begin{verbatim} +% put key subdirectories in path if not already there +path(path, './Optimization'); +path(path, './Data'); + +% load random states for repeatable experiments +load RandomStates +rand('state', rand_state); +randn('state', randn_state); + +% signal length +N = 512; +% number of spikes in the signal +T = 20; +% number of observations to make +K = 120; + +% random +/- 1 signal +x = zeros(N,1); +q = randperm(N); +x(q(1:T)) = sign(randn(T,1)); +\end{verbatim} +We add the 'Optimization' directory (where the interior point solvers reside) and the 'Data' directories to the path. The file \texttt{RandomStates.m} contains two variables: \texttt{rand\_state} and \texttt{randn\_state}, which we use to set the states of the random number generators on the next two lines (we want this to be a ``repeatable experiment''). The next few lines set up the problem: a length $512$ signal that contains $20$ spikes is created by choosing $20$ locations at random and then putting $\pm 1$ at these locations. The original signal is shown in Figure~\ref{fig:l1eqexample}(a). The next few lines: +\begin{verbatim} +% measurement matrix +disp('Creating measurment matrix...'); +A = randn(K,N); +A = orth(A')'; +disp('Done.'); + +% observations +y = A*x; + +% initial guess = min energy +x0 = A'*y; +\end{verbatim} +create a measurement ensemble by first creating a $K\times N$ matrix with iid Gaussian entries, and then orthogonalizing the rows. The measurements \texttt{y} are taken, +and the ``minimum energy'' solution \texttt{x0} is calculated (\texttt{x0}, which is shown in Figure~\ref{fig:l1eqexample} is the vector in $\{x: Ax=y\}$ that is closest to the origin). Finally, we recover the signal with: +\begin{verbatim} +% solve the LP +tic +xp = l1eq_pd(x0, A, [], y, 1e-3); +toc +\end{verbatim} +The function \texttt{l1eq\_pd.m} (found in the 'Optimization' subdirectory) implements the primal-dual algorithm presented in Section~\ref{sec:primaldual}; we are sending it our initial guess \texttt{x0} for the solution, the measurement matrix (the third argument, which is used to specify the transpose of the measurement matrix, is unnecessary here --- and hence left empty --- since we are providing \texttt{A} explicitly), the measurements, and the precision to which we want the problem solved (\texttt{l1eq\_pd} will terminate when the surrogate duality gap is below $10^{-3}$). Running the example file at the MATLAB prompt, we have the following output: +{\tiny +\begin{verbatim} +>> l1eq_example +Creating measurment matrix... +Done. +Iteration = 1, tau = 1.921e+02, Primal = 5.272e+01, PDGap = 5.329e+01, Dual res = 9.898e+00, Primal res = 1.466e-14 + H11p condition number = 1.122e-02 +Iteration = 2, tau = 3.311e+02, Primal = 4.383e+01, PDGap = 3.093e+01, Dual res = 5.009e+00, Primal res = 7.432e-15 + H11p condition number = 2.071e-02 +Iteration = 3, tau = 5.271e+02, Primal = 3.690e+01, PDGap = 1.943e+01, Dual res = 2.862e+00, Primal res = 1.820e-14 + H11p condition number = 2.574e-04 +Iteration = 4, tau = 7.488e+02, Primal = 3.272e+01, PDGap = 1.368e+01, Dual res = 1.902e+00, Primal res = 1.524e-14 + H11p condition number = 8.140e-05 +Iteration = 5, tau = 9.731e+02, Primal = 2.999e+01, PDGap = 1.052e+01, Dual res = 1.409e+00, Primal res = 1.380e-14 + H11p condition number = 5.671e-05 +Iteration = 6, tau = 1.965e+03, Primal = 2.509e+01, PDGap = 5.210e+00, Dual res = 6.020e-01, Primal res = 4.071e-14 + H11p condition number = 2.054e-05 +Iteration = 7, tau = 1.583e+04, Primal = 2.064e+01, PDGap = 6.467e-01, Dual res = 6.020e-03, Primal res = 3.126e-13 + H11p condition number = 1.333e-06 +Iteration = 8, tau = 1.450e+05, Primal = 2.007e+01, PDGap = 7.062e-02, Dual res = 6.020e-05, Primal res = 4.711e-13 + H11p condition number = 1.187e-07 +Iteration = 9, tau = 1.330e+06, Primal = 2.001e+01, PDGap = 7.697e-03, Dual res = 6.020e-07, Primal res = 2.907e-12 + H11p condition number = 3.130e-09 +Iteration = 10, tau = 1.220e+07, Primal = 2.000e+01, PDGap = 8.390e-04, Dual res = 6.020e-09, Primal res = 1.947e-11 + H11p condition number = 3.979e-11 +Elapsed time is 0.141270 seconds. +\end{verbatim} +} +The recovered signal \texttt{xp} is shown in Figure~\ref{fig:l1eqexample}(c). The signal is recovered to fairly high accuracy: +\begin{verbatim} +>> norm(xp-x) + +ans = + + 8.9647e-05 + +\end{verbatim} + +%%% +\begin{figure} +\centerline{ +\begin{tabular}{ccc} +\includegraphics[height=1.5in]{Figs/l1eqexample_signal.pdf} & +\includegraphics[height=1.5in]{Figs/l1eqexample_minl2.pdf}& +\includegraphics[height=1.5in]{Figs/l1eqexample_recovered.pdf} \\ +(a) Original & (b) Minimum energy reconstruction & (c) Recovered +\end{tabular} +} +\caption{\small\sl 1D recovery experiment for $\ell_1$ minimization with equality constraints. (a) Original length 512 signal \texttt{x} consisting of 20 spikes. (b) Minimum energy (linear) reconstruction \texttt{x0}. (c) Minimum $\ell_1$ reconstruction \texttt{xp}.} +\label{fig:l1eqexample} +\end{figure} +%%% + + +\subsection{Phantom reconstruction} + +A large scale example is given in \texttt{tveq\_phantom\_example.m}. This files recreates the phantom reconstruction experiment first published in \cite{candes04ro}. The $256\times 256$ Shepp-Logan phantom, shown in Figure~\ref{fig:phantom}(a), is measured at $K=5481$ locations in the 2D Fourier plane; the sampling pattern is shown in Figure~\ref{fig:phantom}(b). The image is then reconstructed exactly using $(TV_1)$. + +The star-shaped Fourier-domain sampling pattern is created with +\begin{verbatim} +% number of radial lines in the Fourier domain +L = 22; + +% Fourier samples we are given +[M,Mh,mh,mhi] = LineMask(L,n); +OMEGA = mhi; +\end{verbatim} +The auxiliary function \texttt{LineMask.m} (found in the `Measurements' subdirectory) creates the star-shaped pattern consisting of 22 lines through the origin. The vector \texttt{OMEGA} +contains the locations of the frequencies used in the sampling pattern. + +This example differs from the previous one in that the code operates in {\em large-scale} mode. The measurement matrix in this example is $5481\times 65536$, making the system \eqref{eq:lbnewton} far too large to solve (or even store) explicitly. (In fact, the measurment matrix itself would require almost 3 gigabytes of memory if stored in double precision.) Instead of creating the measurement matrix explicitly, we provide {\em function handles} that take a vector $x$, and return $Ax$. As discussed above, the Newton steps are solved for using an implicit algorithm. + +To create the implicit matrix, we use the function handles +\begin{verbatim} +A = @(z) A_fhp(z, OMEGA); +At = @(z) At_fhp(z, OMEGA, n); +\end{verbatim} +The function \texttt{A\_fhp.m} takes a length $N$ vector (we treat $n\times n$ images as $N:=n^2$ vectors), and returns samples on the $K$ frequencies. (Actually, since the underlying image is real, \texttt{A\_fhp.m} return the real and imaginary parts of the 2D FFT on the upper half-plane of the domain shown in Figure~\ref{fig:phantom}(b).) + +To solve $(TV_1)$, we call +\begin{verbatim} +xp = tveq_logbarrier(xbp, A, At, y, 1e-1, 2, 1e-8, 600); +\end{verbatim} +The variable \texttt{xbp} is the initial guess (which is again the minimal energy reconstruction shown in Figure~\ref{fig:phantom}(c)), \texttt{y} are the measurements, and\texttt{1e-1} is the desired precision. The sixth input is the value of $\mu$ (the amount by which to increase $\tau^k$ at each iteration; see Section~\ref{sec:logbarrier}). The last two inputs are parameters for the large-scale solver used to find the Newton step. The solvers are iterative, with each iteration requiring one application of \texttt{A} and one application of \texttt{At}. The seventh and eighth arguments above state that we want the solver to iterate until the solution has precision $10^{-8}$ (that is, it finds a $z$ such that $\|Hz-g\|_2/\|g\|_2 \leq 10^{-8}$), or it has reached 600 iterations. + +The recovered phantom is shown in Figure~\ref{fig:phantom}(d). +We have $\|X_{TV}-X\|_2/\|X\|_2 \approx 8\cdot 10^{-3}$. + + +%%% +\begin{figure} +\centerline{ +\begin{tabular}{cccc} +\includegraphics[height=1.5in]{Figs/phantom_orig} & +\includegraphics[height=1.5in]{Figs/phantom_sampling} & +\includegraphics[height=1.5in]{Figs/phantom_backproj} & +\includegraphics[height=1.5in]{Figs/phantom_tv} \\ +{\small (a) Phantom} & {\small (b) Sampling pattern} & +{\small (c) Min energy} & {\small (d) min-TV reconstruction} +\end{tabular} +} +\caption{\small\sl Phantom recovery experiment.} +\label{fig:phantom} +\end{figure} +%%% + +%------------------------------------------------------------------------------- +\subsection{Optimization routines} + +We include a brief description of each of the main optimization routines (type +\texttt{help <function>} in MATLAB for details). Each of these m-files is found in the \texttt{Optimization} subdirectory. + +\begin{tabular}{|p{1.5 in}m{4 in}|} \hline +% +\texttt{cgsolve} & Solves $Ax=b$, where $A$ is symmetric positive definite, using the Conjugate Gradient method. \\[2mm]\hline +% +\texttt{l1dantzig\_pd} & Solves $(P_D)$ (the Dantzig selector) using a primal-dual algorithm. \\[2mm]\hline +% +\texttt{l1decode\_pd} & Solves the norm approximation problem $(P_A)$ (for decoding via linear programming) using a primal-dual algorithm. \\[2mm]\hline +% +\texttt{l1eq\_pd} & Solves the standard Basis Pursuit problem $(P_1)$ using a primal-dual algorithm. \\[2mm]\hline +% +\texttt{l1qc\_logbarrier} & Barrier (``outer'') iterations for solving quadratically constrained $\ell_1$ minimization $(P_2)$. \\[2mm]\hline +% +\texttt {l1qc\_newton} & Newton (``inner'') iterations for solving quadratically constrained $\ell_1$ minimization $(P_2)$. \\[2mm]\hline +% +\texttt{tvdantzig\_logbarrier} & Barrier iterations for solving the TV Dantzig selector $(TV_D)$. \\[2mm]\hline +% +\texttt{tvdantzig\_newton} & Newton iterations for $(TV_D)$. \\[2mm]\hline +% +\texttt{tveq\_logbarrier} & Barrier iterations for equality constrained TV minimizaiton $(TV_1)$. \\[2mm]\hline +% +\texttt{tveq\_newton} & Newton iterations for $(TV_1)$. \\[2mm]\hline +% +\texttt{tvqc\_logbarrier} & Barrier iterations for quadratically constrained TV minimization $(TV_2)$. \\[2mm]\hline +% +\texttt{tvqc\_newton} & Newton iterations for $(TV_2)$. \\[2mm]\hline +% + +\end{tabular} + +%------------------------------------------------------------------------------- +\section{Error messages} + +Here we briefly discuss each of the error messages that the $\ell_1$-{\sc magic} may produce. + +\begin{itemize} +% +\item \texttt{Matrix ill-conditioned. Returning previous iterate.} +This error can occur when the code is running in {\em small-scale} mode; that is, the matrix $A$ is provided explicitly. The error message is produced when the condition number of the +linear system we need to solve to find the step direction (i.e.\ \eqref{eq:pdnewton} for the linear programs, and \eqref{eq:lbnewton} for the SOCPs) has an estimated condition number of less than $10^{-14}$. + +This error most commonly occurs during the last iterations of the primal-dual or log-barrier algorithms. While it means that the solution is not within the tolerance specified (by the primal-dual gap), in practice it is usually pretty close. +% +\item \texttt{Cannot solve system. Returning previous iterate.} +This error is the large-scale analog to the above. The error message is produced when the residual produced by the conjugate gradients algorithm was above $1/2$; essentially this means that CG has not solved the system in any meaningful way. Again, this error typically occurs in the late stages of the optimization algorithm, and is a symptom of the system being ill-conditioned. +% +\item \texttt{Stuck backtracking, returning last iterate.} +This error occurs when the algorithm, after computing the step direction, cannot find a step size small enough that decreases the objective. It is generally occurs in large-scale mode, and is a symptom of CG not solving for the step direction to sufficient precision (if the system is solved perfectly, a small enough step size will always be found). Again, this will typically occur in the late stages of the optimization algorithm. +% +\item \texttt{Starting point infeasible; using x0 = At*inv(AAt)*y.} +Each of the optimization programs expects an initial guess which is {\em feasible} (obeys the constraints). If the \texttt{x0} provided is not, this message is produced, and the algorithm proceeds using the least-squares starting point $x_0 = A^T(AA^T)^{-1}b$. +% +\end{itemize} + +%------------------------------------------------------------------------------- + +\newpage +\section*{Appendix} +\appendix + +%------------------------------------------------------------------------------- +\section{$\ell_1$ minimization with equality constraints} + +When $x$, $A$ and $b$ are real, then $(P_1)$ can be recast as the linear program +\begin{align*} +\min_{x,u}~\sum_i u_i \quad\text{subject~to}\quad + x_i - u_i & \leq 0 \\[-4mm] + -x_i - u_i & \leq 0, \\ + Ax & = b +\end{align*} +which can be solved using the standard primal-dual algorithm outlined in Section~\ref{sec:primaldual} +(again, see \cite[Chap.11]{boyd04co} for a full discussion). +Set +\begin{eqnarray*} +f_{u_1;i} & := & x_i - u_i \\ +f_{u_2;i} & := & -x_i - u_i, +\end{eqnarray*} +with $\lambda_{u_1;i},\lambda_{u_2;i}$ the corresponding dual variables, +and let $f_{u_1}$ be the vector $(f_{u_1;1}~~\ldots~~f_{u_1;N})^T$ (and likewise for $f_{u_2},\lambda_{u_1},\lambda_{u_2}$). +Note that +\[ +\grad f_{u_1;i} = \bpm \delta_i \\ -\delta_i \epm, +\quad +\grad f_{u_2;i} = \bpm -\delta_i \\ -\delta_i \epm, +\quad +\grad^2 f_{u_1;i} = 0, +\quad +\grad^2 f_{u_2;i} = 0, +\] +where $\delta_i$ is the standard basis vector for component $i$. +Thus at a point $(x,u; v,\lambda_{u_1},\lambda_{u_2})$, the central and dual +residuals are +\begin{eqnarray*} +r_{\mathrm{cent}} & = & \bpm -\Lambda_{u_1} f_{u_1} \\ -\Lambda_{u_2} f_{u_2} \epm +- (1/\tau)\mathbf{1}, \\ +r_{\mathrm{dual}} & = & \bpm \lambda_{u_1}-\lambda_{u_2} + A^Tv \\ +\mathbf{1} - \lambda_{u_1}-\lambda_{u_2} \epm, +\end{eqnarray*} +and the Newton step +\eqref{eq:pdnewton} is given by: +\[ +\bpm \Sigma_1 & \Sigma_2 & A^T \\ \Sigma_2 & \Sigma_1 & 0 \\ A & 0 & 0 \epm +\bpm \dx \\ \du \\ \dv \epm = +\bpm w_1 \\ w_2 \\ w_3 \epm := +\bpm (-1/\tau)\cdot(-f^{-1}_{u_1} + f^{-1}_{u_2}) - A^Tv \\ +-\mathbf{1} - (1/\tau)\cdot(f^{-1}_{u_1} + f^{-1}_{u_2}) \\ +b - Ax \epm, +\] +with +\[ +\Sigma_1 = \Lambda_{u_1} F^{-1}_{u_1} - \Lambda_{u_2} F^{-1}_{u_2}, \quad +\Sigma_2 = \Lambda_{u_1} F^{-1}_{u_1} + \Lambda_{u_2} F^{-1}_{u_2}, +\] +(The $F_\bullet$, for example, are diagonal matrices with $(F_\bullet)_{ii} = f_{\bullet;i}$, and $f^{-1}_{\bullet;i} = 1/f_{\bullet;i}$.) +Setting +\[ +\Sigma_x = \Sigma_1 - \Sigma_2^2\Sigma_1^{-1}, +\] +we can eliminate +\begin{eqnarray*} +\dx & = & \Sigma_x^{-1}(w_1 - \Sigma_2\Sigma_1^{-1}w_2 - A^T\dv)\\ +\du & = & \Sigma_1^{-1}(w_2 - \Sigma_2\dx), +\end{eqnarray*} +and solve +\[ +-A\Sigma_x^{-1}A^T\dv = w_3 - A(\Sigma_x^{-1}w_1 - \Sigma_x^{-1}\Sigma_2\Sigma_1^{-1}w_2). +\] +This is a $K\times K$ positive definite system of equations, and can be solved using conjugate gradients. + +Given $\dx,\du,\dv$, we calculate the change in the inequality dual variables as in \eqref{eq:dlambda}: +\begin{eqnarray*} +\dlam_{u_1} & = & \Lambda_{u_1} F^{-1}_{u_1}(-\dx + \du) - \lambda_{u_1} - (1/\tau)f^{-1}_{u_1} \\ +\dlam_{u_2} & = & \Lambda_{u_2} F^{-1}_{u_2}(\dx+\du) - \lambda_{u_2} - (1/\tau)f^{-1}_{u_2}. +\end{eqnarray*} + +%The line search proceeds exactly as described in Section~\ref{sec:primaldual}. + +%------------------------------------------------------------------------------- +\section{$\ell_1$ norm approximation} +\label{sec:l1approx} + +The $\ell_1$ norm approximation problem $(P_A)$ can also be recast as a linear program: +\begin{align*} +\min_{x,u}~\sum_{m=1}^M u_m \quad\text{subject~to}\quad + Ax - u -y & \leq 0 \\[-4mm] + -Ax - u + y & \leq 0, +\end{align*} +(recall that unlike the other 6 problems, here the $M\times N$ matrix $A$ has more rows than columns). +For the primal-dual algorithm, we define +\[ +f_{u_1} = A x - u - y,\quad +f_{u_2} = -A x - u + y. +\] +Given a vector of weights $\sigma\in\R^M$, +\[ +\sum_m \sigma_m\grad f_{u_1;m} = +\bpm A^T\sigma \\ -\sigma \epm, \quad +\sum_m \sigma_m\grad f_{u_2;m} = +\bpm -A^T\sigma \\ -\sigma \epm, +\] +\[ +\sum_m \sigma_m\grad f_{u_1;m}\grad f_{u_1;m}^T = +\bpm A^T\Sigma A & -A^T\Sigma \\ -\Sigma A & \Sigma \epm,\quad +\sum_m \sigma_m\grad f_{u_2;m}\grad f_{u_2;m}^T = +\bpm A^T\Sigma A & A^T\Sigma \\ \Sigma A & \Sigma \epm. +\] +At a point $(x,u;\lambda_{u_1},\lambda_{u_2})$, the dual residual is +\[ +r_{\mathrm{dual}} = +\bpm A^T(\lambda_{u_1}-\lambda_{u_2}) \\ -\lambda_{u_1}-\lambda_{u_2} \epm, +\] +and the Newton step is the solution to +\[ +\bpm A^T\Sigma_{11}A & A^T\Sigma_{12} \\ \Sigma_{12}A & \Sigma_{11}\epm +\bpm \dx \\ \du \epm = +\bpm -(1/\tau)\cdot A^T(-f^{-1}_{u_1} + f^{-1}_{u_2}) \\ +-\mathbf{1} - (1/\tau)\cdot(f^{-1}_{u_1} + f^{-1}_{u_2}) \epm := +\bpm w_1 \\ w_2 \epm +\] +where +\begin{eqnarray*} +\Sigma_{11} & = & -\Lambda_{u_1} F^{-1}_{u_1} - \Lambda_{u_2} F^{-1}_{u_2} \\ +\Sigma_{12} & = & \Lambda_{u_1} F^{-1}_{u_1} - \Lambda_{u_2} F^{-1}_{u_2}. +\end{eqnarray*} +Setting +\[ +\Sigma_x = \Sigma_{11} - \Sigma^2_{12}\Sigma^{-1}_{11}, +\] +we can eliminate $\du = \Sigma_{11}^{-1}(w_2 - \Sigma_{22}A\dx)$, and solve +\[ +A^T\Sigma_x A\dx = w_1 - A^T\Sigma_{22}\Sigma^{-1}_{11}w_2 +\] +for $\dx$. Again, $A^T\Sigma_x A$ is a $N\times N$ symmetric positive definite matrix (it is straightforward to verify that each element on the diagonal of $\Sigma_x$ will be strictly positive), +and so the Conjugate Gradients algorithm can be used for large-scale problems. + +Given $\dx,\du$, the step directions for the inequality dual variables are given by +\begin{eqnarray*} +\dlam_{u_1} & = & +-\Lambda_{u_1} F^{-1}_{u_1} (A\dx-\du) - \lambda_{u_1} - (1/\tau)f^{-1}_{u_1} \\ +\dlam_{u_2} & = & +\Lambda_{u_2} F^{-1}_{u_2}(A\dx+\du) - \lambda_{u_2} - (1/\tau)f^{-1}_{u_2}. +\end{eqnarray*} + +%------------------------------------------------------------------------------- +\section{$\ell_1$ Dantzig selection} +\label{sec:l1dantzig} + +An equivalent linear program to $(P_D)$ in the real case is given by: +\begin{align*} +\min_{x,u}~\sum_i u_i \quad\text{subject~to}\quad + x - u & \leq 0, \\[-4mm] + -x - u & \leq 0, \\ + A^T r - \epsilon & \leq 0, \\ + -A^T r - \epsilon & \leq 0, +\end{align*} +where $r = Ax-b$. Taking +\[ +f_{u_1} = x - u,\quad +f_{u_2} = -x -u,\quad +f_{\epsilon_1} = A^T r - \epsilon,\quad +f_{\epsilon_2} = -A^T r - \epsilon, +\] +the residuals at a point +$(x,u;\lambda_{u_1},\lambda_{u_2},\lambda_{\epsilon_1},\lambda_{\epsilon_2})$, +the dual residual is +\[ +r_{\mathrm{dual}} = +\bpm \lambda_{u_1}-\lambda_{u_2} + A^TA(\lambda_{\epsilon_1} - \lambda_{\epsilon_2}) +\\ \mathbf{1} - \lambda_{u_1}-\lambda_{u_2}\epm, +\] +and the Newton step is the solution to +\[ +\bpm A^TA\Sigma_{a}A^TA + \Sigma_{11} & \Sigma_{12} \\ +\Sigma_{12} & \Sigma_{11}\epm +\bpm \dx \\ \du \epm = +\bpm -(1/\tau)\cdot (A^TA(-f^{-1}_{\epsilon_1} + f^{-1}_{\epsilon_2})) - +f^{-1}_{u_1} + f^{-1}_{u_2} \\ +-\mathbf{1} - (1/\tau)\cdot(f^{-1}_{u_1} + f^{-1}_{u_2}) \epm := +\bpm w_1 \\ w_2 \epm +\] +where +\begin{eqnarray*} +\Sigma_{11} & = & -\Lambda_{u_1}F^{-1}_{u_1} - \Lambda_{u_2}F^{-1}_{u_2} \\ +\Sigma_{12} & = & \Lambda_{u_1}F^{-1}_{u_1} - \Lambda_{u_2}F^{-1}_{u_2} \\ +\Sigma_a & = & -\Lambda_{\epsilon_1}F^{-1}_{\epsilon_1} - \Lambda_{\epsilon_2}F^{-1}_{\epsilon_2}. +\end{eqnarray*} +Again setting +\[ +\Sigma_x = \Sigma_{11} - \Sigma^2_{12}\Sigma^{-1}_{11}, +\] +we can eliminate +\[ +\du = \Sigma^{-1}_{11}(w_2 - \Sigma_{12}\dx), +\] +and solve +\[ +(A^TA\Sigma_a A^TA + \Sigma_x)\dx = w_1 - \Sigma_{12}\Sigma^{-1}_{11}w_2 +\] +for $\dx$. As before, the system is symmetric positive definite, and the CG algorithm can be used to solve it. + +Given $\dx,\du$, the step directions for the inequality dual variables are given by +\begin{eqnarray*} +\dlam_{u_1} & = & -\Lambda_{u_1} F^{-1}_{u_1}(\dx-\du) - \lambda_{u_1} - (1/\tau)f^{-1}_{u_1} \\ +\dlam_{u_2} & = & -\Lambda_{u_2} F^{-1}_{u_2}(-\dx-\du) - \lambda_{u_2} - (1/\tau)f^{-1}_{u_2} \\ +\dlam_{\epsilon_1} & = & -\Lambda_{\epsilon_1} F^{-1}_{\epsilon_1}(A^TA\dx) - +\lambda_{\epsilon_1} - (1/\tau)f^{-1}_{\epsilon_1} \\ +\dlam_{\epsilon_2} & = & -\Lambda_{\epsilon_2} F^{-1}_{\epsilon_2}(-A^TA\dx) - +\lambda_{\epsilon_2} - (1/\tau)f^{-1}_{\epsilon_2}. +\end{eqnarray*} + + + +%------------------------------------------------------------------------------- +\section{$\ell_1$ minimization with quadratic constraints} +\label{sec:l1qc} + +The quadractically constrained $\ell_1$ minimization problem $(P_2)$ can be recast as the second-order cone program +\begin{align*} +\min_{x,u}~\sum_i u_i \quad\text{subject~to}\quad + x - u & \leq 0, \\[-4mm] + -x - u & \leq 0, \\ + \frac{1}{2}\left(\|Ax-b\|^2_2 - \epsilon^2\right) & \leq 0. +\end{align*} +Taking +\[ +f_{u_1} = x - u,\quad +f_{u_2} = -x -u,\quad +f_\epsilon = \frac{1}{2}\left(\|Ax-b\|^2_2 - \epsilon^2\right), +\] +we can write the Newton step (as in \eqref{eq:lbnewton}) at a point $(x,u)$ for a given $\tau$ as +\[ +\bpm \Sigma_{11} - f_\epsilon^{-1}A^TA + f_\epsilon^{-2}A^Trr^TA & \Sigma_{12} \\ +\Sigma_{12} & \Sigma_{11} \epm +\bpm \dx \\ \du \epm = +\bpm +f_{u_1}^{-1} - f_{u_2}^{-1} + f_\epsilon^{-1}A^Tr \\ +-\tau\mathbf{1} - f_{u_1}^{-1} - f_{u_2}^{-1} +\epm := +\bpm w_1 \\ w_2 \epm +\] +where $r = Ax-b$, and +\begin{eqnarray*} +\Sigma_{11} & = & F_{u_1}^{-2} + F_{u_2}^{-2} \\ +\Sigma_{12} & = & -F_{u_1}^{-2} + F_{u_2}^{-2}. +\end{eqnarray*} +As before, we set +\[ +\Sigma_x = \Sigma_{11} - \Sigma_{12}^2\Sigma_{11}^{-1} +\] +and eliminate $\du$ +\[ +\du = \Sigma_{11}^{-1}(w_2 - \Sigma_{12}\dx), +\] +leaving us with the reduced system +\[ +(\Sigma_x - f_\epsilon^{-1}A^TA + f_\epsilon^{-2}A^Trr^TA)\dx = +w_1 - \Sigma_{12}\Sigma_{11}^{-1}w_2 +\] +which is symmetric positive definite and can be solved using CG. + +%------------------------------------------------------------------------------- +\section{Total variation minimization with equality constraints} +\label{sec:tveq} + +The equality constrained TV minimization problem +\[ +\min_{x}~\operatorname{TV}(x)\quad\text{subject~to}\quad Ax=b, +\] +can be rewritten as the SOCP +\begin{align*} +\min_{t,x}~\sum_{ij} t_{ij} \quad\text{s.t.}\quad \|D_{ij}x\|_2 & \leq t_{ij} \\[-2mm] + Ax &= b. +\end{align*} +Defining the inequality functions +\begin{equation} +\label{eq:ftij} +f_{t_{ij}} = \frac{1}{2}\left(\|D_{ij}\|_2^2 - t^2_{ij}\right)\quad i,j=1,\ldots,n +\end{equation} +we have +\[ +\grad f_{t_{ij}} = +\left( \begin{array}{c} D^T_{ij}D_{ij} x \\ -t_{ij}\delta_{ij} \end{array}\right) +\] +\[ +\grad f_{t_{ij}} \grad f_{t_{ij}}^T = +\bpm D^T_{ij}D_{ij} xx^TD^T_{ij}D_{ij} & +-t_{ij}D^T_{ij}D_{ij}x\delta_{ij}^T \\ +-t_{ij}\delta_{ij}x^T D^T_{ij}D_{ij} & +t_{ij}^2\delta_{ij}\delta_{ij}^T \\ +\epm,\quad +\grad^2 f_{t_{ij}} = +\bpm D_{ij}^*D_{ij} & \vzero \\ +\vzero & -\delta_{ij}\delta_{ij}^T +\epm, +\] +where $\delta_{ij}$ is the Kronecker vector that is $1$ in entry $ij$ and zero elsewhere. +For future reference: +\[ +\sum_{ij}\sigma_{ij} \grad f_{t_{ij}} = +\bpm D_h^T\Sigma D_h x + D_v^T\Sigma D_v x \\ -\sigma t\epm, +\] +\[ +\sum_{ij} \sigma_{ij} \grad f_{t_{ij}} \grad f_{t_{ij}}^T = +\left(\begin{array}{cc} +B\Sigma B^T & -BT\Sigma \\ -\Sigma TB^T & \Sigma T^2 +\end{array}\right), +\] +\[ +\sum_{ij} \sigma_{ij} \grad^2 f_{t_{ij}} = +\left(\begin{array}{cc} +D_h^T \Sigma D_h + D_v^T \Sigma D_v & \vzero \\ \vzero & -\Sigma +\end{array}\right) +\] +where $\Sigma = \diag(\{\sigma_{ij}\})$, $T = \diag(t)$, $D_h$ has the $D_{h;ij}$ as rows (and likewise for $D_v$), and $B$ is a matrix that depends on $x$: +\[ +B = D_h^T\Sigma_{\partial h} + D_v^T\Sigma_{\partial v}. +\] +with $\Sigma_{\partial h} = \diag(D_h x),~ \Sigma_{\partial v} = \diag(D_v x)$. + + +The Newton system \eqref{eq:lbnewton} for the log-barrier algorithm is then +\[ +\bpm H_{11} & B\Sigma_{12} & A^T \\ +\Sigma_{12}B^T & \Sigma_{22} & \vzero \\ +A & \vzero & \vzero \epm +\bpm \dx \\ \dt \\ \dv \epm ~=~ +\bpm D_h^T F_t^{-1} D_h x + D_v^T F_t^{-1} D_vx \\ +-\tau\mathbf{1} - F_{t}^{-1}t \\ +\vzero \epm ~:= ~ +\bpm w_1 \\ w_2 \\ \vzero \epm, +\] +where +\[ +H_{11} = D_h^T(-F_t^{-1})D_h ~+~ D_v^T(-F_t^{-1})D_v ~+~ B F_t^{-2}B^T. +\] +Eliminating $\dt$ +\begin{eqnarray*} +\dt & = & \Sigma_{22}^{-1}(w_2 - \Sigma_{12}B^T\dx) \\ + & = & \Sigma_{22}^{-1}(w_2 - \Sigma_{12}\Sigma_{\partial h}D_h\dx - \Sigma_{12}\Sigma_{\partial v}D_v\dx), +\end{eqnarray*} +the reduced $(N+K)\times (N+K)$ system is +\begin{equation} +\label{eq:tveqsys} +\bpm H'_{11} & A^T \\ A & \vzero \epm +\bpm \dx \\ \dv \epm = +\bpm w'_1 \\ \vzero \epm +\end{equation} +with +\begin{align*} +H'_{11} = ~& H_{11} - B\Sigma^2_{12}\Sigma_{22}^{-1}B^T \\ += ~& D_h^T(\Sigma_b\Sigma^2_{\partial h}-F_t^{-1})D_h ~+~ +D_v^T(\Sigma_b\Sigma^2_{\partial v}-F_t^{-1})D_v ~+~\\ +~& D_h^T(\Sigma_b\Sigma_{\partial h}\Sigma_{\partial v})D_v ~+~ +D_v^T(\Sigma_b\Sigma_{\partial h}\Sigma_{\partial v})D_h\\ +w'_1 = ~& w_1 - B\Sigma_{12}\Sigma_{22}^{-1}w_2 \\ + = ~& w_1 - (D_h^T\Sigma_{\partial h} + D_v^T\Sigma_{\partial v} )\Sigma_{12}\Sigma_{22}^{-1}w_2 \\ +\Sigma_b = ~& F_t^{-2} - \Sigma_{22}^{-1}\Sigma_{12}^2. +\end{align*} + +The system of equations \eqref{eq:tveqsys} is symmetric, but not positive definite. +Note that $D_h$ and $D_v$ are (very) sparse matrices, and hence can be stored and applied very efficiently. This allows us to again solve the system above using an iterative method such as SYMMLQ \cite{paige75so}. + + + +%------------------------------------------------------------------------------- +\section{Total variation minimization with quadratic constraints} +\label{sec:tvqc} + +We can rewrite $(TV_2)$ as the SOCP +\begin{align*} +\min_{x,t}~\sum_{ij} t_{ij} +\quad\text{subject~to}\quad +& \|D_{ij} x\|_2\leq t_{ij}, ~~ i,j=1,\ldots,n \\[-4mm] +& \|Ax - b\|_2 \leq \epsilon +\end{align*} +where $D_{ij}$ is as in \eqref{eq:Dij}. +% +Taking $f_{t_{ij}}$ as in \eqref{eq:ftij} and +\[ +f_\epsilon = \frac{1}{2}\left( \|Ax-b\|^2_2 - \epsilon^2\right), +\] +with +\[ +\grad f_\epsilon = \bpm A^Tr \\ \vzero \epm,\quad +\grad f_\epsilon \grad f_\epsilon^T = +\bpm A^Trr^TA & \vzero \\ \vzero & \vzero \epm, \quad +\grad^2 f_\epsilon = \bpm A^*A & \vzero \\ +\vzero & \vzero \epm +\] +where $r = Ax-b$. + + + Also, +\[ +\grad^2 f_{t_{ij}} = \left(\begin{array}{cc} D_{ij}^*D_{ij} & \vzero \\ +\vzero & -\delta_{ij}\delta_{ij}^T \end{array}\right) +\quad +\grad^2 f_\epsilon = \left(\begin{array}{cc} A^*A & \vzero \\ +\vzero & \vzero \end{array}\right). +\] + +The Newton system is similar to that in equality constraints case: +\[ +\bpm H_{11} & B\Sigma_{12} \\ +\Sigma_{12}B^T & \Sigma_{22} \epm +\bpm \dx \\ \dt \epm = +\bpm D_h^T F_t^{-1}D_h x + D_v^TF_t^{-1}D_v x + f_\epsilon^{-1}A^Tr \\ +-\tau\mathbf{1} - tf^{-1}_t \epm := +\bpm w_1 \\ w_2 \epm. +\] +where $(tf^{-1}_t)_{ij} = t_{ij}/f_{t_{ij}}$, and +\begin{align*} +H_{11} = ~& D_h^T(-F_t^{-1})D_h ~+~ D_v^T(-F_t^{-1})D_v ~+~ B F_t^{-2}B^T ~- \\ + & f_\epsilon^{-1} A^TA ~+~ f_\epsilon^{-2} A^Trr^TA, \\ +\Sigma_{12} = ~& -TF_t^{-2}, \\ +\Sigma_{22} = ~& F_t^{-1} + F_t^{-2}T^2, +\end{align*} +Again eliminating $\dt$ +\[ +\dt = \Sigma_{22}^{-1}(w_2 - \Sigma_{12}\Sigma_{\partial h}D_h\dx - \Sigma_{12}\Sigma_{\partial v}D_v\dx), +\] +the key system is +\[ +H'_{11}\dx = +w_1 - (D_h^T\Sigma_{\partial h} + D_v^T\Sigma_{\partial v} )\Sigma_{12}\Sigma_{22}^{-1}w_2 +\] +where +\begin{align*} +H'_{11} = ~& H_{11} - B\Sigma^2_{12}\Sigma_{22}^{-1}B^T \\ += ~& D_h^T(\Sigma_b\Sigma^2_{\partial h}-F_t^{-1})D_h ~+~ +D_v^T(\Sigma_b\Sigma^2_{\partial v}-F_t^{-1})D_v ~+~\\ +~& D_h^T(\Sigma_b\Sigma_{\partial h}\Sigma_{\partial v})D_v ~+~ +D_v^T(\Sigma_b\Sigma_{\partial h}\Sigma_{\partial v})D_h ~-~ \\ +~& f_\epsilon^{-1} A^TA ~+~ f_\epsilon^{-2} A^Trr^TA, \\ +\Sigma_b = ~& F_t^{-2} - \Sigma_{12}^2\Sigma_{22}^{-1}. +\end{align*} + +The system above is symmetric positive definite, and can be solved with CG. + + +%------------------------------------------------------------------------------- +\section{Total variation minimization with bounded residual correlation} +\label{sec:tvdantzig} + +The $TV$ Dantzig problem has an equivalent SOCP as well: +\begin{align*} +\min_{x,t}~\sum_{ij} t_{ij} +\quad\text{subject to}\quad\quad +\|D_{ij} x\|_2 & \leq t_{ij}, ~~ i,j=1,\ldots,n \\[-4mm] +A^T(Ax-b) -\epsilon & \leq 0 \\ +-A^T(Ax-b) -\epsilon & \leq 0. +\end{align*} +% +The inequality constraint functions are +\begin{eqnarray*} +f_{t_{ij}} & = & \frac{1}{2}\left( \|D_{ij}x\|^2_2 - t_{ij}^2\right) \quad i,j=1,\ldots,n\\ +f_{\epsilon_1} & = & A^T(Ax-b)-\epsilon, \\ +f_{\epsilon_2} & = & -A^T(Ax-b)-\epsilon, +\end{eqnarray*} +with +\[ +\sum_{ij}\sigma_{ij} \grad f_{\epsilon_1;ij} = +\bpm A^TA\sigma \\ \vzero \epm, \quad +\sum_{ij}\sigma_{ij} \grad f_{\epsilon_2;ij} = +\bpm -A^TA\sigma \\ \vzero \epm, +\] +and +\[ +\sum_{ij} \sigma_{ij} \grad f_{\epsilon_1;ij} \grad f_{\epsilon_1;ij}^T = +\sum_{ij} \sigma_{ij} \grad f_{\epsilon_2;ij} \grad f_{\epsilon_2;ij}^T = +\bpm A^TA\Sigma A^TA & \vzero \\ \vzero & \vzero \epm. +\] +Thus the log barrier Newton system is nearly the same as in the quadratically constrained case: +\[ +\bpm H_{11} & B\Sigma_{12} \\ +\Sigma_{12}B^T & \Sigma_{22} \epm +\bpm \dx \\ \dt \epm = +\bpm D_h^T F_t^{-1}D_h x + D_v^TF_t^{-1}D_v x + +A^TA(f_{\epsilon_1}^{-1}-f_{\epsilon_2}^{-1}) \\ +-\tau\mathbf{1} - tf^{-1}_t \epm := +\bpm w_1 \\ w_2 \epm. +\] +where +\begin{align*} +H_{11} = ~& D_h^T(-F_t^{-1})D_h ~+~ D_v^T(-F_t^{-1})D_v ~+~ B F_t^{-2}B^T ~+~ A^TA\Sigma_a A^TA, \\ +\Sigma_{12} = ~& -TF_t^{-2}, \\ +\Sigma_{22} = ~& F_t^{-1} + F_t^{-2}T^2, \\ +\Sigma_a = ~& F_{\epsilon_1}^{-2} + F_{\epsilon_2}^{-2}. +\end{align*} +Eliminating $\dt$ as before +\[ +\dt ~=~ \Sigma_{22}^{-1}(w_2 - \Sigma_{12}\Sigma_{\partial h}D_h\dx - +\Sigma_{12}\Sigma_{\partial v}D_v\dx), +\] +the key system is +\[ +H'_{11}\dx = +w_1 - (D_h^T\Sigma_{\partial h} + D_v^T\Sigma_{\partial v} )\Sigma_{12}\Sigma_{22}^{-1}w_2 +\] +where +\begin{align*} +H'_{11} = ~& D_h^T(\Sigma_b\Sigma^2_{\partial h}-F_t^{-1})D_h ~+~ +D_v^T(\Sigma_b\Sigma^2_{\partial v}-F_t^{-1})D_v ~+~\\ +~& D_h^T(\Sigma_b\Sigma_{\partial h}\Sigma_{\partial v})D_v ~+~ +D_v^T(\Sigma_b\Sigma_{\partial h}\Sigma_{\partial v})D_h ~+~ +A^TA\Sigma_a A^TA, \\ +\Sigma_b = ~& F_t^{-2} - \Sigma_{12}^2\Sigma_{22}^{-1}. +\end{align*} + + + + + + +%------------------------------------------------------------------------------- +\vspace{10mm} + +\bibliographystyle{plain} +\bibliography{l1magic} + +\end{document} diff --git a/Optimization/cgsolve.m b/Optimization/cgsolve.m new file mode 100644 index 0000000..dbbc4d8 --- /dev/null +++ b/Optimization/cgsolve.m @@ -0,0 +1,76 @@ +% cgsolve.m +% +% Solve a symmetric positive definite system Ax = b via conjugate gradients. +% +% Usage: [x, res, iter] = cgsolve(A, b, tol, maxiter, verbose) +% +% A - Either an NxN matrix, or a function handle. +% +% b - N vector +% +% tol - Desired precision. Algorithm terminates when +% norm(Ax-b)/norm(b) < tol . +% +% maxiter - Maximum number of iterations. +% +% verbose - If 0, do not print out progress messages. +% If and integer greater than 0, print out progress every 'verbose' iters. +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + +function [x, res, iter] = cgsolve(A, b, tol, maxiter, verbose) + +if (nargin < 5), verbose = 1; end + +implicit = isa(A,'function_handle'); + +x = zeros(length(b),1); +r = b; +d = r; +delta = r'*r; +delta0 = b'*b; +numiter = 0; +bestx = x; +bestres = sqrt(delta/delta0); +while ((numiter < maxiter) && (delta > tol^2*delta0)) + + % q = A*d + if (implicit), q = A(d); else q = A*d; end + + alpha = delta/(d'*q); + x = x + alpha*d; + + if (mod(numiter+1,50) == 0) + % r = b - Aux*x + if (implicit), r = b - A(x); else r = b - A*x; end + else + r = r - alpha*q; + end + + deltaold = delta; + delta = r'*r; + beta = delta/deltaold; + d = r + beta*d; + numiter = numiter + 1; + if (sqrt(delta/delta0) < bestres) + bestx = x; + bestres = sqrt(delta/delta0); + end + + if ((verbose) && (mod(numiter,verbose)==0)) + disp(sprintf('cg: Iter = %d, Best residual = %8.3e, Current residual = %8.3e', ... + numiter, bestres, sqrt(delta/delta0))); + end + +end + +if (verbose) + disp(sprintf('cg: Iterations = %d, best residual = %14.8e', numiter, bestres)); +end +x = bestx; +res = bestres; +iter = numiter; + diff --git a/Optimization/l1dantzig_pd.m b/Optimization/l1dantzig_pd.m new file mode 100644 index 0000000..6a57dea --- /dev/null +++ b/Optimization/l1dantzig_pd.m @@ -0,0 +1,234 @@ +% l1dantzig_pd.m +% +% Solves +% min_x ||x||_1 subject to ||A'(Ax-b)||_\infty <= epsilon +% +% Recast as linear program +% min_{x,u} sum(u) s.t. x - u <= 0 +% -x - u <= 0 +% A'(Ax-b) - epsilon <= 0 +% -A'(Ax-b) - epsilon <= 0 +% and use primal-dual interior point method. +% +% Usage: xp = l1dantzig_pd(x0, A, At, b, epsilon, pdtol, pdmaxiter, cgtol, cgmaxiter) +% +% x0 - Nx1 vector, initial point. +% +% A - Either a handle to a function that takes a N vector and returns a K +% vector , or a KxN matrix. If A is a function handle, the algorithm +% operates in "largescale" mode, solving the Newton systems via the +% Conjugate Gradients algorithm. +% +% At - Handle to a function that takes a K vector and returns an N vector. +% If A is a KxN matrix, At is ignored. +% +% b - Kx1 vector of observations. +% +% epsilon - scalar or Nx1 vector of correlation constraints +% +% pdtol - Tolerance for primal-dual algorithm (algorithm terminates if +% the duality gap is less than pdtol). +% Default = 1e-3. +% +% pdmaxiter - Maximum number of primal-dual iterations. +% Default = 50. +% +% cgtol - Tolerance for Conjugate Gradients; ignored if A is a matrix. +% Default = 1e-8. +% +% cgmaxiter - Maximum number of iterations for Conjugate Gradients; ignored +% if A is a matrix. +% Default = 200. +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + +function xp = l1dantzig_pd(x0, A, At, b, epsilon, pdtol, pdmaxiter, cgtol, cgmaxiter) + +largescale = isa(A,'function_handle'); + +if (nargin < 6), pdtol = 1e-3; end +if (nargin < 7), pdmaxiter = 50; end +if (nargin < 8), cgtol = 1e-8; end +if (nargin < 9), cgmaxiter = 200; end + +N = length(x0); + +alpha = 0.01; +beta = 0.5; +mu = 10; + +gradf0 = [zeros(N,1); ones(N,1)]; + + +% starting point --- make sure that it is feasible +if (largescale) + if (max( abs(At(A(x0) - b)) - epsilon ) > 0) + disp('Starting point infeasible; using x0 = At*inv(AAt)*y.'); + AAt = @(z) A(At(z)); + [w, cgres] = cgsolve(AAt, b, cgtol, cgmaxiter, 0); + if (cgres > 1/2) + disp('A*At is ill-conditioned: cannot find starting point'); + xp = x0; + return; + end + x0 = At(w); + end +else + if (max(abs(A'*(A*x0 - b)) - epsilon ) > 0) + disp('Starting point infeasible; using x0 = At*inv(AAt)*y.'); + opts.POSDEF = true; opts.SYM = true; + [w, hcond] = linsolve(A*A', b, opts); + if (hcond < 1e-14) + disp('A*At is ill-conditioned: cannot find starting point'); + xp = x0; + return; + end + x0 = A'*w; + end +end +x = x0; +u = (0.95)*abs(x0) + (0.10)*max(abs(x0)); + +% set up for the first iteration +if (largescale) + Atr = At(A(x) - b); +else + Atr = A'*(A*x - b); +end +fu1 = x - u; +fu2 = -x - u; +fe1 = Atr - epsilon; +fe2 = -Atr - epsilon; +lamu1 = -(1./fu1); +lamu2 = -(1./fu2); +lame1 = -(1./fe1); +lame2 = -(1./fe2); +if (largescale) + AtAv = At(A(lame1-lame2)); +else + AtAv = A'*(A*(lame1-lame2)); +end + +% sdg = surrogate duality gap +sdg = -[fu1; fu2; fe1; fe2]'*[lamu1; lamu2; lame1; lame2]; +tau = mu*(4*N)/sdg; + +% residuals +rdual = gradf0 + [lamu1-lamu2 + AtAv; -lamu1-lamu2]; +rcent = -[lamu1.*fu1; lamu2.*fu2; lame1.*fe1; lame2.*fe2] - (1/tau); +resnorm = norm([rdual; rcent]); + +% iterations +pditer = 0; +done = (sdg < pdtol) | (pditer >= pdmaxiter); +while (~done) + + % solve for step direction + w2 = - 1 - (1/tau)*(1./fu1 + 1./fu2); + + sig11 = -lamu1./fu1 - lamu2./fu2; + sig12 = lamu1./fu1 - lamu2./fu2; + siga = -(lame1./fe1 + lame2./fe2); + sigx = sig11 - sig12.^2./sig11; + + if (largescale) + w1 = -(1/tau)*( At(A(1./fe2-1./fe1)) + 1./fu2 - 1./fu1 ); + w1p = w1 - (sig12./sig11).*w2; + hpfun = @(z) At(A(siga.*At(A(z)))) + sigx.*z; + [dx, cgres, cgiter] = cgsolve(hpfun, w1p, cgtol, cgmaxiter, 0); + if (cgres > 1/2) + disp('Cannot solve system. Returning previous iterate. (See Section 4 of notes for more information.)'); + xp = x; + return + end + AtAdx = At(A(dx)); + else + w1 = -(1/tau)*( A'*(A*(1./fe2-1./fe1)) + 1./fu2 - 1./fu1 ); + w1p = w1 - (sig12./sig11).*w2; + Hp = A'*(A*sparse(diag(siga))*A')*A + diag(sigx); + opts.POSDEF = true; opts.SYM = true; + [dx, hcond] = linsolve(Hp, w1p,opts); + if (hcond < 1e-14) + disp('Matrix ill-conditioned. Returning previous iterate. (See Section 4 of notes for more information.)'); + xp = x; + return + end + AtAdx = A'*(A*dx); + end + du = w2./sig11 - (sig12./sig11).*dx; + + dlamu1 = -(lamu1./fu1).*(dx-du) - lamu1 - (1/tau)*1./fu1; + dlamu2 = -(lamu2./fu2).*(-dx-du) - lamu2 - (1/tau)*1./fu2; + dlame1 = -(lame1./fe1).*(AtAdx) - lame1 - (1/tau)*1./fe1; + dlame2 = -(lame2./fe2).*(-AtAdx) - lame2 - (1/tau)*1./fe2; + if (largescale) + AtAdv = At(A(dlame1-dlame2)); + else + AtAdv = A'*(A*(dlame1-dlame2)); + end + + + % find minimal step size that keeps ineq functions < 0, dual vars > 0 + iu1 = find(dlamu1 < 0); iu2 = find(dlamu2 < 0); + ie1 = find(dlame1 < 0); ie2 = find(dlame2 < 0); + ifu1 = find((dx-du) > 0); ifu2 = find((-dx-du) > 0); + ife1 = find(AtAdx > 0); ife2 = find(-AtAdx > 0); + smax = min(1,min([... + -lamu1(iu1)./dlamu1(iu1); -lamu2(iu2)./dlamu2(iu2); ... + -lame1(ie1)./dlame1(ie1); -lame2(ie2)./dlame2(ie2); ... + -fu1(ifu1)./(dx(ifu1)-du(ifu1)); -fu2(ifu2)./(-dx(ifu2)-du(ifu2)); ... + -fe1(ife1)./AtAdx(ife1); -fe2(ife2)./(-AtAdx(ife2)) ])); + s = 0.99*smax; + + % backtracking line search + suffdec = 0; + backiter = 0; + while (~suffdec) + xp = x + s*dx; up = u + s*du; + Atrp = Atr + s*AtAdx; AtAvp = AtAv + s*AtAdv; + fu1p = fu1 + s*(dx-du); fu2p = fu2 + s*(-dx-du); + fe1p = fe1 + s*AtAdx; fe2p = fe2 + s*(-AtAdx); + lamu1p = lamu1 + s*dlamu1; lamu2p = lamu2 + s*dlamu2; + lame1p = lame1 + s*dlame1; lame2p = lame2 + s*dlame2; + rdp = gradf0 + [lamu1p-lamu2p + AtAvp; -lamu1p-lamu2p]; + rcp = -[lamu1p.*fu1p; lamu2p.*fu2p; lame1p.*fe1p; lame2p.*fe2p] - (1/tau); + suffdec = (norm([rdp; rcp]) <= (1-alpha*s)*resnorm); + s = beta*s; + backiter = backiter+1; + if (backiter > 32) + disp('Stuck backtracking, returning last iterate. (See Section 4 of notes for more information.)') + xp = x; + return + end + end + + % setup for next iteration + x = xp; u = up; + Atr = Atrp; AtAv = AtAvp; + fu1 = fu1p; fu2 = fu2p; + fe1 = fe1p; fe2 = fe2p; + lamu1 = lamu1p; lamu2 = lamu2p; + lame1 = lame1p; lame2 = lame2p; + + sdg = -[fu1; fu2; fe1; fe2]'*[lamu1; lamu2; lame1; lame2]; + tau = mu*(4*N)/sdg; + + rdual = rdp; + rcent = -[lamu1.*fu1; lamu2.*fu2; lame1.*fe1; lame2.*fe2] - (1/tau); + resnorm = norm([rdual; rcent]); + + pditer = pditer+1; + done = (sdg < pdtol) | (pditer >= pdmaxiter); + + disp(sprintf('Iteration = %d, tau = %8.3e, Primal = %8.3e, PDGap = %8.3e, Dual res = %8.3e',... + pditer, tau, sum(u), sdg, norm(rdual))); + if (largescale) + disp(sprintf(' CG Res = %8.3e, CG Iter = %d', cgres, cgiter)); + else + disp(sprintf(' H11p condition number = %8.3e', hcond)); + end + +end diff --git a/Optimization/l1decode_pd.m b/Optimization/l1decode_pd.m new file mode 100644 index 0000000..2757404 --- /dev/null +++ b/Optimization/l1decode_pd.m @@ -0,0 +1,175 @@ +% l1decode_pd.m +% +% Decoding via linear programming. +% Solve +% min_x ||b-Ax||_1 . +% +% Recast as the linear program +% min_{x,u} sum(u) s.t. -Ax - u + y <= 0 +% Ax - u - y <= 0 +% and solve using primal-dual interior point method. +% +% Usage: xp = l1decode_pd(x0, A, At, y, pdtol, pdmaxiter, cgtol, cgmaxiter) +% +% x0 - Nx1 vector, initial point. +% +% A - Either a handle to a function that takes a N vector and returns a M +% vector, or a MxN matrix. If A is a function handle, the algorithm +% operates in "largescale" mode, solving the Newton systems via the +% Conjugate Gradients algorithm. +% +% At - Handle to a function that takes an M vector and returns an N vector. +% If A is a matrix, At is ignored. +% +% y - Mx1 observed code (M > N). +% +% pdtol - Tolerance for primal-dual algorithm (algorithm terminates if +% the duality gap is less than pdtol). +% Default = 1e-3. +% +% pdmaxiter - Maximum number of primal-dual iterations. +% Default = 50. +% +% cgtol - Tolerance for Conjugate Gradients; ignored if A is a matrix. +% Default = 1e-8. +% +% cgmaxiter - Maximum number of iterations for Conjugate Gradients; ignored +% if A is a matrix. +% Default = 200. +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + +function xp = l1decode_pd(x0, A, At, y, pdtol, pdmaxiter, cgtol, cgmaxiter) + +largescale = isa(A,'function_handle'); + +if (nargin < 5), pdtol = 1e-3; end +if (nargin < 6), pdmaxiter = 50; end +if (nargin < 7), cgtol = 1e-8; end +if (nargin < 8), cgmaxiter = 200; end + +N = length(x0); +M = length(y); + +alpha = 0.01; +beta = 0.5; +mu = 10; + +gradf0 = [zeros(N,1); ones(M,1)]; + +x = x0; +if (largescale), Ax = A(x); else Ax = A*x; end +u = (0.95)*abs(y-Ax) + (0.10)*max(abs(y-Ax)); + +fu1 = Ax - y - u; +fu2 = -Ax + y - u; + +lamu1 = -1./fu1; +lamu2 = -1./fu2; + +if (largescale), Atv = At(lamu1-lamu2); else Atv = A'*(lamu1-lamu2); end + +sdg = -(fu1'*lamu1 + fu2'*lamu2); +tau = mu*2*M/sdg; + +rcent = [-lamu1.*fu1; -lamu2.*fu2] - (1/tau); +rdual = gradf0 + [Atv; -lamu1-lamu2]; +resnorm = norm([rdual; rcent]); + +pditer = 0; +done = (sdg < pdtol)| (pditer >= pdmaxiter); +while (~done) + + pditer = pditer + 1; + + w2 = -1 - 1/tau*(1./fu1 + 1./fu2); + + sig1 = -lamu1./fu1 - lamu2./fu2; + sig2 = lamu1./fu1 - lamu2./fu2; + sigx = sig1 - sig2.^2./sig1; + + if (largescale) + w1 = -1/tau*(At(-1./fu1 + 1./fu2)); + w1p = w1 - At((sig2./sig1).*w2); + h11pfun = @(z) At(sigx.*A(z)); + [dx, cgres, cgiter] = cgsolve(h11pfun, w1p, cgtol, cgmaxiter, 0); + if (cgres > 1/2) + disp('Cannot solve system. Returning previous iterate. (See Section 4 of notes for more information.)'); + xp = x; + return + end + Adx = A(dx); + else + w1 = -1/tau*(A'*(-1./fu1 + 1./fu2)); + w1p = w1 - A'*((sig2./sig1).*w2); + H11p = A'*(sparse(diag(sigx))*A); + opts.POSDEF = true; opts.SYM = true; + [dx, hcond] = linsolve(H11p, w1p,opts); + if (hcond < 1e-14) + disp('Matrix ill-conditioned. Returning previous iterate. (See Section 4 of notes for more information.)'); + xp = x; + return + end + Adx = A*dx; + end + + du = (w2 - sig2.*Adx)./sig1; + + dlamu1 = -(lamu1./fu1).*(Adx-du) - lamu1 - (1/tau)*1./fu1; + dlamu2 = (lamu2./fu2).*(Adx + du) -lamu2 - (1/tau)*1./fu2; + if (largescale), Atdv = At(dlamu1-dlamu2); else Atdv = A'*(dlamu1-dlamu2); end + + % make sure that the step is feasible: keeps lamu1,lamu2 > 0, fu1,fu2 < 0 + indl = find(dlamu1 < 0); indu = find(dlamu2 < 0); + s = min([1; -lamu1(indl)./dlamu1(indl); -lamu2(indu)./dlamu2(indu)]); + indl = find((Adx-du) > 0); indu = find((-Adx-du) > 0); + s = (0.99)*min([s; -fu1(indl)./(Adx(indl)-du(indl)); -fu2(indu)./(-Adx(indu)-du(indu))]); + + % backtrack + suffdec = 0; + backiter = 0; + while(~suffdec) + xp = x + s*dx; up = u + s*du; + Axp = Ax + s*Adx; Atvp = Atv + s*Atdv; + lamu1p = lamu1 + s*dlamu1; lamu2p = lamu2 + s*dlamu2; + fu1p = Axp - y - up; fu2p = -Axp + y - up; + rdp = gradf0 + [Atvp; -lamu1p-lamu2p]; + rcp = [-lamu1p.*fu1p; -lamu2p.*fu2p] - (1/tau); + suffdec = (norm([rdp; rcp]) <= (1-alpha*s)*resnorm); + s = beta*s; + backiter = backiter + 1; + if (backiter > 32) + disp('Stuck backtracking, returning last iterate. (See Section 4 of notes for more information.)') + xp = x; + return + end + end + + % next iteration + x = xp; u = up; + Ax = Axp; Atv = Atvp; + lamu1 = lamu1p; lamu2 = lamu2p; + fu1 = fu1p; fu2 = fu2p; + + % surrogate duality gap + sdg = -(fu1'*lamu1 + fu2'*lamu2); + tau = mu*2*M/sdg; + rcent = [-lamu1.*fu1; -lamu2.*fu2] - (1/tau); + rdual = rdp; + resnorm = norm([rdual; rcent]); + + done = (sdg < pdtol) | (pditer >= pdmaxiter); + + disp(sprintf('Iteration = %d, tau = %8.3e, Primal = %8.3e, PDGap = %8.3e, Dual res = %8.3e',... + pditer, tau, sum(u), sdg, norm(rdual))); + if (largescale) + disp(sprintf(' CG Res = %8.3e, CG Iter = %d', cgres, cgiter)); + else + disp(sprintf(' H11p condition number = %8.3e', hcond)); + end + +end + diff --git a/Optimization/l1eq_pd.m b/Optimization/l1eq_pd.m new file mode 100644 index 0000000..80c058e --- /dev/null +++ b/Optimization/l1eq_pd.m @@ -0,0 +1,209 @@ +% l1eq_pd.m +% +% Solve +% min_x ||x||_1 s.t. Ax = b +% +% Recast as linear program +% min_{x,u} sum(u) s.t. -u <= x <= u, Ax=b +% and use primal-dual interior point method +% +% Usage: xp = l1eq_pd(x0, A, At, b, pdtol, pdmaxiter, cgtol, cgmaxiter) +% +% x0 - Nx1 vector, initial point. +% +% A - Either a handle to a function that takes a N vector and returns a K +% vector , or a KxN matrix. If A is a function handle, the algorithm +% operates in "largescale" mode, solving the Newton systems via the +% Conjugate Gradients algorithm. +% +% At - Handle to a function that takes a K vector and returns an N vector. +% If A is a KxN matrix, At is ignored. +% +% b - Kx1 vector of observations. +% +% pdtol - Tolerance for primal-dual algorithm (algorithm terminates if +% the duality gap is less than pdtol). +% Default = 1e-3. +% +% pdmaxiter - Maximum number of primal-dual iterations. +% Default = 50. +% +% cgtol - Tolerance for Conjugate Gradients; ignored if A is a matrix. +% Default = 1e-8. +% +% cgmaxiter - Maximum number of iterations for Conjugate Gradients; ignored +% if A is a matrix. +% Default = 200. +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + +function xp = l1eq_pd(x0, A, At, b, pdtol, pdmaxiter, cgtol, cgmaxiter) + +largescale = isa(A,'function_handle'); + +if (nargin < 5), pdtol = 1e-3; end +if (nargin < 6), pdmaxiter = 50; end +if (nargin < 7), cgtol = 1e-8; end +if (nargin < 8), cgmaxiter = 200; end + +N = length(x0); + +alpha = 0.01; +beta = 0.5; +mu = 10; + +gradf0 = [zeros(N,1); ones(N,1)]; + +% starting point --- make sure that it is feasible +if (largescale) + if (norm(A(x0)-b)/norm(b) > cgtol) + disp('Starting point infeasible; using x0 = At*inv(AAt)*y.'); + AAt = @(z) A(At(z)); + [w, cgres, cgiter] = cgsolve(AAt, b, cgtol, cgmaxiter, 0); + if (cgres > 1/2) + disp('A*At is ill-conditioned: cannot find starting point'); + xp = x0; + return; + end + x0 = At(w); + end +else + if (norm(A*x0-b)/norm(b) > cgtol) + disp('Starting point infeasible; using x0 = At*inv(AAt)*y.'); + opts.POSDEF = true; opts.SYM = true; + [w, hcond] = linsolve(A*A', b, opts); + if (hcond < 1e-14) + disp('A*At is ill-conditioned: cannot find starting point'); + xp = x0; + return; + end + x0 = A'*w; + end +end +x = x0; +u = (0.95)*abs(x0) + (0.10)*max(abs(x0)); + +% set up for the first iteration +fu1 = x - u; +fu2 = -x - u; +lamu1 = -1./fu1; +lamu2 = -1./fu2; +if (largescale) + v = -A(lamu1-lamu2); + Atv = At(v); + rpri = A(x) - b; +else + v = -A*(lamu1-lamu2); + Atv = A'*v; + rpri = A*x - b; +end + +sdg = -(fu1'*lamu1 + fu2'*lamu2); +tau = mu*2*N/sdg; + +rcent = [-lamu1.*fu1; -lamu2.*fu2] - (1/tau); +rdual = gradf0 + [lamu1-lamu2; -lamu1-lamu2] + [Atv; zeros(N,1)]; +resnorm = norm([rdual; rcent; rpri]); + +pditer = 0; +done = (sdg < pdtol) | (pditer >= pdmaxiter); +while (~done) + + pditer = pditer + 1; + + w1 = -1/tau*(-1./fu1 + 1./fu2) - Atv; + w2 = -1 - 1/tau*(1./fu1 + 1./fu2); + w3 = -rpri; + + sig1 = -lamu1./fu1 - lamu2./fu2; + sig2 = lamu1./fu1 - lamu2./fu2; + sigx = sig1 - sig2.^2./sig1; + + if (largescale) + w1p = w3 - A(w1./sigx - w2.*sig2./(sigx.*sig1)); + h11pfun = @(z) -A(1./sigx.*At(z)); + [dv, cgres, cgiter] = cgsolve(h11pfun, w1p, cgtol, cgmaxiter, 0); + if (cgres > 1/2) + disp('Cannot solve system. Returning previous iterate. (See Section 4 of notes for more information.)'); + xp = x; + return + end + dx = (w1 - w2.*sig2./sig1 - At(dv))./sigx; + Adx = A(dx); + Atdv = At(dv); + else + w1p = -(w3 - A*(w1./sigx - w2.*sig2./(sigx.*sig1))); + H11p = A*(sparse(diag(1./sigx))*A'); + opts.POSDEF = true; opts.SYM = true; + [dv,hcond] = linsolve(H11p, w1p, opts); + if (hcond < 1e-14) + disp('Matrix ill-conditioned. Returning previous iterate. (See Section 4 of notes for more information.)'); + xp = x; + return + end + dx = (w1 - w2.*sig2./sig1 - A'*dv)./sigx; + Adx = A*dx; + Atdv = A'*dv; + end + + du = (w2 - sig2.*dx)./sig1; + + dlamu1 = (lamu1./fu1).*(-dx+du) - lamu1 - (1/tau)*1./fu1; + dlamu2 = (lamu2./fu2).*(dx+du) - lamu2 - 1/tau*1./fu2; + + % make sure that the step is feasible: keeps lamu1,lamu2 > 0, fu1,fu2 < 0 + indp = find(dlamu1 < 0); indn = find(dlamu2 < 0); + s = min([1; -lamu1(indp)./dlamu1(indp); -lamu2(indn)./dlamu2(indn)]); + indp = find((dx-du) > 0); indn = find((-dx-du) > 0); + s = (0.99)*min([s; -fu1(indp)./(dx(indp)-du(indp)); -fu2(indn)./(-dx(indn)-du(indn))]); + + % backtracking line search + suffdec = 0; + backiter = 0; + while (~suffdec) + xp = x + s*dx; up = u + s*du; + vp = v + s*dv; Atvp = Atv + s*Atdv; + lamu1p = lamu1 + s*dlamu1; lamu2p = lamu2 + s*dlamu2; + fu1p = xp - up; fu2p = -xp - up; + rdp = gradf0 + [lamu1p-lamu2p; -lamu1p-lamu2p] + [Atvp; zeros(N,1)]; + rcp = [-lamu1p.*fu1p; -lamu2p.*fu2p] - (1/tau); + rpp = rpri + s*Adx; + suffdec = (norm([rdp; rcp; rpp]) <= (1-alpha*s)*resnorm); + s = beta*s; + backiter = backiter + 1; + if (backiter > 32) + disp('Stuck backtracking, returning last iterate. (See Section 4 of notes for more information.)') + xp = x; + return + end + end + + + % next iteration + x = xp; u = up; + v = vp; Atv = Atvp; + lamu1 = lamu1p; lamu2 = lamu2p; + fu1 = fu1p; fu2 = fu2p; + + % surrogate duality gap + sdg = -(fu1'*lamu1 + fu2'*lamu2); + tau = mu*2*N/sdg; + rpri = rpp; + rcent = [-lamu1.*fu1; -lamu2.*fu2] - (1/tau); + rdual = gradf0 + [lamu1-lamu2; -lamu1-lamu2] + [Atv; zeros(N,1)]; + resnorm = norm([rdual; rcent; rpri]); + + done = (sdg < pdtol) | (pditer >= pdmaxiter); + + disp(sprintf('Iteration = %d, tau = %8.3e, Primal = %8.3e, PDGap = %8.3e, Dual res = %8.3e, Primal res = %8.3e',... + pditer, tau, sum(u), sdg, norm(rdual), norm(rpri))); + if (largescale) + disp(sprintf(' CG Res = %8.3e, CG Iter = %d', cgres, cgiter)); + else + disp(sprintf(' H11p condition number = %8.3e', hcond)); + end + +end diff --git a/Optimization/l1qc_logbarrier.m b/Optimization/l1qc_logbarrier.m new file mode 100644 index 0000000..388529e --- /dev/null +++ b/Optimization/l1qc_logbarrier.m @@ -0,0 +1,116 @@ +% l1qc_logbarrier.m +% +% Solve quadratically constrained l1 minimization: +% min ||x||_1 s.t. ||Ax - b||_2 <= \epsilon +% +% Reformulate as the second-order cone program +% min_{x,u} sum(u) s.t. x - u <= 0, +% -x - u <= 0, +% 1/2(||Ax-b||^2 - \epsilon^2) <= 0 +% and use a log barrier algorithm. +% +% Usage: xp = l1qc_logbarrier(x0, A, At, b, epsilon, lbtol, mu, cgtol, cgmaxiter) +% +% x0 - Nx1 vector, initial point. +% +% A - Either a handle to a function that takes a N vector and returns a K +% vector , or a KxN matrix. If A is a function handle, the algorithm +% operates in "largescale" mode, solving the Newton systems via the +% Conjugate Gradients algorithm. +% +% At - Handle to a function that takes a K vector and returns an N vector. +% If A is a KxN matrix, At is ignored. +% +% b - Kx1 vector of observations. +% +% epsilon - scalar, constraint relaxation parameter +% +% lbtol - The log barrier algorithm terminates when the duality gap <= lbtol. +% Also, the number of log barrier iterations is completely +% determined by lbtol. +% Default = 1e-3. +% +% mu - Factor by which to increase the barrier constant at each iteration. +% Default = 10. +% +% cgtol - Tolerance for Conjugate Gradients; ignored if A is a matrix. +% Default = 1e-8. +% +% cgmaxiter - Maximum number of iterations for Conjugate Gradients; ignored +% if A is a matrix. +% Default = 200. +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + +function xp = l1qc_logbarrier(x0, A, At, b, epsilon, lbtol, mu, cgtol, cgmaxiter) + +largescale = isa(A,'function_handle'); + +if (nargin < 6), lbtol = 1e-3; end +if (nargin < 7), mu = 10; end +if (nargin < 8), cgtol = 1e-8; end +if (nargin < 9), cgmaxiter = 200; end + +newtontol = lbtol; +newtonmaxiter = 50; + +N = length(x0); + +% starting point --- make sure that it is feasible +if (largescale) + if (norm(A(x0)-b) > epsilon) + disp('Starting point infeasible; using x0 = At*inv(AAt)*y.'); + AAt = @(z) A(At(z)); + [w, cgres] = cgsolve(AAt, b, cgtol, cgmaxiter, 0); + if (cgres > 1/2) + disp('A*At is ill-conditioned: cannot find starting point'); + xp = x0; + return; + end + x0 = At(w); + end +else + if (norm(A*x0-b) > epsilon) + disp('Starting point infeasible; using x0 = At*inv(AAt)*y.'); + opts.POSDEF = true; opts.SYM = true; + [w, hcond] = linsolve(A*A', b, opts); + if (hcond < 1e-14) + disp('A*At is ill-conditioned: cannot find starting point'); + xp = x0; + return; + end + x0 = A'*w; + end +end +x = x0; +u = (0.95)*abs(x0) + (0.10)*max(abs(x0)); + +disp(sprintf('Original l1 norm = %.3f, original functional = %.3f', sum(abs(x0)), sum(u))); + +% choose initial value of tau so that the duality gap after the first +% step will be about the origial norm +tau = max((2*N+1)/sum(abs(x0)), 1); + +lbiter = ceil((log(2*N+1)-log(lbtol)-log(tau))/log(mu)); +disp(sprintf('Number of log barrier iterations = %d\n', lbiter)); + +totaliter = 0; + +for ii = 1:lbiter + + [xp, up, ntiter] = l1qc_newton(x, u, A, At, b, epsilon, tau, newtontol, newtonmaxiter, cgtol, cgmaxiter); + totaliter = totaliter + ntiter; + + disp(sprintf('\nLog barrier iter = %d, l1 = %.3f, functional = %8.3f, tau = %8.3e, total newton iter = %d\n', ... + ii, sum(abs(xp)), sum(up), tau, totaliter)); + + x = xp; + u = up; + + tau = mu*tau; + +end + diff --git a/Optimization/l1qc_newton.m b/Optimization/l1qc_newton.m new file mode 100644 index 0000000..8a25cd2 --- /dev/null +++ b/Optimization/l1qc_newton.m @@ -0,0 +1,150 @@ +% l1qc_newton.m +% +% Newton algorithm for log-barrier subproblems for l1 minimization +% with quadratic constraints. +% +% Usage: +% [xp,up,niter] = l1qc_newton(x0, u0, A, At, b, epsilon, tau, +% newtontol, newtonmaxiter, cgtol, cgmaxiter) +% +% x0,u0 - starting points +% +% A - Either a handle to a function that takes a N vector and returns a K +% vector , or a KxN matrix. If A is a function handle, the algorithm +% operates in "largescale" mode, solving the Newton systems via the +% Conjugate Gradients algorithm. +% +% At - Handle to a function that takes a K vector and returns an N vector. +% If A is a KxN matrix, At is ignored. +% +% b - Kx1 vector of observations. +% +% epsilon - scalar, constraint relaxation parameter +% +% tau - Log barrier parameter. +% +% newtontol - Terminate when the Newton decrement is <= newtontol. +% Default = 1e-3. +% +% newtonmaxiter - Maximum number of iterations. +% Default = 50. +% +% cgtol - Tolerance for Conjugate Gradients; ignored if A is a matrix. +% Default = 1e-8. +% +% cgmaxiter - Maximum number of iterations for Conjugate Gradients; ignored +% if A is a matrix. +% Default = 200. +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + + +function [xp, up, niter] = l1qc_newton(x0, u0, A, At, b, epsilon, tau, newtontol, newtonmaxiter, cgtol, cgmaxiter) + +% check if the matrix A is implicit or explicit +largescale = isa(A,'function_handle'); + +% line search parameters +alpha = 0.01; +beta = 0.5; + +if (~largescale), AtA = A'*A; end + +% initial point +x = x0; +u = u0; +if (largescale), r = A(x) - b; else r = A*x - b; end +fu1 = x - u; +fu2 = -x - u; +fe = 1/2*(r'*r - epsilon^2); +f = sum(u) - (1/tau)*(sum(log(-fu1)) + sum(log(-fu2)) + log(-fe)); + +niter = 0; +done = 0; +while (~done) + + if (largescale), atr = At(r); else atr = A'*r; end + + ntgz = 1./fu1 - 1./fu2 + 1/fe*atr; + ntgu = -tau - 1./fu1 - 1./fu2; + gradf = -(1/tau)*[ntgz; ntgu]; + + sig11 = 1./fu1.^2 + 1./fu2.^2; + sig12 = -1./fu1.^2 + 1./fu2.^2; + sigx = sig11 - sig12.^2./sig11; + + w1p = ntgz - sig12./sig11.*ntgu; + if (largescale) + h11pfun = @(z) sigx.*z - (1/fe)*At(A(z)) + 1/fe^2*(atr'*z)*atr; + [dx, cgres, cgiter] = cgsolve(h11pfun, w1p, cgtol, cgmaxiter, 0); + if (cgres > 1/2) + disp('Cannot solve system. Returning previous iterate. (See Section 4 of notes for more information.)'); + xp = x; up = u; + return + end + Adx = A(dx); + else + H11p = diag(sigx) - (1/fe)*AtA + (1/fe)^2*atr*atr'; + opts.POSDEF = true; opts.SYM = true; + [dx,hcond] = linsolve(H11p, w1p, opts); + if (hcond < 1e-14) + disp('Matrix ill-conditioned. Returning previous iterate. (See Section 4 of notes for more information.)'); + xp = x; up = u; + return + end + Adx = A*dx; + end + du = (1./sig11).*ntgu - (sig12./sig11).*dx; + + % minimum step size that stays in the interior + ifu1 = find((dx-du) > 0); ifu2 = find((-dx-du) > 0); + aqe = Adx'*Adx; bqe = 2*r'*Adx; cqe = r'*r - epsilon^2; + smax = min(1,min([... + -fu1(ifu1)./(dx(ifu1)-du(ifu1)); -fu2(ifu2)./(-dx(ifu2)-du(ifu2)); ... + (-bqe+sqrt(bqe^2-4*aqe*cqe))/(2*aqe) + ])); + s = (0.99)*smax; + + % backtracking line search + suffdec = 0; + backiter = 0; + while (~suffdec) + xp = x + s*dx; up = u + s*du; rp = r + s*Adx; + fu1p = xp - up; fu2p = -xp - up; fep = 1/2*(rp'*rp - epsilon^2); + fp = sum(up) - (1/tau)*(sum(log(-fu1p)) + sum(log(-fu2p)) + log(-fep)); + flin = f + alpha*s*(gradf'*[dx; du]); + suffdec = (fp <= flin); + s = beta*s; + backiter = backiter + 1; + if (backiter > 32) + disp('Stuck on backtracking line search, returning previous iterate. (See Section 4 of notes for more information.)'); + xp = x; up = u; + return + end + end + + % set up for next iteration + x = xp; u = up; r = rp; + fu1 = fu1p; fu2 = fu2p; fe = fep; f = fp; + + lambda2 = -(gradf'*[dx; du]); + stepsize = s*norm([dx; du]); + niter = niter + 1; + done = (lambda2/2 < newtontol) | (niter >= newtonmaxiter); + + disp(sprintf('Newton iter = %d, Functional = %8.3f, Newton decrement = %8.3f, Stepsize = %8.3e', ... + niter, f, lambda2/2, stepsize)); + if (largescale) + disp(sprintf(' CG Res = %8.3e, CG Iter = %d', cgres, cgiter)); + else + disp(sprintf(' H11p condition number = %8.3e', hcond)); + end + +end + + + + diff --git a/Optimization/tvdantzig_logbarrier.m b/Optimization/tvdantzig_logbarrier.m new file mode 100644 index 0000000..39c9463 --- /dev/null +++ b/Optimization/tvdantzig_logbarrier.m @@ -0,0 +1,120 @@ +% tvdantzig_logbarrier.m +% +% Solve the total variation Dantzig program +% +% min_x TV(x) subject to ||A'(Ax-b)||_\infty <= epsilon +% +% Recast as the SOCP +% min sum(t) s.t. ||D_{ij}x||_2 <= t, i,j=1,...,n +% <a_{ij},Ax - b> <= epsilon i,j=1,...,n +% and use a log barrier algorithm. +% +% Usage: xp = tvdantzig_logbarrier(x0, A, At, b, epsilon, lbtol, mu, cgtol, cgmaxiter) +% +% x0 - Nx1 vector, initial point. +% +% A - Either a handle to a function that takes a N vector and returns a K +% vector , or a KxN matrix. If A is a function handle, the algorithm +% operates in "largescale" mode, solving the Newton systems via the +% Conjugate Gradients algorithm. +% +% At - Handle to a function that takes a K vector and returns an N vector. +% If A is a KxN matrix, At is ignored. +% +% b - Kx1 vector of observations. +% +% epsilon - scalar, constraint relaxation parameter +% +% lbtol - The log barrier algorithm terminates when the duality gap <= lbtol. +% Also, the number of log barrier iterations is completely +% determined by lbtol. +% Default = 1e-3. +% +% mu - Factor by which to increase the barrier constant at each iteration. +% Default = 10. +% +% cgtol - Tolerance for Conjugate Gradients; ignored if A is a matrix. +% Default = 1e-8. +% +% cgmaxiter - Maximum number of iterations for Conjugate Gradients; ignored +% if A is a matrix. +% Default = 200. +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + +function xp = tvdantzig_logbarrier(x0, A, At, b, epsilon, lbtol, mu, cgtol, cgmaxiter) + +largescale = isa(A,'function_handle'); + +if (nargin < 6), lbtol = 1e-3; end +if (nargin < 7), mu = 10; end +if (nargin < 8), cgtol = 1e-8; end +if (nargin < 9), cgmaxiter = 200; end + +newtontol = lbtol; +newtonmaxiter = 50; + +N = length(x0); +n = round(sqrt(N)); + +% create (sparse) differencing matrices for TV +Dv = spdiags([reshape([-ones(n-1,n); zeros(1,n)],N,1) ... + reshape([zeros(1,n); ones(n-1,n)],N,1)], [0 1], N, N); +Dh = spdiags([reshape([-ones(n,n-1) zeros(n,1)],N,1) ... + reshape([zeros(n,1) ones(n,n-1)],N,1)], [0 n], N, N); + +if (largescale) + if (norm(A(x0)-b) > epsilon) + disp('Starting point infeasible; using x0 = At*inv(AAt)*y.'); + AAt = @(z) A(At(z)); + [w, cgres] = cgsolve(AAt, b, cgtol, cgmaxiter, 0); + if (cgres > 1/2) + disp('A*At is ill-conditioned: cannot find starting point'); + xp = x0; + return; + end + x0 = At(w); + end +else + if (norm(A*x0-b) > epsilon) + disp('Starting point infeasible; using x0 = At*inv(AAt)*y.'); + opts.POSDEF = true; opts.SYM = true; + [w, hcond] = linsolve(A*A', b, opts); + if (hcond < 1e-14) + disp('A*At is ill-conditioned: cannot find starting point'); + xp = x0; + return; + end + x0 = A'*w; + end +end +x = x0; +Dhx = Dh*x; Dvx = Dv*x; +t = 1.05*sqrt(Dhx.^2 + Dvx.^2) + .01*max(sqrt(Dhx.^2 + Dvx.^2)); + +% choose initial value of tau so that the duality gap after the first +% step will be about the origial TV +tau = 3*N/sum(sqrt(Dhx.^2+Dvx.^2)); + +lbiter = ceil((log(3*N)-log(lbtol)-log(tau))/log(mu)); +disp(sprintf('Number of log barrier iterations = %d\n', lbiter)); +totaliter = 0; +for ii = 1:lbiter + + [xp, tp, ntiter] = tvdantzig_newton(x, t, A, At, b, epsilon, tau, newtontol, newtonmaxiter, cgtol, cgmaxiter); + totaliter = totaliter + ntiter; + tvxp = sum(sqrt((Dh*xp).^2 + (Dv*xp).^2)); + + disp(sprintf('\nLog barrier iter = %d, TV = %.3f, functional = %8.3f, tau = %8.3e, total newton iter = %d\n', ... + ii, tvxp, sum(tp), tau, totaliter)); + + x = xp; + t = tp; + + tau = mu*tau; + +end +
\ No newline at end of file diff --git a/Optimization/tvdantzig_newton.m b/Optimization/tvdantzig_newton.m new file mode 100644 index 0000000..68d7148 --- /dev/null +++ b/Optimization/tvdantzig_newton.m @@ -0,0 +1,185 @@ +% tvdantzig_newton.m +% +% Newton iterations for TV Dantzig log-barrier subproblem. +% +% Usage : [xp, tp, niter] = tvdantzig_newton(x0, t0, A, At, b, epsilon, tau, +% newtontol, newtonmaxiter, cgtol, cgmaxiter) +% +% x0,t0 - Nx1 vectors, initial points. +% +% A - Either a handle to a function that takes a N vector and returns a K +% vector , or a KxN matrix. If A is a function handle, the algorithm +% operates in "largescale" mode, solving the Newton systems via the +% Conjugate Gradients algorithm. +% +% At - Handle to a function that takes a K vector and returns an N vector. +% If A is a KxN matrix, At is ignored. +% +% b - Kx1 vector of observations. +% +% epsilon - scalar, constraint relaxation parameter +% +% tau - Log barrier parameter. +% +% newtontol - Terminate when the Newton decrement is <= newtontol. +% +% newtonmaxiter - Maximum number of iterations. +% +% cgtol - Tolerance for Conjugate Gradients; ignored if A is a matrix. +% +% cgmaxiter - Maximum number of iterations for Conjugate Gradients; ignored +% if A is a matrix. +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + + +function [xp, tp, niter] = tvdantzig_newton(x0, t0, A, At, b, epsilon, tau, newtontol, newtonmaxiter, cgtol, cgmaxiter) + +largescale = isa(A,'function_handle'); + +alpha = 0.01; +beta = 0.5; + +N = length(x0); +n = round(sqrt(N)); + +% create (sparse) differencing matrices for TV +Dv = spdiags([reshape([-ones(n-1,n); zeros(1,n)],N,1) ... + reshape([zeros(1,n); ones(n-1,n)],N,1)], [0 1], N, N); +Dh = spdiags([reshape([-ones(n,n-1) zeros(n,1)],N,1) ... + reshape([zeros(n,1) ones(n,n-1)],N,1)], [0 n], N, N); + +% initial point +x = x0; +t = t0; +if (largescale) + r = A(x) - b; + Atr = At(r); +else + AtA = A'*A; + r = A*x - b; + Atr = A'*r; +end +Dhx = Dh*x; Dvx = Dv*x; +ft = 1/2*(Dhx.^2 + Dvx.^2 - t.^2); +fe1 = Atr - epsilon; +fe2 = -Atr - epsilon; +f = sum(t) - (1/tau)*(sum(log(-ft)) + sum(log(-fe1)) + sum(log(-fe2))); + +niter = 0; +done = 0; +while (~done) + + if (largescale) + ntgx = Dh'*((1./ft).*Dhx) + Dv'*((1./ft).*Dvx) + At(A(1./fe1-1./fe2)); + else + ntgx = Dh'*((1./ft).*Dhx) + Dv'*((1./ft).*Dvx) + AtA*(1./fe1-1./fe2); + end + ntgt = -tau - t./ft; + gradf = -(1/tau)*[ntgx; ntgt]; + + sig22 = 1./ft + (t.^2)./(ft.^2); + sig12 = -t./ft.^2; + sigb = 1./ft.^2 - (sig12.^2)./sig22; + siga = 1./fe1.^2 + 1./fe2.^2; + + w11 = ntgx - Dh'*(Dhx.*(sig12./sig22).*ntgt) - Dv'*(Dvx.*(sig12./sig22).*ntgt); + if (largescale) + h11pfun = @(w) H11p(w, A, At, Dh, Dv, Dhx, Dvx, sigb, ft, siga); + [dx, cgres, cgiter] = cgsolve(h11pfun, w11, cgtol, cgmaxiter, 0); + if (cgres > 1/2) + disp('Cannot solve system. Returning previous iterate. (See Section 4 of notes for more information.)'); + xp = x; tp = t; + return + end + Adx = A(dx); + AtAdx = At(Adx); + else + H11p = Dh'*sparse(diag(-1./ft + sigb.*Dhx.^2))*Dh + ... + Dv'*sparse(diag(-1./ft + sigb.*Dvx.^2))*Dv + ... + Dh'*sparse(diag(sigb.*Dhx.*Dvx))*Dv + ... + Dv'*sparse(diag(sigb.*Dhx.*Dvx))*Dh + ... + AtA*sparse(diag(siga))*AtA; + opts.POSDEF = true; opts.SYM = true; + [dx,hcond] = linsolve(H11p, w11, opts); + if (hcond < 1e-14) + disp('Matrix ill-conditioned. Returning previous iterate. (See Section 4 of notes for more information.)'); + xp = x; tp = t; + return + end + Adx = A*dx; + AtAdx = A'*Adx; + end + Dhdx = Dh*dx; Dvdx = Dv*dx; + dt = (1./sig22).*(ntgt - sig12.*(Dhx.*Dhdx + Dvx.*Dvdx)); + + % minimum step size that stays in the interior + ife1 = find(AtAdx > 0); ife2 = find(-AtAdx > 0); + aqt = Dhdx.^2 + Dvdx.^2 - dt.^2; + bqt = 2*(Dhdx.*Dhx + Dvdx.*Dvx - t.*dt); + cqt = Dhx.^2 + Dvx.^2 - t.^2; + tsols = [(-bqt+sqrt(bqt.^2-4*aqt.*cqt))./(2*aqt); ... + (-bqt-sqrt(bqt.^2-4*aqt.*cqt))./(2*aqt) ]; + indt = find([(bqt.^2 > 4*aqt.*cqt); (bqt.^2 > 4*aqt.*cqt)] & (tsols > 0)); + smax = min(1, min([-fe1(ife1)./AtAdx(ife1); -fe2(ife2)./(-AtAdx(ife2)); tsols(indt)])); + s = (0.99)*smax; + + % backtracking line search + suffdec = 0; + backiter = 0; + while (~suffdec) + xp = x + s*dx; tp = t + s*dt; + rp = r + s*Adx; Atrp = Atr + s*AtAdx; + Dhxp = Dhx + s*Dhdx; Dvxp = Dvx + s*Dvdx; + ftp = 1/2*(Dhxp.^2 + Dvxp.^2 - tp.^2); + fe1p = Atrp - epsilon; + fe2p = -Atrp - epsilon; + fp = sum(tp) - (1/tau)*(sum(log(-ftp)) + sum(log(-fe1p)) + sum(log(-fe2p))); + flin = f + alpha*s*(gradf'*[dx; dt]); + suffdec = (fp <= flin); + s = beta*s; + backiter = backiter + 1; + if (backiter > 32) + disp('Stuck backtracking, returning previous iterate. (See Section 4 of notes for more information.)'); + xp = x; tp = t; + return + end + end + + % set up for next iteration + x = xp; t = tp; + r = rp; Atr = Atrp; + Dvx = Dvxp; Dhx = Dhxp; + ft = ftp; fe1 = fe1p; fe2 = fe2p; f = fp; + + lambda2 = -(gradf'*[dx; dt]); + stepsize = s*norm([dx; dt]); + niter = niter + 1; + done = (lambda2/2 < newtontol) | (niter >= newtonmaxiter); + + disp(sprintf('Newton iter = %d, Functional = %8.3f, Newton decrement = %8.3f, Stepsize = %8.3e', ... + niter, f, lambda2/2, stepsize)); + if (largescale) + disp(sprintf(' CG Res = %8.3e, CG Iter = %d', cgres, cgiter)); + else + disp(sprintf(' H11p condition number = %8.3e', hcond)); + end + +end + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% H11p auxiliary function +function y = H11p(v, A, At, Dh, Dv, Dhx, Dvx, sigb, ft, siga) + +Dhv = Dh*v; +Dvv = Dv*v; + +y = Dh'*((-1./ft + sigb.*Dhx.^2).*Dhv + sigb.*Dhx.*Dvx.*Dvv) + ... + Dv'*((-1./ft + sigb.*Dvx.^2).*Dvv + sigb.*Dhx.*Dvx.*Dhv) + ... + At(A(siga.*At(A(v)))); + + diff --git a/Optimization/tveq_logbarrier.m b/Optimization/tveq_logbarrier.m new file mode 100644 index 0000000..617bf2e --- /dev/null +++ b/Optimization/tveq_logbarrier.m @@ -0,0 +1,118 @@ +% tveq_logbarrier.m +% +% Solve equality constrained TV minimization +% min TV(x) s.t. Ax=b. +% +% Recast as the SOCP +% min sum(t) s.t. ||D_{ij}x||_2 <= t, i,j=1,...,n +% Ax=b +% and use a log barrier algorithm. +% +% Usage: xp = tveq_logbarrier(x0, A, At, b, lbtol, mu, slqtol, slqmaxiter) +% +% x0 - Nx1 vector, initial point. +% +% A - Either a handle to a function that takes a N vector and returns a K +% vector , or a KxN matrix. If A is a function handle, the algorithm +% operates in "largescale" mode, solving the Newton systems via the +% Conjugate Gradients algorithm. +% +% At - Handle to a function that takes a K vector and returns an N vector. +% If A is a KxN matrix, At is ignored. +% +% b - Kx1 vector of observations. +% +% lbtol - The log barrier algorithm terminates when the duality gap <= lbtol. +% Also, the number of log barrier iterations is completely +% determined by lbtol. +% Default = 1e-3. +% +% mu - Factor by which to increase the barrier constant at each iteration. +% Default = 10. +% +% slqtol - Tolerance for SYMMLQ; ignored if A is a matrix. +% Default = 1e-8. +% +% slqmaxiter - Maximum number of iterations for SYMMLQ; ignored +% if A is a matrix. +% Default = 200. +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + +function xp = tveq_logbarrier(x0, A, At, b, lbtol, mu, slqtol, slqmaxiter) + +largescale = isa(A,'function_handle'); + +if (nargin < 5), lbtol = 1e-3; end +if (nargin < 6), mu = 10; end +if (nargin < 7), slqtol = 1e-8; end +if (nargin < 8), slqmaxiter = 200; end + +newtontol = lbtol; +newtonmaxiter = 50; + +N = length(x0); +n = round(sqrt(N)); + +% create (sparse) differencing matrices for TV +Dv = spdiags([reshape([-ones(n-1,n); zeros(1,n)],N,1) ... + reshape([zeros(1,n); ones(n-1,n)],N,1)], [0 1], N, N); +Dh = spdiags([reshape([-ones(n,n-1) zeros(n,1)],N,1) ... + reshape([zeros(n,1) ones(n,n-1)],N,1)], [0 n], N, N); + +% starting point --- make sure that it is feasible +if (largescale) + if (norm(A(x0)-b)/norm(b) > slqtol) + disp('Starting point infeasible; using x0 = At*inv(AAt)*y.'); + AAt = @(z) A(At(z)); + [w,cgres] = cgsolve(AAt, b, slqtol, slqmaxiter, 0); + if (cgres > 1/2) + disp('A*At is ill-conditioned: cannot find starting point'); + xp = x0; + return; + end + x0 = At(w); + end +else + if (norm(A*x0-b)/norm(b) > slqtol) + disp('Starting point infeasible; using x0 = At*inv(AAt)*y.'); + opts.POSDEF = true; opts.SYM = true; + [w, hcond] = linsolve(A*A', b, opts); + if (hcond < 1e-14) + disp('A*At is ill-conditioned: cannot find starting point'); + xp = x0; + return; + end + x0 = A'*w; + end +end +x = x0; +Dhx = Dh*x; Dvx = Dv*x; +t = (0.95)*sqrt(Dhx.^2 + Dvx.^2) + (0.1)*max(sqrt(Dhx.^2 + Dvx.^2)); + +% choose initial value of tau so that the duality gap after the first +% step will be about the origial TV +tau = N/sum(sqrt(Dhx.^2+Dvx.^2)); + +lbiter = ceil((log(N)-log(lbtol)-log(tau))/log(mu)); +disp(sprintf('Number of log barrier iterations = %d\n', lbiter)); +totaliter = 0; +for ii = 1:lbiter + + [xp, tp, ntiter] = tveq_newton(x, t, A, At, b, tau, newtontol, newtonmaxiter, slqtol, slqmaxiter); + totaliter = totaliter + ntiter; + + tvxp = sum(sqrt((Dh*xp).^2 + (Dv*xp).^2)); + disp(sprintf('\nLog barrier iter = %d, TV = %.3f, functional = %8.3f, tau = %8.3e, total newton iter = %d\n', ... + ii, tvxp, sum(tp), tau, totaliter)); + + x = xp; + t = tp; + + tau = mu*tau; + +end +
\ No newline at end of file diff --git a/Optimization/tveq_newton.m b/Optimization/tveq_newton.m new file mode 100644 index 0000000..9e71b73 --- /dev/null +++ b/Optimization/tveq_newton.m @@ -0,0 +1,180 @@ +% tveq_newton.m +% +% Newton algorithm for log-barrier subproblems for TV minimization +% with equality constraints. +% +% Usage: +% [xp,tp,niter] = tveq_newton(x0, t0, A, At, b, tau, +% newtontol, newtonmaxiter, slqtol, slqmaxiter) +% +% x0,t0 - starting points +% +% A - Either a handle to a function that takes a N vector and returns a K +% vector , or a KxN matrix. If A is a function handle, the algorithm +% operates in "largescale" mode, solving the Newton systems via the +% Conjugate Gradients algorithm. +% +% At - Handle to a function that takes a K vector and returns an N vector. +% If A is a KxN matrix, At is ignored. +% +% b - Kx1 vector of observations. +% +% tau - Log barrier parameter. +% +% newtontol - Terminate when the Newton decrement is <= newtontol. +% +% newtonmaxiter - Maximum number of iterations. +% +% slqtol - Tolerance for SYMMLQ; ignored if A is a matrix. +% +% slqmaxiter - Maximum number of iterations for SYMMLQ; ignored +% if A is a matrix. +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + +function [xp, tp, niter] = tveq_newton(x0, t0, A, At, b, tau, newtontol, newtonmaxiter, slqtol, slqmaxiter) + +largescale = isa(A,'function_handle'); + +alpha = 0.01; +beta = 0.5; + +N = length(x0); +n = round(sqrt(N)); +K = length(b); + +% create (sparse) differencing matrices for TV +Dv = spdiags([reshape([-ones(n-1,n); zeros(1,n)],N,1) ... + reshape([zeros(1,n); ones(n-1,n)],N,1)], [0 1], N, N); +Dh = spdiags([reshape([-ones(n,n-1) zeros(n,1)],N,1) ... + reshape([zeros(n,1) ones(n,n-1)],N,1)], [0 n], N, N); + +% auxillary matrices for preconditioning +Mdv = spdiags([reshape([ones(n-1,n); zeros(1,n)],N,1) ... + reshape([zeros(1,n); ones(n-1,n)],N,1)], [0 1], N, N); +Mdh = spdiags([reshape([ones(n,n-1) zeros(n,1)],N,1) ... + reshape([zeros(n,1) ones(n,n-1)],N,1)], [0 n], N, N); +Mmd = reshape([ones(n-1,n-1) zeros(n-1,1); zeros(1,n)],N,1); + + +% initial point +x = x0; +t = t0; +Dhx = Dh*x; Dvx = Dv*x; +ft = 1/2*(Dhx.^2 + Dvx.^2 - t.^2); +f = sum(t) - (1/tau)*(sum(log(-ft))); + +niter = 0; +done = 0; +while (~done) + + ntgx = Dh'*((1./ft).*Dhx) + Dv'*((1./ft).*Dvx); + ntgt = -tau - t./ft; + gradf = -(1/tau)*[ntgx; ntgt]; + + sig22 = 1./ft + (t.^2)./(ft.^2); + sig12 = -t./ft.^2; + sigb = 1./ft.^2 - (sig12.^2)./sig22; + + w1p = ntgx - Dh'*(Dhx.*(sig12./sig22).*ntgt) - Dv'*(Dvx.*(sig12./sig22).*ntgt); + wp = [w1p; zeros(K,1)]; + if (largescale) + % diagonal of H11p + dg11p = Mdh'*(-1./ft + sigb.*Dhx.^2) + Mdv'*(-1./ft + sigb.*Dvx.^2) + 2*Mmd.*sigb.*Dhx.*Dvx; + afac = max(dg11p); + hpfun = @(z) Hpeval(z, A, At, Dh, Dv, Dhx, Dvx, sigb, ft, afac); + [dxv,slqflag,slqres,slqiter] = symmlq(hpfun, wp, slqtol, slqmaxiter); + if (slqres > 1/2) + disp('Cannot solve system. Returning previous iterate. (See Section 4 of notes for more information.)'); + xp = x; + return + end + else + H11p = Dh'*sparse(diag(-1./ft + sigb.*Dhx.^2))*Dh + ... + Dv'*sparse(diag(-1./ft + sigb.*Dvx.^2))*Dv + ... + Dh'*sparse(diag(sigb.*Dhx.*Dvx))*Dv + ... + Dv'*sparse(diag(sigb.*Dhx.*Dvx))*Dh; + afac = max(diag(H11p)); + Hp = full([H11p afac*A'; afac*A zeros(K)]); + %keyboard + opts.SYM = true; + [dxv, hcond] = linsolve(Hp, wp, opts); + if (hcond < 1e-14) + disp('Matrix ill-conditioned. Returning previous iterate. (See Section 4 of notes for more information.)'); + xp = x; tp = t; + return + end + end + dx = dxv(1:N); + Dhdx = Dh*dx; Dvdx = Dv*dx; + dt = (1./sig22).*(ntgt - sig12.*(Dhx.*Dhdx + Dvx.*Dvdx)); + + % minimum step size that stays in the interior + aqt = Dhdx.^2 + Dvdx.^2 - dt.^2; + bqt = 2*(Dhdx.*Dhx + Dvdx.*Dvx - t.*dt); + cqt = Dhx.^2 + Dvx.^2 - t.^2; + tsols = [(-bqt+sqrt(bqt.^2-4*aqt.*cqt))./(2*aqt); ... + (-bqt-sqrt(bqt.^2-4*aqt.*cqt))./(2*aqt) ]; + indt = find([(bqt.^2 > 4*aqt.*cqt); (bqt.^2 > 4*aqt.*cqt)] & (tsols > 0)); + smax = min(1, min(tsols(indt))); + s = (0.99)*smax; + + % line search + suffdec = 0; + backiter = 0; + while (~suffdec) + xp = x + s*dx; tp = t + s*dt; + Dhxp = Dhx + s*Dhdx; Dvxp = Dvx + s*Dvdx; + ftp = 1/2*(Dhxp.^2 + Dvxp.^2 - tp.^2); + fp = sum(tp) - (1/tau)*(sum(log(-ftp))); + flin = f + alpha*s*(gradf'*[dx; dt]); + suffdec = (fp <= flin); + s = beta*s; + backiter = backiter + 1; + if (backiter > 32) + disp('Stuck backtracking, returning last iterate. (See Section 4 of notes for more information.)'); + xp = x; tp = t; + return + end + end + + % set up for next iteration + x = xp; t = tp; + Dvx = Dvxp; Dhx = Dhxp; + ft = ftp; f = fp; + + lambda2 = -(gradf'*[dx; dt]); + stepsize = s*norm([dx; dt]); + niter = niter + 1; + done = (lambda2/2 < newtontol) | (niter >= newtonmaxiter); + + disp(sprintf('Newton iter = %d, Functional = %8.3f, Newton decrement = %8.3f, Stepsize = %8.3e', ... + niter, f, lambda2/2, stepsize)); + if (largescale) + disp(sprintf(' SYMMLQ Res = %8.3e, SYMMLQ Iter = %d', slqres, slqiter)); + else + disp(sprintf(' H11p condition number = %8.3e', hcond)); + end + +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Implicit application of Hessian +function y = Hpeval(z, A, At, Dh, Dv, Dhx, Dvx, sigb, ft, afac) + +N = length(ft); +K = length(z)-N; +w = z(1:N); +v = z(N+1:N+K); + +Dhw = Dh*w; +Dvw = Dv*w; + +y1 = Dh'*((-1./ft + sigb.*Dhx.^2).*Dhw + sigb.*Dhx.*Dvx.*Dvw) + ... + Dv'*((-1./ft + sigb.*Dvx.^2).*Dvw + sigb.*Dhx.*Dvx.*Dhw) + afac*At(v); +y2 = afac*A(w); + +y = [y1; y2]; diff --git a/Optimization/tvqc_logbarrier.m b/Optimization/tvqc_logbarrier.m new file mode 100644 index 0000000..52cc6b1 --- /dev/null +++ b/Optimization/tvqc_logbarrier.m @@ -0,0 +1,121 @@ +% tvqc_logbarrier.m +% +% Solve quadractically constrained TV minimization +% min TV(x) s.t. ||Ax-b||_2 <= epsilon. +% +% Recast as the SOCP +% min sum(t) s.t. ||D_{ij}x||_2 <= t, i,j=1,...,n +% ||Ax - b||_2 <= epsilon +% and use a log barrier algorithm. +% +% Usage: xp = tvqc_logbarrier(x0, A, At, b, epsilon, lbtol, mu, cgtol, cgmaxiter) +% +% x0 - Nx1 vector, initial point. +% +% A - Either a handle to a function that takes a N vector and returns a K +% vector , or a KxN matrix. If A is a function handle, the algorithm +% operates in "largescale" mode, solving the Newton systems via the +% Conjugate Gradients algorithm. +% +% At - Handle to a function that takes a K vector and returns an N vector. +% If A is a KxN matrix, At is ignored. +% +% b - Kx1 vector of observations. +% +% epsilon - scalar, constraint relaxation parameter +% +% lbtol - The log barrier algorithm terminates when the duality gap <= lbtol. +% Also, the number of log barrier iterations is completely +% determined by lbtol. +% Default = 1e-3. +% +% mu - Factor by which to increase the barrier constant at each iteration. +% Default = 10. +% +% cgtol - Tolerance for Conjugate Gradients; ignored if A is a matrix. +% Default = 1e-8. +% +% cgmaxiter - Maximum number of iterations for Conjugate Gradients; ignored +% if A is a matrix. +% Default = 200. +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + + +function [xp, tp] = tvqc_logbarrier(x0, A, At, b, epsilon, lbtol, mu, cgtol, cgmaxiter) + +largescale = isa(A,'function_handle'); + +if (nargin < 6), lbtol = 1e-3; end +if (nargin < 7), mu = 10; end +if (nargin < 8), cgtol = 1e-8; end +if (nargin < 9), cgmaxiter = 200; end + +newtontol = lbtol; +newtonmaxiter = 50; + +N = length(x0); +n = round(sqrt(N)); + +% create (sparse) differencing matrices for TV +Dv = spdiags([reshape([-ones(n-1,n); zeros(1,n)],N,1) ... + reshape([zeros(1,n); ones(n-1,n)],N,1)], [0 1], N, N); +Dh = spdiags([reshape([-ones(n,n-1) zeros(n,1)],N,1) ... + reshape([zeros(n,1) ones(n,n-1)],N,1)], [0 n], N, N); + +% starting point --- make sure that it is feasible +if (largescale) + if (norm(A(x0)-b) > epsilon) + disp('Starting point infeasible; using x0 = At*inv(AAt)*y.'); + AAt = @(z) A(At(z)); + [w, cgres] = cgsolve(AAt, b, cgtol, cgmaxiter, 0); + if (cgres > 1/2) + disp('A*At is ill-conditioned: cannot find starting point'); + xp = x0; + return; + end + x0 = At(w); + end +else + if (norm(A*x0-b) > epsilon) + disp('Starting point infeasible; using x0 = At*inv(AAt)*y.'); + opts.POSDEF = true; opts.SYM = true; + [w, hcond] = linsolve(A*A', b, opts); + if (hcond < 1e-14) + disp('A*At is ill-conditioned: cannot find starting point'); + xp = x0; + return; + end + x0 = A'*w; + end +end +x = x0; +Dhx = Dh*x; Dvx = Dv*x; +t = (0.95)*sqrt(Dhx.^2 + Dvx.^2) + (0.1)*max(sqrt(Dhx.^2 + Dvx.^2)); + +% choose initial value of tau so that the duality gap after the first +% step will be about the origial TV +tau = (N+1)/sum(sqrt(Dhx.^2+Dvx.^2)); + +lbiter = ceil((log((N+1))-log(lbtol)-log(tau))/log(mu)); +disp(sprintf('Number of log barrier iterations = %d\n', lbiter)); +totaliter = 0; +for ii = 1:lbiter + + [xp, tp, ntiter] = tvqc_newton(x, t, A, At, b, epsilon, tau, newtontol, newtonmaxiter, cgtol, cgmaxiter); + totaliter = totaliter + ntiter; + + tvxp = sum(sqrt((Dh*xp).^2 + (Dv*xp).^2)); + disp(sprintf('\nLog barrier iter = %d, TV = %.3f, functional = %8.3f, tau = %8.3e, total newton iter = %d\n', ... + ii, tvxp, sum(tp), tau, totaliter)); + + x = xp; + t = tp; + + tau = mu*tau; + +end + diff --git a/Optimization/tvqc_newton.m b/Optimization/tvqc_newton.m new file mode 100644 index 0000000..febe8ff --- /dev/null +++ b/Optimization/tvqc_newton.m @@ -0,0 +1,176 @@ +% tvqc_newton.m +% +% Newton algorithm for log-barrier subproblems for TV minimization +% with quadratic constraints. +% +% Usage: +% [xp,tp,niter] = tvqc_newton(x0, t0, A, At, b, epsilon, tau, +% newtontol, newtonmaxiter, cgtol, cgmaxiter) +% +% x0,t0 - starting points +% +% A - Either a handle to a function that takes a N vector and returns a K +% vector , or a KxN matrix. If A is a function handle, the algorithm +% operates in "largescale" mode, solving the Newton systems via the +% Conjugate Gradients algorithm. +% +% At - Handle to a function that takes a K vector and returns an N vector. +% If A is a KxN matrix, At is ignored. +% +% b - Kx1 vector of observations. +% +% epsilon - scalar, constraint relaxation parameter +% +% tau - Log barrier parameter. +% +% newtontol - Terminate when the Newton decrement is <= newtontol. +% +% newtonmaxiter - Maximum number of iterations. +% +% cgtol - Tolerance for Conjugate Gradients; ignored if A is a matrix. +% +% cgmaxiter - Maximum number of iterations for Conjugate Gradients; ignored +% if A is a matrix. +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + +function [xp, tp, niter] = tvqc_newton(x0, t0, A, At, b, epsilon, tau, newtontol, newtonmaxiter, cgtol, cgmaxiter) + +largescale = isa(A,'function_handle'); + +alpha = 0.01; +beta = 0.5; + +N = length(x0); +n = round(sqrt(N)); + +% create (sparse) differencing matrices for TV +Dv = spdiags([reshape([-ones(n-1,n); zeros(1,n)],N,1) ... + reshape([zeros(1,n); ones(n-1,n)],N,1)], [0 1], N, N); +Dh = spdiags([reshape([-ones(n,n-1) zeros(n,1)],N,1) ... + reshape([zeros(n,1) ones(n,n-1)],N,1)], [0 n], N, N); + +if (~largescale), AtA = A'*A; end; + +% initial point +x = x0; +t = t0; +if (largescale), r = A(x) - b; else r = A*x - b; end +Dhx = Dh*x; Dvx = Dv*x; +ft = 1/2*(Dhx.^2 + Dvx.^2 - t.^2); +fe = 1/2*(r'*r - epsilon^2); +f = sum(t) - (1/tau)*(sum(log(-ft)) + log(-fe)); + +niter = 0; +done = 0; +while (~done) + + if (largescale), Atr = At(r); else Atr = A'*r; end + ntgx = Dh'*((1./ft).*Dhx) + Dv'*((1./ft).*Dvx) + 1/fe*Atr; + ntgt = -tau - t./ft; + gradf = -(1/tau)*[ntgx; ntgt]; + + sig22 = 1./ft + (t.^2)./(ft.^2); + sig12 = -t./ft.^2; + sigb = 1./ft.^2 - (sig12.^2)./sig22; + + w1p = ntgx - Dh'*(Dhx.*(sig12./sig22).*ntgt) - Dv'*(Dvx.*(sig12./sig22).*ntgt); + if (largescale) + h11pfun = @(z) H11p(z, A, At, Dh, Dv, Dhx, Dvx, sigb, ft, fe, Atr); + [dx, cgres, cgiter] = cgsolve(h11pfun, w1p, cgtol, cgmaxiter, 0); + if (cgres > 1/2) + disp('Cannot solve system. Returning previous iterate. (See Section 4 of notes for more information.)'); + xp = x; tp = t; + return + end + Adx = A(dx); + else + H11p = Dh'*sparse(diag(-1./ft + sigb.*Dhx.^2))*Dh + ... + Dv'*sparse(diag(-1./ft + sigb.*Dvx.^2))*Dv + ... + Dh'*sparse(diag(sigb.*Dhx.*Dvx))*Dv + ... + Dv'*sparse(diag(sigb.*Dhx.*Dvx))*Dh - ... + (1/fe)*AtA + (1/fe^2)*Atr*Atr'; + opts.POSDEF = true; opts.SYM = true; + [dx,hcond] = linsolve(H11p, w1p, opts); + if (hcond < 1e-14) + disp('Matrix ill-conditioned. Returning previous iterate. (See Section 4 of notes for more information.)'); + xp = x; tp = t; + return + end + Adx = A*dx; + end + Dhdx = Dh*dx; Dvdx = Dv*dx; + dt = (1./sig22).*(ntgt - sig12.*(Dhx.*Dhdx + Dvx.*Dvdx)); + + % minimum step size that stays in the interior + aqt = Dhdx.^2 + Dvdx.^2 - dt.^2; + bqt = 2*(Dhdx.*Dhx + Dvdx.*Dvx - t.*dt); + cqt = Dhx.^2 + Dvx.^2 - t.^2; + tsols = [(-bqt+sqrt(bqt.^2-4*aqt.*cqt))./(2*aqt); ... + (-bqt-sqrt(bqt.^2-4*aqt.*cqt))./(2*aqt) ]; + indt = find([(bqt.^2 > 4*aqt.*cqt); (bqt.^2 > 4*aqt.*cqt)] & (tsols > 0)); + aqe = Adx'*Adx; bqe = 2*r'*Adx; cqe = r'*r - epsilon^2; + smax = min(1,min([... + tsols(indt); ... + (-bqe+sqrt(bqe^2-4*aqe*cqe))/(2*aqe) + ])); + s = (0.99)*smax; + + % backtracking line search + suffdec = 0; + backiter = 0; + while (~suffdec) + xp = x + s*dx; tp = t + s*dt; + rp = r + s*Adx; Dhxp = Dhx + s*Dhdx; Dvxp = Dvx + s*Dvdx; + ftp = 1/2*(Dhxp.^2 + Dvxp.^2 - tp.^2); + fep = 1/2*(rp'*rp - epsilon^2); + fp = sum(tp) - (1/tau)*(sum(log(-ftp)) + log(-fep)); + flin = f + alpha*s*(gradf'*[dx; dt]); + suffdec = (fp <= flin); + s = beta*s; + backiter = backiter + 1; + if (backiter > 32) + disp('Stuck on backtracking line search, returning previous iterate. (See Section 4 of notes for more information.)'); + xp = x; tp = t; + return + end + end + + % set up for next iteration + x = xp; t = tp; + r = rp; Dvx = Dvxp; Dhx = Dhxp; + ft = ftp; fe = fep; f = fp; + + lambda2 = -(gradf'*[dx; dt]); + stepsize = s*norm([dx; dt]); + niter = niter + 1; + done = (lambda2/2 < newtontol) | (niter >= newtonmaxiter); + + disp(sprintf('Newton iter = %d, Functional = %8.3f, Newton decrement = %8.3f, Stepsize = %8.3e', ... + niter, f, lambda2/2, stepsize)); + if (largescale) + disp(sprintf(' CG Res = %8.3e, CG Iter = %d', cgres, cgiter)); + else + disp(sprintf(' H11p condition number = %8.3e', hcond)); + end + +end + + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% H11p auxiliary function +function y = H11p(v, A, At, Dh, Dv, Dhx, Dvx, sigb, ft, fe, atr) + +Dhv = Dh*v; +Dvv = Dv*v; + +y = Dh'*((-1./ft + sigb.*Dhx.^2).*Dhv + sigb.*Dhx.*Dvx.*Dvv) + ... + Dv'*((-1./ft + sigb.*Dvx.^2).*Dvv + sigb.*Dhx.*Dvx.*Dhv) - ... + 1/fe*At(A(v)) + 1/fe^2*(atr'*v)*atr; + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -0,0 +1,31 @@ + + +l1 magic +-------- + +This package contains code for solving seven optimization problems. A detailed explanation is given in the file l1magic.pdf. + +The main directory contains MATLAB m-files which contain simple examples for each of the recovery problems. They illustrate how the code should be used (it is fairly straightforward). The prefixes on the example files are as follows: +"l1eq" = L1 minimization with equality constraints, +"l1qc" = L1 minimization with quadratic (L2 norm) constraints, +"l1decode" = L1 norm approximation (for channel decoding), +"11dantzig" = L1 minimization with minimal residual correlation (the Dantzig selector). +"tveq" = TV minimization with equality constraints, +"tvqc" = TV minimization with quadratic constrains, +"tvdantzig" = TV minimization with minimal residual correlation. + +The 'Optimization' directory contains the m-files for the actual interior-point optimization algorithms. + +The 'Measurements' directory contains implementations of some relevant large-scale measurement matrices that are used in the examples. + +The 'Data' directory contains test images for the examples. + +The code will only run on MATLAB 7.0 and higher. The incompatibility with previous versions comes from the way function handles are used. + +If you have questions or comments, please contact +Justin Romberg +Caltech, Applied and Computational Mathematics, jrom@acm.caltech.edu + + + + diff --git a/l1dantzig_example.m b/l1dantzig_example.m new file mode 100644 index 0000000..0de90e1 --- /dev/null +++ b/l1dantzig_example.m @@ -0,0 +1,57 @@ +% l1dantzig_example.m +% +% Test out l1dantzig code (l1 minimization with bounded residual correlation). +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + +% put optimization code in path if not already there +path(path, './Optimization'); + +% signal length +N = 512; + +% number of spikes to put down +T = 20; + +% number of observations to make +K = 120; + +% random +/- 1 signal +x = zeros(N,1); +q = randperm(N); +x(q(1:T)) = sign(randn(T,1)); + +% measurement matrix = random projection +disp('Creating measurment matrix...'); +A = randn(K,N); +A = orth(A')'; +disp('Done.'); + +% noisy observations +sigma = 0.005; +e = sigma*randn(K,1); +y = A*x + e; + +% initial guess = min energy +x0 = A'*y; + +% Dantzig selection +epsilon = 3e-3; +tic +xp = l1dantzig_pd(x0, A, [], y, epsilon, 5e-2); +toc + + +% large scale +% Afun = @(z) A*z; +% Atfun = @(z) A'*z; +% tic +% xp = l1dantzig_pd(x0, Afun, Atfun, y, epsilon, 5e-2, 50, 1e-8, 500); +% toc + + + + diff --git a/l1decode_example.m b/l1decode_example.m new file mode 100644 index 0000000..dd93302 --- /dev/null +++ b/l1decode_example.m @@ -0,0 +1,42 @@ +% l1decode_example.m +% +% Test out l1decode code. +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + +path(path, './Optimization'); + +% source length +N = 256; + +% codeword length +M = 4*N; + +% number of perturbations +T = round(.2*M); + +% coding matrix +G = randn(M,N); + +% source word +x = randn(N,1); + +% code word +c = G*x; + +% channel: perturb T randomly chosen entries +q = randperm(M); +y = c; +y(q(1:T)) = randn(T,1); + +% recover +x0 = inv(G'*G)*G'*y; +xp = l1decode_pd(x0, G, [], y, 1e-4, 30); + +% large scale +% gfun = @(z) G*z; +% gtfun = @(z) G'*z; +% xp = l1decode_pd(x0, gfun, gtfun, y, 1e-3, 25, 1e-8, 200); diff --git a/l1eq_example.m b/l1eq_example.m new file mode 100644 index 0000000..d67cf6f --- /dev/null +++ b/l1eq_example.m @@ -0,0 +1,58 @@ +% l1eq_example.m +% +% Test out l1eq code (l1 minimization with equality constraints). +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + +% put key subdirectories in path if not already there +path(path, './Optimization'); +path(path, './Data'); + +% To reproduce the example in the documentation, uncomment the +% two lines below +%load RandomStates +%rand('state', rand_state); +%randn('state', randn_state); + +% signal length +N = 512; +% number of spikes in the signal +T = 20; +% number of observations to make +K = 120; + +% random +/- 1 signal +x = zeros(N,1); +q = randperm(N); +x(q(1:T)) = sign(randn(T,1)); + +% measurement matrix +disp('Creating measurment matrix...'); +A = randn(K,N); +A = orth(A')'; +disp('Done.'); + +% observations +y = A*x; + +% initial guess = min energy +x0 = A'*y; + +% solve the LP +tic +xp = l1eq_pd(x0, A, [], y, 1e-3); +toc + +% large scale +% Afun = @(z) A*z; +% Atfun = @(z) A'*z; +% tic +% xp = l1eq_pd(x0, Afun, Atfun, y, 1e-3, 30, 1e-8, 200); +% toc + + + + diff --git a/l1qc_example.m b/l1qc_example.m new file mode 100644 index 0000000..6c2d9a9 --- /dev/null +++ b/l1qc_example.m @@ -0,0 +1,57 @@ +% l1qc_example.m +% +% Test out l1qc code (l1 minimization with quadratic constraint). +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + +% put optimization code in path if not already there +path(path, './Optimization'); + +% signal length +N = 512; + +% number of spikes to put down +T = 20; + +% number of observations to make +K = 120; + +% random +/- 1 signal +x = zeros(N,1); +q = randperm(N); +x(q(1:T)) = sign(randn(T,1)); + +% measurement matrix +disp('Creating measurment matrix...'); +A = randn(K,N); +A = orth(A')'; +disp('Done.'); + +% noisy observations +sigma = 0.005; +e = sigma*randn(K,1); +y = A*x + e; + +% initial guess = min energy +x0 = A'*y; + +% take epsilon a little bigger than sigma*sqrt(K) +epsilon = sigma*sqrt(K)*sqrt(1 + 2*sqrt(2)/sqrt(K)); + +tic +xp = l1qc_logbarrier(x0, A, [], y, epsilon, 1e-3); +toc + +% large scale +% Afun = @(z) A*z; +% Atfun = @(z) A'*z; +% tic +% xp = l1qc_logbarrier(x0, Afun, Atfun, y, epsilon, 1e-3, 50, 1e-8, 500); +% toc + + + + diff --git a/tvdantzig_example.m b/tvdantzig_example.m new file mode 100644 index 0000000..f169594 --- /dev/null +++ b/tvdantzig_example.m @@ -0,0 +1,72 @@ +% tvdantzig_example.m +% +% Test out tvdantzig code (TV minimization with bounded residual correlation). +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + +% use implicit, matrix-free algorithms ? +largescale = 0; + +path(path, './Optimization'); +path(path, './Measurements'); +path(path, './Data'); + + +% test image = 32x32 piece of cameraman's arm +load camera +I = camera(81:112,37:68); +n = 32; +N = n*n; +I = I/norm(I(:)); +I = I - mean(I(:)); +x = reshape(I,N,1); + + +% num obs +K = 300; + +% permutation P and observation set OMEGA +P = randperm(N)'; +q = randperm(N/2-1)+1; +OMEGA = q(1:K/2)'; + + + +% measurement matrix +if (largescale) + A = @(z) A_f(z, OMEGA, P); + At = @(z) At_f(z, N, OMEGA, P); + % obsevations + b = A(x); + % initial point + x0 = At(b); +else + FT = 1/sqrt(N)*fft(eye(N)); + A = sqrt(2)*[real(FT(OMEGA,:)); imag(FT(OMEGA,:))]; + A = [1/sqrt(N)*ones(1,N); A]; + At = []; + % observations + b = A*x; + % initial point + x0 = A'*b; +end + + +epsilon = 5e-3; + + + +tvI = sum(sum(sqrt([diff(I,1,2) zeros(n,1)].^2 + [diff(I,1,1); zeros(1,n)].^2 ))); +disp(sprintf('Original TV = %.3f', tvI)); + +time0 = clock; +xp = tvdantzig_logbarrier(x0, A, At, b, epsilon, 1e-3, 5, 1e-8, 1500); +Ip = reshape(xp, n, n); +disp(sprintf('Total elapsed time = %f secs\n', etime(clock,time0))); + + + + diff --git a/tveq_example.m b/tveq_example.m new file mode 100644 index 0000000..b3fd770 --- /dev/null +++ b/tveq_example.m @@ -0,0 +1,67 @@ +% tveq_example.m +% +% Test out tveq code (TV minimization with equality constraints). +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + +% use implicit, matrix-free algorithms ? +largescale = 0; + +path(path, './Optimization'); +path(path, './Measurements'); +path(path, './Data'); + + +% test image = 32x32 piece of cameraman's arm +load camera +I = camera(81:112,37:68); +n = 32; +N = n*n; +I = I/norm(I(:)); +I = I - mean(I(:)); +x = reshape(I,N,1); + + +% num obs +K = 300; + +% permutation P and observation set OMEGA +P = randperm(N)'; +q = randperm(N/2-1)+1; +OMEGA = q(1:K/2)'; + + + +% measurement matrix +if (largescale) + A = @(z) A_f(z, OMEGA, P); + At = @(z) At_f(z, N, OMEGA, P); + % obsevations + b = A(x); + % initial point + x0 = At(b); +else + FT = 1/sqrt(N)*fft(eye(N)); + A = sqrt(2)*[real(FT(OMEGA,:)); imag(FT(OMEGA,:))]; + A = [1/sqrt(N)*ones(1,N); A]; + At = []; + % observations + b = A*x; + % initial point + x0 = A'*b; +end + +tvI = sum(sum(sqrt([diff(I,1,2) zeros(n,1)].^2 + [diff(I,1,1); zeros(1,n)].^2 ))); +disp(sprintf('Original TV = %.3f', tvI)); + +time0 = clock; +xp = tveq_logbarrier(x0, A, At, b, 1e-3, 5, 1e-8, 200); +Ip = reshape(xp, n, n); +disp(sprintf('Total elapsed time = %f secs\n', etime(clock,time0))); + + + + diff --git a/tveq_phantom_example.m b/tveq_phantom_example.m new file mode 100644 index 0000000..0439a00 --- /dev/null +++ b/tveq_phantom_example.m @@ -0,0 +1,45 @@ +% tveq_phantom_example.m +% +% Phantom reconstruction from samples on 22 radial lines in the Fourier +% plane. +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + + +path(path, './Optimization'); +path(path, './Measurements'); +path(path, './Data'); + + +% Phantom +n = 256; +N = n*n; +X = phantom(n); +x = X(:); + +% number of radial lines in the Fourier domain +L = 22; + +% Fourier samples we are given +[M,Mh,mh,mhi] = LineMask(L,n); +OMEGA = mhi; +A = @(z) A_fhp(z, OMEGA); +At = @(z) At_fhp(z, OMEGA, n); + +% measurements +y = A(x); + +% min l2 reconstruction (backprojection) +xbp = At(y); +Xbp = reshape(xbp,n,n); + +% recovery +tic +tvI = sum(sum(sqrt([diff(X,1,2) zeros(n,1)].^2 + [diff(X,1,1); zeros(1,n)].^2 ))); +disp(sprintf('Original TV = %8.3f', tvI)); +xp = tveq_logbarrier(xbp, A, At, y, 1e-1, 2, 1e-8, 600); +Xtv = reshape(xp, n, n); +toc diff --git a/tvqc_example.m b/tvqc_example.m new file mode 100644 index 0000000..2116f34 --- /dev/null +++ b/tvqc_example.m @@ -0,0 +1,71 @@ +% tvqc_example.m +% +% Test out tvqc code (TV minimization with quadratic constraint). +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + +% use implicit, matrix-free algorithms ? +largescale = 0; + +path(path, './Optimization'); +path(path, './Measurements'); +path(path, './Data'); + + +% test image = 32x32 piece of cameraman's arm +load camera +I = camera(81:112,37:68); +n = 32; +N = n*n; +I = I/norm(I(:)); +I = I - mean(I(:)); +x = reshape(I,N,1); + + +% num obs +K = 300; + +% permutation P and observation set OMEGA +P = randperm(N)'; +q = randperm(N/2-1)+1; +OMEGA = q(1:K/2)'; + + + +% measurement matrix +if (largescale) + A = @(z) A_f(z, OMEGA, P); + At = @(z) At_f(z, N, OMEGA, P); + % obsevations + b = A(x); + % initial point + x0 = At(b); +else + FT = 1/sqrt(N)*fft(eye(N)); + A = sqrt(2)*[real(FT(OMEGA,:)); imag(FT(OMEGA,:))]; + A = [1/sqrt(N)*ones(1,N); A]; + At = []; + % observations + b = A*x; + % initial point + x0 = A'*b; +end + + +epsilon = 5e-3; + + +tvI = sum(sum(sqrt([diff(I,1,2) zeros(n,1)].^2 + [diff(I,1,1); zeros(1,n)].^2 ))); +disp(sprintf('Original TV = %.3f', tvI)); + +time0 = clock; +xp = tvqc_logbarrier(x0, A, At, b, epsilon, 1e-3, 5, 1e-8, 200); +Ip = reshape(xp, n, n); +disp(sprintf('Total elapsed time = %f secs\n', etime(clock,time0))); + + + + diff --git a/tvqc_quantization_example.m b/tvqc_quantization_example.m new file mode 100644 index 0000000..c9204a9 --- /dev/null +++ b/tvqc_quantization_example.m @@ -0,0 +1,67 @@ +% tvqc_quantization_example.m +% +% Takes random measurements of the 'boats' image, quantizes, and +% reconstructs using quadractically constrained TV. +% +% Written by: Justin Romberg, Caltech +% Email: jrom@acm.caltech.edu +% Created: October 2005 +% + +path(path, './Optimization'); +path(path, './Measurements'); +path(path, './Data'); + +% boats +n = 256; +N = n*n; +load boats +img = boats; +I = img/norm(img(:)); +I = I - mean(I(:)); +x = reshape(I,N,1); + +% num obs +K = 25000; + +% permutation P and observation set OMEGA +P = randperm(N)'; +q = randperm(N/2-1)+1; +OMEGA = q(1:K/2)'; + +% measurement implicit matrices +A = @(z) A_f(z, OMEGA, P); +At = @(z) At_f(z, N, OMEGA, P); + +% take measurements +Ax = A(x); +% quantization codebook +mxax = max(abs(Ax)); +bins = 10; +C = 2*mxax*(linspace(1/(2*bins),1-1/(2*bins),bins)-1/2); +% quantize +b = zeros(K,1); +symbols = zeros(K,1); +for kk = 1:K + [mn,mni] = min(abs(Ax(kk)-C)); + b(kk) = C(mni); + symbols(kk) = mni; +end +% error (just for future reference) +e = b - Ax; + +% the error should be roughly this size +epsilon = (2*mxax/bins)/sqrt(12)*sqrt(K); + + +% initial point = min l2 +x0 = At(b); + + +tvI = sum(sum(sqrt([diff(I,1,2) zeros(n,1)].^2 + [diff(I,1,1); zeros(1,n)].^2 ))); +disp(sprintf('original TV = %8.3f', tvI)); + +time0 = clock; +xp = tvqc_logbarrier(x0, A, At, b, epsilon, 1e-1, 5); +Ip = reshape(xp, n, n); +disp(sprintf('Total elapsed time = %f secs\n', etime(clock,time0))); |