diff options
| author | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2025-05-05 12:40:42 -0400 |
|---|---|---|
| committer | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2025-05-05 12:40:42 -0400 |
| commit | bae3f3b8301e8d13163f27c1e845302b9b65009d (patch) | |
| tree | e63c306575ee55a30767ff3e08515b3cf200cf8a | |
| parent | b1ed855ea65d7c080e9c7921e00eddde4baf9f1b (diff) | |
Matlab files for HW10 & HW11
78 files changed, 5551 insertions, 0 deletions
diff --git a/MATLAB/HW10/data.csv b/MATLAB/HW10/data.csv new file mode 100644 index 0000000..92d0d4e --- /dev/null +++ b/MATLAB/HW10/data.csv @@ -0,0 +1,2049 @@ +Sawtooth,Triangle,Square,Sawtooth 125Hz,Square 125Hz,time,sawtooth 250Hz +0,0,0,0,0,0,0 +1,1,0,4,0,125,8 +2,2,0,8,0,250,16 +3,3,0,12,0,375,24 +4,4,0,16,0,500,32 +5,5,0,20,0,625,40 +6,6,0,24,0,750,48 +7,7,0,28,0,875,56 +8,8,0,32,0,1000,64 +9,9,0,36,0,1125,72 +10,10,0,40,0,1250,80 +11,11,0,44,0,1375,88 +12,12,0,48,0,1500,96 +13,13,0,52,0,1625,104 +14,14,0,56,0,1750,112 +15,15,0,60,0,1875,120 +16,16,0,64,0,2000,128 +17,17,0,68,0,2125,136 +18,18,0,72,0,2250,144 +19,19,0,76,0,2375,152 +20,20,0,80,0,2500,160 +21,21,0,84,0,2625,168 +22,22,0,88,0,2750,176 +23,23,0,92,0,2875,184 +24,24,0,96,0,3000,192 +25,25,0,100,0,3125,200 +26,26,0,104,0,3250,208 +27,27,0,108,0,3375,216 +28,28,0,112,0,3500,224 +29,29,0,116,0,3625,232 +30,30,0,120,0,3750,240 +31,31,0,124,0,3875,248 +32,32,0,128,255,4000,0 +33,33,0,132,255,4125,8 +34,34,0,136,255,4250,16 +35,35,0,140,255,4375,24 +36,36,0,144,255,4500,32 +37,37,0,148,255,4625,40 +38,38,0,152,255,4750,48 +39,39,0,156,255,4875,56 +40,40,0,160,255,5000,64 +41,41,0,164,255,5125,72 +42,42,0,168,255,5250,80 +43,43,0,172,255,5375,88 +44,44,0,176,255,5500,96 +45,45,0,180,255,5625,104 +46,46,0,184,255,5750,112 +47,47,0,188,255,5875,120 +48,48,0,192,255,6000,128 +49,49,0,196,255,6125,136 +50,50,0,200,255,6250,144 +51,51,0,204,255,6375,152 +52,52,0,208,255,6500,160 +53,53,0,212,255,6625,168 +54,54,0,216,255,6750,176 +55,55,0,220,255,6875,184 +56,56,0,224,255,7000,192 +57,57,0,228,255,7125,200 +58,58,0,232,255,7250,208 +59,59,0,236,255,7375,216 +60,60,0,240,255,7500,224 +61,61,0,244,255,7625,232 +62,62,0,248,255,7750,240 +63,63,0,252,255,7875,248 +64,64,0,0,0,8000,0 +65,65,0,4,0,8125,8 +66,66,0,8,0,8250,16 +67,67,0,12,0,8375,24 +68,68,0,16,0,8500,32 +69,69,0,20,0,8625,40 +70,70,0,24,0,8750,48 +71,71,0,28,0,8875,56 +72,72,0,32,0,9000,64 +73,73,0,36,0,9125,72 +74,74,0,40,0,9250,80 +75,75,0,44,0,9375,88 +76,76,0,48,0,9500,96 +77,77,0,52,0,9625,104 +78,78,0,56,0,9750,112 +79,79,0,60,0,9875,120 +80,80,0,64,0,10000,128 +81,81,0,68,0,10125,136 +82,82,0,72,0,10250,144 +83,83,0,76,0,10375,152 +84,84,0,80,0,10500,160 +85,85,0,84,0,10625,168 +86,86,0,88,0,10750,176 +87,87,0,92,0,10875,184 +88,88,0,96,0,11000,192 +89,89,0,100,0,11125,200 +90,90,0,104,0,11250,208 +91,91,0,108,0,11375,216 +92,92,0,112,0,11500,224 +93,93,0,116,0,11625,232 +94,94,0,120,0,11750,240 +95,95,0,124,0,11875,248 +96,96,0,128,255,12000,0 +97,97,0,132,255,12125,8 +98,98,0,136,255,12250,16 +99,99,0,140,255,12375,24 +100,100,0,144,255,12500,32 +101,101,0,148,255,12625,40 +102,102,0,152,255,12750,48 +103,103,0,156,255,12875,56 +104,104,0,160,255,13000,64 +105,105,0,164,255,13125,72 +106,106,0,168,255,13250,80 +107,107,0,172,255,13375,88 +108,108,0,176,255,13500,96 +109,109,0,180,255,13625,104 +110,110,0,184,255,13750,112 +111,111,0,188,255,13875,120 +112,112,0,192,255,14000,128 +113,113,0,196,255,14125,136 +114,114,0,200,255,14250,144 +115,115,0,204,255,14375,152 +116,116,0,208,255,14500,160 +117,117,0,212,255,14625,168 +118,118,0,216,255,14750,176 +119,119,0,220,255,14875,184 +120,120,0,224,255,15000,192 +121,121,0,228,255,15125,200 +122,122,0,232,255,15250,208 +123,123,0,236,255,15375,216 +124,124,0,240,255,15500,224 +125,125,0,244,255,15625,232 +126,126,0,248,255,15750,240 +127,127,0,252,255,15875,248 +128,128,0,0,0,16000,0 +129,129,0,4,0,16125,8 +130,130,0,8,0,16250,16 +131,131,0,12,0,16375,24 +132,132,0,16,0,16500,32 +133,133,0,20,0,16625,40 +134,134,0,24,0,16750,48 +135,135,0,28,0,16875,56 +136,136,0,32,0,17000,64 +137,137,0,36,0,17125,72 +138,138,0,40,0,17250,80 +139,139,0,44,0,17375,88 +140,140,0,48,0,17500,96 +141,141,0,52,0,17625,104 +142,142,0,56,0,17750,112 +143,143,0,60,0,17875,120 +144,144,0,64,0,18000,128 +145,145,0,68,0,18125,136 +146,146,0,72,0,18250,144 +147,147,0,76,0,18375,152 +148,148,0,80,0,18500,160 +149,149,0,84,0,18625,168 +150,150,0,88,0,18750,176 +151,151,0,92,0,18875,184 +152,152,0,96,0,19000,192 +153,153,0,100,0,19125,200 +154,154,0,104,0,19250,208 +155,155,0,108,0,19375,216 +156,156,0,112,0,19500,224 +157,157,0,116,0,19625,232 +158,158,0,120,0,19750,240 +159,159,0,124,0,19875,248 +160,160,0,128,255,20000,0 +161,161,0,132,255,20125,8 +162,162,0,136,255,20250,16 +163,163,0,140,255,20375,24 +164,164,0,144,255,20500,32 +165,165,0,148,255,20625,40 +166,166,0,152,255,20750,48 +167,167,0,156,255,20875,56 +168,168,0,160,255,21000,64 +169,169,0,164,255,21125,72 +170,170,0,168,255,21250,80 +171,171,0,172,255,21375,88 +172,172,0,176,255,21500,96 +173,173,0,180,255,21625,104 +174,174,0,184,255,21750,112 +175,175,0,188,255,21875,120 +176,176,0,192,255,22000,128 +177,177,0,196,255,22125,136 +178,178,0,200,255,22250,144 +179,179,0,204,255,22375,152 +180,180,0,208,255,22500,160 +181,181,0,212,255,22625,168 +182,182,0,216,255,22750,176 +183,183,0,220,255,22875,184 +184,184,0,224,255,23000,192 +185,185,0,228,255,23125,200 +186,186,0,232,255,23250,208 +187,187,0,236,255,23375,216 +188,188,0,240,255,23500,224 +189,189,0,244,255,23625,232 +190,190,0,248,255,23750,240 +191,191,0,252,255,23875,248 +192,192,0,0,0,24000,0 +193,193,0,4,0,24125,8 +194,194,0,8,0,24250,16 +195,195,0,12,0,24375,24 +196,196,0,16,0,24500,32 +197,197,0,20,0,24625,40 +198,198,0,24,0,24750,48 +199,199,0,28,0,24875,56 +200,200,0,32,0,25000,64 +201,201,0,36,0,25125,72 +202,202,0,40,0,25250,80 +203,203,0,44,0,25375,88 +204,204,0,48,0,25500,96 +205,205,0,52,0,25625,104 +206,206,0,56,0,25750,112 +207,207,0,60,0,25875,120 +208,208,0,64,0,26000,128 +209,209,0,68,0,26125,136 +210,210,0,72,0,26250,144 +211,211,0,76,0,26375,152 +212,212,0,80,0,26500,160 +213,213,0,84,0,26625,168 +214,214,0,88,0,26750,176 +215,215,0,92,0,26875,184 +216,216,0,96,0,27000,192 +217,217,0,100,0,27125,200 +218,218,0,104,0,27250,208 +219,219,0,108,0,27375,216 +220,220,0,112,0,27500,224 +221,221,0,116,0,27625,232 +222,222,0,120,0,27750,240 +223,223,0,124,0,27875,248 +224,224,0,128,255,28000,0 +225,225,0,132,255,28125,8 +226,226,0,136,255,28250,16 +227,227,0,140,255,28375,24 +228,228,0,144,255,28500,32 +229,229,0,148,255,28625,40 +230,230,0,152,255,28750,48 +231,231,0,156,255,28875,56 +232,232,0,160,255,29000,64 +233,233,0,164,255,29125,72 +234,234,0,168,255,29250,80 +235,235,0,172,255,29375,88 +236,236,0,176,255,29500,96 +237,237,0,180,255,29625,104 +238,238,0,184,255,29750,112 +239,239,0,188,255,29875,120 +240,240,0,192,255,30000,128 +241,241,0,196,255,30125,136 +242,242,0,200,255,30250,144 +243,243,0,204,255,30375,152 +244,244,0,208,255,30500,160 +245,245,0,212,255,30625,168 +246,246,0,216,255,30750,176 +247,247,0,220,255,30875,184 +248,248,0,224,255,31000,192 +249,249,0,228,255,31125,200 +250,250,0,232,255,31250,208 +251,251,0,236,255,31375,216 +252,252,0,240,255,31500,224 +253,253,0,244,255,31625,232 +254,254,0,248,255,31750,240 +255,255,0,252,255,31875,248 +0,255,255,0,0,32000,0 +1,254,255,4,0,32125,8 +2,253,255,8,0,32250,16 +3,252,255,12,0,32375,24 +4,251,255,16,0,32500,32 +5,250,255,20,0,32625,40 +6,249,255,24,0,32750,48 +7,248,255,28,0,32875,56 +8,247,255,32,0,33000,64 +9,246,255,36,0,33125,72 +10,245,255,40,0,33250,80 +11,244,255,44,0,33375,88 +12,243,255,48,0,33500,96 +13,242,255,52,0,33625,104 +14,241,255,56,0,33750,112 +15,240,255,60,0,33875,120 +16,239,255,64,0,34000,128 +17,238,255,68,0,34125,136 +18,237,255,72,0,34250,144 +19,236,255,76,0,34375,152 +20,235,255,80,0,34500,160 +21,234,255,84,0,34625,168 +22,233,255,88,0,34750,176 +23,232,255,92,0,34875,184 +24,231,255,96,0,35000,192 +25,230,255,100,0,35125,200 +26,229,255,104,0,35250,208 +27,228,255,108,0,35375,216 +28,227,255,112,0,35500,224 +29,226,255,116,0,35625,232 +30,225,255,120,0,35750,240 +31,224,255,124,0,35875,248 +32,223,255,128,255,36000,0 +33,222,255,132,255,36125,8 +34,221,255,136,255,36250,16 +35,220,255,140,255,36375,24 +36,219,255,144,255,36500,32 +37,218,255,148,255,36625,40 +38,217,255,152,255,36750,48 +39,216,255,156,255,36875,56 +40,215,255,160,255,37000,64 +41,214,255,164,255,37125,72 +42,213,255,168,255,37250,80 +43,212,255,172,255,37375,88 +44,211,255,176,255,37500,96 +45,210,255,180,255,37625,104 +46,209,255,184,255,37750,112 +47,208,255,188,255,37875,120 +48,207,255,192,255,38000,128 +49,206,255,196,255,38125,136 +50,205,255,200,255,38250,144 +51,204,255,204,255,38375,152 +52,203,255,208,255,38500,160 +53,202,255,212,255,38625,168 +54,201,255,216,255,38750,176 +55,200,255,220,255,38875,184 +56,199,255,224,255,39000,192 +57,198,255,228,255,39125,200 +58,197,255,232,255,39250,208 +59,196,255,236,255,39375,216 +60,195,255,240,255,39500,224 +61,194,255,244,255,39625,232 +62,193,255,248,255,39750,240 +63,192,255,252,255,39875,248 +64,191,255,0,0,40000,0 +65,190,255,4,0,40125,8 +66,189,255,8,0,40250,16 +67,188,255,12,0,40375,24 +68,187,255,16,0,40500,32 +69,186,255,20,0,40625,40 +70,185,255,24,0,40750,48 +71,184,255,28,0,40875,56 +72,183,255,32,0,41000,64 +73,182,255,36,0,41125,72 +74,181,255,40,0,41250,80 +75,180,255,44,0,41375,88 +76,179,255,48,0,41500,96 +77,178,255,52,0,41625,104 +78,177,255,56,0,41750,112 +79,176,255,60,0,41875,120 +80,175,255,64,0,42000,128 +81,174,255,68,0,42125,136 +82,173,255,72,0,42250,144 +83,172,255,76,0,42375,152 +84,171,255,80,0,42500,160 +85,170,255,84,0,42625,168 +86,169,255,88,0,42750,176 +87,168,255,92,0,42875,184 +88,167,255,96,0,43000,192 +89,166,255,100,0,43125,200 +90,165,255,104,0,43250,208 +91,164,255,108,0,43375,216 +92,163,255,112,0,43500,224 +93,162,255,116,0,43625,232 +94,161,255,120,0,43750,240 +95,160,255,124,0,43875,248 +96,159,255,128,255,44000,0 +97,158,255,132,255,44125,8 +98,157,255,136,255,44250,16 +99,156,255,140,255,44375,24 +100,155,255,144,255,44500,32 +101,154,255,148,255,44625,40 +102,153,255,152,255,44750,48 +103,152,255,156,255,44875,56 +104,151,255,160,255,45000,64 +105,150,255,164,255,45125,72 +106,149,255,168,255,45250,80 +107,148,255,172,255,45375,88 +108,147,255,176,255,45500,96 +109,146,255,180,255,45625,104 +110,145,255,184,255,45750,112 +111,144,255,188,255,45875,120 +112,143,255,192,255,46000,128 +113,142,255,196,255,46125,136 +114,141,255,200,255,46250,144 +115,140,255,204,255,46375,152 +116,139,255,208,255,46500,160 +117,138,255,212,255,46625,168 +118,137,255,216,255,46750,176 +119,136,255,220,255,46875,184 +120,135,255,224,255,47000,192 +121,134,255,228,255,47125,200 +122,133,255,232,255,47250,208 +123,132,255,236,255,47375,216 +124,131,255,240,255,47500,224 +125,130,255,244,255,47625,232 +126,129,255,248,255,47750,240 +127,128,255,252,255,47875,248 +128,127,255,0,0,48000,0 +129,126,255,4,0,48125,8 +130,125,255,8,0,48250,16 +131,124,255,12,0,48375,24 +132,123,255,16,0,48500,32 +133,122,255,20,0,48625,40 +134,121,255,24,0,48750,48 +135,120,255,28,0,48875,56 +136,119,255,32,0,49000,64 +137,118,255,36,0,49125,72 +138,117,255,40,0,49250,80 +139,116,255,44,0,49375,88 +140,115,255,48,0,49500,96 +141,114,255,52,0,49625,104 +142,113,255,56,0,49750,112 +143,112,255,60,0,49875,120 +144,111,255,64,0,50000,128 +145,110,255,68,0,50125,136 +146,109,255,72,0,50250,144 +147,108,255,76,0,50375,152 +148,107,255,80,0,50500,160 +149,106,255,84,0,50625,168 +150,105,255,88,0,50750,176 +151,104,255,92,0,50875,184 +152,103,255,96,0,51000,192 +153,102,255,100,0,51125,200 +154,101,255,104,0,51250,208 +155,100,255,108,0,51375,216 +156,99,255,112,0,51500,224 +157,98,255,116,0,51625,232 +158,97,255,120,0,51750,240 +159,96,255,124,0,51875,248 +160,95,255,128,255,52000,0 +161,94,255,132,255,52125,8 +162,93,255,136,255,52250,16 +163,92,255,140,255,52375,24 +164,91,255,144,255,52500,32 +165,90,255,148,255,52625,40 +166,89,255,152,255,52750,48 +167,88,255,156,255,52875,56 +168,87,255,160,255,53000,64 +169,86,255,164,255,53125,72 +170,85,255,168,255,53250,80 +171,84,255,172,255,53375,88 +172,83,255,176,255,53500,96 +173,82,255,180,255,53625,104 +174,81,255,184,255,53750,112 +175,80,255,188,255,53875,120 +176,79,255,192,255,54000,128 +177,78,255,196,255,54125,136 +178,77,255,200,255,54250,144 +179,76,255,204,255,54375,152 +180,75,255,208,255,54500,160 +181,74,255,212,255,54625,168 +182,73,255,216,255,54750,176 +183,72,255,220,255,54875,184 +184,71,255,224,255,55000,192 +185,70,255,228,255,55125,200 +186,69,255,232,255,55250,208 +187,68,255,236,255,55375,216 +188,67,255,240,255,55500,224 +189,66,255,244,255,55625,232 +190,65,255,248,255,55750,240 +191,64,255,252,255,55875,248 +192,63,255,0,0,56000,0 +193,62,255,4,0,56125,8 +194,61,255,8,0,56250,16 +195,60,255,12,0,56375,24 +196,59,255,16,0,56500,32 +197,58,255,20,0,56625,40 +198,57,255,24,0,56750,48 +199,56,255,28,0,56875,56 +200,55,255,32,0,57000,64 +201,54,255,36,0,57125,72 +202,53,255,40,0,57250,80 +203,52,255,44,0,57375,88 +204,51,255,48,0,57500,96 +205,50,255,52,0,57625,104 +206,49,255,56,0,57750,112 +207,48,255,60,0,57875,120 +208,47,255,64,0,58000,128 +209,46,255,68,0,58125,136 +210,45,255,72,0,58250,144 +211,44,255,76,0,58375,152 +212,43,255,80,0,58500,160 +213,42,255,84,0,58625,168 +214,41,255,88,0,58750,176 +215,40,255,92,0,58875,184 +216,39,255,96,0,59000,192 +217,38,255,100,0,59125,200 +218,37,255,104,0,59250,208 +219,36,255,108,0,59375,216 +220,35,255,112,0,59500,224 +221,34,255,116,0,59625,232 +222,33,255,120,0,59750,240 +223,32,255,124,0,59875,248 +224,31,255,128,255,60000,0 +225,30,255,132,255,60125,8 +226,29,255,136,255,60250,16 +227,28,255,140,255,60375,24 +228,27,255,144,255,60500,32 +229,26,255,148,255,60625,40 +230,25,255,152,255,60750,48 +231,24,255,156,255,60875,56 +232,23,255,160,255,61000,64 +233,22,255,164,255,61125,72 +234,21,255,168,255,61250,80 +235,20,255,172,255,61375,88 +236,19,255,176,255,61500,96 +237,18,255,180,255,61625,104 +238,17,255,184,255,61750,112 +239,16,255,188,255,61875,120 +240,15,255,192,255,62000,128 +241,14,255,196,255,62125,136 +242,13,255,200,255,62250,144 +243,12,255,204,255,62375,152 +244,11,255,208,255,62500,160 +245,10,255,212,255,62625,168 +246,9,255,216,255,62750,176 +247,8,255,220,255,62875,184 +248,7,255,224,255,63000,192 +249,6,255,228,255,63125,200 +250,5,255,232,255,63250,208 +251,4,255,236,255,63375,216 +252,3,255,240,255,63500,224 +253,2,255,244,255,63625,232 +254,1,255,248,255,63750,240 +255,0,255,252,255,63875,248 +0,0,0,0,0,64000,0 +1,1,0,4,0,64125,8 +2,2,0,8,0,64250,16 +3,3,0,12,0,64375,24 +4,4,0,16,0,64500,32 +5,5,0,20,0,64625,40 +6,6,0,24,0,64750,48 +7,7,0,28,0,64875,56 +8,8,0,32,0,65000,64 +9,9,0,36,0,65125,72 +10,10,0,40,0,65250,80 +11,11,0,44,0,65375,88 +12,12,0,48,0,65500,96 +13,13,0,52,0,65625,104 +14,14,0,56,0,65750,112 +15,15,0,60,0,65875,120 +16,16,0,64,0,66000,128 +17,17,0,68,0,66125,136 +18,18,0,72,0,66250,144 +19,19,0,76,0,66375,152 +20,20,0,80,0,66500,160 +21,21,0,84,0,66625,168 +22,22,0,88,0,66750,176 +23,23,0,92,0,66875,184 +24,24,0,96,0,67000,192 +25,25,0,100,0,67125,200 +26,26,0,104,0,67250,208 +27,27,0,108,0,67375,216 +28,28,0,112,0,67500,224 +29,29,0,116,0,67625,232 +30,30,0,120,0,67750,240 +31,31,0,124,0,67875,248 +32,32,0,128,255,68000,0 +33,33,0,132,255,68125,8 +34,34,0,136,255,68250,16 +35,35,0,140,255,68375,24 +36,36,0,144,255,68500,32 +37,37,0,148,255,68625,40 +38,38,0,152,255,68750,48 +39,39,0,156,255,68875,56 +40,40,0,160,255,69000,64 +41,41,0,164,255,69125,72 +42,42,0,168,255,69250,80 +43,43,0,172,255,69375,88 +44,44,0,176,255,69500,96 +45,45,0,180,255,69625,104 +46,46,0,184,255,69750,112 +47,47,0,188,255,69875,120 +48,48,0,192,255,70000,128 +49,49,0,196,255,70125,136 +50,50,0,200,255,70250,144 +51,51,0,204,255,70375,152 +52,52,0,208,255,70500,160 +53,53,0,212,255,70625,168 +54,54,0,216,255,70750,176 +55,55,0,220,255,70875,184 +56,56,0,224,255,71000,192 +57,57,0,228,255,71125,200 +58,58,0,232,255,71250,208 +59,59,0,236,255,71375,216 +60,60,0,240,255,71500,224 +61,61,0,244,255,71625,232 +62,62,0,248,255,71750,240 +63,63,0,252,255,71875,248 +64,64,0,0,0,72000,0 +65,65,0,4,0,72125,8 +66,66,0,8,0,72250,16 +67,67,0,12,0,72375,24 +68,68,0,16,0,72500,32 +69,69,0,20,0,72625,40 +70,70,0,24,0,72750,48 +71,71,0,28,0,72875,56 +72,72,0,32,0,73000,64 +73,73,0,36,0,73125,72 +74,74,0,40,0,73250,80 +75,75,0,44,0,73375,88 +76,76,0,48,0,73500,96 +77,77,0,52,0,73625,104 +78,78,0,56,0,73750,112 +79,79,0,60,0,73875,120 +80,80,0,64,0,74000,128 +81,81,0,68,0,74125,136 +82,82,0,72,0,74250,144 +83,83,0,76,0,74375,152 +84,84,0,80,0,74500,160 +85,85,0,84,0,74625,168 +86,86,0,88,0,74750,176 +87,87,0,92,0,74875,184 +88,88,0,96,0,75000,192 +89,89,0,100,0,75125,200 +90,90,0,104,0,75250,208 +91,91,0,108,0,75375,216 +92,92,0,112,0,75500,224 +93,93,0,116,0,75625,232 +94,94,0,120,0,75750,240 +95,95,0,124,0,75875,248 +96,96,0,128,255,76000,0 +97,97,0,132,255,76125,8 +98,98,0,136,255,76250,16 +99,99,0,140,255,76375,24 +100,100,0,144,255,76500,32 +101,101,0,148,255,76625,40 +102,102,0,152,255,76750,48 +103,103,0,156,255,76875,56 +104,104,0,160,255,77000,64 +105,105,0,164,255,77125,72 +106,106,0,168,255,77250,80 +107,107,0,172,255,77375,88 +108,108,0,176,255,77500,96 +109,109,0,180,255,77625,104 +110,110,0,184,255,77750,112 +111,111,0,188,255,77875,120 +112,112,0,192,255,78000,128 +113,113,0,196,255,78125,136 +114,114,0,200,255,78250,144 +115,115,0,204,255,78375,152 +116,116,0,208,255,78500,160 +117,117,0,212,255,78625,168 +118,118,0,216,255,78750,176 +119,119,0,220,255,78875,184 +120,120,0,224,255,79000,192 +121,121,0,228,255,79125,200 +122,122,0,232,255,79250,208 +123,123,0,236,255,79375,216 +124,124,0,240,255,79500,224 +125,125,0,244,255,79625,232 +126,126,0,248,255,79750,240 +127,127,0,252,255,79875,248 +128,128,0,0,0,80000,0 +129,129,0,4,0,80125,8 +130,130,0,8,0,80250,16 +131,131,0,12,0,80375,24 +132,132,0,16,0,80500,32 +133,133,0,20,0,80625,40 +134,134,0,24,0,80750,48 +135,135,0,28,0,80875,56 +136,136,0,32,0,81000,64 +137,137,0,36,0,81125,72 +138,138,0,40,0,81250,80 +139,139,0,44,0,81375,88 +140,140,0,48,0,81500,96 +141,141,0,52,0,81625,104 +142,142,0,56,0,81750,112 +143,143,0,60,0,81875,120 +144,144,0,64,0,82000,128 +145,145,0,68,0,82125,136 +146,146,0,72,0,82250,144 +147,147,0,76,0,82375,152 +148,148,0,80,0,82500,160 +149,149,0,84,0,82625,168 +150,150,0,88,0,82750,176 +151,151,0,92,0,82875,184 +152,152,0,96,0,83000,192 +153,153,0,100,0,83125,200 +154,154,0,104,0,83250,208 +155,155,0,108,0,83375,216 +156,156,0,112,0,83500,224 +157,157,0,116,0,83625,232 +158,158,0,120,0,83750,240 +159,159,0,124,0,83875,248 +160,160,0,128,255,84000,0 +161,161,0,132,255,84125,8 +162,162,0,136,255,84250,16 +163,163,0,140,255,84375,24 +164,164,0,144,255,84500,32 +165,165,0,148,255,84625,40 +166,166,0,152,255,84750,48 +167,167,0,156,255,84875,56 +168,168,0,160,255,85000,64 +169,169,0,164,255,85125,72 +170,170,0,168,255,85250,80 +171,171,0,172,255,85375,88 +172,172,0,176,255,85500,96 +173,173,0,180,255,85625,104 +174,174,0,184,255,85750,112 +175,175,0,188,255,85875,120 +176,176,0,192,255,86000,128 +177,177,0,196,255,86125,136 +178,178,0,200,255,86250,144 +179,179,0,204,255,86375,152 +180,180,0,208,255,86500,160 +181,181,0,212,255,86625,168 +182,182,0,216,255,86750,176 +183,183,0,220,255,86875,184 +184,184,0,224,255,87000,192 +185,185,0,228,255,87125,200 +186,186,0,232,255,87250,208 +187,187,0,236,255,87375,216 +188,188,0,240,255,87500,224 +189,189,0,244,255,87625,232 +190,190,0,248,255,87750,240 +191,191,0,252,255,87875,248 +192,192,0,0,0,88000,0 +193,193,0,4,0,88125,8 +194,194,0,8,0,88250,16 +195,195,0,12,0,88375,24 +196,196,0,16,0,88500,32 +197,197,0,20,0,88625,40 +198,198,0,24,0,88750,48 +199,199,0,28,0,88875,56 +200,200,0,32,0,89000,64 +201,201,0,36,0,89125,72 +202,202,0,40,0,89250,80 +203,203,0,44,0,89375,88 +204,204,0,48,0,89500,96 +205,205,0,52,0,89625,104 +206,206,0,56,0,89750,112 +207,207,0,60,0,89875,120 +208,208,0,64,0,90000,128 +209,209,0,68,0,90125,136 +210,210,0,72,0,90250,144 +211,211,0,76,0,90375,152 +212,212,0,80,0,90500,160 +213,213,0,84,0,90625,168 +214,214,0,88,0,90750,176 +215,215,0,92,0,90875,184 +216,216,0,96,0,91000,192 +217,217,0,100,0,91125,200 +218,218,0,104,0,91250,208 +219,219,0,108,0,91375,216 +220,220,0,112,0,91500,224 +221,221,0,116,0,91625,232 +222,222,0,120,0,91750,240 +223,223,0,124,0,91875,248 +224,224,0,128,255,92000,0 +225,225,0,132,255,92125,8 +226,226,0,136,255,92250,16 +227,227,0,140,255,92375,24 +228,228,0,144,255,92500,32 +229,229,0,148,255,92625,40 +230,230,0,152,255,92750,48 +231,231,0,156,255,92875,56 +232,232,0,160,255,93000,64 +233,233,0,164,255,93125,72 +234,234,0,168,255,93250,80 +235,235,0,172,255,93375,88 +236,236,0,176,255,93500,96 +237,237,0,180,255,93625,104 +238,238,0,184,255,93750,112 +239,239,0,188,255,93875,120 +240,240,0,192,255,94000,128 +241,241,0,196,255,94125,136 +242,242,0,200,255,94250,144 +243,243,0,204,255,94375,152 +244,244,0,208,255,94500,160 +245,245,0,212,255,94625,168 +246,246,0,216,255,94750,176 +247,247,0,220,255,94875,184 +248,248,0,224,255,95000,192 +249,249,0,228,255,95125,200 +250,250,0,232,255,95250,208 +251,251,0,236,255,95375,216 +252,252,0,240,255,95500,224 +253,253,0,244,255,95625,232 +254,254,0,248,255,95750,240 +255,255,0,252,255,95875,248 +0,255,255,0,0,96000,0 +1,254,255,4,0,96125,8 +2,253,255,8,0,96250,16 +3,252,255,12,0,96375,24 +4,251,255,16,0,96500,32 +5,250,255,20,0,96625,40 +6,249,255,24,0,96750,48 +7,248,255,28,0,96875,56 +8,247,255,32,0,97000,64 +9,246,255,36,0,97125,72 +10,245,255,40,0,97250,80 +11,244,255,44,0,97375,88 +12,243,255,48,0,97500,96 +13,242,255,52,0,97625,104 +14,241,255,56,0,97750,112 +15,240,255,60,0,97875,120 +16,239,255,64,0,98000,128 +17,238,255,68,0,98125,136 +18,237,255,72,0,98250,144 +19,236,255,76,0,98375,152 +20,235,255,80,0,98500,160 +21,234,255,84,0,98625,168 +22,233,255,88,0,98750,176 +23,232,255,92,0,98875,184 +24,231,255,96,0,99000,192 +25,230,255,100,0,99125,200 +26,229,255,104,0,99250,208 +27,228,255,108,0,99375,216 +28,227,255,112,0,99500,224 +29,226,255,116,0,99625,232 +30,225,255,120,0,99750,240 +31,224,255,124,0,99875,248 +32,223,255,128,255,100000,0 +33,222,255,132,255,100125,8 +34,221,255,136,255,100250,16 +35,220,255,140,255,100375,24 +36,219,255,144,255,100500,32 +37,218,255,148,255,100625,40 +38,217,255,152,255,100750,48 +39,216,255,156,255,100875,56 +40,215,255,160,255,101000,64 +41,214,255,164,255,101125,72 +42,213,255,168,255,101250,80 +43,212,255,172,255,101375,88 +44,211,255,176,255,101500,96 +45,210,255,180,255,101625,104 +46,209,255,184,255,101750,112 +47,208,255,188,255,101875,120 +48,207,255,192,255,102000,128 +49,206,255,196,255,102125,136 +50,205,255,200,255,102250,144 +51,204,255,204,255,102375,152 +52,203,255,208,255,102500,160 +53,202,255,212,255,102625,168 +54,201,255,216,255,102750,176 +55,200,255,220,255,102875,184 +56,199,255,224,255,103000,192 +57,198,255,228,255,103125,200 +58,197,255,232,255,103250,208 +59,196,255,236,255,103375,216 +60,195,255,240,255,103500,224 +61,194,255,244,255,103625,232 +62,193,255,248,255,103750,240 +63,192,255,252,255,103875,248 +64,191,255,0,0,104000,0 +65,190,255,4,0,104125,8 +66,189,255,8,0,104250,16 +67,188,255,12,0,104375,24 +68,187,255,16,0,104500,32 +69,186,255,20,0,104625,40 +70,185,255,24,0,104750,48 +71,184,255,28,0,104875,56 +72,183,255,32,0,105000,64 +73,182,255,36,0,105125,72 +74,181,255,40,0,105250,80 +75,180,255,44,0,105375,88 +76,179,255,48,0,105500,96 +77,178,255,52,0,105625,104 +78,177,255,56,0,105750,112 +79,176,255,60,0,105875,120 +80,175,255,64,0,106000,128 +81,174,255,68,0,106125,136 +82,173,255,72,0,106250,144 +83,172,255,76,0,106375,152 +84,171,255,80,0,106500,160 +85,170,255,84,0,106625,168 +86,169,255,88,0,106750,176 +87,168,255,92,0,106875,184 +88,167,255,96,0,107000,192 +89,166,255,100,0,107125,200 +90,165,255,104,0,107250,208 +91,164,255,108,0,107375,216 +92,163,255,112,0,107500,224 +93,162,255,116,0,107625,232 +94,161,255,120,0,107750,240 +95,160,255,124,0,107875,248 +96,159,255,128,255,108000,0 +97,158,255,132,255,108125,8 +98,157,255,136,255,108250,16 +99,156,255,140,255,108375,24 +100,155,255,144,255,108500,32 +101,154,255,148,255,108625,40 +102,153,255,152,255,108750,48 +103,152,255,156,255,108875,56 +104,151,255,160,255,109000,64 +105,150,255,164,255,109125,72 +106,149,255,168,255,109250,80 +107,148,255,172,255,109375,88 +108,147,255,176,255,109500,96 +109,146,255,180,255,109625,104 +110,145,255,184,255,109750,112 +111,144,255,188,255,109875,120 +112,143,255,192,255,110000,128 +113,142,255,196,255,110125,136 +114,141,255,200,255,110250,144 +115,140,255,204,255,110375,152 +116,139,255,208,255,110500,160 +117,138,255,212,255,110625,168 +118,137,255,216,255,110750,176 +119,136,255,220,255,110875,184 +120,135,255,224,255,111000,192 +121,134,255,228,255,111125,200 +122,133,255,232,255,111250,208 +123,132,255,236,255,111375,216 +124,131,255,240,255,111500,224 +125,130,255,244,255,111625,232 +126,129,255,248,255,111750,240 +127,128,255,252,255,111875,248 +128,127,255,0,0,112000,0 +129,126,255,4,0,112125,8 +130,125,255,8,0,112250,16 +131,124,255,12,0,112375,24 +132,123,255,16,0,112500,32 +133,122,255,20,0,112625,40 +134,121,255,24,0,112750,48 +135,120,255,28,0,112875,56 +136,119,255,32,0,113000,64 +137,118,255,36,0,113125,72 +138,117,255,40,0,113250,80 +139,116,255,44,0,113375,88 +140,115,255,48,0,113500,96 +141,114,255,52,0,113625,104 +142,113,255,56,0,113750,112 +143,112,255,60,0,113875,120 +144,111,255,64,0,114000,128 +145,110,255,68,0,114125,136 +146,109,255,72,0,114250,144 +147,108,255,76,0,114375,152 +148,107,255,80,0,114500,160 +149,106,255,84,0,114625,168 +150,105,255,88,0,114750,176 +151,104,255,92,0,114875,184 +152,103,255,96,0,115000,192 +153,102,255,100,0,115125,200 +154,101,255,104,0,115250,208 +155,100,255,108,0,115375,216 +156,99,255,112,0,115500,224 +157,98,255,116,0,115625,232 +158,97,255,120,0,115750,240 +159,96,255,124,0,115875,248 +160,95,255,128,255,116000,0 +161,94,255,132,255,116125,8 +162,93,255,136,255,116250,16 +163,92,255,140,255,116375,24 +164,91,255,144,255,116500,32 +165,90,255,148,255,116625,40 +166,89,255,152,255,116750,48 +167,88,255,156,255,116875,56 +168,87,255,160,255,117000,64 +169,86,255,164,255,117125,72 +170,85,255,168,255,117250,80 +171,84,255,172,255,117375,88 +172,83,255,176,255,117500,96 +173,82,255,180,255,117625,104 +174,81,255,184,255,117750,112 +175,80,255,188,255,117875,120 +176,79,255,192,255,118000,128 +177,78,255,196,255,118125,136 +178,77,255,200,255,118250,144 +179,76,255,204,255,118375,152 +180,75,255,208,255,118500,160 +181,74,255,212,255,118625,168 +182,73,255,216,255,118750,176 +183,72,255,220,255,118875,184 +184,71,255,224,255,119000,192 +185,70,255,228,255,119125,200 +186,69,255,232,255,119250,208 +187,68,255,236,255,119375,216 +188,67,255,240,255,119500,224 +189,66,255,244,255,119625,232 +190,65,255,248,255,119750,240 +191,64,255,252,255,119875,248 +192,63,255,0,0,120000,0 +193,62,255,4,0,120125,8 +194,61,255,8,0,120250,16 +195,60,255,12,0,120375,24 +196,59,255,16,0,120500,32 +197,58,255,20,0,120625,40 +198,57,255,24,0,120750,48 +199,56,255,28,0,120875,56 +200,55,255,32,0,121000,64 +201,54,255,36,0,121125,72 +202,53,255,40,0,121250,80 +203,52,255,44,0,121375,88 +204,51,255,48,0,121500,96 +205,50,255,52,0,121625,104 +206,49,255,56,0,121750,112 +207,48,255,60,0,121875,120 +208,47,255,64,0,122000,128 +209,46,255,68,0,122125,136 +210,45,255,72,0,122250,144 +211,44,255,76,0,122375,152 +212,43,255,80,0,122500,160 +213,42,255,84,0,122625,168 +214,41,255,88,0,122750,176 +215,40,255,92,0,122875,184 +216,39,255,96,0,123000,192 +217,38,255,100,0,123125,200 +218,37,255,104,0,123250,208 +219,36,255,108,0,123375,216 +220,35,255,112,0,123500,224 +221,34,255,116,0,123625,232 +222,33,255,120,0,123750,240 +223,32,255,124,0,123875,248 +224,31,255,128,255,124000,0 +225,30,255,132,255,124125,8 +226,29,255,136,255,124250,16 +227,28,255,140,255,124375,24 +228,27,255,144,255,124500,32 +229,26,255,148,255,124625,40 +230,25,255,152,255,124750,48 +231,24,255,156,255,124875,56 +232,23,255,160,255,125000,64 +233,22,255,164,255,125125,72 +234,21,255,168,255,125250,80 +235,20,255,172,255,125375,88 +236,19,255,176,255,125500,96 +237,18,255,180,255,125625,104 +238,17,255,184,255,125750,112 +239,16,255,188,255,125875,120 +240,15,255,192,255,126000,128 +241,14,255,196,255,126125,136 +242,13,255,200,255,126250,144 +243,12,255,204,255,126375,152 +244,11,255,208,255,126500,160 +245,10,255,212,255,126625,168 +246,9,255,216,255,126750,176 +247,8,255,220,255,126875,184 +248,7,255,224,255,127000,192 +249,6,255,228,255,127125,200 +250,5,255,232,255,127250,208 +251,4,255,236,255,127375,216 +252,3,255,240,255,127500,224 +253,2,255,244,255,127625,232 +254,1,255,248,255,127750,240 +255,0,255,252,255,127875,248 +0,0,0,0,0,128000,0 +1,1,0,4,0,128125,8 +2,2,0,8,0,128250,16 +3,3,0,12,0,128375,24 +4,4,0,16,0,128500,32 +5,5,0,20,0,128625,40 +6,6,0,24,0,128750,48 +7,7,0,28,0,128875,56 +8,8,0,32,0,129000,64 +9,9,0,36,0,129125,72 +10,10,0,40,0,129250,80 +11,11,0,44,0,129375,88 +12,12,0,48,0,129500,96 +13,13,0,52,0,129625,104 +14,14,0,56,0,129750,112 +15,15,0,60,0,129875,120 +16,16,0,64,0,130000,128 +17,17,0,68,0,130125,136 +18,18,0,72,0,130250,144 +19,19,0,76,0,130375,152 +20,20,0,80,0,130500,160 +21,21,0,84,0,130625,168 +22,22,0,88,0,130750,176 +23,23,0,92,0,130875,184 +24,24,0,96,0,131000,192 +25,25,0,100,0,131125,200 +26,26,0,104,0,131250,208 +27,27,0,108,0,131375,216 +28,28,0,112,0,131500,224 +29,29,0,116,0,131625,232 +30,30,0,120,0,131750,240 +31,31,0,124,0,131875,248 +32,32,0,128,255,132000,0 +33,33,0,132,255,132125,8 +34,34,0,136,255,132250,16 +35,35,0,140,255,132375,24 +36,36,0,144,255,132500,32 +37,37,0,148,255,132625,40 +38,38,0,152,255,132750,48 +39,39,0,156,255,132875,56 +40,40,0,160,255,133000,64 +41,41,0,164,255,133125,72 +42,42,0,168,255,133250,80 +43,43,0,172,255,133375,88 +44,44,0,176,255,133500,96 +45,45,0,180,255,133625,104 +46,46,0,184,255,133750,112 +47,47,0,188,255,133875,120 +48,48,0,192,255,134000,128 +49,49,0,196,255,134125,136 +50,50,0,200,255,134250,144 +51,51,0,204,255,134375,152 +52,52,0,208,255,134500,160 +53,53,0,212,255,134625,168 +54,54,0,216,255,134750,176 +55,55,0,220,255,134875,184 +56,56,0,224,255,135000,192 +57,57,0,228,255,135125,200 +58,58,0,232,255,135250,208 +59,59,0,236,255,135375,216 +60,60,0,240,255,135500,224 +61,61,0,244,255,135625,232 +62,62,0,248,255,135750,240 +63,63,0,252,255,135875,248 +64,64,0,0,0,136000,0 +65,65,0,4,0,136125,8 +66,66,0,8,0,136250,16 +67,67,0,12,0,136375,24 +68,68,0,16,0,136500,32 +69,69,0,20,0,136625,40 +70,70,0,24,0,136750,48 +71,71,0,28,0,136875,56 +72,72,0,32,0,137000,64 +73,73,0,36,0,137125,72 +74,74,0,40,0,137250,80 +75,75,0,44,0,137375,88 +76,76,0,48,0,137500,96 +77,77,0,52,0,137625,104 +78,78,0,56,0,137750,112 +79,79,0,60,0,137875,120 +80,80,0,64,0,138000,128 +81,81,0,68,0,138125,136 +82,82,0,72,0,138250,144 +83,83,0,76,0,138375,152 +84,84,0,80,0,138500,160 +85,85,0,84,0,138625,168 +86,86,0,88,0,138750,176 +87,87,0,92,0,138875,184 +88,88,0,96,0,139000,192 +89,89,0,100,0,139125,200 +90,90,0,104,0,139250,208 +91,91,0,108,0,139375,216 +92,92,0,112,0,139500,224 +93,93,0,116,0,139625,232 +94,94,0,120,0,139750,240 +95,95,0,124,0,139875,248 +96,96,0,128,255,140000,0 +97,97,0,132,255,140125,8 +98,98,0,136,255,140250,16 +99,99,0,140,255,140375,24 +100,100,0,144,255,140500,32 +101,101,0,148,255,140625,40 +102,102,0,152,255,140750,48 +103,103,0,156,255,140875,56 +104,104,0,160,255,141000,64 +105,105,0,164,255,141125,72 +106,106,0,168,255,141250,80 +107,107,0,172,255,141375,88 +108,108,0,176,255,141500,96 +109,109,0,180,255,141625,104 +110,110,0,184,255,141750,112 +111,111,0,188,255,141875,120 +112,112,0,192,255,142000,128 +113,113,0,196,255,142125,136 +114,114,0,200,255,142250,144 +115,115,0,204,255,142375,152 +116,116,0,208,255,142500,160 +117,117,0,212,255,142625,168 +118,118,0,216,255,142750,176 +119,119,0,220,255,142875,184 +120,120,0,224,255,143000,192 +121,121,0,228,255,143125,200 +122,122,0,232,255,143250,208 +123,123,0,236,255,143375,216 +124,124,0,240,255,143500,224 +125,125,0,244,255,143625,232 +126,126,0,248,255,143750,240 +127,127,0,252,255,143875,248 +128,128,0,0,0,144000,0 +129,129,0,4,0,144125,8 +130,130,0,8,0,144250,16 +131,131,0,12,0,144375,24 +132,132,0,16,0,144500,32 +133,133,0,20,0,144625,40 +134,134,0,24,0,144750,48 +135,135,0,28,0,144875,56 +136,136,0,32,0,145000,64 +137,137,0,36,0,145125,72 +138,138,0,40,0,145250,80 +139,139,0,44,0,145375,88 +140,140,0,48,0,145500,96 +141,141,0,52,0,145625,104 +142,142,0,56,0,145750,112 +143,143,0,60,0,145875,120 +144,144,0,64,0,146000,128 +145,145,0,68,0,146125,136 +146,146,0,72,0,146250,144 +147,147,0,76,0,146375,152 +148,148,0,80,0,146500,160 +149,149,0,84,0,146625,168 +150,150,0,88,0,146750,176 +151,151,0,92,0,146875,184 +152,152,0,96,0,147000,192 +153,153,0,100,0,147125,200 +154,154,0,104,0,147250,208 +155,155,0,108,0,147375,216 +156,156,0,112,0,147500,224 +157,157,0,116,0,147625,232 +158,158,0,120,0,147750,240 +159,159,0,124,0,147875,248 +160,160,0,128,255,148000,0 +161,161,0,132,255,148125,8 +162,162,0,136,255,148250,16 +163,163,0,140,255,148375,24 +164,164,0,144,255,148500,32 +165,165,0,148,255,148625,40 +166,166,0,152,255,148750,48 +167,167,0,156,255,148875,56 +168,168,0,160,255,149000,64 +169,169,0,164,255,149125,72 +170,170,0,168,255,149250,80 +171,171,0,172,255,149375,88 +172,172,0,176,255,149500,96 +173,173,0,180,255,149625,104 +174,174,0,184,255,149750,112 +175,175,0,188,255,149875,120 +176,176,0,192,255,150000,128 +177,177,0,196,255,150125,136 +178,178,0,200,255,150250,144 +179,179,0,204,255,150375,152 +180,180,0,208,255,150500,160 +181,181,0,212,255,150625,168 +182,182,0,216,255,150750,176 +183,183,0,220,255,150875,184 +184,184,0,224,255,151000,192 +185,185,0,228,255,151125,200 +186,186,0,232,255,151250,208 +187,187,0,236,255,151375,216 +188,188,0,240,255,151500,224 +189,189,0,244,255,151625,232 +190,190,0,248,255,151750,240 +191,191,0,252,255,151875,248 +192,192,0,0,0,152000,0 +193,193,0,4,0,152125,8 +194,194,0,8,0,152250,16 +195,195,0,12,0,152375,24 +196,196,0,16,0,152500,32 +197,197,0,20,0,152625,40 +198,198,0,24,0,152750,48 +199,199,0,28,0,152875,56 +200,200,0,32,0,153000,64 +201,201,0,36,0,153125,72 +202,202,0,40,0,153250,80 +203,203,0,44,0,153375,88 +204,204,0,48,0,153500,96 +205,205,0,52,0,153625,104 +206,206,0,56,0,153750,112 +207,207,0,60,0,153875,120 +208,208,0,64,0,154000,128 +209,209,0,68,0,154125,136 +210,210,0,72,0,154250,144 +211,211,0,76,0,154375,152 +212,212,0,80,0,154500,160 +213,213,0,84,0,154625,168 +214,214,0,88,0,154750,176 +215,215,0,92,0,154875,184 +216,216,0,96,0,155000,192 +217,217,0,100,0,155125,200 +218,218,0,104,0,155250,208 +219,219,0,108,0,155375,216 +220,220,0,112,0,155500,224 +221,221,0,116,0,155625,232 +222,222,0,120,0,155750,240 +223,223,0,124,0,155875,248 +224,224,0,128,255,156000,0 +225,225,0,132,255,156125,8 +226,226,0,136,255,156250,16 +227,227,0,140,255,156375,24 +228,228,0,144,255,156500,32 +229,229,0,148,255,156625,40 +230,230,0,152,255,156750,48 +231,231,0,156,255,156875,56 +232,232,0,160,255,157000,64 +233,233,0,164,255,157125,72 +234,234,0,168,255,157250,80 +235,235,0,172,255,157375,88 +236,236,0,176,255,157500,96 +237,237,0,180,255,157625,104 +238,238,0,184,255,157750,112 +239,239,0,188,255,157875,120 +240,240,0,192,255,158000,128 +241,241,0,196,255,158125,136 +242,242,0,200,255,158250,144 +243,243,0,204,255,158375,152 +244,244,0,208,255,158500,160 +245,245,0,212,255,158625,168 +246,246,0,216,255,158750,176 +247,247,0,220,255,158875,184 +248,248,0,224,255,159000,192 +249,249,0,228,255,159125,200 +250,250,0,232,255,159250,208 +251,251,0,236,255,159375,216 +252,252,0,240,255,159500,224 +253,253,0,244,255,159625,232 +254,254,0,248,255,159750,240 +255,255,0,252,255,159875,248 +0,255,255,0,0,160000,0 +1,254,255,4,0,160125,8 +2,253,255,8,0,160250,16 +3,252,255,12,0,160375,24 +4,251,255,16,0,160500,32 +5,250,255,20,0,160625,40 +6,249,255,24,0,160750,48 +7,248,255,28,0,160875,56 +8,247,255,32,0,161000,64 +9,246,255,36,0,161125,72 +10,245,255,40,0,161250,80 +11,244,255,44,0,161375,88 +12,243,255,48,0,161500,96 +13,242,255,52,0,161625,104 +14,241,255,56,0,161750,112 +15,240,255,60,0,161875,120 +16,239,255,64,0,162000,128 +17,238,255,68,0,162125,136 +18,237,255,72,0,162250,144 +19,236,255,76,0,162375,152 +20,235,255,80,0,162500,160 +21,234,255,84,0,162625,168 +22,233,255,88,0,162750,176 +23,232,255,92,0,162875,184 +24,231,255,96,0,163000,192 +25,230,255,100,0,163125,200 +26,229,255,104,0,163250,208 +27,228,255,108,0,163375,216 +28,227,255,112,0,163500,224 +29,226,255,116,0,163625,232 +30,225,255,120,0,163750,240 +31,224,255,124,0,163875,248 +32,223,255,128,255,164000,0 +33,222,255,132,255,164125,8 +34,221,255,136,255,164250,16 +35,220,255,140,255,164375,24 +36,219,255,144,255,164500,32 +37,218,255,148,255,164625,40 +38,217,255,152,255,164750,48 +39,216,255,156,255,164875,56 +40,215,255,160,255,165000,64 +41,214,255,164,255,165125,72 +42,213,255,168,255,165250,80 +43,212,255,172,255,165375,88 +44,211,255,176,255,165500,96 +45,210,255,180,255,165625,104 +46,209,255,184,255,165750,112 +47,208,255,188,255,165875,120 +48,207,255,192,255,166000,128 +49,206,255,196,255,166125,136 +50,205,255,200,255,166250,144 +51,204,255,204,255,166375,152 +52,203,255,208,255,166500,160 +53,202,255,212,255,166625,168 +54,201,255,216,255,166750,176 +55,200,255,220,255,166875,184 +56,199,255,224,255,167000,192 +57,198,255,228,255,167125,200 +58,197,255,232,255,167250,208 +59,196,255,236,255,167375,216 +60,195,255,240,255,167500,224 +61,194,255,244,255,167625,232 +62,193,255,248,255,167750,240 +63,192,255,252,255,167875,248 +64,191,255,0,0,168000,0 +65,190,255,4,0,168125,8 +66,189,255,8,0,168250,16 +67,188,255,12,0,168375,24 +68,187,255,16,0,168500,32 +69,186,255,20,0,168625,40 +70,185,255,24,0,168750,48 +71,184,255,28,0,168875,56 +72,183,255,32,0,169000,64 +73,182,255,36,0,169125,72 +74,181,255,40,0,169250,80 +75,180,255,44,0,169375,88 +76,179,255,48,0,169500,96 +77,178,255,52,0,169625,104 +78,177,255,56,0,169750,112 +79,176,255,60,0,169875,120 +80,175,255,64,0,170000,128 +81,174,255,68,0,170125,136 +82,173,255,72,0,170250,144 +83,172,255,76,0,170375,152 +84,171,255,80,0,170500,160 +85,170,255,84,0,170625,168 +86,169,255,88,0,170750,176 +87,168,255,92,0,170875,184 +88,167,255,96,0,171000,192 +89,166,255,100,0,171125,200 +90,165,255,104,0,171250,208 +91,164,255,108,0,171375,216 +92,163,255,112,0,171500,224 +93,162,255,116,0,171625,232 +94,161,255,120,0,171750,240 +95,160,255,124,0,171875,248 +96,159,255,128,255,172000,0 +97,158,255,132,255,172125,8 +98,157,255,136,255,172250,16 +99,156,255,140,255,172375,24 +100,155,255,144,255,172500,32 +101,154,255,148,255,172625,40 +102,153,255,152,255,172750,48 +103,152,255,156,255,172875,56 +104,151,255,160,255,173000,64 +105,150,255,164,255,173125,72 +106,149,255,168,255,173250,80 +107,148,255,172,255,173375,88 +108,147,255,176,255,173500,96 +109,146,255,180,255,173625,104 +110,145,255,184,255,173750,112 +111,144,255,188,255,173875,120 +112,143,255,192,255,174000,128 +113,142,255,196,255,174125,136 +114,141,255,200,255,174250,144 +115,140,255,204,255,174375,152 +116,139,255,208,255,174500,160 +117,138,255,212,255,174625,168 +118,137,255,216,255,174750,176 +119,136,255,220,255,174875,184 +120,135,255,224,255,175000,192 +121,134,255,228,255,175125,200 +122,133,255,232,255,175250,208 +123,132,255,236,255,175375,216 +124,131,255,240,255,175500,224 +125,130,255,244,255,175625,232 +126,129,255,248,255,175750,240 +127,128,255,252,255,175875,248 +128,127,255,0,0,176000,0 +129,126,255,4,0,176125,8 +130,125,255,8,0,176250,16 +131,124,255,12,0,176375,24 +132,123,255,16,0,176500,32 +133,122,255,20,0,176625,40 +134,121,255,24,0,176750,48 +135,120,255,28,0,176875,56 +136,119,255,32,0,177000,64 +137,118,255,36,0,177125,72 +138,117,255,40,0,177250,80 +139,116,255,44,0,177375,88 +140,115,255,48,0,177500,96 +141,114,255,52,0,177625,104 +142,113,255,56,0,177750,112 +143,112,255,60,0,177875,120 +144,111,255,64,0,178000,128 +145,110,255,68,0,178125,136 +146,109,255,72,0,178250,144 +147,108,255,76,0,178375,152 +148,107,255,80,0,178500,160 +149,106,255,84,0,178625,168 +150,105,255,88,0,178750,176 +151,104,255,92,0,178875,184 +152,103,255,96,0,179000,192 +153,102,255,100,0,179125,200 +154,101,255,104,0,179250,208 +155,100,255,108,0,179375,216 +156,99,255,112,0,179500,224 +157,98,255,116,0,179625,232 +158,97,255,120,0,179750,240 +159,96,255,124,0,179875,248 +160,95,255,128,255,180000,0 +161,94,255,132,255,180125,8 +162,93,255,136,255,180250,16 +163,92,255,140,255,180375,24 +164,91,255,144,255,180500,32 +165,90,255,148,255,180625,40 +166,89,255,152,255,180750,48 +167,88,255,156,255,180875,56 +168,87,255,160,255,181000,64 +169,86,255,164,255,181125,72 +170,85,255,168,255,181250,80 +171,84,255,172,255,181375,88 +172,83,255,176,255,181500,96 +173,82,255,180,255,181625,104 +174,81,255,184,255,181750,112 +175,80,255,188,255,181875,120 +176,79,255,192,255,182000,128 +177,78,255,196,255,182125,136 +178,77,255,200,255,182250,144 +179,76,255,204,255,182375,152 +180,75,255,208,255,182500,160 +181,74,255,212,255,182625,168 +182,73,255,216,255,182750,176 +183,72,255,220,255,182875,184 +184,71,255,224,255,183000,192 +185,70,255,228,255,183125,200 +186,69,255,232,255,183250,208 +187,68,255,236,255,183375,216 +188,67,255,240,255,183500,224 +189,66,255,244,255,183625,232 +190,65,255,248,255,183750,240 +191,64,255,252,255,183875,248 +192,63,255,0,0,184000,0 +193,62,255,4,0,184125,8 +194,61,255,8,0,184250,16 +195,60,255,12,0,184375,24 +196,59,255,16,0,184500,32 +197,58,255,20,0,184625,40 +198,57,255,24,0,184750,48 +199,56,255,28,0,184875,56 +200,55,255,32,0,185000,64 +201,54,255,36,0,185125,72 +202,53,255,40,0,185250,80 +203,52,255,44,0,185375,88 +204,51,255,48,0,185500,96 +205,50,255,52,0,185625,104 +206,49,255,56,0,185750,112 +207,48,255,60,0,185875,120 +208,47,255,64,0,186000,128 +209,46,255,68,0,186125,136 +210,45,255,72,0,186250,144 +211,44,255,76,0,186375,152 +212,43,255,80,0,186500,160 +213,42,255,84,0,186625,168 +214,41,255,88,0,186750,176 +215,40,255,92,0,186875,184 +216,39,255,96,0,187000,192 +217,38,255,100,0,187125,200 +218,37,255,104,0,187250,208 +219,36,255,108,0,187375,216 +220,35,255,112,0,187500,224 +221,34,255,116,0,187625,232 +222,33,255,120,0,187750,240 +223,32,255,124,0,187875,248 +224,31,255,128,255,188000,0 +225,30,255,132,255,188125,8 +226,29,255,136,255,188250,16 +227,28,255,140,255,188375,24 +228,27,255,144,255,188500,32 +229,26,255,148,255,188625,40 +230,25,255,152,255,188750,48 +231,24,255,156,255,188875,56 +232,23,255,160,255,189000,64 +233,22,255,164,255,189125,72 +234,21,255,168,255,189250,80 +235,20,255,172,255,189375,88 +236,19,255,176,255,189500,96 +237,18,255,180,255,189625,104 +238,17,255,184,255,189750,112 +239,16,255,188,255,189875,120 +240,15,255,192,255,190000,128 +241,14,255,196,255,190125,136 +242,13,255,200,255,190250,144 +243,12,255,204,255,190375,152 +244,11,255,208,255,190500,160 +245,10,255,212,255,190625,168 +246,9,255,216,255,190750,176 +247,8,255,220,255,190875,184 +248,7,255,224,255,191000,192 +249,6,255,228,255,191125,200 +250,5,255,232,255,191250,208 +251,4,255,236,255,191375,216 +252,3,255,240,255,191500,224 +253,2,255,244,255,191625,232 +254,1,255,248,255,191750,240 +255,0,255,252,255,191875,248 +0,0,0,0,0,192000,0 +1,1,0,4,0,192125,8 +2,2,0,8,0,192250,16 +3,3,0,12,0,192375,24 +4,4,0,16,0,192500,32 +5,5,0,20,0,192625,40 +6,6,0,24,0,192750,48 +7,7,0,28,0,192875,56 +8,8,0,32,0,193000,64 +9,9,0,36,0,193125,72 +10,10,0,40,0,193250,80 +11,11,0,44,0,193375,88 +12,12,0,48,0,193500,96 +13,13,0,52,0,193625,104 +14,14,0,56,0,193750,112 +15,15,0,60,0,193875,120 +16,16,0,64,0,194000,128 +17,17,0,68,0,194125,136 +18,18,0,72,0,194250,144 +19,19,0,76,0,194375,152 +20,20,0,80,0,194500,160 +21,21,0,84,0,194625,168 +22,22,0,88,0,194750,176 +23,23,0,92,0,194875,184 +24,24,0,96,0,195000,192 +25,25,0,100,0,195125,200 +26,26,0,104,0,195250,208 +27,27,0,108,0,195375,216 +28,28,0,112,0,195500,224 +29,29,0,116,0,195625,232 +30,30,0,120,0,195750,240 +31,31,0,124,0,195875,248 +32,32,0,128,255,196000,0 +33,33,0,132,255,196125,8 +34,34,0,136,255,196250,16 +35,35,0,140,255,196375,24 +36,36,0,144,255,196500,32 +37,37,0,148,255,196625,40 +38,38,0,152,255,196750,48 +39,39,0,156,255,196875,56 +40,40,0,160,255,197000,64 +41,41,0,164,255,197125,72 +42,42,0,168,255,197250,80 +43,43,0,172,255,197375,88 +44,44,0,176,255,197500,96 +45,45,0,180,255,197625,104 +46,46,0,184,255,197750,112 +47,47,0,188,255,197875,120 +48,48,0,192,255,198000,128 +49,49,0,196,255,198125,136 +50,50,0,200,255,198250,144 +51,51,0,204,255,198375,152 +52,52,0,208,255,198500,160 +53,53,0,212,255,198625,168 +54,54,0,216,255,198750,176 +55,55,0,220,255,198875,184 +56,56,0,224,255,199000,192 +57,57,0,228,255,199125,200 +58,58,0,232,255,199250,208 +59,59,0,236,255,199375,216 +60,60,0,240,255,199500,224 +61,61,0,244,255,199625,232 +62,62,0,248,255,199750,240 +63,63,0,252,255,199875,248 +64,64,0,0,0,200000,0 +65,65,0,4,0,200125,8 +66,66,0,8,0,200250,16 +67,67,0,12,0,200375,24 +68,68,0,16,0,200500,32 +69,69,0,20,0,200625,40 +70,70,0,24,0,200750,48 +71,71,0,28,0,200875,56 +72,72,0,32,0,201000,64 +73,73,0,36,0,201125,72 +74,74,0,40,0,201250,80 +75,75,0,44,0,201375,88 +76,76,0,48,0,201500,96 +77,77,0,52,0,201625,104 +78,78,0,56,0,201750,112 +79,79,0,60,0,201875,120 +80,80,0,64,0,202000,128 +81,81,0,68,0,202125,136 +82,82,0,72,0,202250,144 +83,83,0,76,0,202375,152 +84,84,0,80,0,202500,160 +85,85,0,84,0,202625,168 +86,86,0,88,0,202750,176 +87,87,0,92,0,202875,184 +88,88,0,96,0,203000,192 +89,89,0,100,0,203125,200 +90,90,0,104,0,203250,208 +91,91,0,108,0,203375,216 +92,92,0,112,0,203500,224 +93,93,0,116,0,203625,232 +94,94,0,120,0,203750,240 +95,95,0,124,0,203875,248 +96,96,0,128,255,204000,0 +97,97,0,132,255,204125,8 +98,98,0,136,255,204250,16 +99,99,0,140,255,204375,24 +100,100,0,144,255,204500,32 +101,101,0,148,255,204625,40 +102,102,0,152,255,204750,48 +103,103,0,156,255,204875,56 +104,104,0,160,255,205000,64 +105,105,0,164,255,205125,72 +106,106,0,168,255,205250,80 +107,107,0,172,255,205375,88 +108,108,0,176,255,205500,96 +109,109,0,180,255,205625,104 +110,110,0,184,255,205750,112 +111,111,0,188,255,205875,120 +112,112,0,192,255,206000,128 +113,113,0,196,255,206125,136 +114,114,0,200,255,206250,144 +115,115,0,204,255,206375,152 +116,116,0,208,255,206500,160 +117,117,0,212,255,206625,168 +118,118,0,216,255,206750,176 +119,119,0,220,255,206875,184 +120,120,0,224,255,207000,192 +121,121,0,228,255,207125,200 +122,122,0,232,255,207250,208 +123,123,0,236,255,207375,216 +124,124,0,240,255,207500,224 +125,125,0,244,255,207625,232 +126,126,0,248,255,207750,240 +127,127,0,252,255,207875,248 +128,128,0,0,0,208000,0 +129,129,0,4,0,208125,8 +130,130,0,8,0,208250,16 +131,131,0,12,0,208375,24 +132,132,0,16,0,208500,32 +133,133,0,20,0,208625,40 +134,134,0,24,0,208750,48 +135,135,0,28,0,208875,56 +136,136,0,32,0,209000,64 +137,137,0,36,0,209125,72 +138,138,0,40,0,209250,80 +139,139,0,44,0,209375,88 +140,140,0,48,0,209500,96 +141,141,0,52,0,209625,104 +142,142,0,56,0,209750,112 +143,143,0,60,0,209875,120 +144,144,0,64,0,210000,128 +145,145,0,68,0,210125,136 +146,146,0,72,0,210250,144 +147,147,0,76,0,210375,152 +148,148,0,80,0,210500,160 +149,149,0,84,0,210625,168 +150,150,0,88,0,210750,176 +151,151,0,92,0,210875,184 +152,152,0,96,0,211000,192 +153,153,0,100,0,211125,200 +154,154,0,104,0,211250,208 +155,155,0,108,0,211375,216 +156,156,0,112,0,211500,224 +157,157,0,116,0,211625,232 +158,158,0,120,0,211750,240 +159,159,0,124,0,211875,248 +160,160,0,128,255,212000,0 +161,161,0,132,255,212125,8 +162,162,0,136,255,212250,16 +163,163,0,140,255,212375,24 +164,164,0,144,255,212500,32 +165,165,0,148,255,212625,40 +166,166,0,152,255,212750,48 +167,167,0,156,255,212875,56 +168,168,0,160,255,213000,64 +169,169,0,164,255,213125,72 +170,170,0,168,255,213250,80 +171,171,0,172,255,213375,88 +172,172,0,176,255,213500,96 +173,173,0,180,255,213625,104 +174,174,0,184,255,213750,112 +175,175,0,188,255,213875,120 +176,176,0,192,255,214000,128 +177,177,0,196,255,214125,136 +178,178,0,200,255,214250,144 +179,179,0,204,255,214375,152 +180,180,0,208,255,214500,160 +181,181,0,212,255,214625,168 +182,182,0,216,255,214750,176 +183,183,0,220,255,214875,184 +184,184,0,224,255,215000,192 +185,185,0,228,255,215125,200 +186,186,0,232,255,215250,208 +187,187,0,236,255,215375,216 +188,188,0,240,255,215500,224 +189,189,0,244,255,215625,232 +190,190,0,248,255,215750,240 +191,191,0,252,255,215875,248 +192,192,0,0,0,216000,0 +193,193,0,4,0,216125,8 +194,194,0,8,0,216250,16 +195,195,0,12,0,216375,24 +196,196,0,16,0,216500,32 +197,197,0,20,0,216625,40 +198,198,0,24,0,216750,48 +199,199,0,28,0,216875,56 +200,200,0,32,0,217000,64 +201,201,0,36,0,217125,72 +202,202,0,40,0,217250,80 +203,203,0,44,0,217375,88 +204,204,0,48,0,217500,96 +205,205,0,52,0,217625,104 +206,206,0,56,0,217750,112 +207,207,0,60,0,217875,120 +208,208,0,64,0,218000,128 +209,209,0,68,0,218125,136 +210,210,0,72,0,218250,144 +211,211,0,76,0,218375,152 +212,212,0,80,0,218500,160 +213,213,0,84,0,218625,168 +214,214,0,88,0,218750,176 +215,215,0,92,0,218875,184 +216,216,0,96,0,219000,192 +217,217,0,100,0,219125,200 +218,218,0,104,0,219250,208 +219,219,0,108,0,219375,216 +220,220,0,112,0,219500,224 +221,221,0,116,0,219625,232 +222,222,0,120,0,219750,240 +223,223,0,124,0,219875,248 +224,224,0,128,255,220000,0 +225,225,0,132,255,220125,8 +226,226,0,136,255,220250,16 +227,227,0,140,255,220375,24 +228,228,0,144,255,220500,32 +229,229,0,148,255,220625,40 +230,230,0,152,255,220750,48 +231,231,0,156,255,220875,56 +232,232,0,160,255,221000,64 +233,233,0,164,255,221125,72 +234,234,0,168,255,221250,80 +235,235,0,172,255,221375,88 +236,236,0,176,255,221500,96 +237,237,0,180,255,221625,104 +238,238,0,184,255,221750,112 +239,239,0,188,255,221875,120 +240,240,0,192,255,222000,128 +241,241,0,196,255,222125,136 +242,242,0,200,255,222250,144 +243,243,0,204,255,222375,152 +244,244,0,208,255,222500,160 +245,245,0,212,255,222625,168 +246,246,0,216,255,222750,176 +247,247,0,220,255,222875,184 +248,248,0,224,255,223000,192 +249,249,0,228,255,223125,200 +250,250,0,232,255,223250,208 +251,251,0,236,255,223375,216 +252,252,0,240,255,223500,224 +253,253,0,244,255,223625,232 +254,254,0,248,255,223750,240 +255,255,0,252,255,223875,248 +0,255,255,0,0,224000,0 +1,254,255,4,0,224125,8 +2,253,255,8,0,224250,16 +3,252,255,12,0,224375,24 +4,251,255,16,0,224500,32 +5,250,255,20,0,224625,40 +6,249,255,24,0,224750,48 +7,248,255,28,0,224875,56 +8,247,255,32,0,225000,64 +9,246,255,36,0,225125,72 +10,245,255,40,0,225250,80 +11,244,255,44,0,225375,88 +12,243,255,48,0,225500,96 +13,242,255,52,0,225625,104 +14,241,255,56,0,225750,112 +15,240,255,60,0,225875,120 +16,239,255,64,0,226000,128 +17,238,255,68,0,226125,136 +18,237,255,72,0,226250,144 +19,236,255,76,0,226375,152 +20,235,255,80,0,226500,160 +21,234,255,84,0,226625,168 +22,233,255,88,0,226750,176 +23,232,255,92,0,226875,184 +24,231,255,96,0,227000,192 +25,230,255,100,0,227125,200 +26,229,255,104,0,227250,208 +27,228,255,108,0,227375,216 +28,227,255,112,0,227500,224 +29,226,255,116,0,227625,232 +30,225,255,120,0,227750,240 +31,224,255,124,0,227875,248 +32,223,255,128,255,228000,0 +33,222,255,132,255,228125,8 +34,221,255,136,255,228250,16 +35,220,255,140,255,228375,24 +36,219,255,144,255,228500,32 +37,218,255,148,255,228625,40 +38,217,255,152,255,228750,48 +39,216,255,156,255,228875,56 +40,215,255,160,255,229000,64 +41,214,255,164,255,229125,72 +42,213,255,168,255,229250,80 +43,212,255,172,255,229375,88 +44,211,255,176,255,229500,96 +45,210,255,180,255,229625,104 +46,209,255,184,255,229750,112 +47,208,255,188,255,229875,120 +48,207,255,192,255,230000,128 +49,206,255,196,255,230125,136 +50,205,255,200,255,230250,144 +51,204,255,204,255,230375,152 +52,203,255,208,255,230500,160 +53,202,255,212,255,230625,168 +54,201,255,216,255,230750,176 +55,200,255,220,255,230875,184 +56,199,255,224,255,231000,192 +57,198,255,228,255,231125,200 +58,197,255,232,255,231250,208 +59,196,255,236,255,231375,216 +60,195,255,240,255,231500,224 +61,194,255,244,255,231625,232 +62,193,255,248,255,231750,240 +63,192,255,252,255,231875,248 +64,191,255,0,0,232000,0 +65,190,255,4,0,232125,8 +66,189,255,8,0,232250,16 +67,188,255,12,0,232375,24 +68,187,255,16,0,232500,32 +69,186,255,20,0,232625,40 +70,185,255,24,0,232750,48 +71,184,255,28,0,232875,56 +72,183,255,32,0,233000,64 +73,182,255,36,0,233125,72 +74,181,255,40,0,233250,80 +75,180,255,44,0,233375,88 +76,179,255,48,0,233500,96 +77,178,255,52,0,233625,104 +78,177,255,56,0,233750,112 +79,176,255,60,0,233875,120 +80,175,255,64,0,234000,128 +81,174,255,68,0,234125,136 +82,173,255,72,0,234250,144 +83,172,255,76,0,234375,152 +84,171,255,80,0,234500,160 +85,170,255,84,0,234625,168 +86,169,255,88,0,234750,176 +87,168,255,92,0,234875,184 +88,167,255,96,0,235000,192 +89,166,255,100,0,235125,200 +90,165,255,104,0,235250,208 +91,164,255,108,0,235375,216 +92,163,255,112,0,235500,224 +93,162,255,116,0,235625,232 +94,161,255,120,0,235750,240 +95,160,255,124,0,235875,248 +96,159,255,128,255,236000,0 +97,158,255,132,255,236125,8 +98,157,255,136,255,236250,16 +99,156,255,140,255,236375,24 +100,155,255,144,255,236500,32 +101,154,255,148,255,236625,40 +102,153,255,152,255,236750,48 +103,152,255,156,255,236875,56 +104,151,255,160,255,237000,64 +105,150,255,164,255,237125,72 +106,149,255,168,255,237250,80 +107,148,255,172,255,237375,88 +108,147,255,176,255,237500,96 +109,146,255,180,255,237625,104 +110,145,255,184,255,237750,112 +111,144,255,188,255,237875,120 +112,143,255,192,255,238000,128 +113,142,255,196,255,238125,136 +114,141,255,200,255,238250,144 +115,140,255,204,255,238375,152 +116,139,255,208,255,238500,160 +117,138,255,212,255,238625,168 +118,137,255,216,255,238750,176 +119,136,255,220,255,238875,184 +120,135,255,224,255,239000,192 +121,134,255,228,255,239125,200 +122,133,255,232,255,239250,208 +123,132,255,236,255,239375,216 +124,131,255,240,255,239500,224 +125,130,255,244,255,239625,232 +126,129,255,248,255,239750,240 +127,128,255,252,255,239875,248 +128,127,255,0,0,240000,0 +129,126,255,4,0,240125,8 +130,125,255,8,0,240250,16 +131,124,255,12,0,240375,24 +132,123,255,16,0,240500,32 +133,122,255,20,0,240625,40 +134,121,255,24,0,240750,48 +135,120,255,28,0,240875,56 +136,119,255,32,0,241000,64 +137,118,255,36,0,241125,72 +138,117,255,40,0,241250,80 +139,116,255,44,0,241375,88 +140,115,255,48,0,241500,96 +141,114,255,52,0,241625,104 +142,113,255,56,0,241750,112 +143,112,255,60,0,241875,120 +144,111,255,64,0,242000,128 +145,110,255,68,0,242125,136 +146,109,255,72,0,242250,144 +147,108,255,76,0,242375,152 +148,107,255,80,0,242500,160 +149,106,255,84,0,242625,168 +150,105,255,88,0,242750,176 +151,104,255,92,0,242875,184 +152,103,255,96,0,243000,192 +153,102,255,100,0,243125,200 +154,101,255,104,0,243250,208 +155,100,255,108,0,243375,216 +156,99,255,112,0,243500,224 +157,98,255,116,0,243625,232 +158,97,255,120,0,243750,240 +159,96,255,124,0,243875,248 +160,95,255,128,255,244000,0 +161,94,255,132,255,244125,8 +162,93,255,136,255,244250,16 +163,92,255,140,255,244375,24 +164,91,255,144,255,244500,32 +165,90,255,148,255,244625,40 +166,89,255,152,255,244750,48 +167,88,255,156,255,244875,56 +168,87,255,160,255,245000,64 +169,86,255,164,255,245125,72 +170,85,255,168,255,245250,80 +171,84,255,172,255,245375,88 +172,83,255,176,255,245500,96 +173,82,255,180,255,245625,104 +174,81,255,184,255,245750,112 +175,80,255,188,255,245875,120 +176,79,255,192,255,246000,128 +177,78,255,196,255,246125,136 +178,77,255,200,255,246250,144 +179,76,255,204,255,246375,152 +180,75,255,208,255,246500,160 +181,74,255,212,255,246625,168 +182,73,255,216,255,246750,176 +183,72,255,220,255,246875,184 +184,71,255,224,255,247000,192 +185,70,255,228,255,247125,200 +186,69,255,232,255,247250,208 +187,68,255,236,255,247375,216 +188,67,255,240,255,247500,224 +189,66,255,244,255,247625,232 +190,65,255,248,255,247750,240 +191,64,255,252,255,247875,248 +192,63,255,0,0,248000,0 +193,62,255,4,0,248125,8 +194,61,255,8,0,248250,16 +195,60,255,12,0,248375,24 +196,59,255,16,0,248500,32 +197,58,255,20,0,248625,40 +198,57,255,24,0,248750,48 +199,56,255,28,0,248875,56 +200,55,255,32,0,249000,64 +201,54,255,36,0,249125,72 +202,53,255,40,0,249250,80 +203,52,255,44,0,249375,88 +204,51,255,48,0,249500,96 +205,50,255,52,0,249625,104 +206,49,255,56,0,249750,112 +207,48,255,60,0,249875,120 +208,47,255,64,0,250000,128 +209,46,255,68,0,250125,136 +210,45,255,72,0,250250,144 +211,44,255,76,0,250375,152 +212,43,255,80,0,250500,160 +213,42,255,84,0,250625,168 +214,41,255,88,0,250750,176 +215,40,255,92,0,250875,184 +216,39,255,96,0,251000,192 +217,38,255,100,0,251125,200 +218,37,255,104,0,251250,208 +219,36,255,108,0,251375,216 +220,35,255,112,0,251500,224 +221,34,255,116,0,251625,232 +222,33,255,120,0,251750,240 +223,32,255,124,0,251875,248 +224,31,255,128,255,252000,0 +225,30,255,132,255,252125,8 +226,29,255,136,255,252250,16 +227,28,255,140,255,252375,24 +228,27,255,144,255,252500,32 +229,26,255,148,255,252625,40 +230,25,255,152,255,252750,48 +231,24,255,156,255,252875,56 +232,23,255,160,255,253000,64 +233,22,255,164,255,253125,72 +234,21,255,168,255,253250,80 +235,20,255,172,255,253375,88 +236,19,255,176,255,253500,96 +237,18,255,180,255,253625,104 +238,17,255,184,255,253750,112 +239,16,255,188,255,253875,120 +240,15,255,192,255,254000,128 +241,14,255,196,255,254125,136 +242,13,255,200,255,254250,144 +243,12,255,204,255,254375,152 +244,11,255,208,255,254500,160 +245,10,255,212,255,254625,168 +246,9,255,216,255,254750,176 +247,8,255,220,255,254875,184 +248,7,255,224,255,255000,192 +249,6,255,228,255,255125,200 +250,5,255,232,255,255250,208 +251,4,255,236,255,255375,216 +252,3,255,240,255,255500,224 +253,2,255,244,255,255625,232 +254,1,255,248,255,255750,240 +255,0,255,252,255,255875,248 diff --git a/MATLAB/HW10/hw10.asv b/MATLAB/HW10/hw10.asv new file mode 100644 index 0000000..0868862 --- /dev/null +++ b/MATLAB/HW10/hw10.asv @@ -0,0 +1,77 @@ +data = importdata("C:\Users\Jacob McDonnell\Documents\CMPEN-472-HW\cmpen472hw10_McDonnell\data.csv"); + +sawtooth = data.data(:,1); +triangle = data.data(:,2); +square = data.data(:,3); +sawtooth125 = data.data(:,4); +square125 = data.data(:,5); +sawtooth250 = data.data(:,7) +time = data.data(:,6); +time = time / 1000000; % adjust to microseconds + +psw = CreatePlot(sawtooth,"Sawtooth Wave Two Cycles",time,1,512); +saveas(psw,"sawtooth2cycles.png"); +psw = CreatePlot(sawtooth,"Sawtooth Wave",time,1,2048); +saveas(psw,"sawtooth.png"); + +pt = CreatePlot(triangle,"Triangle Wave Two Cycles",time,1,1024); +saveas(pt,"triangle2cycles.png"); +pt = CreatePlot(triangle,"Triangle Wave",time,1,2048); +saveas(pt,"triangle.png"); + +psq = CreatePlot(square,"Square Wave Two Cycles",time,1,1024); +saveas(psq,"square2cycles.png"); +psq = CreatePlot(square,"Square Wave",time,1,2048); +saveas(psq,"square.png"); + +psw125 = CreatePlot(sawtooth125,"Sawtooth Wave 125Hz Two Cycles",time,1,128); +saveas(psw125,"sawtooth-125Hz2cycles.png"); +psw125 = CreatePlot(sawtooth125,"Sawtooth Wave 125Hz",time,1,2048); +saveas(psw125,"sawtooth-125Hz.png"); + +psq125 = CreatePlot(square125,"Square Wave 125Hz Two Cycles",time,1,128); +saveas(psq125,"square-125Hz2cycles.png"); +psq125 = CreatePlot(square125,"Square Wave 125Hz",time,1,2048); +saveas(psq125,"square-125Hz.png"); + +psw250 = CreatePlot(sa) + +Fs = 1/8000; % 8000Hz sampling frequency + +function p = CreatePlot(d, label, time, spos, epos) + p = figure; + plot(time(spos:epos), d(spos:epos)); + xlabel('Time in Seconds'); + ylabel('Signal Values'); + title(label); + grid on; +end + +function freqPlot = GeneratePlot(d,t,label) + Fs = 1/mean(diff(t)); + x = d - mean(d); + + n = length(x); % Number of samples + X = fft(x); % Compute the FFT + + % Only take the first half of the spectrum (positive frequencies) + X_mag = abs(X(1:floor(n/2))); % Magnitude of FFT + f = Fs * (0:floor(n/2)-1) / n; % Frequency vector + + freqPlot = figure; + plot(f, X_mag); + xlabel('Frequency (Hz)'); + ylabel('Amplitude'); + title(label); + grid on; +end + +swfft = GeneratePlot(sawtooth,time,'Sawtooth'); + +tfft = GeneratePlot(triangle,time,'Triangle'); + +sqfft = GeneratePlot(square,time,'Square'); + +sw125fft = GeneratePlot(sawtooth125,time,'Sawtooth 125Hz'); + +sq125fft = GeneratePlot(square125,time,'Square 125Hz'); diff --git a/MATLAB/HW10/hw10.m b/MATLAB/HW10/hw10.m new file mode 100644 index 0000000..b8aeb3f --- /dev/null +++ b/MATLAB/HW10/hw10.m @@ -0,0 +1,79 @@ +data = importdata("data.csv"); + +sawtooth = data.data(:,1); +triangle = data.data(:,2); +square = data.data(:,3); +sawtooth125 = data.data(:,4); +square125 = data.data(:,5); +sawtooth250 = data.data(:,7) +time = data.data(:,6); +time = time / 1000000; % adjust to microseconds + +psw = CreatePlot(sawtooth,"Sawtooth Wave Two Cycles",time,1,512); +saveas(psw,"sawtooth2cycles.png"); +psw = CreatePlot(sawtooth,"Sawtooth Wave",time,1,2048); +saveas(psw,"sawtooth.png"); + +pt = CreatePlot(triangle,"Triangle Wave Two Cycles",time,1,1024); +saveas(pt,"triangle2cycles.png"); +pt = CreatePlot(triangle,"Triangle Wave",time,1,2048); +saveas(pt,"triangle.png"); + +psq = CreatePlot(square,"Square Wave Two Cycles",time,1,1024); +saveas(psq,"square2cycles.png"); +psq = CreatePlot(square,"Square Wave",time,1,2048); +saveas(psq,"square.png"); + +psw125 = CreatePlot(sawtooth125,"Sawtooth Wave 125Hz Two Cycles",time,1,128); +saveas(psw125,"sawtooth-125Hz2cycles.png"); +psw125 = CreatePlot(sawtooth125,"Sawtooth Wave 125Hz",time,1,2048); +saveas(psw125,"sawtooth-125Hz.png"); + +psq125 = CreatePlot(square125,"Square Wave 125Hz Two Cycles",time,1,128); +saveas(psq125,"square-125Hz2cycles.png"); +psq125 = CreatePlot(square125,"Square Wave 125Hz",time,1,2048); +saveas(psq125,"square-125Hz.png"); + +psw250 = CreatePlot(sawtooth250,"Sawtooth 250Hz",time,1,2048) + +Fs = 1/8000; % 8000Hz sampling frequency + +function p = CreatePlot(d, label, time, spos, epos) + p = figure; + plot(time(spos:epos), d(spos:epos)); + xlabel('Time in Seconds'); + ylabel('Signal Values'); + title(label); + grid on; +end + +function freqPlot = GeneratePlot(d,t,label) + Fs = 1/mean(diff(t)); + x = d - mean(d); + + n = length(x); % Number of samples + X = fft(x); % Compute the FFT + + % Only take the first half of the spectrum (positive frequencies) + X_mag = abs(X(1:floor(n/2))); % Magnitude of FFT + f = Fs * (0:floor(n/2)-1) / n; % Frequency vector + + freqPlot = figure; + plot(f, X_mag); + xlabel('Frequency (Hz)'); + ylabel('Amplitude'); + title(label); + grid on; +end + +swfft = GeneratePlot(sawtooth,time,'Sawtooth'); + +tfft = GeneratePlot(triangle,time,'Triangle'); + +sqfft = GeneratePlot(square,time,'Square'); + +sw125fft = GeneratePlot(sawtooth125,time,'Sawtooth 125Hz'); + +sq125fft = GeneratePlot(square125,time,'Square 125Hz'); + +sw250fft = GeneratePlot(sawtooth250,time,"Sawtooth 250") diff --git a/MATLAB/HW10/sawtooth-125Hz.png b/MATLAB/HW10/sawtooth-125Hz.png Binary files differnew file mode 100644 index 0000000..5218044 --- /dev/null +++ b/MATLAB/HW10/sawtooth-125Hz.png diff --git a/MATLAB/HW10/sawtooth-125Hz2cycles.png b/MATLAB/HW10/sawtooth-125Hz2cycles.png Binary files differnew file mode 100644 index 0000000..a64031f --- /dev/null +++ b/MATLAB/HW10/sawtooth-125Hz2cycles.png diff --git a/MATLAB/HW10/sawtooth.png b/MATLAB/HW10/sawtooth.png Binary files differnew file mode 100644 index 0000000..d3627cd --- /dev/null +++ b/MATLAB/HW10/sawtooth.png diff --git a/MATLAB/HW10/sawtooth2cycles.png b/MATLAB/HW10/sawtooth2cycles.png Binary files differnew file mode 100644 index 0000000..2b69173 --- /dev/null +++ b/MATLAB/HW10/sawtooth2cycles.png diff --git a/MATLAB/HW10/sq125fft.png b/MATLAB/HW10/sq125fft.png Binary files differnew file mode 100644 index 0000000..454bfe7 --- /dev/null +++ b/MATLAB/HW10/sq125fft.png diff --git a/MATLAB/HW10/sqfft.png b/MATLAB/HW10/sqfft.png Binary files differnew file mode 100644 index 0000000..df95e5d --- /dev/null +++ b/MATLAB/HW10/sqfft.png diff --git a/MATLAB/HW10/square-125Hz.png b/MATLAB/HW10/square-125Hz.png Binary files differnew file mode 100644 index 0000000..9a2caa4 --- /dev/null +++ b/MATLAB/HW10/square-125Hz.png diff --git a/MATLAB/HW10/square-125Hz2cycles.png b/MATLAB/HW10/square-125Hz2cycles.png Binary files differnew file mode 100644 index 0000000..273923f --- /dev/null +++ b/MATLAB/HW10/square-125Hz2cycles.png diff --git a/MATLAB/HW10/square.png b/MATLAB/HW10/square.png Binary files differnew file mode 100644 index 0000000..e6e8449 --- /dev/null +++ b/MATLAB/HW10/square.png diff --git a/MATLAB/HW10/square2cycles.png b/MATLAB/HW10/square2cycles.png Binary files differnew file mode 100644 index 0000000..9b90f31 --- /dev/null +++ b/MATLAB/HW10/square2cycles.png diff --git a/MATLAB/HW10/sw125fft.png b/MATLAB/HW10/sw125fft.png Binary files differnew file mode 100644 index 0000000..ea1342b --- /dev/null +++ b/MATLAB/HW10/sw125fft.png diff --git a/MATLAB/HW10/swfft.png b/MATLAB/HW10/swfft.png Binary files differnew file mode 100644 index 0000000..afafcee --- /dev/null +++ b/MATLAB/HW10/swfft.png diff --git a/MATLAB/HW10/tfft.png b/MATLAB/HW10/tfft.png Binary files differnew file mode 100644 index 0000000..ab0839f --- /dev/null +++ b/MATLAB/HW10/tfft.png diff --git a/MATLAB/HW10/triangle.png b/MATLAB/HW10/triangle.png Binary files differnew file mode 100644 index 0000000..e421495 --- /dev/null +++ b/MATLAB/HW10/triangle.png diff --git a/MATLAB/HW10/triangle2cycles.png b/MATLAB/HW10/triangle2cycles.png Binary files differnew file mode 100644 index 0000000..4be07d3 --- /dev/null +++ b/MATLAB/HW10/triangle2cycles.png diff --git a/MATLAB/HW11/data.csv b/MATLAB/HW11/data.csv new file mode 100644 index 0000000..9a15fd2 --- /dev/null +++ b/MATLAB/HW11/data.csv @@ -0,0 +1,2049 @@ +Sawtooth,Triangle,Square,Sawtooth 125Hz,Square 125Hz,time,Sine Wave 100Hz,Triangle 100Hz,Square 100Hz,Mixed Frequency Sine Wave,Sawtooth 100Hz Generated,Square Wave 100Hz Generated +0,0,0,0,0,0,0,234,0,50,0,0 +1,1,0,4,0,125,229,122,250,241,3,0 +2,2,0,8,0,250,223,128,250,223,6,0 +3,3,0,12,0,375,217,134,250,196,9,0 +4,4,0,16,0,500,210,140,250,161,12,0 +5,5,0,20,0,625,202,147,250,126,15,0 +6,6,0,24,0,750,194,153,250,90,18,0 +7,7,0,28,0,875,186,159,250,64,21,0 +8,8,0,32,0,1000,177,166,250,47,24,0 +9,9,0,36,0,1125,168,172,250,42,27,0 +10,10,0,40,0,1250,158,178,250,49,30,0 +11,11,0,44,0,1375,149,185,250,65,33,0 +12,12,0,48,0,1500,139,191,250,91,36,0 +13,13,0,52,0,1625,129,197,250,120,39,0 +14,14,0,56,0,1750,119,204,250,150,42,0 +15,15,0,60,0,1875,109,210,250,176,45,0 +16,16,0,64,0,2000,99,216,250,196,48,0 +17,17,0,68,0,2125,90,223,250,206,51,0 +18,18,0,72,0,2250,80,229,250,208,54,0 +19,19,0,76,0,2375,71,235,250,200,57,0 +20,20,0,80,0,2500,62,242,250,185,60,0 +21,21,0,84,0,2625,54,248,250,167,63,0 +22,22,0,88,0,2750,46,245,250,146,66,0 +23,23,0,92,0,2875,38,239,250,127,69,0 +24,24,0,96,0,3000,31,232,250,111,72,0 +25,25,0,100,0,3125,25,226,250,102,75,0 +26,26,0,104,0,3250,20,220,250,98,78,0 +27,27,0,108,0,3375,15,213,250,100,81,0 +28,28,0,112,0,3500,10,207,250,107,84,0 +29,29,0,116,0,3625,7,201,50,116,87,0 +30,30,0,120,0,3750,4,194,50,126,90,0 +31,31,0,124,0,3875,2,188,50,134,93,0 +32,32,0,128,255,4000,0,182,50,141,96,0 +33,33,0,132,255,4125,0,175,50,144,99,0 +34,34,0,136,255,4250,0,169,50,143,102,0 +35,35,0,140,255,4375,1,163,50,140,105,0 +36,36,0,144,255,4500,2,156,50,136,108,0 +37,37,0,148,255,4625,5,150,50,132,111,0 +38,38,0,152,255,4750,8,144,50,130,114,0 +39,39,0,156,255,4875,12,138,50,131,117,0 +40,40,0,160,255,5000,17,131,50,136,120,0 +41,41,0,164,255,5125,22,125,50,143,123,0 +42,42,0,168,255,5250,28,119,50,153,126,0 +43,43,0,172,255,5375,35,112,50,162,129,255 +44,44,0,176,255,5500,42,106,50,171,132,255 +45,45,0,180,255,5625,50,100,50,176,135,255 +46,46,0,184,255,5750,58,93,50,175,138,255 +47,47,0,188,255,5875,66,87,50,169,141,255 +48,48,0,192,255,6000,75,81,50,156,144,255 +49,49,0,196,255,6125,85,74,50,140,147,255 +50,50,0,200,255,6250,94,68,50,119,150,255 +51,51,0,204,255,6375,104,62,50,99,153,255 +52,52,0,208,255,6500,114,55,50,81,156,255 +53,53,0,212,255,6625,124,49,50,70,159,255 +54,54,0,216,255,6750,134,43,50,66,162,255 +55,55,0,220,255,6875,143,36,50,71,165,255 +56,56,0,224,255,7000,153,30,50,86,168,255 +57,57,0,228,255,7125,163,24,50,108,171,255 +58,58,0,232,255,7250,172,18,50,138,174,255 +59,59,0,236,255,7375,181,11,50,166,177,255 +60,60,0,240,255,7500,190,5,50,196,180,255 +61,61,0,244,255,7625,198,0,50,217,183,255 +62,62,0,248,255,7750,206,7,50,230,186,255 +63,63,0,252,255,7875,213,13,50,232,189,255 +64,64,0,0,0,8000,220,19,50,221,192,255 +65,65,0,4,0,8125,226,26,50,200,195,255 +66,66,0,8,0,8250,231,32,50,168,198,255 +67,67,0,12,0,8375,236,38,50,134,201,255 +68,68,0,16,0,8500,240,45,50,96,204,255 +69,69,0,20,0,8625,244,51,250,66,207,255 +70,70,0,24,0,8750,246,57,250,41,210,255 +71,71,0,28,0,8875,248,64,250,30,213,255 +72,72,0,32,0,9000,249,70,250,31,216,255 +73,73,0,36,0,9125,249,76,250,46,219,255 +74,74,0,40,0,9250,249,83,250,73,222,255 +75,75,0,44,0,9375,247,89,250,106,225,255 +76,76,0,48,0,9500,244,95,250,146,228,255 +77,77,0,52,0,9625,241,101,250,182,231,255 +78,78,0,56,0,9750,237,108,250,215,234,255 +79,79,0,60,0,9875,233,114,250,236,237,255 +80,80,0,64,0,10000,228,120,250,245,240,255 +81,81,0,68,0,10125,222,127,250,241,243,255 +82,82,0,72,0,10250,215,133,250,223,246,255 +83,83,0,76,0,10375,208,139,250,196,249,255 +84,84,0,80,0,10500,200,146,250,161,252,255 +85,85,0,84,0,10625,192,152,250,126,255,255 +86,86,0,88,0,10750,184,158,250,90,0,0 +87,87,0,92,0,10875,175,165,250,64,3,0 +88,88,0,96,0,11000,166,171,250,47,6,0 +89,89,0,100,0,11125,156,177,250,42,9,0 +90,90,0,104,0,11250,146,183,250,49,12,0 +91,91,0,108,0,11375,136,190,250,65,15,0 +92,92,0,112,0,11500,127,196,250,91,18,0 +93,93,0,116,0,11625,117,203,250,120,21,0 +94,94,0,120,0,11750,107,209,250,150,24,0 +95,95,0,124,0,11875,97,215,250,176,27,0 +96,96,0,128,255,12000,87,221,250,196,30,0 +97,97,0,132,255,12125,78,228,250,206,33,0 +98,98,0,136,255,12250,69,234,250,208,36,0 +99,99,0,140,255,12375,60,240,250,200,39,0 +100,100,0,144,255,12500,52,247,250,185,42,0 +101,101,0,148,255,12625,44,246,250,167,45,0 +102,102,0,152,255,12750,37,240,250,146,48,0 +103,103,0,156,255,12875,30,233,250,127,51,0 +104,104,0,160,255,13000,24,227,250,111,54,0 +105,105,0,164,255,13125,18,221,250,102,57,0 +106,106,0,168,255,13250,13,214,250,98,60,0 +107,107,0,172,255,13375,9,208,250,100,63,0 +108,108,0,176,255,13500,6,202,250,107,66,0 +109,109,0,180,255,13625,3,196,50,116,69,0 +110,110,0,184,255,13750,1,189,50,126,72,0 +111,111,0,188,255,13875,0,183,50,134,75,0 +112,112,0,192,255,14000,0,177,50,141,78,0 +113,113,0,196,255,14125,0,170,50,144,81,0 +114,114,0,200,255,14250,1,164,50,143,84,0 +115,115,0,204,255,14375,3,158,50,140,87,0 +116,116,0,208,255,14500,6,151,50,136,90,0 +117,117,0,212,255,14625,9,145,50,132,93,0 +118,118,0,216,255,14750,13,139,50,130,96,0 +119,119,0,220,255,14875,18,132,50,131,99,0 +120,120,0,224,255,15000,23,126,50,136,102,0 +121,121,0,228,255,15125,30,120,50,143,105,0 +122,122,0,232,255,15250,36,113,50,153,108,0 +123,123,0,236,255,15375,44,107,50,162,111,0 +124,124,0,240,255,15500,51,101,50,171,114,0 +125,125,0,244,255,15625,60,94,50,176,117,0 +126,126,0,248,255,15750,68,88,50,175,120,0 +127,127,0,252,255,15875,77,82,50,169,123,0 +128,128,0,0,0,16000,87,76,50,156,126,0 +129,129,0,4,0,16125,96,69,50,140,129,255 +130,130,0,8,0,16250,106,63,50,119,132,255 +131,131,0,12,0,16375,116,57,50,99,135,255 +132,132,0,16,0,16500,126,50,50,81,138,255 +133,133,0,20,0,16625,136,44,50,70,141,255 +134,134,0,24,0,16750,146,38,50,66,144,255 +135,135,0,28,0,16875,155,31,50,71,147,255 +136,136,0,32,0,17000,165,25,50,86,150,255 +137,137,0,36,0,17125,174,19,50,108,153,255 +138,138,0,40,0,17250,183,12,50,138,156,255 +139,139,0,44,0,17375,192,6,50,166,159,255 +140,140,0,48,0,17500,200,0,50,196,162,255 +141,141,0,52,0,17625,208,5,50,217,165,255 +142,142,0,56,0,17750,215,12,50,230,168,255 +143,143,0,60,0,17875,221,18,50,232,171,255 +144,144,0,64,0,18000,227,24,50,221,174,255 +145,145,0,68,0,18125,233,31,50,200,177,255 +146,146,0,72,0,18250,237,37,50,168,180,255 +147,147,0,76,0,18375,241,43,50,134,183,255 +148,148,0,80,0,18500,244,50,50,96,186,255 +149,149,0,84,0,18625,247,56,250,66,189,255 +150,150,0,88,0,18750,248,62,250,41,192,255 +151,151,0,92,0,18875,249,69,250,30,195,255 +152,152,0,96,0,19000,249,75,250,31,198,255 +153,153,0,100,0,19125,248,81,250,46,201,255 +154,154,0,104,0,19250,246,88,250,73,204,255 +155,155,0,108,0,19375,244,94,250,106,207,255 +156,156,0,112,0,19500,240,100,250,146,210,255 +157,157,0,116,0,19625,236,107,250,182,213,255 +158,158,0,120,0,19750,232,113,250,215,216,255 +159,159,0,124,0,19875,226,119,250,236,219,255 +160,160,0,128,255,20000,220,125,250,245,222,255 +161,161,0,132,255,20125,213,132,250,241,225,255 +162,162,0,136,255,20250,206,138,250,223,228,255 +163,163,0,140,255,20375,199,144,250,196,231,255 +164,164,0,144,255,20500,190,151,250,161,234,255 +165,165,0,148,255,20625,182,157,250,126,237,255 +166,166,0,152,255,20750,173,163,250,90,240,255 +167,167,0,156,255,20875,163,170,250,64,243,255 +168,168,0,160,255,21000,154,176,250,47,246,255 +169,169,0,164,255,21125,144,182,250,42,249,255 +170,170,0,168,255,21250,134,189,250,49,252,255 +171,171,0,172,255,21375,124,195,250,65,255,255 +172,172,0,176,255,21500,114,201,250,91,0,0 +173,173,0,180,255,21625,104,208,250,120,3,0 +174,174,0,184,255,21750,95,214,250,150,6,0 +175,175,0,188,255,21875,85,220,250,176,9,0 +176,176,0,192,255,22000,76,227,250,196,12,0 +177,177,0,196,255,22125,67,233,250,206,15,0 +178,178,0,200,255,22250,58,239,250,208,18,0 +179,179,0,204,255,22375,50,245,250,200,21,0 +180,180,0,208,255,22500,42,247,250,185,24,0 +181,181,0,212,255,22625,35,241,250,167,27,0 +182,182,0,216,255,22750,28,235,250,146,30,0 +183,183,0,220,255,22875,22,228,250,127,33,0 +184,184,0,224,255,23000,17,222,250,111,36,0 +185,185,0,228,255,23125,12,216,250,102,39,0 +186,186,0,232,255,23250,8,209,250,98,42,0 +187,187,0,236,255,23375,5,203,250,100,45,0 +188,188,0,240,255,23500,3,197,250,107,48,0 +189,189,0,244,255,23625,1,190,50,116,51,0 +190,190,0,248,255,23750,0,184,50,126,54,0 +191,191,0,252,255,23875,0,178,50,134,57,0 +192,192,0,0,0,24000,0,171,50,141,60,0 +193,193,0,4,0,24125,1,165,50,144,63,0 +194,194,0,8,0,24250,4,159,50,143,66,0 +195,195,0,12,0,24375,6,153,50,140,69,0 +196,196,0,16,0,24500,10,146,50,136,72,0 +197,197,0,20,0,24625,14,140,50,132,75,0 +198,198,0,24,0,24750,19,134,50,130,78,0 +199,199,0,28,0,24875,25,127,50,131,81,0 +200,200,0,32,0,25000,31,121,50,136,84,0 +201,201,0,36,0,25125,38,115,50,143,87,0 +202,202,0,40,0,25250,45,108,50,153,90,0 +203,203,0,44,0,25375,53,102,50,162,93,0 +204,204,0,48,0,25500,62,96,50,171,96,0 +205,205,0,52,0,25625,70,89,50,176,99,0 +206,206,0,56,0,25750,80,83,50,175,102,0 +207,207,0,60,0,25875,89,77,50,169,105,0 +208,208,0,64,0,26000,99,70,50,156,108,0 +209,209,0,68,0,26125,108,64,50,140,111,0 +210,210,0,72,0,26250,118,58,50,119,114,0 +211,211,0,76,0,26375,128,52,50,99,117,0 +212,212,0,80,0,26500,138,45,50,81,120,0 +213,213,0,84,0,26625,148,39,50,70,123,0 +214,214,0,88,0,26750,158,33,50,66,126,0 +215,215,0,92,0,26875,167,26,50,71,129,255 +216,216,0,96,0,27000,176,20,50,86,132,255 +217,217,0,100,0,27125,185,14,50,108,135,255 +218,218,0,104,0,27250,194,7,50,138,138,255 +219,219,0,108,0,27375,202,1,50,166,141,255 +220,220,0,112,0,27500,209,4,50,196,144,255 +221,221,0,116,0,27625,216,11,50,217,147,255 +222,222,0,120,0,27750,223,17,50,230,150,255 +223,223,0,124,0,27875,229,23,50,232,153,255 +224,224,0,128,255,28000,234,30,50,221,156,255 +225,225,0,132,255,28125,238,36,50,200,159,255 +226,226,0,136,255,28250,242,42,50,168,162,255 +227,227,0,140,255,28375,245,49,50,134,165,255 +228,228,0,144,255,28500,247,55,50,96,168,255 +229,229,0,148,255,28625,249,61,250,66,171,255 +230,230,0,152,255,28750,250,67,250,41,174,255 +231,231,0,156,255,28875,249,74,250,30,177,255 +232,232,0,160,255,29000,248,80,250,31,180,255 +233,233,0,164,255,29125,246,86,250,46,183,255 +234,234,0,168,255,29250,243,93,250,73,186,255 +235,235,0,172,255,29375,240,99,250,106,189,255 +236,236,0,176,255,29500,235,105,250,146,192,255 +237,237,0,180,255,29625,230,112,250,182,195,255 +238,238,0,184,255,29750,225,118,250,215,198,255 +239,239,0,188,255,29875,219,124,250,236,201,255 +240,240,0,192,255,30000,212,131,250,245,204,255 +241,241,0,196,255,30125,204,137,250,241,207,255 +242,242,0,200,255,30250,197,143,250,223,210,255 +243,243,0,204,255,30375,188,150,250,196,213,255 +244,244,0,208,255,30500,180,156,250,161,216,255 +245,245,0,212,255,30625,171,162,250,126,219,255 +246,246,0,216,255,30750,161,168,250,90,222,255 +247,247,0,220,255,30875,151,175,250,64,225,255 +248,248,0,224,255,31000,142,181,250,47,228,255 +249,249,0,228,255,31125,132,187,250,42,231,255 +250,250,0,232,255,31250,122,194,250,49,234,255 +251,251,0,236,255,31375,112,200,250,65,237,255 +252,252,0,240,255,31500,102,206,250,91,240,255 +253,253,0,244,255,31625,92,213,250,120,243,255 +254,254,0,248,255,31750,83,219,250,150,246,255 +255,255,0,252,255,31875,74,225,250,176,249,255 +0,255,255,0,0,32000,65,232,250,196,252,255 +1,254,255,4,0,32125,56,238,250,206,255,255 +2,253,255,8,0,32250,48,244,250,208,0,0 +3,252,255,12,0,32375,41,248,250,200,3,0 +4,251,255,16,0,32500,33,242,250,185,6,0 +5,250,255,20,0,32625,27,236,250,167,9,0 +6,249,255,24,0,32750,21,229,250,146,12,0 +7,248,255,28,0,32875,16,223,250,127,15,0 +8,247,255,32,0,33000,11,217,250,111,18,0 +9,246,255,36,0,33125,8,211,250,102,21,0 +10,245,255,40,0,33250,4,204,250,98,24,0 +11,244,255,44,0,33375,2,198,250,100,27,0 +12,243,255,48,0,33500,0,192,250,107,30,0 +13,242,255,52,0,33625,0,185,50,116,33,0 +14,241,255,56,0,33750,0,179,50,126,36,0 +15,240,255,60,0,33875,0,173,50,134,39,0 +16,239,255,64,0,34000,2,166,50,141,42,0 +17,238,255,68,0,34125,4,160,50,144,45,0 +18,237,255,72,0,34250,7,154,50,143,48,0 +19,236,255,76,0,34375,11,147,50,140,51,0 +20,235,255,80,0,34500,15,141,50,136,54,0 +21,234,255,84,0,34625,20,135,50,132,57,0 +22,233,255,88,0,34750,26,128,50,130,60,0 +23,232,255,92,0,34875,33,122,50,131,63,0 +24,231,255,96,0,35000,40,116,50,136,66,0 +25,230,255,100,0,35125,47,109,50,143,69,0 +26,229,255,104,0,35250,55,103,50,153,72,0 +27,228,255,108,0,35375,64,97,50,162,75,0 +28,227,255,112,0,35500,72,91,50,171,78,0 +29,226,255,116,0,35625,82,84,50,176,81,0 +30,225,255,120,0,35750,91,78,50,175,84,0 +31,224,255,124,0,35875,101,72,50,169,87,0 +32,223,255,128,255,36000,111,65,50,156,90,0 +33,222,255,132,255,36125,121,59,50,140,93,0 +34,221,255,136,255,36250,131,53,50,119,96,0 +35,220,255,140,255,36375,140,46,50,99,99,0 +36,219,255,144,255,36500,150,40,50,81,102,0 +37,218,255,148,255,36625,160,34,50,70,105,0 +38,217,255,152,255,36750,169,27,50,66,108,0 +39,216,255,156,255,36875,178,21,50,71,111,0 +40,215,255,160,255,37000,187,15,50,86,114,0 +41,214,255,164,255,37125,196,9,50,108,117,0 +42,213,255,168,255,37250,204,2,50,138,120,0 +43,212,255,172,255,37375,211,3,50,166,123,0 +44,211,255,176,255,37500,218,9,50,196,126,0 +45,210,255,180,255,37625,224,16,50,217,129,255 +46,209,255,184,255,37750,230,22,50,230,132,255 +47,208,255,188,255,37875,235,28,50,232,135,255 +48,207,255,192,255,38000,239,35,50,221,138,255 +49,206,255,196,255,38125,243,41,50,200,141,255 +50,205,255,200,255,38250,246,47,50,168,144,255 +51,204,255,204,255,38375,248,54,50,134,147,255 +52,203,255,208,255,38500,249,60,50,96,150,255 +53,202,255,212,255,38625,250,66,250,66,153,255 +54,201,255,216,255,38750,249,73,250,41,156,255 +55,200,255,220,255,38875,247,79,250,30,159,255 +56,199,255,224,255,39000,245,85,250,31,162,255 +57,198,255,228,255,39125,242,92,250,46,165,255 +58,197,255,232,255,39250,239,98,250,73,168,255 +59,196,255,236,255,39375,234,104,250,106,171,255 +60,195,255,240,255,39500,229,110,250,146,174,255 +61,194,255,244,255,39625,223,117,250,182,177,255 +62,193,255,248,255,39750,217,123,250,215,180,255 +63,192,255,252,255,39875,210,129,250,236,183,255 +64,191,255,0,0,40000,203,136,250,245,186,255 +65,190,255,4,0,40125,195,142,250,241,189,255 +66,189,255,8,0,40250,186,148,250,223,192,255 +67,188,255,12,0,40375,177,155,250,196,195,255 +68,187,255,16,0,40500,168,161,250,161,198,255 +69,186,255,20,0,40625,159,167,250,126,201,255 +70,185,255,24,0,40750,149,174,250,90,204,255 +71,184,255,28,0,40875,139,180,250,64,207,255 +72,183,255,32,0,41000,130,186,250,47,210,255 +73,182,255,36,0,41125,119,192,250,42,213,255 +74,181,255,40,0,41250,110,199,250,49,216,255 +75,180,255,44,0,41375,100,205,250,65,219,255 +76,179,255,48,0,41500,90,212,250,91,222,255 +77,178,255,52,0,41625,81,218,250,120,225,255 +78,177,255,56,0,41750,72,224,250,150,228,255 +79,176,255,60,0,41875,63,230,250,176,231,255 +80,175,255,64,0,42000,54,237,250,196,234,255 +81,174,255,68,0,42125,46,243,250,206,237,255 +82,173,255,72,0,42250,39,249,250,208,240,255 +83,172,255,76,0,42375,32,243,250,200,243,255 +84,171,255,80,0,42500,26,237,250,185,246,255 +85,170,255,84,0,42625,20,231,250,167,249,255 +86,169,255,88,0,42750,15,224,250,146,252,255 +87,168,255,92,0,42875,10,218,250,127,255,255 +88,167,255,96,0,43000,7,212,250,111,0,0 +89,166,255,100,0,43125,4,205,250,102,3,0 +90,165,255,104,0,43250,2,199,250,98,6,0 +91,164,255,108,0,43375,0,193,250,100,9,0 +92,163,255,112,0,43500,0,187,250,107,12,0 +93,162,255,116,0,43625,0,180,50,116,15,0 +94,161,255,120,0,43750,1,174,50,126,18,0 +95,160,255,124,0,43875,2,168,50,134,21,0 +96,159,255,128,255,44000,5,161,50,141,24,0 +97,158,255,132,255,44125,8,155,50,144,27,0 +98,157,255,136,255,44250,12,149,50,143,30,0 +99,156,255,140,255,44375,16,142,50,140,33,0 +100,155,255,144,255,44500,22,136,50,136,36,0 +101,154,255,148,255,44625,28,130,50,132,39,0 +102,153,255,152,255,44750,34,123,50,130,42,0 +103,152,255,156,255,44875,41,117,50,131,45,0 +104,151,255,160,255,45000,49,111,50,136,48,0 +105,150,255,164,255,45125,57,104,50,143,51,0 +106,149,255,168,255,45250,66,98,50,153,54,0 +107,148,255,172,255,45375,75,92,50,162,57,0 +108,147,255,176,255,45500,84,85,50,171,60,0 +109,146,255,180,255,45625,93,79,50,176,63,0 +110,145,255,184,255,45750,103,73,50,175,66,0 +111,144,255,188,255,45875,113,67,50,169,69,0 +112,143,255,192,255,46000,123,60,50,156,72,0 +113,142,255,196,255,46125,133,54,50,140,75,0 +114,141,255,200,255,46250,143,48,50,119,78,0 +115,140,255,204,255,46375,153,41,50,99,81,0 +116,139,255,208,255,46500,162,35,50,81,84,0 +117,138,255,212,255,46625,171,29,50,70,87,0 +118,137,255,216,255,46750,181,22,50,66,90,0 +119,136,255,220,255,46875,189,16,50,71,93,0 +120,135,255,224,255,47000,198,10,50,86,96,0 +121,134,255,228,255,47125,205,3,50,108,99,0 +122,133,255,232,255,47250,213,2,50,138,102,0 +123,132,255,236,255,47375,219,8,50,166,105,0 +124,131,255,240,255,47500,226,15,50,196,108,0 +125,130,255,244,255,47625,231,21,50,217,111,0 +126,129,255,248,255,47750,236,27,50,230,114,0 +127,128,255,252,255,47875,240,34,50,232,117,0 +128,127,255,0,0,48000,243,40,50,221,120,0 +129,126,255,4,0,48125,246,46,50,200,123,0 +130,125,255,8,0,48250,248,52,50,168,126,0 +131,124,255,12,0,48375,249,59,50,134,129,255 +132,123,255,16,0,48500,249,65,50,96,132,255 +133,122,255,20,0,48625,249,71,250,66,135,255 +134,121,255,24,0,48750,247,78,250,41,138,255 +135,120,255,28,0,48875,245,84,250,30,141,255 +136,119,255,32,0,49000,242,90,250,31,144,255 +137,118,255,36,0,49125,238,97,250,46,147,255 +138,117,255,40,0,49250,233,103,250,73,150,255 +139,116,255,44,0,49375,228,109,250,106,153,255 +140,115,255,48,0,49500,222,116,250,146,156,255 +141,114,255,52,0,49625,216,122,250,182,159,255 +142,113,255,56,0,49750,208,128,250,215,162,255 +143,112,255,60,0,49875,201,135,250,236,165,255 +144,111,255,64,0,50000,193,141,250,245,168,255 +145,110,255,68,0,50125,184,147,250,241,171,255 +146,109,255,72,0,50250,175,153,250,223,174,255 +147,108,255,76,0,50375,166,160,250,196,177,255 +148,107,255,80,0,50500,157,166,250,161,180,255 +149,106,255,84,0,50625,147,172,250,126,183,255 +150,105,255,88,0,50750,137,179,250,90,186,255 +151,104,255,92,0,50875,127,185,250,64,189,255 +152,103,255,96,0,51000,117,191,250,47,192,255 +153,102,255,100,0,51125,107,198,250,42,195,255 +154,101,255,104,0,51250,98,204,250,49,198,255 +155,100,255,108,0,51375,88,210,250,65,201,255 +156,99,255,112,0,51500,78,217,250,91,204,255 +157,98,255,116,0,51625,69,223,250,120,207,255 +158,97,255,120,0,51750,61,229,250,150,210,255 +159,96,255,124,0,51875,52,236,250,176,213,255 +160,95,255,128,255,52000,45,242,250,196,216,255 +161,94,255,132,255,52125,37,248,250,206,219,255 +162,93,255,136,255,52250,30,244,250,208,222,255 +163,92,255,140,255,52375,24,238,250,200,225,255 +164,91,255,144,255,52500,19,232,250,185,228,255 +165,90,255,148,255,52625,14,226,250,167,231,255 +166,89,255,152,255,52750,10,219,250,146,234,255 +167,88,255,156,255,52875,6,213,250,127,237,255 +168,87,255,160,255,53000,3,207,250,111,240,255 +169,86,255,164,255,53125,1,200,250,102,243,255 +170,85,255,168,255,53250,0,194,250,98,246,255 +171,84,255,172,255,53375,0,188,250,100,249,255 +172,83,255,176,255,53500,0,181,250,107,252,255 +173,82,255,180,255,53625,1,175,50,116,255,255 +174,81,255,184,255,53750,3,169,50,126,0,0 +175,80,255,188,255,53875,5,162,50,134,3,0 +176,79,255,192,255,54000,9,156,50,141,6,0 +177,78,255,196,255,54125,13,150,50,144,9,0 +178,77,255,200,255,54250,18,144,50,143,12,0 +179,76,255,204,255,54375,23,137,50,140,15,0 +180,75,255,208,255,54500,29,131,50,136,18,0 +181,74,255,212,255,54625,36,125,50,132,21,0 +182,73,255,216,255,54750,43,118,50,130,24,0 +183,72,255,220,255,54875,51,112,50,131,27,0 +184,71,255,224,255,55000,59,106,50,136,30,0 +185,70,255,228,255,55125,68,99,50,143,33,0 +186,69,255,232,255,55250,77,93,50,153,36,0 +187,68,255,236,255,55375,86,87,50,162,39,0 +188,67,255,240,255,55500,96,80,50,171,42,0 +189,66,255,244,255,55625,106,74,50,176,45,0 +190,65,255,248,255,55750,115,68,50,175,48,0 +191,64,255,252,255,55875,125,61,50,169,51,0 +192,63,255,0,0,56000,135,55,50,156,54,0 +193,62,255,4,0,56125,145,49,50,140,57,0 +194,61,255,8,0,56250,155,42,50,119,60,0 +195,60,255,12,0,56375,164,36,50,99,63,0 +196,59,255,16,0,56500,174,30,50,81,66,0 +197,58,255,20,0,56625,183,24,50,70,69,0 +198,57,255,24,0,56750,191,17,50,66,72,0 +199,56,255,28,0,56875,199,11,50,71,75,0 +200,55,255,32,0,57000,207,5,50,86,78,0 +201,54,255,36,0,57125,214,1,50,108,81,0 +202,53,255,40,0,57250,221,7,50,138,84,0 +203,52,255,44,0,57375,227,13,50,166,87,0 +204,51,255,48,0,57500,232,20,50,196,90,0 +205,50,255,52,0,57625,237,26,50,217,93,0 +206,49,255,56,0,57750,241,32,50,230,96,0 +207,48,255,60,0,57875,244,39,50,232,99,0 +208,47,255,64,0,58000,247,45,50,221,102,0 +209,46,255,68,0,58125,248,51,50,200,105,0 +210,45,255,72,0,58250,249,58,50,168,108,0 +211,44,255,76,0,58375,249,64,50,134,111,0 +212,43,255,80,0,58500,248,70,50,96,114,0 +213,42,255,84,0,58625,247,77,250,66,117,0 +214,41,255,88,0,58750,244,83,250,41,120,0 +215,40,255,92,0,58875,241,89,250,30,123,0 +216,39,255,96,0,59000,237,95,250,31,126,0 +217,38,255,100,0,59125,232,102,250,46,129,255 +218,37,255,104,0,59250,227,108,250,73,132,255 +219,36,255,108,0,59375,221,114,250,106,135,255 +220,35,255,112,0,59500,214,121,250,146,138,255 +221,34,255,116,0,59625,207,127,250,182,141,255 +222,33,255,120,0,59750,199,133,250,215,144,255 +223,32,255,124,0,59875,191,140,250,236,147,255 +224,31,255,128,255,60000,182,146,250,245,150,255 +225,30,255,132,255,60125,173,152,250,241,153,255 +226,29,255,136,255,60250,164,159,250,223,156,255 +227,28,255,140,255,60375,154,165,250,196,159,255 +228,27,255,144,255,60500,145,171,250,161,162,255 +229,26,255,148,255,60625,135,177,250,126,165,255 +230,25,255,152,255,60750,125,184,250,90,168,255 +231,24,255,156,255,60875,115,190,250,64,171,255 +232,23,255,160,255,61000,105,197,250,47,174,255 +233,22,255,164,255,61125,95,203,250,42,177,255 +234,21,255,168,255,61250,86,209,250,49,180,255 +235,20,255,172,255,61375,76,215,250,65,183,255 +236,19,255,176,255,61500,67,222,250,91,186,255 +237,18,255,180,255,61625,59,228,250,120,189,255 +238,17,255,184,255,61750,51,234,250,150,192,255 +239,16,255,188,255,61875,43,241,250,176,195,255 +240,15,255,192,255,62000,36,247,250,196,198,255 +241,14,255,196,255,62125,29,246,250,206,201,255 +242,13,255,200,255,62250,23,239,250,208,204,255 +243,12,255,204,255,62375,17,233,250,200,207,255 +244,11,255,208,255,62500,13,227,250,185,210,255 +245,10,255,212,255,62625,9,220,250,167,213,255 +246,9,255,216,255,62750,5,214,250,146,216,255 +247,8,255,220,255,62875,3,208,250,127,219,255 +248,7,255,224,255,63000,1,202,250,111,222,255 +249,6,255,228,255,63125,0,195,250,102,225,255 +250,5,255,232,255,63250,0,189,250,98,228,255 +251,4,255,236,255,63375,0,183,250,100,231,255 +252,3,255,240,255,63500,1,176,250,107,234,255 +253,2,255,244,255,63625,3,170,50,116,237,255 +254,1,255,248,255,63750,6,164,50,126,240,255 +255,0,255,252,255,63875,10,157,50,134,243,255 +0,0,0,0,0,64000,14,151,50,141,246,255 +1,1,0,4,0,64125,19,145,50,144,249,255 +2,2,0,8,0,64250,25,138,50,143,252,255 +3,3,0,12,0,64375,31,132,50,140,255,255 +4,4,0,16,0,64500,38,126,50,136,0,0 +5,5,0,20,0,64625,45,119,50,132,3,0 +6,6,0,24,0,64750,53,113,50,130,6,0 +7,7,0,28,0,64875,61,107,50,131,9,0 +8,8,0,32,0,65000,70,100,50,136,12,0 +9,9,0,36,0,65125,79,94,50,143,15,0 +10,10,0,40,0,65250,88,88,50,153,18,0 +11,11,0,44,0,65375,98,82,50,162,21,0 +12,12,0,48,0,65500,108,75,50,171,24,0 +13,13,0,52,0,65625,118,69,50,176,27,0 +14,14,0,56,0,65750,128,63,50,175,30,0 +15,15,0,60,0,65875,138,56,50,169,33,0 +16,16,0,64,0,66000,147,50,50,156,36,0 +17,17,0,68,0,66125,157,44,50,140,39,0 +18,18,0,72,0,66250,167,37,50,119,42,0 +19,19,0,76,0,66375,176,31,50,99,45,0 +20,20,0,80,0,66500,185,25,50,81,48,0 +21,21,0,84,0,66625,193,18,50,70,51,0 +22,22,0,88,0,66750,201,12,50,66,54,0 +23,23,0,92,0,66875,209,6,50,71,57,0 +24,24,0,96,0,67000,216,0,50,86,60,0 +25,25,0,100,0,67125,222,6,50,108,63,0 +26,26,0,104,0,67250,228,12,50,138,66,0 +27,27,0,108,0,67375,233,19,50,166,69,0 +28,28,0,112,0,67500,238,25,50,196,72,0 +29,29,0,116,0,67625,242,31,50,217,75,0 +30,30,0,120,0,67750,245,37,50,230,78,0 +31,31,0,124,0,67875,247,44,50,232,81,0 +32,32,0,128,255,68000,249,50,50,221,84,0 +33,33,0,132,255,68125,250,56,50,200,87,0 +34,34,0,136,255,68250,249,63,50,168,90,0 +35,35,0,140,255,68375,248,69,50,134,93,0 +36,36,0,144,255,68500,246,75,50,96,96,0 +37,37,0,148,255,68625,243,82,250,66,99,0 +38,38,0,152,255,68750,240,88,250,41,102,0 +39,39,0,156,255,68875,236,94,250,30,105,0 +40,40,0,160,255,69000,231,101,250,31,108,0 +41,41,0,164,255,69125,225,107,250,46,111,0 +42,42,0,168,255,69250,219,113,250,73,114,0 +43,43,0,172,255,69375,212,119,250,106,117,0 +44,44,0,176,255,69500,205,126,250,146,120,0 +45,45,0,180,255,69625,197,132,250,182,123,0 +46,46,0,184,255,69750,189,138,250,215,126,0 +47,47,0,188,255,69875,180,145,250,236,129,255 +48,48,0,192,255,70000,171,151,250,245,132,255 +49,49,0,196,255,70125,162,157,250,241,135,255 +50,50,0,200,255,70250,152,164,250,223,138,255 +51,51,0,204,255,70375,142,170,250,196,141,255 +52,52,0,208,255,70500,132,176,250,161,144,255 +53,53,0,212,255,70625,122,183,250,126,147,255 +54,54,0,216,255,70750,113,189,250,90,150,255 +55,55,0,220,255,70875,103,195,250,64,153,255 +56,56,0,224,255,71000,93,202,250,47,156,255 +57,57,0,228,255,71125,83,208,250,42,159,255 +58,58,0,232,255,71250,74,214,250,49,162,255 +59,59,0,236,255,71375,65,221,250,65,165,255 +60,60,0,240,255,71500,57,227,250,91,168,255 +61,61,0,244,255,71625,49,233,250,120,171,255 +62,62,0,248,255,71750,41,239,250,150,174,255 +63,63,0,252,255,71875,34,246,250,176,177,255 +64,64,0,0,0,72000,27,247,250,196,180,255 +65,65,0,4,0,72125,21,241,250,206,183,255 +66,66,0,8,0,72250,16,234,250,208,186,255 +67,67,0,12,0,72375,12,228,250,200,189,255 +68,68,0,16,0,72500,8,222,250,185,192,255 +69,69,0,20,0,72625,5,215,250,167,195,255 +70,70,0,24,0,72750,2,209,250,146,198,255 +71,71,0,28,0,72875,1,203,250,127,201,255 +72,72,0,32,0,73000,0,196,250,111,204,255 +73,73,0,36,0,73125,0,190,250,102,207,255 +74,74,0,40,0,73250,0,184,250,98,210,255 +75,75,0,44,0,73375,2,177,250,100,213,255 +76,76,0,48,0,73500,4,171,250,107,216,255 +77,77,0,52,0,73625,7,165,50,116,219,255 +78,78,0,56,0,73750,11,159,50,126,222,255 +79,79,0,60,0,73875,15,152,50,134,225,255 +80,80,0,64,0,74000,20,146,50,141,228,255 +81,81,0,68,0,74125,26,140,50,144,231,255 +82,82,0,72,0,74250,32,133,50,143,234,255 +83,83,0,76,0,74375,39,127,50,140,237,255 +84,84,0,80,0,74500,47,121,50,136,240,255 +85,85,0,84,0,74625,55,114,50,132,243,255 +86,86,0,88,0,74750,63,108,50,130,246,255 +87,87,0,92,0,74875,72,102,50,131,249,255 +88,88,0,96,0,75000,81,95,50,136,252,255 +89,89,0,100,0,75125,91,89,50,143,255,255 +90,90,0,104,0,75250,100,83,50,153,0,0 +91,91,0,108,0,75375,110,76,50,162,3,0 +92,92,0,112,0,75500,120,70,50,171,6,0 +93,93,0,116,0,75625,130,64,50,176,9,0 +94,94,0,120,0,75750,140,57,50,175,12,0 +95,95,0,124,0,75875,150,51,50,169,15,0 +96,96,0,128,255,76000,159,45,50,156,18,0 +97,97,0,132,255,76125,169,39,50,140,21,0 +98,98,0,136,255,76250,178,32,50,119,24,0 +99,99,0,140,255,76375,187,26,50,99,27,0 +100,100,0,144,255,76500,195,20,50,81,30,0 +101,101,0,148,255,76625,203,13,50,70,33,0 +102,102,0,152,255,76750,211,7,50,66,36,0 +103,103,0,156,255,76875,218,1,50,71,39,0 +104,104,0,160,255,77000,224,5,50,86,42,0 +105,105,0,164,255,77125,229,11,50,108,45,0 +106,106,0,168,255,77250,234,17,50,138,48,0 +107,107,0,172,255,77375,239,24,50,166,51,0 +108,108,0,176,255,77500,243,30,50,196,54,0 +109,109,0,180,255,77625,245,36,50,217,57,0 +110,110,0,184,255,77750,248,43,50,230,60,0 +111,111,0,188,255,77875,249,49,50,232,63,0 +112,112,0,192,255,78000,250,55,50,221,66,0 +113,113,0,196,255,78125,249,62,50,200,69,0 +114,114,0,200,255,78250,248,68,50,168,72,0 +115,115,0,204,255,78375,245,74,50,134,75,0 +116,116,0,208,255,78500,243,80,50,96,78,0 +117,117,0,212,255,78625,239,87,250,66,81,0 +118,118,0,216,255,78750,235,93,250,41,84,0 +119,119,0,220,255,78875,230,99,250,30,87,0 +120,120,0,224,255,79000,224,106,250,31,90,0 +121,121,0,228,255,79125,218,112,250,46,93,0 +122,122,0,232,255,79250,211,118,250,73,96,0 +123,123,0,236,255,79375,203,125,250,106,99,0 +124,124,0,240,255,79500,195,131,250,146,102,0 +125,125,0,244,255,79625,187,137,250,182,105,0 +126,126,0,248,255,79750,178,144,250,215,108,0 +127,127,0,252,255,79875,169,150,250,236,111,0 +128,128,0,0,0,80000,159,156,250,245,114,0 +129,129,0,4,0,80125,150,162,250,241,117,0 +130,130,0,8,0,80250,140,169,250,223,120,0 +131,131,0,12,0,80375,130,175,250,196,123,0 +132,132,0,16,0,80500,120,182,250,161,126,0 +133,133,0,20,0,80625,110,188,250,126,129,255 +134,134,0,24,0,80750,100,194,250,90,132,255 +135,135,0,28,0,80875,91,200,250,64,135,255 +136,136,0,32,0,81000,81,207,250,47,138,255 +137,137,0,36,0,81125,72,213,250,42,141,255 +138,138,0,40,0,81250,63,219,250,49,144,255 +139,139,0,44,0,81375,55,226,250,65,147,255 +140,140,0,48,0,81500,47,232,250,91,150,255 +141,141,0,52,0,81625,39,238,250,120,153,255 +142,142,0,56,0,81750,32,245,250,150,156,255 +143,143,0,60,0,81875,26,248,250,176,159,255 +144,144,0,64,0,82000,20,242,250,196,162,255 +145,145,0,68,0,82125,15,235,250,206,165,255 +146,146,0,72,0,82250,11,229,250,208,168,255 +147,147,0,76,0,82375,7,223,250,200,171,255 +148,148,0,80,0,82500,4,217,250,185,174,255 +149,149,0,84,0,82625,2,210,250,167,177,255 +150,150,0,88,0,82750,0,204,250,146,180,255 +151,151,0,92,0,82875,0,198,250,127,183,255 +152,152,0,96,0,83000,0,191,250,111,186,255 +153,153,0,100,0,83125,1,185,250,102,189,255 +154,154,0,104,0,83250,2,179,250,98,192,255 +155,155,0,108,0,83375,5,172,250,100,195,255 +156,156,0,112,0,83500,8,166,250,107,198,255 +157,157,0,116,0,83625,12,160,50,116,201,255 +158,158,0,120,0,83750,16,153,50,126,204,255 +159,159,0,124,0,83875,21,147,50,134,207,255 +160,160,0,128,255,84000,27,141,50,141,210,255 +161,161,0,132,255,84125,34,134,50,144,213,255 +162,162,0,136,255,84250,41,128,50,143,216,255 +163,163,0,140,255,84375,49,122,50,140,219,255 +164,164,0,144,255,84500,57,115,50,136,222,255 +165,165,0,148,255,84625,65,109,50,132,225,255 +166,166,0,152,255,84750,74,103,50,130,228,255 +167,167,0,156,255,84875,83,97,50,131,231,255 +168,168,0,160,255,85000,93,90,50,136,234,255 +169,169,0,164,255,85125,103,84,50,143,237,255 +170,170,0,168,255,85250,113,78,50,153,240,255 +171,171,0,172,255,85375,122,71,50,162,243,255 +172,172,0,176,255,85500,132,65,50,171,246,255 +173,173,0,180,255,85625,142,59,50,176,249,255 +174,174,0,184,255,85750,152,52,50,175,252,255 +175,175,0,188,255,85875,162,46,50,169,255,255 +176,176,0,192,255,86000,171,40,50,156,0,0 +177,177,0,196,255,86125,180,33,50,140,3,0 +178,178,0,200,255,86250,189,27,50,119,6,0 +179,179,0,204,255,86375,197,21,50,99,9,0 +180,180,0,208,255,86500,205,15,50,81,12,0 +181,181,0,212,255,86625,212,8,50,70,15,0 +182,182,0,216,255,86750,219,2,50,66,18,0 +183,183,0,220,255,86875,225,3,50,71,21,0 +184,184,0,224,255,87000,231,10,50,86,24,0 +185,185,0,228,255,87125,236,16,50,108,27,0 +186,186,0,232,255,87250,240,22,50,138,30,0 +187,187,0,236,255,87375,243,29,50,166,33,0 +188,188,0,240,255,87500,246,35,50,196,36,0 +189,189,0,244,255,87625,248,41,50,217,39,0 +190,190,0,248,255,87750,249,48,50,230,42,0 +191,191,0,252,255,87875,250,54,50,232,45,0 +192,192,0,0,0,88000,249,60,50,221,48,0 +193,193,0,4,0,88125,247,67,50,200,51,0 +194,194,0,8,0,88250,245,73,50,168,54,0 +195,195,0,12,0,88375,242,79,50,134,57,0 +196,196,0,16,0,88500,238,86,50,96,60,0 +197,197,0,20,0,88625,234,92,250,66,63,0 +198,198,0,24,0,88750,228,98,250,41,66,0 +199,199,0,28,0,88875,222,104,250,30,69,0 +200,200,0,32,0,89000,216,111,250,31,72,0 +201,201,0,36,0,89125,209,117,250,46,75,0 +202,202,0,40,0,89250,201,123,250,73,78,0 +203,203,0,44,0,89375,193,130,250,106,81,0 +204,204,0,48,0,89500,185,136,250,146,84,0 +205,205,0,52,0,89625,176,142,250,182,87,0 +206,206,0,56,0,89750,167,149,250,215,90,0 +207,207,0,60,0,89875,157,155,250,236,93,0 +208,208,0,64,0,90000,148,161,250,245,96,0 +209,209,0,68,0,90125,138,168,250,241,99,0 +210,210,0,72,0,90250,128,174,250,223,102,0 +211,211,0,76,0,90375,118,180,250,196,105,0 +212,212,0,80,0,90500,108,187,250,161,108,0 +213,213,0,84,0,90625,98,193,250,126,111,0 +214,214,0,88,0,90750,88,199,250,90,114,0 +215,215,0,92,0,90875,79,206,250,64,117,0 +216,216,0,96,0,91000,70,212,250,47,120,0 +217,217,0,100,0,91125,61,218,250,42,123,0 +218,218,0,104,0,91250,53,224,250,49,126,0 +219,219,0,108,0,91375,45,231,250,65,129,255 +220,220,0,112,0,91500,38,237,250,91,132,255 +221,221,0,116,0,91625,31,243,250,120,135,255 +222,222,0,120,0,91750,25,249,250,150,138,255 +223,223,0,124,0,91875,19,243,250,176,141,255 +224,224,0,128,255,92000,14,237,250,196,144,255 +225,225,0,132,255,92125,10,230,250,206,147,255 +226,226,0,136,255,92250,6,224,250,208,150,255 +227,227,0,140,255,92375,3,218,250,200,153,255 +228,228,0,144,255,92500,1,211,250,185,156,255 +229,229,0,148,255,92625,0,205,250,167,159,255 +230,230,0,152,255,92750,0,199,250,146,162,255 +231,231,0,156,255,92875,0,192,250,127,165,255 +232,232,0,160,255,93000,1,186,250,111,168,255 +233,233,0,164,255,93125,3,180,250,102,171,255 +234,234,0,168,255,93250,5,174,250,98,174,255 +235,235,0,172,255,93375,9,167,250,100,177,255 +236,236,0,176,255,93500,13,161,250,107,180,255 +237,237,0,180,255,93625,17,155,50,116,183,255 +238,238,0,184,255,93750,23,148,50,126,186,255 +239,239,0,188,255,93875,29,142,50,134,189,255 +240,240,0,192,255,94000,36,136,50,141,192,255 +241,241,0,196,255,94125,43,129,50,144,195,255 +242,242,0,200,255,94250,50,123,50,143,198,255 +243,243,0,204,255,94375,59,117,50,140,201,255 +244,244,0,208,255,94500,67,110,50,136,204,255 +245,245,0,212,255,94625,76,104,50,132,207,255 +246,246,0,216,255,94750,86,98,50,130,210,255 +247,247,0,220,255,94875,95,91,50,131,213,255 +248,248,0,224,255,95000,105,85,50,136,216,255 +249,249,0,228,255,95125,115,79,50,143,219,255 +250,250,0,232,255,95250,125,72,50,153,222,255 +251,251,0,236,255,95375,135,66,50,162,225,255 +252,252,0,240,255,95500,145,60,50,171,228,255 +253,253,0,244,255,95625,154,54,50,176,231,255 +254,254,0,248,255,95750,164,47,50,175,234,255 +255,255,0,252,255,95875,173,41,50,169,237,255 +0,255,255,0,0,96000,182,35,50,156,240,255 +1,254,255,4,0,96125,191,28,50,140,243,255 +2,253,255,8,0,96250,199,22,50,119,246,255 +3,252,255,12,0,96375,207,16,50,99,249,255 +4,251,255,16,0,96500,214,9,50,81,252,255 +5,250,255,20,0,96625,221,3,50,70,255,255 +6,249,255,24,0,96750,227,2,50,66,0,0 +7,248,255,28,0,96875,232,9,50,71,3,0 +8,247,255,32,0,97000,237,15,50,86,6,0 +9,246,255,36,0,97125,241,21,50,108,9,0 +10,245,255,40,0,97250,244,28,50,138,12,0 +11,244,255,44,0,97375,246,34,50,166,15,0 +12,243,255,48,0,97500,248,40,50,196,18,0 +13,242,255,52,0,97625,249,46,50,217,21,0 +14,241,255,56,0,97750,249,53,50,230,24,0 +15,240,255,60,0,97875,248,59,50,232,27,0 +16,239,255,64,0,98000,247,65,50,221,30,0 +17,238,255,68,0,98125,244,72,50,200,33,0 +18,237,255,72,0,98250,241,78,50,168,36,0 +19,236,255,76,0,98375,237,84,50,134,39,0 +20,235,255,80,0,98500,232,91,50,96,42,0 +21,234,255,84,0,98625,227,97,250,66,45,0 +22,233,255,88,0,98750,221,103,250,41,48,0 +23,232,255,92,0,98875,214,110,250,30,51,0 +24,231,255,96,0,99000,207,116,250,31,54,0 +25,230,255,100,0,99125,200,122,250,46,57,0 +26,229,255,104,0,99250,191,129,250,73,60,0 +27,228,255,108,0,99375,183,135,250,106,63,0 +28,227,255,112,0,99500,174,141,250,146,66,0 +29,226,255,116,0,99625,164,147,250,182,69,0 +30,225,255,120,0,99750,155,154,250,215,72,0 +31,224,255,124,0,99875,145,160,250,236,75,0 +32,223,255,128,255,100000,135,166,250,245,78,0 +33,222,255,132,255,100125,125,173,250,241,81,0 +34,221,255,136,255,100250,115,179,250,223,84,0 +35,220,255,140,255,100375,106,185,250,196,87,0 +36,219,255,144,255,100500,96,192,250,161,90,0 +37,218,255,148,255,100625,86,198,250,126,93,0 +38,217,255,152,255,100750,77,204,250,90,96,0 +39,216,255,156,255,100875,68,211,250,64,99,0 +40,215,255,160,255,101000,59,217,250,47,102,0 +41,214,255,164,255,101125,51,223,250,42,105,0 +42,213,255,168,255,101250,43,230,250,49,108,0 +43,212,255,172,255,101375,36,236,250,65,111,0 +44,211,255,176,255,101500,29,242,250,91,114,0 +45,210,255,180,255,101625,23,249,250,120,117,0 +46,209,255,184,255,101750,18,244,250,150,120,0 +47,208,255,188,255,101875,13,238,250,176,123,0 +48,207,255,192,255,102000,9,232,250,196,126,0 +49,206,255,196,255,102125,5,225,250,206,129,255 +50,205,255,200,255,102250,3,219,250,208,132,255 +51,204,255,204,255,102375,1,213,250,200,135,255 +52,203,255,208,255,102500,0,206,250,185,138,255 +53,202,255,212,255,102625,0,200,250,167,141,255 +54,201,255,216,255,102750,0,194,250,146,144,255 +55,200,255,220,255,102875,1,187,250,127,147,255 +56,199,255,224,255,103000,3,181,250,111,150,255 +57,198,255,228,255,103125,6,175,250,102,153,255 +58,197,255,232,255,103250,9,168,250,98,156,255 +59,196,255,236,255,103375,14,162,250,100,159,255 +60,195,255,240,255,103500,19,156,250,107,162,255 +61,194,255,244,255,103625,24,149,50,116,165,255 +62,193,255,248,255,103750,30,143,50,126,168,255 +63,192,255,252,255,103875,37,137,50,134,171,255 +64,191,255,0,0,104000,44,130,50,141,174,255 +65,190,255,4,0,104125,52,124,50,144,177,255 +66,189,255,8,0,104250,61,118,50,143,180,255 +67,188,255,12,0,104375,69,112,50,140,183,255 +68,187,255,16,0,104500,78,105,50,136,186,255 +69,186,255,20,0,104625,88,99,50,132,189,255 +70,185,255,24,0,104750,97,93,50,130,192,255 +71,184,255,28,0,104875,107,86,50,131,195,255 +72,183,255,32,0,105000,117,80,50,136,198,255 +73,182,255,36,0,105125,127,74,50,143,201,255 +74,181,255,40,0,105250,137,67,50,153,204,255 +75,180,255,44,0,105375,147,61,50,162,207,255 +76,179,255,48,0,105500,156,55,50,171,210,255 +77,178,255,52,0,105625,166,48,50,176,213,255 +78,177,255,56,0,105750,175,42,50,175,216,255 +79,176,255,60,0,105875,184,36,50,169,219,255 +80,175,255,64,0,106000,193,30,50,156,222,255 +81,174,255,68,0,106125,201,23,50,140,225,255 +82,173,255,72,0,106250,208,17,50,119,228,255 +83,172,255,76,0,106375,215,11,50,99,231,255 +84,171,255,80,0,106500,222,4,50,81,234,255 +85,170,255,84,0,106625,228,1,50,70,237,255 +86,169,255,88,0,106750,233,7,50,66,240,255 +87,168,255,92,0,106875,238,14,50,71,243,255 +88,167,255,96,0,107000,242,20,50,86,246,255 +89,166,255,100,0,107125,245,26,50,108,249,255 +90,165,255,104,0,107250,247,33,50,138,252,255 +91,164,255,108,0,107375,249,39,50,166,255,255 +92,163,255,112,0,107500,249,45,50,196,0,0 +93,162,255,116,0,107625,249,52,50,217,3,0 +94,161,255,120,0,107750,248,58,50,230,6,0 +95,160,255,124,0,107875,246,64,50,232,9,0 +96,159,255,128,255,108000,244,71,50,221,12,0 +97,158,255,132,255,108125,240,77,50,200,15,0 +98,157,255,136,255,108250,236,83,50,168,18,0 +99,156,255,140,255,108375,231,89,50,134,21,0 +100,155,255,144,255,108500,226,96,50,96,24,0 +101,154,255,148,255,108625,219,102,250,66,27,0 +102,153,255,152,255,108750,213,108,250,41,30,0 +103,152,255,156,255,108875,205,115,250,30,33,0 +104,151,255,160,255,109000,198,121,250,31,36,0 +105,150,255,164,255,109125,189,127,250,46,39,0 +106,149,255,168,255,109250,181,134,250,73,42,0 +107,148,255,172,255,109375,172,140,250,106,45,0 +108,147,255,176,255,109500,162,146,250,146,48,0 +109,146,255,180,255,109625,153,153,250,182,51,0 +110,145,255,184,255,109750,143,159,250,215,54,0 +111,144,255,188,255,109875,133,165,250,236,57,0 +112,143,255,192,255,110000,123,171,250,245,60,0 +113,142,255,196,255,110125,113,178,250,241,63,0 +114,141,255,200,255,110250,103,184,250,223,66,0 +115,140,255,204,255,110375,94,191,250,196,69,0 +116,139,255,208,255,110500,84,197,250,161,72,0 +117,138,255,212,255,110625,75,203,250,126,75,0 +118,137,255,216,255,110750,66,209,250,90,78,0 +119,136,255,220,255,110875,57,216,250,64,81,0 +120,135,255,224,255,111000,49,222,250,47,84,0 +121,134,255,228,255,111125,41,228,250,42,87,0 +122,133,255,232,255,111250,34,235,250,49,90,0 +123,132,255,236,255,111375,28,241,250,65,93,0 +124,131,255,240,255,111500,22,247,250,91,96,0 +125,130,255,244,255,111625,16,245,250,120,99,0 +126,129,255,248,255,111750,12,239,250,150,102,0 +127,128,255,252,255,111875,8,233,250,176,105,0 +128,127,255,0,0,112000,5,226,250,196,108,0 +129,126,255,4,0,112125,2,220,250,206,111,0 +130,125,255,8,0,112250,1,214,250,208,114,0 +131,124,255,12,0,112375,0,208,250,200,117,0 +132,123,255,16,0,112500,0,201,250,185,120,0 +133,122,255,20,0,112625,0,195,250,167,123,0 +134,121,255,24,0,112750,2,189,250,146,126,0 +135,120,255,28,0,112875,4,182,250,127,129,255 +136,119,255,32,0,113000,7,176,250,111,132,255 +137,118,255,36,0,113125,10,170,250,102,135,255 +138,117,255,40,0,113250,15,163,250,98,138,255 +139,116,255,44,0,113375,20,157,250,100,141,255 +140,115,255,48,0,113500,26,151,250,107,144,255 +141,114,255,52,0,113625,32,144,50,116,147,255 +142,113,255,56,0,113750,39,138,50,126,150,255 +143,112,255,60,0,113875,46,132,50,134,153,255 +144,111,255,64,0,114000,54,125,50,141,156,255 +145,110,255,68,0,114125,63,119,50,144,159,255 +146,109,255,72,0,114250,71,113,50,143,162,255 +147,108,255,76,0,114375,81,106,50,140,165,255 +148,107,255,80,0,114500,90,100,50,136,168,255 +149,106,255,84,0,114625,100,94,50,132,171,255 +150,105,255,88,0,114750,110,88,50,130,174,255 +151,104,255,92,0,114875,119,81,50,131,177,255 +152,103,255,96,0,115000,129,75,50,136,180,255 +153,102,255,100,0,115125,139,69,50,143,183,255 +154,101,255,104,0,115250,149,62,50,153,186,255 +155,100,255,108,0,115375,159,56,50,162,189,255 +156,99,255,112,0,115500,168,50,50,171,192,255 +157,98,255,116,0,115625,177,43,50,176,195,255 +158,97,255,120,0,115750,186,37,50,175,198,255 +159,96,255,124,0,115875,195,31,50,169,201,255 +160,95,255,128,255,116000,203,24,50,156,204,255 +161,94,255,132,255,116125,210,18,50,140,207,255 +162,93,255,136,255,116250,217,12,50,119,210,255 +163,92,255,140,255,116375,223,5,50,99,213,255 +164,91,255,144,255,116500,229,0,50,81,216,255 +165,90,255,148,255,116625,234,6,50,70,219,255 +166,89,255,152,255,116750,239,13,50,66,222,255 +167,88,255,156,255,116875,242,19,50,71,225,255 +168,87,255,160,255,117000,245,25,50,86,228,255 +169,86,255,164,255,117125,247,31,50,108,231,255 +170,85,255,168,255,117250,249,38,50,138,234,255 +171,84,255,172,255,117375,250,44,50,166,237,255 +172,83,255,176,255,117500,249,50,50,196,240,255 +173,82,255,180,255,117625,248,57,50,217,243,255 +174,81,255,184,255,117750,246,63,50,230,246,255 +175,80,255,188,255,117875,243,69,50,232,249,255 +176,79,255,192,255,118000,239,76,50,221,252,255 +177,78,255,196,255,118125,235,82,50,200,255,255 +178,77,255,200,255,118250,230,88,50,168,0,0 +179,76,255,204,255,118375,224,95,50,134,3,0 +180,75,255,208,255,118500,218,101,50,96,6,0 +181,74,255,212,255,118625,211,107,250,66,9,0 +182,73,255,216,255,118750,204,114,250,41,12,0 +183,72,255,220,255,118875,196,120,250,30,15,0 +184,71,255,224,255,119000,187,126,250,31,18,0 +185,70,255,228,255,119125,179,132,250,46,21,0 +186,69,255,232,255,119250,169,139,250,73,24,0 +187,68,255,236,255,119375,160,145,250,106,27,0 +188,67,255,240,255,119500,150,151,250,146,30,0 +189,66,255,244,255,119625,141,158,250,182,33,0 +190,65,255,248,255,119750,131,164,250,215,36,0 +191,64,255,252,255,119875,121,170,250,236,39,0 +192,63,255,0,0,120000,111,177,250,245,42,0 +193,62,255,4,0,120125,101,183,250,241,45,0 +194,61,255,8,0,120250,91,189,250,223,48,0 +195,60,255,12,0,120375,82,196,250,196,51,0 +196,59,255,16,0,120500,73,202,250,161,54,0 +197,58,255,20,0,120625,64,208,250,126,57,0 +198,57,255,24,0,120750,55,215,250,90,60,0 +199,56,255,28,0,120875,47,221,250,64,63,0 +200,55,255,32,0,121000,40,227,250,47,66,0 +201,54,255,36,0,121125,33,234,250,42,69,0 +202,53,255,40,0,121250,26,240,250,49,72,0 +203,52,255,44,0,121375,20,246,250,65,75,0 +204,51,255,48,0,121500,15,247,250,91,78,0 +205,50,255,52,0,121625,11,240,250,120,81,0 +206,49,255,56,0,121750,7,234,250,150,84,0 +207,48,255,60,0,121875,4,228,250,176,87,0 +208,47,255,64,0,122000,2,221,250,196,90,0 +209,46,255,68,0,122125,0,215,250,206,93,0 +210,45,255,72,0,122250,0,209,250,208,96,0 +211,44,255,76,0,122375,0,202,250,200,99,0 +212,43,255,80,0,122500,0,196,250,185,102,0 +213,42,255,84,0,122625,2,190,250,167,105,0 +214,41,255,88,0,122750,4,183,250,146,108,0 +215,40,255,92,0,122875,8,177,250,127,111,0 +216,39,255,96,0,123000,11,171,250,111,114,0 +217,38,255,100,0,123125,16,164,250,102,117,0 +218,37,255,104,0,123250,21,158,250,98,120,0 +219,36,255,108,0,123375,27,152,250,100,123,0 +220,35,255,112,0,123500,33,145,250,107,126,0 +221,34,255,116,0,123625,41,139,50,116,129,255 +222,33,255,120,0,123750,48,133,50,126,132,255 +223,32,255,124,0,123875,56,127,50,134,135,255 +224,31,255,128,255,124000,65,120,50,141,138,255 +225,30,255,132,255,124125,74,114,50,144,141,255 +226,29,255,136,255,124250,83,108,50,143,144,255 +227,28,255,140,255,124375,92,101,50,140,147,255 +228,27,255,144,255,124500,102,95,50,136,150,255 +229,26,255,148,255,124625,112,89,50,132,153,255 +230,25,255,152,255,124750,122,82,50,130,156,255 +231,24,255,156,255,124875,132,76,50,131,159,255 +232,23,255,160,255,125000,142,70,50,136,162,255 +233,22,255,164,255,125125,151,63,50,143,165,255 +234,21,255,168,255,125250,161,57,50,153,168,255 +235,20,255,172,255,125375,170,51,50,162,171,255 +236,19,255,176,255,125500,179,45,50,171,174,255 +237,18,255,180,255,125625,188,38,50,176,177,255 +238,17,255,184,255,125750,197,32,50,175,180,255 +239,16,255,188,255,125875,204,26,50,169,183,255 +240,15,255,192,255,126000,212,19,50,156,186,255 +241,14,255,196,255,126125,219,13,50,140,189,255 +242,13,255,200,255,126250,225,7,50,119,192,255 +243,12,255,204,255,126375,230,0,50,99,195,255 +244,11,255,208,255,126500,235,5,50,81,198,255 +245,10,255,212,255,126625,240,11,50,70,201,255 +246,9,255,216,255,126750,243,18,50,66,204,255 +247,8,255,220,255,126875,246,24,50,71,207,255 +248,7,255,224,255,127000,248,30,50,86,210,255 +249,6,255,228,255,127125,249,37,50,108,213,255 +250,5,255,232,255,127250,250,43,50,138,216,255 +251,4,255,236,255,127375,249,49,50,166,219,255 +252,3,255,240,255,127500,247,56,50,196,222,255 +253,2,255,244,255,127625,245,62,50,217,225,255 +254,1,255,248,255,127750,242,68,50,230,228,255 +255,0,255,252,255,127875,238,74,50,232,231,255 +0,0,0,0,0,128000,234,81,50,221,234,255 +1,1,0,4,0,128125,229,87,50,200,237,255 +2,2,0,8,0,128250,223,93,50,168,240,255 +3,3,0,12,0,128375,216,100,50,134,243,255 +4,4,0,16,0,128500,209,106,50,96,246,255 +5,5,0,20,0,128625,202,112,250,66,249,255 +6,6,0,24,0,128750,194,119,250,41,252,255 +7,7,0,28,0,128875,185,125,250,30,255,255 +8,8,0,32,0,129000,177,131,250,31,0,0 +9,9,0,36,0,129125,167,138,250,46,3,0 +10,10,0,40,0,129250,158,144,250,73,6,0 +11,11,0,44,0,129375,148,150,250,106,9,0 +12,12,0,48,0,129500,138,156,250,146,12,0 +13,13,0,52,0,129625,128,163,250,182,15,0 +14,14,0,56,0,129750,118,169,250,215,18,0 +15,15,0,60,0,129875,109,176,250,236,21,0 +16,16,0,64,0,130000,99,182,250,245,24,0 +17,17,0,68,0,130125,89,188,250,241,27,0 +18,18,0,72,0,130250,80,194,250,223,30,0 +19,19,0,76,0,130375,71,201,250,196,33,0 +20,20,0,80,0,130500,62,207,250,161,36,0 +21,21,0,84,0,130625,53,213,250,126,39,0 +22,22,0,88,0,130750,46,220,250,90,42,0 +23,23,0,92,0,130875,38,226,250,64,45,0 +24,24,0,96,0,131000,31,232,250,47,48,0 +25,25,0,100,0,131125,25,239,250,42,51,0 +26,26,0,104,0,131250,19,245,250,49,54,0 +27,27,0,108,0,131375,14,248,250,65,57,0 +28,28,0,112,0,131500,10,241,250,91,60,0 +29,29,0,116,0,131625,6,235,250,120,63,0 +30,30,0,120,0,131750,4,229,250,150,66,0 +31,31,0,124,0,131875,1,223,250,176,69,0 +32,32,0,128,255,132000,0,216,250,196,72,0 +33,33,0,132,255,132125,0,210,250,206,75,0 +34,34,0,136,255,132250,0,204,250,208,78,0 +35,35,0,140,255,132375,1,197,250,200,81,0 +36,36,0,144,255,132500,3,191,250,185,84,0 +37,37,0,148,255,132625,5,185,250,167,87,0 +38,38,0,152,255,132750,8,178,250,146,90,0 +39,39,0,156,255,132875,12,172,250,127,93,0 +40,40,0,160,255,133000,17,166,250,111,96,0 +41,41,0,164,255,133125,22,159,250,102,99,0 +42,42,0,168,255,133250,28,153,250,98,102,0 +43,43,0,172,255,133375,35,147,250,100,105,0 +44,44,0,176,255,133500,42,140,250,107,108,0 +45,45,0,180,255,133625,50,134,50,116,111,0 +46,46,0,184,255,133750,58,128,50,126,114,0 +47,47,0,188,255,133875,67,121,50,134,117,0 +48,48,0,192,255,134000,76,115,50,141,120,0 +49,49,0,196,255,134125,85,109,50,144,123,0 +50,50,0,200,255,134250,95,103,50,143,126,0 +51,51,0,204,255,134375,104,96,50,140,129,255 +52,52,0,208,255,134500,114,90,50,136,132,255 +53,53,0,212,255,134625,124,84,50,132,135,255 +54,54,0,216,255,134750,134,77,50,130,138,255 +55,55,0,220,255,134875,144,71,50,131,141,255 +56,56,0,224,255,135000,154,65,50,136,144,255 +57,57,0,228,255,135125,163,58,50,143,147,255 +58,58,0,232,255,135250,173,52,50,153,150,255 +59,59,0,236,255,135375,182,46,50,162,153,255 +60,60,0,240,255,135500,190,39,50,171,156,255 +61,61,0,244,255,135625,198,33,50,176,159,255 +62,62,0,248,255,135750,206,27,50,175,162,255 +63,63,0,252,255,135875,213,20,50,169,165,255 +64,64,0,0,0,136000,220,14,50,156,168,255 +65,65,0,4,0,136125,226,8,50,140,171,255 +66,66,0,8,0,136250,232,1,50,119,174,255 +67,67,0,12,0,136375,236,4,50,99,177,255 +68,68,0,16,0,136500,240,10,50,81,180,255 +69,69,0,20,0,136625,244,16,50,70,183,255 +70,70,0,24,0,136750,246,23,50,66,186,255 +71,71,0,28,0,136875,248,29,50,71,189,255 +72,72,0,32,0,137000,249,35,50,86,192,255 +73,73,0,36,0,137125,249,42,50,108,195,255 +74,74,0,40,0,137250,249,48,50,138,198,255 +75,75,0,44,0,137375,247,54,50,166,201,255 +76,76,0,48,0,137500,244,61,50,196,204,255 +77,77,0,52,0,137625,241,67,50,217,207,255 +78,78,0,56,0,137750,237,73,50,230,210,255 +79,79,0,60,0,137875,233,80,50,232,213,255 +80,80,0,64,0,138000,227,86,50,221,216,255 +81,81,0,68,0,138125,221,92,50,200,219,255 +82,82,0,72,0,138250,215,98,50,168,222,255 +83,83,0,76,0,138375,208,105,50,134,225,255 +84,84,0,80,0,138500,200,111,50,96,228,255 +85,85,0,84,0,138625,192,117,250,66,231,255 +86,86,0,88,0,138750,183,124,250,41,234,255 +87,87,0,92,0,138875,174,130,250,30,237,255 +88,88,0,96,0,139000,165,136,250,31,240,255 +89,89,0,100,0,139125,156,143,250,46,243,255 +90,90,0,104,0,139250,146,149,250,73,246,255 +91,91,0,108,0,139375,136,155,250,106,249,255 +92,92,0,112,0,139500,126,162,250,146,252,255 +93,93,0,116,0,139625,116,168,250,182,255,255 +94,94,0,120,0,139750,106,174,250,215,0,0 +95,95,0,124,0,139875,96,181,250,236,3,0 +96,96,0,128,255,140000,87,187,250,245,6,0 +97,97,0,132,255,140125,78,193,250,241,9,0 +98,98,0,136,255,140250,68,200,250,223,12,0 +99,99,0,140,255,140375,60,206,250,196,15,0 +100,100,0,144,255,140500,52,212,250,161,18,0 +101,101,0,148,255,140625,44,218,250,126,21,0 +102,102,0,152,255,140750,36,225,250,90,24,0 +103,103,0,156,255,140875,30,231,250,64,27,0 +104,104,0,160,255,141000,24,237,250,47,30,0 +105,105,0,164,255,141125,18,244,250,42,33,0 +106,106,0,168,255,141250,13,249,250,49,36,0 +107,107,0,172,255,141375,9,243,250,65,39,0 +108,108,0,176,255,141500,6,236,250,91,42,0 +109,109,0,180,255,141625,3,230,250,120,45,0 +110,110,0,184,255,141750,1,224,250,150,48,0 +111,111,0,188,255,141875,0,217,250,176,51,0 +112,112,0,192,255,142000,0,211,250,196,54,0 +113,113,0,196,255,142125,0,205,250,206,57,0 +114,114,0,200,255,142250,1,198,250,208,60,0 +115,115,0,204,255,142375,3,192,250,200,63,0 +116,116,0,208,255,142500,6,186,250,185,66,0 +117,117,0,212,255,142625,9,180,250,167,69,0 +118,118,0,216,255,142750,13,173,250,146,72,0 +119,119,0,220,255,142875,18,167,250,127,75,0 +120,120,0,224,255,143000,24,161,250,111,78,0 +121,121,0,228,255,143125,30,154,250,102,81,0 +122,122,0,232,255,143250,37,148,250,98,84,0 +123,123,0,236,255,143375,44,142,250,100,87,0 +124,124,0,240,255,143500,52,135,250,107,90,0 +125,125,0,244,255,143625,60,129,50,116,93,0 +126,126,0,248,255,143750,69,123,50,126,96,0 +127,127,0,252,255,143875,78,116,50,134,99,0 +128,128,0,0,0,144000,87,110,50,141,102,0 +129,129,0,4,0,144125,97,104,50,144,105,0 +130,130,0,8,0,144250,107,97,50,143,108,0 +131,131,0,12,0,144375,117,91,50,140,111,0 +132,132,0,16,0,144500,126,85,50,136,114,0 +133,133,0,20,0,144625,136,78,50,132,117,0 +134,134,0,24,0,144750,146,72,50,130,120,0 +135,135,0,28,0,144875,156,66,50,131,123,0 +136,136,0,32,0,145000,165,60,50,136,126,0 +137,137,0,36,0,145125,175,53,50,143,129,255 +138,138,0,40,0,145250,184,47,50,153,132,255 +139,139,0,44,0,145375,192,41,50,162,135,255 +140,140,0,48,0,145500,200,34,50,171,138,255 +141,141,0,52,0,145625,208,28,50,176,141,255 +142,142,0,56,0,145750,215,22,50,175,144,255 +143,143,0,60,0,145875,222,15,50,169,147,255 +144,144,0,64,0,146000,228,9,50,156,150,255 +145,145,0,68,0,146125,233,3,50,140,153,255 +146,146,0,72,0,146250,237,3,50,119,156,255 +147,147,0,76,0,146375,241,9,50,99,159,255 +148,148,0,80,0,146500,244,15,50,81,162,255 +149,149,0,84,0,146625,247,22,50,70,165,255 +150,150,0,88,0,146750,249,28,50,66,168,255 +151,151,0,92,0,146875,249,34,50,71,171,255 +152,152,0,96,0,147000,249,41,50,86,174,255 +153,153,0,100,0,147125,248,47,50,108,177,255 +154,154,0,104,0,147250,246,53,50,138,180,255 +155,155,0,108,0,147375,244,59,50,166,183,255 +156,156,0,112,0,147500,240,66,50,196,186,255 +157,157,0,116,0,147625,236,72,50,217,189,255 +158,158,0,120,0,147750,231,78,50,230,192,255 +159,159,0,124,0,147875,226,85,50,232,195,255 +160,160,0,128,255,148000,220,91,50,221,198,255 +161,161,0,132,255,148125,213,97,50,200,201,255 +162,162,0,136,255,148250,206,104,50,168,204,255 +163,163,0,140,255,148375,198,110,50,134,207,255 +164,164,0,144,255,148500,190,116,50,96,210,255 +165,165,0,148,255,148625,181,123,250,66,213,255 +166,166,0,152,255,148750,172,129,250,41,216,255 +167,167,0,156,255,148875,163,135,250,30,219,255 +168,168,0,160,255,149000,153,141,250,31,222,255 +169,169,0,164,255,149125,144,148,250,46,225,255 +170,170,0,168,255,149250,134,154,250,73,228,255 +171,171,0,172,255,149375,124,161,250,106,231,255 +172,172,0,176,255,149500,114,167,250,146,234,255 +173,173,0,180,255,149625,104,173,250,182,237,255 +174,174,0,184,255,149750,94,179,250,215,240,255 +175,175,0,188,255,149875,85,186,250,236,243,255 +176,176,0,192,255,150000,75,192,250,245,246,255 +177,177,0,196,255,150125,66,198,250,241,249,255 +178,178,0,200,255,150250,58,205,250,223,252,255 +179,179,0,204,255,150375,50,211,250,196,255,255 +180,180,0,208,255,150500,42,217,250,161,0,0 +181,181,0,212,255,150625,35,224,250,126,3,0 +182,182,0,216,255,150750,28,230,250,90,6,0 +183,183,0,220,255,150875,22,236,250,64,9,0 +184,184,0,224,255,151000,17,243,250,47,12,0 +185,185,0,228,255,151125,12,249,250,42,15,0 +186,186,0,232,255,151250,8,244,250,49,18,0 +187,187,0,236,255,151375,5,238,250,65,21,0 +188,188,0,240,255,151500,2,231,250,91,24,0 +189,189,0,244,255,151625,1,225,250,120,27,0 +190,190,0,248,255,151750,0,219,250,150,30,0 +191,191,0,252,255,151875,0,212,250,176,33,0 +192,192,0,0,0,152000,0,206,250,196,36,0 +193,193,0,4,0,152125,2,200,250,206,39,0 +194,194,0,8,0,152250,4,193,250,208,42,0 +195,195,0,12,0,152375,6,187,250,200,45,0 +196,196,0,16,0,152500,10,181,250,185,48,0 +197,197,0,20,0,152625,14,174,250,167,51,0 +198,198,0,24,0,152750,19,168,250,146,54,0 +199,199,0,28,0,152875,25,162,250,127,57,0 +200,200,0,32,0,153000,31,155,250,111,60,0 +201,201,0,36,0,153125,38,149,250,102,63,0 +202,202,0,40,0,153250,46,143,250,98,66,0 +203,203,0,44,0,153375,54,136,250,100,69,0 +204,204,0,48,0,153500,62,130,250,107,72,0 +205,205,0,52,0,153625,71,124,50,116,75,0 +206,206,0,56,0,153750,80,118,50,126,78,0 +207,207,0,60,0,153875,89,111,50,134,81,0 +208,208,0,64,0,154000,99,105,50,141,84,0 +209,209,0,68,0,154125,109,99,50,144,87,0 +210,210,0,72,0,154250,119,92,50,143,90,0 +211,211,0,76,0,154375,129,86,50,140,93,0 +212,212,0,80,0,154500,139,80,50,136,96,0 +213,213,0,84,0,154625,149,73,50,132,99,0 +214,214,0,88,0,154750,158,67,50,130,102,0 +215,215,0,92,0,154875,168,61,50,131,105,0 +216,216,0,96,0,155000,177,54,50,136,108,0 +217,217,0,100,0,155125,186,48,50,143,111,0 +218,218,0,104,0,155250,194,42,50,153,114,0 +219,219,0,108,0,155375,202,36,50,162,117,0 +220,220,0,112,0,155500,210,29,50,171,120,0 +221,221,0,116,0,155625,217,23,50,176,123,0 +222,222,0,120,0,155750,223,17,50,175,126,0 +223,223,0,124,0,155875,229,10,50,169,129,255 +224,224,0,128,255,156000,234,4,50,156,132,255 +225,225,0,132,255,156125,238,1,50,140,135,255 +226,226,0,136,255,156250,242,8,50,119,138,255 +227,227,0,140,255,156375,245,14,50,99,141,255 +228,228,0,144,255,156500,247,20,50,81,144,255 +229,229,0,148,255,156625,249,27,50,70,147,255 +230,230,0,152,255,156750,250,33,50,66,150,255 +231,231,0,156,255,156875,249,39,50,71,153,255 +232,232,0,160,255,157000,248,46,50,86,156,255 +233,233,0,164,255,157125,246,52,50,108,159,255 +234,234,0,168,255,157250,243,58,50,138,162,255 +235,235,0,172,255,157375,239,65,50,166,165,255 +236,236,0,176,255,157500,235,71,50,196,168,255 +237,237,0,180,255,157625,230,77,50,217,171,255 +238,238,0,184,255,157750,225,83,50,230,174,255 +239,239,0,188,255,157875,218,90,50,232,177,255 +240,240,0,192,255,158000,212,96,50,221,180,255 +241,241,0,196,255,158125,204,102,50,200,183,255 +242,242,0,200,255,158250,196,109,50,168,186,255 +243,243,0,204,255,158375,188,115,50,134,189,255 +244,244,0,208,255,158500,179,121,50,96,192,255 +245,245,0,212,255,158625,170,128,250,66,195,255 +246,246,0,216,255,158750,161,134,250,41,198,255 +247,247,0,220,255,158875,151,140,250,30,201,255 +248,248,0,224,255,159000,141,147,250,31,204,255 +249,249,0,228,255,159125,131,153,250,46,207,255 +250,250,0,232,255,159250,121,159,250,73,210,255 +251,251,0,236,255,159375,111,166,250,106,213,255 +252,252,0,240,255,159500,102,172,250,146,216,255 +253,253,0,244,255,159625,92,178,250,182,219,255 +254,254,0,248,255,159750,82,185,250,215,222,255 +255,255,0,252,255,159875,73,191,250,236,225,255 +0,255,255,0,0,160000,64,197,250,245,228,255 +1,254,255,4,0,160125,56,203,250,241,231,255 +2,253,255,8,0,160250,48,210,250,223,234,255 +3,252,255,12,0,160375,40,216,250,196,237,255 +4,251,255,16,0,160500,33,222,250,161,240,255 +5,250,255,20,0,160625,27,229,250,126,243,255 +6,249,255,24,0,160750,21,235,250,90,246,255 +7,248,255,28,0,160875,16,241,250,64,249,255 +8,247,255,32,0,161000,11,248,250,47,252,255 +9,246,255,36,0,161125,7,245,250,42,255,255 +10,245,255,40,0,161250,4,239,250,49,0,0 +11,244,255,44,0,161375,2,232,250,65,3,0 +12,243,255,48,0,161500,0,226,250,91,6,0 +13,242,255,52,0,161625,0,220,250,120,9,0 +14,241,255,56,0,161750,0,213,250,150,12,0 +15,240,255,60,0,161875,0,207,250,176,15,0 +16,239,255,64,0,162000,2,201,250,196,18,0 +17,238,255,68,0,162125,4,195,250,206,21,0 +18,237,255,72,0,162250,7,188,250,208,24,0 +19,236,255,76,0,162375,11,182,250,200,27,0 +20,235,255,80,0,162500,16,176,250,185,30,0 +21,234,255,84,0,162625,21,169,250,167,33,0 +22,233,255,88,0,162750,27,163,250,146,36,0 +23,232,255,92,0,162875,33,157,250,127,39,0 +24,231,255,96,0,163000,40,150,250,111,42,0 +25,230,255,100,0,163125,48,144,250,102,45,0 +26,229,255,104,0,163250,56,138,250,98,48,0 +27,228,255,108,0,163375,64,131,250,100,51,0 +28,227,255,112,0,163500,73,125,250,107,54,0 +29,226,255,116,0,163625,82,119,50,116,57,0 +30,225,255,120,0,163750,92,112,50,126,60,0 +31,224,255,124,0,163875,101,106,50,134,63,0 +32,223,255,128,255,164000,111,100,50,141,66,0 +33,222,255,132,255,164125,121,93,50,144,69,0 +34,221,255,136,255,164250,131,87,50,143,72,0 +35,220,255,140,255,164375,141,81,50,140,75,0 +36,219,255,144,255,164500,151,75,50,136,78,0 +37,218,255,148,255,164625,160,68,50,132,81,0 +38,217,255,152,255,164750,170,62,50,130,84,0 +39,216,255,156,255,164875,179,56,50,131,87,0 +40,215,255,160,255,165000,188,49,50,136,90,0 +41,214,255,164,255,165125,196,43,50,143,93,0 +42,213,255,168,255,165250,204,37,50,153,96,0 +43,212,255,172,255,165375,211,30,50,162,99,0 +44,211,255,176,255,165500,218,24,50,171,102,0 +45,210,255,180,255,165625,224,18,50,176,105,0 +46,209,255,184,255,165750,230,11,50,175,108,0 +47,208,255,188,255,165875,235,5,50,169,111,0 +48,207,255,192,255,166000,239,0,50,156,114,0 +49,206,255,196,255,166125,243,7,50,140,117,0 +50,205,255,200,255,166250,246,13,50,119,120,0 +51,204,255,204,255,166375,248,19,50,99,123,0 +52,203,255,208,255,166500,249,26,50,81,126,0 +53,202,255,212,255,166625,250,32,50,70,129,255 +54,201,255,216,255,166750,249,38,50,66,132,255 +55,200,255,220,255,166875,247,44,50,71,135,255 +56,199,255,224,255,167000,245,51,50,86,138,255 +57,198,255,228,255,167125,242,57,50,108,141,255 +58,197,255,232,255,167250,239,63,50,138,144,255 +59,196,255,236,255,167375,234,70,50,166,147,255 +60,195,255,240,255,167500,229,76,50,196,150,255 +61,194,255,244,255,167625,223,82,50,217,153,255 +62,193,255,248,255,167750,217,89,50,230,156,255 +63,192,255,252,255,167875,210,95,50,232,159,255 +64,191,255,0,0,168000,202,101,50,221,162,255 +65,190,255,4,0,168125,194,108,50,200,165,255 +66,189,255,8,0,168250,186,114,50,168,168,255 +67,188,255,12,0,168375,177,120,50,134,171,255 +68,187,255,16,0,168500,168,126,50,96,174,255 +69,186,255,20,0,168625,158,133,250,66,177,255 +70,185,255,24,0,168750,149,139,250,41,180,255 +71,184,255,28,0,168875,139,145,250,30,183,255 +72,183,255,32,0,169000,129,152,250,31,186,255 +73,182,255,36,0,169125,119,158,250,46,189,255 +74,181,255,40,0,169250,109,164,250,73,192,255 +75,180,255,44,0,169375,99,171,250,106,195,255 +76,179,255,48,0,169500,90,177,250,146,198,255 +77,178,255,52,0,169625,80,183,250,182,201,255 +78,177,255,56,0,169750,71,190,250,215,204,255 +79,176,255,60,0,169875,62,196,250,236,207,255 +80,175,255,64,0,170000,54,202,250,245,210,255 +81,174,255,68,0,170125,46,209,250,241,213,255 +82,173,255,72,0,170250,38,215,250,223,216,255 +83,172,255,76,0,170375,32,221,250,196,219,255 +84,171,255,80,0,170500,25,228,250,161,222,255 +85,170,255,84,0,170625,20,234,250,126,225,255 +86,169,255,88,0,170750,15,240,250,90,228,255 +87,168,255,92,0,170875,10,246,250,64,231,255 +88,167,255,96,0,171000,7,246,250,47,234,255 +89,166,255,100,0,171125,4,240,250,42,237,255 +90,165,255,104,0,171250,2,234,250,49,240,255 +91,164,255,108,0,171375,0,227,250,65,243,255 +92,163,255,112,0,171500,0,221,250,91,246,255 +93,162,255,116,0,171625,0,215,250,120,249,255 +94,161,255,120,0,171750,1,208,250,150,252,255 +95,160,255,124,0,171875,2,202,250,176,255,255 +96,159,255,128,255,172000,5,196,250,196,0,0 +97,158,255,132,255,172125,8,189,250,206,3,0 +98,157,255,136,255,172250,12,183,250,208,6,0 +99,156,255,140,255,172375,17,177,250,200,9,0 +100,155,255,144,255,172500,22,170,250,185,12,0 +101,154,255,148,255,172625,28,164,250,167,15,0 +102,153,255,152,255,172750,35,158,250,146,18,0 +103,152,255,156,255,172875,42,151,250,127,21,0 +104,151,255,160,255,173000,49,145,250,111,24,0 +105,150,255,164,255,173125,58,139,250,102,27,0 +106,149,255,168,255,173250,66,133,250,98,30,0 +107,148,255,172,255,173375,75,126,250,100,33,0 +108,147,255,176,255,173500,84,120,250,107,36,0 +109,146,255,180,255,173625,94,114,50,116,39,0 +110,145,255,184,255,173750,104,107,50,126,42,0 +111,144,255,188,255,173875,114,101,50,134,45,0 +112,143,255,192,255,174000,124,95,50,141,48,0 +113,142,255,196,255,174125,133,88,50,144,51,0 +114,141,255,200,255,174250,143,82,50,143,54,0 +115,140,255,204,255,174375,153,76,50,140,57,0 +116,139,255,208,255,174500,163,69,50,136,60,0 +117,138,255,212,255,174625,172,63,50,132,63,0 +118,137,255,216,255,174750,181,57,50,130,66,0 +119,136,255,220,255,174875,190,51,50,131,69,0 +120,135,255,224,255,175000,198,44,50,136,72,0 +121,134,255,228,255,175125,206,38,50,143,75,0 +122,133,255,232,255,175250,213,32,50,153,78,0 +123,132,255,236,255,175375,220,25,50,162,81,0 +124,131,255,240,255,175500,226,19,50,171,84,0 +125,130,255,244,255,175625,231,13,50,176,87,0 +126,129,255,248,255,175750,236,6,50,175,90,0 +127,128,255,252,255,175875,240,0,50,169,93,0 +128,127,255,0,0,176000,244,5,50,156,96,0 +129,126,255,4,0,176125,246,12,50,140,99,0 +130,125,255,8,0,176250,248,18,50,119,102,0 +131,124,255,12,0,176375,249,24,50,99,105,0 +132,123,255,16,0,176500,249,31,50,81,108,0 +133,122,255,20,0,176625,249,37,50,70,111,0 +134,121,255,24,0,176750,247,43,50,66,114,0 +135,120,255,28,0,176875,244,50,50,71,117,0 +136,119,255,32,0,177000,241,56,50,86,120,0 +137,118,255,36,0,177125,238,62,50,108,123,0 +138,117,255,40,0,177250,233,68,50,138,126,0 +139,116,255,44,0,177375,228,75,50,166,129,255 +140,115,255,48,0,177500,222,81,50,196,132,255 +141,114,255,52,0,177625,215,87,50,217,135,255 +142,113,255,56,0,177750,208,94,50,230,138,255 +143,112,255,60,0,177875,200,100,50,232,141,255 +144,111,255,64,0,178000,192,106,50,221,144,255 +145,110,255,68,0,178125,184,113,50,200,147,255 +146,109,255,72,0,178250,175,119,50,168,150,255 +147,108,255,76,0,178375,166,125,50,134,153,255 +148,107,255,80,0,178500,156,132,50,96,156,255 +149,106,255,84,0,178625,146,138,250,66,159,255 +150,105,255,88,0,178750,137,144,250,41,162,255 +151,104,255,92,0,178875,127,151,250,30,165,255 +152,103,255,96,0,179000,117,157,250,31,168,255 +153,102,255,100,0,179125,107,163,250,46,171,255 +154,101,255,104,0,179250,97,170,250,73,174,255 +155,100,255,108,0,179375,87,176,250,106,177,255 +156,99,255,112,0,179500,78,182,250,146,180,255 +157,98,255,116,0,179625,69,188,250,182,183,255 +158,97,255,120,0,179750,60,195,250,215,186,255 +159,96,255,124,0,179875,52,201,250,236,189,255 +160,95,255,128,255,180000,44,207,250,245,192,255 +161,94,255,132,255,180125,37,214,250,241,195,255 +162,93,255,136,255,180250,30,220,250,223,198,255 +163,92,255,140,255,180375,24,226,250,196,201,255 +164,91,255,144,255,180500,18,233,250,161,204,255 +165,90,255,148,255,180625,13,239,250,126,207,255 +166,89,255,152,255,180750,9,245,250,90,210,255 +167,88,255,156,255,180875,6,247,250,64,213,255 +168,87,255,160,255,181000,3,241,250,47,216,255 +169,86,255,164,255,181125,1,235,250,42,219,255 +170,85,255,168,255,181250,0,229,250,49,222,255 +171,84,255,172,255,181375,0,222,250,65,225,255 +172,83,255,176,255,181500,0,216,250,91,228,255 +173,82,255,180,255,181625,1,210,250,120,231,255 +174,81,255,184,255,181750,3,203,250,150,234,255 +175,80,255,188,255,181875,6,197,250,176,237,255 +176,79,255,192,255,182000,9,191,250,196,240,255 +177,78,255,196,255,182125,13,184,250,206,243,255 +178,77,255,200,255,182250,18,178,250,208,246,255 +179,76,255,204,255,182375,23,172,250,200,249,255 +180,75,255,208,255,182500,30,165,250,185,252,255 +181,74,255,212,255,182625,36,159,250,167,255,255 +182,73,255,216,255,182750,44,153,250,146,0,0 +183,72,255,220,255,182875,51,146,250,127,3,0 +184,71,255,224,255,183000,60,140,250,111,6,0 +185,70,255,228,255,183125,68,134,250,102,9,0 +186,69,255,232,255,183250,77,127,250,98,12,0 +187,68,255,236,255,183375,87,121,250,100,15,0 +188,67,255,240,255,183500,96,115,250,107,18,0 +189,66,255,244,255,183625,106,109,50,116,21,0 +190,65,255,248,255,183750,116,102,50,126,24,0 +191,64,255,252,255,183875,126,96,50,134,27,0 +192,63,255,0,0,184000,136,90,50,141,30,0 +193,62,255,4,0,184125,146,83,50,144,33,0 +194,61,255,8,0,184250,155,77,50,143,36,0 +195,60,255,12,0,184375,165,71,50,140,39,0 +196,59,255,16,0,184500,174,64,50,136,42,0 +197,58,255,20,0,184625,183,58,50,132,45,0 +198,57,255,24,0,184750,192,52,50,130,48,0 +199,56,255,28,0,184875,200,45,50,131,51,0 +200,55,255,32,0,185000,208,39,50,136,54,0 +201,54,255,36,0,185125,215,33,50,143,57,0 +202,53,255,40,0,185250,221,26,50,153,60,0 +203,52,255,44,0,185375,227,20,50,162,63,0 +204,51,255,48,0,185500,233,14,50,171,66,0 +205,50,255,52,0,185625,237,7,50,176,69,0 +206,49,255,56,0,185750,241,1,50,175,72,0 +207,48,255,60,0,185875,244,4,50,169,75,0 +208,47,255,64,0,186000,247,10,50,156,78,0 +209,46,255,68,0,186125,248,17,50,140,81,0 +210,45,255,72,0,186250,249,23,50,119,84,0 +211,44,255,76,0,186375,249,29,50,99,87,0 +212,43,255,80,0,186500,248,36,50,81,90,0 +213,42,255,84,0,186625,246,42,50,70,93,0 +214,41,255,88,0,186750,244,48,50,66,96,0 +215,40,255,92,0,186875,241,55,50,71,99,0 +216,39,255,96,0,187000,236,61,50,86,102,0 +217,38,255,100,0,187125,232,67,50,108,105,0 +218,37,255,104,0,187250,226,74,50,138,108,0 +219,36,255,108,0,187375,220,80,50,166,111,0 +220,35,255,112,0,187500,214,86,50,196,114,0 +221,34,255,116,0,187625,206,93,50,217,117,0 +222,33,255,120,0,187750,199,99,50,230,120,0 +223,32,255,124,0,187875,190,105,50,232,123,0 +224,31,255,128,255,188000,182,111,50,221,126,0 +225,30,255,132,255,188125,173,118,50,200,129,255 +226,29,255,136,255,188250,163,124,50,168,132,255 +227,28,255,140,255,188375,154,130,50,134,135,255 +228,27,255,144,255,188500,144,137,50,96,138,255 +229,26,255,148,255,188625,134,143,250,66,141,255 +230,25,255,152,255,188750,124,149,250,41,144,255 +231,24,255,156,255,188875,114,156,250,30,147,255 +232,23,255,160,255,189000,104,162,250,31,150,255 +233,22,255,164,255,189125,95,168,250,46,153,255 +234,21,255,168,255,189250,85,175,250,73,156,255 +235,20,255,172,255,189375,76,181,250,106,159,255 +236,19,255,176,255,189500,67,187,250,146,162,255 +237,18,255,180,255,189625,58,194,250,182,165,255 +238,17,255,184,255,189750,50,200,250,215,168,255 +239,16,255,188,255,189875,42,206,250,236,171,255 +240,15,255,192,255,190000,35,213,250,245,174,255 +241,14,255,196,255,190125,29,219,250,241,177,255 +242,13,255,200,255,190250,22,225,250,223,180,255 +243,12,255,204,255,190375,17,231,250,196,183,255 +244,11,255,208,255,190500,12,238,250,161,186,255 +245,10,255,212,255,190625,8,244,250,126,189,255 +246,9,255,216,255,190750,5,249,250,90,192,255 +247,8,255,220,255,190875,3,242,250,64,195,255 +248,7,255,224,255,191000,1,236,250,47,198,255 +249,6,255,228,255,191125,0,230,250,42,201,255 +250,5,255,232,255,191250,0,223,250,49,204,255 +251,4,255,236,255,191375,0,217,250,65,207,255 +252,3,255,240,255,191500,1,211,250,91,210,255 +253,2,255,244,255,191625,4,204,250,120,213,255 +254,1,255,248,255,191750,6,198,250,150,216,255 +255,0,255,252,255,191875,10,192,250,176,219,255 +0,0,0,0,0,192000,14,186,250,196,222,255 +1,1,0,4,0,192125,19,179,250,206,225,255 +2,2,0,8,0,192250,25,173,250,208,228,255 +3,3,0,12,0,192375,31,166,250,200,231,255 +4,4,0,16,0,192500,38,160,250,185,234,255 +5,5,0,20,0,192625,45,154,250,167,237,255 +6,6,0,24,0,192750,53,148,250,146,240,255 +7,7,0,28,0,192875,62,141,250,127,243,255 +8,8,0,32,0,193000,70,135,250,111,246,255 +9,9,0,36,0,193125,79,129,250,102,249,255 +10,10,0,40,0,193250,89,122,250,98,252,255 +11,11,0,44,0,193375,98,116,250,100,255,255 +12,12,0,48,0,193500,108,110,250,107,0,0 +13,13,0,52,0,193625,118,103,50,116,3,0 +14,14,0,56,0,193750,128,97,50,126,6,0 +15,15,0,60,0,193875,138,91,50,134,9,0 +16,16,0,64,0,194000,148,84,50,141,12,0 +17,17,0,68,0,194125,158,78,50,144,15,0 +18,18,0,72,0,194250,167,72,50,143,18,0 +19,19,0,76,0,194375,176,66,50,140,21,0 +20,20,0,80,0,194500,185,59,50,136,24,0 +21,21,0,84,0,194625,194,53,50,132,27,0 +22,22,0,88,0,194750,202,47,50,130,30,0 +23,23,0,92,0,194875,209,40,50,131,33,0 +24,24,0,96,0,195000,216,34,50,136,36,0 +25,25,0,100,0,195125,223,28,50,143,39,0 +26,26,0,104,0,195250,229,21,50,153,42,0 +27,27,0,108,0,195375,234,15,50,162,45,0 +28,28,0,112,0,195500,238,9,50,171,48,0 +29,29,0,116,0,195625,242,2,50,176,51,0 +30,30,0,120,0,195750,245,3,50,175,54,0 +31,31,0,124,0,195875,247,9,50,169,57,0 +32,32,0,128,255,196000,249,16,50,156,60,0 +33,33,0,132,255,196125,250,22,50,140,63,0 +34,34,0,136,255,196250,249,28,50,119,66,0 +35,35,0,140,255,196375,248,35,50,99,69,0 +36,36,0,144,255,196500,246,41,50,81,72,0 +37,37,0,148,255,196625,243,47,50,70,75,0 +38,38,0,152,255,196750,240,53,50,66,78,0 +39,39,0,156,255,196875,235,60,50,71,81,0 +40,40,0,160,255,197000,231,66,50,86,84,0 +41,41,0,164,255,197125,225,72,50,108,87,0 +42,42,0,168,255,197250,219,79,50,138,90,0 +43,43,0,172,255,197375,212,85,50,166,93,0 +44,44,0,176,255,197500,205,91,50,196,96,0 +45,45,0,180,255,197625,197,98,50,217,99,0 +46,46,0,184,255,197750,188,104,50,230,102,0 +47,47,0,188,255,197875,180,110,50,232,105,0 +48,48,0,192,255,198000,171,117,50,221,108,0 +49,49,0,196,255,198125,161,123,50,200,111,0 +50,50,0,200,255,198250,152,129,50,168,114,0 +51,51,0,204,255,198375,142,135,50,134,117,0 +52,52,0,208,255,198500,132,142,50,96,120,0 +53,53,0,212,255,198625,122,148,250,66,123,0 +54,54,0,216,255,198750,112,155,250,41,126,0 +55,55,0,220,255,198875,102,161,250,30,129,255 +56,56,0,224,255,199000,93,167,250,31,132,255 +57,57,0,228,255,199125,83,173,250,46,135,255 +58,58,0,232,255,199250,74,180,250,73,138,255 +59,59,0,236,255,199375,65,186,250,106,141,255 +60,60,0,240,255,199500,56,192,250,146,144,255 +61,61,0,244,255,199625,48,199,250,182,147,255 +62,62,0,248,255,199750,41,205,250,215,150,255 +63,63,0,252,255,199875,34,211,250,236,153,255 +64,64,0,0,0,200000,27,218,250,245,156,255 +65,65,0,4,0,200125,21,224,250,241,159,255 +66,66,0,8,0,200250,16,230,250,223,162,255 +67,67,0,12,0,200375,11,237,250,196,165,255 +68,68,0,16,0,200500,8,243,250,161,168,255 +69,69,0,20,0,200625,5,249,250,126,171,255 +70,70,0,24,0,200750,2,244,250,90,174,255 +71,71,0,28,0,200875,0,237,250,64,177,255 +72,72,0,32,0,201000,0,231,250,47,180,255 +73,73,0,36,0,201125,0,225,250,42,183,255 +74,74,0,40,0,201250,0,218,250,49,186,255 +75,75,0,44,0,201375,2,212,250,65,189,255 +76,76,0,48,0,201500,4,206,250,91,192,255 +77,77,0,52,0,201625,7,199,250,120,195,255 +78,78,0,56,0,201750,11,193,250,150,198,255 +79,79,0,60,0,201875,15,187,250,176,201,255 +80,80,0,64,0,202000,20,180,250,196,204,255 +81,81,0,68,0,202125,26,174,250,206,207,255 +82,82,0,72,0,202250,33,168,250,208,210,255 +83,83,0,76,0,202375,40,161,250,200,213,255 +84,84,0,80,0,202500,47,155,250,185,216,255 +85,85,0,84,0,202625,55,149,250,167,219,255 +86,86,0,88,0,202750,64,142,250,146,222,255 +87,87,0,92,0,202875,72,136,250,127,225,255 +88,88,0,96,0,203000,82,130,250,111,228,255 +89,89,0,100,0,203125,91,124,250,102,231,255 +90,90,0,104,0,203250,101,117,250,98,234,255 +91,91,0,108,0,203375,111,111,250,100,237,255 +92,92,0,112,0,203500,121,105,250,107,240,255 +93,93,0,116,0,203625,130,98,50,116,243,255 +94,94,0,120,0,203750,140,92,50,126,246,255 +95,95,0,124,0,203875,150,86,50,134,249,255 +96,96,0,128,255,204000,160,79,50,141,252,255 +97,97,0,132,255,204125,169,73,50,144,255,255 +98,98,0,136,255,204250,178,67,50,143,0,0 +99,99,0,140,255,204375,187,60,50,140,3,0 +100,100,0,144,255,204500,196,54,50,136,6,0 +101,101,0,148,255,204625,203,48,50,132,9,0 +102,102,0,152,255,204750,211,41,50,130,12,0 +103,103,0,156,255,204875,218,35,50,131,15,0 +104,104,0,160,255,205000,224,29,50,136,18,0 +105,105,0,164,255,205125,230,22,50,143,21,0 +106,106,0,168,255,205250,235,16,50,153,24,0 +107,107,0,172,255,205375,239,10,50,162,27,0 +108,108,0,176,255,205500,243,4,50,171,30,0 +109,109,0,180,255,205625,246,2,50,176,33,0 +110,110,0,184,255,205750,248,8,50,175,36,0 +111,111,0,188,255,205875,249,14,50,169,39,0 +112,112,0,192,255,206000,250,21,50,156,42,0 +113,113,0,196,255,206125,249,27,50,140,45,0 +114,114,0,200,255,206250,247,33,50,119,48,0 +115,115,0,204,255,206375,245,40,50,99,51,0 +116,116,0,208,255,206500,242,46,50,81,54,0 +117,117,0,212,255,206625,239,52,50,70,57,0 +118,118,0,216,255,206750,234,59,50,66,60,0 +119,119,0,220,255,206875,229,65,50,71,63,0 +120,120,0,224,255,207000,223,71,50,86,66,0 +121,121,0,228,255,207125,217,78,50,108,69,0 +122,122,0,232,255,207250,210,84,50,138,72,0 +123,123,0,236,255,207375,203,90,50,166,75,0 +124,124,0,240,255,207500,195,96,50,196,78,0 +125,125,0,244,255,207625,186,103,50,217,81,0 +126,126,0,248,255,207750,178,109,50,230,84,0 +127,127,0,252,255,207875,168,115,50,232,87,0 +128,128,0,0,0,208000,159,122,50,221,90,0 +129,129,0,4,0,208125,149,128,50,200,93,0 +130,130,0,8,0,208250,140,134,50,168,96,0 +131,131,0,12,0,208375,130,141,50,134,99,0 +132,132,0,16,0,208500,120,147,50,96,102,0 +133,133,0,20,0,208625,110,153,250,66,105,0 +134,134,0,24,0,208750,100,160,250,41,108,0 +135,135,0,28,0,208875,90,166,250,30,111,0 +136,136,0,32,0,209000,81,172,250,31,114,0 +137,137,0,36,0,209125,72,179,250,46,117,0 +138,138,0,40,0,209250,63,185,250,73,120,0 +139,139,0,44,0,209375,54,191,250,106,123,0 +140,140,0,48,0,209500,46,197,250,146,126,0 +141,141,0,52,0,209625,39,204,250,182,129,255 +142,142,0,56,0,209750,32,210,250,215,132,255 +143,143,0,60,0,209875,26,216,250,236,135,255 +144,144,0,64,0,210000,20,223,250,245,138,255 +145,145,0,68,0,210125,15,229,250,241,141,255 +146,146,0,72,0,210250,10,235,250,223,144,255 +147,147,0,76,0,210375,7,242,250,196,147,255 +148,148,0,80,0,210500,4,248,250,161,150,255 +149,149,0,84,0,210625,2,245,250,126,153,255 +150,150,0,88,0,210750,0,238,250,90,156,255 +151,151,0,92,0,210875,0,232,250,64,159,255 +152,152,0,96,0,211000,0,226,250,47,162,255 +153,153,0,100,0,211125,1,219,250,42,165,255 +154,154,0,104,0,211250,2,213,250,49,168,255 +155,155,0,108,0,211375,5,207,250,65,171,255 +156,156,0,112,0,211500,8,201,250,91,174,255 +157,157,0,116,0,211625,12,194,250,120,177,255 +158,158,0,120,0,211750,16,188,250,150,180,255 +159,159,0,124,0,211875,22,182,250,176,183,255 +160,160,0,128,255,212000,28,175,250,196,186,255 +161,161,0,132,255,212125,34,169,250,206,189,255 +162,162,0,136,255,212250,41,163,250,208,192,255 +163,163,0,140,255,212375,49,156,250,200,195,255 +164,164,0,144,255,212500,57,150,250,185,198,255 +165,165,0,148,255,212625,66,144,250,167,201,255 +166,166,0,152,255,212750,75,137,250,146,204,255 +167,167,0,156,255,212875,84,131,250,127,207,255 +168,168,0,160,255,213000,93,125,250,111,210,255 +169,169,0,164,255,213125,103,118,250,102,213,255 +170,170,0,168,255,213250,113,112,250,98,216,255 +171,171,0,172,255,213375,123,106,250,100,219,255 +172,172,0,176,255,213500,133,99,250,107,222,255 +173,173,0,180,255,213625,143,93,50,116,225,255 +174,174,0,184,255,213750,152,87,50,126,228,255 +175,175,0,188,255,213875,162,81,50,134,231,255 +176,176,0,192,255,214000,171,74,50,141,234,255 +177,177,0,196,255,214125,181,68,50,144,237,255 +178,178,0,200,255,214250,189,62,50,143,240,255 +179,179,0,204,255,214375,197,55,50,140,243,255 +180,180,0,208,255,214500,205,49,50,136,246,255 +181,181,0,212,255,214625,213,43,50,132,249,255 +182,182,0,216,255,214750,219,36,50,130,252,255 +183,183,0,220,255,214875,225,30,50,131,255,255 +184,184,0,224,255,215000,231,24,50,136,0,0 +185,185,0,228,255,215125,236,17,50,143,3,0 +186,186,0,232,255,215250,240,11,50,153,6,0 +187,187,0,236,255,215375,243,5,50,162,9,0 +188,188,0,240,255,215500,246,1,50,171,12,0 +189,189,0,244,255,215625,248,7,50,176,15,0 +190,190,0,248,255,215750,249,13,50,175,18,0 +191,191,0,252,255,215875,250,20,50,169,21,0 +192,192,0,0,0,216000,249,26,50,156,24,0 +193,193,0,4,0,216125,247,32,50,140,27,0 +194,194,0,8,0,216250,245,38,50,119,30,0 +195,195,0,12,0,216375,242,45,50,99,33,0 +196,196,0,16,0,216500,238,51,50,81,36,0 +197,197,0,20,0,216625,233,57,50,70,39,0 +198,198,0,24,0,216750,228,64,50,66,42,0 +199,199,0,28,0,216875,222,70,50,71,45,0 +200,200,0,32,0,217000,216,76,50,86,48,0 +201,201,0,36,0,217125,209,83,50,108,51,0 +202,202,0,40,0,217250,201,89,50,138,54,0 +203,203,0,44,0,217375,193,95,50,166,57,0 +204,204,0,48,0,217500,184,102,50,196,60,0 +205,205,0,52,0,217625,175,108,50,217,63,0 +206,206,0,56,0,217750,166,114,50,230,66,0 +207,207,0,60,0,217875,157,120,50,232,69,0 +208,208,0,64,0,218000,147,127,50,221,72,0 +209,209,0,68,0,218125,137,133,50,200,75,0 +210,210,0,72,0,218250,127,140,50,168,78,0 +211,211,0,76,0,218375,117,146,50,134,81,0 +212,212,0,80,0,218500,107,152,50,96,84,0 +213,213,0,84,0,218625,98,158,250,66,87,0 +214,214,0,88,0,218750,88,165,250,41,90,0 +215,215,0,92,0,218875,79,171,250,30,93,0 +216,216,0,96,0,219000,70,177,250,31,96,0 +217,217,0,100,0,219125,61,184,250,46,99,0 +218,218,0,104,0,219250,52,190,250,73,102,0 +219,219,0,108,0,219375,45,196,250,106,105,0 +220,220,0,112,0,219500,37,203,250,146,108,0 +221,221,0,116,0,219625,30,209,250,182,111,0 +222,222,0,120,0,219750,24,215,250,215,114,0 +223,223,0,124,0,219875,19,222,250,236,117,0 +224,224,0,128,255,220000,14,228,250,245,120,0 +225,225,0,132,255,220125,10,234,250,241,123,0 +226,226,0,136,255,220250,6,240,250,223,126,0 +227,227,0,140,255,220375,3,247,250,196,129,255 +228,228,0,144,255,220500,1,246,250,161,132,255 +229,229,0,148,255,220625,0,240,250,126,135,255 +230,230,0,152,255,220750,0,233,250,90,138,255 +231,231,0,156,255,220875,0,227,250,64,141,255 +232,232,0,160,255,221000,1,221,250,47,144,255 +233,233,0,164,255,221125,3,214,250,42,147,255 +234,234,0,168,255,221250,5,208,250,49,150,255 +235,235,0,172,255,221375,9,202,250,65,153,255 +236,236,0,176,255,221500,13,195,250,91,156,255 +237,237,0,180,255,221625,18,189,250,120,159,255 +238,238,0,184,255,221750,23,183,250,150,162,255 +239,239,0,188,255,221875,29,176,250,176,165,255 +240,240,0,192,255,222000,36,170,250,196,168,255 +241,241,0,196,255,222125,43,164,250,206,171,255 +242,242,0,200,255,222250,51,157,250,208,174,255 +243,243,0,204,255,222375,59,151,250,200,177,255 +244,244,0,208,255,222500,68,145,250,185,180,255 +245,245,0,212,255,222625,77,139,250,167,183,255 +246,246,0,216,255,222750,86,132,250,146,186,255 +247,247,0,220,255,222875,96,126,250,127,189,255 +248,248,0,224,255,223000,105,120,250,111,192,255 +249,249,0,228,255,223125,115,113,250,102,195,255 +250,250,0,232,255,223250,125,107,250,98,198,255 +251,251,0,236,255,223375,135,101,250,100,201,255 +252,252,0,240,255,223500,145,94,250,107,204,255 +253,253,0,244,255,223625,155,88,50,116,207,255 +254,254,0,248,255,223750,164,82,50,126,210,255 +255,255,0,252,255,223875,174,75,50,134,213,255 +0,255,255,0,0,224000,183,69,50,141,216,255 +1,254,255,4,0,224125,191,63,50,144,219,255 +2,253,255,8,0,224250,199,57,50,143,222,255 +3,252,255,12,0,224375,207,50,50,140,225,255 +4,251,255,16,0,224500,214,44,50,136,228,255 +5,250,255,20,0,224625,221,38,50,132,231,255 +6,249,255,24,0,224750,227,31,50,130,234,255 +7,248,255,28,0,224875,232,25,50,131,237,255 +8,247,255,32,0,225000,237,19,50,136,240,255 +9,246,255,36,0,225125,241,12,50,143,243,255 +10,245,255,40,0,225250,244,6,50,153,246,255 +11,244,255,44,0,225375,247,0,50,162,249,255 +12,243,255,48,0,225500,248,6,50,171,252,255 +13,242,255,52,0,225625,249,12,50,176,255,255 +14,241,255,56,0,225750,249,18,50,175,0,0 +15,240,255,60,0,225875,248,25,50,169,3,0 +16,239,255,64,0,226000,247,31,50,156,6,0 +17,238,255,68,0,226125,244,37,50,140,9,0 +18,237,255,72,0,226250,241,44,50,119,12,0 +19,236,255,76,0,226375,237,50,50,99,15,0 +20,235,255,80,0,226500,232,56,50,81,18,0 +21,234,255,84,0,226625,227,62,50,70,21,0 +22,233,255,88,0,226750,221,69,50,66,24,0 +23,232,255,92,0,226875,214,75,50,71,27,0 +24,231,255,96,0,227000,207,81,50,86,30,0 +25,230,255,100,0,227125,199,88,50,108,33,0 +26,229,255,104,0,227250,191,94,50,138,36,0 +27,228,255,108,0,227375,182,100,50,166,39,0 +28,227,255,112,0,227500,173,107,50,196,42,0 +29,226,255,116,0,227625,164,113,50,217,45,0 +30,225,255,120,0,227750,154,119,50,230,48,0 +31,224,255,124,0,227875,145,126,50,232,51,0 +32,223,255,128,255,228000,135,132,50,221,54,0 +33,222,255,132,255,228125,125,138,50,200,57,0 +34,221,255,136,255,228250,115,145,50,168,60,0 +35,220,255,140,255,228375,105,151,50,134,63,0 +36,219,255,144,255,228500,95,157,50,96,66,0 +37,218,255,148,255,228625,86,164,250,66,69,0 +38,217,255,152,255,228750,77,170,250,41,72,0 +39,216,255,156,255,228875,67,176,250,30,75,0 +40,215,255,160,255,229000,59,182,250,31,78,0 +41,214,255,164,255,229125,51,189,250,46,81,0 +42,213,255,168,255,229250,43,195,250,73,84,0 +43,212,255,172,255,229375,36,201,250,106,87,0 +44,211,255,176,255,229500,29,208,250,146,90,0 +45,210,255,180,255,229625,23,214,250,182,93,0 +46,209,255,184,255,229750,17,220,250,215,96,0 +47,208,255,188,255,229875,13,227,250,236,99,0 +48,207,255,192,255,230000,9,233,250,245,102,0 +49,206,255,196,255,230125,5,239,250,241,105,0 +50,205,255,200,255,230250,3,246,250,223,108,0 +51,204,255,204,255,230375,1,247,250,196,111,0 +52,203,255,208,255,230500,0,241,250,161,114,0 +53,202,255,212,255,230625,0,234,250,126,117,0 +54,201,255,216,255,230750,0,228,250,90,120,0 +55,200,255,220,255,230875,1,222,250,64,123,0 +56,199,255,224,255,231000,3,216,250,47,126,0 +57,198,255,228,255,231125,6,209,250,42,129,255 +58,197,255,232,255,231250,10,203,250,49,132,255 +59,196,255,236,255,231375,14,197,250,65,135,255 +60,195,255,240,255,231500,19,190,250,91,138,255 +61,194,255,244,255,231625,24,184,250,120,141,255 +62,193,255,248,255,231750,31,178,250,150,144,255 +63,192,255,252,255,231875,37,171,250,176,147,255 +64,191,255,0,0,232000,45,165,250,196,150,255 +65,190,255,4,0,232125,53,159,250,206,153,255 +66,189,255,8,0,232250,61,152,250,208,156,255 +67,188,255,12,0,232375,70,146,250,200,159,255 +68,187,255,16,0,232500,79,140,250,185,162,255 +69,186,255,20,0,232625,88,133,250,167,165,255 +70,185,255,24,0,232750,98,127,250,146,168,255 +71,184,255,28,0,232875,108,121,250,127,171,255 +72,183,255,32,0,233000,118,114,250,111,174,255 +73,182,255,36,0,233125,128,108,250,102,177,255 +74,181,255,40,0,233250,137,102,250,98,180,255 +75,180,255,44,0,233375,147,96,250,100,183,255 +76,179,255,48,0,233500,157,89,250,107,186,255 +77,178,255,52,0,233625,166,83,50,116,189,255 +78,177,255,56,0,233750,176,77,50,126,192,255 +79,176,255,60,0,233875,185,70,50,134,195,255 +80,175,255,64,0,234000,193,64,50,141,198,255 +81,174,255,68,0,234125,201,58,50,144,201,255 +82,173,255,72,0,234250,209,51,50,143,204,255 +83,172,255,76,0,234375,216,45,50,140,207,255 +84,171,255,80,0,234500,222,39,50,136,210,255 +85,170,255,84,0,234625,228,32,50,132,213,255 +86,169,255,88,0,234750,233,26,50,130,216,255 +87,168,255,92,0,234875,238,20,50,131,219,255 +88,167,255,96,0,235000,242,13,50,136,222,255 +89,166,255,100,0,235125,245,7,50,143,225,255 +90,165,255,104,0,235250,247,1,50,153,228,255 +91,164,255,108,0,235375,249,5,50,162,231,255 +92,163,255,112,0,235500,250,11,50,171,234,255 +93,162,255,116,0,235625,249,17,50,176,237,255 +94,161,255,120,0,235750,248,23,50,175,240,255 +95,160,255,124,0,235875,246,30,50,169,243,255 +96,159,255,128,255,236000,243,36,50,156,246,255 +97,158,255,132,255,236125,240,42,50,140,249,255 +98,157,255,136,255,236250,236,49,50,119,252,255 +99,156,255,140,255,236375,231,55,50,99,255,255 +100,155,255,144,255,236500,225,61,50,81,0,0 +101,154,255,148,255,236625,219,68,50,70,3,0 +102,153,255,152,255,236750,212,74,50,66,6,0 +103,152,255,156,255,236875,205,80,50,71,9,0 +104,151,255,160,255,237000,197,87,50,86,12,0 +105,150,255,164,255,237125,189,93,50,108,15,0 +106,149,255,168,255,237250,180,99,50,138,18,0 +107,148,255,172,255,237375,171,105,50,166,21,0 +108,147,255,176,255,237500,162,112,50,196,24,0 +109,146,255,180,255,237625,152,118,50,217,27,0 +110,145,255,184,255,237750,142,125,50,230,30,0 +111,144,255,188,255,237875,132,131,50,232,33,0 +112,143,255,192,255,238000,123,137,50,221,36,0 +113,142,255,196,255,238125,113,143,50,200,39,0 +114,141,255,200,255,238250,103,150,50,168,42,0 +115,140,255,204,255,238375,93,156,50,134,45,0 +116,139,255,208,255,238500,84,162,50,96,48,0 +117,138,255,212,255,238625,74,169,250,66,51,0 +118,137,255,216,255,238750,65,175,250,41,54,0 +119,136,255,220,255,238875,57,181,250,30,57,0 +120,135,255,224,255,239000,49,188,250,31,60,0 +121,134,255,228,255,239125,41,194,250,46,63,0 +122,133,255,232,255,239250,34,200,250,73,66,0 +123,132,255,236,255,239375,27,207,250,106,69,0 +124,131,255,240,255,239500,21,213,250,146,72,0 +125,130,255,244,255,239625,16,219,250,182,75,0 +126,129,255,248,255,239750,12,225,250,215,78,0 +127,128,255,252,255,239875,8,232,250,236,81,0 +128,127,255,0,0,240000,5,238,250,245,84,0 +129,126,255,4,0,240125,2,244,250,241,87,0 +130,125,255,8,0,240250,1,248,250,223,90,0 +131,124,255,12,0,240375,0,242,250,196,93,0 +132,123,255,16,0,240500,0,236,250,161,96,0 +133,122,255,20,0,240625,0,229,250,126,99,0 +134,121,255,24,0,240750,2,223,250,90,102,0 +135,120,255,28,0,240875,4,217,250,64,105,0 +136,119,255,32,0,241000,7,210,250,47,108,0 +137,118,255,36,0,241125,11,204,250,42,111,0 +138,117,255,40,0,241250,15,198,250,49,114,0 +139,116,255,44,0,241375,20,191,250,65,117,0 +140,115,255,48,0,241500,26,185,250,91,120,0 +141,114,255,52,0,241625,32,179,250,120,123,0 +142,113,255,56,0,241750,39,172,250,150,126,0 +143,112,255,60,0,241875,47,166,250,176,129,255 +144,111,255,64,0,242000,55,160,250,196,132,255 +145,110,255,68,0,242125,63,154,250,206,135,255 +146,109,255,72,0,242250,72,147,250,208,138,255 +147,108,255,76,0,242375,81,141,250,200,141,255 +148,107,255,80,0,242500,91,135,250,185,144,255 +149,106,255,84,0,242625,100,128,250,167,147,255 +150,105,255,88,0,242750,110,122,250,146,150,255 +151,104,255,92,0,242875,120,116,250,127,153,255 +152,103,255,96,0,243000,130,109,250,111,156,255 +153,102,255,100,0,243125,140,103,250,102,159,255 +154,101,255,104,0,243250,150,97,250,98,162,255 +155,100,255,108,0,243375,159,90,250,100,165,255 +156,99,255,112,0,243500,169,84,250,107,168,255 +157,98,255,116,0,243625,178,78,50,116,171,255 +158,97,255,120,0,243750,187,72,50,126,174,255 +159,96,255,124,0,243875,195,65,50,134,177,255 +160,95,255,128,255,244000,203,59,50,141,180,255 +161,94,255,132,255,244125,210,53,50,144,183,255 +162,93,255,136,255,244250,217,46,50,143,186,255 +163,92,255,140,255,244375,224,40,50,140,189,255 +164,91,255,144,255,244500,229,34,50,136,192,255 +165,90,255,148,255,244625,234,27,50,132,195,255 +166,89,255,152,255,244750,239,21,50,130,198,255 +167,88,255,156,255,244875,242,15,50,131,201,255 +168,87,255,160,255,245000,245,8,50,136,204,255 +169,86,255,164,255,245125,248,2,50,143,207,255 +170,85,255,168,255,245250,249,3,50,153,210,255 +171,84,255,172,255,245375,250,10,50,162,213,255 +172,83,255,176,255,245500,249,16,50,171,216,255 +173,82,255,180,255,245625,248,22,50,176,219,255 +174,81,255,184,255,245750,245,29,50,175,222,255 +175,80,255,188,255,245875,243,35,50,169,225,255 +176,79,255,192,255,246000,239,41,50,156,228,255 +177,78,255,196,255,246125,235,47,50,140,231,255 +178,77,255,200,255,246250,230,54,50,119,234,255 +179,76,255,204,255,246375,224,60,50,99,237,255 +180,75,255,208,255,246500,218,66,50,81,240,255 +181,74,255,212,255,246625,211,73,50,70,243,255 +182,73,255,216,255,246750,203,79,50,66,246,255 +183,72,255,220,255,246875,195,85,50,71,249,255 +184,71,255,224,255,247000,187,92,50,86,252,255 +185,70,255,228,255,247125,178,98,50,108,255,255 +186,69,255,232,255,247250,169,104,50,138,0,0 +187,68,255,236,255,247375,160,111,50,166,3,0 +188,67,255,240,255,247500,150,117,50,196,6,0 +189,66,255,244,255,247625,140,123,50,217,9,0 +190,65,255,248,255,247750,130,130,50,230,12,0 +191,64,255,252,255,247875,120,136,50,232,15,0 +192,63,255,0,0,248000,110,142,50,221,18,0 +193,62,255,4,0,248125,100,149,50,200,21,0 +194,61,255,8,0,248250,91,155,50,168,24,0 +195,60,255,12,0,248375,81,161,50,134,27,0 +196,59,255,16,0,248500,72,167,50,96,30,0 +197,58,255,20,0,248625,63,174,250,66,33,0 +198,57,255,24,0,248750,55,180,250,41,36,0 +199,56,255,28,0,248875,47,186,250,30,39,0 +200,55,255,32,0,249000,39,193,250,31,42,0 +201,54,255,36,0,249125,32,199,250,46,45,0 +202,53,255,40,0,249250,26,205,250,73,48,0 +203,52,255,44,0,249375,20,212,250,106,51,0 +204,51,255,48,0,249500,15,218,250,146,54,0 +205,50,255,52,0,249625,11,224,250,182,57,0 +206,49,255,56,0,249750,7,231,250,215,60,0 +207,48,255,60,0,249875,4,237,250,236,63,0 +208,47,255,64,0,250000,2,243,250,245,66,0 +209,46,255,68,0,250125,0,250,250,241,69,0 +210,45,255,72,0,250250,0,243,250,223,72,0 +211,44,255,76,0,250375,0,237,250,196,75,0 +212,43,255,80,0,250500,1,231,250,161,78,0 +213,42,255,84,0,250625,2,224,250,126,81,0 +214,41,255,88,0,250750,5,218,250,90,84,0 +215,40,255,92,0,250875,8,212,250,64,87,0 +216,39,255,96,0,251000,12,205,250,47,90,0 +217,38,255,100,0,251125,16,199,250,42,93,0 +218,37,255,104,0,251250,21,193,250,49,96,0 +219,36,255,108,0,251375,27,186,250,65,99,0 +220,35,255,112,0,251500,34,180,250,91,102,0 +221,34,255,116,0,251625,41,174,250,120,105,0 +222,33,255,120,0,251750,48,167,250,150,108,0 +223,32,255,124,0,251875,57,161,250,176,111,0 +224,31,255,128,255,252000,65,155,250,196,114,0 +225,30,255,132,255,252125,74,148,250,206,117,0 +226,29,255,136,255,252250,83,142,250,208,120,0 +227,28,255,140,255,252375,93,136,250,200,123,0 +228,27,255,144,255,252500,103,130,250,185,126,0 +229,26,255,148,255,252625,112,123,250,167,129,255 +230,25,255,152,255,252750,122,117,250,146,132,255 +231,24,255,156,255,252875,132,111,250,127,135,255 +232,23,255,160,255,253000,142,104,250,111,138,255 +233,22,255,164,255,253125,152,98,250,102,141,255 +234,21,255,168,255,253250,161,92,250,98,144,255 +235,20,255,172,255,253375,171,85,250,100,147,255 +236,19,255,176,255,253500,180,79,250,107,150,255 +237,18,255,180,255,253625,189,73,50,116,153,255 +238,17,255,184,255,253750,197,66,50,126,156,255 +239,16,255,188,255,253875,205,60,50,134,159,255 +240,15,255,192,255,254000,212,54,50,141,162,255 +241,14,255,196,255,254125,219,47,50,144,165,255 +242,13,255,200,255,254250,225,41,50,143,168,255 +243,12,255,204,255,254375,231,35,50,140,171,255 +244,11,255,208,255,254500,236,28,50,136,174,255 +245,10,255,212,255,254625,240,22,50,132,177,255 +246,9,255,216,255,254750,243,16,50,130,180,255 +247,8,255,220,255,254875,246,10,50,131,183,255 +248,7,255,224,255,255000,248,3,50,136,186,255 +249,6,255,228,255,255125,249,2,50,143,189,255 +250,5,255,232,255,255250,250,8,50,153,192,255 +251,4,255,236,255,255375,249,15,50,162,195,255 +252,3,255,240,255,255500,247,21,50,171,198,255 +253,2,255,244,255,255625,245,27,50,176,201,255 +254,1,255,248,255,255750,242,34,50,175,204,255 +255,0,255,252,255,255875,238,40,50,169,207,255 diff --git a/MATLAB/HW11/hw10.asv b/MATLAB/HW11/hw10.asv new file mode 100644 index 0000000..0868862 --- /dev/null +++ b/MATLAB/HW11/hw10.asv @@ -0,0 +1,77 @@ +data = importdata("C:\Users\Jacob McDonnell\Documents\CMPEN-472-HW\cmpen472hw10_McDonnell\data.csv"); + +sawtooth = data.data(:,1); +triangle = data.data(:,2); +square = data.data(:,3); +sawtooth125 = data.data(:,4); +square125 = data.data(:,5); +sawtooth250 = data.data(:,7) +time = data.data(:,6); +time = time / 1000000; % adjust to microseconds + +psw = CreatePlot(sawtooth,"Sawtooth Wave Two Cycles",time,1,512); +saveas(psw,"sawtooth2cycles.png"); +psw = CreatePlot(sawtooth,"Sawtooth Wave",time,1,2048); +saveas(psw,"sawtooth.png"); + +pt = CreatePlot(triangle,"Triangle Wave Two Cycles",time,1,1024); +saveas(pt,"triangle2cycles.png"); +pt = CreatePlot(triangle,"Triangle Wave",time,1,2048); +saveas(pt,"triangle.png"); + +psq = CreatePlot(square,"Square Wave Two Cycles",time,1,1024); +saveas(psq,"square2cycles.png"); +psq = CreatePlot(square,"Square Wave",time,1,2048); +saveas(psq,"square.png"); + +psw125 = CreatePlot(sawtooth125,"Sawtooth Wave 125Hz Two Cycles",time,1,128); +saveas(psw125,"sawtooth-125Hz2cycles.png"); +psw125 = CreatePlot(sawtooth125,"Sawtooth Wave 125Hz",time,1,2048); +saveas(psw125,"sawtooth-125Hz.png"); + +psq125 = CreatePlot(square125,"Square Wave 125Hz Two Cycles",time,1,128); +saveas(psq125,"square-125Hz2cycles.png"); +psq125 = CreatePlot(square125,"Square Wave 125Hz",time,1,2048); +saveas(psq125,"square-125Hz.png"); + +psw250 = CreatePlot(sa) + +Fs = 1/8000; % 8000Hz sampling frequency + +function p = CreatePlot(d, label, time, spos, epos) + p = figure; + plot(time(spos:epos), d(spos:epos)); + xlabel('Time in Seconds'); + ylabel('Signal Values'); + title(label); + grid on; +end + +function freqPlot = GeneratePlot(d,t,label) + Fs = 1/mean(diff(t)); + x = d - mean(d); + + n = length(x); % Number of samples + X = fft(x); % Compute the FFT + + % Only take the first half of the spectrum (positive frequencies) + X_mag = abs(X(1:floor(n/2))); % Magnitude of FFT + f = Fs * (0:floor(n/2)-1) / n; % Frequency vector + + freqPlot = figure; + plot(f, X_mag); + xlabel('Frequency (Hz)'); + ylabel('Amplitude'); + title(label); + grid on; +end + +swfft = GeneratePlot(sawtooth,time,'Sawtooth'); + +tfft = GeneratePlot(triangle,time,'Triangle'); + +sqfft = GeneratePlot(square,time,'Square'); + +sw125fft = GeneratePlot(sawtooth125,time,'Sawtooth 125Hz'); + +sq125fft = GeneratePlot(square125,time,'Square 125Hz'); diff --git a/MATLAB/HW11/hw11.m b/MATLAB/HW11/hw11.m new file mode 100644 index 0000000..811addc --- /dev/null +++ b/MATLAB/HW11/hw11.m @@ -0,0 +1,122 @@ +data = importdata("data.csv"); + +sawtooth = data.data(:,1); +triangle = data.data(:,2); +square = data.data(:,3); +sawtooth125 = data.data(:,4); +square125 = data.data(:,5); +sine100 = data.data(:,7); +triangle100 = data.data(:,8); +square100 = data.data(:,9); +mixedSine = data.data(:,10); +square100G = data.data(:,12); +sawtooth100G = data.data(:,11); +time = data.data(:,6); +time = time / 1000000; % adjust to microseconds + +psw = CreatePlot(sawtooth,"Sawtooth Wave Two Cycles",time,1,512); +saveas(psw,"sawtooth2cycles.png"); +psw = CreatePlot(sawtooth,"Sawtooth Wave",time,1,2048); +saveas(psw,"sawtooth.png"); + +pt = CreatePlot(triangle,"Triangle Wave Two Cycles",time,1,1024); +saveas(pt,"triangle2cycles.png"); +pt = CreatePlot(triangle,"Triangle Wave",time,1,2048); +saveas(pt,"triangle.png"); + +psq = CreatePlot(square,"Square Wave Two Cycles",time,1,1024); +saveas(psq,"square2cycles.png"); +psq = CreatePlot(square,"Square Wave",time,1,2048); +saveas(psq,"square.png"); + +psw125 = CreatePlot(sawtooth125,"Sawtooth Wave 125Hz Two Cycles",time,1,128); +saveas(psw125,"sawtooth-125Hz2cycles.png"); +psw125 = CreatePlot(sawtooth125,"Sawtooth Wave 125Hz",time,1,2048); +saveas(psw125,"sawtooth-125Hz.png"); + +psq125 = CreatePlot(square125,"Square Wave 125Hz Two Cycles",time,1,128); +saveas(psq125,"square-125Hz2cycles.png"); +psq125 = CreatePlot(square125,"Square Wave 125Hz",time,1,2048); +saveas(psq125,"square-125Hz.png"); + +psn100 = CreatePlot(sine100,"Sine Wave 100Hz Two Cycles",time,35,193); +saveas(psn100,"sine-100Hz-2-cycles.png"); +psn100 = CreatePlot(sine100,"Sine Wave 100Hz",time,1,2048); +saveas(psn100,"sine-100Hz.png"); + +pt100 = CreatePlot(triangle100,"Triangle Wave 100Hz Two Cycles",time,62,220); +saveas(pt100,"triangle-100Hz-2-cycles.png"); +pt100 = CreatePlot(triangle100,"Triangle Wave 100Hz",time,1,2048); +saveas(pt100,"triangle-100Hz.png"); + +pq100 = CreatePlot(square100,"Square Wave 100Hz Two Cycles",time,29,180); +saveas(pq100,"square-100Hz-2-cycles.png"); +pq100 = CreatePlot(square100,"Square Wave 100Hz",time,1,2048); +saveas(pq100,"square-100Hz.png"); + +ms = CreatePlot(mixedSine,"Mixed Sine Wave Two Cycles",time,73,233); +saveas(ms,"mixed-2-cycles.png"); +ms = CreatePlot(mixedSine,"Mixed Wave",time,1,2048); +saveas(ms,"mixed-100Hz.png"); + +psw100G = CreatePlot(sawtooth100G,"Sawtooth Wave 100Hz Generated Two Cycles",time,1,173); +saveas(psw100G,"sawtooth-100Hz-Generated-2cycles.png"); +psw100G = CreatePlot(sawtooth100G,"Sawtooth Wave 100Hz Generated",time,1,2048); +saveas(psw100G,"sawtooth-100Hz-Generated.png"); + +psq100G = CreatePlot(square100G,"Square Wave 100Hz Generated Two Cycles",time,1,173); +saveas(psq100G,"square-100Hz-Generated-2cycles.png"); +psq100G = CreatePlot(square100G,"Square Wave 100Hz Generated",time,1,2048); +saveas(psq100G,"square-100Hz-Generated.png"); + +Fs = 1/8000; % 8000Hz sampling frequency + +function p = CreatePlot(d, label, time, spos, epos) + p = figure; + plot(time(spos:epos), d(spos:epos)); + xlabel('Time in Seconds'); + ylabel('Signal Values'); + title(label); + grid on; +end + +function freqPlot = GeneratePlot(d,t,label) + Fs = 1/mean(diff(t)); + x = d - mean(d); + + n = length(x); % Number of samples + X = fft(x); % Compute the FFT + + % Only take the first half of the spectrum (positive frequencies) + X_mag = abs(X(1:floor(n/2))); % Magnitude of FFT + f = Fs * (0:floor(n/2)-1) / n; % Frequency vector + + freqPlot = figure; + plot(f, X_mag); + xlabel('Frequency (Hz)'); + ylabel('Amplitude'); + title(label); + grid on; +end + +swfft = GeneratePlot(sawtooth,time,'Sawtooth'); + +tfft = GeneratePlot(triangle,time,'Triangle'); + +sqfft = GeneratePlot(square,time,'Square'); + +sw125fft = GeneratePlot(sawtooth125,time,'Sawtooth 125Hz'); + +sq125fft = GeneratePlot(square125,time,'Square 125Hz'); + +sine100fft = GeneratePlot(sine100,time,"Sine Wave 100Hz"); + +tri100fft = GeneratePlot(triangle100,time,"Triangle Wave 100Hz"); + +sq100fft = GeneratePlot(square100,time,"Square Wave 100Hz"); + +mixedfft = GeneratePlot(mixedSine,time,"Mixed Frequency"); + +sq100Gfft = GeneratePlot(square100G,time,"Square Wave 100Hz Generated"); + +sw100Gfft = GeneratePlot(sawtooth100G,time,"Sawtooth Wave 100Hz Generated");
\ No newline at end of file diff --git a/MATLAB/HW11/mixed-100Hz.png b/MATLAB/HW11/mixed-100Hz.png Binary files differnew file mode 100644 index 0000000..1b051c2 --- /dev/null +++ b/MATLAB/HW11/mixed-100Hz.png diff --git a/MATLAB/HW11/mixed-2-cycles.png b/MATLAB/HW11/mixed-2-cycles.png Binary files differnew file mode 100644 index 0000000..d7351d4 --- /dev/null +++ b/MATLAB/HW11/mixed-2-cycles.png diff --git a/MATLAB/HW11/msineFFT.png b/MATLAB/HW11/msineFFT.png Binary files differnew file mode 100644 index 0000000..1930ab2 --- /dev/null +++ b/MATLAB/HW11/msineFFT.png diff --git a/MATLAB/HW11/sawtooth-100Hz-Generated-2cycles.png b/MATLAB/HW11/sawtooth-100Hz-Generated-2cycles.png Binary files differnew file mode 100644 index 0000000..63ef106 --- /dev/null +++ b/MATLAB/HW11/sawtooth-100Hz-Generated-2cycles.png diff --git a/MATLAB/HW11/sawtooth-100Hz-Generated.png b/MATLAB/HW11/sawtooth-100Hz-Generated.png Binary files differnew file mode 100644 index 0000000..792f0a0 --- /dev/null +++ b/MATLAB/HW11/sawtooth-100Hz-Generated.png diff --git a/MATLAB/HW11/sawtooth-125Hz.png b/MATLAB/HW11/sawtooth-125Hz.png Binary files differnew file mode 100644 index 0000000..34796ea --- /dev/null +++ b/MATLAB/HW11/sawtooth-125Hz.png diff --git a/MATLAB/HW11/sawtooth-125Hz2cycles.png b/MATLAB/HW11/sawtooth-125Hz2cycles.png Binary files differnew file mode 100644 index 0000000..a729a7c --- /dev/null +++ b/MATLAB/HW11/sawtooth-125Hz2cycles.png diff --git a/MATLAB/HW11/sawtooth.png b/MATLAB/HW11/sawtooth.png Binary files differnew file mode 100644 index 0000000..b3468dd --- /dev/null +++ b/MATLAB/HW11/sawtooth.png diff --git a/MATLAB/HW11/sawtooth2cycles.png b/MATLAB/HW11/sawtooth2cycles.png Binary files differnew file mode 100644 index 0000000..56ca069 --- /dev/null +++ b/MATLAB/HW11/sawtooth2cycles.png diff --git a/MATLAB/HW11/sine-100Hz-2-cycles.png b/MATLAB/HW11/sine-100Hz-2-cycles.png Binary files differnew file mode 100644 index 0000000..a9aff2d --- /dev/null +++ b/MATLAB/HW11/sine-100Hz-2-cycles.png diff --git a/MATLAB/HW11/sine-100Hz.png b/MATLAB/HW11/sine-100Hz.png Binary files differnew file mode 100644 index 0000000..7f0f1e0 --- /dev/null +++ b/MATLAB/HW11/sine-100Hz.png diff --git a/MATLAB/HW11/sine100FFT.png b/MATLAB/HW11/sine100FFT.png Binary files differnew file mode 100644 index 0000000..ccb976d --- /dev/null +++ b/MATLAB/HW11/sine100FFT.png diff --git a/MATLAB/HW11/sq100FFT.png b/MATLAB/HW11/sq100FFT.png Binary files differnew file mode 100644 index 0000000..960f0c1 --- /dev/null +++ b/MATLAB/HW11/sq100FFT.png diff --git a/MATLAB/HW11/sq100GFFT.png b/MATLAB/HW11/sq100GFFT.png Binary files differnew file mode 100644 index 0000000..5fd0b3b --- /dev/null +++ b/MATLAB/HW11/sq100GFFT.png diff --git a/MATLAB/HW11/sq125fft.png b/MATLAB/HW11/sq125fft.png Binary files differnew file mode 100644 index 0000000..454bfe7 --- /dev/null +++ b/MATLAB/HW11/sq125fft.png diff --git a/MATLAB/HW11/sqfft.png b/MATLAB/HW11/sqfft.png Binary files differnew file mode 100644 index 0000000..df95e5d --- /dev/null +++ b/MATLAB/HW11/sqfft.png diff --git a/MATLAB/HW11/square-100Hz-2-cycles.png b/MATLAB/HW11/square-100Hz-2-cycles.png Binary files differnew file mode 100644 index 0000000..ef2d0d5 --- /dev/null +++ b/MATLAB/HW11/square-100Hz-2-cycles.png diff --git a/MATLAB/HW11/square-100Hz-Generated-2cycles.png b/MATLAB/HW11/square-100Hz-Generated-2cycles.png Binary files differnew file mode 100644 index 0000000..5fb3d10 --- /dev/null +++ b/MATLAB/HW11/square-100Hz-Generated-2cycles.png diff --git a/MATLAB/HW11/square-100Hz-Generated.png b/MATLAB/HW11/square-100Hz-Generated.png Binary files differnew file mode 100644 index 0000000..38676d9 --- /dev/null +++ b/MATLAB/HW11/square-100Hz-Generated.png diff --git a/MATLAB/HW11/square-100Hz.png b/MATLAB/HW11/square-100Hz.png Binary files differnew file mode 100644 index 0000000..739961c --- /dev/null +++ b/MATLAB/HW11/square-100Hz.png diff --git a/MATLAB/HW11/square-125Hz.png b/MATLAB/HW11/square-125Hz.png Binary files differnew file mode 100644 index 0000000..7097f9d --- /dev/null +++ b/MATLAB/HW11/square-125Hz.png diff --git a/MATLAB/HW11/square-125Hz2cycles.png b/MATLAB/HW11/square-125Hz2cycles.png Binary files differnew file mode 100644 index 0000000..e1d74ed --- /dev/null +++ b/MATLAB/HW11/square-125Hz2cycles.png diff --git a/MATLAB/HW11/square.png b/MATLAB/HW11/square.png Binary files differnew file mode 100644 index 0000000..16297ad --- /dev/null +++ b/MATLAB/HW11/square.png diff --git a/MATLAB/HW11/square2cycles.png b/MATLAB/HW11/square2cycles.png Binary files differnew file mode 100644 index 0000000..bb34b86 --- /dev/null +++ b/MATLAB/HW11/square2cycles.png diff --git a/MATLAB/HW11/sw100GFFT.png b/MATLAB/HW11/sw100GFFT.png Binary files differnew file mode 100644 index 0000000..fa9a72f --- /dev/null +++ b/MATLAB/HW11/sw100GFFT.png diff --git a/MATLAB/HW11/sw125fft.png b/MATLAB/HW11/sw125fft.png Binary files differnew file mode 100644 index 0000000..ea1342b --- /dev/null +++ b/MATLAB/HW11/sw125fft.png diff --git a/MATLAB/HW11/swfft.png b/MATLAB/HW11/swfft.png Binary files differnew file mode 100644 index 0000000..afafcee --- /dev/null +++ b/MATLAB/HW11/swfft.png diff --git a/MATLAB/HW11/t100FFT.png b/MATLAB/HW11/t100FFT.png Binary files differnew file mode 100644 index 0000000..633353d --- /dev/null +++ b/MATLAB/HW11/t100FFT.png diff --git a/MATLAB/HW11/tfft.png b/MATLAB/HW11/tfft.png Binary files differnew file mode 100644 index 0000000..ab0839f --- /dev/null +++ b/MATLAB/HW11/tfft.png diff --git a/MATLAB/HW11/triangle-100Hz-2-cycles.png b/MATLAB/HW11/triangle-100Hz-2-cycles.png Binary files differnew file mode 100644 index 0000000..001a053 --- /dev/null +++ b/MATLAB/HW11/triangle-100Hz-2-cycles.png diff --git a/MATLAB/HW11/triangle-100Hz.png b/MATLAB/HW11/triangle-100Hz.png Binary files differnew file mode 100644 index 0000000..da854bd --- /dev/null +++ b/MATLAB/HW11/triangle-100Hz.png diff --git a/MATLAB/HW11/triangle.png b/MATLAB/HW11/triangle.png Binary files differnew file mode 100644 index 0000000..2b3eeb6 --- /dev/null +++ b/MATLAB/HW11/triangle.png diff --git a/MATLAB/HW11/triangle2cycles.png b/MATLAB/HW11/triangle2cycles.png Binary files differnew file mode 100644 index 0000000..dfcc44e --- /dev/null +++ b/MATLAB/HW11/triangle2cycles.png diff --git a/MATLAB/mixed-100Hz.png b/MATLAB/mixed-100Hz.png Binary files differnew file mode 100644 index 0000000..b036804 --- /dev/null +++ b/MATLAB/mixed-100Hz.png diff --git a/MATLAB/mixed-2-cycles.png b/MATLAB/mixed-2-cycles.png Binary files differnew file mode 100644 index 0000000..d5a144c --- /dev/null +++ b/MATLAB/mixed-2-cycles.png diff --git a/MATLAB/sawtooth-100Hz-Generated-2cycles.png b/MATLAB/sawtooth-100Hz-Generated-2cycles.png Binary files differnew file mode 100644 index 0000000..ee90446 --- /dev/null +++ b/MATLAB/sawtooth-100Hz-Generated-2cycles.png diff --git a/MATLAB/sawtooth-100Hz-Generated.png b/MATLAB/sawtooth-100Hz-Generated.png Binary files differnew file mode 100644 index 0000000..4c734e0 --- /dev/null +++ b/MATLAB/sawtooth-100Hz-Generated.png diff --git a/MATLAB/sawtooth-125Hz.png b/MATLAB/sawtooth-125Hz.png Binary files differnew file mode 100644 index 0000000..1d4c176 --- /dev/null +++ b/MATLAB/sawtooth-125Hz.png diff --git a/MATLAB/sawtooth-125Hz2cycles.png b/MATLAB/sawtooth-125Hz2cycles.png Binary files differnew file mode 100644 index 0000000..fdd1846 --- /dev/null +++ b/MATLAB/sawtooth-125Hz2cycles.png diff --git a/MATLAB/sawtooth.png b/MATLAB/sawtooth.png Binary files differnew file mode 100644 index 0000000..5bfa5bd --- /dev/null +++ b/MATLAB/sawtooth.png diff --git a/MATLAB/sawtooth2cycles.png b/MATLAB/sawtooth2cycles.png Binary files differnew file mode 100644 index 0000000..42b0de5 --- /dev/null +++ b/MATLAB/sawtooth2cycles.png diff --git a/MATLAB/sine-100Hz-2-cycles.png b/MATLAB/sine-100Hz-2-cycles.png Binary files differnew file mode 100644 index 0000000..bb77fd4 --- /dev/null +++ b/MATLAB/sine-100Hz-2-cycles.png diff --git a/MATLAB/sine-100Hz.png b/MATLAB/sine-100Hz.png Binary files differnew file mode 100644 index 0000000..e518b60 --- /dev/null +++ b/MATLAB/sine-100Hz.png diff --git a/MATLAB/square-100Hz-2-cycles.png b/MATLAB/square-100Hz-2-cycles.png Binary files differnew file mode 100644 index 0000000..cf57ee4 --- /dev/null +++ b/MATLAB/square-100Hz-2-cycles.png diff --git a/MATLAB/square-100Hz-Generated-2cycles.png b/MATLAB/square-100Hz-Generated-2cycles.png Binary files differnew file mode 100644 index 0000000..b68000b --- /dev/null +++ b/MATLAB/square-100Hz-Generated-2cycles.png diff --git a/MATLAB/square-100Hz-Generated.png b/MATLAB/square-100Hz-Generated.png Binary files differnew file mode 100644 index 0000000..eabc708 --- /dev/null +++ b/MATLAB/square-100Hz-Generated.png diff --git a/MATLAB/square-100Hz.png b/MATLAB/square-100Hz.png Binary files differnew file mode 100644 index 0000000..845e802 --- /dev/null +++ b/MATLAB/square-100Hz.png diff --git a/MATLAB/square-125Hz.png b/MATLAB/square-125Hz.png Binary files differnew file mode 100644 index 0000000..124ab7f --- /dev/null +++ b/MATLAB/square-125Hz.png diff --git a/MATLAB/square-125Hz2cycles.png b/MATLAB/square-125Hz2cycles.png Binary files differnew file mode 100644 index 0000000..cbe9b55 --- /dev/null +++ b/MATLAB/square-125Hz2cycles.png diff --git a/MATLAB/square.png b/MATLAB/square.png Binary files differnew file mode 100644 index 0000000..e9514b3 --- /dev/null +++ b/MATLAB/square.png diff --git a/MATLAB/square2cycles.png b/MATLAB/square2cycles.png Binary files differnew file mode 100644 index 0000000..dc8d6fd --- /dev/null +++ b/MATLAB/square2cycles.png diff --git a/MATLAB/triangle-100Hz-2-cycles.png b/MATLAB/triangle-100Hz-2-cycles.png Binary files differnew file mode 100644 index 0000000..bd103d5 --- /dev/null +++ b/MATLAB/triangle-100Hz-2-cycles.png diff --git a/MATLAB/triangle-100Hz.png b/MATLAB/triangle-100Hz.png Binary files differnew file mode 100644 index 0000000..cf30129 --- /dev/null +++ b/MATLAB/triangle-100Hz.png diff --git a/MATLAB/triangle.png b/MATLAB/triangle.png Binary files differnew file mode 100644 index 0000000..411d139 --- /dev/null +++ b/MATLAB/triangle.png diff --git a/MATLAB/triangle2cycles.png b/MATLAB/triangle2cycles.png Binary files differnew file mode 100644 index 0000000..25f1efe --- /dev/null +++ b/MATLAB/triangle2cycles.png diff --git a/cmpen472hw11_McDonnell/bin/Project.xpr b/cmpen472hw11_McDonnell/bin/Project.xpr new file mode 100644 index 0000000..d7bad06 --- /dev/null +++ b/cmpen472hw11_McDonnell/bin/Project.xpr @@ -0,0 +1 @@ +Data < ADDXPR ONLY_ADD_IF_NEW "main.dbg::operator" diff --git a/cmpen472hw12_McDonnell/Sources/cmpen472hw12_McDonnell.asm b/cmpen472hw12_McDonnell/Sources/cmpen472hw12_McDonnell.asm new file mode 100644 index 0000000..2e2b5e6 --- /dev/null +++ b/cmpen472hw12_McDonnell/Sources/cmpen472hw12_McDonnell.asm @@ -0,0 +1,1097 @@ +************************************************************************** +* +* Title: Memory Monitor +* +* Objective: CMPEN 472 Homework 12 +* +* Revision: V1.0 +* +* Date: APR. 25, 2025 +* +* Programmer: Jacob McDonnell +* +* Company: The Pennsylvania State University +* Department of Computer Science and Engineering +* +* Algorithm: Simple Serial I/O, address poking and modifying +* +* Register Use: A & B to current byte, etc, +* X & Y holds address of strings and length of string, +* D to hold data and address of the memory location to work on. +* +* Memory Use: RAM Locations from $3000 for data, +* RAM Locations from $3100 for program +* +* Input: Serial Port for User Input +* +* Output: Serial Port for String Output +* Memory locations changed if modified by user +* +* Observation: This program will prompt the user to print the contents of a +* memory location and to modify the location with hexadecimal or +* decimal data. The user can also load in chunks of data and +* print chunks of memory. If the user wishes, they can type +* 'QUIT' to exit the memory monitor and enter the type writer +* program. +* +* Note: ON CSM-12C128 board, +* +* Comments: This program is developed and simulated using CodeWarrior +* development software and targeted for Axion +* Manufacturing's CSM-12C128 board running at 24MHz. +* +************************************************************************** +* Parameter Declearation Section +* +* Export Symbols + xdef pgstart ; export 'pgstart' symbol + absentry pgstart ; for assembly entry point + +* Symbols and Macros +PORTA equ $0000 ; i/o port A addresses +DDRA equ $0002 ; data direction register for PORTA +PORTB equ $0001 ; i/o port B addresses +DDRB equ $0003 ; data direction register for PORTB + +SCIBDH equ $00C8 ; Serial port (SCI) Baud Register H +SCIBDL equ $00C9 ; Serial port (SCI) Baud Register L +SCICR2 equ $00CB ; Serial port (SCI) Control Register 2 +SCISR1 equ $00CC ; Serial port (SCI) Status Register 1 +SCIDRL equ $00CF ; Serial port (SCI) Data Register + +CR equ $0d ; carriage return, ASCII 'Return' key +LF equ $0a ; line feed, ASCII 'next line' character +NULL equ $00 ; NULL Terminator character + +* +************************************************************************** +* Data Section: address used [ $3000 to $30FF ] RAM Memory +* + org $3000 ; Reserved RAM memory starting address + ; for Data for CMPEN 472 class +TESTER dc.w $0005 ; Memory location to test showing data + ; and writing data. + +buffer ds.b $0010 ; Array of 16 bytes to read a string + dc.b NULL ; NULL terminated +lenBuf dc.w $0010 ; Length of buffer array + +buffer2 ds.b $0010 ; Array of 16 bytes for reading and reversal + dc.b NULL ; NULL terminated +lenBuf2 dc.w $0010 ; length of buffer2 + +charCount dc.b $00 ; Number of characters read by ReadHex + +* +* There is a section Data Section at the end of the file +************************************************************************** +* Program Section: address used [ $3100 to $3FFF ] RAM Memory +* + org $3100 ; Program start address, in RAM +pgstart lds #$3100 ; initialize the stack pointer + + ldaa #%11111111 ; Seven Segment display on PORTB + staa DDRB + + ldaa #$0C ; Enable SCI port Tx and Rx units + staa SCICR2 ; disable SCI interrupts + + ldd #$0001 ; Set SCI Baud Register = $0001 => 1.5M baud at 24MHz (for simulation) + std SCIBDH ; SCI port baud rate change + + ldx #msg ; Load the address of the welcome message into X + jsr WriteString ; Write the string to the serial console + +mainLoop + ldx #buffer ; Load the address of the buffer into X + ldy lenBuf ; Load the length of the buffer into Y + jsr Zeros ; Fill the buffer with zeros + + ldaa #'>' ; Load '>' into A + jsr putchar ; Jump to putchar to write to console + ldaa #' ' ; Load space character into A + jsr putchar ; Jump to putchar to write to console + + ldx #buffer ; Load the address of the buffer into X + ldy lenBuf ; Load the length of the buffer into Y + jsr ReadString ; Read a line from the serial console + + ldx #buffer ; Load the address of the buffer into X + jsr CheckInput ; Jump to CheckInput to parse the user input + bra mainLoop ; Loop back to mainLoop always +TypeWriter ldx #twMsg ; Load Type Writer welcome message address + jsr WriteString ; Jump to WriteString to write message to serial +twReadLoop jsr getchar ; Read Character from Serial + beq twReadLoop ; While Character == 0, branch to twReadLoop + jsr putchar ; Write Character back to terminal + staa PORTB ; Write Character to PORTB + bra twReadLoop ; Branch always to twReadLoop + +************************************************************************** +* Subroutine Section: address used [ $3100 to $3FFF ] RAM Memory +* + +;************************************************************************* +; CheckInput subroutine +; +; This subroutine will check the input string and match the option. +; +; Input: Address of null terminated string in X. +; Output: No Output, Control flow changed to proper subroutine. +; Registers in use: X for the address of the string, A & B to read characters from +; from the string. +; Memory locations in use: Memory Address for serial line, address of the string +; +; Comments: This subroutine will not return a value, it will jump to the proper subroutine +; based on the input given. If "QUIT" is the command, this subroutine will jump +; to TypeWriter which will not return and needs to be restarted to exit. +; + +CheckInput + pshx ; Save X to the stack + pshd ; Save D to the stack + ldaa 1,x+ ; Read Character from the string in X + cmpa #'W' ; Compare Character to 'W' + lbeq cWrite ; If A == 'W', branch to cWrite + cmpa #'Q' ; Compare A to 'Q' + lbeq cTypeWrite ; If A == 'Q', branch to cTypeWrite + cmpa #'M' ; Compare A to 'M' + beq cMDCommand ; If A != 'M', Check if LD command + cmpa #'L' ; Compare A to 'L' + lbeq cLDCommand ; If A != 'L', Check if GO command + cmpa #'G' ; Compare A to 'G' + beq cGoTo ; If A != 'G', Check if L command + cmpa #'S' ; Compare A to 'S' + lbne cUnknownCMD ; If A != 'S', Command unknown + ldaa 0,x ; Load next character but don't increment + cmpa #'$' ; Compare A to '$' + lbne cUnknownCMD ; If A != '$', branch to unknown command + jsr ReadHex ; ReadHex to Read the memory Address + lbeq cBadAddr ; If Z == 1, branch to cBadAddr + exg Y,X ; Exchange Y for X + pshx ; Save X to the stack + ldx #buffer ; Load address of buffer into X + ldy lenBuf ; Loadd length of the buffer into Y + jsr Zeros ; Fill buffer with Zeros + pulx ; Restore X from the stack + lbra cDone ; branch always to cDone +cGoTo ldaa 1,x+ ; Load next character + cmpa #'O' ; Compare to 'O' + lbne cUnknownCMD ; If A != 'S', Command unknown + ldaa 0,x ; Load next character but don't increment + cmpa #'$' ; Compare A to '$' + lbne cUnknownCMD ; If A != '$', branch to unknown command + jsr ReadHex ; ReadHex to Read the memory Address + lbeq cBadAddr ; If Z == 1, branch to cBadAddr + jsr 0,y ; Launch address in Y + lbra cNoPrint ; Done with command +cMDCommand ldaa 1,x+ ; Load next character into A + cmpa #'D' ; Compare do 'D' character + lbne cUnknownCMD ; If A != 'D', unknown command + ldaa 0,x ; Load next character but don't increment + cmpa #'$' ; Compare A to '$' + lbne cUnknownCMD ; If A != '$', branch to unknown command + jsr ReadHex ; ReadHex to Read the memory Address + lbeq cBadAddr ; If Z == 1, branch to cBadAddr + exg Y,D ; Exchange Y and D + pshd ; Save D to the stack +mSkipSpaces ldaa 1,x+ ; Load next character into A + lbeq cBadData ; If A == 0, branch to bad Data (no data given) + cmpa #' ' ; Compare A to space character + lbeq mSkipSpaces ; While A == ' ', loop to skip spaces + cmpa #'$' ; Compare A to '$' + lbne cBadData ; If A != '$', branch to cBadData + dex ; Decrement X by 1 + jsr ReadHex ; Jump to ReadHex to read hex data + lbeq cBadData ; If Z == 1, branch to cBadData + puld ; Restore D from the stack + exg D,X ; Exchange D and X + pshd ; Save D to the stack, cBadData usually has 2 D's on the stack + cpy #2 ; Compare Y to 2 + blo cBadData ; No distances below 2 bytes + puld ; Restore D from the stack + jsr MDCommand ; Jump to MDCommand + lbra cNoPrint ; Done with command +cLDCommand ldaa 1,x+ ; Load next character into A + cmpa #'D' ; Compare do 'D' character + bne cUnknownCMD ; If A != 'D', unknown command + ldaa 0,x ; Load next character but don't increment + cmpa #'$' ; Compare A to '$' + bne cUnknownCMD ; If A != '$', branch to unknown command + jsr ReadHex ; ReadHex to Read the memory Address + beq cBadAddr ; If Z == 1, branch to cBadAddr + exg Y,D ; Exchange Y and D + pshd ; Save D to the stack +lSkipSpaces ldaa 1,x+ ; Load next character into A + beq cBadData ; If A == 0, branch to bad Data (no data given) + cmpa #' ' ; Compare A to space character + beq lSkipSpaces ; While A == ' ', loop to skip spaces + cmpa #'$' ; Compare A to '$' + bne cBadData ; If A != '$', branch to cBadData + dex ; Decrement X by 1 + jsr ReadHex ; Jump to ReadHex to read hex data + beq cBadData ; If Z == 1, branch to cBadData + puld ; Restore D from the stack + exg D,X ; Exchange D and X + pshd ; Save D to the stack, cBadData usually has 2 D's on the stack + cpy #1 ; Compare Y to 1 + blo cBadData ; No distances below 2 bytes + puld ; Restore D from the stack + jsr LDCommand ; Jump to MDCommand + bra cNoPrint ; Done with command +cWrite ldaa 0,x ; Load next character but don't increment + cmpa #'$' ; Compare A to '$' + bne cUnknownCMD ; If A != '$', branch to unknown command + jsr ReadHex ; ReadHex to Read the memory Address + beq cBadAddr ; If Z == 1, branch to cBadAddr + exg Y,D ; Exchange Y and D + pshd ; Save D to the stack +skipSpaces ldaa 1,x+ ; Load next character into A + beq cBadData ; If A == 0, branch to bad Data (no data given) + cmpa #' ' ; Compare A to space character + beq skipSpaces ; While A == ' ', loop to skip spaces + cmpa #'$' ; Compare A to '$' + beq cHexData ; If A == '$', branch to cHexData + dex ; Decrement X by 1 + jsr ReadDecimal ; Jump to ReadDecimal + beq cBadData ; If Z == 1, branch to cBadData + bra cWriteData ; Branch always to cWriteData +cHexData dex ; Decrement X by 1 + jsr ReadHex ; Jump to ReadHex to read hex data + beq cBadData ; If Z == 1, branch to cBadData +cWriteData puld ; Restore D from the stack + exg D,X ; Exchange D and X + sty x ; Write data in Y to memory in X +cDone jsr PrintMem ; Jump to PrintMem to print the contents of the location +cNoPrint puld ; Restore D from the stack + pulx ; Restore X from the stack + rts ; Return to caller +cBadAddr ldx #badAddr ; Load the address of badAddr into X + jsr WriteString ; Write badAddr to serial console + puld ; Restore D from the stack + pulx ; Restore X from the stack + rts ; Return to caller +cBadData ldx #badData ; Load the address of badData into X + jsr WriteString ; Write badData to serial console + puld ; Restore D from the stack + puld ; Restore D from the stack + pulx ; Restore X from the stack + rts ; Return to caller +cUnknownCMD ldx #badCom ; Load the address of badCom into X + jsr WriteString ; Write badCom to the serial console + puld ; Restore D from the stack + pulx ; Restore X from the stack + rts ; Return to caller +cTypeWrite ldaa 1,x+ ; Load next character from X + cmpa #'U' ; Compare A to 'U' + bne cUnknownCMD ; If A != 'U', branch to unknown command + ldaa 1,x+ ; Load next character from X + cmpa #'I' ; Compare A to 'I' + bne cUnknownCMD ; If A != 'I', branch to unknown command + ldaa 1,x+ ; Load next character from X + cmpa #'T' ; Compare A to 'T' + bne cUnknownCMD ; If A != 'T', branch to unknown command + ldaa 1,x+ ; Load next character from X + bne cUnknownCMD ; If A != 0, branch to unknown command + jmp TypeWriter ; Jump to TypeWriter + +;************************************************************************* +; ReadHex subroutine +; +; This subroutine will read an ASCII string of a number in hex and convert it to +; its value. +; +; Input: A memory address in register X. +; Output: The value of the hex number in the Y register, and any errors printed +; to the serial line. Zero bit is set if error occurs. +; Registers in use: X for the address of the contents and for a buffer while printing, +; D for multiplication, B for the character, Y for output value. +; Memory locations in use: Memory Address for serial line, address of the string +; +; Comments: This subroutine will return the value in the Y register, and if an error occurs, +; the Zero bit in the CCR will be set. +; + +ReadHex + pshd ; Save D to the stack + ldy #0 ; Clear Y register + ldab 1,x+ ; Read character from X into B, add 1 to X + clra ; clear A accumulator + staa charCount ; Clear charCount + cmpb #'$' ; Compare B to '$' + bne rHError ; If B != '$', jump to error, not hex data +rHLoop inc charCount ; Increment charCount by 1 + ldab charCount ; Load charCount into B + cmpb #5 ; At most 4 hex digits to read + bhi rHError ; If charCount > 5, error + ldab 1,x+ ; Read Next character from X + beq rHDone ; If B == 0, exit loop + cmpb #' ' ; Compare B to space character + beq rHDone ; If B == ' ', exit loop + cmpb #'0' ; Compare B to '0' character + blt rHError ; If B < '0', bad address, exit loop + cmpb #'9' ; Compare B to '9' character + bhi rHAlpha ; If B > '9', check if 'A'-'F' characters + subb #'0' ; Subtract '0' from B to get true value + pshb ; Save B to the stack + ldd #16 ; load 16 into D + emul ; Multiply Y and D + exg d,y ; Transfer data from D to Y + pulb ; Restore b from the stack + aby ; Add B to Y + bra rHLoop ; Branch always to rHLoop +rHAlpha cmpb #'A' ; Compare B to 'A' character + blt rHError ; If B < 'A', bad address, exit loop + cmpb #'F' ; Compare B to 'F' character + bhi rHError ; If B > 'F', invalid data, error out + subb #'A' ; Subtract 'A' from B to get true value + addb #$A ; Add $A to B to account for offet + pshb ; Save B to the stack + ldd #16 ; load 16 into D + emul ; Multiply Y and D + exg d,y ; Transfer data from D to Y + pulb ; Restore b from the stack + aby ; Add B to Y + bra rHLoop ; Branch always to rHLoop +rHDone clra ; clear A accumulator + staa charCount ; Clear charCount + tap ; Transfer A into CCR to clear zero bit + puld ; Restore D from the stack + rts ; Return to caller +rHError ldaa #4 ; Load 4 into A to set zero bit in CCR + tap ; Transfer A into CCR to set zero bit and warn error + puld ; Restore D from the stack + rts ; Return to caller + +;************************************************************************* +; MDCommand subroutine +; +; This subroutine is the MD command for the user. This subroutine will take in +; a memory address and a length of bytes, and will print the bytes starting at +; that memory location in 16 byte line segments. +; +; Input: A memory address in register X & a length of bytes in Y +; Output: The data in memory starting at the address in X in 16 +; byte line segments on the serial console. +; Registers in use: X for the address of the contents and for a buffer while printing, +; D for multiplication, B for the character, Y for output value. +; Memory locations in use: Memory Address for serial line, address of the string +; +; Comments: This subroutine Requires PrintHexWord & PrintHexByte. +; + +MDCommand + pshx ; Save X to the stack + pshy ; Save Y to the stack + pshd ; Save D to the stack + pshx ; Save X to the stack + pshy ; Save Y to the stack + tfr x,d ; Copy X to D + ldx #buffer ; Load the address of the buffer into X + ldy lenBuf ; Load the length of the buffer into Y + jsr Zeros ; Fill the buffer with Zeros + ldy #buffer ; Load the address of the buffer into Y + jsr PrintHexWord ; Print the data + ldaa #' ' ; Load space character into A + jsr putchar ; Print space to console + puly ; Restore Y from the stack + pulx ; Restore X from the stack + ldd #0 ; Clear D +MDLoop cpy #0 ; Compare Y to 0 + beq MDDone ; If Y == 0, done + dey ; Decrement Y by 1 + dey ; Decrement Y by 1 + ldab 1,x+ ; Load data from X into B + jsr PrintHexByte ; Print the data + ldab 1,x+ ; Load data from X into B + jsr PrintHexByte ; Print the data + tfr y,a ; Transfer lower byte Y to A + anda #15 ; And A with 15, basically modulus 16 + bne MDLoop ; If A & 15 != 0, no newline + ldaa #CR ; Load CR into A + jsr putchar ; Print CR to serial console + ldaa #LF ; Load LF into A + jsr putchar ; Print LF to serial console + cpy #0 ; Compare Y to 0 + beq MDDone ; If Y == 0, done + pshx ; Save X to the stack + pshy ; Save Y to the stack + tfr x,d ; Copy X to D + ldx #buffer ; Load the address of the buffer into X + ldy lenBuf ; Load the length of the buffer into Y + jsr Zeros ; Fill the buffer with Zeros + ldy #buffer ; Load the address of the buffer into Y + jsr PrintHexWord ; Print the data + ldaa #' ' ; Load space character into A + jsr putchar ; Print space to console + puly ; Restore Y from the stack + pulx ; Restore X from the stack + bra MDLoop ; Loop +MDDone ldaa #CR ; Load CR into A + jsr putchar ; Print CR to serial console + ldaa #LF ; Load LF into A + jsr putchar ; Print LF to serial console + puld ; Restore D from the stack + puly ; Restore Y from the stack + pulx ; Restore X from the stack + rts ; Return + +;************************************************************************* +; LDCommand subroutine +; +; This subroutine is the LD command for the user. This subroutine will take in +; a memory address and a length of bytes, and will take bytes entered by the +; user and write them to memory. +; +; Input: A memory address in register X & a length of bytes in Y +; Bytes of data entered by the user on the serial console. +; Output: The data inputted into memory starting at the address in X. +; Registers in use: X for the address of the contents and for a buffer while printing, +; D for multiplication, B for the character, Y for output value. +; Memory locations in use: Memory Address for serial line, address of the string +; +; Comments: This subroutine Requires PrintHexWord, ReadHexByte, & PrintHexByte. +; This subroutine will stop reading once the inputted number of bytes +; is read. +; + +LDCommand + pshx ; Save X to the stack + pshy ; Save Y to the stack + pshd ; Save D to the stack + iny ; Add 1 to y for loop +LDLoop dbeq y,LDDone ; Decrement y, y == 0, done + jsr GetCharLoop ; Read Character from serial + cmpa #CR ; Compare to CR + bne NotCR ; If A != CR, not CR + jsr putchar ; Echo to serial + jsr GetCharLoop ; Read Character from serial +NotCR cmpa #LF ; Compare to LF + bne NotNewline ; If not LF, skip next read + jsr putchar ; Echo to serial + jsr GetCharLoop ; Read Character from serial + cmpa #CR ; Compare to CR + bne NotNewline ; If not CR, skip next read + jsr GetCharLoop ; Read Character from serial +NotNewline jsr putchar ; Echo to serial + jsr IsValidHex ; Check if valid hex + beq LDInvalid ; If Z == 1, invalid + tab ; Transfer A to B + jsr GetCharLoop ; Read Character from serial + cmpa #CR ; Compare to CR + bne NotCR2 ; If A != CR, not CR + jsr putchar ; Echo to serial + jsr GetCharLoop ; Read Character from serial +NotCR2 cmpa #LF ; Compare to LF + bne NotNewline2 ; If not LF, skip next read + jsr putchar ; Echo to serial + jsr GetCharLoop ; Read Character from serial + cmpa #CR ; Compare to CR + bne NotNewline2 ; If not CR, skip next read + jsr GetCharLoop ; Read Character from serial +NotNewline2 jsr putchar ; Echo to serial + jsr IsValidHex ; Check if valid hex + beq LDInvalid ; If Z == 1, invalid + exg a,b ; Swap A and B + jsr ReadHexByte ; Read ASCII Hex into data + staa 1,x+ ; Store byte into memory + bra LDLoop ; Loop +LDDone ldaa #CR ; Load CR into A + jsr putchar ; Print to serial + ldaa #LF ; Load LF into A + jsr putchar ; Print to serial + puld ; Restore D from the stack + puly ; Restore Y from the stack + pulx ; Restore X from the stack + rts ; Return +LDInvalid ldaa #CR ; Load CR into A + jsr putchar ; Print to serial + ldaa #LF ; Load LF into A + jsr putchar ; Print to serial + ldx #badData ; Load the address of bad data string + jsr WriteString ; Write string to serial + puld ; Restore D from the stack + puly ; Restore Y from the stack + pulx ; Restore X from the stack + rts ; Return + +;************************************************************************* +; GetCharLoop subroutine +; +; This subroutine will read a byte from input and will block until there is data +; to read. +; +; Input: A byte entered on the serial console. +; Output: That byte in register A. +; Registers in use: A for the byte inputted by the user. +; Memory locations in use: Memory Address for serial line +; +; Comments: This subroutine will block until the user inputs data. +; + +GetCharLoop + jsr getchar ; Read character from serial + beq GetCharLoop ; If 0, loop + rts ; Return + +;************************************************************************* +; IsValidHex subroutine +; +; This subroutine set the zero bit if the given character is not valid hex. +; +; Input: An ASCII character in register A. +; Output: Zero bit set if invalid hex. (Valid if '0' <= A <= '9' or 'A' <= A <= 'F') +; Registers in use: A for the given character, CCR for output. +; Memory locations in use: No memory locations used. +; +; Comments: This subroutine only validates upper case hex. +; + +IsValidHex + cmpa #'0' ; Compare A to '0' + blo InvalidHex ; A < '0', invalid + cmpa #'9' ; Compare A to '9' + bls ValidHex ; A <= '9', valid hex + cmpa #'A' ; Compare A to 'A' + blo InvalidHex ; A < 'A', invalid + cmpa #'F' ; Compare A to 'F' + bhi InvalidHex ; A > 'F', invalid +ValidHex andcc #%11111011 ; Clear Zero Bit + rts ; Return +InvalidHex orcc #%00000100 ; Set the Zero Bit + rts ; Return + +;************************************************************************* +; ReadDecimal subroutine +; +; This subroutine will read an ASCII string of a number in decimal and convert it to +; its value. +; +; Input: A memory address in register X. +; Output: The value of the number in the Y register, and any errors printed +; to the serial line. Zero bit is set if error occurs. +; Registers in use: X for the address of the contents and for a buffer while printing, +; D for multiplication, B for the character, Y for output value. +; Memory locations in use: Memory Address for serial line, address of the string +; +; Comments: This subroutine will return the value in the Y register, and if an error occurs, +; the Zero bit in the CCR will be set. +; + +ReadDecimal + pshd ; Save D to the stack + ldy #0 ; Clear Y register + clrb ; Clear B + stab charCount ; Clear charCount +dHLoop inc charCount ; Increment charCount by 1 + ldab charCount ; Load charCount into B + cmpb #6 ; Compare to B to 6 + bhi dHError ; B > 6, bad too many characters. + ldab 1,x+ ; Read Next character from X + beq dHDone ; If B == 0, exit loop + cmpb #' ' ; Compare B to space character + beq dHDone ; If B == ' ', exit loop + cmpb #'0' ; Compare B to '0' character + blt dHError ; If B < '0', bad address, exit loop + cmpb #'9' ; Compare B to '9' character + bhi dHError ; If B > '9', check if 'A'-'F' characters + subb #'0' ; Subtract '0' from B to get true value + pshb ; Save B to the stack + ldd #10 ; load 10 into D + emul ; Multiply Y and D + exg d,y ; Transfer data from D to Y + pulb ; Restore b from the stack + aby ; Add B to Y + bra dHLoop ; Branch always to rHLoop +dHDone clra ; clear A accumulator + tap ; Transfer A into CCR to clear zero bit + puld ; Restore D from the stack + rts ; Return to caller +dHError ldaa #4 ; Load 4 into A to set zero bit in CCR + tap ; Transfer A into CCR to set zero bit and warn error + puld ; Restore D from the stack + rts ; Return to caller + +;************************************************************************* +; PrintMem subroutine +; +; This subroutine will print the address and contents of the given memory location. +; +; Input: A memory address in register X. +; Output: The memory address in Hex and the contents in binary, hex, & decimal +; on the serial output. +; Registers in use: X for the address of the contents and for a buffer while printing, +; D for the contents of the location, Y for another buffer address while +; reversing strings and printing. +; Memory locations in use: Memory Address for serial line, address of the string +; +; Comments: This subroutine requires the serial console to be setup before calling. +; + +PrintMem + pshy ; Save Y to the Stack + pshd ; Save D to the Stack + exg x,d ; Copy Address from X to D to print + ldy #buffer ; Load the address of buffer into Y + jsr PrintHexWord ; Print the Address in Hex + exg d,x ; Copy Address from D to X + ldaa #'=' ; Load the '=' character into A + jsr putchar ; Print the character to the serial + ldaa #'>' ; Load the '>' character into A + jsr putchar ; Print the character to the serial + ldd x ; Load data from address in X into D + ldx #buffer ; Load the address of the buffer into X + ldy lenBuf ; Load the length of the buffer into Y + jsr Zeros ; Fill the buffer with Zeros + jsr PrintBinaryWord ; Print the binary word to the serial + psha ; Save A to the stack + ldaa #' ' ; Load Space character into A + jsr putchar ; Print Space character to the serial + jsr putchar ; Print Space character to the serial + pula ; Restore A from the stack + ldy #buffer ; Load the address of the buffer into Y + jsr PrintHexWord ; Prin the hex representation of the word to serial + psha ; Save A to the stack + ldaa #' ' ; Load Space character into A + jsr putchar ; Print Space character to the serial + jsr putchar ; Print Space character to the serial + pula ; Restore A from the stack + ldx #buffer ; Load the address of the buffer into X + ldy lenBuf ; Load the length of the buffer into Y + jsr Zeros ; Fill the buffer with Zeros + ldy #buffer ; Load the address of the buffer into Y + jsr PrintDecimalWord; Prin the decimal representation of the word to serial + ldaa #CR ; Load the carriage return character into A + jsr putchar ; Print the character to serial + ldaa #LF ; Load the line feed character into A + jsr putchar ; Print the character to serial + puld ; Restore D from the stack + puly ; Restore Y from the stack + rts ; Return to caller + +;************************************************************************* +; strrev subroutine +; +; This subroutine will reverse a string from one buffer into another. +; +; Input: Address of null terminated string in X, address of a large enough +; buffer in Y. +; Output: The string in X reversed in Y. +; Registers in use: X for the address of the string, Y for the address of the buffer, +; A to read characters from the string. +; Memory locations in use: Memory Address for serial line, address of the string & buffer +; +; Comments: This subroutine will not check that the output buffer is large enough, that +; is the job of the caller. +; + +strrev + pshx ; Save X to the stack + pshy ; Save Y to the stack + psha ; Save A to the stack +revLoop ldaa 1,y- ; Load Character from Y into A, decrement Y + beq revDone ; If Character is 0, exit loop + staa 1,x+ ; Save character in address in X, increment X + bra revLoop ; Loop back always + clra ; Set A to Zero +revDone staa 1,x+ ; Copy Null terminator into new string + pula ; Restore A from the stack + puly ; Restore Y from the stack + pulx ; Restore X from the stack + rts ; Return to caller + +;************************************************************************* +; PrintBinaryWord subroutine +; +; This subroutine will print a given word of data to the serial in binary. +; +; Input: 1 word of data in register D +; Output: Binary representation of the data on the serial console +; Registers in use: X to count the number of bits written, D for the input, A for characters, +; B for the byte being written. +; Memory locations in use: Memory addresses for serial. +; +; Comments: This subroutine requires serial to be setup and putchar subroutine. +; + +PrintBinaryWord + pshx ; Save X to the stack + pshd ; Save D (A:B) to the stack + pshb ; Save B to the stack (we want these bits again later) + tab ; Transfer A to B to get upper byte + ldaa #'%' ; Load '%' into A + jsr putchar ; Print '%' to serial to denote binary number + ldx #16 ; Load 16 into X, since we're printing 16 bits +bPrintLoop rolb ; Rotate MSB of B into C of CCR + tpa ; Copy CCR into A + anda #1 ; and A with 1 to get only LSB + adda #'0' ; Add '0' to A to get ASCII Character + jsr putchar ; Print Character A to serial + dbeq X,bPrintDone ; Decrement X and if X == 0, branch to done + cpx #8 ; Compare X to 8 to check if done with upper byte + bne bPrintLoop ; If X != 8, loop to bPrintLoop + pulb ; Restore B from stack to get lower byte + bra bPrintLoop ; Branch back into loop to print lower byte +bPrintDone puld ; Restore D (A:B) from the stack + pulx ; Restore X from the stack + rts ; Return to caller + +;************************************************************************* +; PrintHexByte subroutine +; +; This subroutine will print a given byte to serial in Hex format. +; +; Input: 1 byte of data in B +; Output: Hex representation in ASCII on serial console +; Registers in use: X for division, A and B for characters. +; Memory locations in use: Memory addresses for serial. +; +; Comments: This subroutine requires serial to be setup and putchar subroutine. +; + +PrintHexByte + pshd ; Save D to the stack + pshy ; Save Y to the stack + pshx ; Save X to the stack + clra ; Clear A + ldx #16 ; Load 16 into X + idiv ; D / 16 => X & D + tfr x,a ; Transfer lower byte of X to A + cmpa #10 ; Compare A to 10 + bhs IsAlpha ; If A >= 10, IsAlpha + adda #'0' ; Add '0' to A to make character + bra PrintChar ; Print jump to print the character +IsAlpha adda #'A' ; Add 'A' to A to make character + suba #$A ; Subtract 10 from A +PrintChar jsr putchar ; Print character to serial + tba ; Transfer B to A + cmpa #10 ; Compare A to 10 + bhs IsAlpha2 ; If A >= 10, IsAlpha2 + adda #'0' ; Add '0' to A to make character + bra PrintDone ; Print jump to print the character +IsAlpha2 adda #'A' ; Add 'A' to A to make character + suba #$A ; Subtract 10 from A +PrintDone jsr putchar ; Print character to serial + ldaa #' ' ; Load space into A + jsr putchar ; Print character to serial + pulx ; Restore X from the stack + puly ; Restore Y from the stack + puld ; Restore D from the stack + rts ; Return + +;************************************************************************* +; ReadHexByte subroutine +; +; This subroutine will read a hex byte from serial console into A. +; +; Input: 2 ASCII characters of Hex format on serial console. +; Output: The data in register A. +; Registers in use: A for characters and B for multiplication. +; Memory locations in use: Memory addresses for serial. +; +; Comments: This subroutine requires serial to be setup and putchar subroutine. +; + +ReadHexByte + cmpa #'A' ; Compare A to 'A' + blo RHBNotHex ; If A < 'A', decimal number + suba #7 ; 'A' - '0' = 17, 'A' - '0' - 7 = 10 = $A +RHBNotHex suba #'0' ; Remove offset + pshb ; Save B to the stack + ldab #16 ; 16 to shift digit to left + mul ; A * 16, left shift digit + tba ; Store result in A + pulb ; Restore B from stack + cmpb #'A' ; Compare B to 'A' + blo RHBNotHexB ; If B < 'A', decimal number + subb #7 ; 'A' - '0' = 17, 'A' - '0' - 7 = 10 = $A +RHBNotHexB subb #'0' ; Remove offset + aba ; Add A to B + rts ; Return + +;************************************************************************* +; PrintHexWord subroutine +; +; This subroutine will print a given word of data to the serial in binary. +; +; Input: 1 word of data in register D, Buffer Address in Y +; Output: Hexadecimal representation of the data on the serial console +; Registers in use: Y for the address of the buffer, X to count the number of bits +; written and for division, D for the input, A for characters. +; Memory locations in use: Memory addresses for serial. +; +; Comments: This subroutine requires serial to be setup and putchar subroutine. +; + +PrintHexWord + pshx ; Save X to the stack + pshd ; Save D (A:B) to the stack + pshy ; Save Y to the stack + cpd #0 ; Compare D to zero + beq hIsZero ; Branch to hIsZero + psha ; Save A to the stack + pshy ; Save Y to the stack + pshx ; Save x to the stack + ldaa #'0' ; Load the '0' character into A + ldx #buffer2 ; Load the address of buffer2 into X + ldy #5 ; Load 5 into Y + jsr memset ; Write '0' to the first 5 bytes in buffer2 + pulx ; Restore X from the stack + puly ; Restore Y from the stack + clra ; Set A to zero + staa 0,y ; Load Zero into Y for Null Terminator + pula ; Restore A from the stack +hPrintLoop ldx #16 ; Load 16 in X for division + idiv ; Divide D / 16 to get Hex Digit + cpx #0 ; Compare X to 0 + beq hCheck ; If X == 0, branch to check D is zero +hDNotZero cmpb #$0A ; Compare A to $0A + blt hex10 ; If B < $A, branch to hex10 + addb #'A' ; Add 'A' to B to get ASCII Character + subb #$0A ; Subtract $A to adjust characters + stab 1,+y ; Save character from B to Y + exg X,D ; Swap values in X and D + bra hPrintLoop ; loop to hPrintLoop +hex10 addb #'0' ; Add '0' to B to get ASCII Character + stab 1,+y ; Save character from B to Y + exg X,D ; Swap values in X and D + bra hPrintLoop ; Loop to hPrintLoop +hCheck cpd #0 ; Compare D to 0 + bne hDNotZero ; If D != 0, branch back to hDNotZero +hPrintDone ldaa #'$' ; Load '$' into + staa 1,+y ; Save '$' into buffer in Y to denote Hex + ldx #buffer2 ; Load the address of buffer2 in X + jsr strrev ; Reverse string in Y in buffer in X + jsr WriteString ; Jump to write string to write the number + ldy lenBuf2 ; Load the length of buffer2 into Y + ldx #buffer2 ; Load the address of buffer2 into X + jsr Zeros ; Fill buffer2 with zeros + puly ; Restore Y from the stack + puld ; Restore D (A:B) from the stack + pulx ; Restore X from the stack + rts ; Return to caller +hIsZero ldaa #'$' ; Load '$' character into A + jsr putchar ; Print character to the screen + ldaa #'0' ; Load '0' character into A + jsr putchar ; Print character to the screen + jsr putchar ; Print character to the screen + jsr putchar ; Print character to the screen + jsr putchar ; Print character to the screen + puly ; Restore Y from the stack + puld ; Restore D (A:B) from the stack + pulx ; Restore X from the stack + rts ; Return to caller + +;************************************************************************* +; PrintDecimalWord subroutine +; +; This subroutine will print a given word of data to the serial in binary. +; +; Input: 1 word of data in register D, Buffer Address in Y +; Output: Decimal representation of the data on the serial console +; Registers in use: Y for the address of the buffer, X to count the number of bits +; written and for division, D for the input, A for characters. +; Memory locations in use: Memory addresses for serial. +; +; Comments: This subroutine requires serial to be setup and putchar subroutine. +; + +PrintDecimalWord + pshx ; Save X to the stack + pshd ; Save D (A:B) to the stack + pshy ; Save Y to the stack + cpd #0 ; Compare D to zero + beq dIsZero ; Branch to hIsZero + psha ; Save A to the stack + pshy ; Save Y to the stack + pshx ; Save x to the stack + ldaa #'0' ; Load the '0' character into A + ldx #buffer2 ; Load the address of buffer2 into X + ldy #5 ; Load 5 into Y + jsr memset ; Write '0' to the first 5 bytes in buffer2 + pulx ; Restore X from the stack + puly ; Restore Y from the stack + clra ; Set A to zero + staa 0,y ; Load Zero into Y for Null Terminator + pula ; Restore A from the stack +dPrintLoop ldx #10 ; Load 10 in X for division + idiv ; Divide D / 10 to get Hex Digit + cpx #0 ; Compare X to 0 + beq dCheck ; If X == 0, branch to check D is zero +dDNotZero addb #'0' ; Add '0' to B to get ASCII Character + stab 1,+y ; Save character from B to Y + exg X,D ; Swap values in X and D + bra dPrintLoop ; Loop to hPrintLoop +dCheck cpd #0 ; Compare D to 0 + bne dDNotZero ; If D != 0, branch back to hDNotZero +dPrintDone ldx #buffer2 ; Load the address of buffer2 in X + jsr strrev ; Reverse string in Y in buffer in X + jsr WriteString ; Jump to write string to write the number + ldy lenBuf2 ; Load the length of buffer2 into Y + ldx #buffer2 ; Load the address of buffer2 into X + jsr Zeros ; Fill buffer2 with zeros + puly ; Restore Y from the stack + puld ; Restore D (A:B) from the stack + pulx ; Restore X from the stack + rts ; Return to caller +dIsZero ldaa #'0' ; Load '0' character into A + jsr putchar ; Print character to the screen + puly ; Restore Y from the stack + puld ; Restore D (A:B) from the stack + pulx ; Restore X from the stack + rts ; Return to caller + +;************************************************************************* +; Zeros subroutine +; +; This subroutine will write zeros to every byte in a given array. +; +; Input: Address of an array in X and its length in Y +; Output: Zeros in every byte of an array. +; Registers in use: X for the address of the array, Y for the length, and A for 0 +; Memory locations in use: Memory Address of the array +; +; Comments: This subroutine requires serial to be setup and putchar subroutine. +; + +Zeros + psha ; Save A to the Stack + clra ; Clear A +zerosLoop staa 1,x+ ; Load A into byte at X + dbne y,zerosLoop ; Decrement Y and loop if Y != 0 + pula ; Restore A from the stack + rts ; Return to caller + +;************************************************************************* +; memset subroutine +; +; This subroutine will write a given byte to every byte in a given array. +; +; Input: Address of an array in X and its length in Y, the byte in A +; Output: The given byte in every byte of an array. +; Registers in use: X for the address of the array, Y for the length, and A for the given byte +; Memory locations in use: Memory Address of the array +; +; Comments: This subroutine requires serial to be setup and putchar subroutine. +; + +memset + staa 1,x+ ; Load A into byte at X + dbne y,memset ; Decrement Y and loop if Y != 0 + rts ; Return to caller + +;************************************************************************* +; WriteString subroutine +; +; This subroutine will write a given null terminated string to the serial. +; +; Input: Address of null terminated string in X +; Output: Null terminated string written to serial +; Registers in use: X for the address of the string and A for the current byte +; Memory locations in use: Memory Address for serial line, address of the string +; +; Comments: This subroutine requires serial to be setup and putchar subroutine. +; + +WriteString + psha ; Save A to the stack +writeLoop ldaa 1,x+ ; Load the byte at addr in X, then add 1 + beq doneWrite ; if A == 0, branch to doneWrite + jsr putchar ; Jump to putchar to write byte to serial + bra writeLoop ; branch always to writeLoop +doneWrite pula ; restore A from the stack + rts ; return to caller + +;************************************************************************* +; ReadString subroutine +; +; This subroutine will read a string from the serial line to a given address. +; +; Input: Address of an array in X +; Output: Null terminated string in the given array +; Registers in use: X for the address of the string Y for the length of the string, +; and A for the current byte +; Memory locations in use: Memory Address for serial line, address of the string +; +; Comments: This subroutine requires serial to be setup and getchar subroutine. +; + +ReadString + psha ; Save accumulator A to the stack + pshy ; Save Y to the stack + pshx ; Save X to the stack +readLoop jsr getchar ; Jump to putchar to write byte to serial + beq readLoop ; While A == 0, loop + cmpa #CR ; If A == CR, exit loop + beq doneRead ; Branch to doneRead if A == CR + cmpa #LF ; If A == LF, exit loop + beq doneRead ; Branch to doneRead if A == CR + staa 1,x+ ; Save the byte to the addr in X, then add 1 + jsr putchar ; Write Character back to the terminal + dey ; Decrement Y by 1 + beq doneRead ; If Y == 0, no more room, stop reading + bra readLoop ; branch always to readLoop +doneRead ldaa #LF ; Load Line Feed into A + jsr putchar ; Write LF to terminal + pulx ; Restore X from the stack + pulY ; Restore Y from the stack + pula ; restore A from the stack + rts ; return to caller + +;************************************************************************* +; putchar subroutine +; +; This subroutine writes a single byte to a serial line +; +; Input: A single ASCII byte in accumulator A +; Output: Sends one character to SCI port +; Registers in use: Accumulator A with input byte +; Memory locations in use: SCISR1 and SCIDRL status and data registers +; + +putchar brclr SCISR1,#%10000000,putchar ; wait for transmit buffer empty + staa SCIDRL ; send a character + rts ; Return to caller + +;************************************************************************* +; putchar subroutine +; +; This subroutine reads one byte from the SCI port +; +; Input: One byte from the SCI port +; Output: One byte in accumulator A +; Registers in use: Accumulator A for output byte +; Memory locations in use: SCISR1 and SCIDRL status and data registers +; + +getchar brclr SCISR1,#%00100000,getchar7 ; If no input on SCI port, return 0 + ldaa SCIDRL ; Read one byte from SCI port into A + rts ; Return to caller +getchar7 clra ; Set A to 0 + rts ; Return to caller + +* +************************************************************************** +* Data Section 2: address used [ $3100 to $3FFF ] RAM Memory +* + +badAddr dc.b 'invalid input, address',CR,LF,NULL ; Error message for bad address + +badData dc.b 'invalid input, data',CR,LF,NULL ; Error message for bad data + +badCom dc.b 'invalid input, command',CR,LF,NULL ; Error message for bad command + +; twMsg: welcome message when type writer loads +twMsg dc.b 'Welcome to Type Writer, you may type below.',CR,LF + dc.b 'Restart to enter main menu again.',CR,LF,NULL + + +; msg: this is the main option menu string +msg dc.b 'S: Show the contents of memory location in word',CR,LF + dc.b 'W: Write the data word (not byte) to memory location',CR,LF + dc.b 'MD: Display the contents of continuous memory locations',CR,LF + dc.b 'LD: Load a block of data to continuous memory locations',CR,LF + dc.b 'GO: Run the program at the specified memory location',CR,LF + dc.b 'QUIT: Quit the main program, run Type writer program.',CR,LF,NULL + + end ; last line of the file |
