From 82d0294aff2cb3efe03ab3bbbd0af95cb849326f Mon Sep 17 00:00:00 2001 From: Ben Date: Sun, 2 Dec 2018 21:16:42 +0000 Subject: [PATCH 1/7] Day 2 challenges done --- AdventOfCode2018/2ndDay/challenge1/a.exe | Bin 56582 -> 0 bytes AdventOfCode2018/2ndDay/challenge1/a.out | Bin 0 -> 19064 bytes AdventOfCode2018/2ndDay/challenge1/input.txt | 257 +++++++++++++++++- AdventOfCode2018/2ndDay/challenge1/main.cpp | 57 ++-- AdventOfCode2018/2ndDay/challenge2/a.out | Bin 0 -> 35952 bytes .../2ndDay/challenge2/challenge.txt | 15 + AdventOfCode2018/2ndDay/challenge2/input.txt | 250 +++++++++++++++++ AdventOfCode2018/2ndDay/challenge2/main.cpp | 50 ++++ 8 files changed, 594 insertions(+), 35 deletions(-) delete mode 100644 AdventOfCode2018/2ndDay/challenge1/a.exe create mode 100755 AdventOfCode2018/2ndDay/challenge1/a.out create mode 100755 AdventOfCode2018/2ndDay/challenge2/a.out create mode 100644 AdventOfCode2018/2ndDay/challenge2/challenge.txt create mode 100644 AdventOfCode2018/2ndDay/challenge2/input.txt create mode 100644 AdventOfCode2018/2ndDay/challenge2/main.cpp diff --git a/AdventOfCode2018/2ndDay/challenge1/a.exe b/AdventOfCode2018/2ndDay/challenge1/a.exe deleted file mode 100644 index c4df43f12fd131b832d209628d3ceaff1cbc1343..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56582 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 diff --git a/AdventOfCode2018/2ndDay/challenge1/a.out b/AdventOfCode2018/2ndDay/challenge1/a.out new file mode 100755 index 0000000000000000000000000000000000000000..f070164d8c2eb05f9e6a3cb0bde4910042e4ed41 GIT binary patch literal 19064 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 #include #include -#include -#include -// std::vector parseFile(std::string fileName) { -// std::cout << "test1" << fileName << std::endl; +bool isRepeat(std::string line, int repeats) { + for (char c = 'a'; c <= 'z'; ++c) { + int count = 0; + for (size_t i = 0; i < line.size(); ++i) { + if (line[i] == c) + ++count; + } + if (count == repeats) + return true; + } + return false; +} -// std::vector output; -// std::cout << "test2" << fileName << std::endl; - -// std::fstream stream(fileName); -// std::cout << "Reading: " << fileName << " into array" << std::endl; - -// for (std::string line; std::getline(stream, line); ) -// output.push_back(line); -// return output; -// } +int checkSum(std::string fileName) { + std::fstream input(fileName); + std::string line; + int doubles = 0; + int triples = 0; + + while (!input.eof()) { + std::getline(input, line); + if (isRepeat(line, 2)) + ++doubles; + if (isRepeat(line, 3)) + ++triples; + } + return doubles * triples; +} int main(int argc, char** argv) { - try { - std::cout << "WTF WHY ISNT THIS OUTPUTTING" << std::endl; - - std::vector lines; // = parseFile("input.txt");// *(argv + 1)); - std::fstream stream("input.txt"); - - // std::string line; - // for (std::string line; std::getline(stream, line); ) {} - // lines.push_back(line); - // for (unsigned int i = 0; i < lines.size(); i++) - // std::cout << lines[i] << std::endl; - } catch (const std::string &e) { - std::cout << e << std::endl; - } + std::cout << "Found: " << checkSum("input.txt") << std::endl; } diff --git a/AdventOfCode2018/2ndDay/challenge2/a.out b/AdventOfCode2018/2ndDay/challenge2/a.out new file mode 100755 index 0000000000000000000000000000000000000000..78b30fc40c4b0f9aeaa707673f6f2e772311928f GIT binary patch literal 35952 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 +#include +#include +#include + +std::string equalLetters(std::string fileName) { + std::fstream input(fileName); + std::string line; + std::string a; + std::string b; + std::string answer; + std::vector lines; + + while (!input.eof()) { + std::getline(input, line); + lines.push_back(line); + } + + for (size_t i = 0; i < lines.size(); ++i) { + int count = 0; + a = lines[i]; + + for (size_t j = i + 1; j < lines.size(); ++j) { + b = lines[j]; + count = 0; + + for (size_t k = 0; k < a.size(); ++k) { + if (a[k] != b[k]) + ++count; + if (count > 1) + break; + } + if (count == 1) + break; + } + if (count == 1) + break; + } + + for (size_t i = 0; i < a.size(); ++i) { + if (a[i] == b[i]) + answer += a[i]; + } + + return answer; +} + +int main(int argc, char** argv) { + std::cout << "Found: " << equalLetters("input.txt") << std::endl; +} From 947bb1bd98498b3e031c416f27cfe8f334887238 Mon Sep 17 00:00:00 2001 From: Ben Date: Mon, 3 Dec 2018 19:20:21 +0000 Subject: [PATCH 2/7] day 3 --- AdventOfCode2018/3rdDay/challenge1/Program.cs | 107 ++ .../3rdDay/challenge1/challenge.txt | 40 + .../3rdDay/challenge1/challenge1.csproj | 8 + AdventOfCode2018/3rdDay/challenge1/input.txt | 1283 +++++++++++++++++ AdventOfCode2018/3rdDay/challenge2/Program.cs | 115 ++ .../3rdDay/challenge2/challenge.txt | 11 + .../3rdDay/challenge2/challenge2.csproj | 8 + AdventOfCode2018/3rdDay/challenge2/input.txt | 1283 +++++++++++++++++ 8 files changed, 2855 insertions(+) create mode 100644 AdventOfCode2018/3rdDay/challenge1/Program.cs create mode 100644 AdventOfCode2018/3rdDay/challenge1/challenge.txt create mode 100644 AdventOfCode2018/3rdDay/challenge1/challenge1.csproj create mode 100644 AdventOfCode2018/3rdDay/challenge1/input.txt create mode 100644 AdventOfCode2018/3rdDay/challenge2/Program.cs create mode 100644 AdventOfCode2018/3rdDay/challenge2/challenge.txt create mode 100644 AdventOfCode2018/3rdDay/challenge2/challenge2.csproj create mode 100644 AdventOfCode2018/3rdDay/challenge2/input.txt diff --git a/AdventOfCode2018/3rdDay/challenge1/Program.cs b/AdventOfCode2018/3rdDay/challenge1/Program.cs new file mode 100644 index 0000000..ec907d4 --- /dev/null +++ b/AdventOfCode2018/3rdDay/challenge1/Program.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; + +namespace challenge1 { + class Program { + static string[] Lines {get; set;} + static List Claims {get; set;} + + static void Main(string[] args) { + Claims = new List(); + Console.WriteLine("Reading input.txt"); + Lines = File.ReadAllLines("./input.txt"); + foreach (string line in Lines) { + Claim current = new Claim(line); + Claims.Add(current); + current.Print(); + } + Fabric fabric = new Fabric(Claims); + Console.WriteLine("Found: " + fabric.CalculateOverlaps() + " overlaps"); + } + + public static void printArray(string[] arr) { + foreach (string str in arr) { + Console.WriteLine(str); + } + } + } + + class Claim { + public int ID {get; set;} + public int X {get; set;} + public int Y {get; set;} + public int W {get; set;} + public int H {get; set;} + public string Source {get; set;} + + public Claim(string source) { + this.Source = source; + ParseSource(); + } + + private void ParseSource() { + Console.WriteLine("Parsing: " + this.Source); + string[] source = this.Source.Split('#'); + string[] idAndRest = source[1].Split('@'); + this.ID = int.Parse(idAndRest[0]); + string[] fromSides = idAndRest[1].Split(','); + string[] afterColon = fromSides[1].Split(':'); + this.X = int.Parse(fromSides[0]); + this.Y = int.Parse(afterColon[0]); + string[] dimensions = afterColon[1].Split('x'); + this.W = int.Parse(dimensions[0]); + this.H = int.Parse(dimensions[1]); + } + + public void Print() { + Console.WriteLine("Claim ID: " + this.ID); + Console.WriteLine("X, Y: " + this.X + ',' + this.Y); + Console.WriteLine("Dimensions: " + this.W + 'x' + this.H); + Console.WriteLine("Parsed from source: " + this.Source); + Console.WriteLine(); + } + } + + class Fabric { + public List Claims; + + private int[,] Board; + + public Fabric(List claims) { + this.Claims = claims; + this.Board = new int[10000, 10000]; + + for (int i = 0; i < 10000; i++) { + for (int j = 0; j < 10000; j++) { + Board[i, j] = 0; + } + } + } + + public int CalculateOverlaps() { + int overlaps = 0; + + int i = 0; + foreach (Claim claim in this.Claims) { + Console.WriteLine("Processing claim ID: " + claim.ID); + + for (int x = claim.X; x < claim.X + claim.W; x++) { + for (int y = claim.Y; y < claim.Y + claim.H; y++) { + Board[x, y]++; + } + } + i++; + } + + for (i = 0; i < 10000; i++) { + for (int j = 0; j < 10000; j++) { + if (Board[i,j] > 1) overlaps++; + } + } + + return overlaps; + } + } +} diff --git a/AdventOfCode2018/3rdDay/challenge1/challenge.txt b/AdventOfCode2018/3rdDay/challenge1/challenge.txt new file mode 100644 index 0000000..c24e866 --- /dev/null +++ b/AdventOfCode2018/3rdDay/challenge1/challenge.txt @@ -0,0 +1,40 @@ +--- Day 3: No Matter How You Slice It --- +The Elves managed to locate the chimney-squeeze prototype fabric for Santa's suit (thanks to someone who helpfully wrote its box IDs on the wall of the warehouse in the middle of the night). Unfortunately, anomalies are still affecting them - nobody can even agree on how to cut the fabric. + +The whole piece of fabric they're working on is a very large square - at least 1000 inches on each side. + +Each Elf has made a claim about which area of fabric would be ideal for Santa's suit. All claims have an ID and consist of a single rectangle with edges parallel to the edges of the fabric. Each claim's rectangle is defined as follows: + +The number of inches between the left edge of the fabric and the left edge of the rectangle. +The number of inches between the top edge of the fabric and the top edge of the rectangle. +The width of the rectangle in inches. +The height of the rectangle in inches. +A claim like #123 @ 3,2: 5x4 means that claim ID 123 specifies a rectangle 3 inches from the left edge, 2 inches from the top edge, 5 inches wide, and 4 inches tall. Visually, it claims the square inches of fabric represented by # (and ignores the square inches of fabric represented by .) in the diagram below: + +........... +........... +...#####... +...#####... +...#####... +...#####... +........... +........... +........... +The problem is that many of the claims overlap, causing two or more claims to cover part of the same areas. For example, consider the following claims: + +#1 @ 1,3: 4x4 +#2 @ 3,1: 4x4 +#3 @ 5,5: 2x2 +Visually, these claim the following areas: + +........ +...2222. +...2222. +.11XX22. +.11XX22. +.111133. +.111133. +........ +The four square inches marked with X are claimed by both 1 and 2. (Claim 3, while adjacent to the others, does not overlap either of them.) + +If the Elves all proceed with their own plans, none of them will have enough fabric. How many square inches of fabric are within two or more claims? \ No newline at end of file diff --git a/AdventOfCode2018/3rdDay/challenge1/challenge1.csproj b/AdventOfCode2018/3rdDay/challenge1/challenge1.csproj new file mode 100644 index 0000000..23df604 --- /dev/null +++ b/AdventOfCode2018/3rdDay/challenge1/challenge1.csproj @@ -0,0 +1,8 @@ + + + + Exe + netcoreapp2.1 + + + diff --git a/AdventOfCode2018/3rdDay/challenge1/input.txt b/AdventOfCode2018/3rdDay/challenge1/input.txt new file mode 100644 index 0000000..0a0580f --- /dev/null +++ b/AdventOfCode2018/3rdDay/challenge1/input.txt @@ -0,0 +1,1283 @@ +#1 @ 179,662: 16x27 +#2 @ 609,961: 25x21 +#3 @ 73,376: 23x28 +#4 @ 599,405: 26x25 +#5 @ 28,933: 19x29 +#6 @ 441,852: 29x23 +#7 @ 512,396: 15x17 +#8 @ 702,415: 14x10 +#9 @ 730,587: 27x21 +#10 @ 252,715: 17x27 +#11 @ 541,822: 21x13 +#12 @ 901,802: 12x24 +#13 @ 759,349: 15x26 +#14 @ 862,839: 22x25 +#15 @ 862,576: 17x16 +#16 @ 265,967: 11x25 +#17 @ 124,444: 23x25 +#18 @ 971,141: 25x15 +#19 @ 864,246: 22x27 +#20 @ 841,34: 17x15 +#21 @ 173,462: 19x22 +#22 @ 122,22: 27x20 +#23 @ 327,178: 12x19 +#24 @ 576,663: 21x10 +#25 @ 410,958: 11x12 +#26 @ 676,145: 14x10 +#27 @ 177,676: 10x22 +#28 @ 663,60: 23x15 +#29 @ 686,352: 24x19 +#30 @ 68,618: 18x12 +#31 @ 20,643: 19x18 +#32 @ 683,128: 19x22 +#33 @ 88,45: 28x25 +#34 @ 442,736: 20x29 +#35 @ 824,825: 13x13 +#36 @ 668,253: 25x27 +#37 @ 254,404: 27x25 +#38 @ 712,260: 26x17 +#39 @ 588,470: 21x20 +#40 @ 114,148: 11x26 +#41 @ 242,409: 17x26 +#42 @ 342,481: 24x21 +#43 @ 104,187: 27x12 +#44 @ 440,919: 13x22 +#45 @ 177,312: 22x15 +#46 @ 249,925: 29x15 +#47 @ 376,750: 19x20 +#48 @ 157,760: 21x21 +#49 @ 760,833: 28x15 +#50 @ 955,909: 26x12 +#51 @ 941,896: 17x25 +#52 @ 154,33: 29x20 +#53 @ 236,275: 27x29 +#54 @ 848,800: 11x18 +#55 @ 950,130: 28x24 +#56 @ 351,564: 21x11 +#57 @ 32,70: 17x11 +#58 @ 215,219: 22x18 +#59 @ 816,714: 15x21 +#60 @ 738,879: 16x27 +#61 @ 218,896: 26x27 +#62 @ 953,363: 16x19 +#63 @ 836,508: 28x13 +#64 @ 839,14: 12x21 +#65 @ 831,683: 24x15 +#66 @ 809,698: 12x26 +#67 @ 887,296: 23x11 +#68 @ 770,771: 29x21 +#69 @ 383,762: 14x25 +#70 @ 542,962: 28x14 +#71 @ 236,286: 18x10 +#72 @ 517,363: 12x18 +#73 @ 171,753: 16x17 +#74 @ 272,910: 18x20 +#75 @ 658,202: 25x14 +#76 @ 534,906: 18x25 +#77 @ 468,342: 27x12 +#78 @ 426,350: 28x26 +#79 @ 277,968: 12x20 +#80 @ 390,877: 10x27 +#81 @ 859,603: 26x12 +#82 @ 491,937: 13x16 +#83 @ 19,883: 20x15 +#84 @ 47,400: 27x15 +#85 @ 627,191: 14x26 +#86 @ 164,326: 17x28 +#87 @ 768,216: 20x24 +#88 @ 947,765: 15x19 +#89 @ 917,142: 11x20 +#90 @ 351,87: 24x29 +#91 @ 872,451: 29x10 +#92 @ 749,900: 20x26 +#93 @ 935,30: 25x12 +#94 @ 221,943: 15x10 +#95 @ 344,602: 12x24 +#96 @ 677,578: 16x26 +#97 @ 452,606: 21x10 +#98 @ 2,722: 19x22 +#99 @ 310,605: 17x29 +#100 @ 262,390: 26x23 +#101 @ 640,499: 19x13 +#102 @ 852,924: 26x16 +#103 @ 309,81: 20x16 +#104 @ 108,918: 18x11 +#105 @ 249,160: 9x17 +#106 @ 26,62: 26x25 +#107 @ 407,587: 14x24 +#108 @ 956,98: 18x27 +#109 @ 944,459: 16x26 +#110 @ 209,699: 28x25 +#111 @ 710,856: 12x22 +#112 @ 744,288: 27x25 +#113 @ 489,344: 20x21 +#114 @ 438,488: 12x16 +#115 @ 884,95: 15x22 +#116 @ 60,617: 24x24 +#117 @ 957,191: 10x11 +#118 @ 315,527: 22x23 +#119 @ 199,117: 18x26 +#120 @ 255,642: 10x15 +#121 @ 957,962: 11x14 +#122 @ 193,131: 10x13 +#123 @ 2,931: 21x11 +#124 @ 36,961: 27x23 +#125 @ 863,38: 29x14 +#126 @ 31,731: 13x15 +#127 @ 357,741: 28x15 +#128 @ 209,354: 27x23 +#129 @ 524,8: 22x20 +#130 @ 302,247: 15x12 +#131 @ 76,857: 10x16 +#132 @ 531,502: 24x10 +#133 @ 559,962: 17x15 +#134 @ 233,710: 29x15 +#135 @ 762,70: 15x24 +#136 @ 934,186: 25x20 +#137 @ 808,252: 29x29 +#138 @ 550,694: 22x19 +#139 @ 265,368: 23x25 +#140 @ 640,637: 11x14 +#141 @ 736,484: 15x10 +#142 @ 946,571: 27x17 +#143 @ 332,174: 20x20 +#144 @ 797,775: 11x23 +#145 @ 684,63: 22x13 +#146 @ 932,36: 20x12 +#147 @ 375,882: 19x17 +#148 @ 656,227: 12x20 +#149 @ 455,223: 12x15 +#150 @ 732,619: 20x20 +#151 @ 292,615: 19x29 +#152 @ 615,0: 15x28 +#153 @ 463,174: 16x15 +#154 @ 322,456: 27x15 +#155 @ 352,224: 10x15 +#156 @ 966,673: 29x21 +#157 @ 527,42: 23x27 +#158 @ 632,775: 15x15 +#159 @ 871,805: 22x15 +#160 @ 667,240: 15x27 +#161 @ 607,880: 25x25 +#162 @ 447,44: 10x21 +#163 @ 445,126: 17x15 +#164 @ 844,933: 11x29 +#165 @ 471,423: 24x27 +#166 @ 715,867: 16x16 +#167 @ 778,279: 10x18 +#168 @ 490,630: 23x16 +#169 @ 687,301: 28x13 +#170 @ 476,432: 11x18 +#171 @ 123,794: 23x26 +#172 @ 738,256: 22x25 +#173 @ 336,60: 26x28 +#174 @ 698,766: 4x10 +#175 @ 511,10: 13x10 +#176 @ 580,702: 18x20 +#177 @ 218,620: 13x22 +#178 @ 476,488: 13x25 +#179 @ 154,617: 14x29 +#180 @ 620,563: 11x6 +#181 @ 168,433: 28x10 +#182 @ 60,685: 10x24 +#183 @ 880,680: 18x18 +#184 @ 859,616: 17x25 +#185 @ 114,80: 26x19 +#186 @ 236,868: 25x10 +#187 @ 135,13: 26x29 +#188 @ 810,677: 22x10 +#189 @ 938,932: 16x14 +#190 @ 427,434: 14x11 +#191 @ 83,731: 29x23 +#192 @ 960,148: 25x16 +#193 @ 577,669: 24x16 +#194 @ 67,267: 18x29 +#195 @ 603,928: 15x26 +#196 @ 881,39: 29x11 +#197 @ 963,957: 19x23 +#198 @ 891,868: 12x13 +#199 @ 799,34: 14x12 +#200 @ 529,785: 24x27 +#201 @ 596,936: 12x21 +#202 @ 832,289: 13x10 +#203 @ 664,232: 17x22 +#204 @ 171,345: 24x26 +#205 @ 283,521: 28x22 +#206 @ 702,469: 14x10 +#207 @ 490,531: 21x27 +#208 @ 411,388: 26x21 +#209 @ 120,780: 13x28 +#210 @ 711,391: 24x12 +#211 @ 347,848: 22x13 +#212 @ 956,507: 20x18 +#213 @ 844,696: 20x26 +#214 @ 550,230: 28x25 +#215 @ 71,625: 14x26 +#216 @ 701,305: 29x23 +#217 @ 629,488: 21x14 +#218 @ 966,362: 10x26 +#219 @ 802,763: 17x19 +#220 @ 631,858: 22x17 +#221 @ 175,656: 24x26 +#222 @ 822,185: 17x15 +#223 @ 110,390: 11x19 +#224 @ 328,13: 28x26 +#225 @ 479,262: 22x12 +#226 @ 178,796: 25x25 +#227 @ 23,782: 18x21 +#228 @ 597,578: 10x12 +#229 @ 692,683: 26x29 +#230 @ 268,713: 21x28 +#231 @ 112,197: 21x15 +#232 @ 619,282: 21x19 +#233 @ 765,56: 21x29 +#234 @ 96,163: 29x11 +#235 @ 229,927: 18x29 +#236 @ 588,775: 27x29 +#237 @ 498,293: 23x15 +#238 @ 311,166: 14x25 +#239 @ 134,371: 27x28 +#240 @ 450,173: 24x16 +#241 @ 700,398: 28x12 +#242 @ 216,282: 25x10 +#243 @ 886,817: 16x15 +#244 @ 291,967: 29x25 +#245 @ 406,283: 14x20 +#246 @ 601,779: 26x28 +#247 @ 767,213: 20x10 +#248 @ 802,36: 15x17 +#249 @ 264,361: 19x27 +#250 @ 565,236: 23x28 +#251 @ 260,394: 21x18 +#252 @ 506,427: 17x26 +#253 @ 479,946: 28x10 +#254 @ 463,505: 24x19 +#255 @ 42,314: 27x27 +#256 @ 901,709: 26x14 +#257 @ 716,194: 21x29 +#258 @ 404,285: 18x21 +#259 @ 838,243: 29x28 +#260 @ 276,510: 23x11 +#261 @ 66,605: 29x16 +#262 @ 225,3: 26x16 +#263 @ 451,355: 22x21 +#264 @ 423,41: 19x17 +#265 @ 942,912: 14x11 +#266 @ 915,613: 22x11 +#267 @ 316,786: 25x24 +#268 @ 640,185: 24x17 +#269 @ 4,564: 29x18 +#270 @ 535,912: 21x16 +#271 @ 95,633: 13x17 +#272 @ 517,170: 21x19 +#273 @ 857,812: 14x23 +#274 @ 682,515: 12x21 +#275 @ 615,847: 22x14 +#276 @ 547,47: 26x18 +#277 @ 461,552: 19x28 +#278 @ 866,29: 28x28 +#279 @ 725,878: 17x15 +#280 @ 604,454: 19x24 +#281 @ 529,452: 28x12 +#282 @ 731,633: 23x22 +#283 @ 505,447: 27x18 +#284 @ 75,694: 12x16 +#285 @ 212,909: 29x13 +#286 @ 96,630: 15x29 +#287 @ 168,34: 28x18 +#288 @ 935,481: 23x26 +#289 @ 892,235: 27x16 +#290 @ 942,945: 13x15 +#291 @ 759,221: 13x25 +#292 @ 604,339: 10x27 +#293 @ 699,313: 17x23 +#294 @ 319,716: 22x24 +#295 @ 718,219: 26x26 +#296 @ 11,917: 13x19 +#297 @ 666,632: 13x24 +#298 @ 85,791: 25x29 +#299 @ 179,204: 20x17 +#300 @ 292,234: 27x11 +#301 @ 527,488: 15x19 +#302 @ 651,158: 22x10 +#303 @ 727,98: 25x25 +#304 @ 452,9: 23x26 +#305 @ 520,386: 23x22 +#306 @ 755,196: 26x11 +#307 @ 321,107: 13x25 +#308 @ 654,563: 20x25 +#309 @ 188,228: 11x23 +#310 @ 416,355: 22x19 +#311 @ 679,567: 12x8 +#312 @ 319,282: 17x27 +#313 @ 276,620: 23x23 +#314 @ 50,242: 11x19 +#315 @ 759,918: 23x19 +#316 @ 599,84: 18x21 +#317 @ 675,230: 15x28 +#318 @ 96,480: 13x13 +#319 @ 386,254: 24x19 +#320 @ 682,199: 22x19 +#321 @ 14,819: 12x14 +#322 @ 231,451: 19x17 +#323 @ 36,396: 27x13 +#324 @ 459,917: 18x26 +#325 @ 149,874: 11x10 +#326 @ 182,325: 11x25 +#327 @ 142,279: 17x12 +#328 @ 954,276: 27x24 +#329 @ 512,263: 16x19 +#330 @ 446,841: 25x25 +#331 @ 79,247: 15x11 +#332 @ 378,881: 20x17 +#333 @ 958,324: 18x22 +#334 @ 583,501: 13x23 +#335 @ 966,133: 16x20 +#336 @ 236,395: 19x19 +#337 @ 588,910: 18x10 +#338 @ 35,406: 20x25 +#339 @ 326,404: 20x29 +#340 @ 293,761: 16x24 +#341 @ 420,371: 5x5 +#342 @ 694,764: 12x17 +#343 @ 617,15: 10x14 +#344 @ 859,915: 11x15 +#345 @ 522,430: 20x17 +#346 @ 727,180: 15x14 +#347 @ 208,679: 11x16 +#348 @ 523,670: 28x22 +#349 @ 512,436: 15x13 +#350 @ 170,11: 25x18 +#351 @ 353,588: 23x12 +#352 @ 201,605: 26x12 +#353 @ 561,681: 15x12 +#354 @ 500,357: 12x12 +#355 @ 813,438: 26x26 +#356 @ 759,853: 14x28 +#357 @ 152,737: 27x27 +#358 @ 646,721: 11x13 +#359 @ 588,446: 15x21 +#360 @ 713,927: 21x28 +#361 @ 189,43: 21x29 +#362 @ 655,722: 29x22 +#363 @ 614,184: 17x14 +#364 @ 465,10: 12x19 +#365 @ 493,612: 11x24 +#366 @ 594,442: 13x18 +#367 @ 392,893: 11x16 +#368 @ 77,740: 12x21 +#369 @ 628,138: 12x27 +#370 @ 173,500: 20x11 +#371 @ 363,587: 13x27 +#372 @ 852,276: 25x19 +#373 @ 410,949: 13x10 +#374 @ 359,948: 25x25 +#375 @ 546,677: 11x29 +#376 @ 854,582: 23x19 +#377 @ 761,145: 11x10 +#378 @ 300,888: 22x17 +#379 @ 284,791: 27x16 +#380 @ 758,255: 13x20 +#381 @ 453,16: 21x16 +#382 @ 525,183: 21x22 +#383 @ 114,307: 18x15 +#384 @ 556,225: 28x20 +#385 @ 463,19: 19x13 +#386 @ 601,579: 24x14 +#387 @ 314,870: 19x21 +#388 @ 541,438: 22x17 +#389 @ 704,543: 26x11 +#390 @ 420,537: 21x22 +#391 @ 728,211: 10x17 +#392 @ 232,822: 25x16 +#393 @ 482,339: 16x17 +#394 @ 460,129: 22x18 +#395 @ 223,181: 24x28 +#396 @ 270,740: 25x24 +#397 @ 220,22: 16x17 +#398 @ 416,414: 15x21 +#399 @ 391,524: 10x20 +#400 @ 448,282: 12x29 +#401 @ 247,862: 16x13 +#402 @ 967,527: 17x20 +#403 @ 279,637: 12x15 +#404 @ 792,166: 16x29 +#405 @ 597,902: 21x12 +#406 @ 375,729: 11x13 +#407 @ 404,395: 15x27 +#408 @ 852,581: 27x17 +#409 @ 97,859: 14x19 +#410 @ 867,477: 23x24 +#411 @ 419,139: 20x23 +#412 @ 395,956: 23x15 +#413 @ 498,388: 22x24 +#414 @ 880,814: 13x19 +#415 @ 845,417: 12x25 +#416 @ 498,357: 27x29 +#417 @ 366,739: 24x29 +#418 @ 86,66: 20x23 +#419 @ 619,871: 17x4 +#420 @ 896,449: 25x24 +#421 @ 414,64: 13x27 +#422 @ 308,77: 27x10 +#423 @ 105,927: 15x12 +#424 @ 213,110: 18x26 +#425 @ 912,820: 12x15 +#426 @ 755,643: 22x13 +#427 @ 850,256: 17x12 +#428 @ 581,456: 18x29 +#429 @ 881,461: 28x22 +#430 @ 204,903: 27x19 +#431 @ 12,578: 22x13 +#432 @ 69,762: 22x27 +#433 @ 140,879: 15x18 +#434 @ 548,924: 20x23 +#435 @ 256,293: 28x22 +#436 @ 583,438: 29x27 +#437 @ 31,936: 17x11 +#438 @ 53,289: 23x26 +#439 @ 753,871: 16x27 +#440 @ 64,856: 21x28 +#441 @ 832,962: 11x15 +#442 @ 305,969: 17x29 +#443 @ 562,103: 24x24 +#444 @ 243,231: 18x11 +#445 @ 210,19: 10x29 +#446 @ 62,702: 28x18 +#447 @ 167,127: 13x29 +#448 @ 751,334: 12x20 +#449 @ 404,236: 27x28 +#450 @ 869,107: 20x18 +#451 @ 167,687: 22x22 +#452 @ 79,449: 29x19 +#453 @ 821,288: 15x26 +#454 @ 235,926: 18x10 +#455 @ 902,705: 16x18 +#456 @ 777,189: 23x25 +#457 @ 560,141: 23x17 +#458 @ 711,900: 28x12 +#459 @ 650,864: 23x19 +#460 @ 965,91: 25x29 +#461 @ 366,589: 24x18 +#462 @ 262,423: 25x21 +#463 @ 775,176: 25x10 +#464 @ 634,899: 24x15 +#465 @ 330,489: 21x16 +#466 @ 711,668: 28x14 +#467 @ 283,699: 17x15 +#468 @ 12,741: 14x11 +#469 @ 10,532: 17x19 +#470 @ 763,148: 12x17 +#471 @ 630,884: 13x26 +#472 @ 39,381: 12x19 +#473 @ 313,382: 4x17 +#474 @ 617,862: 22x18 +#475 @ 113,120: 20x21 +#476 @ 913,322: 26x17 +#477 @ 197,33: 22x15 +#478 @ 760,220: 22x29 +#479 @ 395,195: 17x4 +#480 @ 25,469: 16x19 +#481 @ 289,620: 13x20 +#482 @ 41,395: 15x21 +#483 @ 50,148: 24x22 +#484 @ 787,117: 29x24 +#485 @ 456,623: 28x15 +#486 @ 938,37: 19x10 +#487 @ 475,340: 16x22 +#488 @ 221,808: 28x22 +#489 @ 387,452: 17x19 +#490 @ 835,789: 21x23 +#491 @ 153,456: 29x20 +#492 @ 462,344: 19x13 +#493 @ 927,8: 16x27 +#494 @ 172,734: 19x15 +#495 @ 562,52: 27x15 +#496 @ 781,826: 19x26 +#497 @ 204,123: 17x13 +#498 @ 839,514: 26x25 +#499 @ 324,417: 29x11 +#500 @ 746,828: 19x11 +#501 @ 737,580: 18x14 +#502 @ 802,22: 28x20 +#503 @ 974,392: 19x17 +#504 @ 426,55: 16x14 +#505 @ 845,795: 19x13 +#506 @ 261,102: 10x27 +#507 @ 415,400: 14x22 +#508 @ 62,0: 19x29 +#509 @ 643,429: 28x10 +#510 @ 713,121: 18x19 +#511 @ 829,23: 17x16 +#512 @ 268,80: 10x11 +#513 @ 826,654: 28x29 +#514 @ 73,96: 19x18 +#515 @ 696,417: 22x13 +#516 @ 253,437: 26x29 +#517 @ 842,523: 16x10 +#518 @ 274,960: 28x10 +#519 @ 410,317: 16x22 +#520 @ 334,981: 26x18 +#521 @ 183,480: 25x29 +#522 @ 794,659: 26x26 +#523 @ 416,188: 25x10 +#524 @ 735,400: 17x21 +#525 @ 836,779: 15x26 +#526 @ 913,298: 12x15 +#527 @ 28,507: 10x18 +#528 @ 596,697: 20x20 +#529 @ 322,163: 12x20 +#530 @ 626,94: 21x10 +#531 @ 39,391: 14x10 +#532 @ 894,108: 11x29 +#533 @ 384,173: 25x18 +#534 @ 557,974: 11x23 +#535 @ 780,805: 10x11 +#536 @ 448,734: 27x14 +#537 @ 68,349: 27x17 +#538 @ 215,700: 15x13 +#539 @ 921,309: 26x16 +#540 @ 312,665: 15x3 +#541 @ 301,946: 16x22 +#542 @ 798,747: 11x22 +#543 @ 850,675: 28x28 +#544 @ 438,425: 11x18 +#545 @ 477,537: 16x25 +#546 @ 869,878: 22x22 +#547 @ 830,106: 26x15 +#548 @ 16,880: 23x28 +#549 @ 89,598: 25x10 +#550 @ 911,746: 25x20 +#551 @ 132,268: 27x14 +#552 @ 107,54: 22x16 +#553 @ 617,920: 17x25 +#554 @ 888,796: 17x17 +#555 @ 911,21: 21x13 +#556 @ 901,126: 12x28 +#557 @ 501,378: 25x26 +#558 @ 231,749: 28x10 +#559 @ 534,889: 12x24 +#560 @ 388,923: 17x14 +#561 @ 113,84: 15x28 +#562 @ 924,424: 19x27 +#563 @ 669,933: 29x22 +#564 @ 317,796: 22x24 +#565 @ 149,894: 18x11 +#566 @ 815,914: 21x17 +#567 @ 686,540: 28x10 +#568 @ 531,331: 20x24 +#569 @ 459,576: 15x28 +#570 @ 127,520: 15x24 +#571 @ 466,572: 13x26 +#572 @ 935,555: 18x19 +#573 @ 461,946: 12x20 +#574 @ 918,162: 11x12 +#575 @ 279,305: 21x15 +#576 @ 650,714: 15x13 +#577 @ 486,776: 12x27 +#578 @ 81,253: 20x17 +#579 @ 906,18: 22x14 +#580 @ 306,26: 16x16 +#581 @ 184,724: 17x28 +#582 @ 751,225: 15x10 +#583 @ 26,783: 21x11 +#584 @ 103,41: 21x26 +#585 @ 283,5: 12x24 +#586 @ 733,375: 13x27 +#587 @ 193,973: 11x21 +#588 @ 47,306: 19x14 +#589 @ 964,124: 11x19 +#590 @ 856,321: 19x12 +#591 @ 437,655: 29x14 +#592 @ 368,437: 25x24 +#593 @ 537,154: 28x17 +#594 @ 574,451: 11x13 +#595 @ 963,342: 21x26 +#596 @ 250,492: 22x18 +#597 @ 962,740: 22x14 +#598 @ 697,784: 29x22 +#599 @ 153,323: 23x23 +#600 @ 534,713: 13x12 +#601 @ 75,73: 22x18 +#602 @ 166,755: 15x12 +#603 @ 273,622: 22x12 +#604 @ 660,432: 10x24 +#605 @ 119,965: 25x25 +#606 @ 751,294: 28x14 +#607 @ 676,358: 13x11 +#608 @ 204,588: 17x29 +#609 @ 792,828: 21x14 +#610 @ 163,141: 27x12 +#611 @ 159,33: 22x19 +#612 @ 158,364: 13x15 +#613 @ 711,929: 16x14 +#614 @ 811,654: 18x29 +#615 @ 903,828: 24x20 +#616 @ 323,111: 23x26 +#617 @ 891,258: 28x28 +#618 @ 551,826: 25x12 +#619 @ 660,935: 29x19 +#620 @ 41,27: 28x19 +#621 @ 590,491: 26x24 +#622 @ 174,31: 10x25 +#623 @ 563,817: 21x25 +#624 @ 961,746: 13x27 +#625 @ 599,403: 13x11 +#626 @ 852,661: 22x27 +#627 @ 84,473: 18x19 +#628 @ 580,98: 28x27 +#629 @ 138,506: 28x15 +#630 @ 981,544: 16x26 +#631 @ 418,908: 23x24 +#632 @ 371,926: 22x25 +#633 @ 701,291: 11x20 +#634 @ 66,889: 28x25 +#635 @ 641,689: 14x26 +#636 @ 177,960: 10x16 +#637 @ 60,39: 20x18 +#638 @ 378,445: 14x25 +#639 @ 113,794: 17x16 +#640 @ 197,627: 22x16 +#641 @ 324,530: 12x25 +#642 @ 8,206: 18x29 +#643 @ 359,893: 23x15 +#644 @ 795,198: 19x17 +#645 @ 239,900: 12x20 +#646 @ 504,343: 19x10 +#647 @ 708,677: 29x10 +#648 @ 63,697: 14x12 +#649 @ 403,203: 25x18 +#650 @ 305,183: 16x18 +#651 @ 609,447: 20x22 +#652 @ 508,394: 16x29 +#653 @ 178,144: 29x27 +#654 @ 870,490: 23x19 +#655 @ 130,855: 27x14 +#656 @ 333,563: 25x14 +#657 @ 862,252: 18x16 +#658 @ 40,384: 20x29 +#659 @ 639,299: 13x10 +#660 @ 869,856: 12x23 +#661 @ 35,495: 13x28 +#662 @ 545,322: 16x26 +#663 @ 671,566: 11x12 +#664 @ 342,10: 10x17 +#665 @ 932,940: 21x14 +#666 @ 726,480: 11x11 +#667 @ 249,632: 17x21 +#668 @ 939,830: 11x14 +#669 @ 812,241: 19x25 +#670 @ 739,641: 15x21 +#671 @ 307,873: 21x25 +#672 @ 845,687: 13x11 +#673 @ 953,676: 26x17 +#674 @ 137,960: 26x13 +#675 @ 853,498: 29x13 +#676 @ 396,599: 17x17 +#677 @ 431,839: 27x27 +#678 @ 745,290: 23x16 +#679 @ 336,849: 12x23 +#680 @ 852,492: 28x15 +#681 @ 467,781: 25x23 +#682 @ 525,668: 18x15 +#683 @ 941,189: 25x24 +#684 @ 130,323: 17x26 +#685 @ 410,612: 12x20 +#686 @ 967,499: 13x23 +#687 @ 947,263: 16x22 +#688 @ 158,434: 13x13 +#689 @ 920,298: 13x15 +#690 @ 361,415: 16x21 +#691 @ 302,600: 21x20 +#692 @ 65,356: 20x24 +#693 @ 855,427: 13x12 +#694 @ 877,366: 10x10 +#695 @ 138,415: 20x14 +#696 @ 818,653: 27x12 +#697 @ 829,540: 15x29 +#698 @ 636,121: 19x28 +#699 @ 324,960: 16x23 +#700 @ 680,614: 10x11 +#701 @ 380,819: 21x21 +#702 @ 873,107: 11x15 +#703 @ 42,644: 11x17 +#704 @ 62,860: 17x21 +#705 @ 728,704: 27x27 +#706 @ 604,488: 17x25 +#707 @ 418,252: 28x14 +#708 @ 715,408: 28x17 +#709 @ 747,225: 21x13 +#710 @ 124,787: 18x18 +#711 @ 394,376: 29x18 +#712 @ 182,552: 13x16 +#713 @ 129,424: 19x23 +#714 @ 852,526: 18x12 +#715 @ 849,634: 21x19 +#716 @ 220,22: 14x21 +#717 @ 327,870: 18x15 +#718 @ 627,170: 10x13 +#719 @ 108,768: 17x22 +#720 @ 870,303: 11x28 +#721 @ 616,917: 19x18 +#722 @ 118,316: 10x11 +#723 @ 476,355: 12x13 +#724 @ 235,946: 23x12 +#725 @ 310,723: 24x21 +#726 @ 28,483: 14x28 +#727 @ 746,202: 26x12 +#728 @ 736,404: 19x28 +#729 @ 973,143: 21x26 +#730 @ 226,9: 18x24 +#731 @ 717,746: 29x26 +#732 @ 793,668: 28x19 +#733 @ 446,177: 11x25 +#734 @ 86,243: 27x11 +#735 @ 73,13: 15x25 +#736 @ 225,706: 13x13 +#737 @ 852,950: 25x10 +#738 @ 502,427: 13x15 +#739 @ 950,504: 26x17 +#740 @ 761,290: 21x24 +#741 @ 90,378: 28x29 +#742 @ 431,457: 27x13 +#743 @ 196,666: 15x29 +#744 @ 439,105: 10x29 +#745 @ 788,261: 28x10 +#746 @ 947,904: 13x12 +#747 @ 328,973: 17x25 +#748 @ 255,758: 22x26 +#749 @ 320,426: 21x21 +#750 @ 735,258: 16x24 +#751 @ 883,333: 21x25 +#752 @ 5,510: 10x23 +#753 @ 389,972: 20x14 +#754 @ 671,937: 18x10 +#755 @ 728,342: 20x18 +#756 @ 247,617: 26x13 +#757 @ 301,241: 25x19 +#758 @ 971,653: 18x25 +#759 @ 807,30: 25x14 +#760 @ 318,525: 14x12 +#761 @ 640,618: 26x24 +#762 @ 788,253: 25x26 +#763 @ 393,192: 23x12 +#764 @ 522,920: 13x26 +#765 @ 232,204: 14x18 +#766 @ 953,862: 22x25 +#767 @ 41,239: 22x18 +#768 @ 760,535: 11x25 +#769 @ 84,868: 28x26 +#770 @ 920,703: 19x26 +#771 @ 678,544: 27x17 +#772 @ 814,591: 18x11 +#773 @ 15,181: 18x10 +#774 @ 725,661: 22x11 +#775 @ 241,691: 18x17 +#776 @ 84,81: 14x29 +#777 @ 909,818: 14x23 +#778 @ 357,478: 27x25 +#779 @ 537,878: 24x15 +#780 @ 812,832: 16x18 +#781 @ 528,394: 24x29 +#782 @ 411,603: 15x12 +#783 @ 94,727: 10x16 +#784 @ 968,146: 24x27 +#785 @ 755,195: 22x11 +#786 @ 948,802: 21x13 +#787 @ 509,266: 10x28 +#788 @ 626,463: 21x19 +#789 @ 766,203: 19x22 +#790 @ 450,28: 12x24 +#791 @ 290,589: 25x12 +#792 @ 294,195: 22x28 +#793 @ 481,949: 22x20 +#794 @ 732,708: 25x13 +#795 @ 292,706: 17x20 +#796 @ 502,6: 13x10 +#797 @ 119,382: 29x23 +#798 @ 300,953: 16x22 +#799 @ 978,231: 18x16 +#800 @ 119,409: 23x12 +#801 @ 390,634: 27x13 +#802 @ 958,124: 19x21 +#803 @ 423,437: 27x13 +#804 @ 394,299: 27x19 +#805 @ 973,910: 24x10 +#806 @ 462,133: 29x11 +#807 @ 529,750: 17x15 +#808 @ 80,744: 12x17 +#809 @ 56,99: 19x17 +#810 @ 926,721: 12x28 +#811 @ 916,569: 27x15 +#812 @ 723,376: 13x27 +#813 @ 852,824: 26x23 +#814 @ 953,944: 17x10 +#815 @ 786,937: 28x17 +#816 @ 188,705: 17x24 +#817 @ 543,456: 13x18 +#818 @ 676,918: 20x10 +#819 @ 97,706: 24x29 +#820 @ 722,656: 29x18 +#821 @ 182,328: 24x15 +#822 @ 490,397: 28x20 +#823 @ 247,217: 19x20 +#824 @ 217,592: 12x21 +#825 @ 452,201: 14x25 +#826 @ 348,612: 11x26 +#827 @ 652,935: 22x21 +#828 @ 650,925: 29x21 +#829 @ 495,247: 15x29 +#830 @ 594,561: 20x15 +#831 @ 220,460: 29x25 +#832 @ 642,117: 12x20 +#833 @ 235,533: 24x13 +#834 @ 285,755: 14x11 +#835 @ 739,473: 23x21 +#836 @ 268,387: 20x16 +#837 @ 459,275: 28x10 +#838 @ 493,572: 13x21 +#839 @ 320,720: 18x20 +#840 @ 168,757: 5x6 +#841 @ 496,368: 29x18 +#842 @ 419,45: 15x22 +#843 @ 749,524: 23x19 +#844 @ 413,68: 25x19 +#845 @ 250,698: 16x27 +#846 @ 101,697: 26x13 +#847 @ 968,332: 11x19 +#848 @ 953,137: 19x11 +#849 @ 134,396: 27x19 +#850 @ 891,465: 13x28 +#851 @ 40,931: 24x18 +#852 @ 170,775: 25x10 +#853 @ 187,26: 18x15 +#854 @ 677,28: 19x17 +#855 @ 752,274: 22x16 +#856 @ 217,376: 15x17 +#857 @ 379,249: 15x28 +#858 @ 308,661: 25x16 +#859 @ 514,704: 28x16 +#860 @ 281,235: 26x23 +#861 @ 430,650: 15x28 +#862 @ 784,125: 26x25 +#863 @ 212,123: 19x14 +#864 @ 946,191: 15x8 +#865 @ 405,399: 21x27 +#866 @ 443,484: 19x16 +#867 @ 769,626: 17x25 +#868 @ 119,786: 29x19 +#869 @ 890,20: 26x28 +#870 @ 12,161: 11x24 +#871 @ 957,869: 11x12 +#872 @ 332,736: 28x15 +#873 @ 178,967: 27x10 +#874 @ 323,441: 23x10 +#875 @ 229,436: 28x16 +#876 @ 734,578: 23x17 +#877 @ 433,614: 25x27 +#878 @ 30,160: 28x18 +#879 @ 217,279: 26x21 +#880 @ 621,130: 27x15 +#881 @ 465,601: 26x28 +#882 @ 231,580: 25x11 +#883 @ 300,512: 25x23 +#884 @ 422,258: 22x19 +#885 @ 308,530: 15x13 +#886 @ 164,202: 10x12 +#887 @ 412,181: 18x21 +#888 @ 121,766: 25x18 +#889 @ 177,945: 14x16 +#890 @ 30,162: 13x26 +#891 @ 437,565: 23x27 +#892 @ 454,280: 26x27 +#893 @ 379,526: 23x12 +#894 @ 834,707: 13x5 +#895 @ 859,357: 24x28 +#896 @ 891,303: 16x14 +#897 @ 385,116: 28x20 +#898 @ 53,12: 24x22 +#899 @ 428,979: 24x20 +#900 @ 916,602: 28x17 +#901 @ 19,739: 16x21 +#902 @ 871,32: 18x22 +#903 @ 207,110: 12x16 +#904 @ 932,15: 26x19 +#905 @ 691,232: 11x18 +#906 @ 965,799: 20x20 +#907 @ 241,526: 24x23 +#908 @ 931,915: 18x14 +#909 @ 662,584: 24x14 +#910 @ 30,148: 10x17 +#911 @ 50,466: 24x29 +#912 @ 265,504: 22x10 +#913 @ 59,857: 28x24 +#914 @ 170,780: 18x27 +#915 @ 436,51: 27x12 +#916 @ 921,139: 16x17 +#917 @ 532,377: 16x23 +#918 @ 237,188: 20x27 +#919 @ 672,653: 11x20 +#920 @ 333,546: 13x18 +#921 @ 830,191: 25x27 +#922 @ 745,644: 24x23 +#923 @ 877,371: 17x28 +#924 @ 926,426: 12x19 +#925 @ 731,977: 13x21 +#926 @ 12,122: 14x14 +#927 @ 65,896: 17x28 +#928 @ 126,609: 29x13 +#929 @ 557,244: 24x22 +#930 @ 80,21: 14x24 +#931 @ 725,184: 18x28 +#932 @ 654,181: 18x12 +#933 @ 439,283: 14x21 +#934 @ 974,95: 26x15 +#935 @ 235,9: 10x17 +#936 @ 306,422: 24x21 +#937 @ 383,952: 29x10 +#938 @ 738,201: 23x15 +#939 @ 254,624: 26x19 +#940 @ 421,672: 17x14 +#941 @ 221,751: 12x28 +#942 @ 730,768: 13x18 +#943 @ 342,13: 17x18 +#944 @ 594,639: 24x17 +#945 @ 127,323: 16x12 +#946 @ 861,701: 13x10 +#947 @ 696,541: 28x24 +#948 @ 804,363: 12x25 +#949 @ 958,296: 29x13 +#950 @ 126,868: 16x20 +#951 @ 916,483: 26x15 +#952 @ 318,52: 19x22 +#953 @ 240,938: 18x11 +#954 @ 849,275: 16x11 +#955 @ 712,412: 27x26 +#956 @ 913,613: 14x15 +#957 @ 756,476: 20x18 +#958 @ 656,906: 14x11 +#959 @ 461,633: 12x26 +#960 @ 398,208: 19x12 +#961 @ 490,333: 14x14 +#962 @ 816,658: 16x27 +#963 @ 579,562: 17x19 +#964 @ 961,552: 16x29 +#965 @ 393,947: 27x19 +#966 @ 68,464: 18x13 +#967 @ 318,537: 21x13 +#968 @ 904,171: 28x13 +#969 @ 629,974: 23x22 +#970 @ 415,366: 15x19 +#971 @ 401,976: 26x13 +#972 @ 18,44: 26x12 +#973 @ 18,804: 27x26 +#974 @ 134,446: 25x22 +#975 @ 158,464: 19x13 +#976 @ 623,437: 9x3 +#977 @ 376,181: 19x15 +#978 @ 738,397: 26x27 +#979 @ 338,207: 20x23 +#980 @ 218,403: 27x17 +#981 @ 530,937: 27x10 +#982 @ 134,958: 11x19 +#983 @ 675,514: 13x17 +#984 @ 891,383: 10x27 +#985 @ 935,748: 15x11 +#986 @ 943,956: 25x22 +#987 @ 18,649: 11x14 +#988 @ 740,243: 21x10 +#989 @ 404,309: 14x22 +#990 @ 134,19: 13x19 +#991 @ 406,381: 14x23 +#992 @ 428,395: 18x13 +#993 @ 121,971: 18x15 +#994 @ 62,794: 25x17 +#995 @ 134,403: 20x13 +#996 @ 347,567: 20x29 +#997 @ 615,358: 3x18 +#998 @ 852,28: 15x16 +#999 @ 259,379: 27x24 +#1000 @ 268,617: 20x20 +#1001 @ 956,657: 20x22 +#1002 @ 924,876: 26x18 +#1003 @ 748,411: 12x14 +#1004 @ 882,249: 29x10 +#1005 @ 979,25: 21x17 +#1006 @ 559,126: 25x28 +#1007 @ 569,712: 28x13 +#1008 @ 623,781: 25x16 +#1009 @ 422,607: 25x10 +#1010 @ 613,904: 11x26 +#1011 @ 128,411: 16x17 +#1012 @ 9,195: 22x12 +#1013 @ 83,362: 14x23 +#1014 @ 617,149: 26x18 +#1015 @ 382,436: 12x21 +#1016 @ 613,855: 23x16 +#1017 @ 956,222: 24x17 +#1018 @ 400,977: 12x15 +#1019 @ 181,333: 18x17 +#1020 @ 610,174: 25x14 +#1021 @ 825,26: 13x24 +#1022 @ 296,778: 26x14 +#1023 @ 465,135: 24x16 +#1024 @ 638,807: 10x14 +#1025 @ 547,697: 19x15 +#1026 @ 103,663: 15x21 +#1027 @ 71,113: 20x28 +#1028 @ 325,498: 27x28 +#1029 @ 525,808: 23x19 +#1030 @ 828,949: 15x27 +#1031 @ 46,699: 11x18 +#1032 @ 676,396: 29x29 +#1033 @ 552,889: 25x27 +#1034 @ 943,865: 15x22 +#1035 @ 480,310: 27x20 +#1036 @ 714,270: 29x17 +#1037 @ 647,711: 18x15 +#1038 @ 590,431: 24x16 +#1039 @ 675,554: 20x26 +#1040 @ 287,13: 17x20 +#1041 @ 886,310: 16x28 +#1042 @ 219,353: 15x22 +#1043 @ 215,12: 14x17 +#1044 @ 307,541: 29x22 +#1045 @ 151,734: 22x22 +#1046 @ 517,785: 14x24 +#1047 @ 617,89: 15x26 +#1048 @ 726,978: 13x22 +#1049 @ 404,546: 25x29 +#1050 @ 395,372: 23x15 +#1051 @ 249,583: 21x21 +#1052 @ 941,455: 23x15 +#1053 @ 801,651: 19x11 +#1054 @ 186,120: 10x22 +#1055 @ 562,177: 11x10 +#1056 @ 504,441: 14x29 +#1057 @ 401,274: 11x16 +#1058 @ 69,463: 24x28 +#1059 @ 409,955: 20x27 +#1060 @ 856,263: 26x20 +#1061 @ 747,821: 23x11 +#1062 @ 243,158: 20x22 +#1063 @ 694,957: 27x10 +#1064 @ 370,666: 29x23 +#1065 @ 74,640: 14x24 +#1066 @ 330,223: 11x21 +#1067 @ 93,659: 27x10 +#1068 @ 916,571: 20x24 +#1069 @ 681,208: 10x26 +#1070 @ 62,125: 27x28 +#1071 @ 163,527: 14x24 +#1072 @ 353,71: 23x22 +#1073 @ 938,1: 12x27 +#1074 @ 561,956: 20x26 +#1075 @ 850,491: 29x23 +#1076 @ 762,231: 16x28 +#1077 @ 391,96: 13x24 +#1078 @ 359,435: 14x17 +#1079 @ 150,326: 15x20 +#1080 @ 615,695: 29x17 +#1081 @ 477,123: 24x14 +#1082 @ 851,99: 12x26 +#1083 @ 328,627: 22x29 +#1084 @ 925,616: 14x23 +#1085 @ 59,897: 23x19 +#1086 @ 152,379: 23x15 +#1087 @ 255,415: 19x22 +#1088 @ 921,476: 19x24 +#1089 @ 946,215: 23x16 +#1090 @ 384,725: 23x11 +#1091 @ 612,353: 18x29 +#1092 @ 443,193: 22x20 +#1093 @ 41,141: 18x10 +#1094 @ 288,10: 24x19 +#1095 @ 623,908: 11x20 +#1096 @ 424,159: 27x19 +#1097 @ 896,878: 16x29 +#1098 @ 466,334: 27x18 +#1099 @ 589,755: 23x25 +#1100 @ 341,592: 13x27 +#1101 @ 220,387: 16x12 +#1102 @ 958,510: 15x9 +#1103 @ 252,435: 11x23 +#1104 @ 143,853: 15x10 +#1105 @ 841,205: 14x29 +#1106 @ 439,456: 11x19 +#1107 @ 937,828: 18x21 +#1108 @ 725,650: 24x26 +#1109 @ 851,222: 19x26 +#1110 @ 248,423: 5x4 +#1111 @ 740,325: 10x23 +#1112 @ 474,960: 20x22 +#1113 @ 943,946: 11x26 +#1114 @ 590,580: 18x25 +#1115 @ 472,370: 19x17 +#1116 @ 804,427: 29x16 +#1117 @ 679,42: 16x14 +#1118 @ 318,272: 12x28 +#1119 @ 372,878: 10x12 +#1120 @ 685,223: 16x26 +#1121 @ 853,19: 23x12 +#1122 @ 532,63: 27x18 +#1123 @ 456,320: 28x19 +#1124 @ 888,828: 25x24 +#1125 @ 348,461: 19x25 +#1126 @ 873,395: 15x13 +#1127 @ 705,451: 27x28 +#1128 @ 730,589: 11x26 +#1129 @ 667,727: 20x24 +#1130 @ 101,130: 24x23 +#1131 @ 563,688: 28x21 +#1132 @ 5,143: 26x19 +#1133 @ 522,671: 19x23 +#1134 @ 481,350: 19x23 +#1135 @ 4,125: 25x18 +#1136 @ 118,943: 26x24 +#1137 @ 371,834: 20x26 +#1138 @ 523,751: 22x10 +#1139 @ 92,181: 18x16 +#1140 @ 904,145: 20x17 +#1141 @ 280,513: 25x28 +#1142 @ 43,61: 17x19 +#1143 @ 602,643: 12x9 +#1144 @ 499,293: 12x10 +#1145 @ 155,345: 28x25 +#1146 @ 572,503: 17x21 +#1147 @ 537,595: 28x12 +#1148 @ 256,841: 18x25 +#1149 @ 621,431: 16x14 +#1150 @ 657,258: 23x12 +#1151 @ 305,436: 24x18 +#1152 @ 907,820: 12x15 +#1153 @ 65,744: 26x23 +#1154 @ 230,861: 18x17 +#1155 @ 333,12: 23x24 +#1156 @ 248,418: 23x27 +#1157 @ 469,958: 19x12 +#1158 @ 35,931: 11x14 +#1159 @ 288,563: 10x29 +#1160 @ 43,378: 14x11 +#1161 @ 88,739: 12x25 +#1162 @ 804,900: 21x29 +#1163 @ 381,76: 22x24 +#1164 @ 30,502: 16x14 +#1165 @ 527,603: 12x14 +#1166 @ 956,209: 15x19 +#1167 @ 960,546: 29x14 +#1168 @ 188,744: 10x19 +#1169 @ 175,744: 12x29 +#1170 @ 133,778: 22x21 +#1171 @ 174,205: 14x20 +#1172 @ 690,959: 21x12 +#1173 @ 619,491: 13x22 +#1174 @ 813,594: 18x12 +#1175 @ 876,607: 29x13 +#1176 @ 900,6: 19x18 +#1177 @ 967,721: 13x25 +#1178 @ 189,232: 19x26 +#1179 @ 827,553: 24x18 +#1180 @ 402,245: 28x17 +#1181 @ 162,896: 14x17 +#1182 @ 914,1: 22x27 +#1183 @ 208,134: 22x19 +#1184 @ 526,331: 29x22 +#1185 @ 145,202: 22x13 +#1186 @ 409,861: 25x13 +#1187 @ 801,730: 28x18 +#1188 @ 624,487: 20x15 +#1189 @ 393,687: 15x29 +#1190 @ 279,958: 15x29 +#1191 @ 653,395: 26x27 +#1192 @ 179,26: 10x19 +#1193 @ 260,76: 29x25 +#1194 @ 859,406: 18x10 +#1195 @ 296,932: 21x23 +#1196 @ 301,974: 16x26 +#1197 @ 727,757: 29x10 +#1198 @ 657,397: 17x20 +#1199 @ 442,937: 18x26 +#1200 @ 29,508: 19x15 +#1201 @ 636,245: 24x12 +#1202 @ 960,402: 28x12 +#1203 @ 139,256: 17x29 +#1204 @ 168,117: 23x15 +#1205 @ 770,785: 27x29 +#1206 @ 752,276: 21x21 +#1207 @ 883,889: 13x13 +#1208 @ 62,918: 21x10 +#1209 @ 163,517: 17x12 +#1210 @ 470,613: 19x11 +#1211 @ 451,661: 26x29 +#1212 @ 211,38: 19x13 +#1213 @ 539,439: 19x28 +#1214 @ 339,229: 23x21 +#1215 @ 591,542: 26x25 +#1216 @ 41,643: 29x21 +#1217 @ 806,823: 14x19 +#1218 @ 628,245: 11x18 +#1219 @ 378,619: 20x19 +#1220 @ 250,444: 14x22 +#1221 @ 713,891: 17x12 +#1222 @ 144,430: 27x21 +#1223 @ 125,200: 27x29 +#1224 @ 525,664: 15x22 +#1225 @ 369,485: 23x27 +#1226 @ 868,564: 29x20 +#1227 @ 642,700: 11x12 +#1228 @ 951,6: 14x25 +#1229 @ 532,331: 24x13 +#1230 @ 937,480: 15x12 +#1231 @ 81,65: 27x25 +#1232 @ 153,263: 11x26 +#1233 @ 970,364: 14x19 +#1234 @ 143,454: 26x27 +#1235 @ 495,574: 7x15 +#1236 @ 850,209: 20x17 +#1237 @ 126,965: 23x29 +#1238 @ 870,675: 23x28 +#1239 @ 308,376: 14x28 +#1240 @ 578,755: 14x24 +#1241 @ 844,481: 23x22 +#1242 @ 734,769: 25x16 +#1243 @ 723,219: 22x27 +#1244 @ 159,695: 23x18 +#1245 @ 754,285: 26x22 +#1246 @ 345,974: 26x23 +#1247 @ 29,69: 27x12 +#1248 @ 181,784: 15x12 +#1249 @ 682,616: 5x6 +#1250 @ 208,28: 27x28 +#1251 @ 665,234: 18x23 +#1252 @ 961,288: 11x22 +#1253 @ 363,57: 19x21 +#1254 @ 662,137: 25x24 +#1255 @ 7,41: 21x15 +#1256 @ 693,784: 12x28 +#1257 @ 186,543: 29x13 +#1258 @ 596,354: 13x10 +#1259 @ 824,705: 28x16 +#1260 @ 468,614: 25x20 +#1261 @ 542,10: 28x18 +#1262 @ 231,942: 18x29 +#1263 @ 979,39: 12x13 +#1264 @ 345,77: 16x25 +#1265 @ 715,127: 14x28 +#1266 @ 618,560: 16x16 +#1267 @ 687,397: 22x25 +#1268 @ 880,229: 16x18 +#1269 @ 806,358: 29x16 +#1270 @ 106,846: 23x29 +#1271 @ 61,299: 16x14 +#1272 @ 644,818: 19x22 +#1273 @ 557,157: 29x24 +#1274 @ 29,710: 25x28 +#1275 @ 207,585: 21x27 +#1276 @ 83,715: 26x14 +#1277 @ 325,51: 13x10 +#1278 @ 717,97: 16x12 +#1279 @ 602,139: 26x11 +#1280 @ 26,933: 29x12 +#1281 @ 815,755: 13x22 +#1282 @ 786,950: 23x21 +#1283 @ 403,978: 29x19 \ No newline at end of file diff --git a/AdventOfCode2018/3rdDay/challenge2/Program.cs b/AdventOfCode2018/3rdDay/challenge2/Program.cs new file mode 100644 index 0000000..7682c50 --- /dev/null +++ b/AdventOfCode2018/3rdDay/challenge2/Program.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; + +namespace challenge2 { + class Program { + static string[] Lines {get; set;} + static List Claims {get; set;} + + static void Main(string[] args) { + Claims = new List(); + Console.WriteLine("Reading input.txt"); + Lines = File.ReadAllLines("./input.txt"); + foreach (string line in Lines) { + Claim current = new Claim(line); + Claims.Add(current); + current.Print(); + } + Fabric fabric = new Fabric(Claims); + Console.WriteLine("Found ID: " + fabric.CalculateOverlaps()); + } + + public static void printArray(string[] arr) { + foreach (string str in arr) { + Console.WriteLine(str); + } + } + } + + class Claim { + public int ID {get; set;} + public int X {get; set;} + public int Y {get; set;} + public int W {get; set;} + public int H {get; set;} + public string Source {get; set;} + + public Claim(string source) { + this.Source = source; + ParseSource(); + } + + private void ParseSource() { + Console.WriteLine("Parsing: " + this.Source); + string[] source = this.Source.Split('#'); + string[] idAndRest = source[1].Split('@'); + this.ID = int.Parse(idAndRest[0]); + string[] fromSides = idAndRest[1].Split(','); + string[] afterColon = fromSides[1].Split(':'); + this.X = int.Parse(fromSides[0]); + this.Y = int.Parse(afterColon[0]); + string[] dimensions = afterColon[1].Split('x'); + this.W = int.Parse(dimensions[0]); + this.H = int.Parse(dimensions[1]); + } + + public void Print() { + Console.WriteLine("Claim ID: " + this.ID); + Console.WriteLine("X, Y: " + this.X + ',' + this.Y); + Console.WriteLine("Dimensions: " + this.W + 'x' + this.H); + Console.WriteLine("Parsed from source: " + this.Source); + Console.WriteLine(); + } + } + + class Fabric { + public List Claims; + + private int[,] Board; + + public Fabric(List claims) { + this.Claims = claims; + this.Board = new int[10000, 10000]; + + for (int i = 0; i < 10000; i++) { + for (int j = 0; j < 10000; j++) { + Board[i, j] = 0; + } + } + } + + public int CalculateOverlaps() { + int overlaps = 0; + + foreach (Claim claim in this.Claims) { + for (int x = claim.X; x < claim.X + claim.W; x++) { + for (int y = claim.Y; y < claim.Y + claim.H; y++) { + Board[x, y]++; + } + } + } + + foreach (Claim claim in this.Claims) { + bool isValid = true; + Console.WriteLine("Processing claim ID: " + claim.ID); + + for (int x = claim.X; x < claim.X + claim.W; x++) { + for (int y = claim.Y; y < claim.Y + claim.H; y++) { + if(this.Board[x,y] != 1) { + isValid = false; + break; + } + } + if (!isValid) break; + } + if (isValid) { + overlaps = claim.ID; + break; + } + } + return overlaps; + } + } +} diff --git a/AdventOfCode2018/3rdDay/challenge2/challenge.txt b/AdventOfCode2018/3rdDay/challenge2/challenge.txt new file mode 100644 index 0000000..b75bc6e --- /dev/null +++ b/AdventOfCode2018/3rdDay/challenge2/challenge.txt @@ -0,0 +1,11 @@ + +Your puzzle answer was 109143. + +The first half of this puzzle is complete! It provides one gold star: * + +--- Part Two --- +Amidst the chaos, you notice that exactly one claim doesn't overlap by even a single square inch of fabric with any other claim. If you can somehow draw attention to it, maybe the Elves will be able to make Santa's suit after all! + +For example, in the claims above, only claim 3 is intact after all claims are made. + +What is the ID of the only claim that doesn't overlap? \ No newline at end of file diff --git a/AdventOfCode2018/3rdDay/challenge2/challenge2.csproj b/AdventOfCode2018/3rdDay/challenge2/challenge2.csproj new file mode 100644 index 0000000..23df604 --- /dev/null +++ b/AdventOfCode2018/3rdDay/challenge2/challenge2.csproj @@ -0,0 +1,8 @@ + + + + Exe + netcoreapp2.1 + + + diff --git a/AdventOfCode2018/3rdDay/challenge2/input.txt b/AdventOfCode2018/3rdDay/challenge2/input.txt new file mode 100644 index 0000000..0a0580f --- /dev/null +++ b/AdventOfCode2018/3rdDay/challenge2/input.txt @@ -0,0 +1,1283 @@ +#1 @ 179,662: 16x27 +#2 @ 609,961: 25x21 +#3 @ 73,376: 23x28 +#4 @ 599,405: 26x25 +#5 @ 28,933: 19x29 +#6 @ 441,852: 29x23 +#7 @ 512,396: 15x17 +#8 @ 702,415: 14x10 +#9 @ 730,587: 27x21 +#10 @ 252,715: 17x27 +#11 @ 541,822: 21x13 +#12 @ 901,802: 12x24 +#13 @ 759,349: 15x26 +#14 @ 862,839: 22x25 +#15 @ 862,576: 17x16 +#16 @ 265,967: 11x25 +#17 @ 124,444: 23x25 +#18 @ 971,141: 25x15 +#19 @ 864,246: 22x27 +#20 @ 841,34: 17x15 +#21 @ 173,462: 19x22 +#22 @ 122,22: 27x20 +#23 @ 327,178: 12x19 +#24 @ 576,663: 21x10 +#25 @ 410,958: 11x12 +#26 @ 676,145: 14x10 +#27 @ 177,676: 10x22 +#28 @ 663,60: 23x15 +#29 @ 686,352: 24x19 +#30 @ 68,618: 18x12 +#31 @ 20,643: 19x18 +#32 @ 683,128: 19x22 +#33 @ 88,45: 28x25 +#34 @ 442,736: 20x29 +#35 @ 824,825: 13x13 +#36 @ 668,253: 25x27 +#37 @ 254,404: 27x25 +#38 @ 712,260: 26x17 +#39 @ 588,470: 21x20 +#40 @ 114,148: 11x26 +#41 @ 242,409: 17x26 +#42 @ 342,481: 24x21 +#43 @ 104,187: 27x12 +#44 @ 440,919: 13x22 +#45 @ 177,312: 22x15 +#46 @ 249,925: 29x15 +#47 @ 376,750: 19x20 +#48 @ 157,760: 21x21 +#49 @ 760,833: 28x15 +#50 @ 955,909: 26x12 +#51 @ 941,896: 17x25 +#52 @ 154,33: 29x20 +#53 @ 236,275: 27x29 +#54 @ 848,800: 11x18 +#55 @ 950,130: 28x24 +#56 @ 351,564: 21x11 +#57 @ 32,70: 17x11 +#58 @ 215,219: 22x18 +#59 @ 816,714: 15x21 +#60 @ 738,879: 16x27 +#61 @ 218,896: 26x27 +#62 @ 953,363: 16x19 +#63 @ 836,508: 28x13 +#64 @ 839,14: 12x21 +#65 @ 831,683: 24x15 +#66 @ 809,698: 12x26 +#67 @ 887,296: 23x11 +#68 @ 770,771: 29x21 +#69 @ 383,762: 14x25 +#70 @ 542,962: 28x14 +#71 @ 236,286: 18x10 +#72 @ 517,363: 12x18 +#73 @ 171,753: 16x17 +#74 @ 272,910: 18x20 +#75 @ 658,202: 25x14 +#76 @ 534,906: 18x25 +#77 @ 468,342: 27x12 +#78 @ 426,350: 28x26 +#79 @ 277,968: 12x20 +#80 @ 390,877: 10x27 +#81 @ 859,603: 26x12 +#82 @ 491,937: 13x16 +#83 @ 19,883: 20x15 +#84 @ 47,400: 27x15 +#85 @ 627,191: 14x26 +#86 @ 164,326: 17x28 +#87 @ 768,216: 20x24 +#88 @ 947,765: 15x19 +#89 @ 917,142: 11x20 +#90 @ 351,87: 24x29 +#91 @ 872,451: 29x10 +#92 @ 749,900: 20x26 +#93 @ 935,30: 25x12 +#94 @ 221,943: 15x10 +#95 @ 344,602: 12x24 +#96 @ 677,578: 16x26 +#97 @ 452,606: 21x10 +#98 @ 2,722: 19x22 +#99 @ 310,605: 17x29 +#100 @ 262,390: 26x23 +#101 @ 640,499: 19x13 +#102 @ 852,924: 26x16 +#103 @ 309,81: 20x16 +#104 @ 108,918: 18x11 +#105 @ 249,160: 9x17 +#106 @ 26,62: 26x25 +#107 @ 407,587: 14x24 +#108 @ 956,98: 18x27 +#109 @ 944,459: 16x26 +#110 @ 209,699: 28x25 +#111 @ 710,856: 12x22 +#112 @ 744,288: 27x25 +#113 @ 489,344: 20x21 +#114 @ 438,488: 12x16 +#115 @ 884,95: 15x22 +#116 @ 60,617: 24x24 +#117 @ 957,191: 10x11 +#118 @ 315,527: 22x23 +#119 @ 199,117: 18x26 +#120 @ 255,642: 10x15 +#121 @ 957,962: 11x14 +#122 @ 193,131: 10x13 +#123 @ 2,931: 21x11 +#124 @ 36,961: 27x23 +#125 @ 863,38: 29x14 +#126 @ 31,731: 13x15 +#127 @ 357,741: 28x15 +#128 @ 209,354: 27x23 +#129 @ 524,8: 22x20 +#130 @ 302,247: 15x12 +#131 @ 76,857: 10x16 +#132 @ 531,502: 24x10 +#133 @ 559,962: 17x15 +#134 @ 233,710: 29x15 +#135 @ 762,70: 15x24 +#136 @ 934,186: 25x20 +#137 @ 808,252: 29x29 +#138 @ 550,694: 22x19 +#139 @ 265,368: 23x25 +#140 @ 640,637: 11x14 +#141 @ 736,484: 15x10 +#142 @ 946,571: 27x17 +#143 @ 332,174: 20x20 +#144 @ 797,775: 11x23 +#145 @ 684,63: 22x13 +#146 @ 932,36: 20x12 +#147 @ 375,882: 19x17 +#148 @ 656,227: 12x20 +#149 @ 455,223: 12x15 +#150 @ 732,619: 20x20 +#151 @ 292,615: 19x29 +#152 @ 615,0: 15x28 +#153 @ 463,174: 16x15 +#154 @ 322,456: 27x15 +#155 @ 352,224: 10x15 +#156 @ 966,673: 29x21 +#157 @ 527,42: 23x27 +#158 @ 632,775: 15x15 +#159 @ 871,805: 22x15 +#160 @ 667,240: 15x27 +#161 @ 607,880: 25x25 +#162 @ 447,44: 10x21 +#163 @ 445,126: 17x15 +#164 @ 844,933: 11x29 +#165 @ 471,423: 24x27 +#166 @ 715,867: 16x16 +#167 @ 778,279: 10x18 +#168 @ 490,630: 23x16 +#169 @ 687,301: 28x13 +#170 @ 476,432: 11x18 +#171 @ 123,794: 23x26 +#172 @ 738,256: 22x25 +#173 @ 336,60: 26x28 +#174 @ 698,766: 4x10 +#175 @ 511,10: 13x10 +#176 @ 580,702: 18x20 +#177 @ 218,620: 13x22 +#178 @ 476,488: 13x25 +#179 @ 154,617: 14x29 +#180 @ 620,563: 11x6 +#181 @ 168,433: 28x10 +#182 @ 60,685: 10x24 +#183 @ 880,680: 18x18 +#184 @ 859,616: 17x25 +#185 @ 114,80: 26x19 +#186 @ 236,868: 25x10 +#187 @ 135,13: 26x29 +#188 @ 810,677: 22x10 +#189 @ 938,932: 16x14 +#190 @ 427,434: 14x11 +#191 @ 83,731: 29x23 +#192 @ 960,148: 25x16 +#193 @ 577,669: 24x16 +#194 @ 67,267: 18x29 +#195 @ 603,928: 15x26 +#196 @ 881,39: 29x11 +#197 @ 963,957: 19x23 +#198 @ 891,868: 12x13 +#199 @ 799,34: 14x12 +#200 @ 529,785: 24x27 +#201 @ 596,936: 12x21 +#202 @ 832,289: 13x10 +#203 @ 664,232: 17x22 +#204 @ 171,345: 24x26 +#205 @ 283,521: 28x22 +#206 @ 702,469: 14x10 +#207 @ 490,531: 21x27 +#208 @ 411,388: 26x21 +#209 @ 120,780: 13x28 +#210 @ 711,391: 24x12 +#211 @ 347,848: 22x13 +#212 @ 956,507: 20x18 +#213 @ 844,696: 20x26 +#214 @ 550,230: 28x25 +#215 @ 71,625: 14x26 +#216 @ 701,305: 29x23 +#217 @ 629,488: 21x14 +#218 @ 966,362: 10x26 +#219 @ 802,763: 17x19 +#220 @ 631,858: 22x17 +#221 @ 175,656: 24x26 +#222 @ 822,185: 17x15 +#223 @ 110,390: 11x19 +#224 @ 328,13: 28x26 +#225 @ 479,262: 22x12 +#226 @ 178,796: 25x25 +#227 @ 23,782: 18x21 +#228 @ 597,578: 10x12 +#229 @ 692,683: 26x29 +#230 @ 268,713: 21x28 +#231 @ 112,197: 21x15 +#232 @ 619,282: 21x19 +#233 @ 765,56: 21x29 +#234 @ 96,163: 29x11 +#235 @ 229,927: 18x29 +#236 @ 588,775: 27x29 +#237 @ 498,293: 23x15 +#238 @ 311,166: 14x25 +#239 @ 134,371: 27x28 +#240 @ 450,173: 24x16 +#241 @ 700,398: 28x12 +#242 @ 216,282: 25x10 +#243 @ 886,817: 16x15 +#244 @ 291,967: 29x25 +#245 @ 406,283: 14x20 +#246 @ 601,779: 26x28 +#247 @ 767,213: 20x10 +#248 @ 802,36: 15x17 +#249 @ 264,361: 19x27 +#250 @ 565,236: 23x28 +#251 @ 260,394: 21x18 +#252 @ 506,427: 17x26 +#253 @ 479,946: 28x10 +#254 @ 463,505: 24x19 +#255 @ 42,314: 27x27 +#256 @ 901,709: 26x14 +#257 @ 716,194: 21x29 +#258 @ 404,285: 18x21 +#259 @ 838,243: 29x28 +#260 @ 276,510: 23x11 +#261 @ 66,605: 29x16 +#262 @ 225,3: 26x16 +#263 @ 451,355: 22x21 +#264 @ 423,41: 19x17 +#265 @ 942,912: 14x11 +#266 @ 915,613: 22x11 +#267 @ 316,786: 25x24 +#268 @ 640,185: 24x17 +#269 @ 4,564: 29x18 +#270 @ 535,912: 21x16 +#271 @ 95,633: 13x17 +#272 @ 517,170: 21x19 +#273 @ 857,812: 14x23 +#274 @ 682,515: 12x21 +#275 @ 615,847: 22x14 +#276 @ 547,47: 26x18 +#277 @ 461,552: 19x28 +#278 @ 866,29: 28x28 +#279 @ 725,878: 17x15 +#280 @ 604,454: 19x24 +#281 @ 529,452: 28x12 +#282 @ 731,633: 23x22 +#283 @ 505,447: 27x18 +#284 @ 75,694: 12x16 +#285 @ 212,909: 29x13 +#286 @ 96,630: 15x29 +#287 @ 168,34: 28x18 +#288 @ 935,481: 23x26 +#289 @ 892,235: 27x16 +#290 @ 942,945: 13x15 +#291 @ 759,221: 13x25 +#292 @ 604,339: 10x27 +#293 @ 699,313: 17x23 +#294 @ 319,716: 22x24 +#295 @ 718,219: 26x26 +#296 @ 11,917: 13x19 +#297 @ 666,632: 13x24 +#298 @ 85,791: 25x29 +#299 @ 179,204: 20x17 +#300 @ 292,234: 27x11 +#301 @ 527,488: 15x19 +#302 @ 651,158: 22x10 +#303 @ 727,98: 25x25 +#304 @ 452,9: 23x26 +#305 @ 520,386: 23x22 +#306 @ 755,196: 26x11 +#307 @ 321,107: 13x25 +#308 @ 654,563: 20x25 +#309 @ 188,228: 11x23 +#310 @ 416,355: 22x19 +#311 @ 679,567: 12x8 +#312 @ 319,282: 17x27 +#313 @ 276,620: 23x23 +#314 @ 50,242: 11x19 +#315 @ 759,918: 23x19 +#316 @ 599,84: 18x21 +#317 @ 675,230: 15x28 +#318 @ 96,480: 13x13 +#319 @ 386,254: 24x19 +#320 @ 682,199: 22x19 +#321 @ 14,819: 12x14 +#322 @ 231,451: 19x17 +#323 @ 36,396: 27x13 +#324 @ 459,917: 18x26 +#325 @ 149,874: 11x10 +#326 @ 182,325: 11x25 +#327 @ 142,279: 17x12 +#328 @ 954,276: 27x24 +#329 @ 512,263: 16x19 +#330 @ 446,841: 25x25 +#331 @ 79,247: 15x11 +#332 @ 378,881: 20x17 +#333 @ 958,324: 18x22 +#334 @ 583,501: 13x23 +#335 @ 966,133: 16x20 +#336 @ 236,395: 19x19 +#337 @ 588,910: 18x10 +#338 @ 35,406: 20x25 +#339 @ 326,404: 20x29 +#340 @ 293,761: 16x24 +#341 @ 420,371: 5x5 +#342 @ 694,764: 12x17 +#343 @ 617,15: 10x14 +#344 @ 859,915: 11x15 +#345 @ 522,430: 20x17 +#346 @ 727,180: 15x14 +#347 @ 208,679: 11x16 +#348 @ 523,670: 28x22 +#349 @ 512,436: 15x13 +#350 @ 170,11: 25x18 +#351 @ 353,588: 23x12 +#352 @ 201,605: 26x12 +#353 @ 561,681: 15x12 +#354 @ 500,357: 12x12 +#355 @ 813,438: 26x26 +#356 @ 759,853: 14x28 +#357 @ 152,737: 27x27 +#358 @ 646,721: 11x13 +#359 @ 588,446: 15x21 +#360 @ 713,927: 21x28 +#361 @ 189,43: 21x29 +#362 @ 655,722: 29x22 +#363 @ 614,184: 17x14 +#364 @ 465,10: 12x19 +#365 @ 493,612: 11x24 +#366 @ 594,442: 13x18 +#367 @ 392,893: 11x16 +#368 @ 77,740: 12x21 +#369 @ 628,138: 12x27 +#370 @ 173,500: 20x11 +#371 @ 363,587: 13x27 +#372 @ 852,276: 25x19 +#373 @ 410,949: 13x10 +#374 @ 359,948: 25x25 +#375 @ 546,677: 11x29 +#376 @ 854,582: 23x19 +#377 @ 761,145: 11x10 +#378 @ 300,888: 22x17 +#379 @ 284,791: 27x16 +#380 @ 758,255: 13x20 +#381 @ 453,16: 21x16 +#382 @ 525,183: 21x22 +#383 @ 114,307: 18x15 +#384 @ 556,225: 28x20 +#385 @ 463,19: 19x13 +#386 @ 601,579: 24x14 +#387 @ 314,870: 19x21 +#388 @ 541,438: 22x17 +#389 @ 704,543: 26x11 +#390 @ 420,537: 21x22 +#391 @ 728,211: 10x17 +#392 @ 232,822: 25x16 +#393 @ 482,339: 16x17 +#394 @ 460,129: 22x18 +#395 @ 223,181: 24x28 +#396 @ 270,740: 25x24 +#397 @ 220,22: 16x17 +#398 @ 416,414: 15x21 +#399 @ 391,524: 10x20 +#400 @ 448,282: 12x29 +#401 @ 247,862: 16x13 +#402 @ 967,527: 17x20 +#403 @ 279,637: 12x15 +#404 @ 792,166: 16x29 +#405 @ 597,902: 21x12 +#406 @ 375,729: 11x13 +#407 @ 404,395: 15x27 +#408 @ 852,581: 27x17 +#409 @ 97,859: 14x19 +#410 @ 867,477: 23x24 +#411 @ 419,139: 20x23 +#412 @ 395,956: 23x15 +#413 @ 498,388: 22x24 +#414 @ 880,814: 13x19 +#415 @ 845,417: 12x25 +#416 @ 498,357: 27x29 +#417 @ 366,739: 24x29 +#418 @ 86,66: 20x23 +#419 @ 619,871: 17x4 +#420 @ 896,449: 25x24 +#421 @ 414,64: 13x27 +#422 @ 308,77: 27x10 +#423 @ 105,927: 15x12 +#424 @ 213,110: 18x26 +#425 @ 912,820: 12x15 +#426 @ 755,643: 22x13 +#427 @ 850,256: 17x12 +#428 @ 581,456: 18x29 +#429 @ 881,461: 28x22 +#430 @ 204,903: 27x19 +#431 @ 12,578: 22x13 +#432 @ 69,762: 22x27 +#433 @ 140,879: 15x18 +#434 @ 548,924: 20x23 +#435 @ 256,293: 28x22 +#436 @ 583,438: 29x27 +#437 @ 31,936: 17x11 +#438 @ 53,289: 23x26 +#439 @ 753,871: 16x27 +#440 @ 64,856: 21x28 +#441 @ 832,962: 11x15 +#442 @ 305,969: 17x29 +#443 @ 562,103: 24x24 +#444 @ 243,231: 18x11 +#445 @ 210,19: 10x29 +#446 @ 62,702: 28x18 +#447 @ 167,127: 13x29 +#448 @ 751,334: 12x20 +#449 @ 404,236: 27x28 +#450 @ 869,107: 20x18 +#451 @ 167,687: 22x22 +#452 @ 79,449: 29x19 +#453 @ 821,288: 15x26 +#454 @ 235,926: 18x10 +#455 @ 902,705: 16x18 +#456 @ 777,189: 23x25 +#457 @ 560,141: 23x17 +#458 @ 711,900: 28x12 +#459 @ 650,864: 23x19 +#460 @ 965,91: 25x29 +#461 @ 366,589: 24x18 +#462 @ 262,423: 25x21 +#463 @ 775,176: 25x10 +#464 @ 634,899: 24x15 +#465 @ 330,489: 21x16 +#466 @ 711,668: 28x14 +#467 @ 283,699: 17x15 +#468 @ 12,741: 14x11 +#469 @ 10,532: 17x19 +#470 @ 763,148: 12x17 +#471 @ 630,884: 13x26 +#472 @ 39,381: 12x19 +#473 @ 313,382: 4x17 +#474 @ 617,862: 22x18 +#475 @ 113,120: 20x21 +#476 @ 913,322: 26x17 +#477 @ 197,33: 22x15 +#478 @ 760,220: 22x29 +#479 @ 395,195: 17x4 +#480 @ 25,469: 16x19 +#481 @ 289,620: 13x20 +#482 @ 41,395: 15x21 +#483 @ 50,148: 24x22 +#484 @ 787,117: 29x24 +#485 @ 456,623: 28x15 +#486 @ 938,37: 19x10 +#487 @ 475,340: 16x22 +#488 @ 221,808: 28x22 +#489 @ 387,452: 17x19 +#490 @ 835,789: 21x23 +#491 @ 153,456: 29x20 +#492 @ 462,344: 19x13 +#493 @ 927,8: 16x27 +#494 @ 172,734: 19x15 +#495 @ 562,52: 27x15 +#496 @ 781,826: 19x26 +#497 @ 204,123: 17x13 +#498 @ 839,514: 26x25 +#499 @ 324,417: 29x11 +#500 @ 746,828: 19x11 +#501 @ 737,580: 18x14 +#502 @ 802,22: 28x20 +#503 @ 974,392: 19x17 +#504 @ 426,55: 16x14 +#505 @ 845,795: 19x13 +#506 @ 261,102: 10x27 +#507 @ 415,400: 14x22 +#508 @ 62,0: 19x29 +#509 @ 643,429: 28x10 +#510 @ 713,121: 18x19 +#511 @ 829,23: 17x16 +#512 @ 268,80: 10x11 +#513 @ 826,654: 28x29 +#514 @ 73,96: 19x18 +#515 @ 696,417: 22x13 +#516 @ 253,437: 26x29 +#517 @ 842,523: 16x10 +#518 @ 274,960: 28x10 +#519 @ 410,317: 16x22 +#520 @ 334,981: 26x18 +#521 @ 183,480: 25x29 +#522 @ 794,659: 26x26 +#523 @ 416,188: 25x10 +#524 @ 735,400: 17x21 +#525 @ 836,779: 15x26 +#526 @ 913,298: 12x15 +#527 @ 28,507: 10x18 +#528 @ 596,697: 20x20 +#529 @ 322,163: 12x20 +#530 @ 626,94: 21x10 +#531 @ 39,391: 14x10 +#532 @ 894,108: 11x29 +#533 @ 384,173: 25x18 +#534 @ 557,974: 11x23 +#535 @ 780,805: 10x11 +#536 @ 448,734: 27x14 +#537 @ 68,349: 27x17 +#538 @ 215,700: 15x13 +#539 @ 921,309: 26x16 +#540 @ 312,665: 15x3 +#541 @ 301,946: 16x22 +#542 @ 798,747: 11x22 +#543 @ 850,675: 28x28 +#544 @ 438,425: 11x18 +#545 @ 477,537: 16x25 +#546 @ 869,878: 22x22 +#547 @ 830,106: 26x15 +#548 @ 16,880: 23x28 +#549 @ 89,598: 25x10 +#550 @ 911,746: 25x20 +#551 @ 132,268: 27x14 +#552 @ 107,54: 22x16 +#553 @ 617,920: 17x25 +#554 @ 888,796: 17x17 +#555 @ 911,21: 21x13 +#556 @ 901,126: 12x28 +#557 @ 501,378: 25x26 +#558 @ 231,749: 28x10 +#559 @ 534,889: 12x24 +#560 @ 388,923: 17x14 +#561 @ 113,84: 15x28 +#562 @ 924,424: 19x27 +#563 @ 669,933: 29x22 +#564 @ 317,796: 22x24 +#565 @ 149,894: 18x11 +#566 @ 815,914: 21x17 +#567 @ 686,540: 28x10 +#568 @ 531,331: 20x24 +#569 @ 459,576: 15x28 +#570 @ 127,520: 15x24 +#571 @ 466,572: 13x26 +#572 @ 935,555: 18x19 +#573 @ 461,946: 12x20 +#574 @ 918,162: 11x12 +#575 @ 279,305: 21x15 +#576 @ 650,714: 15x13 +#577 @ 486,776: 12x27 +#578 @ 81,253: 20x17 +#579 @ 906,18: 22x14 +#580 @ 306,26: 16x16 +#581 @ 184,724: 17x28 +#582 @ 751,225: 15x10 +#583 @ 26,783: 21x11 +#584 @ 103,41: 21x26 +#585 @ 283,5: 12x24 +#586 @ 733,375: 13x27 +#587 @ 193,973: 11x21 +#588 @ 47,306: 19x14 +#589 @ 964,124: 11x19 +#590 @ 856,321: 19x12 +#591 @ 437,655: 29x14 +#592 @ 368,437: 25x24 +#593 @ 537,154: 28x17 +#594 @ 574,451: 11x13 +#595 @ 963,342: 21x26 +#596 @ 250,492: 22x18 +#597 @ 962,740: 22x14 +#598 @ 697,784: 29x22 +#599 @ 153,323: 23x23 +#600 @ 534,713: 13x12 +#601 @ 75,73: 22x18 +#602 @ 166,755: 15x12 +#603 @ 273,622: 22x12 +#604 @ 660,432: 10x24 +#605 @ 119,965: 25x25 +#606 @ 751,294: 28x14 +#607 @ 676,358: 13x11 +#608 @ 204,588: 17x29 +#609 @ 792,828: 21x14 +#610 @ 163,141: 27x12 +#611 @ 159,33: 22x19 +#612 @ 158,364: 13x15 +#613 @ 711,929: 16x14 +#614 @ 811,654: 18x29 +#615 @ 903,828: 24x20 +#616 @ 323,111: 23x26 +#617 @ 891,258: 28x28 +#618 @ 551,826: 25x12 +#619 @ 660,935: 29x19 +#620 @ 41,27: 28x19 +#621 @ 590,491: 26x24 +#622 @ 174,31: 10x25 +#623 @ 563,817: 21x25 +#624 @ 961,746: 13x27 +#625 @ 599,403: 13x11 +#626 @ 852,661: 22x27 +#627 @ 84,473: 18x19 +#628 @ 580,98: 28x27 +#629 @ 138,506: 28x15 +#630 @ 981,544: 16x26 +#631 @ 418,908: 23x24 +#632 @ 371,926: 22x25 +#633 @ 701,291: 11x20 +#634 @ 66,889: 28x25 +#635 @ 641,689: 14x26 +#636 @ 177,960: 10x16 +#637 @ 60,39: 20x18 +#638 @ 378,445: 14x25 +#639 @ 113,794: 17x16 +#640 @ 197,627: 22x16 +#641 @ 324,530: 12x25 +#642 @ 8,206: 18x29 +#643 @ 359,893: 23x15 +#644 @ 795,198: 19x17 +#645 @ 239,900: 12x20 +#646 @ 504,343: 19x10 +#647 @ 708,677: 29x10 +#648 @ 63,697: 14x12 +#649 @ 403,203: 25x18 +#650 @ 305,183: 16x18 +#651 @ 609,447: 20x22 +#652 @ 508,394: 16x29 +#653 @ 178,144: 29x27 +#654 @ 870,490: 23x19 +#655 @ 130,855: 27x14 +#656 @ 333,563: 25x14 +#657 @ 862,252: 18x16 +#658 @ 40,384: 20x29 +#659 @ 639,299: 13x10 +#660 @ 869,856: 12x23 +#661 @ 35,495: 13x28 +#662 @ 545,322: 16x26 +#663 @ 671,566: 11x12 +#664 @ 342,10: 10x17 +#665 @ 932,940: 21x14 +#666 @ 726,480: 11x11 +#667 @ 249,632: 17x21 +#668 @ 939,830: 11x14 +#669 @ 812,241: 19x25 +#670 @ 739,641: 15x21 +#671 @ 307,873: 21x25 +#672 @ 845,687: 13x11 +#673 @ 953,676: 26x17 +#674 @ 137,960: 26x13 +#675 @ 853,498: 29x13 +#676 @ 396,599: 17x17 +#677 @ 431,839: 27x27 +#678 @ 745,290: 23x16 +#679 @ 336,849: 12x23 +#680 @ 852,492: 28x15 +#681 @ 467,781: 25x23 +#682 @ 525,668: 18x15 +#683 @ 941,189: 25x24 +#684 @ 130,323: 17x26 +#685 @ 410,612: 12x20 +#686 @ 967,499: 13x23 +#687 @ 947,263: 16x22 +#688 @ 158,434: 13x13 +#689 @ 920,298: 13x15 +#690 @ 361,415: 16x21 +#691 @ 302,600: 21x20 +#692 @ 65,356: 20x24 +#693 @ 855,427: 13x12 +#694 @ 877,366: 10x10 +#695 @ 138,415: 20x14 +#696 @ 818,653: 27x12 +#697 @ 829,540: 15x29 +#698 @ 636,121: 19x28 +#699 @ 324,960: 16x23 +#700 @ 680,614: 10x11 +#701 @ 380,819: 21x21 +#702 @ 873,107: 11x15 +#703 @ 42,644: 11x17 +#704 @ 62,860: 17x21 +#705 @ 728,704: 27x27 +#706 @ 604,488: 17x25 +#707 @ 418,252: 28x14 +#708 @ 715,408: 28x17 +#709 @ 747,225: 21x13 +#710 @ 124,787: 18x18 +#711 @ 394,376: 29x18 +#712 @ 182,552: 13x16 +#713 @ 129,424: 19x23 +#714 @ 852,526: 18x12 +#715 @ 849,634: 21x19 +#716 @ 220,22: 14x21 +#717 @ 327,870: 18x15 +#718 @ 627,170: 10x13 +#719 @ 108,768: 17x22 +#720 @ 870,303: 11x28 +#721 @ 616,917: 19x18 +#722 @ 118,316: 10x11 +#723 @ 476,355: 12x13 +#724 @ 235,946: 23x12 +#725 @ 310,723: 24x21 +#726 @ 28,483: 14x28 +#727 @ 746,202: 26x12 +#728 @ 736,404: 19x28 +#729 @ 973,143: 21x26 +#730 @ 226,9: 18x24 +#731 @ 717,746: 29x26 +#732 @ 793,668: 28x19 +#733 @ 446,177: 11x25 +#734 @ 86,243: 27x11 +#735 @ 73,13: 15x25 +#736 @ 225,706: 13x13 +#737 @ 852,950: 25x10 +#738 @ 502,427: 13x15 +#739 @ 950,504: 26x17 +#740 @ 761,290: 21x24 +#741 @ 90,378: 28x29 +#742 @ 431,457: 27x13 +#743 @ 196,666: 15x29 +#744 @ 439,105: 10x29 +#745 @ 788,261: 28x10 +#746 @ 947,904: 13x12 +#747 @ 328,973: 17x25 +#748 @ 255,758: 22x26 +#749 @ 320,426: 21x21 +#750 @ 735,258: 16x24 +#751 @ 883,333: 21x25 +#752 @ 5,510: 10x23 +#753 @ 389,972: 20x14 +#754 @ 671,937: 18x10 +#755 @ 728,342: 20x18 +#756 @ 247,617: 26x13 +#757 @ 301,241: 25x19 +#758 @ 971,653: 18x25 +#759 @ 807,30: 25x14 +#760 @ 318,525: 14x12 +#761 @ 640,618: 26x24 +#762 @ 788,253: 25x26 +#763 @ 393,192: 23x12 +#764 @ 522,920: 13x26 +#765 @ 232,204: 14x18 +#766 @ 953,862: 22x25 +#767 @ 41,239: 22x18 +#768 @ 760,535: 11x25 +#769 @ 84,868: 28x26 +#770 @ 920,703: 19x26 +#771 @ 678,544: 27x17 +#772 @ 814,591: 18x11 +#773 @ 15,181: 18x10 +#774 @ 725,661: 22x11 +#775 @ 241,691: 18x17 +#776 @ 84,81: 14x29 +#777 @ 909,818: 14x23 +#778 @ 357,478: 27x25 +#779 @ 537,878: 24x15 +#780 @ 812,832: 16x18 +#781 @ 528,394: 24x29 +#782 @ 411,603: 15x12 +#783 @ 94,727: 10x16 +#784 @ 968,146: 24x27 +#785 @ 755,195: 22x11 +#786 @ 948,802: 21x13 +#787 @ 509,266: 10x28 +#788 @ 626,463: 21x19 +#789 @ 766,203: 19x22 +#790 @ 450,28: 12x24 +#791 @ 290,589: 25x12 +#792 @ 294,195: 22x28 +#793 @ 481,949: 22x20 +#794 @ 732,708: 25x13 +#795 @ 292,706: 17x20 +#796 @ 502,6: 13x10 +#797 @ 119,382: 29x23 +#798 @ 300,953: 16x22 +#799 @ 978,231: 18x16 +#800 @ 119,409: 23x12 +#801 @ 390,634: 27x13 +#802 @ 958,124: 19x21 +#803 @ 423,437: 27x13 +#804 @ 394,299: 27x19 +#805 @ 973,910: 24x10 +#806 @ 462,133: 29x11 +#807 @ 529,750: 17x15 +#808 @ 80,744: 12x17 +#809 @ 56,99: 19x17 +#810 @ 926,721: 12x28 +#811 @ 916,569: 27x15 +#812 @ 723,376: 13x27 +#813 @ 852,824: 26x23 +#814 @ 953,944: 17x10 +#815 @ 786,937: 28x17 +#816 @ 188,705: 17x24 +#817 @ 543,456: 13x18 +#818 @ 676,918: 20x10 +#819 @ 97,706: 24x29 +#820 @ 722,656: 29x18 +#821 @ 182,328: 24x15 +#822 @ 490,397: 28x20 +#823 @ 247,217: 19x20 +#824 @ 217,592: 12x21 +#825 @ 452,201: 14x25 +#826 @ 348,612: 11x26 +#827 @ 652,935: 22x21 +#828 @ 650,925: 29x21 +#829 @ 495,247: 15x29 +#830 @ 594,561: 20x15 +#831 @ 220,460: 29x25 +#832 @ 642,117: 12x20 +#833 @ 235,533: 24x13 +#834 @ 285,755: 14x11 +#835 @ 739,473: 23x21 +#836 @ 268,387: 20x16 +#837 @ 459,275: 28x10 +#838 @ 493,572: 13x21 +#839 @ 320,720: 18x20 +#840 @ 168,757: 5x6 +#841 @ 496,368: 29x18 +#842 @ 419,45: 15x22 +#843 @ 749,524: 23x19 +#844 @ 413,68: 25x19 +#845 @ 250,698: 16x27 +#846 @ 101,697: 26x13 +#847 @ 968,332: 11x19 +#848 @ 953,137: 19x11 +#849 @ 134,396: 27x19 +#850 @ 891,465: 13x28 +#851 @ 40,931: 24x18 +#852 @ 170,775: 25x10 +#853 @ 187,26: 18x15 +#854 @ 677,28: 19x17 +#855 @ 752,274: 22x16 +#856 @ 217,376: 15x17 +#857 @ 379,249: 15x28 +#858 @ 308,661: 25x16 +#859 @ 514,704: 28x16 +#860 @ 281,235: 26x23 +#861 @ 430,650: 15x28 +#862 @ 784,125: 26x25 +#863 @ 212,123: 19x14 +#864 @ 946,191: 15x8 +#865 @ 405,399: 21x27 +#866 @ 443,484: 19x16 +#867 @ 769,626: 17x25 +#868 @ 119,786: 29x19 +#869 @ 890,20: 26x28 +#870 @ 12,161: 11x24 +#871 @ 957,869: 11x12 +#872 @ 332,736: 28x15 +#873 @ 178,967: 27x10 +#874 @ 323,441: 23x10 +#875 @ 229,436: 28x16 +#876 @ 734,578: 23x17 +#877 @ 433,614: 25x27 +#878 @ 30,160: 28x18 +#879 @ 217,279: 26x21 +#880 @ 621,130: 27x15 +#881 @ 465,601: 26x28 +#882 @ 231,580: 25x11 +#883 @ 300,512: 25x23 +#884 @ 422,258: 22x19 +#885 @ 308,530: 15x13 +#886 @ 164,202: 10x12 +#887 @ 412,181: 18x21 +#888 @ 121,766: 25x18 +#889 @ 177,945: 14x16 +#890 @ 30,162: 13x26 +#891 @ 437,565: 23x27 +#892 @ 454,280: 26x27 +#893 @ 379,526: 23x12 +#894 @ 834,707: 13x5 +#895 @ 859,357: 24x28 +#896 @ 891,303: 16x14 +#897 @ 385,116: 28x20 +#898 @ 53,12: 24x22 +#899 @ 428,979: 24x20 +#900 @ 916,602: 28x17 +#901 @ 19,739: 16x21 +#902 @ 871,32: 18x22 +#903 @ 207,110: 12x16 +#904 @ 932,15: 26x19 +#905 @ 691,232: 11x18 +#906 @ 965,799: 20x20 +#907 @ 241,526: 24x23 +#908 @ 931,915: 18x14 +#909 @ 662,584: 24x14 +#910 @ 30,148: 10x17 +#911 @ 50,466: 24x29 +#912 @ 265,504: 22x10 +#913 @ 59,857: 28x24 +#914 @ 170,780: 18x27 +#915 @ 436,51: 27x12 +#916 @ 921,139: 16x17 +#917 @ 532,377: 16x23 +#918 @ 237,188: 20x27 +#919 @ 672,653: 11x20 +#920 @ 333,546: 13x18 +#921 @ 830,191: 25x27 +#922 @ 745,644: 24x23 +#923 @ 877,371: 17x28 +#924 @ 926,426: 12x19 +#925 @ 731,977: 13x21 +#926 @ 12,122: 14x14 +#927 @ 65,896: 17x28 +#928 @ 126,609: 29x13 +#929 @ 557,244: 24x22 +#930 @ 80,21: 14x24 +#931 @ 725,184: 18x28 +#932 @ 654,181: 18x12 +#933 @ 439,283: 14x21 +#934 @ 974,95: 26x15 +#935 @ 235,9: 10x17 +#936 @ 306,422: 24x21 +#937 @ 383,952: 29x10 +#938 @ 738,201: 23x15 +#939 @ 254,624: 26x19 +#940 @ 421,672: 17x14 +#941 @ 221,751: 12x28 +#942 @ 730,768: 13x18 +#943 @ 342,13: 17x18 +#944 @ 594,639: 24x17 +#945 @ 127,323: 16x12 +#946 @ 861,701: 13x10 +#947 @ 696,541: 28x24 +#948 @ 804,363: 12x25 +#949 @ 958,296: 29x13 +#950 @ 126,868: 16x20 +#951 @ 916,483: 26x15 +#952 @ 318,52: 19x22 +#953 @ 240,938: 18x11 +#954 @ 849,275: 16x11 +#955 @ 712,412: 27x26 +#956 @ 913,613: 14x15 +#957 @ 756,476: 20x18 +#958 @ 656,906: 14x11 +#959 @ 461,633: 12x26 +#960 @ 398,208: 19x12 +#961 @ 490,333: 14x14 +#962 @ 816,658: 16x27 +#963 @ 579,562: 17x19 +#964 @ 961,552: 16x29 +#965 @ 393,947: 27x19 +#966 @ 68,464: 18x13 +#967 @ 318,537: 21x13 +#968 @ 904,171: 28x13 +#969 @ 629,974: 23x22 +#970 @ 415,366: 15x19 +#971 @ 401,976: 26x13 +#972 @ 18,44: 26x12 +#973 @ 18,804: 27x26 +#974 @ 134,446: 25x22 +#975 @ 158,464: 19x13 +#976 @ 623,437: 9x3 +#977 @ 376,181: 19x15 +#978 @ 738,397: 26x27 +#979 @ 338,207: 20x23 +#980 @ 218,403: 27x17 +#981 @ 530,937: 27x10 +#982 @ 134,958: 11x19 +#983 @ 675,514: 13x17 +#984 @ 891,383: 10x27 +#985 @ 935,748: 15x11 +#986 @ 943,956: 25x22 +#987 @ 18,649: 11x14 +#988 @ 740,243: 21x10 +#989 @ 404,309: 14x22 +#990 @ 134,19: 13x19 +#991 @ 406,381: 14x23 +#992 @ 428,395: 18x13 +#993 @ 121,971: 18x15 +#994 @ 62,794: 25x17 +#995 @ 134,403: 20x13 +#996 @ 347,567: 20x29 +#997 @ 615,358: 3x18 +#998 @ 852,28: 15x16 +#999 @ 259,379: 27x24 +#1000 @ 268,617: 20x20 +#1001 @ 956,657: 20x22 +#1002 @ 924,876: 26x18 +#1003 @ 748,411: 12x14 +#1004 @ 882,249: 29x10 +#1005 @ 979,25: 21x17 +#1006 @ 559,126: 25x28 +#1007 @ 569,712: 28x13 +#1008 @ 623,781: 25x16 +#1009 @ 422,607: 25x10 +#1010 @ 613,904: 11x26 +#1011 @ 128,411: 16x17 +#1012 @ 9,195: 22x12 +#1013 @ 83,362: 14x23 +#1014 @ 617,149: 26x18 +#1015 @ 382,436: 12x21 +#1016 @ 613,855: 23x16 +#1017 @ 956,222: 24x17 +#1018 @ 400,977: 12x15 +#1019 @ 181,333: 18x17 +#1020 @ 610,174: 25x14 +#1021 @ 825,26: 13x24 +#1022 @ 296,778: 26x14 +#1023 @ 465,135: 24x16 +#1024 @ 638,807: 10x14 +#1025 @ 547,697: 19x15 +#1026 @ 103,663: 15x21 +#1027 @ 71,113: 20x28 +#1028 @ 325,498: 27x28 +#1029 @ 525,808: 23x19 +#1030 @ 828,949: 15x27 +#1031 @ 46,699: 11x18 +#1032 @ 676,396: 29x29 +#1033 @ 552,889: 25x27 +#1034 @ 943,865: 15x22 +#1035 @ 480,310: 27x20 +#1036 @ 714,270: 29x17 +#1037 @ 647,711: 18x15 +#1038 @ 590,431: 24x16 +#1039 @ 675,554: 20x26 +#1040 @ 287,13: 17x20 +#1041 @ 886,310: 16x28 +#1042 @ 219,353: 15x22 +#1043 @ 215,12: 14x17 +#1044 @ 307,541: 29x22 +#1045 @ 151,734: 22x22 +#1046 @ 517,785: 14x24 +#1047 @ 617,89: 15x26 +#1048 @ 726,978: 13x22 +#1049 @ 404,546: 25x29 +#1050 @ 395,372: 23x15 +#1051 @ 249,583: 21x21 +#1052 @ 941,455: 23x15 +#1053 @ 801,651: 19x11 +#1054 @ 186,120: 10x22 +#1055 @ 562,177: 11x10 +#1056 @ 504,441: 14x29 +#1057 @ 401,274: 11x16 +#1058 @ 69,463: 24x28 +#1059 @ 409,955: 20x27 +#1060 @ 856,263: 26x20 +#1061 @ 747,821: 23x11 +#1062 @ 243,158: 20x22 +#1063 @ 694,957: 27x10 +#1064 @ 370,666: 29x23 +#1065 @ 74,640: 14x24 +#1066 @ 330,223: 11x21 +#1067 @ 93,659: 27x10 +#1068 @ 916,571: 20x24 +#1069 @ 681,208: 10x26 +#1070 @ 62,125: 27x28 +#1071 @ 163,527: 14x24 +#1072 @ 353,71: 23x22 +#1073 @ 938,1: 12x27 +#1074 @ 561,956: 20x26 +#1075 @ 850,491: 29x23 +#1076 @ 762,231: 16x28 +#1077 @ 391,96: 13x24 +#1078 @ 359,435: 14x17 +#1079 @ 150,326: 15x20 +#1080 @ 615,695: 29x17 +#1081 @ 477,123: 24x14 +#1082 @ 851,99: 12x26 +#1083 @ 328,627: 22x29 +#1084 @ 925,616: 14x23 +#1085 @ 59,897: 23x19 +#1086 @ 152,379: 23x15 +#1087 @ 255,415: 19x22 +#1088 @ 921,476: 19x24 +#1089 @ 946,215: 23x16 +#1090 @ 384,725: 23x11 +#1091 @ 612,353: 18x29 +#1092 @ 443,193: 22x20 +#1093 @ 41,141: 18x10 +#1094 @ 288,10: 24x19 +#1095 @ 623,908: 11x20 +#1096 @ 424,159: 27x19 +#1097 @ 896,878: 16x29 +#1098 @ 466,334: 27x18 +#1099 @ 589,755: 23x25 +#1100 @ 341,592: 13x27 +#1101 @ 220,387: 16x12 +#1102 @ 958,510: 15x9 +#1103 @ 252,435: 11x23 +#1104 @ 143,853: 15x10 +#1105 @ 841,205: 14x29 +#1106 @ 439,456: 11x19 +#1107 @ 937,828: 18x21 +#1108 @ 725,650: 24x26 +#1109 @ 851,222: 19x26 +#1110 @ 248,423: 5x4 +#1111 @ 740,325: 10x23 +#1112 @ 474,960: 20x22 +#1113 @ 943,946: 11x26 +#1114 @ 590,580: 18x25 +#1115 @ 472,370: 19x17 +#1116 @ 804,427: 29x16 +#1117 @ 679,42: 16x14 +#1118 @ 318,272: 12x28 +#1119 @ 372,878: 10x12 +#1120 @ 685,223: 16x26 +#1121 @ 853,19: 23x12 +#1122 @ 532,63: 27x18 +#1123 @ 456,320: 28x19 +#1124 @ 888,828: 25x24 +#1125 @ 348,461: 19x25 +#1126 @ 873,395: 15x13 +#1127 @ 705,451: 27x28 +#1128 @ 730,589: 11x26 +#1129 @ 667,727: 20x24 +#1130 @ 101,130: 24x23 +#1131 @ 563,688: 28x21 +#1132 @ 5,143: 26x19 +#1133 @ 522,671: 19x23 +#1134 @ 481,350: 19x23 +#1135 @ 4,125: 25x18 +#1136 @ 118,943: 26x24 +#1137 @ 371,834: 20x26 +#1138 @ 523,751: 22x10 +#1139 @ 92,181: 18x16 +#1140 @ 904,145: 20x17 +#1141 @ 280,513: 25x28 +#1142 @ 43,61: 17x19 +#1143 @ 602,643: 12x9 +#1144 @ 499,293: 12x10 +#1145 @ 155,345: 28x25 +#1146 @ 572,503: 17x21 +#1147 @ 537,595: 28x12 +#1148 @ 256,841: 18x25 +#1149 @ 621,431: 16x14 +#1150 @ 657,258: 23x12 +#1151 @ 305,436: 24x18 +#1152 @ 907,820: 12x15 +#1153 @ 65,744: 26x23 +#1154 @ 230,861: 18x17 +#1155 @ 333,12: 23x24 +#1156 @ 248,418: 23x27 +#1157 @ 469,958: 19x12 +#1158 @ 35,931: 11x14 +#1159 @ 288,563: 10x29 +#1160 @ 43,378: 14x11 +#1161 @ 88,739: 12x25 +#1162 @ 804,900: 21x29 +#1163 @ 381,76: 22x24 +#1164 @ 30,502: 16x14 +#1165 @ 527,603: 12x14 +#1166 @ 956,209: 15x19 +#1167 @ 960,546: 29x14 +#1168 @ 188,744: 10x19 +#1169 @ 175,744: 12x29 +#1170 @ 133,778: 22x21 +#1171 @ 174,205: 14x20 +#1172 @ 690,959: 21x12 +#1173 @ 619,491: 13x22 +#1174 @ 813,594: 18x12 +#1175 @ 876,607: 29x13 +#1176 @ 900,6: 19x18 +#1177 @ 967,721: 13x25 +#1178 @ 189,232: 19x26 +#1179 @ 827,553: 24x18 +#1180 @ 402,245: 28x17 +#1181 @ 162,896: 14x17 +#1182 @ 914,1: 22x27 +#1183 @ 208,134: 22x19 +#1184 @ 526,331: 29x22 +#1185 @ 145,202: 22x13 +#1186 @ 409,861: 25x13 +#1187 @ 801,730: 28x18 +#1188 @ 624,487: 20x15 +#1189 @ 393,687: 15x29 +#1190 @ 279,958: 15x29 +#1191 @ 653,395: 26x27 +#1192 @ 179,26: 10x19 +#1193 @ 260,76: 29x25 +#1194 @ 859,406: 18x10 +#1195 @ 296,932: 21x23 +#1196 @ 301,974: 16x26 +#1197 @ 727,757: 29x10 +#1198 @ 657,397: 17x20 +#1199 @ 442,937: 18x26 +#1200 @ 29,508: 19x15 +#1201 @ 636,245: 24x12 +#1202 @ 960,402: 28x12 +#1203 @ 139,256: 17x29 +#1204 @ 168,117: 23x15 +#1205 @ 770,785: 27x29 +#1206 @ 752,276: 21x21 +#1207 @ 883,889: 13x13 +#1208 @ 62,918: 21x10 +#1209 @ 163,517: 17x12 +#1210 @ 470,613: 19x11 +#1211 @ 451,661: 26x29 +#1212 @ 211,38: 19x13 +#1213 @ 539,439: 19x28 +#1214 @ 339,229: 23x21 +#1215 @ 591,542: 26x25 +#1216 @ 41,643: 29x21 +#1217 @ 806,823: 14x19 +#1218 @ 628,245: 11x18 +#1219 @ 378,619: 20x19 +#1220 @ 250,444: 14x22 +#1221 @ 713,891: 17x12 +#1222 @ 144,430: 27x21 +#1223 @ 125,200: 27x29 +#1224 @ 525,664: 15x22 +#1225 @ 369,485: 23x27 +#1226 @ 868,564: 29x20 +#1227 @ 642,700: 11x12 +#1228 @ 951,6: 14x25 +#1229 @ 532,331: 24x13 +#1230 @ 937,480: 15x12 +#1231 @ 81,65: 27x25 +#1232 @ 153,263: 11x26 +#1233 @ 970,364: 14x19 +#1234 @ 143,454: 26x27 +#1235 @ 495,574: 7x15 +#1236 @ 850,209: 20x17 +#1237 @ 126,965: 23x29 +#1238 @ 870,675: 23x28 +#1239 @ 308,376: 14x28 +#1240 @ 578,755: 14x24 +#1241 @ 844,481: 23x22 +#1242 @ 734,769: 25x16 +#1243 @ 723,219: 22x27 +#1244 @ 159,695: 23x18 +#1245 @ 754,285: 26x22 +#1246 @ 345,974: 26x23 +#1247 @ 29,69: 27x12 +#1248 @ 181,784: 15x12 +#1249 @ 682,616: 5x6 +#1250 @ 208,28: 27x28 +#1251 @ 665,234: 18x23 +#1252 @ 961,288: 11x22 +#1253 @ 363,57: 19x21 +#1254 @ 662,137: 25x24 +#1255 @ 7,41: 21x15 +#1256 @ 693,784: 12x28 +#1257 @ 186,543: 29x13 +#1258 @ 596,354: 13x10 +#1259 @ 824,705: 28x16 +#1260 @ 468,614: 25x20 +#1261 @ 542,10: 28x18 +#1262 @ 231,942: 18x29 +#1263 @ 979,39: 12x13 +#1264 @ 345,77: 16x25 +#1265 @ 715,127: 14x28 +#1266 @ 618,560: 16x16 +#1267 @ 687,397: 22x25 +#1268 @ 880,229: 16x18 +#1269 @ 806,358: 29x16 +#1270 @ 106,846: 23x29 +#1271 @ 61,299: 16x14 +#1272 @ 644,818: 19x22 +#1273 @ 557,157: 29x24 +#1274 @ 29,710: 25x28 +#1275 @ 207,585: 21x27 +#1276 @ 83,715: 26x14 +#1277 @ 325,51: 13x10 +#1278 @ 717,97: 16x12 +#1279 @ 602,139: 26x11 +#1280 @ 26,933: 29x12 +#1281 @ 815,755: 13x22 +#1282 @ 786,950: 23x21 +#1283 @ 403,978: 29x19 \ No newline at end of file From 06e6461ecb0ffd6202d3ed149d03c6b3a7ace8cd Mon Sep 17 00:00:00 2001 From: Ben Date: Tue, 4 Dec 2018 18:28:41 +0000 Subject: [PATCH 3/7] AoC day 4 --- .../4thDay/challenge1/.vscode/settings.json | 37 + AdventOfCode2018/4thDay/challenge1/a.out | Bin 0 -> 83984 bytes .../4thDay/challenge1/challenge.txt | 49 + AdventOfCode2018/4thDay/challenge1/index.js | 71 ++ AdventOfCode2018/4thDay/challenge1/input.txt | 1000 +++++++++++++++++ AdventOfCode2018/4thDay/challenge1/main.cpp | 180 +++ .../4thDay/challenge2/challenge.txt | 7 + AdventOfCode2018/4thDay/challenge2/index.js | 68 ++ AdventOfCode2018/4thDay/challenge2/input.txt | 1000 +++++++++++++++++ 9 files changed, 2412 insertions(+) create mode 100644 AdventOfCode2018/4thDay/challenge1/.vscode/settings.json create mode 100755 AdventOfCode2018/4thDay/challenge1/a.out create mode 100755 AdventOfCode2018/4thDay/challenge1/challenge.txt create mode 100644 AdventOfCode2018/4thDay/challenge1/index.js create mode 100755 AdventOfCode2018/4thDay/challenge1/input.txt create mode 100644 AdventOfCode2018/4thDay/challenge1/main.cpp create mode 100644 AdventOfCode2018/4thDay/challenge2/challenge.txt create mode 100644 AdventOfCode2018/4thDay/challenge2/index.js create mode 100755 AdventOfCode2018/4thDay/challenge2/input.txt diff --git a/AdventOfCode2018/4thDay/challenge1/.vscode/settings.json b/AdventOfCode2018/4thDay/challenge1/.vscode/settings.json new file mode 100644 index 0000000..28679f5 --- /dev/null +++ b/AdventOfCode2018/4thDay/challenge1/.vscode/settings.json @@ -0,0 +1,37 @@ +{ + "files.associations": { + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "cstddef": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "array": "cpp", + "*.tcc": "cpp", + "cstdint": "cpp", + "deque": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "new": "cpp", + "optional": "cpp", + "ostream": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "type_traits": "cpp", + "tuple": "cpp", + "typeinfo": "cpp", + "utility": "cpp" + } +} \ No newline at end of file diff --git a/AdventOfCode2018/4thDay/challenge1/a.out b/AdventOfCode2018/4thDay/challenge1/a.out new file mode 100755 index 0000000000000000000000000000000000000000..67c3fac801bff3ef477bbb939776641a788b5787 GIT binary patch literal 83984 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 0); + this.fellAsleepAt = null; + } + + sleep (fellAsleepAt) { + this.fellAsleepAt = fellAsleepAt; + } + + awake (awokeAt) { + for (let i = this.fellAsleepAt; i < awokeAt; i++) { + this.minutesAsleep[i] += 1; + } + } + + get totalSleepMinutes () { + return this.minutesAsleep.reduce((a, b) => a + b, 0); + } + + get sleepiestMinute () { + return this.minutesAsleep + .map((value, index) => ({ index, value })) + .sort((a, b) => b.value - a.value)[0].index; + } +} + +const sleep = (input) => { + const guards = {}; + const schedule = input + .split('\n') + .map((x) => x.trim()) + .sort() + .map((x) => { + const parts = x.match(/\[(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})\] (.*)/); + + return { + minute: +parts[5], + message: parts[6], + }; + }); + + let currentGuard = null; + + for (let i = 0; i < schedule.length; i++) { + const { message, minute } = schedule[i]; + + if (/Guard/.test(message)) { + const parts = message.match(/Guard #(\d+) begins shift/); + const guardId = +parts[1]; + const guard = guards[guardId] ? guards[guardId] : new Guard(guardId); + + currentGuard = guards[guardId] = guard; + } else if (message === 'falls asleep') { + currentGuard.sleep(minute); + } else if (message === 'wakes up') { + currentGuard.awake(minute); + } + } + const sleepiestGuard = Object + .keys(guards) + .map((guardId) => guards[guardId]) + .sort((a, b) => b.totalSleepMinutes - a.totalSleepMinutes)[0]; + + return sleepiestGuard.id * sleepiestGuard.sleepiestMinute; +} + +const fs = require('fs'); +console.log(sleep(fs.readFileSync("input.txt").toString())); + diff --git a/AdventOfCode2018/4thDay/challenge1/input.txt b/AdventOfCode2018/4thDay/challenge1/input.txt new file mode 100755 index 0000000..6a4973b --- /dev/null +++ b/AdventOfCode2018/4thDay/challenge1/input.txt @@ -0,0 +1,1000 @@ +[1518-09-24 00:59] wakes up +[1518-05-22 00:47] wakes up +[1518-05-08 00:02] Guard #2719 begins shift +[1518-11-12 00:00] Guard #3011 begins shift +[1518-04-12 00:57] wakes up +[1518-05-21 00:32] wakes up +[1518-11-12 00:30] falls asleep +[1518-08-23 00:39] wakes up +[1518-10-18 00:48] wakes up +[1518-09-16 00:28] falls asleep +[1518-04-07 00:54] falls asleep +[1518-10-26 00:38] wakes up +[1518-03-18 00:12] falls asleep +[1518-05-23 00:01] Guard #2027 begins shift +[1518-05-31 00:09] falls asleep +[1518-05-19 00:09] falls asleep +[1518-05-28 00:02] Guard #2719 begins shift +[1518-09-24 00:04] falls asleep +[1518-03-31 00:42] falls asleep +[1518-09-04 00:52] wakes up +[1518-08-27 23:48] Guard #1657 begins shift +[1518-08-18 00:22] falls asleep +[1518-07-28 00:45] wakes up +[1518-11-15 00:31] falls asleep +[1518-09-20 00:46] wakes up +[1518-07-11 00:54] falls asleep +[1518-09-19 00:00] Guard #2027 begins shift +[1518-06-01 00:58] wakes up +[1518-06-03 00:56] wakes up +[1518-05-18 00:52] falls asleep +[1518-10-25 00:05] falls asleep +[1518-04-15 00:33] wakes up +[1518-08-11 23:59] Guard #3023 begins shift +[1518-08-06 00:18] falls asleep +[1518-08-23 00:34] falls asleep +[1518-08-05 00:22] wakes up +[1518-04-22 23:58] Guard #1657 begins shift +[1518-06-30 00:54] wakes up +[1518-11-21 00:14] wakes up +[1518-06-18 23:54] Guard #3361 begins shift +[1518-10-27 00:51] wakes up +[1518-10-01 00:26] falls asleep +[1518-06-30 00:38] wakes up +[1518-05-05 00:33] wakes up +[1518-03-12 00:24] wakes up +[1518-07-26 00:33] wakes up +[1518-03-22 00:16] wakes up +[1518-04-21 00:58] wakes up +[1518-08-08 23:58] Guard #563 begins shift +[1518-05-23 00:25] wakes up +[1518-08-25 00:44] wakes up +[1518-04-29 00:57] wakes up +[1518-09-23 23:53] Guard #2027 begins shift +[1518-03-31 00:00] Guard #743 begins shift +[1518-04-05 00:02] Guard #3011 begins shift +[1518-10-16 00:00] Guard #659 begins shift +[1518-06-24 00:58] wakes up +[1518-05-06 23:59] Guard #2719 begins shift +[1518-03-21 00:55] falls asleep +[1518-08-21 00:29] falls asleep +[1518-07-19 00:14] falls asleep +[1518-09-03 00:01] falls asleep +[1518-10-25 00:54] wakes up +[1518-10-21 23:47] Guard #743 begins shift +[1518-05-21 00:26] falls asleep +[1518-05-11 00:47] wakes up +[1518-05-06 00:23] falls asleep +[1518-11-18 00:47] wakes up +[1518-08-04 00:04] falls asleep +[1518-06-19 00:05] wakes up +[1518-11-05 23:57] Guard #3119 begins shift +[1518-11-11 00:00] Guard #743 begins shift +[1518-09-23 00:56] wakes up +[1518-09-19 00:40] wakes up +[1518-06-16 00:00] Guard #3089 begins shift +[1518-09-15 00:43] wakes up +[1518-03-30 00:54] wakes up +[1518-06-20 00:01] falls asleep +[1518-09-18 00:00] Guard #3119 begins shift +[1518-06-15 00:25] falls asleep +[1518-08-14 00:47] falls asleep +[1518-06-29 00:48] falls asleep +[1518-08-28 00:08] wakes up +[1518-03-17 23:57] Guard #3089 begins shift +[1518-06-06 23:50] Guard #1657 begins shift +[1518-08-13 00:01] Guard #2927 begins shift +[1518-06-09 00:00] Guard #563 begins shift +[1518-08-16 00:49] wakes up +[1518-06-19 00:04] falls asleep +[1518-07-10 00:39] falls asleep +[1518-07-22 23:58] Guard #3023 begins shift +[1518-06-16 23:53] Guard #149 begins shift +[1518-05-25 23:50] Guard #1013 begins shift +[1518-05-12 00:01] Guard #3089 begins shift +[1518-08-01 00:46] wakes up +[1518-06-28 00:46] wakes up +[1518-10-08 00:34] wakes up +[1518-09-16 00:42] wakes up +[1518-09-22 00:04] Guard #1013 begins shift +[1518-09-07 00:45] falls asleep +[1518-05-12 00:49] falls asleep +[1518-09-14 00:29] falls asleep +[1518-03-29 23:54] Guard #3023 begins shift +[1518-05-06 00:03] Guard #3361 begins shift +[1518-09-03 00:30] falls asleep +[1518-07-13 00:51] wakes up +[1518-09-15 00:09] falls asleep +[1518-04-28 00:06] falls asleep +[1518-08-14 00:39] wakes up +[1518-11-04 00:08] falls asleep +[1518-08-19 00:24] wakes up +[1518-11-05 00:57] wakes up +[1518-08-23 00:02] Guard #2719 begins shift +[1518-06-08 00:53] falls asleep +[1518-05-08 00:30] falls asleep +[1518-04-06 00:49] wakes up +[1518-09-15 00:04] Guard #2719 begins shift +[1518-11-08 00:52] wakes up +[1518-05-03 23:57] Guard #2719 begins shift +[1518-08-29 00:26] wakes up +[1518-09-24 00:16] wakes up +[1518-07-21 00:53] wakes up +[1518-10-06 00:52] falls asleep +[1518-07-30 00:31] falls asleep +[1518-07-12 00:50] wakes up +[1518-08-11 00:54] wakes up +[1518-03-22 00:00] Guard #2027 begins shift +[1518-08-22 00:04] falls asleep +[1518-10-08 00:00] Guard #1657 begins shift +[1518-11-06 00:48] falls asleep +[1518-05-31 00:46] wakes up +[1518-10-28 00:40] wakes up +[1518-07-08 00:22] wakes up +[1518-06-05 23:57] Guard #1993 begins shift +[1518-05-03 00:46] wakes up +[1518-07-25 23:56] Guard #149 begins shift +[1518-07-22 00:56] wakes up +[1518-11-06 00:41] wakes up +[1518-06-07 00:50] wakes up +[1518-04-28 00:02] Guard #149 begins shift +[1518-09-27 00:08] falls asleep +[1518-10-05 00:17] falls asleep +[1518-09-23 00:01] Guard #881 begins shift +[1518-05-24 00:59] wakes up +[1518-05-30 00:01] Guard #743 begins shift +[1518-06-18 00:28] wakes up +[1518-06-11 00:08] falls asleep +[1518-08-30 00:25] falls asleep +[1518-04-29 00:08] falls asleep +[1518-05-01 00:50] wakes up +[1518-03-12 00:20] falls asleep +[1518-08-02 00:41] wakes up +[1518-10-14 00:58] wakes up +[1518-10-16 23:53] Guard #2843 begins shift +[1518-11-06 00:58] wakes up +[1518-04-19 00:03] Guard #2719 begins shift +[1518-07-23 23:59] Guard #3083 begins shift +[1518-04-21 00:41] falls asleep +[1518-11-18 00:54] falls asleep +[1518-04-03 00:45] falls asleep +[1518-05-03 00:58] wakes up +[1518-06-27 00:20] wakes up +[1518-08-26 00:17] falls asleep +[1518-05-04 00:44] falls asleep +[1518-05-03 00:16] wakes up +[1518-04-03 00:04] Guard #2843 begins shift +[1518-09-04 00:03] Guard #3023 begins shift +[1518-03-11 00:00] Guard #1163 begins shift +[1518-05-03 00:57] falls asleep +[1518-06-16 00:51] wakes up +[1518-05-04 00:41] wakes up +[1518-09-25 00:00] Guard #1163 begins shift +[1518-04-02 00:56] wakes up +[1518-07-12 00:39] falls asleep +[1518-06-26 00:52] falls asleep +[1518-03-15 00:00] Guard #563 begins shift +[1518-06-07 00:22] falls asleep +[1518-04-19 00:31] falls asleep +[1518-05-11 00:04] Guard #2927 begins shift +[1518-04-03 00:35] wakes up +[1518-09-30 00:01] Guard #1993 begins shift +[1518-11-14 23:57] Guard #2017 begins shift +[1518-05-16 00:41] falls asleep +[1518-09-23 00:51] wakes up +[1518-08-27 00:35] falls asleep +[1518-04-29 00:22] falls asleep +[1518-03-30 00:27] wakes up +[1518-09-07 00:13] wakes up +[1518-11-17 00:00] Guard #1993 begins shift +[1518-11-20 23:46] Guard #3361 begins shift +[1518-03-22 00:25] falls asleep +[1518-05-01 00:38] wakes up +[1518-11-02 23:56] Guard #659 begins shift +[1518-09-22 00:39] falls asleep +[1518-08-13 23:47] Guard #2027 begins shift +[1518-09-30 00:11] wakes up +[1518-06-11 23:58] Guard #2857 begins shift +[1518-08-21 00:53] wakes up +[1518-06-23 00:00] falls asleep +[1518-10-22 00:03] falls asleep +[1518-11-20 00:55] wakes up +[1518-05-17 23:57] Guard #3119 begins shift +[1518-06-14 23:57] Guard #1163 begins shift +[1518-08-19 00:00] Guard #2843 begins shift +[1518-07-11 00:08] falls asleep +[1518-10-01 00:03] Guard #2857 begins shift +[1518-10-23 00:34] wakes up +[1518-04-18 00:13] falls asleep +[1518-05-06 00:39] wakes up +[1518-08-30 00:00] Guard #2843 begins shift +[1518-03-30 00:46] falls asleep +[1518-09-18 00:25] wakes up +[1518-08-09 23:56] Guard #3119 begins shift +[1518-09-15 23:57] Guard #3023 begins shift +[1518-04-19 00:50] wakes up +[1518-08-03 00:22] wakes up +[1518-03-21 00:56] wakes up +[1518-03-24 23:57] Guard #3011 begins shift +[1518-03-22 00:45] wakes up +[1518-04-24 00:58] wakes up +[1518-08-27 00:45] wakes up +[1518-06-22 00:23] falls asleep +[1518-09-16 23:58] Guard #659 begins shift +[1518-03-30 00:01] falls asleep +[1518-04-04 00:46] falls asleep +[1518-10-06 00:54] wakes up +[1518-09-18 00:09] falls asleep +[1518-05-22 00:55] falls asleep +[1518-11-11 00:53] falls asleep +[1518-06-20 00:38] wakes up +[1518-06-14 00:58] wakes up +[1518-08-16 00:04] Guard #149 begins shift +[1518-04-04 00:57] wakes up +[1518-07-26 00:59] wakes up +[1518-09-29 00:03] Guard #563 begins shift +[1518-09-10 00:21] falls asleep +[1518-09-02 23:47] Guard #1993 begins shift +[1518-10-08 00:52] wakes up +[1518-10-18 00:45] falls asleep +[1518-04-22 00:33] wakes up +[1518-08-26 00:47] wakes up +[1518-11-02 00:04] Guard #2857 begins shift +[1518-03-25 00:44] falls asleep +[1518-07-17 00:07] falls asleep +[1518-04-05 00:26] falls asleep +[1518-08-11 00:43] falls asleep +[1518-06-13 23:59] Guard #3023 begins shift +[1518-06-29 00:00] Guard #2017 begins shift +[1518-11-20 00:36] wakes up +[1518-07-13 23:56] Guard #2857 begins shift +[1518-09-07 23:52] Guard #149 begins shift +[1518-04-24 23:58] Guard #3011 begins shift +[1518-03-19 00:47] falls asleep +[1518-07-04 23:56] Guard #653 begins shift +[1518-06-21 00:30] falls asleep +[1518-03-13 00:15] wakes up +[1518-03-13 00:23] falls asleep +[1518-08-10 00:21] falls asleep +[1518-10-01 23:47] Guard #1657 begins shift +[1518-03-26 00:03] Guard #1163 begins shift +[1518-08-18 00:53] falls asleep +[1518-05-02 00:12] falls asleep +[1518-05-26 00:42] falls asleep +[1518-10-31 00:21] wakes up +[1518-05-14 23:59] Guard #1013 begins shift +[1518-05-25 00:48] wakes up +[1518-08-25 00:52] falls asleep +[1518-06-17 00:05] falls asleep +[1518-06-16 00:14] falls asleep +[1518-04-16 00:51] wakes up +[1518-05-18 23:56] Guard #2017 begins shift +[1518-06-22 00:45] wakes up +[1518-05-30 00:59] wakes up +[1518-07-17 00:14] falls asleep +[1518-10-19 00:20] falls asleep +[1518-05-12 23:52] Guard #3361 begins shift +[1518-09-26 00:27] falls asleep +[1518-09-05 00:00] Guard #3023 begins shift +[1518-11-22 23:58] Guard #2719 begins shift +[1518-09-12 00:00] falls asleep +[1518-08-06 00:34] wakes up +[1518-06-20 00:43] falls asleep +[1518-06-08 00:59] wakes up +[1518-08-28 00:03] falls asleep +[1518-09-02 00:08] falls asleep +[1518-08-29 00:56] wakes up +[1518-07-01 00:56] wakes up +[1518-04-13 00:00] Guard #2719 begins shift +[1518-05-29 00:55] wakes up +[1518-04-14 00:54] falls asleep +[1518-04-20 00:26] falls asleep +[1518-06-20 00:50] wakes up +[1518-09-01 00:52] falls asleep +[1518-11-10 00:21] falls asleep +[1518-06-18 00:26] falls asleep +[1518-07-23 00:26] falls asleep +[1518-08-18 00:41] wakes up +[1518-07-29 00:20] wakes up +[1518-03-21 00:31] wakes up +[1518-04-14 00:55] wakes up +[1518-08-01 00:35] falls asleep +[1518-08-13 00:07] falls asleep +[1518-06-04 00:03] falls asleep +[1518-06-01 00:00] Guard #2857 begins shift +[1518-07-20 00:18] falls asleep +[1518-05-09 00:02] Guard #3011 begins shift +[1518-10-27 00:37] falls asleep +[1518-07-30 23:59] Guard #2719 begins shift +[1518-05-13 00:00] falls asleep +[1518-03-24 00:29] wakes up +[1518-10-25 00:49] falls asleep +[1518-03-31 00:36] wakes up +[1518-11-17 00:08] falls asleep +[1518-05-26 00:01] falls asleep +[1518-07-21 23:57] Guard #149 begins shift +[1518-06-18 00:36] falls asleep +[1518-07-09 00:34] falls asleep +[1518-06-03 00:43] falls asleep +[1518-04-15 00:38] falls asleep +[1518-06-24 23:56] Guard #2719 begins shift +[1518-07-25 00:29] falls asleep +[1518-03-21 00:05] falls asleep +[1518-10-20 00:04] Guard #1163 begins shift +[1518-04-27 00:51] wakes up +[1518-07-07 00:02] Guard #2843 begins shift +[1518-07-18 00:58] wakes up +[1518-04-11 00:04] Guard #2719 begins shift +[1518-08-17 00:57] wakes up +[1518-11-11 00:57] wakes up +[1518-06-18 00:48] wakes up +[1518-11-11 00:42] wakes up +[1518-06-21 00:55] falls asleep +[1518-10-12 00:54] wakes up +[1518-08-15 00:47] wakes up +[1518-06-24 00:57] falls asleep +[1518-10-14 00:16] falls asleep +[1518-03-28 00:30] wakes up +[1518-05-26 00:47] wakes up +[1518-06-02 00:04] Guard #743 begins shift +[1518-04-12 00:01] Guard #2927 begins shift +[1518-07-18 00:00] Guard #3083 begins shift +[1518-08-11 00:31] wakes up +[1518-06-27 00:33] falls asleep +[1518-08-10 00:51] wakes up +[1518-04-27 00:26] falls asleep +[1518-07-01 00:37] wakes up +[1518-07-01 00:00] Guard #2017 begins shift +[1518-10-26 00:58] wakes up +[1518-11-17 00:53] wakes up +[1518-06-23 23:56] Guard #3089 begins shift +[1518-07-27 00:38] wakes up +[1518-11-17 00:39] wakes up +[1518-04-14 00:29] wakes up +[1518-05-26 00:53] wakes up +[1518-07-27 00:02] Guard #2857 begins shift +[1518-08-07 00:06] falls asleep +[1518-08-23 00:57] wakes up +[1518-07-22 00:30] falls asleep +[1518-08-01 00:04] Guard #653 begins shift +[1518-04-08 00:33] wakes up +[1518-08-17 00:00] Guard #3023 begins shift +[1518-03-13 00:09] falls asleep +[1518-04-24 00:29] falls asleep +[1518-05-28 00:07] falls asleep +[1518-08-08 00:08] falls asleep +[1518-07-10 00:56] wakes up +[1518-03-12 23:56] Guard #881 begins shift +[1518-03-11 00:09] falls asleep +[1518-09-08 00:04] falls asleep +[1518-08-01 23:59] Guard #3119 begins shift +[1518-06-19 00:08] falls asleep +[1518-05-04 00:51] wakes up +[1518-10-13 00:35] wakes up +[1518-06-11 00:00] Guard #2027 begins shift +[1518-05-01 00:47] falls asleep +[1518-08-15 00:29] falls asleep +[1518-06-28 00:14] falls asleep +[1518-09-26 23:58] Guard #1163 begins shift +[1518-10-10 00:54] wakes up +[1518-08-25 00:53] wakes up +[1518-07-31 00:37] wakes up +[1518-09-18 00:48] falls asleep +[1518-07-09 00:47] wakes up +[1518-11-17 00:23] falls asleep +[1518-08-26 00:03] Guard #2719 begins shift +[1518-06-17 00:40] wakes up +[1518-06-08 00:29] wakes up +[1518-03-24 00:03] Guard #1657 begins shift +[1518-09-26 00:52] wakes up +[1518-08-14 23:59] Guard #2843 begins shift +[1518-08-06 00:01] Guard #149 begins shift +[1518-11-23 00:22] falls asleep +[1518-10-19 00:45] wakes up +[1518-09-27 00:49] wakes up +[1518-06-26 00:20] falls asleep +[1518-09-07 00:57] wakes up +[1518-11-14 00:04] Guard #743 begins shift +[1518-03-16 00:12] wakes up +[1518-09-18 00:54] wakes up +[1518-10-29 23:58] Guard #3119 begins shift +[1518-04-13 23:49] Guard #1013 begins shift +[1518-09-19 00:47] falls asleep +[1518-11-07 23:58] Guard #3119 begins shift +[1518-06-21 00:00] Guard #881 begins shift +[1518-09-01 00:53] wakes up +[1518-03-20 23:50] Guard #881 begins shift +[1518-09-10 00:55] wakes up +[1518-07-29 00:34] falls asleep +[1518-09-05 00:18] falls asleep +[1518-07-03 00:58] wakes up +[1518-04-28 00:52] wakes up +[1518-08-08 00:33] wakes up +[1518-04-22 00:00] falls asleep +[1518-03-19 00:15] wakes up +[1518-08-14 00:52] wakes up +[1518-07-11 00:56] wakes up +[1518-07-14 23:56] Guard #2017 begins shift +[1518-08-04 23:57] Guard #2027 begins shift +[1518-07-03 00:55] falls asleep +[1518-10-30 00:24] falls asleep +[1518-11-07 00:09] falls asleep +[1518-05-12 00:22] falls asleep +[1518-08-17 23:59] Guard #743 begins shift +[1518-08-23 00:50] falls asleep +[1518-10-29 00:04] Guard #1163 begins shift +[1518-07-04 00:54] wakes up +[1518-03-16 00:59] wakes up +[1518-08-25 00:14] falls asleep +[1518-10-30 23:52] Guard #2843 begins shift +[1518-05-17 00:54] wakes up +[1518-06-04 00:38] wakes up +[1518-05-16 00:46] wakes up +[1518-09-08 00:43] wakes up +[1518-09-01 00:21] falls asleep +[1518-06-17 23:59] Guard #1013 begins shift +[1518-09-27 23:59] Guard #3119 begins shift +[1518-05-17 00:03] Guard #1657 begins shift +[1518-04-21 23:46] Guard #2843 begins shift +[1518-09-11 00:35] falls asleep +[1518-10-01 00:31] wakes up +[1518-08-12 00:39] wakes up +[1518-10-04 00:01] Guard #1013 begins shift +[1518-08-02 23:50] Guard #1657 begins shift +[1518-05-04 00:36] falls asleep +[1518-06-05 00:39] falls asleep +[1518-07-04 00:36] wakes up +[1518-05-19 00:53] falls asleep +[1518-10-07 00:59] wakes up +[1518-06-30 00:49] falls asleep +[1518-06-17 00:18] wakes up +[1518-06-25 00:39] wakes up +[1518-09-28 00:31] falls asleep +[1518-08-24 00:24] wakes up +[1518-08-10 00:08] falls asleep +[1518-04-06 00:02] Guard #1163 begins shift +[1518-04-11 00:38] wakes up +[1518-07-02 00:52] wakes up +[1518-07-07 00:57] wakes up +[1518-04-30 00:15] falls asleep +[1518-04-17 00:48] wakes up +[1518-03-16 00:25] falls asleep +[1518-10-06 00:40] wakes up +[1518-10-13 00:00] falls asleep +[1518-05-30 23:56] Guard #2857 begins shift +[1518-06-06 00:54] wakes up +[1518-04-15 00:57] wakes up +[1518-06-21 00:57] wakes up +[1518-10-24 23:51] Guard #149 begins shift +[1518-03-26 00:44] wakes up +[1518-08-31 00:52] wakes up +[1518-03-28 00:51] falls asleep +[1518-10-25 23:47] Guard #3023 begins shift +[1518-07-14 00:52] wakes up +[1518-05-09 00:19] falls asleep +[1518-10-06 00:18] falls asleep +[1518-08-10 00:18] wakes up +[1518-05-19 00:28] wakes up +[1518-08-04 00:36] wakes up +[1518-06-13 00:49] falls asleep +[1518-04-16 00:09] falls asleep +[1518-05-20 00:38] wakes up +[1518-04-24 00:01] Guard #2719 begins shift +[1518-05-10 00:58] wakes up +[1518-11-23 00:41] wakes up +[1518-04-17 00:21] falls asleep +[1518-11-21 00:00] falls asleep +[1518-08-29 00:15] falls asleep +[1518-08-19 23:57] Guard #2843 begins shift +[1518-11-01 00:59] wakes up +[1518-05-03 00:00] Guard #2857 begins shift +[1518-10-02 00:32] wakes up +[1518-08-07 23:57] Guard #3089 begins shift +[1518-10-29 00:51] falls asleep +[1518-03-17 00:08] falls asleep +[1518-03-19 00:32] falls asleep +[1518-07-30 00:41] wakes up +[1518-07-14 00:11] falls asleep +[1518-07-16 00:04] Guard #2927 begins shift +[1518-03-14 00:30] falls asleep +[1518-10-05 00:46] wakes up +[1518-08-06 23:57] Guard #1993 begins shift +[1518-04-23 00:44] falls asleep +[1518-10-18 00:26] wakes up +[1518-04-15 00:52] wakes up +[1518-04-01 00:03] Guard #2719 begins shift +[1518-11-05 00:00] Guard #149 begins shift +[1518-05-07 00:17] falls asleep +[1518-10-10 00:00] Guard #3361 begins shift +[1518-07-28 00:00] Guard #743 begins shift +[1518-03-31 00:34] falls asleep +[1518-05-05 00:11] falls asleep +[1518-07-29 00:16] falls asleep +[1518-08-21 23:50] Guard #2927 begins shift +[1518-03-22 00:49] falls asleep +[1518-06-07 23:56] Guard #1163 begins shift +[1518-10-15 00:00] Guard #2027 begins shift +[1518-08-24 00:34] falls asleep +[1518-07-28 00:41] falls asleep +[1518-11-13 00:49] wakes up +[1518-07-02 00:32] falls asleep +[1518-09-21 00:17] falls asleep +[1518-09-02 00:00] Guard #3011 begins shift +[1518-04-15 00:02] falls asleep +[1518-09-26 00:00] Guard #1657 begins shift +[1518-05-03 00:12] falls asleep +[1518-09-09 00:44] wakes up +[1518-04-04 00:36] wakes up +[1518-05-23 23:59] Guard #3083 begins shift +[1518-04-07 00:58] wakes up +[1518-05-18 00:53] wakes up +[1518-05-15 00:56] wakes up +[1518-08-17 00:25] falls asleep +[1518-05-13 00:39] wakes up +[1518-06-24 00:18] falls asleep +[1518-04-07 00:50] wakes up +[1518-05-17 00:32] wakes up +[1518-06-19 00:32] wakes up +[1518-07-09 00:01] Guard #2719 begins shift +[1518-03-13 00:53] wakes up +[1518-06-02 00:44] wakes up +[1518-10-31 00:01] falls asleep +[1518-10-05 00:00] Guard #1013 begins shift +[1518-06-25 00:36] falls asleep +[1518-05-08 00:37] wakes up +[1518-07-02 00:49] falls asleep +[1518-05-12 00:55] wakes up +[1518-05-21 00:00] Guard #3023 begins shift +[1518-07-04 00:51] falls asleep +[1518-08-25 00:02] Guard #3011 begins shift +[1518-10-29 00:52] wakes up +[1518-04-03 00:50] wakes up +[1518-04-16 00:43] falls asleep +[1518-11-06 00:28] falls asleep +[1518-04-10 00:05] falls asleep +[1518-06-19 00:15] wakes up +[1518-04-14 00:06] wakes up +[1518-06-27 00:34] wakes up +[1518-05-27 00:52] wakes up +[1518-10-05 00:59] wakes up +[1518-09-19 00:58] wakes up +[1518-05-31 00:11] wakes up +[1518-09-14 00:59] wakes up +[1518-10-28 00:35] falls asleep +[1518-08-11 00:04] Guard #1163 begins shift +[1518-08-29 00:04] Guard #881 begins shift +[1518-09-25 00:22] falls asleep +[1518-06-30 00:04] Guard #1657 begins shift +[1518-05-04 00:56] wakes up +[1518-11-07 00:13] wakes up +[1518-06-30 00:19] falls asleep +[1518-08-22 00:09] wakes up +[1518-08-18 00:55] wakes up +[1518-05-28 00:46] wakes up +[1518-09-04 00:10] falls asleep +[1518-08-30 00:43] wakes up +[1518-03-11 00:32] wakes up +[1518-04-27 00:00] Guard #743 begins shift +[1518-10-20 00:26] wakes up +[1518-05-20 00:00] Guard #743 begins shift +[1518-04-03 23:59] Guard #3011 begins shift +[1518-07-29 00:59] wakes up +[1518-07-17 00:10] wakes up +[1518-04-07 00:04] Guard #2843 begins shift +[1518-07-15 00:52] wakes up +[1518-11-22 00:19] falls asleep +[1518-04-23 00:48] wakes up +[1518-07-19 00:52] wakes up +[1518-04-07 23:57] Guard #1163 begins shift +[1518-07-08 00:01] Guard #1993 begins shift +[1518-07-23 00:46] wakes up +[1518-07-21 00:01] Guard #3119 begins shift +[1518-03-16 00:03] Guard #3083 begins shift +[1518-03-28 00:56] wakes up +[1518-09-30 00:09] falls asleep +[1518-09-07 00:02] Guard #2017 begins shift +[1518-07-10 00:01] Guard #1993 begins shift +[1518-10-15 00:53] wakes up +[1518-10-08 00:18] falls asleep +[1518-06-26 00:54] wakes up +[1518-03-12 00:36] falls asleep +[1518-03-16 00:06] falls asleep +[1518-08-06 00:47] wakes up +[1518-10-22 00:29] wakes up +[1518-09-02 00:58] wakes up +[1518-07-18 00:12] falls asleep +[1518-09-19 23:58] Guard #1013 begins shift +[1518-08-31 00:10] falls asleep +[1518-03-24 00:18] falls asleep +[1518-04-18 00:30] wakes up +[1518-11-09 00:30] falls asleep +[1518-05-21 00:38] falls asleep +[1518-10-29 00:23] wakes up +[1518-10-23 00:00] Guard #2027 begins shift +[1518-10-09 00:09] falls asleep +[1518-09-11 00:53] falls asleep +[1518-07-04 00:32] falls asleep +[1518-07-31 00:32] falls asleep +[1518-09-01 00:58] wakes up +[1518-07-24 00:50] wakes up +[1518-07-26 00:49] falls asleep +[1518-11-18 00:15] falls asleep +[1518-04-13 00:31] falls asleep +[1518-09-03 00:22] wakes up +[1518-08-30 23:58] Guard #3361 begins shift +[1518-04-30 00:52] wakes up +[1518-06-15 00:56] falls asleep +[1518-07-02 00:56] falls asleep +[1518-04-19 23:56] Guard #1657 begins shift +[1518-10-09 00:03] Guard #1657 begins shift +[1518-10-07 00:02] Guard #1163 begins shift +[1518-05-24 00:29] falls asleep +[1518-05-23 00:06] falls asleep +[1518-07-10 23:58] Guard #1993 begins shift +[1518-07-03 00:00] Guard #743 begins shift +[1518-06-14 00:54] falls asleep +[1518-09-19 00:39] falls asleep +[1518-07-19 00:01] Guard #2017 begins shift +[1518-11-11 00:18] falls asleep +[1518-04-17 00:02] Guard #1013 begins shift +[1518-05-02 00:56] wakes up +[1518-08-29 00:55] falls asleep +[1518-11-17 00:11] wakes up +[1518-04-02 00:28] falls asleep +[1518-04-28 23:57] Guard #3083 begins shift +[1518-07-28 00:28] wakes up +[1518-09-22 00:47] wakes up +[1518-03-20 00:00] Guard #1657 begins shift +[1518-07-20 00:25] wakes up +[1518-09-06 00:52] wakes up +[1518-10-18 00:38] wakes up +[1518-07-24 00:25] falls asleep +[1518-11-07 00:02] Guard #149 begins shift +[1518-08-15 00:52] falls asleep +[1518-10-20 00:12] falls asleep +[1518-04-09 00:56] wakes up +[1518-09-26 00:18] wakes up +[1518-09-06 00:02] falls asleep +[1518-03-14 00:03] Guard #149 begins shift +[1518-06-06 00:38] falls asleep +[1518-11-13 00:44] falls asleep +[1518-10-23 23:57] Guard #1153 begins shift +[1518-10-28 00:50] falls asleep +[1518-05-14 00:57] wakes up +[1518-09-13 00:36] falls asleep +[1518-09-25 00:42] wakes up +[1518-11-22 00:51] wakes up +[1518-05-09 00:35] wakes up +[1518-10-31 23:59] Guard #2927 begins shift +[1518-11-14 00:26] wakes up +[1518-07-27 00:33] falls asleep +[1518-11-02 00:55] wakes up +[1518-04-08 23:58] Guard #3119 begins shift +[1518-11-16 00:08] falls asleep +[1518-09-30 00:37] falls asleep +[1518-04-10 00:59] wakes up +[1518-10-15 00:10] falls asleep +[1518-08-02 00:58] wakes up +[1518-07-05 00:59] wakes up +[1518-05-05 00:45] falls asleep +[1518-04-06 00:10] falls asleep +[1518-10-18 00:11] falls asleep +[1518-07-12 00:00] Guard #149 begins shift +[1518-06-24 00:40] wakes up +[1518-09-05 00:28] wakes up +[1518-03-18 00:38] wakes up +[1518-10-18 00:36] falls asleep +[1518-11-16 00:19] wakes up +[1518-08-05 00:06] falls asleep +[1518-04-26 00:00] Guard #3083 begins shift +[1518-03-22 00:52] wakes up +[1518-10-21 00:23] falls asleep +[1518-04-02 00:47] falls asleep +[1518-04-20 00:41] wakes up +[1518-11-19 23:57] Guard #1013 begins shift +[1518-09-26 00:58] wakes up +[1518-06-26 00:00] Guard #2927 begins shift +[1518-09-01 00:01] Guard #1657 begins shift +[1518-10-22 00:44] wakes up +[1518-11-20 00:50] falls asleep +[1518-10-25 00:41] wakes up +[1518-11-02 00:12] falls asleep +[1518-06-22 00:28] wakes up +[1518-11-04 00:39] wakes up +[1518-05-27 00:04] Guard #653 begins shift +[1518-07-24 00:46] falls asleep +[1518-11-14 00:08] falls asleep +[1518-03-19 00:40] wakes up +[1518-09-03 00:50] wakes up +[1518-07-16 00:59] wakes up +[1518-11-12 00:45] wakes up +[1518-10-11 00:17] falls asleep +[1518-10-30 00:40] wakes up +[1518-08-03 00:00] falls asleep +[1518-03-18 00:46] wakes up +[1518-08-06 00:44] falls asleep +[1518-10-11 00:50] wakes up +[1518-05-21 00:57] wakes up +[1518-09-01 00:43] wakes up +[1518-09-11 00:00] Guard #3011 begins shift +[1518-09-13 00:55] wakes up +[1518-10-27 00:04] Guard #149 begins shift +[1518-05-02 00:03] Guard #149 begins shift +[1518-09-14 00:00] Guard #3119 begins shift +[1518-07-08 00:14] falls asleep +[1518-06-02 00:28] falls asleep +[1518-03-19 00:57] wakes up +[1518-08-13 00:22] wakes up +[1518-05-01 00:04] Guard #653 begins shift +[1518-06-19 00:23] falls asleep +[1518-11-18 00:02] Guard #3011 begins shift +[1518-11-13 00:17] falls asleep +[1518-07-22 00:50] falls asleep +[1518-04-15 00:55] falls asleep +[1518-07-02 00:58] wakes up +[1518-03-28 00:28] falls asleep +[1518-07-01 00:50] falls asleep +[1518-05-31 00:35] falls asleep +[1518-05-13 00:27] wakes up +[1518-10-17 00:05] falls asleep +[1518-06-15 00:57] wakes up +[1518-11-10 00:45] wakes up +[1518-04-04 00:18] falls asleep +[1518-09-20 23:57] Guard #743 begins shift +[1518-10-29 00:11] falls asleep +[1518-05-01 00:25] falls asleep +[1518-11-22 00:40] wakes up +[1518-11-13 00:02] falls asleep +[1518-09-11 00:50] wakes up +[1518-09-12 23:56] Guard #653 begins shift +[1518-07-11 00:38] wakes up +[1518-03-22 23:59] Guard #659 begins shift +[1518-04-09 00:18] falls asleep +[1518-08-23 23:53] Guard #2927 begins shift +[1518-07-02 00:04] Guard #1993 begins shift +[1518-08-21 00:00] Guard #1993 begins shift +[1518-10-05 00:53] falls asleep +[1518-03-22 00:14] falls asleep +[1518-09-06 00:15] wakes up +[1518-09-24 00:57] falls asleep +[1518-08-14 00:03] falls asleep +[1518-05-25 00:41] falls asleep +[1518-04-23 00:28] wakes up +[1518-04-12 00:45] wakes up +[1518-05-10 00:14] falls asleep +[1518-03-26 23:54] Guard #3023 begins shift +[1518-05-11 00:54] wakes up +[1518-11-05 00:29] falls asleep +[1518-10-03 00:34] wakes up +[1518-04-09 23:50] Guard #653 begins shift +[1518-04-28 00:22] wakes up +[1518-07-07 00:08] falls asleep +[1518-03-28 00:01] Guard #2927 begins shift +[1518-07-05 23:58] Guard #1153 begins shift +[1518-11-23 00:37] falls asleep +[1518-09-05 00:59] wakes up +[1518-04-10 00:56] falls asleep +[1518-11-18 00:44] falls asleep +[1518-10-08 00:39] falls asleep +[1518-09-10 00:02] Guard #2017 begins shift +[1518-03-19 00:02] falls asleep +[1518-04-01 00:07] falls asleep +[1518-10-05 23:57] Guard #3023 begins shift +[1518-11-01 00:46] falls asleep +[1518-07-03 00:34] falls asleep +[1518-10-23 00:18] falls asleep +[1518-07-07 00:46] wakes up +[1518-07-26 00:07] falls asleep +[1518-08-27 00:04] Guard #3011 begins shift +[1518-04-08 00:17] falls asleep +[1518-05-22 00:56] wakes up +[1518-10-22 00:36] falls asleep +[1518-04-14 00:02] falls asleep +[1518-07-25 00:37] wakes up +[1518-08-03 23:50] Guard #2843 begins shift +[1518-03-31 00:56] wakes up +[1518-07-04 00:00] Guard #3023 begins shift +[1518-11-16 00:00] Guard #2027 begins shift +[1518-03-27 00:01] falls asleep +[1518-09-01 00:57] falls asleep +[1518-11-22 00:49] falls asleep +[1518-07-05 00:38] falls asleep +[1518-05-27 00:29] falls asleep +[1518-08-12 00:32] falls asleep +[1518-05-22 00:34] falls asleep +[1518-05-11 00:21] falls asleep +[1518-06-19 23:52] Guard #2927 begins shift +[1518-04-23 00:26] falls asleep +[1518-03-11 23:56] Guard #1993 begins shift +[1518-08-16 00:14] falls asleep +[1518-10-30 00:56] wakes up +[1518-03-18 00:43] falls asleep +[1518-11-03 23:58] Guard #881 begins shift +[1518-03-14 00:39] wakes up +[1518-09-12 00:57] wakes up +[1518-11-17 00:47] falls asleep +[1518-04-16 00:38] wakes up +[1518-09-23 00:54] falls asleep +[1518-08-20 00:39] wakes up +[1518-06-08 00:25] falls asleep +[1518-03-20 00:10] falls asleep +[1518-07-01 00:21] falls asleep +[1518-03-24 00:44] wakes up +[1518-07-17 00:59] wakes up +[1518-06-23 00:38] wakes up +[1518-04-02 00:02] Guard #2857 begins shift +[1518-07-15 00:51] falls asleep +[1518-09-11 23:52] Guard #1163 begins shift +[1518-04-26 00:40] falls asleep +[1518-03-29 00:20] falls asleep +[1518-07-30 00:00] Guard #3361 begins shift +[1518-06-05 00:49] wakes up +[1518-10-26 00:00] falls asleep +[1518-07-03 00:51] wakes up +[1518-10-12 00:46] falls asleep +[1518-10-21 00:57] wakes up +[1518-07-25 00:02] falls asleep +[1518-04-15 23:56] Guard #3119 begins shift +[1518-10-17 00:19] wakes up +[1518-06-05 00:45] falls asleep +[1518-07-28 00:17] falls asleep +[1518-06-22 00:43] falls asleep +[1518-07-25 00:24] wakes up +[1518-09-20 00:40] falls asleep +[1518-07-17 00:00] Guard #743 begins shift +[1518-03-16 23:59] Guard #2017 begins shift +[1518-09-05 00:36] falls asleep +[1518-08-11 00:14] falls asleep +[1518-04-12 00:48] falls asleep +[1518-05-20 00:23] falls asleep +[1518-04-11 00:33] falls asleep +[1518-09-08 23:58] Guard #1163 begins shift +[1518-09-09 00:09] falls asleep +[1518-04-02 00:40] wakes up +[1518-06-11 00:54] wakes up +[1518-09-05 23:50] Guard #2017 begins shift +[1518-11-22 00:04] falls asleep +[1518-04-29 00:19] wakes up +[1518-05-19 00:57] wakes up +[1518-05-26 00:34] wakes up +[1518-05-17 00:10] falls asleep +[1518-04-01 00:54] wakes up +[1518-04-18 00:00] Guard #3083 begins shift +[1518-04-25 00:59] wakes up +[1518-06-22 00:02] Guard #2027 begins shift +[1518-08-20 00:34] falls asleep +[1518-05-25 00:00] Guard #3023 begins shift +[1518-07-20 00:03] Guard #3011 begins shift +[1518-03-27 00:59] wakes up +[1518-06-05 00:42] wakes up +[1518-08-19 00:19] falls asleep +[1518-11-23 00:32] wakes up +[1518-04-12 00:26] falls asleep +[1518-10-10 00:39] falls asleep +[1518-11-15 00:51] wakes up +[1518-09-27 00:38] wakes up +[1518-10-12 23:53] Guard #653 begins shift +[1518-05-03 00:25] falls asleep +[1518-10-09 00:49] wakes up +[1518-11-08 00:30] falls asleep +[1518-05-26 00:50] falls asleep +[1518-11-13 00:41] wakes up +[1518-09-30 00:41] wakes up +[1518-04-14 00:22] falls asleep +[1518-05-04 00:54] falls asleep +[1518-05-05 00:03] Guard #2027 begins shift +[1518-04-05 00:44] wakes up +[1518-07-24 00:42] wakes up +[1518-06-07 00:08] wakes up +[1518-10-02 00:00] falls asleep +[1518-06-12 00:16] falls asleep +[1518-04-10 00:34] wakes up +[1518-07-13 00:02] Guard #2719 begins shift +[1518-04-21 00:03] Guard #881 begins shift +[1518-10-11 00:04] Guard #2927 begins shift +[1518-06-02 23:56] Guard #3011 begins shift +[1518-03-12 00:38] wakes up +[1518-06-26 23:48] Guard #3023 begins shift +[1518-05-16 00:07] falls asleep +[1518-04-28 00:48] falls asleep +[1518-05-22 00:02] Guard #881 begins shift +[1518-03-18 23:48] Guard #3089 begins shift +[1518-08-08 00:57] wakes up +[1518-09-21 00:21] wakes up +[1518-04-29 23:58] Guard #2843 begins shift +[1518-03-17 00:52] wakes up +[1518-06-10 00:00] Guard #563 begins shift +[1518-09-28 00:57] wakes up +[1518-05-16 00:22] wakes up +[1518-04-03 00:13] falls asleep +[1518-10-04 00:44] wakes up +[1518-06-27 00:01] falls asleep +[1518-06-26 00:49] wakes up +[1518-05-29 00:28] falls asleep +[1518-06-29 00:56] wakes up +[1518-11-20 00:21] falls asleep +[1518-10-03 00:07] falls asleep +[1518-05-16 00:00] Guard #1993 begins shift +[1518-09-06 00:34] falls asleep +[1518-05-17 00:38] falls asleep +[1518-07-28 23:56] Guard #2857 begins shift +[1518-06-13 00:54] wakes up +[1518-06-01 00:30] falls asleep +[1518-11-09 00:57] wakes up +[1518-11-22 00:06] wakes up +[1518-10-04 00:09] falls asleep +[1518-10-19 00:00] Guard #3023 begins shift +[1518-11-09 23:58] Guard #881 begins shift +[1518-10-28 00:02] Guard #2719 begins shift +[1518-04-13 00:45] wakes up +[1518-05-15 00:35] falls asleep +[1518-10-12 00:00] Guard #3119 begins shift +[1518-04-07 00:46] falls asleep +[1518-03-29 00:03] Guard #2027 begins shift +[1518-03-24 00:43] falls asleep +[1518-04-26 00:49] wakes up +[1518-09-26 00:15] falls asleep +[1518-08-24 00:40] wakes up +[1518-04-14 23:54] Guard #2857 begins shift +[1518-03-20 00:32] wakes up +[1518-10-13 00:50] falls asleep +[1518-11-12 23:48] Guard #3119 begins shift +[1518-07-07 00:56] falls asleep +[1518-10-21 00:03] Guard #3023 begins shift +[1518-08-15 00:53] wakes up +[1518-05-07 00:55] wakes up +[1518-08-08 00:53] falls asleep +[1518-08-02 00:49] falls asleep +[1518-11-18 00:56] wakes up +[1518-10-30 00:50] falls asleep +[1518-11-18 00:41] wakes up +[1518-05-30 00:16] falls asleep +[1518-06-28 00:00] Guard #3011 begins shift +[1518-09-23 00:17] falls asleep +[1518-10-26 00:54] falls asleep +[1518-10-08 00:31] falls asleep +[1518-06-04 23:59] Guard #149 begins shift +[1518-09-07 00:08] falls asleep +[1518-06-03 23:52] Guard #1993 begins shift +[1518-07-21 00:14] falls asleep +[1518-06-13 00:00] Guard #2927 begins shift +[1518-07-24 23:48] Guard #149 begins shift +[1518-10-08 00:25] wakes up +[1518-10-03 00:03] Guard #743 begins shift +[1518-05-09 23:57] Guard #2027 begins shift +[1518-06-21 00:49] wakes up +[1518-07-13 00:34] falls asleep +[1518-03-26 00:13] falls asleep +[1518-05-12 00:28] wakes up +[1518-09-27 00:42] falls asleep +[1518-05-29 00:04] Guard #2719 begins shift +[1518-05-13 23:56] Guard #3011 begins shift +[1518-10-28 00:56] wakes up +[1518-07-02 00:37] wakes up +[1518-06-17 00:32] falls asleep +[1518-05-13 00:36] falls asleep +[1518-04-25 00:46] falls asleep +[1518-06-07 00:01] falls asleep +[1518-10-13 00:59] wakes up +[1518-11-09 00:02] Guard #3011 begins shift +[1518-09-26 00:57] falls asleep +[1518-09-11 00:54] wakes up +[1518-05-14 00:29] falls asleep +[1518-08-02 00:29] falls asleep +[1518-08-24 00:00] falls asleep +[1518-11-13 00:13] wakes up +[1518-05-05 00:56] wakes up +[1518-06-22 23:54] Guard #2843 begins shift +[1518-08-07 00:48] wakes up +[1518-11-19 00:00] Guard #659 begins shift +[1518-07-22 00:34] wakes up +[1518-03-29 00:54] wakes up +[1518-10-07 00:30] falls asleep +[1518-11-21 23:51] Guard #1013 begins shift +[1518-10-18 00:03] Guard #2027 begins shift +[1518-03-25 00:56] wakes up +[1518-07-16 00:38] falls asleep +[1518-06-12 00:59] wakes up +[1518-10-14 00:00] Guard #2027 begins shift +[1518-05-11 00:52] falls asleep +[1518-06-15 00:49] wakes up \ No newline at end of file diff --git a/AdventOfCode2018/4thDay/challenge1/main.cpp b/AdventOfCode2018/4thDay/challenge1/main.cpp new file mode 100644 index 0000000..08e37b4 --- /dev/null +++ b/AdventOfCode2018/4thDay/challenge1/main.cpp @@ -0,0 +1,180 @@ +#include +#include +#include +#include +#include +#include +#include + +enum class State {begin, sleep, awaken}; +struct Action +{ + State state; + int64_t guard_id; +}; + +struct Event +{ + int64_t month, day, hour, minute; + Action action; +}; + + +std::istream &operator>>(std::istream &is, Action &action) +{ + std::string element; + is >> element; + if(element=="Guard") + { + action.state=State::begin; + char c; + is >> c >> action.guard_id; + } + else if(element=="falls") + { + action.state=State::sleep; + } + else if(element=="wakes") + { + action.state=State::awaken; + } + else + { + throw std::runtime_error("Invalid input"); + } + std::getline(is,element); + return is; +} + +std::istream &operator>>(std::istream &is, Event &event) +{ + char c; + int64_t year; + is >> c; + if(is.good()) + { + is >> year >> c >> event.month >> c >> event.day + >> event.hour >> c >> event.minute >> c + >> event.action; + + if(event.hour==23) + { + event.minute=0; + } + } + return is; +} + + + +std::ostream &operator<<(std::ostream &os, const Action &action) +{ + switch(action.state) + { + case State::begin: + os << "Guard #" << action.guard_id << " begins shift"; + break; + case State::sleep: + os << "falls asleep"; + break; + case State::awaken: + os << "wakes up"; + break; + default: + os << "What?"; + break; + } + return os; +} + +std::ostream &operator<<(std::ostream &os, const Event &event) +{ + os << "[1518-" + << std::setw(2) << std::setfill('0') << event.month << "-" + << std::setw(2) << std::setfill('0') << event.day << " " + << std::setw(2) << std::setfill('0') << event.hour << ":" + << std::setw(2) << std::setfill('0') << event.minute << "] " + << event.action; + return os; +} + +std::pair max_incident(const std::vector> &incidents) +{ + std::vector sleep_incidents(60,0); + for(auto ×: incidents) + { + for(size_t time=times.first; time events(std::istream_iterator(infile), {}); + + std::map>> guards; + + int64_t guard_id; + int64_t start(-1); + for(auto &event: events) + { + switch(event.action.state) + { + case State::begin: + guard_id=event.action.guard_id; + break; + case State::sleep: + start=event.minute; + break; + case State::awaken: + guards[guard_id].emplace_back(start,event.minute); + break; + } + } + + int64_t max_time_guard, max_time(0); + for(auto &guard: guards) + { + int64_t total_time(0); + for(auto &time: guard.second) + { + total_time+=time.second-time.first; + } + if(total_time>max_time) + { + max_time_guard=guard.first; + max_time=total_time; + } + } + + auto [max_incidents,max_minute]=max_incident(guards[max_time_guard]); + std::cout << "Part 1: " << (max_minute*max_time_guard) << "\n"; + + std::vector num_incidents(guards.size()); + int64_t max_guard_incidents(0), max_guard_minute(0), max_guard_id(-1); + for(auto &guard: guards) + { + auto [incidents,minute]=max_incident(guard.second); + if(incidents>max_guard_incidents) + { + max_guard_incidents=incidents; + max_guard_minute=minute; + max_guard_id=guard.first; + } + } + std::cout << "Part 2: " << (max_guard_id * max_guard_minute) << "\n"; +} \ No newline at end of file diff --git a/AdventOfCode2018/4thDay/challenge2/challenge.txt b/AdventOfCode2018/4thDay/challenge2/challenge.txt new file mode 100644 index 0000000..4f67796 --- /dev/null +++ b/AdventOfCode2018/4thDay/challenge2/challenge.txt @@ -0,0 +1,7 @@ +--- Part Two --- +Strategy 2: Of all guards, which guard is most frequently asleep on the same minute? + +In the example above, Guard #99 spent minute 45 asleep more than any other guard or minute - three times in total. (In all other cases, any guard spent any minute asleep at most twice.) + +What is the ID of the guard you chose multiplied by the minute you chose? (In the above example, the answer would be 99 * 45 = 4455.) + diff --git a/AdventOfCode2018/4thDay/challenge2/index.js b/AdventOfCode2018/4thDay/challenge2/index.js new file mode 100644 index 0000000..3909930 --- /dev/null +++ b/AdventOfCode2018/4thDay/challenge2/index.js @@ -0,0 +1,68 @@ +class Guard { + constructor (id) { + this.id = id; + this.minutesAsleep = Array.from({ length: 60 }).map(() => 0); + this.fellAsleepAt = null; + } + + sleep (fellAsleepAt) { + this.fellAsleepAt = fellAsleepAt; + } + + awake (awokeAt) { + for (let i = this.fellAsleepAt; i < awokeAt; i++) { + this.minutesAsleep[i] += 1; + } + } + + get sleepiestMinute () { + return this.minutesAsleep + .map((value, index) => ({ index, value })) + .sort((a, b) => b.value - a.value)[0].index; + } + } + +const sleep = (input) => { + const guards = {}; + const schedule = input + .split('\n') + .map((x) => x.trim()) + .sort() + .map((x) => { + const parts = x.match(/\[(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})\] (.*)/); + + return { + minute: +parts[5], + message: parts[6], + }; + }); + + let currentGuard = null; + + for (let i = 0; i < schedule.length; i++) { + const { message, minute } = schedule[i]; + + if (/Guard/.test(message)) { + const parts = message.match(/Guard #(\d+) begins shift/); + const guardId = +parts[1]; + const guard = guards[guardId] ? guards[guardId] : new Guard(guardId); + + currentGuard = guards[guardId] = guard; + } else if (message === 'falls asleep') { + currentGuard.sleep(minute); + } else if (message === 'wakes up') { + currentGuard.awake(minute); + } + } + + const sleepiestGuard = Object + .keys(guards) + .map((guardId) => guards[guardId]) + .sort((a, b) => b.minutesAsleep[b.sleepiestMinute] - + a.minutesAsleep[a.sleepiestMinute])[0]; + + return sleepiestGuard.id * sleepiestGuard.sleepiestMinute; +}; + +const fs = require('fs'); +console.log(sleep(fs.readFileSync("input.txt").toString())); diff --git a/AdventOfCode2018/4thDay/challenge2/input.txt b/AdventOfCode2018/4thDay/challenge2/input.txt new file mode 100755 index 0000000..6a4973b --- /dev/null +++ b/AdventOfCode2018/4thDay/challenge2/input.txt @@ -0,0 +1,1000 @@ +[1518-09-24 00:59] wakes up +[1518-05-22 00:47] wakes up +[1518-05-08 00:02] Guard #2719 begins shift +[1518-11-12 00:00] Guard #3011 begins shift +[1518-04-12 00:57] wakes up +[1518-05-21 00:32] wakes up +[1518-11-12 00:30] falls asleep +[1518-08-23 00:39] wakes up +[1518-10-18 00:48] wakes up +[1518-09-16 00:28] falls asleep +[1518-04-07 00:54] falls asleep +[1518-10-26 00:38] wakes up +[1518-03-18 00:12] falls asleep +[1518-05-23 00:01] Guard #2027 begins shift +[1518-05-31 00:09] falls asleep +[1518-05-19 00:09] falls asleep +[1518-05-28 00:02] Guard #2719 begins shift +[1518-09-24 00:04] falls asleep +[1518-03-31 00:42] falls asleep +[1518-09-04 00:52] wakes up +[1518-08-27 23:48] Guard #1657 begins shift +[1518-08-18 00:22] falls asleep +[1518-07-28 00:45] wakes up +[1518-11-15 00:31] falls asleep +[1518-09-20 00:46] wakes up +[1518-07-11 00:54] falls asleep +[1518-09-19 00:00] Guard #2027 begins shift +[1518-06-01 00:58] wakes up +[1518-06-03 00:56] wakes up +[1518-05-18 00:52] falls asleep +[1518-10-25 00:05] falls asleep +[1518-04-15 00:33] wakes up +[1518-08-11 23:59] Guard #3023 begins shift +[1518-08-06 00:18] falls asleep +[1518-08-23 00:34] falls asleep +[1518-08-05 00:22] wakes up +[1518-04-22 23:58] Guard #1657 begins shift +[1518-06-30 00:54] wakes up +[1518-11-21 00:14] wakes up +[1518-06-18 23:54] Guard #3361 begins shift +[1518-10-27 00:51] wakes up +[1518-10-01 00:26] falls asleep +[1518-06-30 00:38] wakes up +[1518-05-05 00:33] wakes up +[1518-03-12 00:24] wakes up +[1518-07-26 00:33] wakes up +[1518-03-22 00:16] wakes up +[1518-04-21 00:58] wakes up +[1518-08-08 23:58] Guard #563 begins shift +[1518-05-23 00:25] wakes up +[1518-08-25 00:44] wakes up +[1518-04-29 00:57] wakes up +[1518-09-23 23:53] Guard #2027 begins shift +[1518-03-31 00:00] Guard #743 begins shift +[1518-04-05 00:02] Guard #3011 begins shift +[1518-10-16 00:00] Guard #659 begins shift +[1518-06-24 00:58] wakes up +[1518-05-06 23:59] Guard #2719 begins shift +[1518-03-21 00:55] falls asleep +[1518-08-21 00:29] falls asleep +[1518-07-19 00:14] falls asleep +[1518-09-03 00:01] falls asleep +[1518-10-25 00:54] wakes up +[1518-10-21 23:47] Guard #743 begins shift +[1518-05-21 00:26] falls asleep +[1518-05-11 00:47] wakes up +[1518-05-06 00:23] falls asleep +[1518-11-18 00:47] wakes up +[1518-08-04 00:04] falls asleep +[1518-06-19 00:05] wakes up +[1518-11-05 23:57] Guard #3119 begins shift +[1518-11-11 00:00] Guard #743 begins shift +[1518-09-23 00:56] wakes up +[1518-09-19 00:40] wakes up +[1518-06-16 00:00] Guard #3089 begins shift +[1518-09-15 00:43] wakes up +[1518-03-30 00:54] wakes up +[1518-06-20 00:01] falls asleep +[1518-09-18 00:00] Guard #3119 begins shift +[1518-06-15 00:25] falls asleep +[1518-08-14 00:47] falls asleep +[1518-06-29 00:48] falls asleep +[1518-08-28 00:08] wakes up +[1518-03-17 23:57] Guard #3089 begins shift +[1518-06-06 23:50] Guard #1657 begins shift +[1518-08-13 00:01] Guard #2927 begins shift +[1518-06-09 00:00] Guard #563 begins shift +[1518-08-16 00:49] wakes up +[1518-06-19 00:04] falls asleep +[1518-07-10 00:39] falls asleep +[1518-07-22 23:58] Guard #3023 begins shift +[1518-06-16 23:53] Guard #149 begins shift +[1518-05-25 23:50] Guard #1013 begins shift +[1518-05-12 00:01] Guard #3089 begins shift +[1518-08-01 00:46] wakes up +[1518-06-28 00:46] wakes up +[1518-10-08 00:34] wakes up +[1518-09-16 00:42] wakes up +[1518-09-22 00:04] Guard #1013 begins shift +[1518-09-07 00:45] falls asleep +[1518-05-12 00:49] falls asleep +[1518-09-14 00:29] falls asleep +[1518-03-29 23:54] Guard #3023 begins shift +[1518-05-06 00:03] Guard #3361 begins shift +[1518-09-03 00:30] falls asleep +[1518-07-13 00:51] wakes up +[1518-09-15 00:09] falls asleep +[1518-04-28 00:06] falls asleep +[1518-08-14 00:39] wakes up +[1518-11-04 00:08] falls asleep +[1518-08-19 00:24] wakes up +[1518-11-05 00:57] wakes up +[1518-08-23 00:02] Guard #2719 begins shift +[1518-06-08 00:53] falls asleep +[1518-05-08 00:30] falls asleep +[1518-04-06 00:49] wakes up +[1518-09-15 00:04] Guard #2719 begins shift +[1518-11-08 00:52] wakes up +[1518-05-03 23:57] Guard #2719 begins shift +[1518-08-29 00:26] wakes up +[1518-09-24 00:16] wakes up +[1518-07-21 00:53] wakes up +[1518-10-06 00:52] falls asleep +[1518-07-30 00:31] falls asleep +[1518-07-12 00:50] wakes up +[1518-08-11 00:54] wakes up +[1518-03-22 00:00] Guard #2027 begins shift +[1518-08-22 00:04] falls asleep +[1518-10-08 00:00] Guard #1657 begins shift +[1518-11-06 00:48] falls asleep +[1518-05-31 00:46] wakes up +[1518-10-28 00:40] wakes up +[1518-07-08 00:22] wakes up +[1518-06-05 23:57] Guard #1993 begins shift +[1518-05-03 00:46] wakes up +[1518-07-25 23:56] Guard #149 begins shift +[1518-07-22 00:56] wakes up +[1518-11-06 00:41] wakes up +[1518-06-07 00:50] wakes up +[1518-04-28 00:02] Guard #149 begins shift +[1518-09-27 00:08] falls asleep +[1518-10-05 00:17] falls asleep +[1518-09-23 00:01] Guard #881 begins shift +[1518-05-24 00:59] wakes up +[1518-05-30 00:01] Guard #743 begins shift +[1518-06-18 00:28] wakes up +[1518-06-11 00:08] falls asleep +[1518-08-30 00:25] falls asleep +[1518-04-29 00:08] falls asleep +[1518-05-01 00:50] wakes up +[1518-03-12 00:20] falls asleep +[1518-08-02 00:41] wakes up +[1518-10-14 00:58] wakes up +[1518-10-16 23:53] Guard #2843 begins shift +[1518-11-06 00:58] wakes up +[1518-04-19 00:03] Guard #2719 begins shift +[1518-07-23 23:59] Guard #3083 begins shift +[1518-04-21 00:41] falls asleep +[1518-11-18 00:54] falls asleep +[1518-04-03 00:45] falls asleep +[1518-05-03 00:58] wakes up +[1518-06-27 00:20] wakes up +[1518-08-26 00:17] falls asleep +[1518-05-04 00:44] falls asleep +[1518-05-03 00:16] wakes up +[1518-04-03 00:04] Guard #2843 begins shift +[1518-09-04 00:03] Guard #3023 begins shift +[1518-03-11 00:00] Guard #1163 begins shift +[1518-05-03 00:57] falls asleep +[1518-06-16 00:51] wakes up +[1518-05-04 00:41] wakes up +[1518-09-25 00:00] Guard #1163 begins shift +[1518-04-02 00:56] wakes up +[1518-07-12 00:39] falls asleep +[1518-06-26 00:52] falls asleep +[1518-03-15 00:00] Guard #563 begins shift +[1518-06-07 00:22] falls asleep +[1518-04-19 00:31] falls asleep +[1518-05-11 00:04] Guard #2927 begins shift +[1518-04-03 00:35] wakes up +[1518-09-30 00:01] Guard #1993 begins shift +[1518-11-14 23:57] Guard #2017 begins shift +[1518-05-16 00:41] falls asleep +[1518-09-23 00:51] wakes up +[1518-08-27 00:35] falls asleep +[1518-04-29 00:22] falls asleep +[1518-03-30 00:27] wakes up +[1518-09-07 00:13] wakes up +[1518-11-17 00:00] Guard #1993 begins shift +[1518-11-20 23:46] Guard #3361 begins shift +[1518-03-22 00:25] falls asleep +[1518-05-01 00:38] wakes up +[1518-11-02 23:56] Guard #659 begins shift +[1518-09-22 00:39] falls asleep +[1518-08-13 23:47] Guard #2027 begins shift +[1518-09-30 00:11] wakes up +[1518-06-11 23:58] Guard #2857 begins shift +[1518-08-21 00:53] wakes up +[1518-06-23 00:00] falls asleep +[1518-10-22 00:03] falls asleep +[1518-11-20 00:55] wakes up +[1518-05-17 23:57] Guard #3119 begins shift +[1518-06-14 23:57] Guard #1163 begins shift +[1518-08-19 00:00] Guard #2843 begins shift +[1518-07-11 00:08] falls asleep +[1518-10-01 00:03] Guard #2857 begins shift +[1518-10-23 00:34] wakes up +[1518-04-18 00:13] falls asleep +[1518-05-06 00:39] wakes up +[1518-08-30 00:00] Guard #2843 begins shift +[1518-03-30 00:46] falls asleep +[1518-09-18 00:25] wakes up +[1518-08-09 23:56] Guard #3119 begins shift +[1518-09-15 23:57] Guard #3023 begins shift +[1518-04-19 00:50] wakes up +[1518-08-03 00:22] wakes up +[1518-03-21 00:56] wakes up +[1518-03-24 23:57] Guard #3011 begins shift +[1518-03-22 00:45] wakes up +[1518-04-24 00:58] wakes up +[1518-08-27 00:45] wakes up +[1518-06-22 00:23] falls asleep +[1518-09-16 23:58] Guard #659 begins shift +[1518-03-30 00:01] falls asleep +[1518-04-04 00:46] falls asleep +[1518-10-06 00:54] wakes up +[1518-09-18 00:09] falls asleep +[1518-05-22 00:55] falls asleep +[1518-11-11 00:53] falls asleep +[1518-06-20 00:38] wakes up +[1518-06-14 00:58] wakes up +[1518-08-16 00:04] Guard #149 begins shift +[1518-04-04 00:57] wakes up +[1518-07-26 00:59] wakes up +[1518-09-29 00:03] Guard #563 begins shift +[1518-09-10 00:21] falls asleep +[1518-09-02 23:47] Guard #1993 begins shift +[1518-10-08 00:52] wakes up +[1518-10-18 00:45] falls asleep +[1518-04-22 00:33] wakes up +[1518-08-26 00:47] wakes up +[1518-11-02 00:04] Guard #2857 begins shift +[1518-03-25 00:44] falls asleep +[1518-07-17 00:07] falls asleep +[1518-04-05 00:26] falls asleep +[1518-08-11 00:43] falls asleep +[1518-06-13 23:59] Guard #3023 begins shift +[1518-06-29 00:00] Guard #2017 begins shift +[1518-11-20 00:36] wakes up +[1518-07-13 23:56] Guard #2857 begins shift +[1518-09-07 23:52] Guard #149 begins shift +[1518-04-24 23:58] Guard #3011 begins shift +[1518-03-19 00:47] falls asleep +[1518-07-04 23:56] Guard #653 begins shift +[1518-06-21 00:30] falls asleep +[1518-03-13 00:15] wakes up +[1518-03-13 00:23] falls asleep +[1518-08-10 00:21] falls asleep +[1518-10-01 23:47] Guard #1657 begins shift +[1518-03-26 00:03] Guard #1163 begins shift +[1518-08-18 00:53] falls asleep +[1518-05-02 00:12] falls asleep +[1518-05-26 00:42] falls asleep +[1518-10-31 00:21] wakes up +[1518-05-14 23:59] Guard #1013 begins shift +[1518-05-25 00:48] wakes up +[1518-08-25 00:52] falls asleep +[1518-06-17 00:05] falls asleep +[1518-06-16 00:14] falls asleep +[1518-04-16 00:51] wakes up +[1518-05-18 23:56] Guard #2017 begins shift +[1518-06-22 00:45] wakes up +[1518-05-30 00:59] wakes up +[1518-07-17 00:14] falls asleep +[1518-10-19 00:20] falls asleep +[1518-05-12 23:52] Guard #3361 begins shift +[1518-09-26 00:27] falls asleep +[1518-09-05 00:00] Guard #3023 begins shift +[1518-11-22 23:58] Guard #2719 begins shift +[1518-09-12 00:00] falls asleep +[1518-08-06 00:34] wakes up +[1518-06-20 00:43] falls asleep +[1518-06-08 00:59] wakes up +[1518-08-28 00:03] falls asleep +[1518-09-02 00:08] falls asleep +[1518-08-29 00:56] wakes up +[1518-07-01 00:56] wakes up +[1518-04-13 00:00] Guard #2719 begins shift +[1518-05-29 00:55] wakes up +[1518-04-14 00:54] falls asleep +[1518-04-20 00:26] falls asleep +[1518-06-20 00:50] wakes up +[1518-09-01 00:52] falls asleep +[1518-11-10 00:21] falls asleep +[1518-06-18 00:26] falls asleep +[1518-07-23 00:26] falls asleep +[1518-08-18 00:41] wakes up +[1518-07-29 00:20] wakes up +[1518-03-21 00:31] wakes up +[1518-04-14 00:55] wakes up +[1518-08-01 00:35] falls asleep +[1518-08-13 00:07] falls asleep +[1518-06-04 00:03] falls asleep +[1518-06-01 00:00] Guard #2857 begins shift +[1518-07-20 00:18] falls asleep +[1518-05-09 00:02] Guard #3011 begins shift +[1518-10-27 00:37] falls asleep +[1518-07-30 23:59] Guard #2719 begins shift +[1518-05-13 00:00] falls asleep +[1518-03-24 00:29] wakes up +[1518-10-25 00:49] falls asleep +[1518-03-31 00:36] wakes up +[1518-11-17 00:08] falls asleep +[1518-05-26 00:01] falls asleep +[1518-07-21 23:57] Guard #149 begins shift +[1518-06-18 00:36] falls asleep +[1518-07-09 00:34] falls asleep +[1518-06-03 00:43] falls asleep +[1518-04-15 00:38] falls asleep +[1518-06-24 23:56] Guard #2719 begins shift +[1518-07-25 00:29] falls asleep +[1518-03-21 00:05] falls asleep +[1518-10-20 00:04] Guard #1163 begins shift +[1518-04-27 00:51] wakes up +[1518-07-07 00:02] Guard #2843 begins shift +[1518-07-18 00:58] wakes up +[1518-04-11 00:04] Guard #2719 begins shift +[1518-08-17 00:57] wakes up +[1518-11-11 00:57] wakes up +[1518-06-18 00:48] wakes up +[1518-11-11 00:42] wakes up +[1518-06-21 00:55] falls asleep +[1518-10-12 00:54] wakes up +[1518-08-15 00:47] wakes up +[1518-06-24 00:57] falls asleep +[1518-10-14 00:16] falls asleep +[1518-03-28 00:30] wakes up +[1518-05-26 00:47] wakes up +[1518-06-02 00:04] Guard #743 begins shift +[1518-04-12 00:01] Guard #2927 begins shift +[1518-07-18 00:00] Guard #3083 begins shift +[1518-08-11 00:31] wakes up +[1518-06-27 00:33] falls asleep +[1518-08-10 00:51] wakes up +[1518-04-27 00:26] falls asleep +[1518-07-01 00:37] wakes up +[1518-07-01 00:00] Guard #2017 begins shift +[1518-10-26 00:58] wakes up +[1518-11-17 00:53] wakes up +[1518-06-23 23:56] Guard #3089 begins shift +[1518-07-27 00:38] wakes up +[1518-11-17 00:39] wakes up +[1518-04-14 00:29] wakes up +[1518-05-26 00:53] wakes up +[1518-07-27 00:02] Guard #2857 begins shift +[1518-08-07 00:06] falls asleep +[1518-08-23 00:57] wakes up +[1518-07-22 00:30] falls asleep +[1518-08-01 00:04] Guard #653 begins shift +[1518-04-08 00:33] wakes up +[1518-08-17 00:00] Guard #3023 begins shift +[1518-03-13 00:09] falls asleep +[1518-04-24 00:29] falls asleep +[1518-05-28 00:07] falls asleep +[1518-08-08 00:08] falls asleep +[1518-07-10 00:56] wakes up +[1518-03-12 23:56] Guard #881 begins shift +[1518-03-11 00:09] falls asleep +[1518-09-08 00:04] falls asleep +[1518-08-01 23:59] Guard #3119 begins shift +[1518-06-19 00:08] falls asleep +[1518-05-04 00:51] wakes up +[1518-10-13 00:35] wakes up +[1518-06-11 00:00] Guard #2027 begins shift +[1518-05-01 00:47] falls asleep +[1518-08-15 00:29] falls asleep +[1518-06-28 00:14] falls asleep +[1518-09-26 23:58] Guard #1163 begins shift +[1518-10-10 00:54] wakes up +[1518-08-25 00:53] wakes up +[1518-07-31 00:37] wakes up +[1518-09-18 00:48] falls asleep +[1518-07-09 00:47] wakes up +[1518-11-17 00:23] falls asleep +[1518-08-26 00:03] Guard #2719 begins shift +[1518-06-17 00:40] wakes up +[1518-06-08 00:29] wakes up +[1518-03-24 00:03] Guard #1657 begins shift +[1518-09-26 00:52] wakes up +[1518-08-14 23:59] Guard #2843 begins shift +[1518-08-06 00:01] Guard #149 begins shift +[1518-11-23 00:22] falls asleep +[1518-10-19 00:45] wakes up +[1518-09-27 00:49] wakes up +[1518-06-26 00:20] falls asleep +[1518-09-07 00:57] wakes up +[1518-11-14 00:04] Guard #743 begins shift +[1518-03-16 00:12] wakes up +[1518-09-18 00:54] wakes up +[1518-10-29 23:58] Guard #3119 begins shift +[1518-04-13 23:49] Guard #1013 begins shift +[1518-09-19 00:47] falls asleep +[1518-11-07 23:58] Guard #3119 begins shift +[1518-06-21 00:00] Guard #881 begins shift +[1518-09-01 00:53] wakes up +[1518-03-20 23:50] Guard #881 begins shift +[1518-09-10 00:55] wakes up +[1518-07-29 00:34] falls asleep +[1518-09-05 00:18] falls asleep +[1518-07-03 00:58] wakes up +[1518-04-28 00:52] wakes up +[1518-08-08 00:33] wakes up +[1518-04-22 00:00] falls asleep +[1518-03-19 00:15] wakes up +[1518-08-14 00:52] wakes up +[1518-07-11 00:56] wakes up +[1518-07-14 23:56] Guard #2017 begins shift +[1518-08-04 23:57] Guard #2027 begins shift +[1518-07-03 00:55] falls asleep +[1518-10-30 00:24] falls asleep +[1518-11-07 00:09] falls asleep +[1518-05-12 00:22] falls asleep +[1518-08-17 23:59] Guard #743 begins shift +[1518-08-23 00:50] falls asleep +[1518-10-29 00:04] Guard #1163 begins shift +[1518-07-04 00:54] wakes up +[1518-03-16 00:59] wakes up +[1518-08-25 00:14] falls asleep +[1518-10-30 23:52] Guard #2843 begins shift +[1518-05-17 00:54] wakes up +[1518-06-04 00:38] wakes up +[1518-05-16 00:46] wakes up +[1518-09-08 00:43] wakes up +[1518-09-01 00:21] falls asleep +[1518-06-17 23:59] Guard #1013 begins shift +[1518-09-27 23:59] Guard #3119 begins shift +[1518-05-17 00:03] Guard #1657 begins shift +[1518-04-21 23:46] Guard #2843 begins shift +[1518-09-11 00:35] falls asleep +[1518-10-01 00:31] wakes up +[1518-08-12 00:39] wakes up +[1518-10-04 00:01] Guard #1013 begins shift +[1518-08-02 23:50] Guard #1657 begins shift +[1518-05-04 00:36] falls asleep +[1518-06-05 00:39] falls asleep +[1518-07-04 00:36] wakes up +[1518-05-19 00:53] falls asleep +[1518-10-07 00:59] wakes up +[1518-06-30 00:49] falls asleep +[1518-06-17 00:18] wakes up +[1518-06-25 00:39] wakes up +[1518-09-28 00:31] falls asleep +[1518-08-24 00:24] wakes up +[1518-08-10 00:08] falls asleep +[1518-04-06 00:02] Guard #1163 begins shift +[1518-04-11 00:38] wakes up +[1518-07-02 00:52] wakes up +[1518-07-07 00:57] wakes up +[1518-04-30 00:15] falls asleep +[1518-04-17 00:48] wakes up +[1518-03-16 00:25] falls asleep +[1518-10-06 00:40] wakes up +[1518-10-13 00:00] falls asleep +[1518-05-30 23:56] Guard #2857 begins shift +[1518-06-06 00:54] wakes up +[1518-04-15 00:57] wakes up +[1518-06-21 00:57] wakes up +[1518-10-24 23:51] Guard #149 begins shift +[1518-03-26 00:44] wakes up +[1518-08-31 00:52] wakes up +[1518-03-28 00:51] falls asleep +[1518-10-25 23:47] Guard #3023 begins shift +[1518-07-14 00:52] wakes up +[1518-05-09 00:19] falls asleep +[1518-10-06 00:18] falls asleep +[1518-08-10 00:18] wakes up +[1518-05-19 00:28] wakes up +[1518-08-04 00:36] wakes up +[1518-06-13 00:49] falls asleep +[1518-04-16 00:09] falls asleep +[1518-05-20 00:38] wakes up +[1518-04-24 00:01] Guard #2719 begins shift +[1518-05-10 00:58] wakes up +[1518-11-23 00:41] wakes up +[1518-04-17 00:21] falls asleep +[1518-11-21 00:00] falls asleep +[1518-08-29 00:15] falls asleep +[1518-08-19 23:57] Guard #2843 begins shift +[1518-11-01 00:59] wakes up +[1518-05-03 00:00] Guard #2857 begins shift +[1518-10-02 00:32] wakes up +[1518-08-07 23:57] Guard #3089 begins shift +[1518-10-29 00:51] falls asleep +[1518-03-17 00:08] falls asleep +[1518-03-19 00:32] falls asleep +[1518-07-30 00:41] wakes up +[1518-07-14 00:11] falls asleep +[1518-07-16 00:04] Guard #2927 begins shift +[1518-03-14 00:30] falls asleep +[1518-10-05 00:46] wakes up +[1518-08-06 23:57] Guard #1993 begins shift +[1518-04-23 00:44] falls asleep +[1518-10-18 00:26] wakes up +[1518-04-15 00:52] wakes up +[1518-04-01 00:03] Guard #2719 begins shift +[1518-11-05 00:00] Guard #149 begins shift +[1518-05-07 00:17] falls asleep +[1518-10-10 00:00] Guard #3361 begins shift +[1518-07-28 00:00] Guard #743 begins shift +[1518-03-31 00:34] falls asleep +[1518-05-05 00:11] falls asleep +[1518-07-29 00:16] falls asleep +[1518-08-21 23:50] Guard #2927 begins shift +[1518-03-22 00:49] falls asleep +[1518-06-07 23:56] Guard #1163 begins shift +[1518-10-15 00:00] Guard #2027 begins shift +[1518-08-24 00:34] falls asleep +[1518-07-28 00:41] falls asleep +[1518-11-13 00:49] wakes up +[1518-07-02 00:32] falls asleep +[1518-09-21 00:17] falls asleep +[1518-09-02 00:00] Guard #3011 begins shift +[1518-04-15 00:02] falls asleep +[1518-09-26 00:00] Guard #1657 begins shift +[1518-05-03 00:12] falls asleep +[1518-09-09 00:44] wakes up +[1518-04-04 00:36] wakes up +[1518-05-23 23:59] Guard #3083 begins shift +[1518-04-07 00:58] wakes up +[1518-05-18 00:53] wakes up +[1518-05-15 00:56] wakes up +[1518-08-17 00:25] falls asleep +[1518-05-13 00:39] wakes up +[1518-06-24 00:18] falls asleep +[1518-04-07 00:50] wakes up +[1518-05-17 00:32] wakes up +[1518-06-19 00:32] wakes up +[1518-07-09 00:01] Guard #2719 begins shift +[1518-03-13 00:53] wakes up +[1518-06-02 00:44] wakes up +[1518-10-31 00:01] falls asleep +[1518-10-05 00:00] Guard #1013 begins shift +[1518-06-25 00:36] falls asleep +[1518-05-08 00:37] wakes up +[1518-07-02 00:49] falls asleep +[1518-05-12 00:55] wakes up +[1518-05-21 00:00] Guard #3023 begins shift +[1518-07-04 00:51] falls asleep +[1518-08-25 00:02] Guard #3011 begins shift +[1518-10-29 00:52] wakes up +[1518-04-03 00:50] wakes up +[1518-04-16 00:43] falls asleep +[1518-11-06 00:28] falls asleep +[1518-04-10 00:05] falls asleep +[1518-06-19 00:15] wakes up +[1518-04-14 00:06] wakes up +[1518-06-27 00:34] wakes up +[1518-05-27 00:52] wakes up +[1518-10-05 00:59] wakes up +[1518-09-19 00:58] wakes up +[1518-05-31 00:11] wakes up +[1518-09-14 00:59] wakes up +[1518-10-28 00:35] falls asleep +[1518-08-11 00:04] Guard #1163 begins shift +[1518-08-29 00:04] Guard #881 begins shift +[1518-09-25 00:22] falls asleep +[1518-06-30 00:04] Guard #1657 begins shift +[1518-05-04 00:56] wakes up +[1518-11-07 00:13] wakes up +[1518-06-30 00:19] falls asleep +[1518-08-22 00:09] wakes up +[1518-08-18 00:55] wakes up +[1518-05-28 00:46] wakes up +[1518-09-04 00:10] falls asleep +[1518-08-30 00:43] wakes up +[1518-03-11 00:32] wakes up +[1518-04-27 00:00] Guard #743 begins shift +[1518-10-20 00:26] wakes up +[1518-05-20 00:00] Guard #743 begins shift +[1518-04-03 23:59] Guard #3011 begins shift +[1518-07-29 00:59] wakes up +[1518-07-17 00:10] wakes up +[1518-04-07 00:04] Guard #2843 begins shift +[1518-07-15 00:52] wakes up +[1518-11-22 00:19] falls asleep +[1518-04-23 00:48] wakes up +[1518-07-19 00:52] wakes up +[1518-04-07 23:57] Guard #1163 begins shift +[1518-07-08 00:01] Guard #1993 begins shift +[1518-07-23 00:46] wakes up +[1518-07-21 00:01] Guard #3119 begins shift +[1518-03-16 00:03] Guard #3083 begins shift +[1518-03-28 00:56] wakes up +[1518-09-30 00:09] falls asleep +[1518-09-07 00:02] Guard #2017 begins shift +[1518-07-10 00:01] Guard #1993 begins shift +[1518-10-15 00:53] wakes up +[1518-10-08 00:18] falls asleep +[1518-06-26 00:54] wakes up +[1518-03-12 00:36] falls asleep +[1518-03-16 00:06] falls asleep +[1518-08-06 00:47] wakes up +[1518-10-22 00:29] wakes up +[1518-09-02 00:58] wakes up +[1518-07-18 00:12] falls asleep +[1518-09-19 23:58] Guard #1013 begins shift +[1518-08-31 00:10] falls asleep +[1518-03-24 00:18] falls asleep +[1518-04-18 00:30] wakes up +[1518-11-09 00:30] falls asleep +[1518-05-21 00:38] falls asleep +[1518-10-29 00:23] wakes up +[1518-10-23 00:00] Guard #2027 begins shift +[1518-10-09 00:09] falls asleep +[1518-09-11 00:53] falls asleep +[1518-07-04 00:32] falls asleep +[1518-07-31 00:32] falls asleep +[1518-09-01 00:58] wakes up +[1518-07-24 00:50] wakes up +[1518-07-26 00:49] falls asleep +[1518-11-18 00:15] falls asleep +[1518-04-13 00:31] falls asleep +[1518-09-03 00:22] wakes up +[1518-08-30 23:58] Guard #3361 begins shift +[1518-04-30 00:52] wakes up +[1518-06-15 00:56] falls asleep +[1518-07-02 00:56] falls asleep +[1518-04-19 23:56] Guard #1657 begins shift +[1518-10-09 00:03] Guard #1657 begins shift +[1518-10-07 00:02] Guard #1163 begins shift +[1518-05-24 00:29] falls asleep +[1518-05-23 00:06] falls asleep +[1518-07-10 23:58] Guard #1993 begins shift +[1518-07-03 00:00] Guard #743 begins shift +[1518-06-14 00:54] falls asleep +[1518-09-19 00:39] falls asleep +[1518-07-19 00:01] Guard #2017 begins shift +[1518-11-11 00:18] falls asleep +[1518-04-17 00:02] Guard #1013 begins shift +[1518-05-02 00:56] wakes up +[1518-08-29 00:55] falls asleep +[1518-11-17 00:11] wakes up +[1518-04-02 00:28] falls asleep +[1518-04-28 23:57] Guard #3083 begins shift +[1518-07-28 00:28] wakes up +[1518-09-22 00:47] wakes up +[1518-03-20 00:00] Guard #1657 begins shift +[1518-07-20 00:25] wakes up +[1518-09-06 00:52] wakes up +[1518-10-18 00:38] wakes up +[1518-07-24 00:25] falls asleep +[1518-11-07 00:02] Guard #149 begins shift +[1518-08-15 00:52] falls asleep +[1518-10-20 00:12] falls asleep +[1518-04-09 00:56] wakes up +[1518-09-26 00:18] wakes up +[1518-09-06 00:02] falls asleep +[1518-03-14 00:03] Guard #149 begins shift +[1518-06-06 00:38] falls asleep +[1518-11-13 00:44] falls asleep +[1518-10-23 23:57] Guard #1153 begins shift +[1518-10-28 00:50] falls asleep +[1518-05-14 00:57] wakes up +[1518-09-13 00:36] falls asleep +[1518-09-25 00:42] wakes up +[1518-11-22 00:51] wakes up +[1518-05-09 00:35] wakes up +[1518-10-31 23:59] Guard #2927 begins shift +[1518-11-14 00:26] wakes up +[1518-07-27 00:33] falls asleep +[1518-11-02 00:55] wakes up +[1518-04-08 23:58] Guard #3119 begins shift +[1518-11-16 00:08] falls asleep +[1518-09-30 00:37] falls asleep +[1518-04-10 00:59] wakes up +[1518-10-15 00:10] falls asleep +[1518-08-02 00:58] wakes up +[1518-07-05 00:59] wakes up +[1518-05-05 00:45] falls asleep +[1518-04-06 00:10] falls asleep +[1518-10-18 00:11] falls asleep +[1518-07-12 00:00] Guard #149 begins shift +[1518-06-24 00:40] wakes up +[1518-09-05 00:28] wakes up +[1518-03-18 00:38] wakes up +[1518-10-18 00:36] falls asleep +[1518-11-16 00:19] wakes up +[1518-08-05 00:06] falls asleep +[1518-04-26 00:00] Guard #3083 begins shift +[1518-03-22 00:52] wakes up +[1518-10-21 00:23] falls asleep +[1518-04-02 00:47] falls asleep +[1518-04-20 00:41] wakes up +[1518-11-19 23:57] Guard #1013 begins shift +[1518-09-26 00:58] wakes up +[1518-06-26 00:00] Guard #2927 begins shift +[1518-09-01 00:01] Guard #1657 begins shift +[1518-10-22 00:44] wakes up +[1518-11-20 00:50] falls asleep +[1518-10-25 00:41] wakes up +[1518-11-02 00:12] falls asleep +[1518-06-22 00:28] wakes up +[1518-11-04 00:39] wakes up +[1518-05-27 00:04] Guard #653 begins shift +[1518-07-24 00:46] falls asleep +[1518-11-14 00:08] falls asleep +[1518-03-19 00:40] wakes up +[1518-09-03 00:50] wakes up +[1518-07-16 00:59] wakes up +[1518-11-12 00:45] wakes up +[1518-10-11 00:17] falls asleep +[1518-10-30 00:40] wakes up +[1518-08-03 00:00] falls asleep +[1518-03-18 00:46] wakes up +[1518-08-06 00:44] falls asleep +[1518-10-11 00:50] wakes up +[1518-05-21 00:57] wakes up +[1518-09-01 00:43] wakes up +[1518-09-11 00:00] Guard #3011 begins shift +[1518-09-13 00:55] wakes up +[1518-10-27 00:04] Guard #149 begins shift +[1518-05-02 00:03] Guard #149 begins shift +[1518-09-14 00:00] Guard #3119 begins shift +[1518-07-08 00:14] falls asleep +[1518-06-02 00:28] falls asleep +[1518-03-19 00:57] wakes up +[1518-08-13 00:22] wakes up +[1518-05-01 00:04] Guard #653 begins shift +[1518-06-19 00:23] falls asleep +[1518-11-18 00:02] Guard #3011 begins shift +[1518-11-13 00:17] falls asleep +[1518-07-22 00:50] falls asleep +[1518-04-15 00:55] falls asleep +[1518-07-02 00:58] wakes up +[1518-03-28 00:28] falls asleep +[1518-07-01 00:50] falls asleep +[1518-05-31 00:35] falls asleep +[1518-05-13 00:27] wakes up +[1518-10-17 00:05] falls asleep +[1518-06-15 00:57] wakes up +[1518-11-10 00:45] wakes up +[1518-04-04 00:18] falls asleep +[1518-09-20 23:57] Guard #743 begins shift +[1518-10-29 00:11] falls asleep +[1518-05-01 00:25] falls asleep +[1518-11-22 00:40] wakes up +[1518-11-13 00:02] falls asleep +[1518-09-11 00:50] wakes up +[1518-09-12 23:56] Guard #653 begins shift +[1518-07-11 00:38] wakes up +[1518-03-22 23:59] Guard #659 begins shift +[1518-04-09 00:18] falls asleep +[1518-08-23 23:53] Guard #2927 begins shift +[1518-07-02 00:04] Guard #1993 begins shift +[1518-08-21 00:00] Guard #1993 begins shift +[1518-10-05 00:53] falls asleep +[1518-03-22 00:14] falls asleep +[1518-09-06 00:15] wakes up +[1518-09-24 00:57] falls asleep +[1518-08-14 00:03] falls asleep +[1518-05-25 00:41] falls asleep +[1518-04-23 00:28] wakes up +[1518-04-12 00:45] wakes up +[1518-05-10 00:14] falls asleep +[1518-03-26 23:54] Guard #3023 begins shift +[1518-05-11 00:54] wakes up +[1518-11-05 00:29] falls asleep +[1518-10-03 00:34] wakes up +[1518-04-09 23:50] Guard #653 begins shift +[1518-04-28 00:22] wakes up +[1518-07-07 00:08] falls asleep +[1518-03-28 00:01] Guard #2927 begins shift +[1518-07-05 23:58] Guard #1153 begins shift +[1518-11-23 00:37] falls asleep +[1518-09-05 00:59] wakes up +[1518-04-10 00:56] falls asleep +[1518-11-18 00:44] falls asleep +[1518-10-08 00:39] falls asleep +[1518-09-10 00:02] Guard #2017 begins shift +[1518-03-19 00:02] falls asleep +[1518-04-01 00:07] falls asleep +[1518-10-05 23:57] Guard #3023 begins shift +[1518-11-01 00:46] falls asleep +[1518-07-03 00:34] falls asleep +[1518-10-23 00:18] falls asleep +[1518-07-07 00:46] wakes up +[1518-07-26 00:07] falls asleep +[1518-08-27 00:04] Guard #3011 begins shift +[1518-04-08 00:17] falls asleep +[1518-05-22 00:56] wakes up +[1518-10-22 00:36] falls asleep +[1518-04-14 00:02] falls asleep +[1518-07-25 00:37] wakes up +[1518-08-03 23:50] Guard #2843 begins shift +[1518-03-31 00:56] wakes up +[1518-07-04 00:00] Guard #3023 begins shift +[1518-11-16 00:00] Guard #2027 begins shift +[1518-03-27 00:01] falls asleep +[1518-09-01 00:57] falls asleep +[1518-11-22 00:49] falls asleep +[1518-07-05 00:38] falls asleep +[1518-05-27 00:29] falls asleep +[1518-08-12 00:32] falls asleep +[1518-05-22 00:34] falls asleep +[1518-05-11 00:21] falls asleep +[1518-06-19 23:52] Guard #2927 begins shift +[1518-04-23 00:26] falls asleep +[1518-03-11 23:56] Guard #1993 begins shift +[1518-08-16 00:14] falls asleep +[1518-10-30 00:56] wakes up +[1518-03-18 00:43] falls asleep +[1518-11-03 23:58] Guard #881 begins shift +[1518-03-14 00:39] wakes up +[1518-09-12 00:57] wakes up +[1518-11-17 00:47] falls asleep +[1518-04-16 00:38] wakes up +[1518-09-23 00:54] falls asleep +[1518-08-20 00:39] wakes up +[1518-06-08 00:25] falls asleep +[1518-03-20 00:10] falls asleep +[1518-07-01 00:21] falls asleep +[1518-03-24 00:44] wakes up +[1518-07-17 00:59] wakes up +[1518-06-23 00:38] wakes up +[1518-04-02 00:02] Guard #2857 begins shift +[1518-07-15 00:51] falls asleep +[1518-09-11 23:52] Guard #1163 begins shift +[1518-04-26 00:40] falls asleep +[1518-03-29 00:20] falls asleep +[1518-07-30 00:00] Guard #3361 begins shift +[1518-06-05 00:49] wakes up +[1518-10-26 00:00] falls asleep +[1518-07-03 00:51] wakes up +[1518-10-12 00:46] falls asleep +[1518-10-21 00:57] wakes up +[1518-07-25 00:02] falls asleep +[1518-04-15 23:56] Guard #3119 begins shift +[1518-10-17 00:19] wakes up +[1518-06-05 00:45] falls asleep +[1518-07-28 00:17] falls asleep +[1518-06-22 00:43] falls asleep +[1518-07-25 00:24] wakes up +[1518-09-20 00:40] falls asleep +[1518-07-17 00:00] Guard #743 begins shift +[1518-03-16 23:59] Guard #2017 begins shift +[1518-09-05 00:36] falls asleep +[1518-08-11 00:14] falls asleep +[1518-04-12 00:48] falls asleep +[1518-05-20 00:23] falls asleep +[1518-04-11 00:33] falls asleep +[1518-09-08 23:58] Guard #1163 begins shift +[1518-09-09 00:09] falls asleep +[1518-04-02 00:40] wakes up +[1518-06-11 00:54] wakes up +[1518-09-05 23:50] Guard #2017 begins shift +[1518-11-22 00:04] falls asleep +[1518-04-29 00:19] wakes up +[1518-05-19 00:57] wakes up +[1518-05-26 00:34] wakes up +[1518-05-17 00:10] falls asleep +[1518-04-01 00:54] wakes up +[1518-04-18 00:00] Guard #3083 begins shift +[1518-04-25 00:59] wakes up +[1518-06-22 00:02] Guard #2027 begins shift +[1518-08-20 00:34] falls asleep +[1518-05-25 00:00] Guard #3023 begins shift +[1518-07-20 00:03] Guard #3011 begins shift +[1518-03-27 00:59] wakes up +[1518-06-05 00:42] wakes up +[1518-08-19 00:19] falls asleep +[1518-11-23 00:32] wakes up +[1518-04-12 00:26] falls asleep +[1518-10-10 00:39] falls asleep +[1518-11-15 00:51] wakes up +[1518-09-27 00:38] wakes up +[1518-10-12 23:53] Guard #653 begins shift +[1518-05-03 00:25] falls asleep +[1518-10-09 00:49] wakes up +[1518-11-08 00:30] falls asleep +[1518-05-26 00:50] falls asleep +[1518-11-13 00:41] wakes up +[1518-09-30 00:41] wakes up +[1518-04-14 00:22] falls asleep +[1518-05-04 00:54] falls asleep +[1518-05-05 00:03] Guard #2027 begins shift +[1518-04-05 00:44] wakes up +[1518-07-24 00:42] wakes up +[1518-06-07 00:08] wakes up +[1518-10-02 00:00] falls asleep +[1518-06-12 00:16] falls asleep +[1518-04-10 00:34] wakes up +[1518-07-13 00:02] Guard #2719 begins shift +[1518-04-21 00:03] Guard #881 begins shift +[1518-10-11 00:04] Guard #2927 begins shift +[1518-06-02 23:56] Guard #3011 begins shift +[1518-03-12 00:38] wakes up +[1518-06-26 23:48] Guard #3023 begins shift +[1518-05-16 00:07] falls asleep +[1518-04-28 00:48] falls asleep +[1518-05-22 00:02] Guard #881 begins shift +[1518-03-18 23:48] Guard #3089 begins shift +[1518-08-08 00:57] wakes up +[1518-09-21 00:21] wakes up +[1518-04-29 23:58] Guard #2843 begins shift +[1518-03-17 00:52] wakes up +[1518-06-10 00:00] Guard #563 begins shift +[1518-09-28 00:57] wakes up +[1518-05-16 00:22] wakes up +[1518-04-03 00:13] falls asleep +[1518-10-04 00:44] wakes up +[1518-06-27 00:01] falls asleep +[1518-06-26 00:49] wakes up +[1518-05-29 00:28] falls asleep +[1518-06-29 00:56] wakes up +[1518-11-20 00:21] falls asleep +[1518-10-03 00:07] falls asleep +[1518-05-16 00:00] Guard #1993 begins shift +[1518-09-06 00:34] falls asleep +[1518-05-17 00:38] falls asleep +[1518-07-28 23:56] Guard #2857 begins shift +[1518-06-13 00:54] wakes up +[1518-06-01 00:30] falls asleep +[1518-11-09 00:57] wakes up +[1518-11-22 00:06] wakes up +[1518-10-04 00:09] falls asleep +[1518-10-19 00:00] Guard #3023 begins shift +[1518-11-09 23:58] Guard #881 begins shift +[1518-10-28 00:02] Guard #2719 begins shift +[1518-04-13 00:45] wakes up +[1518-05-15 00:35] falls asleep +[1518-10-12 00:00] Guard #3119 begins shift +[1518-04-07 00:46] falls asleep +[1518-03-29 00:03] Guard #2027 begins shift +[1518-03-24 00:43] falls asleep +[1518-04-26 00:49] wakes up +[1518-09-26 00:15] falls asleep +[1518-08-24 00:40] wakes up +[1518-04-14 23:54] Guard #2857 begins shift +[1518-03-20 00:32] wakes up +[1518-10-13 00:50] falls asleep +[1518-11-12 23:48] Guard #3119 begins shift +[1518-07-07 00:56] falls asleep +[1518-10-21 00:03] Guard #3023 begins shift +[1518-08-15 00:53] wakes up +[1518-05-07 00:55] wakes up +[1518-08-08 00:53] falls asleep +[1518-08-02 00:49] falls asleep +[1518-11-18 00:56] wakes up +[1518-10-30 00:50] falls asleep +[1518-11-18 00:41] wakes up +[1518-05-30 00:16] falls asleep +[1518-06-28 00:00] Guard #3011 begins shift +[1518-09-23 00:17] falls asleep +[1518-10-26 00:54] falls asleep +[1518-10-08 00:31] falls asleep +[1518-06-04 23:59] Guard #149 begins shift +[1518-09-07 00:08] falls asleep +[1518-06-03 23:52] Guard #1993 begins shift +[1518-07-21 00:14] falls asleep +[1518-06-13 00:00] Guard #2927 begins shift +[1518-07-24 23:48] Guard #149 begins shift +[1518-10-08 00:25] wakes up +[1518-10-03 00:03] Guard #743 begins shift +[1518-05-09 23:57] Guard #2027 begins shift +[1518-06-21 00:49] wakes up +[1518-07-13 00:34] falls asleep +[1518-03-26 00:13] falls asleep +[1518-05-12 00:28] wakes up +[1518-09-27 00:42] falls asleep +[1518-05-29 00:04] Guard #2719 begins shift +[1518-05-13 23:56] Guard #3011 begins shift +[1518-10-28 00:56] wakes up +[1518-07-02 00:37] wakes up +[1518-06-17 00:32] falls asleep +[1518-05-13 00:36] falls asleep +[1518-04-25 00:46] falls asleep +[1518-06-07 00:01] falls asleep +[1518-10-13 00:59] wakes up +[1518-11-09 00:02] Guard #3011 begins shift +[1518-09-26 00:57] falls asleep +[1518-09-11 00:54] wakes up +[1518-05-14 00:29] falls asleep +[1518-08-02 00:29] falls asleep +[1518-08-24 00:00] falls asleep +[1518-11-13 00:13] wakes up +[1518-05-05 00:56] wakes up +[1518-06-22 23:54] Guard #2843 begins shift +[1518-08-07 00:48] wakes up +[1518-11-19 00:00] Guard #659 begins shift +[1518-07-22 00:34] wakes up +[1518-03-29 00:54] wakes up +[1518-10-07 00:30] falls asleep +[1518-11-21 23:51] Guard #1013 begins shift +[1518-10-18 00:03] Guard #2027 begins shift +[1518-03-25 00:56] wakes up +[1518-07-16 00:38] falls asleep +[1518-06-12 00:59] wakes up +[1518-10-14 00:00] Guard #2027 begins shift +[1518-05-11 00:52] falls asleep +[1518-06-15 00:49] wakes up \ No newline at end of file From df78045a98893113a8ce5759e0230e35d2a884da Mon Sep 17 00:00:00 2001 From: Ben Date: Wed, 5 Dec 2018 23:15:56 +0000 Subject: [PATCH 4/7] day 5 part 1 --- AdventOfCode2018/5thDay/challenge1/a.out | Bin 0 -> 23848 bytes .../5thDay/challenge1/challenge.txt | 22 +++++++++ AdventOfCode2018/5thDay/challenge1/input.txt | 1 + AdventOfCode2018/5thDay/challenge1/main.cpp | 43 ++++++++++++++++++ 4 files changed, 66 insertions(+) create mode 100755 AdventOfCode2018/5thDay/challenge1/a.out create mode 100644 AdventOfCode2018/5thDay/challenge1/challenge.txt create mode 100644 AdventOfCode2018/5thDay/challenge1/input.txt create mode 100644 AdventOfCode2018/5thDay/challenge1/main.cpp diff --git a/AdventOfCode2018/5thDay/challenge1/a.out b/AdventOfCode2018/5thDay/challenge1/a.out new file mode 100755 index 0000000000000000000000000000000000000000..d6b73f632a905c62d9eac4850e67e5777465c982 GIT binary patch literal 23848 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 +#include +#include + +int main(int argc, char** argv) { + if (argc != 2) return 0; + + std::fstream input; + input.open(*(argv + 1)); + + std::string polymerString; + std::getline(input, polymerString); + + while (!false) { + int numOfMods = 0; + std::string eh = ""; + for (unsigned int i = 0; i < polymerString.length() - 1; i++) { + if (islower((char)polymerString[i])) { + if (toupper((char)polymerString[i]) == (char)polymerString[i+1]) { + eh += polymerString.substr(0, i); + eh += polymerString.substr(i + 2, polymerString.length()); + numOfMods++; + break; + } + } + if (isupper((char)polymerString[i])) { + if (tolower((char)polymerString[i]) == (char)polymerString[i+1]) { + eh += polymerString.substr(0, i); + eh += polymerString.substr(i + 2, polymerString.length()); + numOfMods++; + break; + } + } + } + if (eh != "") { + polymerString = eh; + } + std::cout << "Current length: " < Date: Thu, 6 Dec 2018 09:01:24 +0000 Subject: [PATCH 5/7] Finished day 5 --- AdventOfCode2018/5thDay/.vscode/settings.json | 5 +++ AdventOfCode2018/5thDay/challenge1/index.js | 5 +++ AdventOfCode2018/5thDay/challenge1/input.txt | 2 +- .../challenge1/istolethisfromsomeone.js | 44 +++++++++++++++++++ .../5thDay/challenge2/challenge.txt | 14 ++++++ AdventOfCode2018/5thDay/challenge2/input.txt | 1 + AdventOfCode2018/5thDay/challenge2/main.cpp | 0 7 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 AdventOfCode2018/5thDay/.vscode/settings.json create mode 100644 AdventOfCode2018/5thDay/challenge1/index.js create mode 100644 AdventOfCode2018/5thDay/challenge1/istolethisfromsomeone.js create mode 100644 AdventOfCode2018/5thDay/challenge2/challenge.txt create mode 100644 AdventOfCode2018/5thDay/challenge2/input.txt create mode 100644 AdventOfCode2018/5thDay/challenge2/main.cpp diff --git a/AdventOfCode2018/5thDay/.vscode/settings.json b/AdventOfCode2018/5thDay/.vscode/settings.json new file mode 100644 index 0000000..e2c18d1 --- /dev/null +++ b/AdventOfCode2018/5thDay/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "ostream": "cpp" + } +} \ No newline at end of file diff --git a/AdventOfCode2018/5thDay/challenge1/index.js b/AdventOfCode2018/5thDay/challenge1/index.js new file mode 100644 index 0000000..938d0e3 --- /dev/null +++ b/AdventOfCode2018/5thDay/challenge1/index.js @@ -0,0 +1,5 @@ +const day4 = require('./istolethisfromsomeone'); +const fs = require('fs'); + +console.log('Part 1: ' + day4.part1(fs.readFileSync('input.txt').toString())); +console.log('Part 2: ' + day4.part2(fs.readFileSync('input.txt').toString())); diff --git a/AdventOfCode2018/5thDay/challenge1/input.txt b/AdventOfCode2018/5thDay/challenge1/input.txt index 79b9df0..ab145ca 100644 --- a/AdventOfCode2018/5thDay/challenge1/input.txt +++ b/AdventOfCode2018/5thDay/challenge1/input.txt @@ -1 +1 @@ -kLltgGTKFjdDpPkKcCJjJhHfmMAjJasSFfHEesYMmTtrRBjJmcCMbDdmMyOoUuGLrRlJeEMmxtTXjKzRroOmpjJqVvQPMZAXoOxeEZtTzLYyqQnNlMmafFLlRrkEeNkKtTngGlOoLXxtTLDdBblRCcqQrFfLQAaqeEZMgGbBOoFfyTtIizZuUsSYmbzTiItQqOouUGgZBCcsSHhxXIrOoRizlUuZjJefFCcEgGMmMmRrXlLyYcCxvVCcyYcCZhHzyYWwcXxlLCeECcOCcozHnYyNftTJjFSsrRTtqQSFfFfYxXysSsrMKkmeeEEdDRHhNCcgGnQqiIqQLlkKbPpBQOlDdLoqhjJtzZfFiIVvTMJjSgGsmyGPpgUhHuoIzZiOYkKPpUuqBbQcHhCTiZrRLJEkKuUejlTNiInNntdDxXzAauUOLkKloIdDzuUjJvpPViIbBiOGgoIJnNFfYyjbBZWwSsdDsSUuBUCnXxNgGcKJjkCcuUWwiIcCCcDdsSDUumMdSSuUPpyaUuqmMQAYkFfnNKMmsCgGVvyYJjcnNlLVeEvEesQqvVEMmeWMmwBbyvVYUuavJjVTtAJCczcCZgGcYyCjJEejuupPUStTsPphHgGafFAvVGgzWwAafiIygGUupsSPYfFFLlzrRZFaeEAWjJTXWwxFftcCjJfFkYyKwuUJKkfFBbMnNmIPlLZyYzzZpijnlLwWNLlfGUuTtglHFvVfHhhYywbBvVVLlsSvKeEoOkZzYyZzWGxXgzZBUgGaAvVuCwWNncjJbDdQqGgAatTFAaftLsLNnuJjUlfFSPpmMfFFflmlLMThFfXxHUuEcCrRXxezZrnNRsSWwWwZUuzFfTtiIaAvaOoAVGPpRdDrgWdDtSsGgaAfFopPhHVvOksBbSKOntTLlNjJKkhHGEeGgjtTaMyYmPpAJuUHhZGgzvVDdmMNnFCcfgzZgxXRHhrGzZOovVcLlCUuoCDdchHOuUsSvVNAanoTcCwUuchVIivHFcCuUHzZFfCcTCcthykKYXxUuzZOHhoIsSiVvDFXxIMmifmdDMdIbBNReEgGrrFRrcCfkKRnNnNgGnoOxyYRrXAjSsJoOgSsGgGAawWazyvrRtTVYvVLfFtEeSsiIHhiIqQTlzCcdDhHuUuUuUZRrZVDdWwQJAajqvHGoONnQqWyYLeENWcCwpPybByvxXVnNgGYYOoQBbqifFiIlLgGImsSIiMGgnjJVvGNEenIigeEnNvGgXgGhHKkXIiEhHvVeFfDdxxxXzGgZpCPpcXxCcGgRrliILZzBbCqQGgbBZOoYyiIhHUYyuLuUlGZzgzcPpPeRrEOoRryYbwWBYyrRlLbioOIeEBiZzaAaANsCcjJVvSEkAaEMaAAalCDdcuNnnpPWwNkaADdKCfJjFcpjJIiPWAGgawWAaVZzzlLXxZHhvxRrdcCRrYsSyjJmBbMufFdDWwLfFYyvVlInNpQgGZzqPyYifGggGFSvVTorROtEeDdajJJjNnAjBbiINncCuhHUxXJsHZzrROodCcDnNgQqGtBbThRhHrGBMmbrxKtTkswWSJntTNgGOHhouwWUzZjzugGdDzKkrKkRZtTgGhHUeEZerRmMFfZvVvVzJjdDWwjoOvVJEhHQqLljnNtXyYLlENnbBeyYTQqtmIiHKkhMMmpuQKaAkqbyYckMsSmuUMmxpPXOkKwWoQqYdrRvVDgGNnJOoVvkCcWwKXSuUdDsgGnNzZwWoOPpFzhEetFfvsSVdDMdBbtTDJjmiICTtcTITtpPVvcCiZwWFfnNlPpLFfCulLUcfFQwWwDdXxWKqlLaCcZMmzGgAUukzZRGgzZcCJjsSyWIioOwYCmMcrjFRrSsdDjPzZpJpPfJqQZzKRUZziIurcCsSaAeTttrRTEjJlOoLYmMuUPpZzyzWwZGGsSgvVxUuTyDdYtpPoOXeEMOomSsZLKsSklnNbAlLCcJiIjaBmMoOOodDHbRrocCOoOaiIABhLoBbOXxVvlgbLlBGtNnTExXWfFnNwbBecCELlhHkqjJVvqQQKezZxXzZUuaAzHhcCWwtvVhkKHQoOaAYbByXxMmdQqDdbBJjDXxjwWJlLxXhHiIALAKOokJjoOalZzcCvVIiawWKcCgGWUYHhyvVaNbIiBnAoOrRuVsSvbBJjdfFuYyFfUoOzWwjaAlLYyhHJZqQJoOjnNkKeRFfriTtIHhEVtTKZzhHEenNrRRrczZbBiIIieyYEecCEGgjJJjQSSssqCbBnNTtqQEEFFffkKPOHNnhDdofpPrRNnFfbBYgGxXytKaAkTVjPpqsShNnrRiIHJjQJMeQsSqEGqQwWgSsdDLlWwaAnNTtbzZBOoruVvRCcqQOGgoMyYmrjDdvVfvVFJoKkOwWeEFfeEzZCgGcuUtIiIiFfsSgGyYTDjgGzZPHhnNLlGgePpVvEHhpJdhUuBbJjHqQUqVpPvETsStSsZSszQSMmWwOmMnNhaAHDWwNneESsiYyIToOtddbieFfEIAJjhHcQvVqCjJRraBDLlIiJieEIjUuaiIAIiuUQqDdTtWwuUeTKktDddDKktTjJdDELXxlckKCBbwbaRrABSsWJthxXHTsSGgSXxsUzZBDaApPdbaAyYUsVvbdDBzZTtTtjyYJsSNmMVvTtnmMQSFfsqRrOouvILlitTaAKKkkYyeENnxwWXVJjoOuUEemMgGSTtsnNzPpNYynbBZGaZpPRrgGzZTtTtKkzqUuPpyYQbBTtZsSzGgAftTpPxwWAaXaFfAPptTqQjRrJCcFEekKyYDLldkzZKfFNjOoJpPEeFfpPnqQWpPMmUUnNuufCXxcZzjibBgGIJdDFvLmMAXxeEaFfmMHXXxxepPRrwsSWTtAaRTtrVvtSsQqTPoOIihPpHKkpYQVvqYsSVvQJjqFfqwWQyGgfFUzpPZyNndDwWtTiIDdYOoyYzZJtRryYxrRmMHhXlDdyYzSsZxgGXLiQqbuUBwWCccrRzZkwWfFWBDdboljJcChHVvLGgMmaAcCwWJMmaMMmmjzkKcYyJmMjWwmMbgGgGOxQqXnNMmoHhBXHhxCVvCmMNIiRidDIrXVvxeEtTtTyYnEeKkuUmJjmMOoGgiIMlgLlQqEMmexXGLclLyYfFQEeHhXgvlFfLdDwWnNMmvzZWCcgGwMmWODYydiIowvVbPpBEeIAFfnNMVvmadBbDiLlCyYaqvVQIiyYAqQtTiIcaAlLQRuUrhHYVvTUucCtyPpbBcmCcFfZzMpNFzCcUuaARrUqvVQuSsZwWcCsScrRCfrRVGgveYyESXxsMmWWwWlLIiwCtNnSsBbjJXxSsDSslLdmVxsSchHCXjlwWOQuUqXhHSssVAgGalLvSMAPpKkCcLlRramdnQqNCiIVvcgzZNnFDdkKMmzZfBbBbGuUmXukKUxIiaAGgAaWwcivrRVjJrjJQCCcLlEAWwaecaFfAtTWwqjNnLlJzZMsSmzltIiALlhHUuoGgOaZziJKkYyqQjfFgGCcIoIidDTtuhHiIZzlYyuMLlmUSsuvVbaIsrKmWwMkXCcOoxoOXCcoONngGVvTtSWRrkKmclLCNnxjJXMHiIfFkhHKerRMOomYTtyEhIiwosLgGEdDZzEeqQTtAaUUuurRcCMVvmepPzjtTvVJiIBjJyYbgdDSsGrRpPtgMmGTkJjhtTraARBbHhTzYyOlxOgGoXfFxXMmfFdVuUiIxPpKjJkKkWQqwtTkKZZznchHMqQmzZAFeEGgagGAfdDTbaDdGbBgJjcCHhABxXULegZzGEliILKkZzmMbBlOoJjIiubBamNnMWwVvxXhZpPuJjUCcPpzaPWwuAaUxXucjJCIgbrRBvVGgVnaASXxsNAaHhNnIiiIHBblLCtTuURKkCcGgAsSIxXVvimMueEbQqNvVnBifFILRjJUukKrZlLzfhHFWwVrRlLvxXuUMUuuUKiIkmZmEeMaAcClLETtdSlLxAaXsNxGzZDSIvRrVpPYyxrFfPpGXiItTzZxgKkKkoOJjmaAqBbNKJjkZnNoOjJnNzdDJjKHuUTVvLlthkMmMlrRLmmMQepYyIiZzvPpwAadDZzQqwWGwWgFjJfvVbpgaAGNVvndmMerQqIiREDzZFXxfOfFoJxXLljeESUuswWUuPNsSHhGgsSfeEFTiIKkOoRkKrGkpPnlwknNKxXkKAajEeJpeEESserDdEehHAPcCprmQquqQUMvVIxXiHhRXxEeaAajusSXxzZXxbRrnPpHCcNZUmMXxJjLlpPVoOLlhHbBIiGgvuGgcCcCRRrsBbLlMmWwWwvkHhKVSIhHuuICcpPiEeYjJcCZzDFfdynVvcCNLlEesSntTNHhpMxXiIwTtARraeEWLLllJWwhHQEgtTGebBPdWkHhKnNyYuUwDpsSnNwWHhmAaMHYGgVvSsyJjoOhgvVubAjgFTtFINVvAMmatTGgSsnwWpPGyiAZzeEditLlWwyfsSFSIisvVgGAyoOYyYkXxjciLldDIbBSsfFgGumMUxXZHhEetcCcCTzJiIYaveEtTVAIvqQfqbBFffFeEQEeFgtQKkhHfFAalFyYroOoORuUfAaXzZGgxfFlTtfFLuUurRUeExXaATxXzZIIVvYyCckpQqRrFfFfJKkINnIiWwijRrJJxjJWwXCGguAajJUlLcLlkKhzgGXxlRrxXXCcYAaqQtTyxZzLRrhDdHXxJjiHhINnaAgIioOypPYnNuULlkxXkKrUuhHRIiBbxLjJlLlXKvVLlSsFfsSpPCcfBbnzZSsAaUjJJjYyuNnNBcCbaArwWRLlUuzYyoTtEeoDdOoOKWulMmLUkKIiOPQqxXUjvKkVkrcCRKFlLruzZDdUPOopxgGWwvXxVvqQxXxpPXVsBbSXWxyYXJbmPpMBjsAaLYaQqtacCATAhYNnNMmdsSwWsWwseDdEIiJsSfFRrjzZdDKkbEedDJjcCSsGxewWEXqTpPtQIifFTeEtzZgAuKkUaSDWwdsYYyjhHzZJdDyTxXNtTeEIilLklLdDKnYyWaAdYhHaApyYPiIyrytTcCYQqpPPXxMmllLLpBbpPCKkcyHhFDdlLHhnbxXxXBNlKWwkKPKkzEexTtXZJsGgLOoJjyYIiTQqqQOotveExhHXPpGgVTzZrbBsSgauNnjdDIYyPpuUiLtAaCcTWwnNlrRwMmWZzYPpyJrRTtZzqIiQNOoDdmFUsqpMmPHhQSuSsvqZjaaAAeEJdDuUunRDdDHhseEdDMUrRuiImlfeEFSCcsWwYCPpcNnyQMmOoEehEiVpPnNlhHWwLRrwoOWpPGaAgVvXphHPlLhHkaAKxsSNnrgGzZYyRkKUuXfpPFoEtTeOcrRCMqXwWhHLaAAaFfsSdPpDHhKkLlSsOvVXGsSgxouUogUuPpQqbBDdXxcizZICGdqBbQqQJRrgGmMjbsSkKQqBeVvTsSgGtEqQCTtFfjJcqQMmAaRrbBkKbzZBqgFfMBuUWwYyMaAmrxXWjVoOvKwWkBlLbAatXxYdDRxXryOoeYyEOoDtTVvyYvTepPEtVjlLJXxQqvVHheEFZzfdDWzMmgsSGZwSlgGLwWzxrRXsSAaAabOooOQhHqdDXxPaApIBbdDimMrRdafFPpAEeOozZAaVVvvijQqsSJIDFfqqQYOoyQBTnRjJxTtXjJRrCIicKkBbZBbzrNaAIisViIsSczZCdDEevSJjeAaEtBPzZLlYyGfFJjAaVvQBzZzJPpPpaQquUwWiISdDdDsBbBbpLlPwZzWNZSZEvVezseGgyzxZzXFyYTtgEdDegGUCuUdfgGkKFDuUwTtqQWceEdDvVoOaGgseESRUusSUuJjhHLJjfFlGoHhoOCTtJjqIvVbkrDdEeCxXkQqKGgmbBQqCIKlKkLkiZzASOokKsShHYydWwFfhHDjJcCkKfjJFHhOWwmMvVoyYrRumMUJjkKOhAaqQHhQqHKkiIeEbBmFfYnNyMxrRnNzZBbeEcpPQqCAgPpftnNnIiNTZzuJHtTuUbBiEOoSyYzEeAaKkZpPGgzOoKkLlUsSuOoxxXyGgmwzoOHhqJSsmfyYFeVIsbBSgWPpWPpSsEQTCctbBdwWGgDMGscCSuUpSsJjaAPceEowZzWqhHbpPqiIPpQEeXUuxRiIjrkKRJDXxxXdjJbBdDmMFNnJjNeEXxnsSfiIJxXmMWwtTJeEsSGgNDdpPCctsSsSZzYFfHhuTQIiiIqhHbPpPGlEeLLllgGUuLgNnRPpEdNVvbuUBbBBbRQfFQqqrpLSsiIlQqPxGgeEXzZaAPpBbVvIiFfeEeOQlLqcCEeWiIwonJHhjAaNvXawWAvSshHdDBbdDKkOkYyKHhGwWKlYWiIwdmwVvWcjmMcJRKpzZxXdDPxLlncCNPKkpJnNjPpDdJjGgXSKkhHsNiuUInOwWeYyEgGommAaMqQMNnxXyYdDDyjrTtiuIkKiYsSyGgMmlUuLMfFSsjeEzZJmaAkKVcCvZzwWLlTYvVOXxpyYfFDGgjaAJgGWwstTrPpcCikBbgGKQgGSsNnkKcnNPfFWwxmtTjQOHtTNQqiIfUOomMnDdhHNkxoOSsDdPpSsXYyWiLlIwKbBkGLXxtLhHlAcdDCxlLXfFayAaZVVKsSVvkKkNnmMgGgGZjJfFzTtviPpIJjwWGgAoOaLHLLWwlCcZbBiIzeyYpPaAxXOYVvynNbiIGqwWsKkvVVeEkNndxivsSeEVvfFBYyFfjwWJBbSsHhjlLLwWrRuUlKkKBbpEeWwPYiIvVykdDJGVRrVvvUuQeEOoEeiIyJkKaARrfFaAzZMmOoIiAaSyYsUsSQgGgGKvjJSSsIijJZMmzZzQJjqAaKkYyNnpVvPAjJaEPLltTGgpWuUTbBnNtSssdRrDSwPpWWwXAaxwisSrSsRIeEaAoOPggGpPVeoLGglCcUuOEGrRgvgGbZzBLlaVvAzZvKkVeDdDddDEowWLlOxfFjJftTAafBbFffFFbpjWjZzuRFiIfrQwqQRvVruYykKtRauUlAUuaFfLAPzZpPWwpoUSiIsuGgfgGvVFXxnNtTLlnDdTnUuAaNCcgFTwpPiIWMzZzofFOZPpnNfFkUuKFNOTtvAvVaVpPojJvfFVnrSsRWxXsSKdDjJkHUgAaGcQqsSnirdQEeHrRhqueEJjUDTtwHhWjJaGxXgAvDdVSwWxXszZKnNSqlLlLQtVvTnpPNJjbBbBpqQPYgGrRyRrGgSshaDdJbBnAsKkhHDZkKzmMCcdOouUdyYzZWxXqPpQOowDSJGgjdYyDCTtnNiICtSZPpJjwWWwzmXhHxgGBbMqQoONjUuDdYhiINAanZLSslzKcCfFyYkfvVFeiIAHwozZOqQhlLPDdcCFfpFfpPAaehHXxGgDQqGgwWhHNIiCKIikkLlKKRrhJyYYUhHujJUKzRNeQLlqEnVvgGacCArFfWRxpNfFIZzUnNzZuiYpPMeYyDddDSuUlLsdXxlLcCLVvnyvVGgYdWaAaAwDOfFSRrbBsQqkKBblOovVSsZzKfXxeEAcKYoOykCtTabOjRrJoJjzeEAawWZwWBpQqticCITPLGSMQVXxvqIjJKkpjeEJrQveEeEVwMDMmUuNcOaAAaoCEepMmhoOHQjJmFfGkTLltWwNXxftqQlkoOpPpmDdpPMNAanIizNnNuUnNyYLlClLqgGdDgnPpNZzgnJjRRrWmMDCcdfFwZzriwWFfzZFeFfEfWwmjUuJMbMmjaAJvWwVnNkKzpPKGqGLlgwkhxXzZbBZtTzlqQNRTtALLTtllLTpnPpNoOMsSxXmRrDdFfDefLlTtHhfiIcKkWwkKCcxXsSmMOogGqFfQiIiIGgwWwWxNnhHcvPpOoVPpysSQqWHSjXWwxXxEekKRrJeEsgEUuehHBcLCYbBQqyYxcpPsSFfsRrzZzXxZyJjTtYdDXOoxwWbZzGgcCpgvKkJjDdWCAahcjMmJwWbBhHgBgGIoOEeiIibjYyaALlinNyYmMIiAnHhNVvaIzZpPYBbTJjxGguIFUuOwWofFYqkKQydDgJjGYKxXkzBbjJLluUiIqIiQeEUuZysXxSjNqQEefFoOjtTAalLnNIilzZGgCYmMxDdXsvVSeEgGQaAuUqQzZtEepaAPdDDHhyYyYZOMmtToIHhiTXxtvVzdEsJjvVWHhjzZPkKpWwWYTwWtxXyYoOcXxCKkvOjjJGguUItEemoNnOMIyYfFXdXxsSvVDxnGgEpPefFNiTtTOodHheEDHhfAZzMfFSMmvJjhrRHVdtLluYWIiVfFcCtThHAaKQcCqjpnNILNUwWuMmZFNnRruUdDfJaYyzZjJbBACcLlbBkGpPJGgukgGKNBbfFnTtiIiImMKAancCHqmMzZvVcCKGgkWwQuUqHhAadDQaoOAnNSTmKkWXxEIRQquUhqQsrGuOoULeEpPlZzgGbBBbtwWwKmMCqQdDcaAqQrjJxXWUuwDdMmdDocIcuUFfUuMmqQCSyOoYfyYwWfjkKsSYkKaAZYCqQUBbwIitPpprRbBkVVvNnUuIiOoLlAmEomXxmhHtTiIdUuTthHrRAaAvLlViIGgaODingGNIMmlLMDMmUukZzKxXrRWiRTtoOQquRrBboIzfFeqQWwUMVvmLlfFiIiINnoOlLAaixXXxHhIgKkZzVxxXXvGOoFpsTtzMjsSCckJjJXxdDtTGCZzMmAzaAZawOoWeZoOZzWMsSAYyamGgwfNnuUxXFoOWsSwsSzFfQoOAamDdMWwGsmEQqrRFfzZAxKkXeETvVxyHhYgnxBbhtyYTOUkKuOJjoJiIjJVvEHUBboOBVCcKjJqQdDkwWnMmrnNmUuMBbRLFwWftTTtgGiIElCgUPmMpMqoOQmuoOaAFUuflLnuosSyrRYKkpUuPtQqQeEPpoGgmMyYuUCzMmmTtOoxXMFBbiIfFhHfTtqceESXVZzdxXDdSIXxBNnESxXOoyADaOoNnGgKukSstTXGgUuuUNnxMtTfwiIDzkVWwvKbCcWEeEeEeSjJspPYywAaJrRjBNnQqnNpBXKuUkFrGuUydbBDbYcDeElLHzPpZveEaAVmMgpPGuUvVJnzZXPprRxJjtRquUQhvBbEdmMDeVFfYrmMYfFcBZzvVzoYyOjNuUnYyJQqZsSjClLCccSslcAPpaCCfFpPIigiILlvZzVyMmqQKkvslMKkmtcCiInNqQsQqIiqQSzNNfVvoAaOKVMpTtncCNCcBbPvVSdnlLXoOvwPIRtTtMmeRVvAariIGgeEzZSsOoEUuOoSsTLdDlrRPcVvnWyYwjgYVxXRDJjSkjJEeIaNaGguHhUnYsSyvVwWNoOiIyYqOobzZBZzXbNnBbOoPaAyYKkTSEKXreEeTtJjxcCwreEyYOpPbByYzJjZCcoyJjYAaRtTiNnIYyrbBNneEDdRraAyRGFCfFOtTOoofFcHoMxjMNnlVtTAaOkiaWwOGQqgVQqAawWgupPZzUuUPzWwDdZIScCsHhisSpoOSdUuvVexwWXKkgznQfsbmCcraUuCcAFRDuNnUdDdcCgzbRDMyYmdIiaAzZrVvotrwWhHUuFzZJbDjJhHdAlLtTuUfFagCMmcGjSViIvFfSYvVQqyITHXmMbqQaSsABbGgqRrQsSBSsNnjMmIkKVvDdZzTmzZgGmwWMyfFYpacCApProOvkMXoOxmKVtTlLSsCGgoOcSKoxXpXxFiIaAHhyWxxXXADdaZdTHQPCKkdDJBgGbgXxzHGgXWtoOTwVvpAabBHhxAvkhHeEISKQiCQqTtcoocCSssrRSgTihHIsZIzmtGgTRgWxXqVvQwHbBtFLBblfTjDdPlfcCFLWwNfFqIimesOoRSsURrQleEJjWyFfMmQJjBbVvBboBboaVvAMmOVzZnSHhVvsYyPFfeqydDaAOOostahIPpiozZOKkHQqegCcipPIGSFSLlhHpvVGaVvuUALlQqWwgRrsSqQcsQzZqIOolLsSZQqhpvqQCcFkKWwfLlLlHmfFUBKkzZJvVBbjPzZOFnNTRreMmEtSsHhqXkKxuWJjqtTFfmMrRqQQQqwdDUvLlDdmNqQnGcCrLllLUSfCcwdDWuhHmMmMAILaBbAriIrJZzjQqQnEeGEegnNqyYCcIiPpcCaAckAzZxjJXtcSsrRCTCcEmzZZzMxXlXQYyqwIiyJjKkgyYzZHhGXaAxYGjXxxvVCcSsSnNsKkVQbBqdFfDabBAzsSZcCVvUuYymYyAaqQMdovVLlOpVvWwPaASbBsDvDdfUuFXJBQWVvwMmuiIWwzZuUMOhbBHOLrzZRlNncQqeOhHbaAVNnMmvaGwWilLTtIhqoOooOZJiQqgNiIwqQLLljoiDpAaqQYyaAWQtTqwPrRYyNlLPbKkpPxXpttLcCloOiQqsSuUfNpPTtnSxDobzZpKkPzEeMNoLaAlOMmatTzOoGxMGglHGghmhHSUusIYyiyYwWJWNKkRrNDdnkKniIVyFffFYONnXxzZqQlxXwEevoOEeVWFNdDFfkkoxaAXWvVwMUumXxMDdmFfOnNTyYvVeEKRqQEYyeyiItTQlLCnNcWxOoXyYIpPuUFJjzZkKdDQqgGsSUeEuIiPxUWOowuUumcwJlLjCpPcJsnsStTNSjGIiiVmMnNUSXxsoOvVlLESLcCSstTGsSeUuErsSeERGgJjaXxAlLZzTtNngkKlhYyHhHnnNNjplLkKtFbBKLlXiIxwkKoOWUisKaAkieEIXxSaAaAjcCJAaeEqjJQxheEFNnDjXxIGguTCFfgEejxXZoOzQnLlAaZzXxNZzLlqbBSSSnVvyYMmNrIizZFfRWiIxhQSpPqQmKkCuUcghzYyZXxgGqQCcokKOJGgKklLkKpPuhHhXOoUuMmCcbBdDhtVYJGgjbByvGIruUIirRiJLgGTtWwlZPpiZFJpTbBtSsFfUuPQsJSsjAabPpYdPcChHCGgPwWEeBWwbIPNOZzaMmHhdDAoCccfFSsuqQUBbbEevOeEJjBbgiISsSsJjiCcavBgdDTaRlLFShcCHYpJjPQmmMyvVYrXxXLPwzZfFlkApPaKkZaAaAzhHQqCcmDdbBqVvnNPpQMKDVNnfFvYvtKkKYykaiIUcCZLhHlyKkdOCQqceYyrRELDdlvdDtTWxXwCcgfFDzJjuUDdlzvVWwaAZrRXhHqHhQqQojNpPnJlLgCcpPGyYjJpPanVDafFnNxXvVsSPaAaAIJjUtEeKbBmMNVvlpHhUgGuyYyYcIizZEIieSsNfyJjdeVBXxbvLdDyvVUuYPplLiOrTZaRqQrAzTteLacCdIYCcyvVWwtTEeIKkcCfFdmJpPZzTtzZBbjJwTtHhWAzZosJNnsAaSbMghFBbBsSHqQhdDbsSbAaIiBkdDtssShgmyYMoOGDdeyFfnbQqfaAaACcnUtTgpQqwWzeLLlEzZKgGkeJzZZzrREeEXEuUlzvVZzoOuUZKRxXfxXFDvAoMmHRxQzZeEpBVvhmEjmMMmRwvVWrJJbtTBJfHhFtTwWjWwlLHiIhZzRLlrjAlLruaJjzZtTWwhqDdlPpLtbJjBusRNnrjWwbVvXbkOoOHhoKQYRBbBbDdDdqLlSSCMQQqbsoOwQSbkPhSszZHPpVvNnPyPpDcCdEeYwUuWpDdwvVstTMmXYySVvsxMmnWpupPPpbBKkKNdDUcCRSmwUuEevTocPIQqdEgKBEeCDskKmsSRdDNhPpHnsFfehyYeKkENEeQPlIiJZsSKkNDgjJyYFbBwDdqMmncBbVvCsSNvmqndDNvhFfHfPeEZqHOolLhzZSskQqTtKYylvVnNfFTtbbBDOonNfehmMgPdDpGHtFTtSgGNpknaAhHNVQqSsaASsHhvAaEekAsSJvfwWFrpHGWBlLLvIiZzzkdSsDKxXUuWwCcLehDFfwWvVRrWbsFqZzQfqrLofNncCFObhMmUnziItTwQLhPpmMHlqxrRXlLVvzZcyhUfFuHhHWwgGOoBfFbkKYNnxlrdfFLWwVvDEhSiIMmbBUuTcCdDtrRkKCcnoUvwWVueeICcikKaATvVtQPmMzenPPbBJjTKkPSlFfBbLRtZzVvogGxXOOopPxrKkNnUYyLluyYIiBlCcxXYynBbeGgEBWZOoeEfFMkMXOofkHwWxXGghKSlWxbZjkKpPJbuUBSszZznNZOobBjJzCcBBfNntrwANcdDCndUcnAUEeuUubBwWkjJKuYcMmRkKrRrgGcNnCgTsStcmMCmkXgSZzsGxgqRKkVoAaHLuxyyYXxjRHhruUflOotTfIfFiFcCLQcCqFJcjJFEeZJjaAfIjpPWlrRHhHhbBdZzdjPxnNXmcwWSsykKYNCbBomMbBCcUugOonNQEelZXxznmMyYNfFHOPpBbyYoGgakKvmFXtbbBBkiFjwyYxqQKrWIAaiwRegGEgqQBpPbeGgEyYWzSMmbBbdDSsiIaAfFzZMmJjfFMmXoOxvtAgmMGezUjENnecCeBbEJnMCcwrRAwWPsIiiIaUuuDUjiIcCFfvBbQqVTZzIixXQpVvPNWwGnNgfFhHTCctxXvWipknNKPchHCIpPvUuVerxGgEePCcqQpYmMXxZQqzyqeEzZQXtqQSsTLlisSlLemMiIdSsUuYyDwWQqQqtTsLlpPaASuUkJvVbHhBiLlvVjJXxBUNnuGgbjSnNMPJjpKcCkuHhSyflLIMNnSsAlLrRGNphLUuloOsuUSgGtgVUgGupPdkbBEecCTWwoOapPbfyPAaibBKkvqtAXrRpPdDxbBeCcgGJRSPpGgxcoORoOOoHhXTzdDZiIbBRWKaAkKzHvMVTyqQGgYcCRnpPsIUilAaMFFbBffJyYMrRgGmooOAkSvVPpsKNcrRCRrnpALqBbQfSsQqzbBMmhqQHUuNnKzocOKkoCvVqGVAaNnZmMSsIqQUivVSQqUaZzgXOoPpOoAaCqxXxEepPxSnPSYnzZNWwiwlCaAvVEzrrRlAaHhPpLNnjJRZXUuxkKoOZhHwlZBbpbBPxXOopMmPEetTszaAeWwlLtLlkKOERzQqTtcCKkRfzwWtNKsSPmcCAaIiMnxvLtTaAPpgGncCNdRrseECcvgGjDdJtTfaArpPVvRjJOoGnMmJjjcCpPSsJZcVQqXgGXxMmxvHhCSJWwXxKzAEefFaTfjJeHhQqHFfLvVvVBFLloONndkicyFxHhEeUuwvvOofSsOioOFBbzHhWymcaGAaRVgGavVtqPpsSQHFOokKEAaFfnNYyWwiBbpPaAkKIixXHhIrRblvVZzLlYyepPpPZznNXBEqulLhEgGMLmlLDdKkxXeEbfFZzBHXxhmTfFnNdPpMmfoOfNhzNnxXyizzotEcCerMmqQLsIFyYfoOFQTtqOoXxfJIiNhkKsSOdDofTtoiIOYwlwWgGjWZlLCbBBHhjqQYqKkuUwWOUEgGeELleUufFjJaJjEeHhKZgfRoOryyYYXxFKkkanNAHPmMphKIKDdyaLfkmAfqQhIjJjqAQUuqqFbVbBZzvCqJjkKxXQtRrWwcCONuUnSKkOoevTBbtHWwOBbTHjJhOzZnNRrCcXxBbJXxGnkKtyYuUoOTGxXoOrRllLEeLrPWIiwzZIiDdXUuxZzkKKrRkoOpyCcYBbZiKbBRTnNHcdUuMmUuDdYyfthHTFzXevVExAiIaqurZSuUEuUUuefWaAwBgGxqxXQnfFMmVvNQqxIUbhbBhvVWyVvjNnpqVvesDdSGoOlLoDsSdvsmvVMQqfFSLpPlDdVuTVVNcCniFoOLlzlLZfyYHQjelLEzZECZzGDdtJDdTtPSdDsFfvgGVIiqRkDbxyuUYRrtyYGvVrRSsjJvBbTtVoOAPWwpHhXxEuSsLluUZzJjJjBSsKMkKmOLdiEHhewWIoOqXxMmVvuSsUjGfFyYaNnAwWkxnNXfrRMNkKJjMaFWwWFltMsdLlsSISdDCceEBbcIiCaLlrRNKrJnFfRnKkBbUJjiIShHoOsuvcHhCcCguGgUQqzXPpxPiDuSsUsWUuwIsmMjJiIpvzoOpSsyzzZZSskKzOoqGXSYGgysxWYzZbpPdrRDgGhHLZxXkKSEesaUuCIZlJjqwkewEhgGpbBWwPuUHFfoYGgVvoOUuyOLaAlEetpDdwWVvhHLltTkKMdDmVvjsqRNwdJjDWZxXyYyYkBaAxXkUuKwWsSwWTdutKDQqdDdDqnNPRrgGXCDkGgFBEeiPpIfzZcfFYFfaQqJjZEksSKepfFPzHwnqQNPWwpFfaAEeKkGgtjJTzfoHhNVaAFfmEQqeMnuUDWuvVUcCFgGpSdDsQqPPxLRrkKmMQbBnNqlXbnNsaAWwEVvebtFJjmzZjJMrdtUXxrTMqYRrlxcCqQvVGgUrbAaLlAyBYzcXeNsSnTtENcVvnOoNWwCFhHVvsSOEtTtxdDXiIIzbBZYynjJXkCcKxNEHheeuJjHqQhMuJsXxUsSJkVBMKksSmbxXvcFTuUCJjPEevVpYjJMhHTtMjJmvVKkupwdnZzuRKAeEkbBQrAeEfFaRQqYyNmALlXxpYyeEYiIrKCcvVDPXxjJgGuUiIRZLlzriITtgGVkKIUulLMaAiIGJeEtRrTzZUbWuUkKDdwBqQFfLlUvVurRuEeSsUEjVPpUbBunNtgGlhgGHvsBankKEriIwZztTaAcCKkvWwdGgmOotPJjJbTtJjPCwWiXxIIbGgijuyYptTEHhMlbBZcCakQvgGVEeAamRFfhHPpdzZiguUDEsSwgGWsCPnrReEDdmMXQjJvvVdkXBImmQhnSsarUusSUjwoOWoOTtkoOYyXxPpgrRzZswWPpGgSJnNncCNsSAhwWIilLWmidogGxXFVvWwfsOQuUsSsGgVnNEQSFfnXfFydDdlCJjMzAatTNnCEhHeGMFUagSsGVCWwWwcTtGgdTtjJDRNnZzrYpLyAUuAzZYCpPiKooOCNnDdYVvyOjJoFfcdDzpNnPVvnNwJjWjpPNbBnwWJjJFfdbUiODuHHhpZxvLCjJXpPQTycfBLlbNOonloyYCECcPpJjqtLFflTGgQpZkKEeDDdfXxFyLjUoGgREqJjDdnNIDcJvVNKdDpnNnLlfAaCctsLcZzClPpCcMmdklTmMtYypGUhtTOoXxOouDLldxXTWwVFBbSVvssYMmmMyhqQniYWEeGxjUuJXlyYXxLtNnvVKkhHUuBJjmMEeTtNnGaiVNUCzQqZFiSbBnNiIKHTwdGglclLjlLUqeEQPlQqLgIqhXGgPpMPpmjrRuIaAHhorhCchsQqvVTtSLJjljZzJBxyYXdDPpeGnMmgGgGxXVDRVvOSQqFIpPUIiuoOlLiGGwWHLJQCsEzZKtHWsSXJFfWJjQitTRlUytVSsOoRoOrNktTzgGxXZdDqgYKkMKkeHHhhuUaAXxskKiUuqQWwUJjoiIOHZJRrjzDdZqQLECmMcpPZzCcexpPsiISasSrIlZzgGzZLfFCysHoUuoOKXxEqQekDzZdBbPpJjOhfFxXKUnYlLyyJMCcmjYXxqSszAaDyYBLmAaaIuUkOoKWwCcnNapPAcfFjjtyYjmpwCcMmnsqtTqGtBpvlBzZqSmZJZzfFjdtaADFfyNAaXfFMeaLUuytTaSXtxbuVwWvnvADdaCEvyrRYYyIkKySsvVgGYIibDazXyYwWgGNnxXsSwTtejJElzoSDdbBsNWeElErLPFCckKfBbdihHAaWGRkKrMPjGCcgJkOoFtqQIiDPpvVdtTbMmSsilGLlrJjRrRCGXCcKDdYaAtpeEWXcCxlaALwEBmMLlpMxXyYmzYTtyZyrnNRTtQQxlLXPnyQqYVmPHhvVqfFmCmtTjJgVvQmBVvSsDmMCcdVuUmYyMPPpppPSPpDDdErRVfghumGglLMUMeEdGgllCFXxeEHhcAaCdLOGIaAiHhaLljXNWbBKkHhcaAurRbrfFsAalnAaOQYySfFoOWJjyYuSsvgmkaUocCOTtgGciNKIFfkKnNivakoOKwuUyDMaADddDmpPdOpHDCcjJzSssSPpuoOEeUHhZzqQZaYyMmHzIVvhHvVDdiuuUUZtTAaKVhHvsSkUuhAdCcKcYovrRVOWeEOevfJyaAIjJbBXxHJjhMZgsyYQbBqSvVHzPzZoOYFZzmTFfKhwWPpkKHlLmGrJjRgpfFPYyPpMMVPpEjVvJvggiTtIZrRzGuUUfwWmMpuUFZWbBDhhHHsSsSCHGgGfVbBLdYAdDWfFBbYyGLjWwJxxCcLliSjJZzKQkUdDvVutUuVlDxXirRxsSiIXIKYFfyMczZtoxAnNKAbeQLlqzfFOfJjdDzZvlLwJFfjxsSKRuUhxPpXJuDoOpNWJSxCcXmMeXnmMOoEGHhdDJPpjgJjeUcvyYczZClHLYCcOYyrRvVoykqQjJcCEyWwYSDnNEwdJizZIeEOoBVbjYMmgFffFoOOoFfdnXxGgNPpzOoVRrDdIcCbBBbrRlExXOoAaiutXxIiTJjsHAaCGgcyYjZzVNnvxXsXxmTRrtvMiIXxmVMAapLiXYqQdDAhHzGVQUqQzkKiIgGuUdDkSfFgpPDdmCwXxWOqZzEIzjPpPHhBkKrGgRrFDdGgNntTcTusSwWeEYyhHCcalpPGcCmXVGEesSacwcCVCvVuURPpZzTZztxfHuarRPptbjgvVGaNnAqQJBDHhpPdzZTScXxCWlLagGBbAHhtTwuyKkYJDsSxXJYrRyLugPPGgKJfzSsqVtTIivnrwpqZzmMLlHhlLPixEeAZzeEyYiIdDavQZzqMmsFfSXxVXoOGARragglLYTJpHhZThziItlgGjXaBkKQqMmbgFfACcaaQRuUrDdPqQpyGmusFLcClwWvVDdLuUFMpOjJPpnNhHoDWDfFHhdwAadDEeSsdaVvqGqQgWKkwHhWwJSsjaAKxXdxXDPeEjJIiRnNxrRXPpTgGgGJjWifmMwGgWRrxLgVvBbIihGFdeUuSQurZWPpwfFXxYyRrqbBadJjDCcpujYFeEDdswWSfVekKRrMmsEeSpLkRzZtockwunNUkPIffiIdrRGgDVxynNnvmMQqcOoXxCMzwLyeZEezuJRUuFfRaAaKJwWfFzQqiIVvPsSPphjsSNnnfEfFNjJJvVjhyFTtrRAdeETtvVhHzZXxHCgGcQoYPbBLlvfsSibBNnlLvVoOGdVjJfFDKoOIiLTtMmxNQWNmUhHuMdfFVyYmMeEMmhHtTEyhHRtVjUdcCZbZKkUufFzZYweeEKSsIiiqqXPGgpxrKkRmMcLloOsSvVNWGgsSffFWgGwRCtTwWRrbBmvxdDZZzHFfXBbxZsmMSzjaAoOPpTjORrYySskKQAEcCeGgBbSsPvVpfFiQcCzZDESsBWwpOowWORfsnxAyPbBKkqGgQqWwOfFoQpIlOwWUuYyfYJaTtAJbrREeKkAaiIwWffUuXxiaWOoIiLVaqyuFynNYLlvkKRTthHLlNnNpbMtPRJHhjzlLdDHhJiZHhyYcmMCfFtlLeEOhTtkGPiIpgKnBRrtTQqatmaAmVvbLRiwWsSIOQqeEUXrwwnNFUZzjYyUAaZNaEjiCcuYOoMjejJRrSmJjcjcdDFfDJjJfFEepXxBHBbhZaAfPiIxWwyYXbohHmEpoOgOfFTtXxosSnKkZjJmMETRBvVbaAfUeZcsLlFYNnyVuzUuXgjCrRJKtxuUBbXHmMmkrRSNngGssWGjrMmZzzXxZxvLtTNNmukYIidGKkgwPpRfFrXPnNxAeQqxXFccAHiLwMUMTvVtXxabBToIRpPrJNMmrRhHEsSXhHlGgadMUZKeUxXoqQnPpgNnLlpgCaAqYyvVXxsCjoOIppPFtBRrLMYtLCclwXxsSEeWPpgfmvoYyWDdweRrjdDJFbBBDdMmxdDwWdDCKXzpPxnNIIMmJjKkcSiIQqxXSCcIkKmpPJljJLvVKkIrrJkEeOnaAtJjFWglLSHRWZNGgfFHwWvRrSEDbgFZeofFcRQhOoHUVvXxuJjTtKltTlOoAzCGgNnXSLMmlmTUtHhTutMiLlpTYyGnNoOTnyvjJVPbSERmMbvhvVTtHXJjxoOmMtZcHhwDVCtTLyrCRjJrcXCcaAnNXeaAxXkCcVmMmSzSgGrBbRsyYNOFYSsyEefoHhJmifydDJjRJCcNnSsvVXbgGfYFfpTtelRawdTQIlczZCZelRaArTtepyhHxXWErasdoycqQWwArhtTcCVAaIfvVFDbBaYJRzZXCHRroODOeEoXxcIBVmMDrRLldqQvMcHvCcCcOoWHrniMHhGEfGGAWqGlLgQLlPlLAGgxXdDJQPwkKoOWpBYsSbBePpyoTTttOHFJYyQqjFBRrakgAazEezxXrRSsrRZToZnsSxXBbypPOozBbuUozUijIbiIurmbfFEeLlBMlZRrHaVGgmMnNgXPxXGnedDxRtTrmMCUjJAauWPppGHoFXxUaiuPZTmQUXxhEzZXxxXeJKeEjuNsSzuIddDVHhvDeeAaEjkTtuhHFqQrnofUKkDhGdWwlLOXWwWwAqMmvAeEHYNtTYynJvVhhJUuLlIuUzJBbiwWKkgXxdfAsCECdDmMnNcvLSsTtzWxoOQTtTtQzZUOaAzUuZQqoNobwEgGoxRruLwuXkKQqxMiILlmgeENkElnNLbQyYJjqCVvPiICgBbHQLlcYyCcCvVPpbdSsDqQWiIOMxXCjJXLKgrleEVwWWwEcfIfkIiRryYkKJjCcLLldQGXxRrurRHhZOeEolYTnWWwNnwZzNWhcVsskKSpPllzvVNkSJXxiKAusaASoeEmKkLlMDdMmyOoljKRbyIVviYBdPpDJKhOoLeBbsDdRrgoOpsLdJANpUAavWwhHpvYyiIXaAAmRXeExfTtFrMalvGGNnIiVDVvifFIiZzgaAZJSyYkvVBbRvVfeENLKkWcCrjJZfnNFEWWUutoOThfFGFzjJxXZhqQqWyYQqQMwWmPQpiQSCvTxLjJFfOHfBbvVGgGqPwWpQgqQhVvAGgeEaFfHnNyBbgIimzxXQLlhBduGReTKsSNOLhHgAhDhrvVhHRWwlZQQgGQqGIIZzvVuSsUvZzVKvRrVVvvwfsSgGUNAzZbBBJjbfmSknNFnmMNayYsSzZsTtWwSmssxwWZPalLRrVoOrqRroYPNtHUuKkhSMmbpPPrNnwWRrAaOozmZJfeyYHymlfYBcsrQrNnUaAupliMwpNrmRooDdORyXqQwWyffxnZujJkKFJjlhmZoOzEeIJjNbFfEHuUJrHhoCEugSsYoiInsSDzaCcYVGRXxaAHhriSiEgQeHhEqMWlLAakDrXuNvVnPxCnNPtsLTFLZJCfjJEeRrevtTVkuUKEFVZzFEtTDtRrlPfFfLiKklneQmfwWNKARApGItTijoOuZhSQKkbBqZzsyzZYfFSNrfjJhunqQfqPpPjXWwXKkkFjJCcPpInNwwWQXxkQqghHHQZxXzZaAirbBSsPCtYGcvzSsIiyRwWgGYmjEeZzJPhtpKkYflkKLFwfFWycCXAaZdaynrRNMLbBeILlzBDVKBbZzkvdsDdnoONrRNbMWFvVziIZZJjOozSQqhFHhfMmIZxLapoOFfzZfFiGgIDtmrRIiKoMtMrRwWnNwWrbmMBuOgQLMgGsSRrKBbkKkvsEeStTSsaApPpPbRrKKnNEetEHhuOjcCcCJZzJBbjVpNedePpEKAazvVZSvVGOkKNxXKkcnNzoMmOjQEgGnReEZNncCRrpFIwxFgVDdanuFfFILhAhHaoOJYJibOoqQWwGgkJmWsHhSgGIigdJTtjHESsGpPJQMeEPatTBQjMCcRYpPmMSsSfjJrRjEGDNSjjJJjJAqDdQmdPBkHVnbIiSPpwRfFGgsuOozrsSeHQUuqhERIkmMZJIVuUnyoOWRrwWdDaWwngsmZzswWKdDUNPbznNFfIiEnVvLlhHuULjJeTCqQqCdDcxXQshHhHTtSDdiIEbBolqLXxlHVJjHNKSGgRAaAuAOVveEcEzZeHaAhIiXxxXlKkzZMAeEdWNnJrriginNCLxXlcRMNYFvKkVUIiuvVlLDVmMKsrRuUQqXfFRrNqppPIpPigBbwoOWgSWzkmMSMmzYfUPdOosyYSNtvVgkDdgOoGoGkKjnpkKKnEeAjiKkNnOEenGujJGKkTtTBbBjmkMHaWiLlAXUVvugGRvVwEepPWKUuBbGdDgRrMXxmgCQqcoyYfYCVjJGgvNcCUxZAlVeBaPnTtTiIWSswtidKAaiiTzZTmyYTtvVXxRniIXVdReyhGgFJyfNDGwAaokKLlONnHMszJjzpPSzKkzDdjJbwjfymIilLZzKrZSyzZSsEdPpLloQgrRqfFIikYCFsEeXxnxXZNWnUNzPovLbBlDhHdMmzwWsRbiItwMmWTeEtTCILRruUaALzOSYzRfdDVmWVvltMmRrTtTsShHcCmyeDYydEYODuNUnKSVvozYyZyYPGNwFYpPDhuvVfFSsUzfFSJwWjkqoAaOQEeKHhAUunNNYTepkKPMmEtBbyIiYyhcClXxArCcOQmsSfFkpPKriKyTcAHhhxXHyQqzMeUvXPpLlaDdAxVRhczqgkKyYGUfhofJuUSCYCXqTtOXCcHhRrkhTdrRrRaMbBrRzZmgWSCCcLlnvDTtfLlrezZlGzBvuUVyYUuQqxBPpbtYmxvhHarsYWeEOWbBBbhHOYdpxSInlLiINfFEMmeygjTJjGdBbjcTboOqVvMkKwWfGWpVitfxXVgsSRfoDknYyVmMvJwbBxpvUfkRrzqSsAaOWbBSgiIGbwFfygGYEenNLlLlKDXxFtJewIEePpisxXSSrWwCEXeEiMmprAHkKfxtMlWUVxYKkbBXlcOVKkvccCCkqwaAVvWQxhQxXrRnrnNNvVHhnfFlydDLrRcmGnNafFAgMClnNTUOodDVvsGpLJvfFvVutHhTfYKkOdDNOFfdDrRPREacCAFyHidDTNSWOoVvOoEewgEoOqvUumMvYymkcYxUBbbBaAlLDaGgAEfkvdVkKrRmMfFOozYapPxXbGgYvYQqaARJjExHhRoHPFvzeCLlcbBzvwvKfeSIutTkEnrAaRlIPYlLyrRIgGHhfFTjvbThXzeELlZrNBbrOoAwoCcOWPXCzZNnXxIiRrbBvfrRFXfWHOolLSKkspPRyrUFzeTJgwWDUYyxtfVZBTtgGuqjJEhdIxCYrRwPOgKkqHxPyYpqrIpbEAjJalxhjqQbZzMMzVhHuUWweUgRKkpPrKkfFsFgGCcYyDPmMgGyYgsfFiZBapjnNswjGqxtBCgGVrqQnNwYyWxkKpEbJjYNqQPSETtekZHhSFfszgjefhJjJCGjkPpwhHNqzZlWdDfHhxXcgPpznxXVQqQlOQgPpevVDdOoOfQQqqFBaPqQZVAaUgGuuHAazgGUuzAaHexJjUtBiUuItFfTtTwWaXOwcCmJaAbmiBUPeMmZGMfTtXlKZzHFswSyKDCcdLrRgGqdDssSGUugfbNhYyhzZHLleaHBSxOoIiXqeEkzKkZCvRaCsaAYykKScrWGcCzZNnFcCVvnNnNKhHkwpxeyMzrXoakpHpgmYyMGGBLJhHWkuUYuVonqQYlIWwSsQNDdvkKkBIvnNVlLibUuHhvlLVqhOoLAaEeHhnEetWsJMHKNYYkKDZzdYyGMmCcgXiiIfgGPsOrTQqqBVvZzDnhHgehBbQFfGgzZmlaAyYIypxkOJjokKlLLnQfFMYkkKjbBJKnBsSpHSEibRiVvkvHpCJhlLHxXmnNAKfrRkvHdGkKnMmCCcpPKYiGgcFvXSMOrZzRrRQuUqZEeRmIQKiHPpplLnasjvHEdDCkzcCIAeEZBGlPpLkXzZSLlOochHLlfpMeETttfGVcCZQbVgyYFfGVgGvsjJgpSFnNFffWAallLLdPpjxXRgRlLFwPsFkzCnwTDoMRZYtsSvVnSroOfgGREehHsnNyYyQqYSSoOsgGkejNynwjJWJKkxeEPZzpshHdsSzXxAPpaDNniIWrolLSsNdmwWWbbjJdQqDlbkiIVyBbYsvHxFUaAkKsSqYSswWLHoXwOONuUJSqrPlLpvGglZzLOeeEXEefFxERxlAEwVvBJdDiCOocpPSwWDIipcCiwcCcNnsSOoCFMfFEkLeUXVcCvxMlCnwJAajoUufqUVvuQUuFzWwZOOBbDgGKkeOoEwWyYNIinxkKMLDpaAXJjxaAflRBbHhrmMsSMmlLlbixSTtsCcdaiYjXxAoOOFehPbSyVvllgzNmMnUlZzAVvJjymMYmMRRLlrJjCeEmMFhHhHovVORdsrVlVvgRrZNYyBbnOFAHOoAwkMmKFLVKkxPnikKSswzaAxXZOosXZxvHyoOxTtGfZJlXxLZHMSmgGDOohXxVyYviILbtOqQXoOWwxipPDoOUBAaqUuCvquBKYyubBLlDWNnnbpsSPpPudCBXXxnOdDhNMmkPBtiLlohHCctTRELlfFKtTrzZZtTdMmyYqnfvUusfFtTkrRdOLYdjJSsDtJfVTtvaAiIEeiYDdyqQUBbCQcCDxyaDzZdDMMgGmmfOsVxsSeEnNSJHEelLpKukGEQqxXIosSkVNnfFvcfZzZWhfsSPDApmcLugQqqDUuumKIkJoXxOZzcNzPGgwWpkKvXxGAaigbqlLNUZUsSuMmPwxLTRrzRuUuzLlgICILEdGIbxPRrQEeqOWWoOJjsKkVvKytwWdkpHqQoBbyYZzYyqQJjqUEXGwcyYwWTtCIwLBbkKOkKfFkKnzSpPcpmQTcCMLlKkbTXxriEetFNaoOTQvedQOoXFQFfgGWwXxDvZzVAadvNuUnWwVUCmdSsTiASNEgGQqLZLrRXtWEKMmtJMFursSesSBpBsSucczLnvVNsSlvHhOXrFfSTqPxXsSEZzeBZzhceEYTTtRparRAJMsKkqFwgqQxdDvSYKqQmHWXVEtjJzZcLdMgGmbBDeMchHCvaCcAuakzpuqWzkyTIiaUDxUaARrJjSePpmLfmMIwsvAIiaRpHhuUMmbambpQFUgGdQbJjzFfZKQKYTDESHBJgKmxXhWjJwfOofLlWwbhHBRwXdpPjRrJEDJjbBgYuJHUkMLdDXxqQlmgmdDuUKWSsHhfhBIuUfvVPlFYytTfsSNgGnBSsblmqpJjPMmMmUuQOkBbfEfFiCWLvwgAtfOoWGLYVUIiWGMDAapVvVgMmGGxmijymJHhCKVZVtTHBeEbrfVQgpJYypjuUwWNjKwWoONIFpPPXjJMRzZZEWwewWaAJjcClLQcPtwWNNnTtLTtdDedVNnEevCfFsaBAaIiOPTvwTlwIfjbArvPTtpVvuKkfqrRrjgYyHNNDIspPdDuUSOogMJrRzRdxwWyYhoqktVvLrJZnKuUIbBgGLJtNrmnUqCcwWVQtpHljEHhmMnwoOyLZRXHubMwzZWwqVhPgTHLlRrRrFCmRwWmkOBbrrPTJbBshHIiSjhHxzhCEWWwwpPBTtOLloFOocUuZdrRbJCckrRKSeEsFtSstTfkWBbwwWcCzkKQeDdooOPlSfLVTrfRCCcOChzspLlPuYHvVhzsdxePpEGebBHHPxXSsWSCQOtJSdDsaQcCyYjJIDdiqGEJjkkECmGHhyGajJTvgPbyMzZmNVhScCVegWwMmmMlnNXQuHGgOTxXAeasBlvWqdsxCKHwVvpMmTXHqiXhLNCcqYSsDdyIUdvVDZgIvWScqQUzKUwWuUigwWjykKAdXKVvDdyYnYOomMnqkWwCiCcFnNIifIIAauBbuUxhHXAbRJlTFgzaAwPpwWWrwWCUurLkKSaoOArYMbTtBbBOohHcwRkTfspPrUGgXnpPNuwtTRSsgWwdOPVEenBPfVvEePqQpCJzFUuVunbjaAVpwsiASZzisCrdwwWWyYwTIJIiBNnbjSsQWvTDoOpPWdoxSeBAByMmwWVWqQwmOqQgGvVoMnNuGYyFqISrOPNOWwEeeoFrIciIlwXVvLlunukzZMmCJTpPtWwRueAlXLTnNSshJAlLcNgejJWwEwWLBoOkQYkOdDOoFfkKfFsZaesShFTIYLhnNdZzjlXyYSEMTvCatvVwSZcgOVvsNBMDuYFXxbSsYcCyawWzlCcLwTMGaACWcpEewQsYlbpApPagBnuURrTabBBiwpSdPwMofJurVMsCzplsmHLNIJmOKkoxpcCPUuwZvVzWACqQUuLlcavVaPYchgowGyzZKbgHumjQFfqbBYoJzchHwWCeWkYyoOoeFqqYyuHGIPpiRyxhFSsfcQqejJGDPpCcdBbbiBbQqISmEvIxnAaNEecTehHlEeCiIjCwWJjcHIsSVWwzQMokkLWPGMiImAaOogptOVNnkhPMwwWhwWTKkAIOPUrsFSorWuvjkWRrjFfVvJLlBxXbDsSdtTImshBTtEfQBFfcjJDBHhHVjgqeugGmqWqjcLlmEGfcezxXZDTtdzqQEPYBWeEAiIafuSshgTMzxmMLXwWMmBbWxXWwLlgGsMSspPLiNEpngGzZXXkbrWwRHhaABxfhABbTtaLoOxTCqEeDzUuNniBeEPxjJotLhHJjlwbBWTpCcPtmXpPECTaAtcJhHIFfhUuyGItfHrBbELAalUSsDikegfFsIipDEeXvlSmONnpPHqwIwOopxXPpuyirgzKVvJXXUXtTsybBYKQqRAaVRjDqwWTwGKkIiMPhgGrRvGdkvdAafFwWRFIiuyYUsRjvktTKZzCxXxWIbQdDUzzfUNntyhIfcgGhShHTNIopPAoHNnhYhCoOcsrRFoOkKVMmbXEpHvpPUCYOnCTyLfLvVMeXhzqQUUlnFfNLGaAaxLdvKpGfFCcgvbBExanNWZRFuGnZzWsKgGwpPvJnRrtTSsNaAjTylBySsfFhHYPLxXRrlpcWwYyTWsSAfSshHhoJXLGHMMmmyCciBCcrAaRbIYlLhOoglxjOHtaATFbBawUutCfFbLYtVpPWkSwJjNgUfrzwKkAXeVPwWBbkVMmDlXSsAvVglJjLuuZHxVvEmlFlYtcoONoVvycuDdVHAahhPexqQBvpPzZEoOeyzZYTyYtWwfFfSbBHyOTtaOintsHJjCYyFiHYTxXuFZZuqBiwXcVJrSfPprDUKkuxXNnVKDgVHpTtmgWtQdJrvrkSxuxxjkZGRIYZzUlhHfFLBxXbPSsWiWQNnqQhoMsTtLVxdPxXStTGEKIduaAerjJRcCRFfhFTigYHsSDFfdijexjJBbMTIiOxnNXXzZpHhbIZdNnWwQctXlHFXoOKxxfFfZzFNPeuUqVvQkRrKnIlmSwSsBbxoOlxXXZJjmtGHUFcCAaFbBfwbWwypeNnZECFgeMtTCphHPJQwMzZmIiQMURrEQXxGJvwWhqQbdCbqFeoOsSbEeBbHSMiYyBMPpmbLlDdwKGtTgaAMmXxEeAaJVUwROVvsfCPpcSRupoiatwxOoXEeKkWHWmpHKvoTPiIrzZRpwlKKXxOpPmMmqZbBbBvRrihJclLEeLEtIiCrRoOXiVeMqnNQsBBbgEkKCyYWwHXYrghUoOVvQQwWfEOKwEcCpPbBZjOpPyARraJMUhqQGBkYgWOaAGHCypANnZzXOoMjinlhMSLPZcSuUmvRUjFOoOHhmWpneENAaDsPwDdWWInNNnbAtumMlLUlLNbGeEFYyfBbnNPBLyIiSqWPCwcgmSstCcSsWZABbBfyUdmXxbjJnSoGCzpPsWtTKIiksSTAcVtmesxdDLJDWwHlyitfHKkEAeEzHhSjUVvuJJjyfFYoBKyqKoOblrRXxGzZvVnCajHtlxLaEUrjcCcqQzZKUNDdUsSxWLqQqQCiQmMqcCZzSsiIMmRfOEoXHhxnpoRsiQfgULlWTtwvYbahVvHbIidIiDvVEsXCcODwdYytIiVnrRNLlnnNNwaAqitWMmDhHRcSrRAaIiIsaIiVBbvLGglISQqWPvJtTBNgGUvOofHhZjcFpbNbBvpnNoDyYGrWbBkbBKUxOouRwWSFtKrWCOobBmyRyYslRuUcRZGftLjrBEebBqQaMmUiNSsncKQNmMyNkxUuDaKsSHhkYYyJjJGCcIwpQqPWqAeEaQOouksaASZumMCsGgwkKViGzYyuiQCcnljJHxIQhxtkKPWhkcXSDQwyYVLbSAGgEaHhtDdUDdCcvVuohUqxLvVGEveExzZaAXtTsGgHvnyYVwWxXvvVYBMKPpkmpGVAaVvtAgYpCcPrRgMceKKegAzZEAaejToqcswphhEgXPkKpNnNnDMmHhSZFfyYpZkKZoOzzPpMboOBmPyAaUSZHcocrFRKktvlFsLUupOEqZKoOoOFGgTfjBDIKkizNnCfbwWKkgGecAaHZRrXtRuUrpRRoKMunNUrgGCcMcfhRryYtGgGpHGgQJjqvQWNnmGsSgBtTUueEhHUhxiIGgryYzlwWGgdDYaAWNePpYyJLkuUKhPTqvQuNMREePpnqJjQkKTjcClikNzjRlTbxXBKQOHQqXDrZNnzUuZjVvmGimMdnntThGJRQGgFUVRfaApPFaBJFiWLtyYWVtpoQqrRbsSAScDElnTpOoCqjJzrmxpfivVnkKkJnJGAagPjPUuGqvFRmMhvzUuvkcjMYJIKkLlMXgvPdyYmwsSWgwuvylgwFTaAaTtBbGlLuUWVNnlwWwcayYAsSIewWwWFKofbBFyGgYgGGeEoOZzgMLNnLpFcCiwWbHFwkdfFDMGVvWwDdKutjJThjUysYySGdeDxWQwWqXxrRrYyeEoOFFDrRxXyYdmMHMkGjNvVnbhsedtykqkBqDTtufqQqPBMATtBgGPcCrVyYSWBsSbiFlMEsRraAuXdDduAtYKZwQUPZKAEeUYyuUrDdsSRVmmMERraAlCTgGzZxdDXIiGgevxwhMUudDkysVXGWfQHotTOhSmjPWwrtyCHlLbbtTBsSpQtHhqQCcCcsjoOJBPprgGRbRxowWwXBblLxWSsHhVZCCYyUUuCcbHhjJPbsSFfEUuRUgkKGfmjNMmZTtUuzdDMmIinTIiYykgGewTxlzPplenOosaItDMYgGycuqfxqXwWxDEYyVqtAnzZfyYTIiIpPRtBdkKDlLQqmtqMNLlnPCsZNKSskFfoBbcCKkFfNnlWIiiGgeoOEWgxfFeKkuQOoxtTuUXTtBbOhPJFKkfjQqpLlOoPKDTYEemMklDARradLSIcCiwwPzZpoZzRrCLlgGITtiaAcpXBjJiEegDYyelicxXiGZSslDMmdtTLURrrZtlXWpMmzuxXYynQBGIgVZpPnCCcjvVKikMUdQGUlCMUMqJjQmVvuPaAadpFTtHkKwJjzFCdDKOiegKUlLkRrPhjsXvSoFdsSAmMYXdqcuInNiIkKPpFjTyloDByYbBbKSVFNQZzHhFfHhDEePpzTqQhHWwKTtktRZztTkeryoOooOOYOITbxXQqVvxXPpnNpKnoOHHhqIiQoNxBbbCccjJDUBNyvVYwDdCcdUIwWikbUgGQVcQkKbuHhdCcoOIoTBILlilHdMsLlmJjiIhzjJjzFgXfFYhVXzxSWITtBoObNpXvlfWaRrhakKIifFfKaAkoNYynCcfFcCzWwGLFKkfvRSDrFfxfFXfcaAvVWwriIaLAauZGLLOUuoXxcChHYsBpHEfoWwaJyIADXIBLOoyYKkLFPdlmXMnSspPNmdjdDJoWyYNcLmuElBbKemfWIPKkdTaAtuPpUsIjbQqWEebBdDeaLXroQbBqhHhHGgVMmRQmMsRXxrAajnWwpPooWxOhRrjJlyQDduEgOoGefDdXhVSxXvXxKBLBVCclLvbBBwUuMyYDnQqORwTtsSOodgLlGIiZDWwSXjeEXxuUbfFBNYnJEKsCcqQSrFRsNFfTyYsSYyyzZNnzrrUIiuRmEAaeUbBuOdtDdWKkXxNcZsEeScyYuUCKfSpWfrMmGrJDvTtVwstTNZzYyncCPGvVrRSvBqaAtTzvgTtFTmPFCsxKgbSszaiZKceMmSshVJSANPhIDdkqiMrzuUojmMaAJmsxvVxXVLOolfZzCFfIPpykkWwKcAaCcNgLlDZzhVKcCuUFvVkarRTtMeyYuUEjGgHhchPpHPhVKIrBIeshPbkKNZzymqNlAaBbKXkKOGgMmoPgGYjZUuznNJcCiwWLUuMDuUHhdmMqkKHEMmGNdbQCctRhHohHSYypFIxFfZzyynkhmjOoSwTNhJjHuUlFfqNnQHQAaKxXLlVnqiIiRrLyeEpPNbBOvKcCkUyFRrLlfKwZzgPpgGNnGiIjlbgyYPhPjJQqKuUAMmOxRZVvPpbBAaZzmYEXPWAafiIgwRoOArJjFnNfVcAaKGgQsbwWSsuUIihfFiIZzAEAaVvHnBFuUjJSQTtHhlDdWwkYsWSfhfFkLxFmgzGgEpubIMBRrMmjMxXWoxAmMgiOoSshwIiWeEHIGQqbTuRrtTXEfFhZZCchUvzpAbopPwWEGqoLqvNfFZGCFMmoRpPzZrOMmwLQnBbVvWKJqLlQHhgcGggGjRmMMmrJoOjHdDFdDEJGKspnVvyBePXFfRvWwcbTXPpQgJgGWKkSJPPiIpATiItRrbzISAeEaGmZYyzMpdJjfSbBpPfFGgjJGuSssKkSETtnNsSfFhHvZmmBUuJHAaXLeBPpnNPiCcRDdQuUXhQNIivVnGopmMWyeEcyYXZziMmDHEeeQeERrsSUbzaFfPpAvFTXusSdGjtsScCEZfuRYrhgGHhkKTtzZwFsSxVTtVvNnngGNcxDdhiIHvyYVpaRnRxHtBVHhJticCpieELaAUuQLlqNebfFBxXKUisECcFfFkVxXWVZEZVTtfTtaAVKkVvvphOrWwBbXeryVyBrRtTGgAyZfFvDsSVKhHiIFerRduMmHhcWwtTAaaRrACXyCKMAaFfnNVsSVQeGsvVntOfFoIOohYfXxJUujergaAGpooOcCnoXxyFKkwWUVgGlLjlPgSutagGBbAYLzZZzRNqHpPXKVvoCLxyKkXoOvzZuyYwLmWwTXFuURrhaRIiPIxXJjQqxecRFUufsSsWEjTVvfsSdkyqQYWEaAefFBswoUuGgQNGgnvVZKeEFubBVPxXXCcWjNzZRrKdeEOFAaRrrGvPpFTIwWvPIiwgSyYsFmQBtCJcCsSBbQEerRqAaDgtXqQxJlLGYuUItTiOoisAaXwWPDykKoiIQqbBwowySRAVCcXMyGFfxXgTEeXbOwWoVvzZzIiZfFeEZgLfFERFdVNcswGXxbBmMkKADtGUugHKxoQxUMmucycsjoOFOHFZzutRrVvTQZLsSwWHhqQlqQCHSsNnrujJvVEKkmZRrDdYdDuUamMCtYktKkTIRMqaAoRAaaLmMHnMmAaasZwWHbBGgdyfZzWntTsSEmMeXxKkwjJWgPppOskNunUdoMyYqQLwMvFrZyOGgosotTZllwWeEickKBrSYCIicyZVOLMmlpZnuNIwjJWiwbBnflLFzfHhFNSfcyLldDKQgGExXeGCcqOTtuULlDeBdiIsSZzDbSsYszaAvVRkMYFBbJWBQqqQZZwxXWTSstsZJJjZzHIihjZSmzxXZJjSshQqWgdnFYEejmMfHYwWZztTgGEcCIiQquUrDeEvFfxNrSswWMttIInNkDIfFNsSpAbErRvpPLarRzXtTubqtTQXxPpiIBeEncRrCcyFOGQCnNcqDdAaGgkpPrUuxQUuEjJeqaQqIiIwgGAmMhmKCcMJHhiIblLtgUgYyNojJIJaNfqQFkPWwjJNJgtTOOcCoKGTfuUFnnNOAarRjAiIaJoDLwWCclpHhuFxaOoAhHXiInNuWwUyZsKZwsGGXxxXuhHyYoOUPQnGgOoSCcsxSkIivzZdGgUufynmrcCIGYUuyIqQRRjOojJwDJjamzNnZDNndLHhtTvVCoabwWBUarpPsknhvhLFDHhdflQxXLRrEeOecSstElNeoOZBcpPmMCpnuZzkSMYylLSGNAzZwYNBbvijzKiZUSaAOorWmMsBTtNvhQqxXKbpDMaVhyYHvsnbBfFdgyYeJFiIxXsYyMmWwyYGgyaArmBbVvJqUuQoOzZqRrbApmqjpCcPgehmMDGsSwMjBbKBzZIjahHAyfFjQqHlcCiolLOfUNAvVaAvGfXWvVifPeEzrNIieeEqJTtoOZCnImNlLnMiogDfFdXJjxsSjJoOymMYTtoOskDEeEncCPvoUkKevVTkkBVbPpBpPsSmlqGoURmuUTmyYOkMTuUdPwXxWAlXzZziEegsSGOjsSJoWwHsfwmBnWwJjiISbZifFtTElmoOXxjJYADzxPTGgHpMyDdrYSRrsZYywjoOJWVCgyTcpRBbMUumIzBbqqbBQhGcCrRKqWifKxKkxzZJEuUcCepbBVvQFoONUHvVFRFfnsHzUJIiGggzZmMPaWwrakPpnpMmSsPFMqEJjNFFfpsSLTdAaeNnfvcfFjqQzlccCCftlSTtFfseEzmQqMuDHhdUuUjJZSqQlLTcCpQqTtyYcAaXpUJBbjxSscCTtzZRdDbAaBdKcCwFfmmMGpPgGeIsIxXgpPsBbSvyAJjKkZdNOyWwGUfFecORrhHRjheBniMHLfZzUzNXsSFFYxbBHhXxYBbroOoOOoHhOriCcIMRnPWwgGWmpPILPUuyYlLJjRBbqRYvVqQySCbxXyFLpKkPMYhgxnNXGEtSsTTWwrEeRtFCcjzMmMZFfRpfFBGgsTnpstTSJjyOQHhRoOvlLAsSpzvVXSSMJjyYAHhfKhHQqsMFoOanuGgFJjWLlLlVdCcDkiigqqzWxXYynNwLnNHdHaGVYyvlNnpPoYEeynktEriIgUDbHXxqTtoOZMIiGQNnrReErCfPpFwWRrcRquUYhAeiIApPaEnNrRaHEHhevGjSsTtJgVFholXTZzxXttrKdDkRzZjJsbBSVcHUuhsqOoIWwPqpFfqyYwQHwQqWfSsAagHwrxXRwerLlDdRzlLIIQqiiRwAaxXlhHnFrFfKJjsjuUzGIiIddDvlNnLgIigVLUuAaxlLVPVuPnQqqQajDgGllLmFfMSPGSElHkWwNnjrklLSsJLYQWwHhqQqGguSTtsUOhHkKUakIxRrFfXjszZKnZLsSLwWQqSvCjuUJHwtyLcClLmMGgEezUgqDlCcoOzZrRSmbBMsfFfeEwcCCcvVWFKoOFiFOoChDdKHhrRnNkHvVejJvLZzaARLlgGGkKkloOPbBpxKWwkKkcmowOoBPpOoqhgGGcMmpxXcAaRrIiBeaAKnGSZzsUWlUXOexQqsSXWzbaABZwWBOmMnuuUqqtTXwOoZCkKclVemMcSaFUuYdOoDyfFTtSsDcCGIjNnuUZMHkKIihmijHHjqQwWJjcCNnBbTtyNmMnOohaVQaHSshxoDgHfFducCFONRflmfFMLESVvJjsepPULlsSgGKJEZziUZzGgZnUJOokjHhMaAcCmmMHuAaqMtzpUIAufOHhhgPwXxcTtNnXxXENNngpfFMLnNuUeElmpPxnNGLlvAjJhzLRUBxXttTTiJIuZOYyuUZyYyYAaYcCPpNztToOHhOtTYzZAayUutZyYXAXqQNBbnxaxGKAaARXxOorbmMffhYEybYyqjapaTtsSAwaggGfPpbBFgFegBbeEtTQFfqWwmIZzNRVvVvIiyYhwyYVhCmVfFvbwWiQqinNICxXQqfFWwyYcCsSvcCVdbBhcxIirIijyLlDVvBbdaAVvAdivZzfFwWHRaCYODScCLltTARnNRrcCeEewYPEnpPNLEzlLLiqtDWArLEhHPtTBbyFBxPpwWGgfNIiyajJAYYnNynFUDduSsjriILlQqbBYFIRrMjDdncCZsMvvRBbrVfFKExkKxRYlQquUcaAvUudWCOozTVWwBresBCcpKkqvVQsSFfYNtjFfJbBICcwWiEeMmkKTtgTttPXxlLISmMsmVVKkvvVvMsxcZaCffhHFFYycLLLlkrRqcCrtTfFFMmfCuJjUBbdDoOCcEeOEdDzDdfBuUaAbGBdGNngesVCchnCczwrhssSGwfoOQrpPRRraAqTlLAaAaNoKjwyYWRRBbtTOoisSXxlLjMissCiiXZcCxGgoOkcXOoLlAabfjJEOFfGgVUCcuMFGTMvVmJIijyzZTtvOoVZzvVbBmSsleEOobTXxfPiYyJeEiIEecSMmQcGvVPzZGNHhCcOjJuEkgGzuCcmDZzvVOLloALxdDDdenjiOtJjAGgmunNmWLllVjJvRrIkKhSsayYCLltTCBbVvfqQEaHhXsSpNfFjMmJyYnxYmFfxnNXMGgTtsSyNnhHWDiIyoOYyKIiUMnWwnlXUuxBbVOUuoMluULeEmXRjGgJJguUGgxXJjwSOoVvJjpPKMJjhUuTkjcJGGgxZWwUvfiISCzEuFrtcCezNfFRrGosSOPeMOBpFQYyqzbSsSsMTdDtcCmPEeMzZmjCcduXxUFfTtOIiotTcCCJCMsJjLvVlCcEJmyUIJPpeAmMnRrzzZuJuRQqrRaArfWSsWOokKRxMbBmuaAOokKolBbLrlDdSsFfBMoWSOoxXsaAmMpPwOCcMTAbjrRJNHPpoTzWwVrRvIjZrpTWeEwmBPQQqqnCctZzTrYHhyVPpWwIiwWsSiIfUYQkOoKAvlgGwAILlBDdbFLlrRFUuBjjhtIiJjTHyFHhlLDdoLikKPpxkKXYWwaXNSFvnXxNVrYcCyayYAhHGgovVPbedqIJhHwXxWDLlbBzZBfFuUrQqaARbtTqgGQlLRrdDdXNnCcxjEeFfoOaqfkpeEPKFTtSsoJtJLGglNnmMhzXVcCMcrFwnNnGgSsImUuyYUuGgMfFPMmpMAGgdDawtTWmiYyeJjEHhnNCQqQQekfFKEIkxXEWyRrzVRrvhHLVvlUIgGiuBzDuuUFrRfJvAaTdDrlLYevDcCnwqnXlzZnNnuUcCNkdlLKkvrRDVvgIRrnNFlLVCcnxXEeNpyOqhyYrRDarcCuUoORNnsSfhHeEYJjHyYnkKeFNGgJHaAIiprRZjpPkArLlrjUGzZgEYlvVSsWOoZmVNhHkYyTtKqQEeueEUYtTMmXnEeNPpvwWdgSvVsGkKbqQqQBDFFWwtTipKWKCLlOTtTwSsWrKlzZrRPpbBPCYCcyZpPzchHEaAvSsyMmJUPAQzRUqsEDfgRroOHGhqQKCxXclLkHBbljJXjJFIwtnTtNpAazZPrxXpxXDdkNnsSQAaAPmxXfWxTtXlLwlfSsTtSUMgYvVTgGtWwhHgGqeEAGIOoiAKkxJLTyYiIZHtjKkJzqpPrRQPjtyGNcCnhHdDrRIpZzSNnxnrRlLoONXsTtsSQPWfFRuUNQZFjklLppGUjJlUujdjUiIyYsAZzaCcuUAahHEeAaQqAUhexXEFXXWwxnNnNOoruUcLbCoOlAajrRJDdYyLcBlvWCOoEeAgvVvTtxMgawWSsAuULACzZcnNEeUtCSgLlzsSZGsfWwRpeEgGPwWIieeEiIECcbEeJtTjpNnJZieQoyCcUuBbTtYlZzgGLcMzDdhkxXKHZGpPaADfFdaAsqQKuUZuUuCcqvgZhHaqQydDxIIiVvlQqPFfSJqQhfFSTUqQucjJCtBbUPpIJjeLMmIcCiiqQvZDGTtyJBvbjHhDrRWedstTdDGWwgnNeKDdlobfFBOhwWiGgIiIyGgYLzZVCupPBbNxSlLsEsjwnuUPmMyYVvdUfFCcjHuUiIrkXFYyfLyPpYlWVFokblLBBSsbKZEBPpakajJXqQGSzsSZiIsgCcOBbTCvVmOWwKkpPokPpQqdLvfFTKPpqksIXXlFfaAGgMmgwgGkKacuURrCypPDlvFghcdnNwFfzfPZqQzFughHGGVeVvyYvmAaunNUkvVtZzMfypVvZlLhuWwUGzmBiIbiYqQxXjFVuUbBEokKwdDyCxXkhhHPoYUuyYWmMAzZVWwkQqnICOowWuBfFbwWXxGgAKMGVUwsqQtTqoNLSTlLtRtTBUDeEOojJtEOoeTdrRCGgRrwnsZzSxbBJAKkNneEgWRrwRrolDPShHspfuUgGcLLDmOoHGiIFvKkedsxvVXvXvVKkRrxOoBbbMqIiBbbBGFMmVmMvnNfRrMchHMgGQpZzMyCcYnNGgvNpPpqZzqUuYWwlLPvVzlLZxFfXbeUBbaAuPpPnNLOolyYlLTyuUHhkTtUuxgcZzoOMmgHpPhLITKGgktUupvVvVPBXxTfTtRLlcCrjJKpwWmzZgwMmkKvVxXIvVDplROoeqlLdFfDQLaAwhHnZzOHhPpZLEeVtTvWxZzZQqcCnNAZzddDBXxmMigGVecJjVNUBXTxYQWGgwvVOoqysvVAYWwUujAaJlAEAataAVvTBQXxqRrbmxnYdUuFfjJTXxDOoBqQbzMsQgGbLyYVPbpPTgQTlLeUuEtRrQSoOVvNWUuPMXxJGqQgTTtLiIlJJpPCiAMPplDdbdxXeuUKeEkYyEYyjJZoOQiIHhYyWCcwGgNujJoOwWKkkyYfFSmMmMSsFuUNGgnIifYcXxfAaFiRABbjJXlObBeEozFfhuIisSoeEOUuMmiITtISBPpbEtTFMmfmdDXxinNIUuBbyWwjWwJKkGQyIiVvYKnbBvTYVvuLnNrIqwyYcCjxwhTuWwUuYBbywWUkeScuUqjlhxXgdDgfAaqRrQsovVrGgdvNgqQjUuJAaEOYypPoNnbtTtTHHROOoiIiVvUJaAxDdHQiVvGUEeuEeYyjJsSZzpuTtJldDLCVVvvLDWthRrksIfckKuoOnwAaWNnrRvItLlTtTAgzHhZbTZzrRZzgHhwyINHSfvyYtAaUHpPuatTAgQqOoPLKcCDSTeEFfiIsSFNPDdknjCRrdRriXgGwWxQeeErbKbBkBAacnKkNCOhhHHcCuJlYdzPEaAeuFsXVvxSRrfUDdwWeKkvVrRcOLFWPpEewCYtmMqnaAMmNhgGAwWaIiHxclacCUuvVAgGVXzPhUOoMwWmdoIjJuBDXxWdDqQePpEwFfeEZOnNkIXxcyFAafaaYlPyBbvXxAukKfmgIizZcZKkWwmPpaAcaSsALDTtfFXxYxFfNFfsbnNJjBqevTtLlDdLldDwWSkKYyqoIiSSsODUuIMqQwHkKajJFfjCcLlOdDGIiSsGggFvVfoGKnNKkyYJuRANHSsqDdMrRGgnNEeMibxKDXxVhHqxNAaaAnqQWwKOLlokNdDpcSYyvVedGkKIjJDrhHMaAFoOfFfwWCPpbPphHBPTtpcwWqHhKEeXxJjQqAzLmePUeEJIcCHhiDxXdgGIQqBFfsSidDcpBjgGpTMDVzZnNWRDddDVvsSeNAbSVVvLTenNEKkCcvJOoepPiIiIjJrRuSsBgGbjMhHmjJgmivOopIincCNdnNcLTtlCklCcxXovVOLRygGeSskKECQqcjJPEyYeaFfubBUMnyYrUuPpmMSsRNPpnqzZduUDOXxoeEKayYEtDWoOwdTeXxdDkZzLlrULZzIigPpVvGGgwWlNrRJhHjDZzWPiIUuUmyyYHhctfCVOovKVvfbuUjJBFjueEQEeqSdDjUmGbBgGTteLlEJjgUmMHTthEiqQnNTeVvoQqdiIDDdfBbrRnMmxLPplCbBcCZybYaBRukKXLRkFfKryQmiItDdZzsSsSiIFfRulaALTDPpRfTBOohHSXxgGfFZzBpfzZXxwPpdNwPnNpbBWvBbdXxfFDnSrRsRsSrZKkzXEexPpfFOaAQqFZWwLTtlWhGgAyCiIFDdZzbCcPcCpfKzZdcrRByYbxAaznNZpYyQdkvVTUDtdJbBDQqNnValLlLVvAtBbIgGoOiTvdjhHDbEeUuCcKznrHhQSJtTMYyNnmPTrRBbPpqQeWEKPpWNnQLOoPpzicAXxzlBywgDdOoQZKkYqDdQvVvVvVPRrpPZVPgmMfsSFGSjJcCiSEeCcdIpZGVNhqnNQuUHkKrmCcgAahMmHGZRrzmMMeENsSZzjfFRkKknAsiDSmTMTtmLnNfdDIicCwvVfAnaAfFNmpPHhnmFKWUYyuRroOFfwCcTtrBbRgPptTJQDlokbUearRJjjAkMmKlIiwiIWKkLaJgdDjJTLlXiIBdKrQsZzbmMzpPZBSUuYyCcpjOoTsQqSogGOgceeEnNwrvVRYyTtWJqhOojJIYyvvtJjdDUOgxXrREhRrMVvmHGsSEesgGSgQiIPJhHYwHbsSBHBhHuLlgGijLlEeJXTtcClLZzXbaAHrRhFEesTtpPzRUMmQZqQDQqgGYVvyCGgadDBbAXxNnhtrkSmMsIzPPpBbDdoNBbnBbNvMmVnfUHhuFOoOpQqRgNgnEGgeNKkjEkKlrKkqbBQcCRzZqoOQLeotohVTmMtEsuUHhomMTZzcBrCcRfRYeEyDBbdrQgGaIuUqQpPhHXxivVQhHeEJiHFavVMKVvFeEuUlASsYkiGzLlkEKkeOoAuoDdQyJbSuUscziIwfFJgGLWQdDNnVvqrRyYymKkZzWwMFHiInYyTvVXxtTtfkKFUukeEKyYIijiSbBlwWGgRTcCpIqmMQvViPOyhsSsSHqeEQYyYARrXxauUHhrRKkGmMgZwWBbZCcIYZIiLlHVmMvnFFDpPtMoODVvdMUVvuQqlmfhHFepPGvVNnRrEegFnNcChHnNfNnOhehHETtHoHUQebIixeEEvVLBYyTtefhmMFCcfrRlLuUTTtAzZvTtrxXdVCQqcHhvPpDeWwCcHhEgACGgjJFwWecCBbEfMYWwwJjLFflZbBjJwWWfFTtNhHnwtTwWfIoFVVWXJzZuGYlLZzLlyeEpPgQqUDdjfYCGgTtIZzKyYDNnvVkKfblaAhEFtiwVvWIUuZtEemMVvYytEeTTkpPlLRAarjszZYyzNgJjGpPgFVSDLloOIinNRrloOTtJjbnNkKBVdDXwWNSsphuDdUHkPpBbnTZFrVdDfCcFvCcbZreoTEemMwWJeEjEZVvsSAaSFNnfyYzLpPWzqHoOhuUQecgGfKkFLWaARrIOoxXyswWxXqQpNIisBswWAaRrchHCSbXErRwXxWeiIXrRQcxGAusSspyYhHMmPBbIkvVKGgZzlLvVuizkKvgQcJHhhHjRrymMYEdDeCOZQvVdKkDqkBbswmMWSNnZjJuUFlIuCcFWwvVfUpPiaPaOZBWwbGgzQiIqjmLlLIbBYVvyAauiIdDjpPJDdiSatTANrtkKvmEeuUiIQqVhZqQkgGjmMJwrAuUaFfZIizYytxrtTRrCXcCjJBbsrhKJjkHTuURrtjZzEPZhHzpalLcCTuUQVvVIpYWAawfFefiuUIFZPpzsSEFZgGwiIWzBAtWEewpFHhfPKDvGCcvVOXxoTJjezZPpEHVvfFPuUnZzgVvTtamqQiFYsUmHhsYRryJWwIjsSjJKXxOueEUokKENOQqoaAnZzIRsSlrRWpPAawqQPpLEWwNnbBcCwVOaAoOozZvVnqoOIitJudiIUALlSpaAaWYysSmNXyYxiIjJuZGgaAEaTVNnuUAaNnBsvVZGgyYqQwpPiwWAaIDBbCcdQqcCDxXdqQGkKsSmMkXOoWUumMxXeEJfIKTmMuUxfIiMVvMmyYCcoBVvPppPbOVAhEcCeLqGOceEOonCMpjJkKTbBtJDDLwJEewWiFlLDdXxzfCJjYlLXUlgGOoDdkgGKhAaZiIzOvUuRrQqrQGCTtcKIQqihtTiIgHhGBbHCcMKkGSeEFfjJsSsSsCyChWwHcUaNCISsiuDaWRTFbXhHIiwLlFYyDYHhydfLsqQrRFxUumKrRmzwDdbfJjUQquKkFXxdDLlRrWwNLbRYyXlLTMpPpPQqmpPCcrsWwrRSggGwskKmMbBgMmwWwWGHhSiIrRWwmZzMXxWGsFfptppNEZeuUEPpfFpqLlEEONUuFqLTtAalQfsHedlmMDRCcLmMIiXgGuXxUCoOWkKIiZNuZxXzDdSsYKfFMmQqkzZRZrRzryHBlSsRQhxXHGgKQqkMmSBHQqdDOasSMmAohVRrvtTTtIwWwWiwdDSsdEeHZAatFfWgGwTzElZJjVlbNnwdgmKkMydkKDYuUyYGvgGkKVEekKrnNRCjJcAamsSMDgKkhPRXxVjaKKoOPHhXxnsEeQqfTKkELlFgGdBLQSAaszpFdDVQxXqvVQMQqeEVUuOoQWfciICEeFfNnGbbBBduOofFFsSBbqQrRfNBbnUnCZzczjJjLplLdDquNnURrsSdAxuUXtTaDtrRTKntqQUuTNknHEkKFZzfSrXxMSrRsSdcPpbmMkKTtBbgGkHEehzZGscCBiIbjJwlLIiWPpSNnIwWieDipCOtjJJjVTtUuLWwlrRLBblWMsruHLlFfhniIkSsmMUPdDZzwBbNFfSWEefFtVvfFzZBbTdDpKBsSmMsqPpWTCctqKkQSBbBqNnfDdFmYymMcsTtyYbBskKuUQrNKknyqOfFouUBxBJcCkKSUYTtyTQHTHhtXxATtUTtFfoORXxuiIUaeMhHHbzZPqXfCcvVgGFrhjJOaVdkKXxrkdOoDpPLfBbnNFeQqoOxeTdbBDtjlEIWSswiZQZzqPKkXyYGiIgtTQLlqxIifWeEwTtiIsSoOFGDdSQqsVvuNTtFXjJxgGBNAaYeEExXlLPpYyHPphHpOoPSTKBbxXzZfHGEFfemFfBjSOaAQqajJsSjZqQBblLLlzdDhHIiMDiDAlEyYtsSRoIpfFrnNjJRPlEDYWgGwFTtpPgcKkFfCGjJnCPasSALtTVvfFnkTubcCBipgCfuUFcGSslLVvFAhHfFazZfFfFfAdNnvTtNoQqzZDdOjCcJAdBbqQnNdDDYyODNdoODndxzQqZBvPxXYyGgEepVbLXxDdZdGVCQwWtTqcoDYzukAEeaKATHhVsSoOydKLlkYyOoLGgSUuqkKQsJjWpgGXfFxJjlxYyRMjJqWwmMyshalGgLAarRAkKHfWwrAtGXxbaVvAMmaTtgdDGWhBbHwoOAFjPpJfEehHGgVAIGoVBevVZzENncCLlpUsSsSuiIPMmHhTtCuUnpPpzQqZipoOcczZCLlYbBypDyiIqQRLlrOocCBSqQqWwYmMEeyylLYjfpyYPztcCyOoYgGTyaAYbBIzjIXnNxRVvrRIiiiwWIPpgTHrRxUrRuHZzKkfcCFhHhpPyYNnnNjvvVSsVSsOoRSsrJHDdLrRlfFiINnUjcpPCHqQbBGAaGgMdDAFcCvVhHfGpPgaxXTtsACsSsScjJjJsSaXxPpqHXCcwkKsmMSsIiWnNwMmssJcCdDJIiAatTjGTtcRrtuUUiRgiIlLGWLlsSoOQqoOwrJJjdfHXIzZuGMPpmgkfTrRPIiSsiYyIUurRHhJvcCeEVseuiIvIMcCnNmgCxXcDdVvgXxGWDtcCTOodFfCMXpfiwqYjJOornNkthHhBbHmOoMKKBbnfLEeaAovFfGghHNnlLweEjvVmMHhwWgGcbBCMmwWMUpPuljmMJBbJjLLjvVhtTHMmJmGgXMpPmgZAFSsHhfoOdFfDnmkKjhHJZPpBwWyYEeOrAaRdXUudDqQIistiIYyTSRcCrsFIpPpPTTPBZzZzpEefKkxsSXFRrWwnpPEeTFftlqQOosdDSZzLImMiSsdokKOIOJluUWnGIxXjzWwcPpBbFfCOQPMmpiIHzZgABIioECwmMEeWjJoAJjaoxXmUUuqbTLWwKjJkltbuUGgBbBgVvhHWxLGCcOoggsSLlGeaKCQJjNqRRGgQqlqQiagGUBbFsiEeIuRQqgaTtAPpMEeVQPpfokKpXxfFcCbuMhLVzZvWwlVKbBkNnPHQqzseESiSCGgPsfFsWwSYyJhlIiLiIrRHjuwWUfsgGEUuvVAsPkKaGAaqQQqgAWwpiISTtLlkaAKTDdHhNnSoBbYlLGLlkKgQvVEpUEeyYUqQuoOrRsJjHhiISuUpPyEeYQFfquNVqQvvjwWJOqydDYpPDdYDdwLqurSkKEMyYQnpKfFHhzZkibxXBIyYJCcjJhEeGrMZizStGSsdDOOIQqqkvVsiKBpPbVakKgGIXxijJTtXFfUuPvVxhZnNHcbBsSChGbBlLNRrnDdjUuoOmMcpqhtDzwYsSfJjPOEeksOoofMmFOAKNnkjJaRegGEPocCOMtxXeEEeiJxXCXxcxhnNtissSdDsJmMBjfpPVvVvRTzHhZbBQqzZOoFfOAaRrBbeiIEfFBRrkJjKZgOosSGGShHsDdoRrOSsRrrfaARpxxXXJjPpPMBSqQNFfnFqsSyYNZGEkKLlDmMEeqQJjgGdDpPBhHbKksBbGQqvTtgMmGozZkKzZAPkKlLpRrFhhHHfLlIKSsoMgGgGtTnNmvkKLIpPBbinNmJXmXxOfFhfFCcfLtuUTrmMwWRlgrswWlLlLSYyKMmIiRrsSSskYgYJjyHhgGGeEprRPpErRePSsoOjJAaSeEHhsDdfAaFRWXEBbyDMmjQqJdLlYmMRhHxbBkcCZzkhHKLlcCBbestSsAKkgGMmDnNSsqQlLdaxPyYpFfXpWwBVvxypPYQyEeJjQqwWNnYEeJjAnAiKseErRdrWwvRrhHyGJNEeyYCZxXzHhpKkIiqQEerxXihHxiIXpuUYcCoOyaAWVPpxWwQjJHhqSsNYyDgGYysrRmwWwWvkDdFHdDhGgQqbBnnZWOQqowTLSVYGcLJOoLlbCXxyRyHrXxTNjCcHhJjtTgGhoOdKkrieEIDdRClLAGgTlLuUtaLOolrRJjoOyPpBuKtzZqQTUpPpPukUYSnYyraARIiKkNzZsgFfMfFmRrRfxyWwYAXxabUuPQqfFZdWlLFmwaAaApKkPWKZzURrkAaeiIETMmMuUTtmtxXHhAdaMmfOoFYseTXxtUubqQtTFWOowfgoOGUupPLliKkYDdysQqoNnOrRcCbpPXaAxVvBDHhoOZhHcCzSsqdDQvxsCQVvnRrNZcOBbqTONnXRrPpOoxiIaAJjUBbsSUuNLLllFfoXxOGcChHcMmLtTeRrLlGEeglZzpPNisSITNntvVtUuTvbuFfhdqQkYykKKXxDejJjjJoQqHXNUuGXtNnaJjeMSdDeEgquUEcgcCjhHQqKoOJmjJCcZysSYlOcCoHhLSeEaAOfxXFoxXWwzZPfMmwWQqfFaAIioOEeufFGgFfcXGgxCEZkKVLFfyYlUuvtTIiGgiOkKUrnkKNlLIuUYmMywTtHhKnULluNkdmfFdqIidYyDQwWeEoDMMOOaAWwsSoeMWwDddDDdxXIizZrRJjavVENnehHvHhbBKPIiUuTIiWCcwWHhuqQMmyYIzZysSYiRrmFcCfFfRrMcKhHkyziDdIyJjJFBXxblLBbDdFsvVimMgcCGCOWwBbRFfeVvEYymeEQqMQqiIUuHhkWcCTtuUsSrRmUuMVvxVvfFXTgPpxXvVsUuSRrRShHHPmyYMpEeLlrlLiTteEeXxwMtXxsEexXqDdUuUuMmGgZzQhhHNkUpPcXNnxdDCsSwoOWjIiShHsgKjoOwWmMUXGgxuZzJjvVzkKnISUuMxAaXmsiliPwGtTgWmMwWJKkkpPxmMXqQEKXxXxfenNEFkMmelLvIiwgGyYJjWHhwyhTtHoOUTDsxXmFfaFfCcPpsBbSFaSVvsAPpKkxXyYtTiPOopJQqoCqQcSsVJjWwjJYyWQqwPppGgPNfFZznPjJpywDdcCTtOokKLlJwmMbBcrRCzRtTpPAarZSyYYyeTMmqbBZzhHQqHhdKkDychIiHLyYJnGdNQqnccCCDgJiIfiUXTttWwKkgGtTStTsXrRxmlLMyLPhHplJrBbtTZzRGjJlIFfioOcqQCLlSsLaNnAcCmxXMJjCHZzNncwVYyoOGPbBnNBhCcHtTzWwYyZzZHTthlLqQCXyYylLbxXBgGzZclCxXohHOnNbGhoOwYsSCBbYyXCBLlwWpdDPFfbcCAhHaFcpyYPiHhICFeEEzZcCdqQPmWwBblLMAaeEgGtlazZeEwWrrRcjJCnMmMmQqAaTUuEesSteEiuUsSxXPpIOhDdHoLHKYyWaDFfdAcCNnnNQgtuUTyHhYkZBNrRxXAaRrjJBbtTCcOokKnUuQqZzINyYuzZhkKHNnWwuUrcCRUxXGLlEeoOGFPpfwWQrlLRnRrNlNnxXsSLcqMNnmQnZxrRQqIHhiIiTtXPZzWqQwKfFLTdziLlDdLUulIWXxwweEbBWMmZDdmMDFnfFKhkKHWwIigMjJqhHPnJjxkKXdMmyYmWfFCWwceECcqTtRUuRrmMPjsSJXximdDsYwWyglZkKLUulzKkFkbBLYyxdvVuUKkDIidDSliILsnWcCwNuUXohHjNnJqQNlaANVvnDEnNvVJjQqPpmVoOvyaAAlYyLacCNnnPXFCcTbBIitfrcCexXElLvVweEZkuyTtjHMmkmMrRMmcnXtxXTBbsSxwWZzdIiEiIAaHaAhHJlLUujWvVbBhaOvVLlBbIiSspPopTtPcCcCBbVmMJjvEHyuUxXIiJzzZkKAauUtTZnBEedDbMWQqwmsQlLqTtgPpdDKkGTIiccamVvMNjAtToONxXBbCcnaAtTHlsSLmMCcjuUJHhpPRsSrTtBbAcxXQqdDCEepPayngGNYeEskbBRrRBbILlNsPpSXJjvVxCuhDdzZuUwfrRBUuYybAIAaivVcCGgaGTtgxTtXfvnNVpSsGPpHhgPfFmMFkKmtxXkKfxXMgkKHjJhGzZaAmGtNOVvCcrkQTRrtqKdDLltTeETIDAOoadDnnNNPpdiUWqayTtYAkKTtmMkKfFUJyYwAaJPBFXlLGTnNlLuUtYypELleewWaAjJYzZysVkpcCPlLqaAsoOkBbrJjRKMscCjJSiGgImSoOuVvmMCcjYqgjimyYMILlJMmEebRrXVvxiPpuUIJjYyPYypIiYnNPIipdQqDyoOVKJjsSkvGgOobWwBVEeFfmMIBbXFfDrRKvDdkyYKZzdDSiIOoWEBbewQgoOBKkaAoskKSFfEaBbAoOluUtTTkKthrgGRwzZWAbBalyYVMZJjztdDXXxxTmfFSsSsaaAoOrRtTVvHHhgGRriIhAKFfXxqQkdDOolLEeTtWRfKkFrwvuUvzocCODcCceECdXxsSYbBZzXxmMGgkKTqdDQlgAOoJjaKuhSsEeDdHKkFnCcQqhNnsSoqJovVNnVvOzZdDjJMKkqQkKIizZXpCqIiQyYtTjKkJjJqjJIIimaAMSsqCcQEeRmMWwmMSjoOCsScsFfSBbAaoIiOIljJLiJGgAadcCAaPoOoytXyYjJxUUugGuUNnnDdNIRJNdDyYnrLJjlfCcFLlAaMmRHhBbYxXyYdkwWWwCuUcLlJjEegGrjgGRrCBbJCRrMDWwyVfAaFRrvLXJjxmMkgoVxVMmEnDTterHhVvpyYBxXtdDagGJFfjAHhTtwWUwdDWnNyOovHhVTmMbzjJZBnjJiIPRrCctTaAUuICcipDdjWwgGjZzrTOotIiOZzoWwEeXnNxMmBQgGjJOxXWwRodDYyOrCKkuUgAamqBbewwSsTtGiuWwUvEgGFAapPQqiIfMjgAaGbBWwsSFfQZXxsSOoZzWDdMYKkNnpPXdDlLUVvuhBbRruUDDLlzZddsSxXwWjAaJEeBgGbfFGgzZHMmYykKZlLGgXxsevVaAvVwWUuWwaAPhHWwjJhHJxXiiIIjpxupPUPAapRrZhHSsGgvVzaAXItThAaKktTxXjjXxJUFvVuUEewWiIuUGakKjJdDXShHCcjfGgIYSsTtyiQqFJGNngsGeEMdvVDmgoIYyJjUuiPrRpCchgTtqQGHUusacjdDJCcsSuUpPyYjJVvMcKklLQqQaAnNsJjSoZzOLlzZxXqQqvVRYtbAaBbBTyuUmMgGKGglLciznNZICdDuUkKNngGKjJdDHhkBUuiQwWfFmMcIbBXxiOcCgxXsSqQrzZLfFlPpPpmMAEeubBzZGfnNaMmAZSsYEdBbDSIiBnUumMNMmbsyVVvpTtPwWvYzqQnAuRryYHhUzZOojWdDNtTnPpuUwAaIiZOoZzLlQqbbBrRNntaAqQTvbBqbBKkQGgOoVqgpkhHKbgcCGdDZvVWwWwsKkdzZMxXUuzZvqmMQVUumDdJjOqQiIoQEelLhfFHeErRCPpcqaAaAfUuUuFTVdDHqQhAauUvKkpIiPcjJCLlJcCJjwyYGgrRRbmxGgvVXcCoOyYxXGQFfDOZzRrlKrRkFfEnNeNIirGgRnxGgqQvQqVkKQmxvvVcEemMCAauUxXSNnnNLzZlfFgHPphrRPpGgvQqVGMmjJXvVxeEaqQAsrRTODdoIieQqbBSsEoOtsTtSIeQqHqLkVvKcCnTtCcfOoFNzZSkKpPgGdVvTVvDUcCudrRtbBGxXgpPDnNdTtrEeNCcoOlEeeELUGgWwnNiUuIzlyYLLlYyCBblLNqQnOcWHhwaACrRoOopPVvdnNDbNnBzEeqQCuUDdeEVvcZNncTttzZTMDdmiIQXMUumxzZtTgGVXxDdvVeEWwfMUucCbBnUOgGoiIuwWUAGRtBbTSsKZzQqCcWwKkkGZzgteElrRiAaIZzRMmrQqMJjJjumMUmHhjJwWmMSjdDpYypPfFyYzZkMKkKMmkmkKXCcRrxLuHhvVUPpPpAafYHlLhpPdAaDPoOlGgLlLgCpJjPcrRGOopRQqeEmMjJEKXxkebBDDfFyYdZjJJIijdDzGgMmKkKkrRvICcIiiVGgwZDdztxXxXNnBOoSZzmMpyYPbBSDnEeyKkOUXxtRruUTzZupPoYycCQqHhHgGnNMmLlNnMyYAaGgnNmAQqWwjJaJkKikKIcSEeoVvOLlsLlQPpqfFuUYyxyYiJjIqQXCjyYHoOvVvVkKhUuyPpeEIiRrUtTOovVuMQQqqQqmWwcClSuUwbBRCLleoOEcfYnNyqQBBbCcbfFaAyqdiItTDQYDdnXxNiLlOoIIiJuUuRroxXEeOrRowWVvOqQTeEtpgGoZQSsqXxzeEaAKLYylqQVxXvhsSsSpWFfwiUuIbyYBPdDSsTtnNGgHkKkKWwiIkFfgGPUupvqQsSAjJaYyVrsSDdRwixXIkwWOMmRrsSSsWwuUwGkKgCcWGgZQtjUuJTqFTtlyYLcgGCPUFfupGZHjSOoLlrRhHsjgGwWWwtTrRjKzZkJEehSiIIiSxXsJjZzkKEelYyLVvNLlhauUAHeEiInsHkKHNWDdwnhfFPDdIiDdpQNkKnbbBBqPoOKiiGqQCcLlgzZDdrRGCcgtWwqRrQjJLwMtwWJjcpPCcCTgGhCcJjHniIlLNJZzjmWDSsqQNndqQMmmMqNlLnEeNnTyYuUbeEBMWwmdeEDNnYFfRrRryHhzZPpvVGgGDEYSsyedsShHSsVWwAaJjmeEMiFftTyZzjCJwWdjKkJDKvtsSTVhDdKxFEefXkqQHpFfRrMfFlLmOnNoPJtTjNvVnaYcCrRNnLlFmeEMfTlLIvByLlYuUgGGJxdDXjbLlBwWgbzCJjcZVrRXxOoeEBiIbcBbCDrRaIYgiffNaAnGZzeMmEJaqUuQBxXUGwWwwWqQWyYJeEjqjmPUmMsSSsUEeiviIjJVBbDFfdrzoOwqQpLlPIDdiWwKkWWGgwxXXuUxqQnCctThIHhiZzNjJeyYEJjBbBUUOoqQsoOSuUuvwWYyOocCpPVjJLlcxXCEehHJKKkuULlhHBOobkQqRhHDdGyYwWGguUgxXbZzBPCckKFMmftTgGWLmRrmMQqBbLpPCcOouzZUzZlMNYAamMyJjKgZzYyYyHhvVdALllLaDtnUurKkRdDNqQkKvVnDdtXxTBfaAzUuZzZKkFwWWVPENnqQqwWneEQWwMbBfFvVEywWoOYvViIeRrlLVvFfRwlLWXiUuHeEhlLEerxDVuUvdXlhHtTRrLRIbBqQisdrhHRKkNngXrRsbBSRrmMkKbBWwnaAhHDtTXxezRrlBMmAazUrRurRhjJHZdDbUarEPpebBBdDbcEeFfnNhtTexXEXxSsXxaAqDdQstUuTPpSfFqQjMmhHjJGgWwYyYyJvSsOAaorRGiEeeDlLKsSJjMmkyYdPpxXEUmMGgpKkZzgkKgWwGNdrRDLlJjnqQGOtTopPyaAqQgGaAYAYGgyYyZJjdDpPzUXxzVvlLZAbBajTtJmMEeuLaAJjLIuUillTBbtTaAtSsjfFJHFfPpEaAeAlLOOzZLlhHooOotapPKjJkUwWuMmtTCVvIisSQqSaAsNzXvOomMxXxGgalLAlLbKkBXDyYLqMmQHDSsdSsvyYVOJjohoZqQIitxXaAxXEcCuRrUcCbBeDdLlBSsbPpBbKkYNYeqQEqQynJjyhxXHHYytTWiIwYyWwZiIrRSszKFfZaAAcCapKkPlSFfXxOlLuUsHhiHhkKvVCcVCaDdzZhHrRkKfFINxXnWwiIXxivVvVAdDceEvIxEeSsFOofXxfNnFqQkKDKMKkmgGkdRSUuPpiAGBbgwgGDdSstTKhHsSknoOeENtnNTKkDsnNSdWmpPMBUqQLbKkBNnOotTtrRMmLllLTHhUHfFhbBIiEeCcOTLZRpPIJaaAjJeEAjuIWwiICAaciUCBLQJjKKkQqkhHqpPlbYWwyWKkyYEewMABbVvaEemMbBGbBJxXjgRrAQMXxmpPQqDVvEeHhvVdqyYFYyfaGgJQqjvJjVVvgBuUKkbfFPpdDhHmMGDAYyAaaXxxETyYtexXxoOxXWwRrHhTngGNLlYylLuUtnNRrNnXolLieoUuOLlzZEAamMmBbeENbByYnFfYyYXxyMfFxXIcCLfFpPJveEMsSYZzyRrGgIiTWwGOoMmgOocCNoRrOHhnCccgNKkcRrJjEeCnGNMmqQsSNnnJjwpYyPNnndDdAaDPCLgGlqQWhHwtTqxWDdhHwXjjJRrJFfyYUuNnqQCFfnNcQqQVvqOoqCcYyQCeyYAaQaAqEedUdsSDaAfFupPrRqQHhDEHhvaAajsSJAKkVJjxXGgcVvkKVVUuPpGPpxhRrHkKvVKMmMmLlfFkqTpcAaAaCHhPcCGglLVvtvrRVvHhrRVLlcgGXZTtzxyYIiCFfARriIaZzTtHhuUZuUuuUUTYytjQYyqJJAjCclLZzZzxXLlvwWhhHMmHNnpfFDdPVJjHhtTIaxXSsAOoiPpsSwyYxkKXvVWrSEesRkKOwKCjJBbzZIhHTbByLlYsSjTtTtfKkFwWuYyPpwWmMeEXxeEvVTtDdKkygNnGvVvVsSaZBbzAiIHhQCcqEhIJjilLlkEeWJjwXxoOOobBvVvVJjKVKkYyVvwqwWQgGdDvNnVHiIhPpgWLlGgTJjtwpgGPFQqfUSuWwuOotTpPhHUukwWAaMSsxXcCyYmQCcNnqOpPowWsRrSvVFIifaAbBrncCVvSsNgGfOoFnNRiIKKfFkJjsSHhCcHhOopPcEeuUCYFfYyNnPpdDyvVjPqQpxrRXhFfHhXxIiHQqhHPmNnaAzvVdDZMoOnNpomMZzTUutuDrRdIHhiZzUTfFPprRtpPdDZkKmMzNnaLlsSWwAuYyVvrRNnUVUuviIsrRzXxEeZqgGOjJCcoLlNneEpPCcpPRrWwpPqqQXxIiQLlelsSeELwWXxlbdDOyKkYmMsMmiISoBLfpYlLyVvPFoOjiIJQagGARmWwiTtqOoQIvSsjJcMmCFAawBbWnNiIKkOvVPklLKbKkBpoZxdDXqQlLzVsSvBZzBbtTUuYmMydWwXxDnYpPyxXNTPDdpzZzZiIbBVvIiAatqQOoVveErbCVvFfcBRbRZzOoreEiFfaNnTtAUuhmFfMFfNnrRZzYyHIJJjjpneENxXjlLwWJeEWHhKkwbhjJbBoCcZwWzZzOlLyYHmMBVJjkIiKbBveSseAWwaiIQIiqGgJjWwSskzZolLHhOaAkKEeoOhvVxXHVgGvOVvovDwfWKkwFuUkKkkKjJtTQqwVMmUulLvPpvnRrNTtNnIGtTgesSEGgCgGDdrRhWwHciIibByYaAQqHSshDdJCcjVOoWCaAIbBircCRnCXxxXcNcjYyfFUuDlLXxdwWJqjMmJYStTsCcTtDEedbBIiAapPEekKQqNnxjJXJjrRyhrRHTbBmMpRPCcZzpeEfFrTTNnttfFPfFEefFxXNAaTtdnNDaAnCcjJKkPgGpWwdjJDDLldtTGgJjrRGgGgFfWKkkKwZzgSRrgGcCsldmMDLxXmMqQmMeETWwUzZeEuBbGvVbBuUgQqOxxXXdDPXxFfmdDMpWCcwGgCcoKwWLldCcDnNkKxXkUutpPnNeEpoOJjPLlcCQWwBbkpQqmTtMPEeMmzZveEVFfMmXmMxqQeEArRQqaqSvVszSYyyYsEeErRVxoOXvMbzZBecCEYyGgDdvVmuxXUPxXYypeZzFDaGgIiAmBbMcCdFfXxPpdJjDfoOrRKnNkchHFLlfCSIiDdPpAaHxXZUuMmBbffEekDdKPpFIiKkYyHelLEhqrRQxmMjCczfFZXxqJjTCctQnNQIilLqmTuUtfQiIqgGFMHMFWwfWwBbkKmXKmMkNnxXxhmdDdDPpMJjEfFTtedDQqheEjJvtjJBbTVPcCphHmlxXLNDvVdttTTnMNnqQHtTtTXDdxiFfXxIEeQqclYyLvVPCcpChHobBOxBIibXdDyDdjDdJveEVKYyCylLYKkUuCPbBpoOcJmMjYybLPQaAqplBTtYyUuoOBEeIiUBbsSZzNnEerRxOIioXXxKdDRrxXkrRKkHbQqBhkGuUgjJNUunKPcCyoOYXqWNnwQxVvZzxMmYyGjJglwWSHhtTsLJjvVTeEbjJfFbBBuPpUGgmMJjtggGmAZzaMClLcqQwCcWuULlBbTGxXOoglLpPtzoOzZZGQqaxXAQqmyYMkKTqXxkKQyBbYQqsSJbQqBqQUIiuuUXMbBwWjJmvVRRrgQOoYyyYqUDZZzlLzvbBaAWwVTtsSNnXBGgmCchzZHBbMbWwBbwEeLlQyPpEeYqfFOoHhocCpPdDzOoIkHhMmKxXYyiZODdvVkKojJOjCcGgJLlULNnxXOHhomqkKQzzZZlFfLQWwqWwqQCNnBblLbBaRrAcOcCyYoDZzPpeElLdZzjJQHhqhHwWeFfUedDEjcCJzZujPpvrRVdcCDryYRZzlLoOJKfFYyHhvVeujJGgUHhnrGwbNnBWgxXRIhHVsSFtffFAaNnGRrnNRLsjJSlCcrRrgbBtTFgGhHTlmMSsLrRsHhAaSaAflOowgFqQfCchzZlqQLvVApPgGXxgUJjuGgGDdaibBiIlLvTmMmpPMzZoDdOmMtrRsoOSpRZzvVryYPdDSfFsDdpPqdOoDwWQikKIvKTtuUkVhkeoOEKdDHPpVvSwWszZYECcTtgGyYeyYytQqTUurTiIPkKeEhmMHpdDtRJFfBEebiIjlJjZzdAaDMmcChRWSswrHLIiJAajAaSNcDNndCnsIBbiKkmMrLlRrRDdVqQRrcCMmoOlLfSWwsHqQSsbBAaZzbBPpGgIiRreuUqXxQNnXxEhBMSsmaOoxXiIWwYybBvVARrVZzvHYyXxhTtqXxgGQRrkfFJjaAJjKuURgGMmrKktTmMcCFfsCcSMmLhCcqQHXxlbRrTtNnYuUjJTtCcyUQqQqCiIcuCiIsSEbBwWeuUtHhTLZcVvCHZzVvrRVJjvhadDNnbPBxXbHhRrYyVvpwWazZAbBHhhHskaAKSDtTdBXxAQkKcCqbBxXxbBkKXrRdDSiYyIDdswWbbBxrRXiItIijVvUupPcCeEmMhHJkKAauUDkKoOdghgGHyoOoOYsSHOohmMRrbBHLeElbTtIiBhvUuVGFftTgSQqWwQtTZzqKBbLlkMjJfrRFmkAaTtKzZpQGoOOogqdDPjJpPfsSZzFHhrRPpPpyYsSh \ No newline at end of file +kLltgGTKFjdDpPkKcCJjJhHfmMAjJasSFfHEesYMmTtrRBjJmcCMbDdmMyOoUuGLrRlJeEMmxtTXjKzRroOmpjJqVvQPMZAXoOxeEZtTzLYyqQnNlMmafFLlRrkEeNkKtTngGlOoLXxtTLDdBblRCcqQrFfLQAaqeEZMgGbBOoFfyTtIizZuUsSYmbzTiItQqOouUGgZBCcsSHhxXIrOoRizlUuZjJefFCcEgGMmMmRrXlLyYcCxvVCcyYcCZhHzyYWwcXxlLCeECcOCcozHnYyNftTJjFSsrRTtqQSFfFfYxXysSsrMKkmeeEEdDRHhNCcgGnQqiIqQLlkKbPpBQOlDdLoqhjJtzZfFiIVvTMJjSgGsmyGPpgUhHuoIzZiOYkKPpUuqBbQcHhCTiZrRLJEkKuUejlTNiInNntdDxXzAauUOLkKloIdDzuUjJvpPViIbBiOGgoIJnNFfYyjbBZWwSsdDsSUuBUCnXxNgGcKJjkCcuUWwiIcCCcDdsSDUumMdSSuUPpyaUuqmMQAYkFfnNKMmsCgGVvyYJjcnNlLVeEvEesQqvVEMmeWMmwBbyvVYUuavJjVTtAJCczcCZgGcYyCjJEejuupPUStTsPphHgGafFAvVGgzWwAafiIygGUupsSPYfFFLlzrRZFaeEAWjJTXWwxFftcCjJfFkYyKwuUJKkfFBbMnNmIPlLZyYzzZpijnlLwWNLlfGUuTtglHFvVfHhhYywbBvVVLlsSvKeEoOkZzYyZzWGxXgzZBUgGaAvVuCwWNncjJbDdQqGgAatTFAaftLsLNnuJjUlfFSPpmMfFFflmlLMThFfXxHUuEcCrRXxezZrnNRsSWwWwZUuzFfTtiIaAvaOoAVGPpRdDrgWdDtSsGgaAfFopPhHVvOksBbSKOntTLlNjJKkhHGEeGgjtTaMyYmPpAJuUHhZGgzvVDdmMNnFCcfgzZgxXRHhrGzZOovVcLlCUuoCDdchHOuUsSvVNAanoTcCwUuchVIivHFcCuUHzZFfCcTCcthykKYXxUuzZOHhoIsSiVvDFXxIMmifmdDMdIbBNReEgGrrFRrcCfkKRnNnNgGnoOxyYRrXAjSsJoOgSsGgGAawWazyvrRtTVYvVLfFtEeSsiIHhiIqQTlzCcdDhHuUuUuUZRrZVDdWwQJAajqvHGoONnQqWyYLeENWcCwpPybByvxXVnNgGYYOoQBbqifFiIlLgGImsSIiMGgnjJVvGNEenIigeEnNvGgXgGhHKkXIiEhHvVeFfDdxxxXzGgZpCPpcXxCcGgRrliILZzBbCqQGgbBZOoYyiIhHUYyuLuUlGZzgzcPpPeRrEOoRryYbwWBYyrRlLbioOIeEBiZzaAaANsCcjJVvSEkAaEMaAAalCDdcuNnnpPWwNkaADdKCfJjFcpjJIiPWAGgawWAaVZzzlLXxZHhvxRrdcCRrYsSyjJmBbMufFdDWwLfFYyvVlInNpQgGZzqPyYifGggGFSvVTorROtEeDdajJJjNnAjBbiINncCuhHUxXJsHZzrROodCcDnNgQqGtBbThRhHrGBMmbrxKtTkswWSJntTNgGOHhouwWUzZjzugGdDzKkrKkRZtTgGhHUeEZerRmMFfZvVvVzJjdDWwjoOvVJEhHQqLljnNtXyYLlENnbBeyYTQqtmIiHKkhMMmpuQKaAkqbyYckMsSmuUMmxpPXOkKwWoQqYdrRvVDgGNnJOoVvkCcWwKXSuUdDsgGnNzZwWoOPpFzhEetFfvsSVdDMdBbtTDJjmiICTtcTITtpPVvcCiZwWFfnNlPpLFfCulLUcfFQwWwDdXxWKqlLaCcZMmzGgAUukzZRGgzZcCJjsSyWIioOwYCmMcrjFRrSsdDjPzZpJpPfJqQZzKRUZziIurcCsSaAeTttrRTEjJlOoLYmMuUPpZzyzWwZGGsSgvVxUuTyDdYtpPoOXeEMOomSsZLKsSklnNbAlLCcJiIjaBmMoOOodDHbRrocCOoOaiIABhLoBbOXxVvlgbLlBGtNnTExXWfFnNwbBecCELlhHkqjJVvqQQKezZxXzZUuaAzHhcCWwtvVhkKHQoOaAYbByXxMmdQqDdbBJjDXxjwWJlLxXhHiIALAKOokJjoOalZzcCvVIiawWKcCgGWUYHhyvVaNbIiBnAoOrRuVsSvbBJjdfFuYyFfUoOzWwjaAlLYyhHJZqQJoOjnNkKeRFfriTtIHhEVtTKZzhHEenNrRRrczZbBiIIieyYEecCEGgjJJjQSSssqCbBnNTtqQEEFFffkKPOHNnhDdofpPrRNnFfbBYgGxXytKaAkTVjPpqsShNnrRiIHJjQJMeQsSqEGqQwWgSsdDLlWwaAnNTtbzZBOoruVvRCcqQOGgoMyYmrjDdvVfvVFJoKkOwWeEFfeEzZCgGcuUtIiIiFfsSgGyYTDjgGzZPHhnNLlGgePpVvEHhpJdhUuBbJjHqQUqVpPvETsStSsZSszQSMmWwOmMnNhaAHDWwNneESsiYyIToOtddbieFfEIAJjhHcQvVqCjJRraBDLlIiJieEIjUuaiIAIiuUQqDdTtWwuUeTKktDddDKktTjJdDELXxlckKCBbwbaRrABSsWJthxXHTsSGgSXxsUzZBDaApPdbaAyYUsVvbdDBzZTtTtjyYJsSNmMVvTtnmMQSFfsqRrOouvILlitTaAKKkkYyeENnxwWXVJjoOuUEemMgGSTtsnNzPpNYynbBZGaZpPRrgGzZTtTtKkzqUuPpyYQbBTtZsSzGgAftTpPxwWAaXaFfAPptTqQjRrJCcFEekKyYDLldkzZKfFNjOoJpPEeFfpPnqQWpPMmUUnNuufCXxcZzjibBgGIJdDFvLmMAXxeEaFfmMHXXxxepPRrwsSWTtAaRTtrVvtSsQqTPoOIihPpHKkpYQVvqYsSVvQJjqFfqwWQyGgfFUzpPZyNndDwWtTiIDdYOoyYzZJtRryYxrRmMHhXlDdyYzSsZxgGXLiQqbuUBwWCccrRzZkwWfFWBDdboljJcChHVvLGgMmaAcCwWJMmaMMmmjzkKcYyJmMjWwmMbgGgGOxQqXnNMmoHhBXHhxCVvCmMNIiRidDIrXVvxeEtTtTyYnEeKkuUmJjmMOoGgiIMlgLlQqEMmexXGLclLyYfFQEeHhXgvlFfLdDwWnNMmvzZWCcgGwMmWODYydiIowvVbPpBEeIAFfnNMVvmadBbDiLlCyYaqvVQIiyYAqQtTiIcaAlLQRuUrhHYVvTUucCtyPpbBcmCcFfZzMpNFzCcUuaARrUqvVQuSsZwWcCsScrRCfrRVGgveYyESXxsMmWWwWlLIiwCtNnSsBbjJXxSsDSslLdmVxsSchHCXjlwWOQuUqXhHSssVAgGalLvSMAPpKkCcLlRramdnQqNCiIVvcgzZNnFDdkKMmzZfBbBbGuUmXukKUxIiaAGgAaWwcivrRVjJrjJQCCcLlEAWwaecaFfAtTWwqjNnLlJzZMsSmzltIiALlhHUuoGgOaZziJKkYyqQjfFgGCcIoIidDTtuhHiIZzlYyuMLlmUSsuvVbaIsrKmWwMkXCcOoxoOXCcoONngGVvTtSWRrkKmclLCNnxjJXMHiIfFkhHKerRMOomYTtyEhIiwosLgGEdDZzEeqQTtAaUUuurRcCMVvmepPzjtTvVJiIBjJyYbgdDSsGrRpPtgMmGTkJjhtTraARBbHhTzYyOlxOgGoXfFxXMmfFdVuUiIxPpKjJkKkWQqwtTkKZZznchHMqQmzZAFeEGgagGAfdDTbaDdGbBgJjcCHhABxXULegZzGEliILKkZzmMbBlOoJjIiubBamNnMWwVvxXhZpPuJjUCcPpzaPWwuAaUxXucjJCIgbrRBvVGgVnaASXxsNAaHhNnIiiIHBblLCtTuURKkCcGgAsSIxXVvimMueEbQqNvVnBifFILRjJUukKrZlLzfhHFWwVrRlLvxXuUMUuuUKiIkmZmEeMaAcClLETtdSlLxAaXsNxGzZDSIvRrVpPYyxrFfPpGXiItTzZxgKkKkoOJjmaAqBbNKJjkZnNoOjJnNzdDJjKHuUTVvLlthkMmMlrRLmmMQepYyIiZzvPpwAadDZzQqwWGwWgFjJfvVbpgaAGNVvndmMerQqIiREDzZFXxfOfFoJxXLljeESUuswWUuPNsSHhGgsSfeEFTiIKkOoRkKrGkpPnlwknNKxXkKAajEeJpeEESserDdEehHAPcCprmQquqQUMvVIxXiHhRXxEeaAajusSXxzZXxbRrnPpHCcNZUmMXxJjLlpPVoOLlhHbBIiGgvuGgcCcCRRrsBbLlMmWwWwvkHhKVSIhHuuICcpPiEeYjJcCZzDFfdynVvcCNLlEesSntTNHhpMxXiIwTtARraeEWLLllJWwhHQEgtTGebBPdWkHhKnNyYuUwDpsSnNwWHhmAaMHYGgVvSsyJjoOhgvVubAjgFTtFINVvAMmatTGgSsnwWpPGyiAZzeEditLlWwyfsSFSIisvVgGAyoOYyYkXxjciLldDIbBSsfFgGumMUxXZHhEetcCcCTzJiIYaveEtTVAIvqQfqbBFffFeEQEeFgtQKkhHfFAalFyYroOoORuUfAaXzZGgxfFlTtfFLuUurRUeExXaATxXzZIIVvYyCckpQqRrFfFfJKkINnIiWwijRrJJxjJWwXCGguAajJUlLcLlkKhzgGXxlRrxXXCcYAaqQtTyxZzLRrhDdHXxJjiHhINnaAgIioOypPYnNuULlkxXkKrUuhHRIiBbxLjJlLlXKvVLlSsFfsSpPCcfBbnzZSsAaUjJJjYyuNnNBcCbaArwWRLlUuzYyoTtEeoDdOoOKWulMmLUkKIiOPQqxXUjvKkVkrcCRKFlLruzZDdUPOopxgGWwvXxVvqQxXxpPXVsBbSXWxyYXJbmPpMBjsAaLYaQqtacCATAhYNnNMmdsSwWsWwseDdEIiJsSfFRrjzZdDKkbEedDJjcCSsGxewWEXqTpPtQIifFTeEtzZgAuKkUaSDWwdsYYyjhHzZJdDyTxXNtTeEIilLklLdDKnYyWaAdYhHaApyYPiIyrytTcCYQqpPPXxMmllLLpBbpPCKkcyHhFDdlLHhnbxXxXBNlKWwkKPKkzEexTtXZJsGgLOoJjyYIiTQqqQOotveExhHXPpGgVTzZrbBsSgauNnjdDIYyPpuUiLtAaCcTWwnNlrRwMmWZzYPpyJrRTtZzqIiQNOoDdmFUsqpMmPHhQSuSsvqZjaaAAeEJdDuUunRDdDHhseEdDMUrRuiImlfeEFSCcsWwYCPpcNnyQMmOoEehEiVpPnNlhHWwLRrwoOWpPGaAgVvXphHPlLhHkaAKxsSNnrgGzZYyRkKUuXfpPFoEtTeOcrRCMqXwWhHLaAAaFfsSdPpDHhKkLlSsOvVXGsSgxouUogUuPpQqbBDdXxcizZICGdqBbQqQJRrgGmMjbsSkKQqBeVvTsSgGtEqQCTtFfjJcqQMmAaRrbBkKbzZBqgFfMBuUWwYyMaAmrxXWjVoOvKwWkBlLbAatXxYdDRxXryOoeYyEOoDtTVvyYvTepPEtVjlLJXxQqvVHheEFZzfdDWzMmgsSGZwSlgGLwWzxrRXsSAaAabOooOQhHqdDXxPaApIBbdDimMrRdafFPpAEeOozZAaVVvvijQqsSJIDFfqqQYOoyQBTnRjJxTtXjJRrCIicKkBbZBbzrNaAIisViIsSczZCdDEevSJjeAaEtBPzZLlYyGfFJjAaVvQBzZzJPpPpaQquUwWiISdDdDsBbBbpLlPwZzWNZSZEvVezseGgyzxZzXFyYTtgEdDegGUCuUdfgGkKFDuUwTtqQWceEdDvVoOaGgseESRUusSUuJjhHLJjfFlGoHhoOCTtJjqIvVbkrDdEeCxXkQqKGgmbBQqCIKlKkLkiZzASOokKsShHYydWwFfhHDjJcCkKfjJFHhOWwmMvVoyYrRumMUJjkKOhAaqQHhQqHKkiIeEbBmFfYnNyMxrRnNzZBbeEcpPQqCAgPpftnNnIiNTZzuJHtTuUbBiEOoSyYzEeAaKkZpPGgzOoKkLlUsSuOoxxXyGgmwzoOHhqJSsmfyYFeVIsbBSgWPpWPpSsEQTCctbBdwWGgDMGscCSuUpSsJjaAPceEowZzWqhHbpPqiIPpQEeXUuxRiIjrkKRJDXxxXdjJbBdDmMFNnJjNeEXxnsSfiIJxXmMWwtTJeEsSGgNDdpPCctsSsSZzYFfHhuTQIiiIqhHbPpPGlEeLLllgGUuLgNnRPpEdNVvbuUBbBBbRQfFQqqrpLSsiIlQqPxGgeEXzZaAPpBbVvIiFfeEeOQlLqcCEeWiIwonJHhjAaNvXawWAvSshHdDBbdDKkOkYyKHhGwWKlYWiIwdmwVvWcjmMcJRKpzZxXdDPxLlncCNPKkpJnNjPpDdJjGgXSKkhHsNiuUInOwWeYyEgGommAaMqQMNnxXyYdDDyjrTtiuIkKiYsSyGgMmlUuLMfFSsjeEzZJmaAkKVcCvZzwWLlTYvVOXxpyYfFDGgjaAJgGWwstTrPpcCikBbgGKQgGSsNnkKcnNPfFWwxmtTjQOHtTNQqiIfUOomMnDdhHNkxoOSsDdPpSsXYyWiLlIwKbBkGLXxtLhHlAcdDCxlLXfFayAaZVVKsSVvkKkNnmMgGgGZjJfFzTtviPpIJjwWGgAoOaLHLLWwlCcZbBiIzeyYpPaAxXOYVvynNbiIGqwWsKkvVVeEkNndxivsSeEVvfFBYyFfjwWJBbSsHhjlLLwWrRuUlKkKBbpEeWwPYiIvVykdDJGVRrVvvUuQeEOoEeiIyJkKaARrfFaAzZMmOoIiAaSyYsUsSQgGgGKvjJSSsIijJZMmzZzQJjqAaKkYyNnpVvPAjJaEPLltTGgpWuUTbBnNtSssdRrDSwPpWWwXAaxwisSrSsRIeEaAoOPggGpPVeoLGglCcUuOEGrRgvgGbZzBLlaVvAzZvKkVeDdDddDEowWLlOxfFjJftTAafBbFffFFbpjWjZzuRFiIfrQwqQRvVruYykKtRauUlAUuaFfLAPzZpPWwpoUSiIsuGgfgGvVFXxnNtTLlnDdTnUuAaNCcgFTwpPiIWMzZzofFOZPpnNfFkUuKFNOTtvAvVaVpPojJvfFVnrSsRWxXsSKdDjJkHUgAaGcQqsSnirdQEeHrRhqueEJjUDTtwHhWjJaGxXgAvDdVSwWxXszZKnNSqlLlLQtVvTnpPNJjbBbBpqQPYgGrRyRrGgSshaDdJbBnAsKkhHDZkKzmMCcdOouUdyYzZWxXqPpQOowDSJGgjdYyDCTtnNiICtSZPpJjwWWwzmXhHxgGBbMqQoONjUuDdYhiINAanZLSslzKcCfFyYkfvVFeiIAHwozZOqQhlLPDdcCFfpFfpPAaehHXxGgDQqGgwWhHNIiCKIikkLlKKRrhJyYYUhHujJUKzRNeQLlqEnVvgGacCArFfWRxpNfFIZzUnNzZuiYpPMeYyDddDSuUlLsdXxlLcCLVvnyvVGgYdWaAaAwDOfFSRrbBsQqkKBblOovVSsZzKfXxeEAcKYoOykCtTabOjRrJoJjzeEAawWZwWBpQqticCITPLGSMQVXxvqIjJKkpjeEJrQveEeEVwMDMmUuNcOaAAaoCEepMmhoOHQjJmFfGkTLltWwNXxftqQlkoOpPpmDdpPMNAanIizNnNuUnNyYLlClLqgGdDgnPpNZzgnJjRRrWmMDCcdfFwZzriwWFfzZFeFfEfWwmjUuJMbMmjaAJvWwVnNkKzpPKGqGLlgwkhxXzZbBZtTzlqQNRTtALLTtllLTpnPpNoOMsSxXmRrDdFfDefLlTtHhfiIcKkWwkKCcxXsSmMOogGqFfQiIiIGgwWwWxNnhHcvPpOoVPpysSQqWHSjXWwxXxEekKRrJeEsgEUuehHBcLCYbBQqyYxcpPsSFfsRrzZzXxZyJjTtYdDXOoxwWbZzGgcCpgvKkJjDdWCAahcjMmJwWbBhHgBgGIoOEeiIibjYyaALlinNyYmMIiAnHhNVvaIzZpPYBbTJjxGguIFUuOwWofFYqkKQydDgJjGYKxXkzBbjJLluUiIqIiQeEUuZysXxSjNqQEefFoOjtTAalLnNIilzZGgCYmMxDdXsvVSeEgGQaAuUqQzZtEepaAPdDDHhyYyYZOMmtToIHhiTXxtvVzdEsJjvVWHhjzZPkKpWwWYTwWtxXyYoOcXxCKkvOjjJGguUItEemoNnOMIyYfFXdXxsSvVDxnGgEpPefFNiTtTOodHheEDHhfAZzMfFSMmvJjhrRHVdtLluYWIiVfFcCtThHAaKQcCqjpnNILNUwWuMmZFNnRruUdDfJaYyzZjJbBACcLlbBkGpPJGgukgGKNBbfFnTtiIiImMKAancCHqmMzZvVcCKGgkWwQuUqHhAadDQaoOAnNSTmKkWXxEIRQquUhqQsrGuOoULeEpPlZzgGbBBbtwWwKmMCqQdDcaAqQrjJxXWUuwDdMmdDocIcuUFfUuMmqQCSyOoYfyYwWfjkKsSYkKaAZYCqQUBbwIitPpprRbBkVVvNnUuIiOoLlAmEomXxmhHtTiIdUuTthHrRAaAvLlViIGgaODingGNIMmlLMDMmUukZzKxXrRWiRTtoOQquRrBboIzfFeqQWwUMVvmLlfFiIiINnoOlLAaixXXxHhIgKkZzVxxXXvGOoFpsTtzMjsSCckJjJXxdDtTGCZzMmAzaAZawOoWeZoOZzWMsSAYyamGgwfNnuUxXFoOWsSwsSzFfQoOAamDdMWwGsmEQqrRFfzZAxKkXeETvVxyHhYgnxBbhtyYTOUkKuOJjoJiIjJVvEHUBboOBVCcKjJqQdDkwWnMmrnNmUuMBbRLFwWftTTtgGiIElCgUPmMpMqoOQmuoOaAFUuflLnuosSyrRYKkpUuPtQqQeEPpoGgmMyYuUCzMmmTtOoxXMFBbiIfFhHfTtqceESXVZzdxXDdSIXxBNnESxXOoyADaOoNnGgKukSstTXGgUuuUNnxMtTfwiIDzkVWwvKbCcWEeEeEeSjJspPYywAaJrRjBNnQqnNpBXKuUkFrGuUydbBDbYcDeElLHzPpZveEaAVmMgpPGuUvVJnzZXPprRxJjtRquUQhvBbEdmMDeVFfYrmMYfFcBZzvVzoYyOjNuUnYyJQqZsSjClLCccSslcAPpaCCfFpPIigiILlvZzVyMmqQKkvslMKkmtcCiInNqQsQqIiqQSzNNfVvoAaOKVMpTtncCNCcBbPvVSdnlLXoOvwPIRtTtMmeRVvAariIGgeEzZSsOoEUuOoSsTLdDlrRPcVvnWyYwjgYVxXRDJjSkjJEeIaNaGguHhUnYsSyvVwWNoOiIyYqOobzZBZzXbNnBbOoPaAyYKkTSEKXreEeTtJjxcCwreEyYOpPbByYzJjZCcoyJjYAaRtTiNnIYyrbBNneEDdRraAyRGFCfFOtTOoofFcHoMxjMNnlVtTAaOkiaWwOGQqgVQqAawWgupPZzUuUPzWwDdZIScCsHhisSpoOSdUuvVexwWXKkgznQfsbmCcraUuCcAFRDuNnUdDdcCgzbRDMyYmdIiaAzZrVvotrwWhHUuFzZJbDjJhHdAlLtTuUfFagCMmcGjSViIvFfSYvVQqyITHXmMbqQaSsABbGgqRrQsSBSsNnjMmIkKVvDdZzTmzZgGmwWMyfFYpacCApProOvkMXoOxmKVtTlLSsCGgoOcSKoxXpXxFiIaAHhyWxxXXADdaZdTHQPCKkdDJBgGbgXxzHGgXWtoOTwVvpAabBHhxAvkhHeEISKQiCQqTtcoocCSssrRSgTihHIsZIzmtGgTRgWxXqVvQwHbBtFLBblfTjDdPlfcCFLWwNfFqIimesOoRSsURrQleEJjWyFfMmQJjBbVvBboBboaVvAMmOVzZnSHhVvsYyPFfeqydDaAOOostahIPpiozZOKkHQqegCcipPIGSFSLlhHpvVGaVvuUALlQqWwgRrsSqQcsQzZqIOolLsSZQqhpvqQCcFkKWwfLlLlHmfFUBKkzZJvVBbjPzZOFnNTRreMmEtSsHhqXkKxuWJjqtTFfmMrRqQQQqwdDUvLlDdmNqQnGcCrLllLUSfCcwdDWuhHmMmMAILaBbAriIrJZzjQqQnEeGEegnNqyYCcIiPpcCaAckAzZxjJXtcSsrRCTCcEmzZZzMxXlXQYyqwIiyJjKkgyYzZHhGXaAxYGjXxxvVCcSsSnNsKkVQbBqdFfDabBAzsSZcCVvUuYymYyAaqQMdovVLlOpVvWwPaASbBsDvDdfUuFXJBQWVvwMmuiIWwzZuUMOhbBHOLrzZRlNncQqeOhHbaAVNnMmvaGwWilLTtIhqoOooOZJiQqgNiIwqQLLljoiDpAaqQYyaAWQtTqwPrRYyNlLPbKkpPxXpttLcCloOiQqsSuUfNpPTtnSxDobzZpKkPzEeMNoLaAlOMmatTzOoGxMGglHGghmhHSUusIYyiyYwWJWNKkRrNDdnkKniIVyFffFYONnXxzZqQlxXwEevoOEeVWFNdDFfkkoxaAXWvVwMUumXxMDdmFfOnNTyYvVeEKRqQEYyeyiItTQlLCnNcWxOoXyYIpPuUFJjzZkKdDQqgGsSUeEuIiPxUWOowuUumcwJlLjCpPcJsnsStTNSjGIiiVmMnNUSXxsoOvVlLESLcCSstTGsSeUuErsSeERGgJjaXxAlLZzTtNngkKlhYyHhHnnNNjplLkKtFbBKLlXiIxwkKoOWUisKaAkieEIXxSaAaAjcCJAaeEqjJQxheEFNnDjXxIGguTCFfgEejxXZoOzQnLlAaZzXxNZzLlqbBSSSnVvyYMmNrIizZFfRWiIxhQSpPqQmKkCuUcghzYyZXxgGqQCcokKOJGgKklLkKpPuhHhXOoUuMmCcbBdDhtVYJGgjbByvGIruUIirRiJLgGTtWwlZPpiZFJpTbBtSsFfUuPQsJSsjAabPpYdPcChHCGgPwWEeBWwbIPNOZzaMmHhdDAoCccfFSsuqQUBbbEevOeEJjBbgiISsSsJjiCcavBgdDTaRlLFShcCHYpJjPQmmMyvVYrXxXLPwzZfFlkApPaKkZaAaAzhHQqCcmDdbBqVvnNPpQMKDVNnfFvYvtKkKYykaiIUcCZLhHlyKkdOCQqceYyrRELDdlvdDtTWxXwCcgfFDzJjuUDdlzvVWwaAZrRXhHqHhQqQojNpPnJlLgCcpPGyYjJpPanVDafFnNxXvVsSPaAaAIJjUtEeKbBmMNVvlpHhUgGuyYyYcIizZEIieSsNfyJjdeVBXxbvLdDyvVUuYPplLiOrTZaRqQrAzTteLacCdIYCcyvVWwtTEeIKkcCfFdmJpPZzTtzZBbjJwTtHhWAzZosJNnsAaSbMghFBbBsSHqQhdDbsSbAaIiBkdDtssShgmyYMoOGDdeyFfnbQqfaAaACcnUtTgpQqwWzeLLlEzZKgGkeJzZZzrREeEXEuUlzvVZzoOuUZKRxXfxXFDvAoMmHRxQzZeEpBVvhmEjmMMmRwvVWrJJbtTBJfHhFtTwWjWwlLHiIhZzRLlrjAlLruaJjzZtTWwhqDdlPpLtbJjBusRNnrjWwbVvXbkOoOHhoKQYRBbBbDdDdqLlSSCMQQqbsoOwQSbkPhSszZHPpVvNnPyPpDcCdEeYwUuWpDdwvVstTMmXYySVvsxMmnWpupPPpbBKkKNdDUcCRSmwUuEevTocPIQqdEgKBEeCDskKmsSRdDNhPpHnsFfehyYeKkENEeQPlIiJZsSKkNDgjJyYFbBwDdqMmncBbVvCsSNvmqndDNvhFfHfPeEZqHOolLhzZSskQqTtKYylvVnNfFTtbbBDOonNfehmMgPdDpGHtFTtSgGNpknaAhHNVQqSsaASsHhvAaEekAsSJvfwWFrpHGWBlLLvIiZzzkdSsDKxXUuWwCcLehDFfwWvVRrWbsFqZzQfqrLofNncCFObhMmUnziItTwQLhPpmMHlqxrRXlLVvzZcyhUfFuHhHWwgGOoBfFbkKYNnxlrdfFLWwVvDEhSiIMmbBUuTcCdDtrRkKCcnoUvwWVueeICcikKaATvVtQPmMzenPPbBJjTKkPSlFfBbLRtZzVvogGxXOOopPxrKkNnUYyLluyYIiBlCcxXYynBbeGgEBWZOoeEfFMkMXOofkHwWxXGghKSlWxbZjkKpPJbuUBSszZznNZOobBjJzCcBBfNntrwANcdDCndUcnAUEeuUubBwWkjJKuYcMmRkKrRrgGcNnCgTsStcmMCmkXgSZzsGxgqRKkVoAaHLuxyyYXxjRHhruUflOotTfIfFiFcCLQcCqFJcjJFEeZJjaAfIjpPWlrRHhHhbBdZzdjPxnNXmcwWSsykKYNCbBomMbBCcUugOonNQEelZXxznmMyYNfFHOPpBbyYoGgakKvmFXtbbBBkiFjwyYxqQKrWIAaiwRegGEgqQBpPbeGgEyYWzSMmbBbdDSsiIaAfFzZMmJjfFMmXoOxvtAgmMGezUjENnecCeBbEJnMCcwrRAwWPsIiiIaUuuDUjiIcCFfvBbQqVTZzIixXQpVvPNWwGnNgfFhHTCctxXvWipknNKPchHCIpPvUuVerxGgEePCcqQpYmMXxZQqzyqeEzZQXtqQSsTLlisSlLemMiIdSsUuYyDwWQqQqtTsLlpPaASuUkJvVbHhBiLlvVjJXxBUNnuGgbjSnNMPJjpKcCkuHhSyflLIMNnSsAlLrRGNphLUuloOsuUSgGtgVUgGupPdkbBEecCTWwoOapPbfyPAaibBKkvqtAXrRpPdDxbBeCcgGJRSPpGgxcoORoOOoHhXTzdDZiIbBRWKaAkKzHvMVTyqQGgYcCRnpPsIUilAaMFFbBffJyYMrRgGmooOAkSvVPpsKNcrRCRrnpALqBbQfSsQqzbBMmhqQHUuNnKzocOKkoCvVqGVAaNnZmMSsIqQUivVSQqUaZzgXOoPpOoAaCqxXxEepPxSnPSYnzZNWwiwlCaAvVEzrrRlAaHhPpLNnjJRZXUuxkKoOZhHwlZBbpbBPxXOopMmPEetTszaAeWwlLtLlkKOERzQqTtcCKkRfzwWtNKsSPmcCAaIiMnxvLtTaAPpgGncCNdRrseECcvgGjDdJtTfaArpPVvRjJOoGnMmJjjcCpPSsJZcVQqXgGXxMmxvHhCSJWwXxKzAEefFaTfjJeHhQqHFfLvVvVBFLloONndkicyFxHhEeUuwvvOofSsOioOFBbzHhWymcaGAaRVgGavVtqPpsSQHFOokKEAaFfnNYyWwiBbpPaAkKIixXHhIrRblvVZzLlYyepPpPZznNXBEqulLhEgGMLmlLDdKkxXeEbfFZzBHXxhmTfFnNdPpMmfoOfNhzNnxXyizzotEcCerMmqQLsIFyYfoOFQTtqOoXxfJIiNhkKsSOdDofTtoiIOYwlwWgGjWZlLCbBBHhjqQYqKkuUwWOUEgGeELleUufFjJaJjEeHhKZgfRoOryyYYXxFKkkanNAHPmMphKIKDdyaLfkmAfqQhIjJjqAQUuqqFbVbBZzvCqJjkKxXQtRrWwcCONuUnSKkOoevTBbtHWwOBbTHjJhOzZnNRrCcXxBbJXxGnkKtyYuUoOTGxXoOrRllLEeLrPWIiwzZIiDdXUuxZzkKKrRkoOpyCcYBbZiKbBRTnNHcdUuMmUuDdYyfthHTFzXevVExAiIaqurZSuUEuUUuefWaAwBgGxqxXQnfFMmVvNQqxIUbhbBhvVWyVvjNnpqVvesDdSGoOlLoDsSdvsmvVMQqfFSLpPlDdVuTVVNcCniFoOLlzlLZfyYHQjelLEzZECZzGDdtJDdTtPSdDsFfvgGVIiqRkDbxyuUYRrtyYGvVrRSsjJvBbTtVoOAPWwpHhXxEuSsLluUZzJjJjBSsKMkKmOLdiEHhewWIoOqXxMmVvuSsUjGfFyYaNnAwWkxnNXfrRMNkKJjMaFWwWFltMsdLlsSISdDCceEBbcIiCaLlrRNKrJnFfRnKkBbUJjiIShHoOsuvcHhCcCguGgUQqzXPpxPiDuSsUsWUuwIsmMjJiIpvzoOpSsyzzZZSskKzOoqGXSYGgysxWYzZbpPdrRDgGhHLZxXkKSEesaUuCIZlJjqwkewEhgGpbBWwPuUHFfoYGgVvoOUuyOLaAlEetpDdwWVvhHLltTkKMdDmVvjsqRNwdJjDWZxXyYyYkBaAxXkUuKwWsSwWTdutKDQqdDdDqnNPRrgGXCDkGgFBEeiPpIfzZcfFYFfaQqJjZEksSKepfFPzHwnqQNPWwpFfaAEeKkGgtjJTzfoHhNVaAFfmEQqeMnuUDWuvVUcCFgGpSdDsQqPPxLRrkKmMQbBnNqlXbnNsaAWwEVvebtFJjmzZjJMrdtUXxrTMqYRrlxcCqQvVGgUrbAaLlAyBYzcXeNsSnTtENcVvnOoNWwCFhHVvsSOEtTtxdDXiIIzbBZYynjJXkCcKxNEHheeuJjHqQhMuJsXxUsSJkVBMKksSmbxXvcFTuUCJjPEevVpYjJMhHTtMjJmvVKkupwdnZzuRKAeEkbBQrAeEfFaRQqYyNmALlXxpYyeEYiIrKCcvVDPXxjJgGuUiIRZLlzriITtgGVkKIUulLMaAiIGJeEtRrTzZUbWuUkKDdwBqQFfLlUvVurRuEeSsUEjVPpUbBunNtgGlhgGHvsBankKEriIwZztTaAcCKkvWwdGgmOotPJjJbTtJjPCwWiXxIIbGgijuyYptTEHhMlbBZcCakQvgGVEeAamRFfhHPpdzZiguUDEsSwgGWsCPnrReEDdmMXQjJvvVdkXBImmQhnSsarUusSUjwoOWoOTtkoOYyXxPpgrRzZswWPpGgSJnNncCNsSAhwWIilLWmidogGxXFVvWwfsOQuUsSsGgVnNEQSFfnXfFydDdlCJjMzAatTNnCEhHeGMFUagSsGVCWwWwcTtGgdTtjJDRNnZzrYpLyAUuAzZYCpPiKooOCNnDdYVvyOjJoFfcdDzpNnPVvnNwJjWjpPNbBnwWJjJFfdbUiODuHHhpZxvLCjJXpPQTycfBLlbNOonloyYCECcPpJjqtLFflTGgQpZkKEeDDdfXxFyLjUoGgREqJjDdnNIDcJvVNKdDpnNnLlfAaCctsLcZzClPpCcMmdklTmMtYypGUhtTOoXxOouDLldxXTWwVFBbSVvssYMmmMyhqQniYWEeGxjUuJXlyYXxLtNnvVKkhHUuBJjmMEeTtNnGaiVNUCzQqZFiSbBnNiIKHTwdGglclLjlLUqeEQPlQqLgIqhXGgPpMPpmjrRuIaAHhorhCchsQqvVTtSLJjljZzJBxyYXdDPpeGnMmgGgGxXVDRVvOSQqFIpPUIiuoOlLiGGwWHLJQCsEzZKtHWsSXJFfWJjQitTRlUytVSsOoRoOrNktTzgGxXZdDqgYKkMKkeHHhhuUaAXxskKiUuqQWwUJjoiIOHZJRrjzDdZqQLECmMcpPZzCcexpPsiISasSrIlZzgGzZLfFCysHoUuoOKXxEqQekDzZdBbPpJjOhfFxXKUnYlLyyJMCcmjYXxqSszAaDyYBLmAaaIuUkOoKWwCcnNapPAcfFjjtyYjmpwCcMmnsqtTqGtBpvlBzZqSmZJZzfFjdtaADFfyNAaXfFMeaLUuytTaSXtxbuVwWvnvADdaCEvyrRYYyIkKySsvVgGYIibDazXyYwWgGNnxXsSwTtejJElzoSDdbBsNWeElErLPFCckKfBbdihHAaWGRkKrMPjGCcgJkOoFtqQIiDPpvVdtTbMmSsilGLlrJjRrRCGXCcKDdYaAtpeEWXcCxlaALwEBmMLlpMxXyYmzYTtyZyrnNRTtQQxlLXPnyQqYVmPHhvVqfFmCmtTjJgVvQmBVvSsDmMCcdVuUmYyMPPpppPSPpDDdErRVfghumGglLMUMeEdGgllCFXxeEHhcAaCdLOGIaAiHhaLljXNWbBKkHhcaAurRbrfFsAalnAaOQYySfFoOWJjyYuSsvgmkaUocCOTtgGciNKIFfkKnNivakoOKwuUyDMaADddDmpPdOpHDCcjJzSssSPpuoOEeUHhZzqQZaYyMmHzIVvhHvVDdiuuUUZtTAaKVhHvsSkUuhAdCcKcYovrRVOWeEOevfJyaAIjJbBXxHJjhMZgsyYQbBqSvVHzPzZoOYFZzmTFfKhwWPpkKHlLmGrJjRgpfFPYyPpMMVPpEjVvJvggiTtIZrRzGuUUfwWmMpuUFZWbBDhhHHsSsSCHGgGfVbBLdYAdDWfFBbYyGLjWwJxxCcLliSjJZzKQkUdDvVutUuVlDxXirRxsSiIXIKYFfyMczZtoxAnNKAbeQLlqzfFOfJjdDzZvlLwJFfjxsSKRuUhxPpXJuDoOpNWJSxCcXmMeXnmMOoEGHhdDJPpjgJjeUcvyYczZClHLYCcOYyrRvVoykqQjJcCEyWwYSDnNEwdJizZIeEOoBVbjYMmgFffFoOOoFfdnXxGgNPpzOoVRrDdIcCbBBbrRlExXOoAaiutXxIiTJjsHAaCGgcyYjZzVNnvxXsXxmTRrtvMiIXxmVMAapLiXYqQdDAhHzGVQUqQzkKiIgGuUdDkSfFgpPDdmCwXxWOqZzEIzjPpPHhBkKrGgRrFDdGgNntTcTusSwWeEYyhHCcalpPGcCmXVGEesSacwcCVCvVuURPpZzTZztxfHuarRPptbjgvVGaNnAqQJBDHhpPdzZTScXxCWlLagGBbAHhtTwuyKkYJDsSxXJYrRyLugPPGgKJfzSsqVtTIivnrwpqZzmMLlHhlLPixEeAZzeEyYiIdDavQZzqMmsFfSXxVXoOGARragglLYTJpHhZThziItlgGjXaBkKQqMmbgFfACcaaQRuUrDdPqQpyGmusFLcClwWvVDdLuUFMpOjJPpnNhHoDWDfFHhdwAadDEeSsdaVvqGqQgWKkwHhWwJSsjaAKxXdxXDPeEjJIiRnNxrRXPpTgGgGJjWifmMwGgWRrxLgVvBbIihGFdeUuSQurZWPpwfFXxYyRrqbBadJjDCcpujYFeEDdswWSfVekKRrMmsEeSpLkRzZtockwunNUkPIffiIdrRGgDVxynNnvmMQqcOoXxCMzwLyeZEezuJRUuFfRaAaKJwWfFzQqiIVvPsSPphjsSNnnfEfFNjJJvVjhyFTtrRAdeETtvVhHzZXxHCgGcQoYPbBLlvfsSibBNnlLvVoOGdVjJfFDKoOIiLTtMmxNQWNmUhHuMdfFVyYmMeEMmhHtTEyhHRtVjUdcCZbZKkUufFzZYweeEKSsIiiqqXPGgpxrKkRmMcLloOsSvVNWGgsSffFWgGwRCtTwWRrbBmvxdDZZzHFfXBbxZsmMSzjaAoOPpTjORrYySskKQAEcCeGgBbSsPvVpfFiQcCzZDESsBWwpOowWORfsnxAyPbBKkqGgQqWwOfFoQpIlOwWUuYyfYJaTtAJbrREeKkAaiIwWffUuXxiaWOoIiLVaqyuFynNYLlvkKRTthHLlNnNpbMtPRJHhjzlLdDHhJiZHhyYcmMCfFtlLeEOhTtkGPiIpgKnBRrtTQqatmaAmVvbLRiwWsSIOQqeEUXrwwnNFUZzjYyUAaZNaEjiCcuYOoMjejJRrSmJjcjcdDFfDJjJfFEepXxBHBbhZaAfPiIxWwyYXbohHmEpoOgOfFTtXxosSnKkZjJmMETRBvVbaAfUeZcsLlFYNnyVuzUuXgjCrRJKtxuUBbXHmMmkrRSNngGssWGjrMmZzzXxZxvLtTNNmukYIidGKkgwPpRfFrXPnNxAeQqxXFccAHiLwMUMTvVtXxabBToIRpPrJNMmrRhHEsSXhHlGgadMUZKeUxXoqQnPpgNnLlpgCaAqYyvVXxsCjoOIppPFtBRrLMYtLCclwXxsSEeWPpgfmvoYyWDdweRrjdDJFbBBDdMmxdDwWdDCKXzpPxnNIIMmJjKkcSiIQqxXSCcIkKmpPJljJLvVKkIrrJkEeOnaAtJjFWglLSHRWZNGgfFHwWvRrSEDbgFZeofFcRQhOoHUVvXxuJjTtKltTlOoAzCGgNnXSLMmlmTUtHhTutMiLlpTYyGnNoOTnyvjJVPbSERmMbvhvVTtHXJjxoOmMtZcHhwDVCtTLyrCRjJrcXCcaAnNXeaAxXkCcVmMmSzSgGrBbRsyYNOFYSsyEefoHhJmifydDJjRJCcNnSsvVXbgGfYFfpTtelRawdTQIlczZCZelRaArTtepyhHxXWErasdoycqQWwArhtTcCVAaIfvVFDbBaYJRzZXCHRroODOeEoXxcIBVmMDrRLldqQvMcHvCcCcOoWHrniMHhGEfGGAWqGlLgQLlPlLAGgxXdDJQPwkKoOWpBYsSbBePpyoTTttOHFJYyQqjFBRrakgAazEezxXrRSsrRZToZnsSxXBbypPOozBbuUozUijIbiIurmbfFEeLlBMlZRrHaVGgmMnNgXPxXGnedDxRtTrmMCUjJAauWPppGHoFXxUaiuPZTmQUXxhEzZXxxXeJKeEjuNsSzuIddDVHhvDeeAaEjkTtuhHFqQrnofUKkDhGdWwlLOXWwWwAqMmvAeEHYNtTYynJvVhhJUuLlIuUzJBbiwWKkgXxdfAsCECdDmMnNcvLSsTtzWxoOQTtTtQzZUOaAzUuZQqoNobwEgGoxRruLwuXkKQqxMiILlmgeENkElnNLbQyYJjqCVvPiICgBbHQLlcYyCcCvVPpbdSsDqQWiIOMxXCjJXLKgrleEVwWWwEcfIfkIiRryYkKJjCcLLldQGXxRrurRHhZOeEolYTnWWwNnwZzNWhcVsskKSpPllzvVNkSJXxiKAusaASoeEmKkLlMDdMmyOoljKRbyIVviYBdPpDJKhOoLeBbsDdRrgoOpsLdJANpUAavWwhHpvYyiIXaAAmRXeExfTtFrMalvGGNnIiVDVvifFIiZzgaAZJSyYkvVBbRvVfeENLKkWcCrjJZfnNFEWWUutoOThfFGFzjJxXZhqQqWyYQqQMwWmPQpiQSCvTxLjJFfOHfBbvVGgGqPwWpQgqQhVvAGgeEaFfHnNyBbgIimzxXQLlhBduGReTKsSNOLhHgAhDhrvVhHRWwlZQQgGQqGIIZzvVuSsUvZzVKvRrVVvvwfsSgGUNAzZbBBJjbfmSknNFnmMNayYsSzZsTtWwSmssxwWZPalLRrVoOrqRroYPNtHUuKkhSMmbpPPrNnwWRrAaOozmZJfeyYHymlfYBcsrQrNnUaAupliMwpNrmRooDdORyXqQwWyffxnZujJkKFJjlhmZoOzEeIJjNbFfEHuUJrHhoCEugSsYoiInsSDzaCcYVGRXxaAHhriSiEgQeHhEqMWlLAakDrXuNvVnPxCnNPtsLTFLZJCfjJEeRrevtTVkuUKEFVZzFEtTDtRrlPfFfLiKklneQmfwWNKARApGItTijoOuZhSQKkbBqZzsyzZYfFSNrfjJhunqQfqPpPjXWwXKkkFjJCcPpInNwwWQXxkQqghHHQZxXzZaAirbBSsPCtYGcvzSsIiyRwWgGYmjEeZzJPhtpKkYflkKLFwfFWycCXAaZdaynrRNMLbBeILlzBDVKBbZzkvdsDdnoONrRNbMWFvVziIZZJjOozSQqhFHhfMmIZxLapoOFfzZfFiGgIDtmrRIiKoMtMrRwWnNwWrbmMBuOgQLMgGsSRrKBbkKkvsEeStTSsaApPpPbRrKKnNEetEHhuOjcCcCJZzJBbjVpNedePpEKAazvVZSvVGOkKNxXKkcnNzoMmOjQEgGnReEZNncCRrpFIwxFgVDdanuFfFILhAhHaoOJYJibOoqQWwGgkJmWsHhSgGIigdJTtjHESsGpPJQMeEPatTBQjMCcRYpPmMSsSfjJrRjEGDNSjjJJjJAqDdQmdPBkHVnbIiSPpwRfFGgsuOozrsSeHQUuqhERIkmMZJIVuUnyoOWRrwWdDaWwngsmZzswWKdDUNPbznNFfIiEnVvLlhHuULjJeTCqQqCdDcxXQshHhHTtSDdiIEbBolqLXxlHVJjHNKSGgRAaAuAOVveEcEzZeHaAhIiXxxXlKkzZMAeEdWNnJrriginNCLxXlcRMNYFvKkVUIiuvVlLDVmMKsrRuUQqXfFRrNqppPIpPigBbwoOWgSWzkmMSMmzYfUPdOosyYSNtvVgkDdgOoGoGkKjnpkKKnEeAjiKkNnOEenGujJGKkTtTBbBjmkMHaWiLlAXUVvugGRvVwEepPWKUuBbGdDgRrMXxmgCQqcoyYfYCVjJGgvNcCUxZAlVeBaPnTtTiIWSswtidKAaiiTzZTmyYTtvVXxRniIXVdReyhGgFJyfNDGwAaokKLlONnHMszJjzpPSzKkzDdjJbwjfymIilLZzKrZSyzZSsEdPpLloQgrRqfFIikYCFsEeXxnxXZNWnUNzPovLbBlDhHdMmzwWsRbiItwMmWTeEtTCILRruUaALzOSYzRfdDVmWVvltMmRrTtTsShHcCmyeDYydEYODuNUnKSVvozYyZyYPGNwFYpPDhuvVfFSsUzfFSJwWjkqoAaOQEeKHhAUunNNYTepkKPMmEtBbyIiYyhcClXxArCcOQmsSfFkpPKriKyTcAHhhxXHyQqzMeUvXPpLlaDdAxVRhczqgkKyYGUfhofJuUSCYCXqTtOXCcHhRrkhTdrRrRaMbBrRzZmgWSCCcLlnvDTtfLlrezZlGzBvuUVyYUuQqxBPpbtYmxvhHarsYWeEOWbBBbhHOYdpxSInlLiINfFEMmeygjTJjGdBbjcTboOqVvMkKwWfGWpVitfxXVgsSRfoDknYyVmMvJwbBxpvUfkRrzqSsAaOWbBSgiIGbwFfygGYEenNLlLlKDXxFtJewIEePpisxXSSrWwCEXeEiMmprAHkKfxtMlWUVxYKkbBXlcOVKkvccCCkqwaAVvWQxhQxXrRnrnNNvVHhnfFlydDLrRcmGnNafFAgMClnNTUOodDVvsGpLJvfFvVutHhTfYKkOdDNOFfdDrRPREacCAFyHidDTNSWOoVvOoEewgEoOqvUumMvYymkcYxUBbbBaAlLDaGgAEfkvdVkKrRmMfFOozYapPxXbGgYvYQqaARJjExHhRoHPFvzeCLlcbBzvwvKfeSIutTkEnrAaRlIPYlLyrRIgGHhfFTjvbThXzeELlZrNBbrOoAwoCcOWPXCzZNnXxIiRrbBvfrRFXfWHOolLSKkspPRyrUFzeTJgwWDUYyxtfVZBTtgGuqjJEhdIxCYrRwPOgKkqHxPyYpqrIpbEAjJalxhjqQbZzMMzVhHuUWweUgRKkpPrKkfFsFgGCcYyDPmMgGyYgsfFiZBapjnNswjGqxtBCgGVrqQnNwYyWxkKpEbJjYNqQPSETtekZHhSFfszgjefhJjJCGjkPpwhHNqzZlWdDfHhxXcgPpznxXVQqQlOQgPpevVDdOoOfQQqqFBaPqQZVAaUgGuuHAazgGUuzAaHexJjUtBiUuItFfTtTwWaXOwcCmJaAbmiBUPeMmZGMfTtXlKZzHFswSyKDCcdLrRgGqdDssSGUugfbNhYyhzZHLleaHBSxOoIiXqeEkzKkZCvRaCsaAYykKScrWGcCzZNnFcCVvnNnNKhHkwpxeyMzrXoakpHpgmYyMGGBLJhHWkuUYuVonqQYlIWwSsQNDdvkKkBIvnNVlLibUuHhvlLVqhOoLAaEeHhnEetWsJMHKNYYkKDZzdYyGMmCcgXiiIfgGPsOrTQqqBVvZzDnhHgehBbQFfGgzZmlaAyYIypxkOJjokKlLLnQfFMYkkKjbBJKnBsSpHSEibRiVvkvHpCJhlLHxXmnNAKfrRkvHdGkKnMmCCcpPKYiGgcFvXSMOrZzRrRQuUqZEeRmIQKiHPpplLnasjvHEdDCkzcCIAeEZBGlPpLkXzZSLlOochHLlfpMeETttfGVcCZQbVgyYFfGVgGvsjJgpSFnNFffWAallLLdPpjxXRgRlLFwPsFkzCnwTDoMRZYtsSvVnSroOfgGREehHsnNyYyQqYSSoOsgGkejNynwjJWJKkxeEPZzpshHdsSzXxAPpaDNniIWrolLSsNdmwWWbbjJdQqDlbkiIVyBbYsvHxFUaAkKsSqYSswWLHoXwOONuUJSqrPlLpvGglZzLOeeEXEefFxERxlAEwVvBJdDiCOocpPSwWDIipcCiwcCcNnsSOoCFMfFEkLeUXVcCvxMlCnwJAajoUufqUVvuQUuFzWwZOOBbDgGKkeOoEwWyYNIinxkKMLDpaAXJjxaAflRBbHhrmMsSMmlLlbixSTtsCcdaiYjXxAoOOFehPbSyVvllgzNmMnUlZzAVvJjymMYmMRRLlrJjCeEmMFhHhHovVORdsrVlVvgRrZNYyBbnOFAHOoAwkMmKFLVKkxPnikKSswzaAxXZOosXZxvHyoOxTtGfZJlXxLZHMSmgGDOohXxVyYviILbtOqQXoOWwxipPDoOUBAaqUuCvquBKYyubBLlDWNnnbpsSPpPudCBXXxnOdDhNMmkPBtiLlohHCctTRELlfFKtTrzZZtTdMmyYqnfvUusfFtTkrRdOLYdjJSsDtJfVTtvaAiIEeiYDdyqQUBbCQcCDxyaDzZdDMMgGmmfOsVxsSeEnNSJHEelLpKukGEQqxXIosSkVNnfFvcfZzZWhfsSPDApmcLugQqqDUuumKIkJoXxOZzcNzPGgwWpkKvXxGAaigbqlLNUZUsSuMmPwxLTRrzRuUuzLlgICILEdGIbxPRrQEeqOWWoOJjsKkVvKytwWdkpHqQoBbyYZzYyqQJjqUEXGwcyYwWTtCIwLBbkKOkKfFkKnzSpPcpmQTcCMLlKkbTXxriEetFNaoOTQvedQOoXFQFfgGWwXxDvZzVAadvNuUnWwVUCmdSsTiASNEgGQqLZLrRXtWEKMmtJMFursSesSBpBsSucczLnvVNsSlvHhOXrFfSTqPxXsSEZzeBZzhceEYTTtRparRAJMsKkqFwgqQxdDvSYKqQmHWXVEtjJzZcLdMgGmbBDeMchHCvaCcAuakzpuqWzkyTIiaUDxUaARrJjSePpmLfmMIwsvAIiaRpHhuUMmbambpQFUgGdQbJjzFfZKQKYTDESHBJgKmxXhWjJwfOofLlWwbhHBRwXdpPjRrJEDJjbBgYuJHUkMLdDXxqQlmgmdDuUKWSsHhfhBIuUfvVPlFYytTfsSNgGnBSsblmqpJjPMmMmUuQOkBbfEfFiCWLvwgAtfOoWGLYVUIiWGMDAapVvVgMmGGxmijymJHhCKVZVtTHBeEbrfVQgpJYypjuUwWNjKwWoONIFpPPXjJMRzZZEWwewWaAJjcClLQcPtwWNNnTtLTtdDedVNnEevCfFsaBAaIiOPTvwTlwIfjbArvPTtpVvuKkfqrRrjgYyHNNDIspPdDuUSOogMJrRzRdxwWyYhoqktVvLrJZnKuUIbBgGLJtNrmnUqCcwWVQtpHljEHhmMnwoOyLZRXHubMwzZWwqVhPgTHLlRrRrFCmRwWmkOBbrrPTJbBshHIiSjhHxzhCEWWwwpPBTtOLloFOocUuZdrRbJCckrRKSeEsFtSstTfkWBbwwWcCzkKQeDdooOPlSfLVTrfRCCcOChzspLlPuYHvVhzsdxePpEGebBHHPxXSsWSCQOtJSdDsaQcCyYjJIDdiqGEJjkkECmGHhyGajJTvgPbyMzZmNVhScCVegWwMmmMlnNXQuHGgOTxXAeasBlvWqdsxCKHwVvpMmTXHqiXhLNCcqYSsDdyIUdvVDZgIvWScqQUzKUwWuUigwWjykKAdXKVvDdyYnYOomMnqkWwCiCcFnNIifIIAauBbuUxhHXAbRJlTFgzaAwPpwWWrwWCUurLkKSaoOArYMbTtBbBOohHcwRkTfspPrUGgXnpPNuwtTRSsgWwdOPVEenBPfVvEePqQpCJzFUuVunbjaAVpwsiASZzisCrdwwWWyYwTIJIiBNnbjSsQWvTDoOpPWdoxSeBAByMmwWVWqQwmOqQgGvVoMnNuGYyFqISrOPNOWwEeeoFrIciIlwXVvLlunukzZMmCJTpPtWwRueAlXLTnNSshJAlLcNgejJWwEwWLBoOkQYkOdDOoFfkKfFsZaesShFTIYLhnNdZzjlXyYSEMTvCatvVwSZcgOVvsNBMDuYFXxbSsYcCyawWzlCcLwTMGaACWcpEewQsYlbpApPagBnuURrTabBBiwpSdPwMofJurVMsCzplsmHLNIJmOKkoxpcCPUuwZvVzWACqQUuLlcavVaPYchgowGyzZKbgHumjQFfqbBYoJzchHwWCeWkYyoOoeFqqYyuHGIPpiRyxhFSsfcQqejJGDPpCcdBbbiBbQqISmEvIxnAaNEecTehHlEeCiIjCwWJjcHIsSVWwzQMokkLWPGMiImAaOogptOVNnkhPMwwWhwWTKkAIOPUrsFSorWuvjkWRrjFfVvJLlBxXbDsSdtTImshBTtEfQBFfcjJDBHhHVjgqeugGmqWqjcLlmEGfcezxXZDTtdzqQEPYBWeEAiIafuSshgTMzxmMLXwWMmBbWxXWwLlgGsMSspPLiNEpngGzZXXkbrWwRHhaABxfhABbTtaLoOxTCqEeDzUuNniBeEPxjJotLhHJjlwbBWTpCcPtmXpPECTaAtcJhHIFfhUuyGItfHrBbELAalUSsDikegfFsIipDEeXvlSmONnpPHqwIwOopxXPpuyirgzKVvJXXUXtTsybBYKQqRAaVRjDqwWTwGKkIiMPhgGrRvGdkvdAafFwWRFIiuyYUsRjvktTKZzCxXxWIbQdDUzzfUNntyhIfcgGhShHTNIopPAoHNnhYhCoOcsrRFoOkKVMmbXEpHvpPUCYOnCTyLfLvVMeXhzqQUUlnFfNLGaAaxLdvKpGfFCcgvbBExanNWZRFuGnZzWsKgGwpPvJnRrtTSsNaAjTylBySsfFhHYPLxXRrlpcWwYyTWsSAfSshHhoJXLGHMMmmyCciBCcrAaRbIYlLhOoglxjOHtaATFbBawUutCfFbLYtVpPWkSwJjNgUfrzwKkAXeVPwWBbkVMmDlXSsAvVglJjLuuZHxVvEmlFlYtcoONoVvycuDdVHAahhPexqQBvpPzZEoOeyzZYTyYtWwfFfSbBHyOTtaOintsHJjCYyFiHYTxXuFZZuqBiwXcVJrSfPprDUKkuxXNnVKDgVHpTtmgWtQdJrvrkSxuxxjkZGRIYZzUlhHfFLBxXbPSsWiWQNnqQhoMsTtLVxdPxXStTGEKIduaAerjJRcCRFfhFTigYHsSDFfdijexjJBbMTIiOxnNXXzZpHhbIZdNnWwQctXlHFXoOKxxfFfZzFNPeuUqVvQkRrKnIlmSwSsBbxoOlxXXZJjmtGHUFcCAaFbBfwbWwypeNnZECFgeMtTCphHPJQwMzZmIiQMURrEQXxGJvwWhqQbdCbqFeoOsSbEeBbHSMiYyBMPpmbLlDdwKGtTgaAMmXxEeAaJVUwROVvsfCPpcSRupoiatwxOoXEeKkWHWmpHKvoTPiIrzZRpwlKKXxOpPmMmqZbBbBvRrihJclLEeLEtIiCrRoOXiVeMqnNQsBBbgEkKCyYWwHXYrghUoOVvQQwWfEOKwEcCpPbBZjOpPyARraJMUhqQGBkYgWOaAGHCypANnZzXOoMjinlhMSLPZcSuUmvRUjFOoOHhmWpneENAaDsPwDdWWInNNnbAtumMlLUlLNbGeEFYyfBbnNPBLyIiSqWPCwcgmSstCcSsWZABbBfyUdmXxbjJnSoGCzpPsWtTKIiksSTAcVtmesxdDLJDWwHlyitfHKkEAeEzHhSjUVvuJJjyfFYoBKyqKoOblrRXxGzZvVnCajHtlxLaEUrjcCcqQzZKUNDdUsSxWLqQqQCiQmMqcCZzSsiIMmRfOEoXHhxnpoRsiQfgULlWTtwvYbahVvHbIidIiDvVEsXCcODwdYytIiVnrRNLlnnNNwaAqitWMmDhHRcSrRAaIiIsaIiVBbvLGglISQqWPvJtTBNgGUvOofHhZjcFpbNbBvpnNoDyYGrWbBkbBKUxOouRwWSFtKrWCOobBmyRyYslRuUcRZGftLjrBEebBqQaMmUiNSsncKQNmMyNkxUuDaKsSHhkYYyJjJGCcIwpQqPWqAeEaQOouksaASZumMCsGgwkKViGzYyuiQCcnljJHxIQhxtkKPWhkcXSDQwyYVLbSAGgEaHhtDdUDdCcvVuohUqxLvVGEveExzZaAXtTsGgHvnyYVwWxXvvVYBMKPpkmpGVAaVvtAgYpCcPrRgMceKKegAzZEAaejToqcswphhEgXPkKpNnNnDMmHhSZFfyYpZkKZoOzzPpMboOBmPyAaUSZHcocrFRKktvlFsLUupOEqZKoOoOFGgTfjBDIKkizNnCfbwWKkgGecAaHZRrXtRuUrpRRoKMunNUrgGCcMcfhRryYtGgGpHGgQJjqvQWNnmGsSgBtTUueEhHUhxiIGgryYzlwWGgdDYaAWNePpYyJLkuUKhPTqvQuNMREePpnqJjQkKTjcClikNzjRlTbxXBKQOHQqXDrZNnzUuZjVvmGimMdnntThGJRQGgFUVRfaApPFaBJFiWLtyYWVtpoQqrRbsSAScDElnTpOoCqjJzrmxpfivVnkKkJnJGAagPjPUuGqvFRmMhvzUuvkcjMYJIKkLlMXgvPdyYmwsSWgwuvylgwFTaAaTtBbGlLuUWVNnlwWwcayYAsSIewWwWFKofbBFyGgYgGGeEoOZzgMLNnLpFcCiwWbHFwkdfFDMGVvWwDdKutjJThjUysYySGdeDxWQwWqXxrRrYyeEoOFFDrRxXyYdmMHMkGjNvVnbhsedtykqkBqDTtufqQqPBMATtBgGPcCrVyYSWBsSbiFlMEsRraAuXdDduAtYKZwQUPZKAEeUYyuUrDdsSRVmmMERraAlCTgGzZxdDXIiGgevxwhMUudDkysVXGWfQHotTOhSmjPWwrtyCHlLbbtTBsSpQtHhqQCcCcsjoOJBPprgGRbRxowWwXBblLxWSsHhVZCCYyUUuCcbHhjJPbsSFfEUuRUgkKGfmjNMmZTtUuzdDMmIinTIiYykgGewTxlzPplenOosaItDMYgGycuqfxqXwWxDEYyVqtAnzZfyYTIiIpPRtBdkKDlLQqmtqMNLlnPCsZNKSskFfoBbcCKkFfNnlWIiiGgeoOEWgxfFeKkuQOoxtTuUXTtBbOhPJFKkfjQqpLlOoPKDTYEemMklDARradLSIcCiwwPzZpoZzRrCLlgGITtiaAcpXBjJiEegDYyelicxXiGZSslDMmdtTLURrrZtlXWpMmzuxXYynQBGIgVZpPnCCcjvVKikMUdQGUlCMUMqJjQmVvuPaAadpFTtHkKwJjzFCdDKOiegKUlLkRrPhjsXvSoFdsSAmMYXdqcuInNiIkKPpFjTyloDByYbBbKSVFNQZzHhFfHhDEePpzTqQhHWwKTtktRZztTkeryoOooOOYOITbxXQqVvxXPpnNpKnoOHHhqIiQoNxBbbCccjJDUBNyvVYwDdCcdUIwWikbUgGQVcQkKbuHhdCcoOIoTBILlilHdMsLlmJjiIhzjJjzFgXfFYhVXzxSWITtBoObNpXvlfWaRrhakKIifFfKaAkoNYynCcfFcCzWwGLFKkfvRSDrFfxfFXfcaAvVWwriIaLAauZGLLOUuoXxcChHYsBpHEfoWwaJyIADXIBLOoyYKkLFPdlmXMnSspPNmdjdDJoWyYNcLmuElBbKemfWIPKkdTaAtuPpUsIjbQqWEebBdDeaLXroQbBqhHhHGgVMmRQmMsRXxrAajnWwpPooWxOhRrjJlyQDduEgOoGefDdXhVSxXvXxKBLBVCclLvbBBwUuMyYDnQqORwTtsSOodgLlGIiZDWwSXjeEXxuUbfFBNYnJEKsCcqQSrFRsNFfTyYsSYyyzZNnzrrUIiuRmEAaeUbBuOdtDdWKkXxNcZsEeScyYuUCKfSpWfrMmGrJDvTtVwstTNZzYyncCPGvVrRSvBqaAtTzvgTtFTmPFCsxKgbSszaiZKceMmSshVJSANPhIDdkqiMrzuUojmMaAJmsxvVxXVLOolfZzCFfIPpykkWwKcAaCcNgLlDZzhVKcCuUFvVkarRTtMeyYuUEjGgHhchPpHPhVKIrBIeshPbkKNZzymqNlAaBbKXkKOGgMmoPgGYjZUuznNJcCiwWLUuMDuUHhdmMqkKHEMmGNdbQCctRhHohHSYypFIxFfZzyynkhmjOoSwTNhJjHuUlFfqNnQHQAaKxXLlVnqiIiRrLyeEpPNbBOvKcCkUyFRrLlfKwZzgPpgGNnGiIjlbgyYPhPjJQqKuUAMmOxRZVvPpbBAaZzmYEXPWAafiIgwRoOArJjFnNfVcAaKGgQsbwWSsuUIihfFiIZzAEAaVvHnBFuUjJSQTtHhlDdWwkYsWSfhfFkLxFmgzGgEpubIMBRrMmjMxXWoxAmMgiOoSshwIiWeEHIGQqbTuRrtTXEfFhZZCchUvzpAbopPwWEGqoLqvNfFZGCFMmoRpPzZrOMmwLQnBbVvWKJqLlQHhgcGggGjRmMMmrJoOjHdDFdDEJGKspnVvyBePXFfRvWwcbTXPpQgJgGWKkSJPPiIpATiItRrbzISAeEaGmZYyzMpdJjfSbBpPfFGgjJGuSssKkSETtnNsSfFhHvZmmBUuJHAaXLeBPpnNPiCcRDdQuUXhQNIivVnGopmMWyeEcyYXZziMmDHEeeQeERrsSUbzaFfPpAvFTXusSdGjtsScCEZfuRYrhgGHhkKTtzZwFsSxVTtVvNnngGNcxDdhiIHvyYVpaRnRxHtBVHhJticCpieELaAUuQLlqNebfFBxXKUisECcFfFkVxXWVZEZVTtfTtaAVKkVvvphOrWwBbXeryVyBrRtTGgAyZfFvDsSVKhHiIFerRduMmHhcWwtTAaaRrACXyCKMAaFfnNVsSVQeGsvVntOfFoIOohYfXxJUujergaAGpooOcCnoXxyFKkwWUVgGlLjlPgSutagGBbAYLzZZzRNqHpPXKVvoCLxyKkXoOvzZuyYwLmWwTXFuURrhaRIiPIxXJjQqxecRFUufsSsWEjTVvfsSdkyqQYWEaAefFBswoUuGgQNGgnvVZKeEFubBVPxXXCcWjNzZRrKdeEOFAaRrrGvPpFTIwWvPIiwgSyYsFmQBtCJcCsSBbQEerRqAaDgtXqQxJlLGYuUItTiOoisAaXwWPDykKoiIQqbBwowySRAVCcXMyGFfxXgTEeXbOwWoVvzZzIiZfFeEZgLfFERFdVNcswGXxbBmMkKADtGUugHKxoQxUMmucycsjoOFOHFZzutRrVvTQZLsSwWHhqQlqQCHSsNnrujJvVEKkmZRrDdYdDuUamMCtYktKkTIRMqaAoRAaaLmMHnMmAaasZwWHbBGgdyfZzWntTsSEmMeXxKkwjJWgPppOskNunUdoMyYqQLwMvFrZyOGgosotTZllwWeEickKBrSYCIicyZVOLMmlpZnuNIwjJWiwbBnflLFzfHhFNSfcyLldDKQgGExXeGCcqOTtuULlDeBdiIsSZzDbSsYszaAvVRkMYFBbJWBQqqQZZwxXWTSstsZJJjZzHIihjZSmzxXZJjSshQqWgdnFYEejmMfHYwWZztTgGEcCIiQquUrDeEvFfxNrSswWMttIInNkDIfFNsSpAbErRvpPLarRzXtTubqtTQXxPpiIBeEncRrCcyFOGQCnNcqDdAaGgkpPrUuxQUuEjJeqaQqIiIwgGAmMhmKCcMJHhiIblLtgUgYyNojJIJaNfqQFkPWwjJNJgtTOOcCoKGTfuUFnnNOAarRjAiIaJoDLwWCclpHhuFxaOoAhHXiInNuWwUyZsKZwsGGXxxXuhHyYoOUPQnGgOoSCcsxSkIivzZdGgUufynmrcCIGYUuyIqQRRjOojJwDJjamzNnZDNndLHhtTvVCoabwWBUarpPsknhvhLFDHhdflQxXLRrEeOecSstElNeoOZBcpPmMCpnuZzkSMYylLSGNAzZwYNBbvijzKiZUSaAOorWmMsBTtNvhQqxXKbpDMaVhyYHvsnbBfFdgyYeJFiIxXsYyMmWwyYGgyaArmBbVvJqUuQoOzZqRrbApmqjpCcPgehmMDGsSwMjBbKBzZIjahHAyfFjQqHlcCiolLOfUNAvVaAvGfXWvVifPeEzrNIieeEqJTtoOZCnImNlLnMiogDfFdXJjxsSjJoOymMYTtoOskDEeEncCPvoUkKevVTkkBVbPpBpPsSmlqGoURmuUTmyYOkMTuUdPwXxWAlXzZziEegsSGOjsSJoWwHsfwmBnWwJjiISbZifFtTElmoOXxjJYADzxPTGgHpMyDdrYSRrsZYywjoOJWVCgyTcpRBbMUumIzBbqqbBQhGcCrRKqWifKxKkxzZJEuUcCepbBVvQFoONUHvVFRFfnsHzUJIiGggzZmMPaWwrakPpnpMmSsPFMqEJjNFFfpsSLTdAaeNnfvcfFjqQzlccCCftlSTtFfseEzmQqMuDHhdUuUjJZSqQlLTcCpQqTtyYcAaXpUJBbjxSscCTtzZRdDbAaBdKcCwFfmmMGpPgGeIsIxXgpPsBbSvyAJjKkZdNOyWwGUfFecORrhHRjheBniMHLfZzUzNXsSFFYxbBHhXxYBbroOoOOoHhOriCcIMRnPWwgGWmpPILPUuyYlLJjRBbqRYvVqQySCbxXyFLpKkPMYhgxnNXGEtSsTTWwrEeRtFCcjzMmMZFfRpfFBGgsTnpstTSJjyOQHhRoOvlLAsSpzvVXSSMJjyYAHhfKhHQqsMFoOanuGgFJjWLlLlVdCcDkiigqqzWxXYynNwLnNHdHaGVYyvlNnpPoYEeynktEriIgUDbHXxqTtoOZMIiGQNnrReErCfPpFwWRrcRquUYhAeiIApPaEnNrRaHEHhevGjSsTtJgVFholXTZzxXttrKdDkRzZjJsbBSVcHUuhsqOoIWwPqpFfqyYwQHwQqWfSsAagHwrxXRwerLlDdRzlLIIQqiiRwAaxXlhHnFrFfKJjsjuUzGIiIddDvlNnLgIigVLUuAaxlLVPVuPnQqqQajDgGllLmFfMSPGSElHkWwNnjrklLSsJLYQWwHhqQqGguSTtsUOhHkKUakIxRrFfXjszZKnZLsSLwWQqSvCjuUJHwtyLcClLmMGgEezUgqDlCcoOzZrRSmbBMsfFfeEwcCCcvVWFKoOFiFOoChDdKHhrRnNkHvVejJvLZzaARLlgGGkKkloOPbBpxKWwkKkcmowOoBPpOoqhgGGcMmpxXcAaRrIiBeaAKnGSZzsUWlUXOexQqsSXWzbaABZwWBOmMnuuUqqtTXwOoZCkKclVemMcSaFUuYdOoDyfFTtSsDcCGIjNnuUZMHkKIihmijHHjqQwWJjcCNnBbTtyNmMnOohaVQaHSshxoDgHfFducCFONRflmfFMLESVvJjsepPULlsSgGKJEZziUZzGgZnUJOokjHhMaAcCmmMHuAaqMtzpUIAufOHhhgPwXxcTtNnXxXENNngpfFMLnNuUeElmpPxnNGLlvAjJhzLRUBxXttTTiJIuZOYyuUZyYyYAaYcCPpNztToOHhOtTYzZAayUutZyYXAXqQNBbnxaxGKAaARXxOorbmMffhYEybYyqjapaTtsSAwaggGfPpbBFgFegBbeEtTQFfqWwmIZzNRVvVvIiyYhwyYVhCmVfFvbwWiQqinNICxXQqfFWwyYcCsSvcCVdbBhcxIirIijyLlDVvBbdaAVvAdivZzfFwWHRaCYODScCLltTARnNRrcCeEewYPEnpPNLEzlLLiqtDWArLEhHPtTBbyFBxPpwWGgfNIiyajJAYYnNynFUDduSsjriILlQqbBYFIRrMjDdncCZsMvvRBbrVfFKExkKxRYlQquUcaAvUudWCOozTVWwBresBCcpKkqvVQsSFfYNtjFfJbBICcwWiEeMmkKTtgTttPXxlLISmMsmVVKkvvVvMsxcZaCffhHFFYycLLLlkrRqcCrtTfFFMmfCuJjUBbdDoOCcEeOEdDzDdfBuUaAbGBdGNngesVCchnCczwrhssSGwfoOQrpPRRraAqTlLAaAaNoKjwyYWRRBbtTOoisSXxlLjMissCiiXZcCxGgoOkcXOoLlAabfjJEOFfGgVUCcuMFGTMvVmJIijyzZTtvOoVZzvVbBmSsleEOobTXxfPiYyJeEiIEecSMmQcGvVPzZGNHhCcOjJuEkgGzuCcmDZzvVOLloALxdDDdenjiOtJjAGgmunNmWLllVjJvRrIkKhSsayYCLltTCBbVvfqQEaHhXsSpNfFjMmJyYnxYmFfxnNXMGgTtsSyNnhHWDiIyoOYyKIiUMnWwnlXUuxBbVOUuoMluULeEmXRjGgJJguUGgxXJjwSOoVvJjpPKMJjhUuTkjcJGGgxZWwUvfiISCzEuFrtcCezNfFRrGosSOPeMOBpFQYyqzbSsSsMTdDtcCmPEeMzZmjCcduXxUFfTtOIiotTcCCJCMsJjLvVlCcEJmyUIJPpeAmMnRrzzZuJuRQqrRaArfWSsWOokKRxMbBmuaAOokKolBbLrlDdSsFfBMoWSOoxXsaAmMpPwOCcMTAbjrRJNHPpoTzWwVrRvIjZrpTWeEwmBPQQqqnCctZzTrYHhyVPpWwIiwWsSiIfUYQkOoKAvlgGwAILlBDdbFLlrRFUuBjjhtIiJjTHyFHhlLDdoLikKPpxkKXYWwaXNSFvnXxNVrYcCyayYAhHGgovVPbedqIJhHwXxWDLlbBzZBfFuUrQqaARbtTqgGQlLRrdDdXNnCcxjEeFfoOaqfkpeEPKFTtSsoJtJLGglNnmMhzXVcCMcrFwnNnGgSsImUuyYUuGgMfFPMmpMAGgdDawtTWmiYyeJjEHhnNCQqQQekfFKEIkxXEWyRrzVRrvhHLVvlUIgGiuBzDuuUFrRfJvAaTdDrlLYevDcCnwqnXlzZnNnuUcCNkdlLKkvrRDVvgIRrnNFlLVCcnxXEeNpyOqhyYrRDarcCuUoORNnsSfhHeEYJjHyYnkKeFNGgJHaAIiprRZjpPkArLlrjUGzZgEYlvVSsWOoZmVNhHkYyTtKqQEeueEUYtTMmXnEeNPpvwWdgSvVsGkKbqQqQBDFFWwtTipKWKCLlOTtTwSsWrKlzZrRPpbBPCYCcyZpPzchHEaAvSsyMmJUPAQzRUqsEDfgRroOHGhqQKCxXclLkHBbljJXjJFIwtnTtNpAazZPrxXpxXDdkNnsSQAaAPmxXfWxTtXlLwlfSsTtSUMgYvVTgGtWwhHgGqeEAGIOoiAKkxJLTyYiIZHtjKkJzqpPrRQPjtyGNcCnhHdDrRIpZzSNnxnrRlLoONXsTtsSQPWfFRuUNQZFjklLppGUjJlUujdjUiIyYsAZzaCcuUAahHEeAaQqAUhexXEFXXWwxnNnNOoruUcLbCoOlAajrRJDdYyLcBlvWCOoEeAgvVvTtxMgawWSsAuULACzZcnNEeUtCSgLlzsSZGsfWwRpeEgGPwWIieeEiIECcbEeJtTjpNnJZieQoyCcUuBbTtYlZzgGLcMzDdhkxXKHZGpPaADfFdaAsqQKuUZuUuCcqvgZhHaqQydDxIIiVvlQqPFfSJqQhfFSTUqQucjJCtBbUPpIJjeLMmIcCiiqQvZDGTtyJBvbjHhDrRWedstTdDGWwgnNeKDdlobfFBOhwWiGgIiIyGgYLzZVCupPBbNxSlLsEsjwnuUPmMyYVvdUfFCcjHuUiIrkXFYyfLyPpYlWVFokblLBBSsbKZEBPpakajJXqQGSzsSZiIsgCcOBbTCvVmOWwKkpPokPpQqdLvfFTKPpqksIXXlFfaAGgMmgwgGkKacuURrCypPDlvFghcdnNwFfzfPZqQzFughHGGVeVvyYvmAaunNUkvVtZzMfypVvZlLhuWwUGzmBiIbiYqQxXjFVuUbBEokKwdDyCxXkhhHPoYUuyYWmMAzZVWwkQqnICOowWuBfFbwWXxGgAKMGVUwsqQtTqoNLSTlLtRtTBUDeEOojJtEOoeTdrRCGgRrwnsZzSxbBJAKkNneEgWRrwRrolDPShHspfuUgGcLLDmOoHGiIFvKkedsxvVXvXvVKkRrxOoBbbMqIiBbbBGFMmVmMvnNfRrMchHMgGQpZzMyCcYnNGgvNpPpqZzqUuYWwlLPvVzlLZxFfXbeUBbaAuPpPnNLOolyYlLTyuUHhkTtUuxgcZzoOMmgHpPhLITKGgktUupvVvVPBXxTfTtRLlcCrjJKpwWmzZgwMmkKvVxXIvVDplROoeqlLdFfDQLaAwhHnZzOHhPpZLEeVtTvWxZzZQqcCnNAZzddDBXxmMigGVecJjVNUBXTxYQWGgwvVOoqysvVAYWwUujAaJlAEAataAVvTBQXxqRrbmxnYdUuFfjJTXxDOoBqQbzMsQgGbLyYVPbpPTgQTlLeUuEtRrQSoOVvNWUuPMXxJGqQgTTtLiIlJJpPCiAMPplDdbdxXeuUKeEkYyEYyjJZoOQiIHhYyWCcwGgNujJoOwWKkkyYfFSmMmMSsFuUNGgnIifYcXxfAaFiRABbjJXlObBeEozFfhuIisSoeEOUuMmiITtISBPpbEtTFMmfmdDXxinNIUuBbyWwjWwJKkGQyIiVvYKnbBvTYVvuLnNrIqwyYcCjxwhTuWwUuYBbywWUkeScuUqjlhxXgdDgfAaqRrQsovVrGgdvNgqQjUuJAaEOYypPoNnbtTtTHHROOoiIiVvUJaAxDdHQiVvGUEeuEeYyjJsSZzpuTtJldDLCVVvvLDWthRrksIfckKuoOnwAaWNnrRvItLlTtTAgzHhZbTZzrRZzgHhwyINHSfvyYtAaUHpPuatTAgQqOoPLKcCDSTeEFfiIsSFNPDdknjCRrdRriXgGwWxQeeErbKbBkBAacnKkNCOhhHHcCuJlYdzPEaAeuFsXVvxSRrfUDdwWeKkvVrRcOLFWPpEewCYtmMqnaAMmNhgGAwWaIiHxclacCUuvVAgGVXzPhUOoMwWmdoIjJuBDXxWdDqQePpEwFfeEZOnNkIXxcyFAafaaYlPyBbvXxAukKfmgIizZcZKkWwmPpaAcaSsALDTtfFXxYxFfNFfsbnNJjBqevTtLlDdLldDwWSkKYyqoIiSSsODUuIMqQwHkKajJFfjCcLlOdDGIiSsGggFvVfoGKnNKkyYJuRANHSsqDdMrRGgnNEeMibxKDXxVhHqxNAaaAnqQWwKOLlokNdDpcSYyvVedGkKIjJDrhHMaAFoOfFfwWCPpbPphHBPTtpcwWqHhKEeXxJjQqAzLmePUeEJIcCHhiDxXdgGIQqBFfsSidDcpBjgGpTMDVzZnNWRDddDVvsSeNAbSVVvLTenNEKkCcvJOoepPiIiIjJrRuSsBgGbjMhHmjJgmivOopIincCNdnNcLTtlCklCcxXovVOLRygGeSskKECQqcjJPEyYeaFfubBUMnyYrUuPpmMSsRNPpnqzZduUDOXxoeEKayYEtDWoOwdTeXxdDkZzLlrULZzIigPpVvGGgwWlNrRJhHjDZzWPiIUuUmyyYHhctfCVOovKVvfbuUjJBFjueEQEeqSdDjUmGbBgGTteLlEJjgUmMHTthEiqQnNTeVvoQqdiIDDdfBbrRnMmxLPplCbBcCZybYaBRukKXLRkFfKryQmiItDdZzsSsSiIFfRulaALTDPpRfTBOohHSXxgGfFZzBpfzZXxwPpdNwPnNpbBWvBbdXxfFDnSrRsRsSrZKkzXEexPpfFOaAQqFZWwLTtlWhGgAyCiIFDdZzbCcPcCpfKzZdcrRByYbxAaznNZpYyQdkvVTUDtdJbBDQqNnValLlLVvAtBbIgGoOiTvdjhHDbEeUuCcKznrHhQSJtTMYyNnmPTrRBbPpqQeWEKPpWNnQLOoPpzicAXxzlBywgDdOoQZKkYqDdQvVvVvVPRrpPZVPgmMfsSFGSjJcCiSEeCcdIpZGVNhqnNQuUHkKrmCcgAahMmHGZRrzmMMeENsSZzjfFRkKknAsiDSmTMTtmLnNfdDIicCwvVfAnaAfFNmpPHhnmFKWUYyuRroOFfwCcTtrBbRgPptTJQDlokbUearRJjjAkMmKlIiwiIWKkLaJgdDjJTLlXiIBdKrQsZzbmMzpPZBSUuYyCcpjOoTsQqSogGOgceeEnNwrvVRYyTtWJqhOojJIYyvvtJjdDUOgxXrREhRrMVvmHGsSEesgGSgQiIPJhHYwHbsSBHBhHuLlgGijLlEeJXTtcClLZzXbaAHrRhFEesTtpPzRUMmQZqQDQqgGYVvyCGgadDBbAXxNnhtrkSmMsIzPPpBbDdoNBbnBbNvMmVnfUHhuFOoOpQqRgNgnEGgeNKkjEkKlrKkqbBQcCRzZqoOQLeotohVTmMtEsuUHhomMTZzcBrCcRfRYeEyDBbdrQgGaIuUqQpPhHXxivVQhHeEJiHFavVMKVvFeEuUlASsYkiGzLlkEKkeOoAuoDdQyJbSuUscziIwfFJgGLWQdDNnVvqrRyYymKkZzWwMFHiInYyTvVXxtTtfkKFUukeEKyYIijiSbBlwWGgRTcCpIqmMQvViPOyhsSsSHqeEQYyYARrXxauUHhrRKkGmMgZwWBbZCcIYZIiLlHVmMvnFFDpPtMoODVvdMUVvuQqlmfhHFepPGvVNnRrEegFnNcChHnNfNnOhehHETtHoHUQebIixeEEvVLBYyTtefhmMFCcfrRlLuUTTtAzZvTtrxXdVCQqcHhvPpDeWwCcHhEgACGgjJFwWecCBbEfMYWwwJjLFflZbBjJwWWfFTtNhHnwtTwWfIoFVVWXJzZuGYlLZzLlyeEpPgQqUDdjfYCGgTtIZzKyYDNnvVkKfblaAhEFtiwVvWIUuZtEemMVvYytEeTTkpPlLRAarjszZYyzNgJjGpPgFVSDLloOIinNRrloOTtJjbnNkKBVdDXwWNSsphuDdUHkPpBbnTZFrVdDfCcFvCcbZreoTEemMwWJeEjEZVvsSAaSFNnfyYzLpPWzqHoOhuUQecgGfKkFLWaARrIOoxXyswWxXqQpNIisBswWAaRrchHCSbXErRwXxWeiIXrRQcxGAusSspyYhHMmPBbIkvVKGgZzlLvVuizkKvgQcJHhhHjRrymMYEdDeCOZQvVdKkDqkBbswmMWSNnZjJuUFlIuCcFWwvVfUpPiaPaOZBWwbGgzQiIqjmLlLIbBYVvyAauiIdDjpPJDdiSatTANrtkKvmEeuUiIQqVhZqQkgGjmMJwrAuUaFfZIizYytxrtTRrCXcCjJBbsrhKJjkHTuURrtjZzEPZhHzpalLcCTuUQVvVIpYWAawfFefiuUIFZPpzsSEFZgGwiIWzBAtWEewpFHhfPKDvGCcvVOXxoTJjezZPpEHVvfFPuUnZzgVvTtamqQiFYsUmHhsYRryJWwIjsSjJKXxOueEUokKENOQqoaAnZzIRsSlrRWpPAawqQPpLEWwNnbBcCwVOaAoOozZvVnqoOIitJudiIUALlSpaAaWYysSmNXyYxiIjJuZGgaAEaTVNnuUAaNnBsvVZGgyYqQwpPiwWAaIDBbCcdQqcCDxXdqQGkKsSmMkXOoWUumMxXeEJfIKTmMuUxfIiMVvMmyYCcoBVvPppPbOVAhEcCeLqGOceEOonCMpjJkKTbBtJDDLwJEewWiFlLDdXxzfCJjYlLXUlgGOoDdkgGKhAaZiIzOvUuRrQqrQGCTtcKIQqihtTiIgHhGBbHCcMKkGSeEFfjJsSsSsCyChWwHcUaNCISsiuDaWRTFbXhHIiwLlFYyDYHhydfLsqQrRFxUumKrRmzwDdbfJjUQquKkFXxdDLlRrWwNLbRYyXlLTMpPpPQqmpPCcrsWwrRSggGwskKmMbBgMmwWwWGHhSiIrRWwmZzMXxWGsFfptppNEZeuUEPpfFpqLlEEONUuFqLTtAalQfsHedlmMDRCcLmMIiXgGuXxUCoOWkKIiZNuZxXzDdSsYKfFMmQqkzZRZrRzryHBlSsRQhxXHGgKQqkMmSBHQqdDOasSMmAohVRrvtTTtIwWwWiwdDSsdEeHZAatFfWgGwTzElZJjVlbNnwdgmKkMydkKDYuUyYGvgGkKVEekKrnNRCjJcAamsSMDgKkhPRXxVjaKKoOPHhXxnsEeQqfTKkELlFgGdBLQSAaszpFdDVQxXqvVQMQqeEVUuOoQWfciICEeFfNnGbbBBduOofFFsSBbqQrRfNBbnUnCZzczjJjLplLdDquNnURrsSdAxuUXtTaDtrRTKntqQUuTNknHEkKFZzfSrXxMSrRsSdcPpbmMkKTtBbgGkHEehzZGscCBiIbjJwlLIiWPpSNnIwWieDipCOtjJJjVTtUuLWwlrRLBblWMsruHLlFfhniIkSsmMUPdDZzwBbNFfSWEefFtVvfFzZBbTdDpKBsSmMsqPpWTCctqKkQSBbBqNnfDdFmYymMcsTtyYbBskKuUQrNKknyqOfFouUBxBJcCkKSUYTtyTQHTHhtXxATtUTtFfoORXxuiIUaeMhHHbzZPqXfCcvVgGFrhjJOaVdkKXxrkdOoDpPLfBbnNFeQqoOxeTdbBDtjlEIWSswiZQZzqPKkXyYGiIgtTQLlqxIifWeEwTtiIsSoOFGDdSQqsVvuNTtFXjJxgGBNAaYeEExXlLPpYyHPphHpOoPSTKBbxXzZfHGEFfemFfBjSOaAQqajJsSjZqQBblLLlzdDhHIiMDiDAlEyYtsSRoIpfFrnNjJRPlEDYWgGwFTtpPgcKkFfCGjJnCPasSALtTVvfFnkTubcCBipgCfuUFcGSslLVvFAhHfFazZfFfFfAdNnvTtNoQqzZDdOjCcJAdBbqQnNdDDYyODNdoODndxzQqZBvPxXYyGgEepVbLXxDdZdGVCQwWtTqcoDYzukAEeaKATHhVsSoOydKLlkYyOoLGgSUuqkKQsJjWpgGXfFxJjlxYyRMjJqWwmMyshalGgLAarRAkKHfWwrAtGXxbaVvAMmaTtgdDGWhBbHwoOAFjPpJfEehHGgVAIGoVBevVZzENncCLlpUsSsSuiIPMmHhTtCuUnpPpzQqZipoOcczZCLlYbBypDyiIqQRLlrOocCBSqQqWwYmMEeyylLYjfpyYPztcCyOoYgGTyaAYbBIzjIXnNxRVvrRIiiiwWIPpgTHrRxUrRuHZzKkfcCFhHhpPyYNnnNjvvVSsVSsOoRSsrJHDdLrRlfFiINnUjcpPCHqQbBGAaGgMdDAFcCvVhHfGpPgaxXTtsACsSsScjJjJsSaXxPpqHXCcwkKsmMSsIiWnNwMmssJcCdDJIiAatTjGTtcRrtuUUiRgiIlLGWLlsSoOQqoOwrJJjdfHXIzZuGMPpmgkfTrRPIiSsiYyIUurRHhJvcCeEVseuiIvIMcCnNmgCxXcDdVvgXxGWDtcCTOodFfCMXpfiwqYjJOornNkthHhBbHmOoMKKBbnfLEeaAovFfGghHNnlLweEjvVmMHhwWgGcbBCMmwWMUpPuljmMJBbJjLLjvVhtTHMmJmGgXMpPmgZAFSsHhfoOdFfDnmkKjhHJZPpBwWyYEeOrAaRdXUudDqQIistiIYyTSRcCrsFIpPpPTTPBZzZzpEefKkxsSXFRrWwnpPEeTFftlqQOosdDSZzLImMiSsdokKOIOJluUWnGIxXjzWwcPpBbFfCOQPMmpiIHzZgABIioECwmMEeWjJoAJjaoxXmUUuqbTLWwKjJkltbuUGgBbBgVvhHWxLGCcOoggsSLlGeaKCQJjNqRRGgQqlqQiagGUBbFsiEeIuRQqgaTtAPpMEeVQPpfokKpXxfFcCbuMhLVzZvWwlVKbBkNnPHQqzseESiSCGgPsfFsWwSYyJhlIiLiIrRHjuwWUfsgGEUuvVAsPkKaGAaqQQqgAWwpiISTtLlkaAKTDdHhNnSoBbYlLGLlkKgQvVEpUEeyYUqQuoOrRsJjHhiISuUpPyEeYQFfquNVqQvvjwWJOqydDYpPDdYDdwLqurSkKEMyYQnpKfFHhzZkibxXBIyYJCcjJhEeGrMZizStGSsdDOOIQqqkvVsiKBpPbVakKgGIXxijJTtXFfUuPvVxhZnNHcbBsSChGbBlLNRrnDdjUuoOmMcpqhtDzwYsSfJjPOEeksOoofMmFOAKNnkjJaRegGEPocCOMtxXeEEeiJxXCXxcxhnNtissSdDsJmMBjfpPVvVvRTzHhZbBQqzZOoFfOAaRrBbeiIEfFBRrkJjKZgOosSGGShHsDdoRrOSsRrrfaARpxxXXJjPpPMBSqQNFfnFqsSyYNZGEkKLlDmMEeqQJjgGdDpPBhHbKksBbGQqvTtgMmGozZkKzZAPkKlLpRrFhhHHfLlIKSsoMgGgGtTnNmvkKLIpPBbinNmJXmXxOfFhfFCcfLtuUTrmMwWRlgrswWlLlLSYyKMmIiRrsSSskYgYJjyHhgGGeEprRPpErRePSsoOjJAaSeEHhsDdfAaFRWXEBbyDMmjQqJdLlYmMRhHxbBkcCZzkhHKLlcCBbestSsAKkgGMmDnNSsqQlLdaxPyYpFfXpWwBVvxypPYQyEeJjQqwWNnYEeJjAnAiKseErRdrWwvRrhHyGJNEeyYCZxXzHhpKkIiqQEerxXihHxiIXpuUYcCoOyaAWVPpxWwQjJHhqSsNYyDgGYysrRmwWwWvkDdFHdDhGgQqbBnnZWOQqowTLSVYGcLJOoLlbCXxyRyHrXxTNjCcHhJjtTgGhoOdKkrieEIDdRClLAGgTlLuUtaLOolrRJjoOyPpBuKtzZqQTUpPpPukUYSnYyraARIiKkNzZsgFfMfFmRrRfxyWwYAXxabUuPQqfFZdWlLFmwaAaApKkPWKZzURrkAaeiIETMmMuUTtmtxXHhAdaMmfOoFYseTXxtUubqQtTFWOowfgoOGUupPLliKkYDdysQqoNnOrRcCbpPXaAxVvBDHhoOZhHcCzSsqdDQvxsCQVvnRrNZcOBbqTONnXRrPpOoxiIaAJjUBbsSUuNLLllFfoXxOGcChHcMmLtTeRrLlGEeglZzpPNisSITNntvVtUuTvbuFfhdqQkYykKKXxDejJjjJoQqHXNUuGXtNnaJjeMSdDeEgquUEcgcCjhHQqKoOJmjJCcZysSYlOcCoHhLSeEaAOfxXFoxXWwzZPfMmwWQqfFaAIioOEeufFGgFfcXGgxCEZkKVLFfyYlUuvtTIiGgiOkKUrnkKNlLIuUYmMywTtHhKnULluNkdmfFdqIidYyDQwWeEoDMMOOaAWwsSoeMWwDddDDdxXIizZrRJjavVENnehHvHhbBKPIiUuTIiWCcwWHhuqQMmyYIzZysSYiRrmFcCfFfRrMcKhHkyziDdIyJjJFBXxblLBbDdFsvVimMgcCGCOWwBbRFfeVvEYymeEQqMQqiIUuHhkWcCTtuUsSrRmUuMVvxVvfFXTgPpxXvVsUuSRrRShHHPmyYMpEeLlrlLiTteEeXxwMtXxsEexXqDdUuUuMmGgZzQhhHNkUpPcXNnxdDCsSwoOWjIiShHsgKjoOwWmMUXGgxuZzJjvVzkKnISUuMxAaXmsiliPwGtTgWmMwWJKkkpPxmMXqQEKXxXxfenNEFkMmelLvIiwgGyYJjWHhwyhTtHoOUTDsxXmFfaFfCcPpsBbSFaSVvsAPpKkxXyYtTiPOopJQqoCqQcSsVJjWwjJYyWQqwPppGgPNfFZznPjJpywDdcCTtOokKLlJwmMbBcrRCzRtTpPAarZSyYYyeTMmqbBZzhHQqHhdKkDychIiHLyYJnGdNQqnccCCDgJiIfiUXTttWwKkgGtTStTsXrRxmlLMyLPhHplJrBbtTZzRGjJlIFfioOcqQCLlSsLaNnAcCmxXMJjCHZzNncwVYyoOGPbBnNBhCcHtTzWwYyZzZHTthlLqQCXyYylLbxXBgGzZclCxXohHOnNbGhoOwYsSCBbYyXCBLlwWpdDPFfbcCAhHaFcpyYPiHhICFeEEzZcCdqQPmWwBblLMAaeEgGtlazZeEwWrrRcjJCnMmMmQqAaTUuEesSteEiuUsSxXPpIOhDdHoLHKYyWaDFfdAcCNnnNQgtuUTyHhYkZBNrRxXAaRrjJBbtTCcOokKnUuQqZzINyYuzZhkKHNnWwuUrcCRUxXGLlEeoOGFPpfwWQrlLRnRrNlNnxXsSLcqMNnmQnZxrRQqIHhiIiTtXPZzWqQwKfFLTdziLlDdLUulIWXxwweEbBWMmZDdmMDFnfFKhkKHWwIigMjJqhHPnJjxkKXdMmyYmWfFCWwceECcqTtRUuRrmMPjsSJXximdDsYwWyglZkKLUulzKkFkbBLYyxdvVuUKkDIidDSliILsnWcCwNuUXohHjNnJqQNlaANVvnDEnNvVJjQqPpmVoOvyaAAlYyLacCNnnPXFCcTbBIitfrcCexXElLvVweEZkuyTtjHMmkmMrRMmcnXtxXTBbsSxwWZzdIiEiIAaHaAhHJlLUujWvVbBhaOvVLlBbIiSspPopTtPcCcCBbVmMJjvEHyuUxXIiJzzZkKAauUtTZnBEedDbMWQqwmsQlLqTtgPpdDKkGTIiccamVvMNjAtToONxXBbCcnaAtTHlsSLmMCcjuUJHhpPRsSrTtBbAcxXQqdDCEepPayngGNYeEskbBRrRBbILlNsPpSXJjvVxCuhDdzZuUwfrRBUuYybAIAaivVcCGgaGTtgxTtXfvnNVpSsGPpHhgPfFmMFkKmtxXkKfxXMgkKHjJhGzZaAmGtNOVvCcrkQTRrtqKdDLltTeETIDAOoadDnnNNPpdiUWqayTtYAkKTtmMkKfFUJyYwAaJPBFXlLGTnNlLuUtYypELleewWaAjJYzZysVkpcCPlLqaAsoOkBbrJjRKMscCjJSiGgImSoOuVvmMCcjYqgjimyYMILlJMmEebRrXVvxiPpuUIJjYyPYypIiYnNPIipdQqDyoOVKJjsSkvGgOobWwBVEeFfmMIBbXFfDrRKvDdkyYKZzdDSiIOoWEBbewQgoOBKkaAoskKSFfEaBbAoOluUtTTkKthrgGRwzZWAbBalyYVMZJjztdDXXxxTmfFSsSsaaAoOrRtTVvHHhgGRriIhAKFfXxqQkdDOolLEeTtWRfKkFrwvuUvzocCODcCceECdXxsSYbBZzXxmMGgkKTqdDQlgAOoJjaKuhSsEeDdHKkFnCcQqhNnsSoqJovVNnVvOzZdDjJMKkqQkKIizZXpCqIiQyYtTjKkJjJqjJIIimaAMSsqCcQEeRmMWwmMSjoOCsScsFfSBbAaoIiOIljJLiJGgAadcCAaPoOoytXyYjJxUUugGuUNnnDdNIRJNdDyYnrLJjlfCcFLlAaMmRHhBbYxXyYdkwWWwCuUcLlJjEegGrjgGRrCBbJCRrMDWwyVfAaFRrvLXJjxmMkgoVxVMmEnDTterHhVvpyYBxXtdDagGJFfjAHhTtwWUwdDWnNyOovHhVTmMbzjJZBnjJiIPRrCctTaAUuICcipDdjWwgGjZzrTOotIiOZzoWwEeXnNxMmBQgGjJOxXWwRodDYyOrCKkuUgAamqBbewwSsTtGiuWwUvEgGFAapPQqiIfMjgAaGbBWwsSFfQZXxsSOoZzWDdMYKkNnpPXdDlLUVvuhBbRruUDDLlzZddsSxXwWjAaJEeBgGbfFGgzZHMmYykKZlLGgXxsevVaAvVwWUuWwaAPhHWwjJhHJxXiiIIjpxupPUPAapRrZhHSsGgvVzaAXItThAaKktTxXjjXxJUFvVuUEewWiIuUGakKjJdDXShHCcjfGgIYSsTtyiQqFJGNngsGeEMdvVDmgoIYyJjUuiPrRpCchgTtqQGHUusacjdDJCcsSuUpPyYjJVvMcKklLQqQaAnNsJjSoZzOLlzZxXqQqvVRYtbAaBbBTyuUmMgGKGglLciznNZICdDuUkKNngGKjJdDHhkBUuiQwWfFmMcIbBXxiOcCgxXsSqQrzZLfFlPpPpmMAEeubBzZGfnNaMmAZSsYEdBbDSIiBnUumMNMmbsyVVvpTtPwWvYzqQnAuRryYHhUzZOojWdDNtTnPpuUwAaIiZOoZzLlQqbbBrRNntaAqQTvbBqbBKkQGgOoVqgpkhHKbgcCGdDZvVWwWwsKkdzZMxXUuzZvqmMQVUumDdJjOqQiIoQEelLhfFHeErRCPpcqaAaAfUuUuFTVdDHqQhAauUvKkpIiPcjJCLlJcCJjwyYGgrRRbmxGgvVXcCoOyYxXGQFfDOZzRrlKrRkFfEnNeNIirGgRnxGgqQvQqVkKQmxvvVcEemMCAauUxXSNnnNLzZlfFgHPphrRPpGgvQqVGMmjJXvVxeEaqQAsrRTODdoIieQqbBSsEoOtsTtSIeQqHqLkVvKcCnTtCcfOoFNzZSkKpPgGdVvTVvDUcCudrRtbBGxXgpPDnNdTtrEeNCcoOlEeeELUGgWwnNiUuIzlyYLLlYyCBblLNqQnOcWHhwaACrRoOopPVvdnNDbNnBzEeqQCuUDdeEVvcZNncTttzZTMDdmiIQXMUumxzZtTgGVXxDdvVeEWwfMUucCbBnUOgGoiIuwWUAGRtBbTSsKZzQqCcWwKkkGZzgteElrRiAaIZzRMmrQqMJjJjumMUmHhjJwWmMSjdDpYypPfFyYzZkMKkKMmkmkKXCcRrxLuHhvVUPpPpAafYHlLhpPdAaDPoOlGgLlLgCpJjPcrRGOopRQqeEmMjJEKXxkebBDDfFyYdZjJJIijdDzGgMmKkKkrRvICcIiiVGgwZDdztxXxXNnBOoSZzmMpyYPbBSDnEeyKkOUXxtRruUTzZupPoYycCQqHhHgGnNMmLlNnMyYAaGgnNmAQqWwjJaJkKikKIcSEeoVvOLlsLlQPpqfFuUYyxyYiJjIqQXCjyYHoOvVvVkKhUuyPpeEIiRrUtTOovVuMQQqqQqmWwcClSuUwbBRCLleoOEcfYnNyqQBBbCcbfFaAyqdiItTDQYDdnXxNiLlOoIIiJuUuRroxXEeOrRowWVvOqQTeEtpgGoZQSsqXxzeEaAKLYylqQVxXvhsSsSpWFfwiUuIbyYBPdDSsTtnNGgHkKkKWwiIkFfgGPUupvqQsSAjJaYyVrsSDdRwixXIkwWOMmRrsSSsWwuUwGkKgCcWGgZQtjUuJTqFTtlyYLcgGCPUFfupGZHjSOoLlrRhHsjgGwWWwtTrRjKzZkJEehSiIIiSxXsJjZzkKEelYyLVvNLlhauUAHeEiInsHkKHNWDdwnhfFPDdIiDdpQNkKnbbBBqPoOKiiGqQCcLlgzZDdrRGCcgtWwqRrQjJLwMtwWJjcpPCcCTgGhCcJjHniIlLNJZzjmWDSsqQNndqQMmmMqNlLnEeNnTyYuUbeEBMWwmdeEDNnYFfRrRryHhzZPpvVGgGDEYSsyedsShHSsVWwAaJjmeEMiFftTyZzjCJwWdjKkJDKvtsSTVhDdKxFEefXkqQHpFfRrMfFlLmOnNoPJtTjNvVnaYcCrRNnLlFmeEMfTlLIvByLlYuUgGGJxdDXjbLlBwWgbzCJjcZVrRXxOoeEBiIbcBbCDrRaIYgiffNaAnGZzeMmEJaqUuQBxXUGwWwwWqQWyYJeEjqjmPUmMsSSsUEeiviIjJVBbDFfdrzoOwqQpLlPIDdiWwKkWWGgwxXXuUxqQnCctThIHhiZzNjJeyYEJjBbBUUOoqQsoOSuUuvwWYyOocCpPVjJLlcxXCEehHJKKkuULlhHBOobkQqRhHDdGyYwWGguUgxXbZzBPCckKFMmftTgGWLmRrmMQqBbLpPCcOouzZUzZlMNYAamMyJjKgZzYyYyHhvVdALllLaDtnUurKkRdDNqQkKvVnDdtXxTBfaAzUuZzZKkFwWWVPENnqQqwWneEQWwMbBfFvVEywWoOYvViIeRrlLVvFfRwlLWXiUuHeEhlLEerxDVuUvdXlhHtTRrLRIbBqQisdrhHRKkNngXrRsbBSRrmMkKbBWwnaAhHDtTXxezRrlBMmAazUrRurRhjJHZdDbUarEPpebBBdDbcEeFfnNhtTexXEXxSsXxaAqDdQstUuTPpSfFqQjMmhHjJGgWwYyYyJvSsOAaorRGiEeeDlLKsSJjMmkyYdPpxXEUmMGgpKkZzgkKgWwGNdrRDLlJjnqQGOtTopPyaAqQgGaAYAYGgyYyZJjdDpPzUXxzVvlLZAbBajTtJmMEeuLaAJjLIuUillTBbtTaAtSsjfFJHFfPpEaAeAlLOOzZLlhHooOotapPKjJkUwWuMmtTCVvIisSQqSaAsNzXvOomMxXxGgalLAlLbKkBXDyYLqMmQHDSsdSsvyYVOJjohoZqQIitxXaAxXEcCuRrUcCbBeDdLlBSsbPpBbKkYNYeqQEqQynJjyhxXHHYytTWiIwYyWwZiIrRSszKFfZaAAcCapKkPlSFfXxOlLuUsHhiHhkKvVCcVCaDdzZhHrRkKfFINxXnWwiIXxivVvVAdDceEvIxEeSsFOofXxfNnFqQkKDKMKkmgGkdRSUuPpiAGBbgwgGDdSstTKhHsSknoOeENtnNTKkDsnNSdWmpPMBUqQLbKkBNnOotTtrRMmLllLTHhUHfFhbBIiEeCcOTLZRpPIJaaAjJeEAjuIWwiICAaciUCBLQJjKKkQqkhHqpPlbYWwyWKkyYEewMABbVvaEemMbBGbBJxXjgRrAQMXxmpPQqDVvEeHhvVdqyYFYyfaGgJQqjvJjVVvgBuUKkbfFPpdDhHmMGDAYyAaaXxxETyYtexXxoOxXWwRrHhTngGNLlYylLuUtnNRrNnXolLieoUuOLlzZEAamMmBbeENbByYnFfYyYXxyMfFxXIcCLfFpPJveEMsSYZzyRrGgIiTWwGOoMmgOocCNoRrOHhnCccgNKkcRrJjEeCnGNMmqQsSNnnJjwpYyPNnndDdAaDPCLgGlqQWhHwtTqxWDdhHwXjjJRrJFfyYUuNnqQCFfnNcQqQVvqOoqCcYyQCeyYAaQaAqEedUdsSDaAfFupPrRqQHhDEHhvaAajsSJAKkVJjxXGgcVvkKVVUuPpGPpxhRrHkKvVKMmMmLlfFkqTpcAaAaCHhPcCGglLVvtvrRVvHhrRVLlcgGXZTtzxyYIiCFfARriIaZzTtHhuUZuUuuUUTYytjQYyqJJAjCclLZzZzxXLlvwWhhHMmHNnpfFDdPVJjHhtTIaxXSsAOoiPpsSwyYxkKXvVWrSEesRkKOwKCjJBbzZIhHTbByLlYsSjTtTtfKkFwWuYyPpwWmMeEXxeEvVTtDdKkygNnGvVvVsSaZBbzAiIHhQCcqEhIJjilLlkEeWJjwXxoOOobBvVvVJjKVKkYyVvwqwWQgGdDvNnVHiIhPpgWLlGgTJjtwpgGPFQqfUSuWwuOotTpPhHUukwWAaMSsxXcCyYmQCcNnqOpPowWsRrSvVFIifaAbBrncCVvSsNgGfOoFnNRiIKKfFkJjsSHhCcHhOopPcEeuUCYFfYyNnPpdDyvVjPqQpxrRXhFfHhXxIiHQqhHPmNnaAzvVdDZMoOnNpomMZzTUutuDrRdIHhiZzUTfFPprRtpPdDZkKmMzNnaLlsSWwAuYyVvrRNnUVUuviIsrRzXxEeZqgGOjJCcoLlNneEpPCcpPRrWwpPqqQXxIiQLlelsSeELwWXxlbdDOyKkYmMsMmiISoBLfpYlLyVvPFoOjiIJQagGARmWwiTtqOoQIvSsjJcMmCFAawBbWnNiIKkOvVPklLKbKkBpoZxdDXqQlLzVsSvBZzBbtTUuYmMydWwXxDnYpPyxXNTPDdpzZzZiIbBVvIiAatqQOoVveErbCVvFfcBRbRZzOoreEiFfaNnTtAUuhmFfMFfNnrRZzYyHIJJjjpneENxXjlLwWJeEWHhKkwbhjJbBoCcZwWzZzOlLyYHmMBVJjkIiKbBveSseAWwaiIQIiqGgJjWwSskzZolLHhOaAkKEeoOhvVxXHVgGvOVvovDwfWKkwFuUkKkkKjJtTQqwVMmUulLvPpvnRrNTtNnIGtTgesSEGgCgGDdrRhWwHciIibByYaAQqHSshDdJCcjVOoWCaAIbBircCRnCXxxXcNcjYyfFUuDlLXxdwWJqjMmJYStTsCcTtDEedbBIiAapPEekKQqNnxjJXJjrRyhrRHTbBmMpRPCcZzpeEfFrTTNnttfFPfFEefFxXNAaTtdnNDaAnCcjJKkPgGpWwdjJDDLldtTGgJjrRGgGgFfWKkkKwZzgSRrgGcCsldmMDLxXmMqQmMeETWwUzZeEuBbGvVbBuUgQqOxxXXdDPXxFfmdDMpWCcwGgCcoKwWLldCcDnNkKxXkUutpPnNeEpoOJjPLlcCQWwBbkpQqmTtMPEeMmzZveEVFfMmXmMxqQeEArRQqaqSvVszSYyyYsEeErRVxoOXvMbzZBecCEYyGgDdvVmuxXUPxXYypeZzFDaGgIiAmBbMcCdFfXxPpdJjDfoOrRKnNkchHFLlfCSIiDdPpAaHxXZUuMmBbffEekDdKPpFIiKkYyHelLEhqrRQxmMjCczfFZXxqJjTCctQnNQIilLqmTuUtfQiIqgGFMHMFWwfWwBbkKmXKmMkNnxXxhmdDdDPpMJjEfFTtedDQqheEjJvtjJBbTVPcCphHmlxXLNDvVdttTTnMNnqQHtTtTXDdxiFfXxIEeQqclYyLvVPCcpChHobBOxBIibXdDyDdjDdJveEVKYyCylLYKkUuCPbBpoOcJmMjYybLPQaAqplBTtYyUuoOBEeIiUBbsSZzNnEerRxOIioXXxKdDRrxXkrRKkHbQqBhkGuUgjJNUunKPcCyoOYXqWNnwQxVvZzxMmYyGjJglwWSHhtTsLJjvVTeEbjJfFbBBuPpUGgmMJjtggGmAZzaMClLcqQwCcWuULlBbTGxXOoglLpPtzoOzZZGQqaxXAQqmyYMkKTqXxkKQyBbYQqsSJbQqBqQUIiuuUXMbBwWjJmvVRRrgQOoYyyYqUDZZzlLzvbBaAWwVTtsSNnXBGgmCchzZHBbMbWwBbwEeLlQyPpEeYqfFOoHhocCpPdDzOoIkHhMmKxXYyiZODdvVkKojJOjCcGgJLlULNnxXOHhomqkKQzzZZlFfLQWwqWwqQCNnBblLbBaRrAcOcCyYoDZzPpeElLdZzjJQHhqhHwWeFfUedDEjcCJzZujPpvrRVdcCDryYRZzlLoOJKfFYyHhvVeujJGgUHhnrGwbNnBWgxXRIhHVsSFtffFAaNnGRrnNRLsjJSlCcrRrgbBtTFgGhHTlmMSsLrRsHhAaSaAflOowgFqQfCchzZlqQLvVApPgGXxgUJjuGgGDdaibBiIlLvTmMmpPMzZoDdOmMtrRsoOSpRZzvVryYPdDSfFsDdpPqdOoDwWQikKIvKTtuUkVhkeoOEKdDHPpVvSwWszZYECcTtgGyYeyYytQqTUurTiIPkKeEhmMHpdDtRJFfBEebiIjlJjZzdAaDMmcChRWSswrHLIiJAajAaSNcDNndCnsIBbiKkmMrLlRrRDdVqQRrcCMmoOlLfSWwsHqQSsbBAaZzbBPpGgIiRreuUqXxQNnXxEhBMSsmaOoxXiIWwYybBvVARrVZzvHYyXxhTtqXxgGQRrkfFJjaAJjKuURgGMmrKktTmMcCFfsCcSMmLhCcqQHXxlbRrTtNnYuUjJTtCcyUQqQqCiIcuCiIsSEbBwWeuUtHhTLZcVvCHZzVvrRVJjvhadDNnbPBxXbHhRrYyVvpwWazZAbBHhhHskaAKSDtTdBXxAQkKcCqbBxXxbBkKXrRdDSiYyIDdswWbbBxrRXiItIijVvUupPcCeEmMhHJkKAauUDkKoOdghgGHyoOoOYsSHOohmMRrbBHLeElbTtIiBhvUuVGFftTgSQqWwQtTZzqKBbLlkMjJfrRFmkAaTtKzZpQGoOOogqdDPjJpPfsSZzFHhrRPpPpyYsSh diff --git a/AdventOfCode2018/5thDay/challenge1/istolethisfromsomeone.js b/AdventOfCode2018/5thDay/challenge1/istolethisfromsomeone.js new file mode 100644 index 0000000..c357776 --- /dev/null +++ b/AdventOfCode2018/5thDay/challenge1/istolethisfromsomeone.js @@ -0,0 +1,44 @@ +function part1(data) { + const polymer = data.split(""); + const removeChar = ""; // No removal + const stack = collapsePloymer(polymer, removeChar); + return stack.length; +} + +function collapsePloymer(ploymerChars, removeChar) { + const stack = []; + for (let i = 0; i < ploymerChars.length; i++) { + const char = ploymerChars[i]; + if (char.toLowerCase() === removeChar.toLowerCase()) { + continue; + } + const last = stack.pop(); + if (!last) { + stack.push(char); + continue; + } + if (last.toLowerCase() === char.toLowerCase() && last !== char) { + continue; + } + stack.push(last); + stack.push(char); + } + return stack; +} + +function part2(data) { + const polymer = data.split(""); + const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""); + const collapsedPolymers = alphabet.map(letter => + collapsePloymer(polymer, letter) + ); + const shortestCollapse = collapsedPolymers.reduce((longest, curr) => + longest.length < curr.length ? longest : curr + ); + return shortestCollapse.length; +} + +module.exports = { + part1: part1, + part2: part2 +}; \ No newline at end of file diff --git a/AdventOfCode2018/5thDay/challenge2/challenge.txt b/AdventOfCode2018/5thDay/challenge2/challenge.txt new file mode 100644 index 0000000..d2025e4 --- /dev/null +++ b/AdventOfCode2018/5thDay/challenge2/challenge.txt @@ -0,0 +1,14 @@ +--- Part Two --- +Time to improve the polymer. + +One of the unit types is causing problems; it's preventing the polymer from collapsing as much as it should. Your goal is to figure out which unit type is causing the most problems, remove all instances of it (regardless of polarity), fully react the remaining polymer, and measure its length. + +For example, again using the polymer dabAcCaCBAcCcaDA from above: + +Removing all A/a units produces dbcCCBcCcD. Fully reacting this polymer produces dbCBcD, which has length 6. +Removing all B/b units produces daAcCaCAcCcaDA. Fully reacting this polymer produces daCAcaDA, which has length 8. +Removing all C/c units produces dabAaBAaDA. Fully reacting this polymer produces daDA, which has length 4. +Removing all D/d units produces abAcCaCBAcCcaA. Fully reacting this polymer produces abCBAc, which has length 6. +In this example, removing all C/c units was best, producing the answer 4. + +What is the length of the shortest polymer you can produce by removing all units of exactly one type and fully reacting the result? diff --git a/AdventOfCode2018/5thDay/challenge2/input.txt b/AdventOfCode2018/5thDay/challenge2/input.txt new file mode 100644 index 0000000..ab145ca --- /dev/null +++ b/AdventOfCode2018/5thDay/challenge2/input.txt @@ -0,0 +1 @@ +kLltgGTKFjdDpPkKcCJjJhHfmMAjJasSFfHEesYMmTtrRBjJmcCMbDdmMyOoUuGLrRlJeEMmxtTXjKzRroOmpjJqVvQPMZAXoOxeEZtTzLYyqQnNlMmafFLlRrkEeNkKtTngGlOoLXxtTLDdBblRCcqQrFfLQAaqeEZMgGbBOoFfyTtIizZuUsSYmbzTiItQqOouUGgZBCcsSHhxXIrOoRizlUuZjJefFCcEgGMmMmRrXlLyYcCxvVCcyYcCZhHzyYWwcXxlLCeECcOCcozHnYyNftTJjFSsrRTtqQSFfFfYxXysSsrMKkmeeEEdDRHhNCcgGnQqiIqQLlkKbPpBQOlDdLoqhjJtzZfFiIVvTMJjSgGsmyGPpgUhHuoIzZiOYkKPpUuqBbQcHhCTiZrRLJEkKuUejlTNiInNntdDxXzAauUOLkKloIdDzuUjJvpPViIbBiOGgoIJnNFfYyjbBZWwSsdDsSUuBUCnXxNgGcKJjkCcuUWwiIcCCcDdsSDUumMdSSuUPpyaUuqmMQAYkFfnNKMmsCgGVvyYJjcnNlLVeEvEesQqvVEMmeWMmwBbyvVYUuavJjVTtAJCczcCZgGcYyCjJEejuupPUStTsPphHgGafFAvVGgzWwAafiIygGUupsSPYfFFLlzrRZFaeEAWjJTXWwxFftcCjJfFkYyKwuUJKkfFBbMnNmIPlLZyYzzZpijnlLwWNLlfGUuTtglHFvVfHhhYywbBvVVLlsSvKeEoOkZzYyZzWGxXgzZBUgGaAvVuCwWNncjJbDdQqGgAatTFAaftLsLNnuJjUlfFSPpmMfFFflmlLMThFfXxHUuEcCrRXxezZrnNRsSWwWwZUuzFfTtiIaAvaOoAVGPpRdDrgWdDtSsGgaAfFopPhHVvOksBbSKOntTLlNjJKkhHGEeGgjtTaMyYmPpAJuUHhZGgzvVDdmMNnFCcfgzZgxXRHhrGzZOovVcLlCUuoCDdchHOuUsSvVNAanoTcCwUuchVIivHFcCuUHzZFfCcTCcthykKYXxUuzZOHhoIsSiVvDFXxIMmifmdDMdIbBNReEgGrrFRrcCfkKRnNnNgGnoOxyYRrXAjSsJoOgSsGgGAawWazyvrRtTVYvVLfFtEeSsiIHhiIqQTlzCcdDhHuUuUuUZRrZVDdWwQJAajqvHGoONnQqWyYLeENWcCwpPybByvxXVnNgGYYOoQBbqifFiIlLgGImsSIiMGgnjJVvGNEenIigeEnNvGgXgGhHKkXIiEhHvVeFfDdxxxXzGgZpCPpcXxCcGgRrliILZzBbCqQGgbBZOoYyiIhHUYyuLuUlGZzgzcPpPeRrEOoRryYbwWBYyrRlLbioOIeEBiZzaAaANsCcjJVvSEkAaEMaAAalCDdcuNnnpPWwNkaADdKCfJjFcpjJIiPWAGgawWAaVZzzlLXxZHhvxRrdcCRrYsSyjJmBbMufFdDWwLfFYyvVlInNpQgGZzqPyYifGggGFSvVTorROtEeDdajJJjNnAjBbiINncCuhHUxXJsHZzrROodCcDnNgQqGtBbThRhHrGBMmbrxKtTkswWSJntTNgGOHhouwWUzZjzugGdDzKkrKkRZtTgGhHUeEZerRmMFfZvVvVzJjdDWwjoOvVJEhHQqLljnNtXyYLlENnbBeyYTQqtmIiHKkhMMmpuQKaAkqbyYckMsSmuUMmxpPXOkKwWoQqYdrRvVDgGNnJOoVvkCcWwKXSuUdDsgGnNzZwWoOPpFzhEetFfvsSVdDMdBbtTDJjmiICTtcTITtpPVvcCiZwWFfnNlPpLFfCulLUcfFQwWwDdXxWKqlLaCcZMmzGgAUukzZRGgzZcCJjsSyWIioOwYCmMcrjFRrSsdDjPzZpJpPfJqQZzKRUZziIurcCsSaAeTttrRTEjJlOoLYmMuUPpZzyzWwZGGsSgvVxUuTyDdYtpPoOXeEMOomSsZLKsSklnNbAlLCcJiIjaBmMoOOodDHbRrocCOoOaiIABhLoBbOXxVvlgbLlBGtNnTExXWfFnNwbBecCELlhHkqjJVvqQQKezZxXzZUuaAzHhcCWwtvVhkKHQoOaAYbByXxMmdQqDdbBJjDXxjwWJlLxXhHiIALAKOokJjoOalZzcCvVIiawWKcCgGWUYHhyvVaNbIiBnAoOrRuVsSvbBJjdfFuYyFfUoOzWwjaAlLYyhHJZqQJoOjnNkKeRFfriTtIHhEVtTKZzhHEenNrRRrczZbBiIIieyYEecCEGgjJJjQSSssqCbBnNTtqQEEFFffkKPOHNnhDdofpPrRNnFfbBYgGxXytKaAkTVjPpqsShNnrRiIHJjQJMeQsSqEGqQwWgSsdDLlWwaAnNTtbzZBOoruVvRCcqQOGgoMyYmrjDdvVfvVFJoKkOwWeEFfeEzZCgGcuUtIiIiFfsSgGyYTDjgGzZPHhnNLlGgePpVvEHhpJdhUuBbJjHqQUqVpPvETsStSsZSszQSMmWwOmMnNhaAHDWwNneESsiYyIToOtddbieFfEIAJjhHcQvVqCjJRraBDLlIiJieEIjUuaiIAIiuUQqDdTtWwuUeTKktDddDKktTjJdDELXxlckKCBbwbaRrABSsWJthxXHTsSGgSXxsUzZBDaApPdbaAyYUsVvbdDBzZTtTtjyYJsSNmMVvTtnmMQSFfsqRrOouvILlitTaAKKkkYyeENnxwWXVJjoOuUEemMgGSTtsnNzPpNYynbBZGaZpPRrgGzZTtTtKkzqUuPpyYQbBTtZsSzGgAftTpPxwWAaXaFfAPptTqQjRrJCcFEekKyYDLldkzZKfFNjOoJpPEeFfpPnqQWpPMmUUnNuufCXxcZzjibBgGIJdDFvLmMAXxeEaFfmMHXXxxepPRrwsSWTtAaRTtrVvtSsQqTPoOIihPpHKkpYQVvqYsSVvQJjqFfqwWQyGgfFUzpPZyNndDwWtTiIDdYOoyYzZJtRryYxrRmMHhXlDdyYzSsZxgGXLiQqbuUBwWCccrRzZkwWfFWBDdboljJcChHVvLGgMmaAcCwWJMmaMMmmjzkKcYyJmMjWwmMbgGgGOxQqXnNMmoHhBXHhxCVvCmMNIiRidDIrXVvxeEtTtTyYnEeKkuUmJjmMOoGgiIMlgLlQqEMmexXGLclLyYfFQEeHhXgvlFfLdDwWnNMmvzZWCcgGwMmWODYydiIowvVbPpBEeIAFfnNMVvmadBbDiLlCyYaqvVQIiyYAqQtTiIcaAlLQRuUrhHYVvTUucCtyPpbBcmCcFfZzMpNFzCcUuaARrUqvVQuSsZwWcCsScrRCfrRVGgveYyESXxsMmWWwWlLIiwCtNnSsBbjJXxSsDSslLdmVxsSchHCXjlwWOQuUqXhHSssVAgGalLvSMAPpKkCcLlRramdnQqNCiIVvcgzZNnFDdkKMmzZfBbBbGuUmXukKUxIiaAGgAaWwcivrRVjJrjJQCCcLlEAWwaecaFfAtTWwqjNnLlJzZMsSmzltIiALlhHUuoGgOaZziJKkYyqQjfFgGCcIoIidDTtuhHiIZzlYyuMLlmUSsuvVbaIsrKmWwMkXCcOoxoOXCcoONngGVvTtSWRrkKmclLCNnxjJXMHiIfFkhHKerRMOomYTtyEhIiwosLgGEdDZzEeqQTtAaUUuurRcCMVvmepPzjtTvVJiIBjJyYbgdDSsGrRpPtgMmGTkJjhtTraARBbHhTzYyOlxOgGoXfFxXMmfFdVuUiIxPpKjJkKkWQqwtTkKZZznchHMqQmzZAFeEGgagGAfdDTbaDdGbBgJjcCHhABxXULegZzGEliILKkZzmMbBlOoJjIiubBamNnMWwVvxXhZpPuJjUCcPpzaPWwuAaUxXucjJCIgbrRBvVGgVnaASXxsNAaHhNnIiiIHBblLCtTuURKkCcGgAsSIxXVvimMueEbQqNvVnBifFILRjJUukKrZlLzfhHFWwVrRlLvxXuUMUuuUKiIkmZmEeMaAcClLETtdSlLxAaXsNxGzZDSIvRrVpPYyxrFfPpGXiItTzZxgKkKkoOJjmaAqBbNKJjkZnNoOjJnNzdDJjKHuUTVvLlthkMmMlrRLmmMQepYyIiZzvPpwAadDZzQqwWGwWgFjJfvVbpgaAGNVvndmMerQqIiREDzZFXxfOfFoJxXLljeESUuswWUuPNsSHhGgsSfeEFTiIKkOoRkKrGkpPnlwknNKxXkKAajEeJpeEESserDdEehHAPcCprmQquqQUMvVIxXiHhRXxEeaAajusSXxzZXxbRrnPpHCcNZUmMXxJjLlpPVoOLlhHbBIiGgvuGgcCcCRRrsBbLlMmWwWwvkHhKVSIhHuuICcpPiEeYjJcCZzDFfdynVvcCNLlEesSntTNHhpMxXiIwTtARraeEWLLllJWwhHQEgtTGebBPdWkHhKnNyYuUwDpsSnNwWHhmAaMHYGgVvSsyJjoOhgvVubAjgFTtFINVvAMmatTGgSsnwWpPGyiAZzeEditLlWwyfsSFSIisvVgGAyoOYyYkXxjciLldDIbBSsfFgGumMUxXZHhEetcCcCTzJiIYaveEtTVAIvqQfqbBFffFeEQEeFgtQKkhHfFAalFyYroOoORuUfAaXzZGgxfFlTtfFLuUurRUeExXaATxXzZIIVvYyCckpQqRrFfFfJKkINnIiWwijRrJJxjJWwXCGguAajJUlLcLlkKhzgGXxlRrxXXCcYAaqQtTyxZzLRrhDdHXxJjiHhINnaAgIioOypPYnNuULlkxXkKrUuhHRIiBbxLjJlLlXKvVLlSsFfsSpPCcfBbnzZSsAaUjJJjYyuNnNBcCbaArwWRLlUuzYyoTtEeoDdOoOKWulMmLUkKIiOPQqxXUjvKkVkrcCRKFlLruzZDdUPOopxgGWwvXxVvqQxXxpPXVsBbSXWxyYXJbmPpMBjsAaLYaQqtacCATAhYNnNMmdsSwWsWwseDdEIiJsSfFRrjzZdDKkbEedDJjcCSsGxewWEXqTpPtQIifFTeEtzZgAuKkUaSDWwdsYYyjhHzZJdDyTxXNtTeEIilLklLdDKnYyWaAdYhHaApyYPiIyrytTcCYQqpPPXxMmllLLpBbpPCKkcyHhFDdlLHhnbxXxXBNlKWwkKPKkzEexTtXZJsGgLOoJjyYIiTQqqQOotveExhHXPpGgVTzZrbBsSgauNnjdDIYyPpuUiLtAaCcTWwnNlrRwMmWZzYPpyJrRTtZzqIiQNOoDdmFUsqpMmPHhQSuSsvqZjaaAAeEJdDuUunRDdDHhseEdDMUrRuiImlfeEFSCcsWwYCPpcNnyQMmOoEehEiVpPnNlhHWwLRrwoOWpPGaAgVvXphHPlLhHkaAKxsSNnrgGzZYyRkKUuXfpPFoEtTeOcrRCMqXwWhHLaAAaFfsSdPpDHhKkLlSsOvVXGsSgxouUogUuPpQqbBDdXxcizZICGdqBbQqQJRrgGmMjbsSkKQqBeVvTsSgGtEqQCTtFfjJcqQMmAaRrbBkKbzZBqgFfMBuUWwYyMaAmrxXWjVoOvKwWkBlLbAatXxYdDRxXryOoeYyEOoDtTVvyYvTepPEtVjlLJXxQqvVHheEFZzfdDWzMmgsSGZwSlgGLwWzxrRXsSAaAabOooOQhHqdDXxPaApIBbdDimMrRdafFPpAEeOozZAaVVvvijQqsSJIDFfqqQYOoyQBTnRjJxTtXjJRrCIicKkBbZBbzrNaAIisViIsSczZCdDEevSJjeAaEtBPzZLlYyGfFJjAaVvQBzZzJPpPpaQquUwWiISdDdDsBbBbpLlPwZzWNZSZEvVezseGgyzxZzXFyYTtgEdDegGUCuUdfgGkKFDuUwTtqQWceEdDvVoOaGgseESRUusSUuJjhHLJjfFlGoHhoOCTtJjqIvVbkrDdEeCxXkQqKGgmbBQqCIKlKkLkiZzASOokKsShHYydWwFfhHDjJcCkKfjJFHhOWwmMvVoyYrRumMUJjkKOhAaqQHhQqHKkiIeEbBmFfYnNyMxrRnNzZBbeEcpPQqCAgPpftnNnIiNTZzuJHtTuUbBiEOoSyYzEeAaKkZpPGgzOoKkLlUsSuOoxxXyGgmwzoOHhqJSsmfyYFeVIsbBSgWPpWPpSsEQTCctbBdwWGgDMGscCSuUpSsJjaAPceEowZzWqhHbpPqiIPpQEeXUuxRiIjrkKRJDXxxXdjJbBdDmMFNnJjNeEXxnsSfiIJxXmMWwtTJeEsSGgNDdpPCctsSsSZzYFfHhuTQIiiIqhHbPpPGlEeLLllgGUuLgNnRPpEdNVvbuUBbBBbRQfFQqqrpLSsiIlQqPxGgeEXzZaAPpBbVvIiFfeEeOQlLqcCEeWiIwonJHhjAaNvXawWAvSshHdDBbdDKkOkYyKHhGwWKlYWiIwdmwVvWcjmMcJRKpzZxXdDPxLlncCNPKkpJnNjPpDdJjGgXSKkhHsNiuUInOwWeYyEgGommAaMqQMNnxXyYdDDyjrTtiuIkKiYsSyGgMmlUuLMfFSsjeEzZJmaAkKVcCvZzwWLlTYvVOXxpyYfFDGgjaAJgGWwstTrPpcCikBbgGKQgGSsNnkKcnNPfFWwxmtTjQOHtTNQqiIfUOomMnDdhHNkxoOSsDdPpSsXYyWiLlIwKbBkGLXxtLhHlAcdDCxlLXfFayAaZVVKsSVvkKkNnmMgGgGZjJfFzTtviPpIJjwWGgAoOaLHLLWwlCcZbBiIzeyYpPaAxXOYVvynNbiIGqwWsKkvVVeEkNndxivsSeEVvfFBYyFfjwWJBbSsHhjlLLwWrRuUlKkKBbpEeWwPYiIvVykdDJGVRrVvvUuQeEOoEeiIyJkKaARrfFaAzZMmOoIiAaSyYsUsSQgGgGKvjJSSsIijJZMmzZzQJjqAaKkYyNnpVvPAjJaEPLltTGgpWuUTbBnNtSssdRrDSwPpWWwXAaxwisSrSsRIeEaAoOPggGpPVeoLGglCcUuOEGrRgvgGbZzBLlaVvAzZvKkVeDdDddDEowWLlOxfFjJftTAafBbFffFFbpjWjZzuRFiIfrQwqQRvVruYykKtRauUlAUuaFfLAPzZpPWwpoUSiIsuGgfgGvVFXxnNtTLlnDdTnUuAaNCcgFTwpPiIWMzZzofFOZPpnNfFkUuKFNOTtvAvVaVpPojJvfFVnrSsRWxXsSKdDjJkHUgAaGcQqsSnirdQEeHrRhqueEJjUDTtwHhWjJaGxXgAvDdVSwWxXszZKnNSqlLlLQtVvTnpPNJjbBbBpqQPYgGrRyRrGgSshaDdJbBnAsKkhHDZkKzmMCcdOouUdyYzZWxXqPpQOowDSJGgjdYyDCTtnNiICtSZPpJjwWWwzmXhHxgGBbMqQoONjUuDdYhiINAanZLSslzKcCfFyYkfvVFeiIAHwozZOqQhlLPDdcCFfpFfpPAaehHXxGgDQqGgwWhHNIiCKIikkLlKKRrhJyYYUhHujJUKzRNeQLlqEnVvgGacCArFfWRxpNfFIZzUnNzZuiYpPMeYyDddDSuUlLsdXxlLcCLVvnyvVGgYdWaAaAwDOfFSRrbBsQqkKBblOovVSsZzKfXxeEAcKYoOykCtTabOjRrJoJjzeEAawWZwWBpQqticCITPLGSMQVXxvqIjJKkpjeEJrQveEeEVwMDMmUuNcOaAAaoCEepMmhoOHQjJmFfGkTLltWwNXxftqQlkoOpPpmDdpPMNAanIizNnNuUnNyYLlClLqgGdDgnPpNZzgnJjRRrWmMDCcdfFwZzriwWFfzZFeFfEfWwmjUuJMbMmjaAJvWwVnNkKzpPKGqGLlgwkhxXzZbBZtTzlqQNRTtALLTtllLTpnPpNoOMsSxXmRrDdFfDefLlTtHhfiIcKkWwkKCcxXsSmMOogGqFfQiIiIGgwWwWxNnhHcvPpOoVPpysSQqWHSjXWwxXxEekKRrJeEsgEUuehHBcLCYbBQqyYxcpPsSFfsRrzZzXxZyJjTtYdDXOoxwWbZzGgcCpgvKkJjDdWCAahcjMmJwWbBhHgBgGIoOEeiIibjYyaALlinNyYmMIiAnHhNVvaIzZpPYBbTJjxGguIFUuOwWofFYqkKQydDgJjGYKxXkzBbjJLluUiIqIiQeEUuZysXxSjNqQEefFoOjtTAalLnNIilzZGgCYmMxDdXsvVSeEgGQaAuUqQzZtEepaAPdDDHhyYyYZOMmtToIHhiTXxtvVzdEsJjvVWHhjzZPkKpWwWYTwWtxXyYoOcXxCKkvOjjJGguUItEemoNnOMIyYfFXdXxsSvVDxnGgEpPefFNiTtTOodHheEDHhfAZzMfFSMmvJjhrRHVdtLluYWIiVfFcCtThHAaKQcCqjpnNILNUwWuMmZFNnRruUdDfJaYyzZjJbBACcLlbBkGpPJGgukgGKNBbfFnTtiIiImMKAancCHqmMzZvVcCKGgkWwQuUqHhAadDQaoOAnNSTmKkWXxEIRQquUhqQsrGuOoULeEpPlZzgGbBBbtwWwKmMCqQdDcaAqQrjJxXWUuwDdMmdDocIcuUFfUuMmqQCSyOoYfyYwWfjkKsSYkKaAZYCqQUBbwIitPpprRbBkVVvNnUuIiOoLlAmEomXxmhHtTiIdUuTthHrRAaAvLlViIGgaODingGNIMmlLMDMmUukZzKxXrRWiRTtoOQquRrBboIzfFeqQWwUMVvmLlfFiIiINnoOlLAaixXXxHhIgKkZzVxxXXvGOoFpsTtzMjsSCckJjJXxdDtTGCZzMmAzaAZawOoWeZoOZzWMsSAYyamGgwfNnuUxXFoOWsSwsSzFfQoOAamDdMWwGsmEQqrRFfzZAxKkXeETvVxyHhYgnxBbhtyYTOUkKuOJjoJiIjJVvEHUBboOBVCcKjJqQdDkwWnMmrnNmUuMBbRLFwWftTTtgGiIElCgUPmMpMqoOQmuoOaAFUuflLnuosSyrRYKkpUuPtQqQeEPpoGgmMyYuUCzMmmTtOoxXMFBbiIfFhHfTtqceESXVZzdxXDdSIXxBNnESxXOoyADaOoNnGgKukSstTXGgUuuUNnxMtTfwiIDzkVWwvKbCcWEeEeEeSjJspPYywAaJrRjBNnQqnNpBXKuUkFrGuUydbBDbYcDeElLHzPpZveEaAVmMgpPGuUvVJnzZXPprRxJjtRquUQhvBbEdmMDeVFfYrmMYfFcBZzvVzoYyOjNuUnYyJQqZsSjClLCccSslcAPpaCCfFpPIigiILlvZzVyMmqQKkvslMKkmtcCiInNqQsQqIiqQSzNNfVvoAaOKVMpTtncCNCcBbPvVSdnlLXoOvwPIRtTtMmeRVvAariIGgeEzZSsOoEUuOoSsTLdDlrRPcVvnWyYwjgYVxXRDJjSkjJEeIaNaGguHhUnYsSyvVwWNoOiIyYqOobzZBZzXbNnBbOoPaAyYKkTSEKXreEeTtJjxcCwreEyYOpPbByYzJjZCcoyJjYAaRtTiNnIYyrbBNneEDdRraAyRGFCfFOtTOoofFcHoMxjMNnlVtTAaOkiaWwOGQqgVQqAawWgupPZzUuUPzWwDdZIScCsHhisSpoOSdUuvVexwWXKkgznQfsbmCcraUuCcAFRDuNnUdDdcCgzbRDMyYmdIiaAzZrVvotrwWhHUuFzZJbDjJhHdAlLtTuUfFagCMmcGjSViIvFfSYvVQqyITHXmMbqQaSsABbGgqRrQsSBSsNnjMmIkKVvDdZzTmzZgGmwWMyfFYpacCApProOvkMXoOxmKVtTlLSsCGgoOcSKoxXpXxFiIaAHhyWxxXXADdaZdTHQPCKkdDJBgGbgXxzHGgXWtoOTwVvpAabBHhxAvkhHeEISKQiCQqTtcoocCSssrRSgTihHIsZIzmtGgTRgWxXqVvQwHbBtFLBblfTjDdPlfcCFLWwNfFqIimesOoRSsURrQleEJjWyFfMmQJjBbVvBboBboaVvAMmOVzZnSHhVvsYyPFfeqydDaAOOostahIPpiozZOKkHQqegCcipPIGSFSLlhHpvVGaVvuUALlQqWwgRrsSqQcsQzZqIOolLsSZQqhpvqQCcFkKWwfLlLlHmfFUBKkzZJvVBbjPzZOFnNTRreMmEtSsHhqXkKxuWJjqtTFfmMrRqQQQqwdDUvLlDdmNqQnGcCrLllLUSfCcwdDWuhHmMmMAILaBbAriIrJZzjQqQnEeGEegnNqyYCcIiPpcCaAckAzZxjJXtcSsrRCTCcEmzZZzMxXlXQYyqwIiyJjKkgyYzZHhGXaAxYGjXxxvVCcSsSnNsKkVQbBqdFfDabBAzsSZcCVvUuYymYyAaqQMdovVLlOpVvWwPaASbBsDvDdfUuFXJBQWVvwMmuiIWwzZuUMOhbBHOLrzZRlNncQqeOhHbaAVNnMmvaGwWilLTtIhqoOooOZJiQqgNiIwqQLLljoiDpAaqQYyaAWQtTqwPrRYyNlLPbKkpPxXpttLcCloOiQqsSuUfNpPTtnSxDobzZpKkPzEeMNoLaAlOMmatTzOoGxMGglHGghmhHSUusIYyiyYwWJWNKkRrNDdnkKniIVyFffFYONnXxzZqQlxXwEevoOEeVWFNdDFfkkoxaAXWvVwMUumXxMDdmFfOnNTyYvVeEKRqQEYyeyiItTQlLCnNcWxOoXyYIpPuUFJjzZkKdDQqgGsSUeEuIiPxUWOowuUumcwJlLjCpPcJsnsStTNSjGIiiVmMnNUSXxsoOvVlLESLcCSstTGsSeUuErsSeERGgJjaXxAlLZzTtNngkKlhYyHhHnnNNjplLkKtFbBKLlXiIxwkKoOWUisKaAkieEIXxSaAaAjcCJAaeEqjJQxheEFNnDjXxIGguTCFfgEejxXZoOzQnLlAaZzXxNZzLlqbBSSSnVvyYMmNrIizZFfRWiIxhQSpPqQmKkCuUcghzYyZXxgGqQCcokKOJGgKklLkKpPuhHhXOoUuMmCcbBdDhtVYJGgjbByvGIruUIirRiJLgGTtWwlZPpiZFJpTbBtSsFfUuPQsJSsjAabPpYdPcChHCGgPwWEeBWwbIPNOZzaMmHhdDAoCccfFSsuqQUBbbEevOeEJjBbgiISsSsJjiCcavBgdDTaRlLFShcCHYpJjPQmmMyvVYrXxXLPwzZfFlkApPaKkZaAaAzhHQqCcmDdbBqVvnNPpQMKDVNnfFvYvtKkKYykaiIUcCZLhHlyKkdOCQqceYyrRELDdlvdDtTWxXwCcgfFDzJjuUDdlzvVWwaAZrRXhHqHhQqQojNpPnJlLgCcpPGyYjJpPanVDafFnNxXvVsSPaAaAIJjUtEeKbBmMNVvlpHhUgGuyYyYcIizZEIieSsNfyJjdeVBXxbvLdDyvVUuYPplLiOrTZaRqQrAzTteLacCdIYCcyvVWwtTEeIKkcCfFdmJpPZzTtzZBbjJwTtHhWAzZosJNnsAaSbMghFBbBsSHqQhdDbsSbAaIiBkdDtssShgmyYMoOGDdeyFfnbQqfaAaACcnUtTgpQqwWzeLLlEzZKgGkeJzZZzrREeEXEuUlzvVZzoOuUZKRxXfxXFDvAoMmHRxQzZeEpBVvhmEjmMMmRwvVWrJJbtTBJfHhFtTwWjWwlLHiIhZzRLlrjAlLruaJjzZtTWwhqDdlPpLtbJjBusRNnrjWwbVvXbkOoOHhoKQYRBbBbDdDdqLlSSCMQQqbsoOwQSbkPhSszZHPpVvNnPyPpDcCdEeYwUuWpDdwvVstTMmXYySVvsxMmnWpupPPpbBKkKNdDUcCRSmwUuEevTocPIQqdEgKBEeCDskKmsSRdDNhPpHnsFfehyYeKkENEeQPlIiJZsSKkNDgjJyYFbBwDdqMmncBbVvCsSNvmqndDNvhFfHfPeEZqHOolLhzZSskQqTtKYylvVnNfFTtbbBDOonNfehmMgPdDpGHtFTtSgGNpknaAhHNVQqSsaASsHhvAaEekAsSJvfwWFrpHGWBlLLvIiZzzkdSsDKxXUuWwCcLehDFfwWvVRrWbsFqZzQfqrLofNncCFObhMmUnziItTwQLhPpmMHlqxrRXlLVvzZcyhUfFuHhHWwgGOoBfFbkKYNnxlrdfFLWwVvDEhSiIMmbBUuTcCdDtrRkKCcnoUvwWVueeICcikKaATvVtQPmMzenPPbBJjTKkPSlFfBbLRtZzVvogGxXOOopPxrKkNnUYyLluyYIiBlCcxXYynBbeGgEBWZOoeEfFMkMXOofkHwWxXGghKSlWxbZjkKpPJbuUBSszZznNZOobBjJzCcBBfNntrwANcdDCndUcnAUEeuUubBwWkjJKuYcMmRkKrRrgGcNnCgTsStcmMCmkXgSZzsGxgqRKkVoAaHLuxyyYXxjRHhruUflOotTfIfFiFcCLQcCqFJcjJFEeZJjaAfIjpPWlrRHhHhbBdZzdjPxnNXmcwWSsykKYNCbBomMbBCcUugOonNQEelZXxznmMyYNfFHOPpBbyYoGgakKvmFXtbbBBkiFjwyYxqQKrWIAaiwRegGEgqQBpPbeGgEyYWzSMmbBbdDSsiIaAfFzZMmJjfFMmXoOxvtAgmMGezUjENnecCeBbEJnMCcwrRAwWPsIiiIaUuuDUjiIcCFfvBbQqVTZzIixXQpVvPNWwGnNgfFhHTCctxXvWipknNKPchHCIpPvUuVerxGgEePCcqQpYmMXxZQqzyqeEzZQXtqQSsTLlisSlLemMiIdSsUuYyDwWQqQqtTsLlpPaASuUkJvVbHhBiLlvVjJXxBUNnuGgbjSnNMPJjpKcCkuHhSyflLIMNnSsAlLrRGNphLUuloOsuUSgGtgVUgGupPdkbBEecCTWwoOapPbfyPAaibBKkvqtAXrRpPdDxbBeCcgGJRSPpGgxcoORoOOoHhXTzdDZiIbBRWKaAkKzHvMVTyqQGgYcCRnpPsIUilAaMFFbBffJyYMrRgGmooOAkSvVPpsKNcrRCRrnpALqBbQfSsQqzbBMmhqQHUuNnKzocOKkoCvVqGVAaNnZmMSsIqQUivVSQqUaZzgXOoPpOoAaCqxXxEepPxSnPSYnzZNWwiwlCaAvVEzrrRlAaHhPpLNnjJRZXUuxkKoOZhHwlZBbpbBPxXOopMmPEetTszaAeWwlLtLlkKOERzQqTtcCKkRfzwWtNKsSPmcCAaIiMnxvLtTaAPpgGncCNdRrseECcvgGjDdJtTfaArpPVvRjJOoGnMmJjjcCpPSsJZcVQqXgGXxMmxvHhCSJWwXxKzAEefFaTfjJeHhQqHFfLvVvVBFLloONndkicyFxHhEeUuwvvOofSsOioOFBbzHhWymcaGAaRVgGavVtqPpsSQHFOokKEAaFfnNYyWwiBbpPaAkKIixXHhIrRblvVZzLlYyepPpPZznNXBEqulLhEgGMLmlLDdKkxXeEbfFZzBHXxhmTfFnNdPpMmfoOfNhzNnxXyizzotEcCerMmqQLsIFyYfoOFQTtqOoXxfJIiNhkKsSOdDofTtoiIOYwlwWgGjWZlLCbBBHhjqQYqKkuUwWOUEgGeELleUufFjJaJjEeHhKZgfRoOryyYYXxFKkkanNAHPmMphKIKDdyaLfkmAfqQhIjJjqAQUuqqFbVbBZzvCqJjkKxXQtRrWwcCONuUnSKkOoevTBbtHWwOBbTHjJhOzZnNRrCcXxBbJXxGnkKtyYuUoOTGxXoOrRllLEeLrPWIiwzZIiDdXUuxZzkKKrRkoOpyCcYBbZiKbBRTnNHcdUuMmUuDdYyfthHTFzXevVExAiIaqurZSuUEuUUuefWaAwBgGxqxXQnfFMmVvNQqxIUbhbBhvVWyVvjNnpqVvesDdSGoOlLoDsSdvsmvVMQqfFSLpPlDdVuTVVNcCniFoOLlzlLZfyYHQjelLEzZECZzGDdtJDdTtPSdDsFfvgGVIiqRkDbxyuUYRrtyYGvVrRSsjJvBbTtVoOAPWwpHhXxEuSsLluUZzJjJjBSsKMkKmOLdiEHhewWIoOqXxMmVvuSsUjGfFyYaNnAwWkxnNXfrRMNkKJjMaFWwWFltMsdLlsSISdDCceEBbcIiCaLlrRNKrJnFfRnKkBbUJjiIShHoOsuvcHhCcCguGgUQqzXPpxPiDuSsUsWUuwIsmMjJiIpvzoOpSsyzzZZSskKzOoqGXSYGgysxWYzZbpPdrRDgGhHLZxXkKSEesaUuCIZlJjqwkewEhgGpbBWwPuUHFfoYGgVvoOUuyOLaAlEetpDdwWVvhHLltTkKMdDmVvjsqRNwdJjDWZxXyYyYkBaAxXkUuKwWsSwWTdutKDQqdDdDqnNPRrgGXCDkGgFBEeiPpIfzZcfFYFfaQqJjZEksSKepfFPzHwnqQNPWwpFfaAEeKkGgtjJTzfoHhNVaAFfmEQqeMnuUDWuvVUcCFgGpSdDsQqPPxLRrkKmMQbBnNqlXbnNsaAWwEVvebtFJjmzZjJMrdtUXxrTMqYRrlxcCqQvVGgUrbAaLlAyBYzcXeNsSnTtENcVvnOoNWwCFhHVvsSOEtTtxdDXiIIzbBZYynjJXkCcKxNEHheeuJjHqQhMuJsXxUsSJkVBMKksSmbxXvcFTuUCJjPEevVpYjJMhHTtMjJmvVKkupwdnZzuRKAeEkbBQrAeEfFaRQqYyNmALlXxpYyeEYiIrKCcvVDPXxjJgGuUiIRZLlzriITtgGVkKIUulLMaAiIGJeEtRrTzZUbWuUkKDdwBqQFfLlUvVurRuEeSsUEjVPpUbBunNtgGlhgGHvsBankKEriIwZztTaAcCKkvWwdGgmOotPJjJbTtJjPCwWiXxIIbGgijuyYptTEHhMlbBZcCakQvgGVEeAamRFfhHPpdzZiguUDEsSwgGWsCPnrReEDdmMXQjJvvVdkXBImmQhnSsarUusSUjwoOWoOTtkoOYyXxPpgrRzZswWPpGgSJnNncCNsSAhwWIilLWmidogGxXFVvWwfsOQuUsSsGgVnNEQSFfnXfFydDdlCJjMzAatTNnCEhHeGMFUagSsGVCWwWwcTtGgdTtjJDRNnZzrYpLyAUuAzZYCpPiKooOCNnDdYVvyOjJoFfcdDzpNnPVvnNwJjWjpPNbBnwWJjJFfdbUiODuHHhpZxvLCjJXpPQTycfBLlbNOonloyYCECcPpJjqtLFflTGgQpZkKEeDDdfXxFyLjUoGgREqJjDdnNIDcJvVNKdDpnNnLlfAaCctsLcZzClPpCcMmdklTmMtYypGUhtTOoXxOouDLldxXTWwVFBbSVvssYMmmMyhqQniYWEeGxjUuJXlyYXxLtNnvVKkhHUuBJjmMEeTtNnGaiVNUCzQqZFiSbBnNiIKHTwdGglclLjlLUqeEQPlQqLgIqhXGgPpMPpmjrRuIaAHhorhCchsQqvVTtSLJjljZzJBxyYXdDPpeGnMmgGgGxXVDRVvOSQqFIpPUIiuoOlLiGGwWHLJQCsEzZKtHWsSXJFfWJjQitTRlUytVSsOoRoOrNktTzgGxXZdDqgYKkMKkeHHhhuUaAXxskKiUuqQWwUJjoiIOHZJRrjzDdZqQLECmMcpPZzCcexpPsiISasSrIlZzgGzZLfFCysHoUuoOKXxEqQekDzZdBbPpJjOhfFxXKUnYlLyyJMCcmjYXxqSszAaDyYBLmAaaIuUkOoKWwCcnNapPAcfFjjtyYjmpwCcMmnsqtTqGtBpvlBzZqSmZJZzfFjdtaADFfyNAaXfFMeaLUuytTaSXtxbuVwWvnvADdaCEvyrRYYyIkKySsvVgGYIibDazXyYwWgGNnxXsSwTtejJElzoSDdbBsNWeElErLPFCckKfBbdihHAaWGRkKrMPjGCcgJkOoFtqQIiDPpvVdtTbMmSsilGLlrJjRrRCGXCcKDdYaAtpeEWXcCxlaALwEBmMLlpMxXyYmzYTtyZyrnNRTtQQxlLXPnyQqYVmPHhvVqfFmCmtTjJgVvQmBVvSsDmMCcdVuUmYyMPPpppPSPpDDdErRVfghumGglLMUMeEdGgllCFXxeEHhcAaCdLOGIaAiHhaLljXNWbBKkHhcaAurRbrfFsAalnAaOQYySfFoOWJjyYuSsvgmkaUocCOTtgGciNKIFfkKnNivakoOKwuUyDMaADddDmpPdOpHDCcjJzSssSPpuoOEeUHhZzqQZaYyMmHzIVvhHvVDdiuuUUZtTAaKVhHvsSkUuhAdCcKcYovrRVOWeEOevfJyaAIjJbBXxHJjhMZgsyYQbBqSvVHzPzZoOYFZzmTFfKhwWPpkKHlLmGrJjRgpfFPYyPpMMVPpEjVvJvggiTtIZrRzGuUUfwWmMpuUFZWbBDhhHHsSsSCHGgGfVbBLdYAdDWfFBbYyGLjWwJxxCcLliSjJZzKQkUdDvVutUuVlDxXirRxsSiIXIKYFfyMczZtoxAnNKAbeQLlqzfFOfJjdDzZvlLwJFfjxsSKRuUhxPpXJuDoOpNWJSxCcXmMeXnmMOoEGHhdDJPpjgJjeUcvyYczZClHLYCcOYyrRvVoykqQjJcCEyWwYSDnNEwdJizZIeEOoBVbjYMmgFffFoOOoFfdnXxGgNPpzOoVRrDdIcCbBBbrRlExXOoAaiutXxIiTJjsHAaCGgcyYjZzVNnvxXsXxmTRrtvMiIXxmVMAapLiXYqQdDAhHzGVQUqQzkKiIgGuUdDkSfFgpPDdmCwXxWOqZzEIzjPpPHhBkKrGgRrFDdGgNntTcTusSwWeEYyhHCcalpPGcCmXVGEesSacwcCVCvVuURPpZzTZztxfHuarRPptbjgvVGaNnAqQJBDHhpPdzZTScXxCWlLagGBbAHhtTwuyKkYJDsSxXJYrRyLugPPGgKJfzSsqVtTIivnrwpqZzmMLlHhlLPixEeAZzeEyYiIdDavQZzqMmsFfSXxVXoOGARragglLYTJpHhZThziItlgGjXaBkKQqMmbgFfACcaaQRuUrDdPqQpyGmusFLcClwWvVDdLuUFMpOjJPpnNhHoDWDfFHhdwAadDEeSsdaVvqGqQgWKkwHhWwJSsjaAKxXdxXDPeEjJIiRnNxrRXPpTgGgGJjWifmMwGgWRrxLgVvBbIihGFdeUuSQurZWPpwfFXxYyRrqbBadJjDCcpujYFeEDdswWSfVekKRrMmsEeSpLkRzZtockwunNUkPIffiIdrRGgDVxynNnvmMQqcOoXxCMzwLyeZEezuJRUuFfRaAaKJwWfFzQqiIVvPsSPphjsSNnnfEfFNjJJvVjhyFTtrRAdeETtvVhHzZXxHCgGcQoYPbBLlvfsSibBNnlLvVoOGdVjJfFDKoOIiLTtMmxNQWNmUhHuMdfFVyYmMeEMmhHtTEyhHRtVjUdcCZbZKkUufFzZYweeEKSsIiiqqXPGgpxrKkRmMcLloOsSvVNWGgsSffFWgGwRCtTwWRrbBmvxdDZZzHFfXBbxZsmMSzjaAoOPpTjORrYySskKQAEcCeGgBbSsPvVpfFiQcCzZDESsBWwpOowWORfsnxAyPbBKkqGgQqWwOfFoQpIlOwWUuYyfYJaTtAJbrREeKkAaiIwWffUuXxiaWOoIiLVaqyuFynNYLlvkKRTthHLlNnNpbMtPRJHhjzlLdDHhJiZHhyYcmMCfFtlLeEOhTtkGPiIpgKnBRrtTQqatmaAmVvbLRiwWsSIOQqeEUXrwwnNFUZzjYyUAaZNaEjiCcuYOoMjejJRrSmJjcjcdDFfDJjJfFEepXxBHBbhZaAfPiIxWwyYXbohHmEpoOgOfFTtXxosSnKkZjJmMETRBvVbaAfUeZcsLlFYNnyVuzUuXgjCrRJKtxuUBbXHmMmkrRSNngGssWGjrMmZzzXxZxvLtTNNmukYIidGKkgwPpRfFrXPnNxAeQqxXFccAHiLwMUMTvVtXxabBToIRpPrJNMmrRhHEsSXhHlGgadMUZKeUxXoqQnPpgNnLlpgCaAqYyvVXxsCjoOIppPFtBRrLMYtLCclwXxsSEeWPpgfmvoYyWDdweRrjdDJFbBBDdMmxdDwWdDCKXzpPxnNIIMmJjKkcSiIQqxXSCcIkKmpPJljJLvVKkIrrJkEeOnaAtJjFWglLSHRWZNGgfFHwWvRrSEDbgFZeofFcRQhOoHUVvXxuJjTtKltTlOoAzCGgNnXSLMmlmTUtHhTutMiLlpTYyGnNoOTnyvjJVPbSERmMbvhvVTtHXJjxoOmMtZcHhwDVCtTLyrCRjJrcXCcaAnNXeaAxXkCcVmMmSzSgGrBbRsyYNOFYSsyEefoHhJmifydDJjRJCcNnSsvVXbgGfYFfpTtelRawdTQIlczZCZelRaArTtepyhHxXWErasdoycqQWwArhtTcCVAaIfvVFDbBaYJRzZXCHRroODOeEoXxcIBVmMDrRLldqQvMcHvCcCcOoWHrniMHhGEfGGAWqGlLgQLlPlLAGgxXdDJQPwkKoOWpBYsSbBePpyoTTttOHFJYyQqjFBRrakgAazEezxXrRSsrRZToZnsSxXBbypPOozBbuUozUijIbiIurmbfFEeLlBMlZRrHaVGgmMnNgXPxXGnedDxRtTrmMCUjJAauWPppGHoFXxUaiuPZTmQUXxhEzZXxxXeJKeEjuNsSzuIddDVHhvDeeAaEjkTtuhHFqQrnofUKkDhGdWwlLOXWwWwAqMmvAeEHYNtTYynJvVhhJUuLlIuUzJBbiwWKkgXxdfAsCECdDmMnNcvLSsTtzWxoOQTtTtQzZUOaAzUuZQqoNobwEgGoxRruLwuXkKQqxMiILlmgeENkElnNLbQyYJjqCVvPiICgBbHQLlcYyCcCvVPpbdSsDqQWiIOMxXCjJXLKgrleEVwWWwEcfIfkIiRryYkKJjCcLLldQGXxRrurRHhZOeEolYTnWWwNnwZzNWhcVsskKSpPllzvVNkSJXxiKAusaASoeEmKkLlMDdMmyOoljKRbyIVviYBdPpDJKhOoLeBbsDdRrgoOpsLdJANpUAavWwhHpvYyiIXaAAmRXeExfTtFrMalvGGNnIiVDVvifFIiZzgaAZJSyYkvVBbRvVfeENLKkWcCrjJZfnNFEWWUutoOThfFGFzjJxXZhqQqWyYQqQMwWmPQpiQSCvTxLjJFfOHfBbvVGgGqPwWpQgqQhVvAGgeEaFfHnNyBbgIimzxXQLlhBduGReTKsSNOLhHgAhDhrvVhHRWwlZQQgGQqGIIZzvVuSsUvZzVKvRrVVvvwfsSgGUNAzZbBBJjbfmSknNFnmMNayYsSzZsTtWwSmssxwWZPalLRrVoOrqRroYPNtHUuKkhSMmbpPPrNnwWRrAaOozmZJfeyYHymlfYBcsrQrNnUaAupliMwpNrmRooDdORyXqQwWyffxnZujJkKFJjlhmZoOzEeIJjNbFfEHuUJrHhoCEugSsYoiInsSDzaCcYVGRXxaAHhriSiEgQeHhEqMWlLAakDrXuNvVnPxCnNPtsLTFLZJCfjJEeRrevtTVkuUKEFVZzFEtTDtRrlPfFfLiKklneQmfwWNKARApGItTijoOuZhSQKkbBqZzsyzZYfFSNrfjJhunqQfqPpPjXWwXKkkFjJCcPpInNwwWQXxkQqghHHQZxXzZaAirbBSsPCtYGcvzSsIiyRwWgGYmjEeZzJPhtpKkYflkKLFwfFWycCXAaZdaynrRNMLbBeILlzBDVKBbZzkvdsDdnoONrRNbMWFvVziIZZJjOozSQqhFHhfMmIZxLapoOFfzZfFiGgIDtmrRIiKoMtMrRwWnNwWrbmMBuOgQLMgGsSRrKBbkKkvsEeStTSsaApPpPbRrKKnNEetEHhuOjcCcCJZzJBbjVpNedePpEKAazvVZSvVGOkKNxXKkcnNzoMmOjQEgGnReEZNncCRrpFIwxFgVDdanuFfFILhAhHaoOJYJibOoqQWwGgkJmWsHhSgGIigdJTtjHESsGpPJQMeEPatTBQjMCcRYpPmMSsSfjJrRjEGDNSjjJJjJAqDdQmdPBkHVnbIiSPpwRfFGgsuOozrsSeHQUuqhERIkmMZJIVuUnyoOWRrwWdDaWwngsmZzswWKdDUNPbznNFfIiEnVvLlhHuULjJeTCqQqCdDcxXQshHhHTtSDdiIEbBolqLXxlHVJjHNKSGgRAaAuAOVveEcEzZeHaAhIiXxxXlKkzZMAeEdWNnJrriginNCLxXlcRMNYFvKkVUIiuvVlLDVmMKsrRuUQqXfFRrNqppPIpPigBbwoOWgSWzkmMSMmzYfUPdOosyYSNtvVgkDdgOoGoGkKjnpkKKnEeAjiKkNnOEenGujJGKkTtTBbBjmkMHaWiLlAXUVvugGRvVwEepPWKUuBbGdDgRrMXxmgCQqcoyYfYCVjJGgvNcCUxZAlVeBaPnTtTiIWSswtidKAaiiTzZTmyYTtvVXxRniIXVdReyhGgFJyfNDGwAaokKLlONnHMszJjzpPSzKkzDdjJbwjfymIilLZzKrZSyzZSsEdPpLloQgrRqfFIikYCFsEeXxnxXZNWnUNzPovLbBlDhHdMmzwWsRbiItwMmWTeEtTCILRruUaALzOSYzRfdDVmWVvltMmRrTtTsShHcCmyeDYydEYODuNUnKSVvozYyZyYPGNwFYpPDhuvVfFSsUzfFSJwWjkqoAaOQEeKHhAUunNNYTepkKPMmEtBbyIiYyhcClXxArCcOQmsSfFkpPKriKyTcAHhhxXHyQqzMeUvXPpLlaDdAxVRhczqgkKyYGUfhofJuUSCYCXqTtOXCcHhRrkhTdrRrRaMbBrRzZmgWSCCcLlnvDTtfLlrezZlGzBvuUVyYUuQqxBPpbtYmxvhHarsYWeEOWbBBbhHOYdpxSInlLiINfFEMmeygjTJjGdBbjcTboOqVvMkKwWfGWpVitfxXVgsSRfoDknYyVmMvJwbBxpvUfkRrzqSsAaOWbBSgiIGbwFfygGYEenNLlLlKDXxFtJewIEePpisxXSSrWwCEXeEiMmprAHkKfxtMlWUVxYKkbBXlcOVKkvccCCkqwaAVvWQxhQxXrRnrnNNvVHhnfFlydDLrRcmGnNafFAgMClnNTUOodDVvsGpLJvfFvVutHhTfYKkOdDNOFfdDrRPREacCAFyHidDTNSWOoVvOoEewgEoOqvUumMvYymkcYxUBbbBaAlLDaGgAEfkvdVkKrRmMfFOozYapPxXbGgYvYQqaARJjExHhRoHPFvzeCLlcbBzvwvKfeSIutTkEnrAaRlIPYlLyrRIgGHhfFTjvbThXzeELlZrNBbrOoAwoCcOWPXCzZNnXxIiRrbBvfrRFXfWHOolLSKkspPRyrUFzeTJgwWDUYyxtfVZBTtgGuqjJEhdIxCYrRwPOgKkqHxPyYpqrIpbEAjJalxhjqQbZzMMzVhHuUWweUgRKkpPrKkfFsFgGCcYyDPmMgGyYgsfFiZBapjnNswjGqxtBCgGVrqQnNwYyWxkKpEbJjYNqQPSETtekZHhSFfszgjefhJjJCGjkPpwhHNqzZlWdDfHhxXcgPpznxXVQqQlOQgPpevVDdOoOfQQqqFBaPqQZVAaUgGuuHAazgGUuzAaHexJjUtBiUuItFfTtTwWaXOwcCmJaAbmiBUPeMmZGMfTtXlKZzHFswSyKDCcdLrRgGqdDssSGUugfbNhYyhzZHLleaHBSxOoIiXqeEkzKkZCvRaCsaAYykKScrWGcCzZNnFcCVvnNnNKhHkwpxeyMzrXoakpHpgmYyMGGBLJhHWkuUYuVonqQYlIWwSsQNDdvkKkBIvnNVlLibUuHhvlLVqhOoLAaEeHhnEetWsJMHKNYYkKDZzdYyGMmCcgXiiIfgGPsOrTQqqBVvZzDnhHgehBbQFfGgzZmlaAyYIypxkOJjokKlLLnQfFMYkkKjbBJKnBsSpHSEibRiVvkvHpCJhlLHxXmnNAKfrRkvHdGkKnMmCCcpPKYiGgcFvXSMOrZzRrRQuUqZEeRmIQKiHPpplLnasjvHEdDCkzcCIAeEZBGlPpLkXzZSLlOochHLlfpMeETttfGVcCZQbVgyYFfGVgGvsjJgpSFnNFffWAallLLdPpjxXRgRlLFwPsFkzCnwTDoMRZYtsSvVnSroOfgGREehHsnNyYyQqYSSoOsgGkejNynwjJWJKkxeEPZzpshHdsSzXxAPpaDNniIWrolLSsNdmwWWbbjJdQqDlbkiIVyBbYsvHxFUaAkKsSqYSswWLHoXwOONuUJSqrPlLpvGglZzLOeeEXEefFxERxlAEwVvBJdDiCOocpPSwWDIipcCiwcCcNnsSOoCFMfFEkLeUXVcCvxMlCnwJAajoUufqUVvuQUuFzWwZOOBbDgGKkeOoEwWyYNIinxkKMLDpaAXJjxaAflRBbHhrmMsSMmlLlbixSTtsCcdaiYjXxAoOOFehPbSyVvllgzNmMnUlZzAVvJjymMYmMRRLlrJjCeEmMFhHhHovVORdsrVlVvgRrZNYyBbnOFAHOoAwkMmKFLVKkxPnikKSswzaAxXZOosXZxvHyoOxTtGfZJlXxLZHMSmgGDOohXxVyYviILbtOqQXoOWwxipPDoOUBAaqUuCvquBKYyubBLlDWNnnbpsSPpPudCBXXxnOdDhNMmkPBtiLlohHCctTRELlfFKtTrzZZtTdMmyYqnfvUusfFtTkrRdOLYdjJSsDtJfVTtvaAiIEeiYDdyqQUBbCQcCDxyaDzZdDMMgGmmfOsVxsSeEnNSJHEelLpKukGEQqxXIosSkVNnfFvcfZzZWhfsSPDApmcLugQqqDUuumKIkJoXxOZzcNzPGgwWpkKvXxGAaigbqlLNUZUsSuMmPwxLTRrzRuUuzLlgICILEdGIbxPRrQEeqOWWoOJjsKkVvKytwWdkpHqQoBbyYZzYyqQJjqUEXGwcyYwWTtCIwLBbkKOkKfFkKnzSpPcpmQTcCMLlKkbTXxriEetFNaoOTQvedQOoXFQFfgGWwXxDvZzVAadvNuUnWwVUCmdSsTiASNEgGQqLZLrRXtWEKMmtJMFursSesSBpBsSucczLnvVNsSlvHhOXrFfSTqPxXsSEZzeBZzhceEYTTtRparRAJMsKkqFwgqQxdDvSYKqQmHWXVEtjJzZcLdMgGmbBDeMchHCvaCcAuakzpuqWzkyTIiaUDxUaARrJjSePpmLfmMIwsvAIiaRpHhuUMmbambpQFUgGdQbJjzFfZKQKYTDESHBJgKmxXhWjJwfOofLlWwbhHBRwXdpPjRrJEDJjbBgYuJHUkMLdDXxqQlmgmdDuUKWSsHhfhBIuUfvVPlFYytTfsSNgGnBSsblmqpJjPMmMmUuQOkBbfEfFiCWLvwgAtfOoWGLYVUIiWGMDAapVvVgMmGGxmijymJHhCKVZVtTHBeEbrfVQgpJYypjuUwWNjKwWoONIFpPPXjJMRzZZEWwewWaAJjcClLQcPtwWNNnTtLTtdDedVNnEevCfFsaBAaIiOPTvwTlwIfjbArvPTtpVvuKkfqrRrjgYyHNNDIspPdDuUSOogMJrRzRdxwWyYhoqktVvLrJZnKuUIbBgGLJtNrmnUqCcwWVQtpHljEHhmMnwoOyLZRXHubMwzZWwqVhPgTHLlRrRrFCmRwWmkOBbrrPTJbBshHIiSjhHxzhCEWWwwpPBTtOLloFOocUuZdrRbJCckrRKSeEsFtSstTfkWBbwwWcCzkKQeDdooOPlSfLVTrfRCCcOChzspLlPuYHvVhzsdxePpEGebBHHPxXSsWSCQOtJSdDsaQcCyYjJIDdiqGEJjkkECmGHhyGajJTvgPbyMzZmNVhScCVegWwMmmMlnNXQuHGgOTxXAeasBlvWqdsxCKHwVvpMmTXHqiXhLNCcqYSsDdyIUdvVDZgIvWScqQUzKUwWuUigwWjykKAdXKVvDdyYnYOomMnqkWwCiCcFnNIifIIAauBbuUxhHXAbRJlTFgzaAwPpwWWrwWCUurLkKSaoOArYMbTtBbBOohHcwRkTfspPrUGgXnpPNuwtTRSsgWwdOPVEenBPfVvEePqQpCJzFUuVunbjaAVpwsiASZzisCrdwwWWyYwTIJIiBNnbjSsQWvTDoOpPWdoxSeBAByMmwWVWqQwmOqQgGvVoMnNuGYyFqISrOPNOWwEeeoFrIciIlwXVvLlunukzZMmCJTpPtWwRueAlXLTnNSshJAlLcNgejJWwEwWLBoOkQYkOdDOoFfkKfFsZaesShFTIYLhnNdZzjlXyYSEMTvCatvVwSZcgOVvsNBMDuYFXxbSsYcCyawWzlCcLwTMGaACWcpEewQsYlbpApPagBnuURrTabBBiwpSdPwMofJurVMsCzplsmHLNIJmOKkoxpcCPUuwZvVzWACqQUuLlcavVaPYchgowGyzZKbgHumjQFfqbBYoJzchHwWCeWkYyoOoeFqqYyuHGIPpiRyxhFSsfcQqejJGDPpCcdBbbiBbQqISmEvIxnAaNEecTehHlEeCiIjCwWJjcHIsSVWwzQMokkLWPGMiImAaOogptOVNnkhPMwwWhwWTKkAIOPUrsFSorWuvjkWRrjFfVvJLlBxXbDsSdtTImshBTtEfQBFfcjJDBHhHVjgqeugGmqWqjcLlmEGfcezxXZDTtdzqQEPYBWeEAiIafuSshgTMzxmMLXwWMmBbWxXWwLlgGsMSspPLiNEpngGzZXXkbrWwRHhaABxfhABbTtaLoOxTCqEeDzUuNniBeEPxjJotLhHJjlwbBWTpCcPtmXpPECTaAtcJhHIFfhUuyGItfHrBbELAalUSsDikegfFsIipDEeXvlSmONnpPHqwIwOopxXPpuyirgzKVvJXXUXtTsybBYKQqRAaVRjDqwWTwGKkIiMPhgGrRvGdkvdAafFwWRFIiuyYUsRjvktTKZzCxXxWIbQdDUzzfUNntyhIfcgGhShHTNIopPAoHNnhYhCoOcsrRFoOkKVMmbXEpHvpPUCYOnCTyLfLvVMeXhzqQUUlnFfNLGaAaxLdvKpGfFCcgvbBExanNWZRFuGnZzWsKgGwpPvJnRrtTSsNaAjTylBySsfFhHYPLxXRrlpcWwYyTWsSAfSshHhoJXLGHMMmmyCciBCcrAaRbIYlLhOoglxjOHtaATFbBawUutCfFbLYtVpPWkSwJjNgUfrzwKkAXeVPwWBbkVMmDlXSsAvVglJjLuuZHxVvEmlFlYtcoONoVvycuDdVHAahhPexqQBvpPzZEoOeyzZYTyYtWwfFfSbBHyOTtaOintsHJjCYyFiHYTxXuFZZuqBiwXcVJrSfPprDUKkuxXNnVKDgVHpTtmgWtQdJrvrkSxuxxjkZGRIYZzUlhHfFLBxXbPSsWiWQNnqQhoMsTtLVxdPxXStTGEKIduaAerjJRcCRFfhFTigYHsSDFfdijexjJBbMTIiOxnNXXzZpHhbIZdNnWwQctXlHFXoOKxxfFfZzFNPeuUqVvQkRrKnIlmSwSsBbxoOlxXXZJjmtGHUFcCAaFbBfwbWwypeNnZECFgeMtTCphHPJQwMzZmIiQMURrEQXxGJvwWhqQbdCbqFeoOsSbEeBbHSMiYyBMPpmbLlDdwKGtTgaAMmXxEeAaJVUwROVvsfCPpcSRupoiatwxOoXEeKkWHWmpHKvoTPiIrzZRpwlKKXxOpPmMmqZbBbBvRrihJclLEeLEtIiCrRoOXiVeMqnNQsBBbgEkKCyYWwHXYrghUoOVvQQwWfEOKwEcCpPbBZjOpPyARraJMUhqQGBkYgWOaAGHCypANnZzXOoMjinlhMSLPZcSuUmvRUjFOoOHhmWpneENAaDsPwDdWWInNNnbAtumMlLUlLNbGeEFYyfBbnNPBLyIiSqWPCwcgmSstCcSsWZABbBfyUdmXxbjJnSoGCzpPsWtTKIiksSTAcVtmesxdDLJDWwHlyitfHKkEAeEzHhSjUVvuJJjyfFYoBKyqKoOblrRXxGzZvVnCajHtlxLaEUrjcCcqQzZKUNDdUsSxWLqQqQCiQmMqcCZzSsiIMmRfOEoXHhxnpoRsiQfgULlWTtwvYbahVvHbIidIiDvVEsXCcODwdYytIiVnrRNLlnnNNwaAqitWMmDhHRcSrRAaIiIsaIiVBbvLGglISQqWPvJtTBNgGUvOofHhZjcFpbNbBvpnNoDyYGrWbBkbBKUxOouRwWSFtKrWCOobBmyRyYslRuUcRZGftLjrBEebBqQaMmUiNSsncKQNmMyNkxUuDaKsSHhkYYyJjJGCcIwpQqPWqAeEaQOouksaASZumMCsGgwkKViGzYyuiQCcnljJHxIQhxtkKPWhkcXSDQwyYVLbSAGgEaHhtDdUDdCcvVuohUqxLvVGEveExzZaAXtTsGgHvnyYVwWxXvvVYBMKPpkmpGVAaVvtAgYpCcPrRgMceKKegAzZEAaejToqcswphhEgXPkKpNnNnDMmHhSZFfyYpZkKZoOzzPpMboOBmPyAaUSZHcocrFRKktvlFsLUupOEqZKoOoOFGgTfjBDIKkizNnCfbwWKkgGecAaHZRrXtRuUrpRRoKMunNUrgGCcMcfhRryYtGgGpHGgQJjqvQWNnmGsSgBtTUueEhHUhxiIGgryYzlwWGgdDYaAWNePpYyJLkuUKhPTqvQuNMREePpnqJjQkKTjcClikNzjRlTbxXBKQOHQqXDrZNnzUuZjVvmGimMdnntThGJRQGgFUVRfaApPFaBJFiWLtyYWVtpoQqrRbsSAScDElnTpOoCqjJzrmxpfivVnkKkJnJGAagPjPUuGqvFRmMhvzUuvkcjMYJIKkLlMXgvPdyYmwsSWgwuvylgwFTaAaTtBbGlLuUWVNnlwWwcayYAsSIewWwWFKofbBFyGgYgGGeEoOZzgMLNnLpFcCiwWbHFwkdfFDMGVvWwDdKutjJThjUysYySGdeDxWQwWqXxrRrYyeEoOFFDrRxXyYdmMHMkGjNvVnbhsedtykqkBqDTtufqQqPBMATtBgGPcCrVyYSWBsSbiFlMEsRraAuXdDduAtYKZwQUPZKAEeUYyuUrDdsSRVmmMERraAlCTgGzZxdDXIiGgevxwhMUudDkysVXGWfQHotTOhSmjPWwrtyCHlLbbtTBsSpQtHhqQCcCcsjoOJBPprgGRbRxowWwXBblLxWSsHhVZCCYyUUuCcbHhjJPbsSFfEUuRUgkKGfmjNMmZTtUuzdDMmIinTIiYykgGewTxlzPplenOosaItDMYgGycuqfxqXwWxDEYyVqtAnzZfyYTIiIpPRtBdkKDlLQqmtqMNLlnPCsZNKSskFfoBbcCKkFfNnlWIiiGgeoOEWgxfFeKkuQOoxtTuUXTtBbOhPJFKkfjQqpLlOoPKDTYEemMklDARradLSIcCiwwPzZpoZzRrCLlgGITtiaAcpXBjJiEegDYyelicxXiGZSslDMmdtTLURrrZtlXWpMmzuxXYynQBGIgVZpPnCCcjvVKikMUdQGUlCMUMqJjQmVvuPaAadpFTtHkKwJjzFCdDKOiegKUlLkRrPhjsXvSoFdsSAmMYXdqcuInNiIkKPpFjTyloDByYbBbKSVFNQZzHhFfHhDEePpzTqQhHWwKTtktRZztTkeryoOooOOYOITbxXQqVvxXPpnNpKnoOHHhqIiQoNxBbbCccjJDUBNyvVYwDdCcdUIwWikbUgGQVcQkKbuHhdCcoOIoTBILlilHdMsLlmJjiIhzjJjzFgXfFYhVXzxSWITtBoObNpXvlfWaRrhakKIifFfKaAkoNYynCcfFcCzWwGLFKkfvRSDrFfxfFXfcaAvVWwriIaLAauZGLLOUuoXxcChHYsBpHEfoWwaJyIADXIBLOoyYKkLFPdlmXMnSspPNmdjdDJoWyYNcLmuElBbKemfWIPKkdTaAtuPpUsIjbQqWEebBdDeaLXroQbBqhHhHGgVMmRQmMsRXxrAajnWwpPooWxOhRrjJlyQDduEgOoGefDdXhVSxXvXxKBLBVCclLvbBBwUuMyYDnQqORwTtsSOodgLlGIiZDWwSXjeEXxuUbfFBNYnJEKsCcqQSrFRsNFfTyYsSYyyzZNnzrrUIiuRmEAaeUbBuOdtDdWKkXxNcZsEeScyYuUCKfSpWfrMmGrJDvTtVwstTNZzYyncCPGvVrRSvBqaAtTzvgTtFTmPFCsxKgbSszaiZKceMmSshVJSANPhIDdkqiMrzuUojmMaAJmsxvVxXVLOolfZzCFfIPpykkWwKcAaCcNgLlDZzhVKcCuUFvVkarRTtMeyYuUEjGgHhchPpHPhVKIrBIeshPbkKNZzymqNlAaBbKXkKOGgMmoPgGYjZUuznNJcCiwWLUuMDuUHhdmMqkKHEMmGNdbQCctRhHohHSYypFIxFfZzyynkhmjOoSwTNhJjHuUlFfqNnQHQAaKxXLlVnqiIiRrLyeEpPNbBOvKcCkUyFRrLlfKwZzgPpgGNnGiIjlbgyYPhPjJQqKuUAMmOxRZVvPpbBAaZzmYEXPWAafiIgwRoOArJjFnNfVcAaKGgQsbwWSsuUIihfFiIZzAEAaVvHnBFuUjJSQTtHhlDdWwkYsWSfhfFkLxFmgzGgEpubIMBRrMmjMxXWoxAmMgiOoSshwIiWeEHIGQqbTuRrtTXEfFhZZCchUvzpAbopPwWEGqoLqvNfFZGCFMmoRpPzZrOMmwLQnBbVvWKJqLlQHhgcGggGjRmMMmrJoOjHdDFdDEJGKspnVvyBePXFfRvWwcbTXPpQgJgGWKkSJPPiIpATiItRrbzISAeEaGmZYyzMpdJjfSbBpPfFGgjJGuSssKkSETtnNsSfFhHvZmmBUuJHAaXLeBPpnNPiCcRDdQuUXhQNIivVnGopmMWyeEcyYXZziMmDHEeeQeERrsSUbzaFfPpAvFTXusSdGjtsScCEZfuRYrhgGHhkKTtzZwFsSxVTtVvNnngGNcxDdhiIHvyYVpaRnRxHtBVHhJticCpieELaAUuQLlqNebfFBxXKUisECcFfFkVxXWVZEZVTtfTtaAVKkVvvphOrWwBbXeryVyBrRtTGgAyZfFvDsSVKhHiIFerRduMmHhcWwtTAaaRrACXyCKMAaFfnNVsSVQeGsvVntOfFoIOohYfXxJUujergaAGpooOcCnoXxyFKkwWUVgGlLjlPgSutagGBbAYLzZZzRNqHpPXKVvoCLxyKkXoOvzZuyYwLmWwTXFuURrhaRIiPIxXJjQqxecRFUufsSsWEjTVvfsSdkyqQYWEaAefFBswoUuGgQNGgnvVZKeEFubBVPxXXCcWjNzZRrKdeEOFAaRrrGvPpFTIwWvPIiwgSyYsFmQBtCJcCsSBbQEerRqAaDgtXqQxJlLGYuUItTiOoisAaXwWPDykKoiIQqbBwowySRAVCcXMyGFfxXgTEeXbOwWoVvzZzIiZfFeEZgLfFERFdVNcswGXxbBmMkKADtGUugHKxoQxUMmucycsjoOFOHFZzutRrVvTQZLsSwWHhqQlqQCHSsNnrujJvVEKkmZRrDdYdDuUamMCtYktKkTIRMqaAoRAaaLmMHnMmAaasZwWHbBGgdyfZzWntTsSEmMeXxKkwjJWgPppOskNunUdoMyYqQLwMvFrZyOGgosotTZllwWeEickKBrSYCIicyZVOLMmlpZnuNIwjJWiwbBnflLFzfHhFNSfcyLldDKQgGExXeGCcqOTtuULlDeBdiIsSZzDbSsYszaAvVRkMYFBbJWBQqqQZZwxXWTSstsZJJjZzHIihjZSmzxXZJjSshQqWgdnFYEejmMfHYwWZztTgGEcCIiQquUrDeEvFfxNrSswWMttIInNkDIfFNsSpAbErRvpPLarRzXtTubqtTQXxPpiIBeEncRrCcyFOGQCnNcqDdAaGgkpPrUuxQUuEjJeqaQqIiIwgGAmMhmKCcMJHhiIblLtgUgYyNojJIJaNfqQFkPWwjJNJgtTOOcCoKGTfuUFnnNOAarRjAiIaJoDLwWCclpHhuFxaOoAhHXiInNuWwUyZsKZwsGGXxxXuhHyYoOUPQnGgOoSCcsxSkIivzZdGgUufynmrcCIGYUuyIqQRRjOojJwDJjamzNnZDNndLHhtTvVCoabwWBUarpPsknhvhLFDHhdflQxXLRrEeOecSstElNeoOZBcpPmMCpnuZzkSMYylLSGNAzZwYNBbvijzKiZUSaAOorWmMsBTtNvhQqxXKbpDMaVhyYHvsnbBfFdgyYeJFiIxXsYyMmWwyYGgyaArmBbVvJqUuQoOzZqRrbApmqjpCcPgehmMDGsSwMjBbKBzZIjahHAyfFjQqHlcCiolLOfUNAvVaAvGfXWvVifPeEzrNIieeEqJTtoOZCnImNlLnMiogDfFdXJjxsSjJoOymMYTtoOskDEeEncCPvoUkKevVTkkBVbPpBpPsSmlqGoURmuUTmyYOkMTuUdPwXxWAlXzZziEegsSGOjsSJoWwHsfwmBnWwJjiISbZifFtTElmoOXxjJYADzxPTGgHpMyDdrYSRrsZYywjoOJWVCgyTcpRBbMUumIzBbqqbBQhGcCrRKqWifKxKkxzZJEuUcCepbBVvQFoONUHvVFRFfnsHzUJIiGggzZmMPaWwrakPpnpMmSsPFMqEJjNFFfpsSLTdAaeNnfvcfFjqQzlccCCftlSTtFfseEzmQqMuDHhdUuUjJZSqQlLTcCpQqTtyYcAaXpUJBbjxSscCTtzZRdDbAaBdKcCwFfmmMGpPgGeIsIxXgpPsBbSvyAJjKkZdNOyWwGUfFecORrhHRjheBniMHLfZzUzNXsSFFYxbBHhXxYBbroOoOOoHhOriCcIMRnPWwgGWmpPILPUuyYlLJjRBbqRYvVqQySCbxXyFLpKkPMYhgxnNXGEtSsTTWwrEeRtFCcjzMmMZFfRpfFBGgsTnpstTSJjyOQHhRoOvlLAsSpzvVXSSMJjyYAHhfKhHQqsMFoOanuGgFJjWLlLlVdCcDkiigqqzWxXYynNwLnNHdHaGVYyvlNnpPoYEeynktEriIgUDbHXxqTtoOZMIiGQNnrReErCfPpFwWRrcRquUYhAeiIApPaEnNrRaHEHhevGjSsTtJgVFholXTZzxXttrKdDkRzZjJsbBSVcHUuhsqOoIWwPqpFfqyYwQHwQqWfSsAagHwrxXRwerLlDdRzlLIIQqiiRwAaxXlhHnFrFfKJjsjuUzGIiIddDvlNnLgIigVLUuAaxlLVPVuPnQqqQajDgGllLmFfMSPGSElHkWwNnjrklLSsJLYQWwHhqQqGguSTtsUOhHkKUakIxRrFfXjszZKnZLsSLwWQqSvCjuUJHwtyLcClLmMGgEezUgqDlCcoOzZrRSmbBMsfFfeEwcCCcvVWFKoOFiFOoChDdKHhrRnNkHvVejJvLZzaARLlgGGkKkloOPbBpxKWwkKkcmowOoBPpOoqhgGGcMmpxXcAaRrIiBeaAKnGSZzsUWlUXOexQqsSXWzbaABZwWBOmMnuuUqqtTXwOoZCkKclVemMcSaFUuYdOoDyfFTtSsDcCGIjNnuUZMHkKIihmijHHjqQwWJjcCNnBbTtyNmMnOohaVQaHSshxoDgHfFducCFONRflmfFMLESVvJjsepPULlsSgGKJEZziUZzGgZnUJOokjHhMaAcCmmMHuAaqMtzpUIAufOHhhgPwXxcTtNnXxXENNngpfFMLnNuUeElmpPxnNGLlvAjJhzLRUBxXttTTiJIuZOYyuUZyYyYAaYcCPpNztToOHhOtTYzZAayUutZyYXAXqQNBbnxaxGKAaARXxOorbmMffhYEybYyqjapaTtsSAwaggGfPpbBFgFegBbeEtTQFfqWwmIZzNRVvVvIiyYhwyYVhCmVfFvbwWiQqinNICxXQqfFWwyYcCsSvcCVdbBhcxIirIijyLlDVvBbdaAVvAdivZzfFwWHRaCYODScCLltTARnNRrcCeEewYPEnpPNLEzlLLiqtDWArLEhHPtTBbyFBxPpwWGgfNIiyajJAYYnNynFUDduSsjriILlQqbBYFIRrMjDdncCZsMvvRBbrVfFKExkKxRYlQquUcaAvUudWCOozTVWwBresBCcpKkqvVQsSFfYNtjFfJbBICcwWiEeMmkKTtgTttPXxlLISmMsmVVKkvvVvMsxcZaCffhHFFYycLLLlkrRqcCrtTfFFMmfCuJjUBbdDoOCcEeOEdDzDdfBuUaAbGBdGNngesVCchnCczwrhssSGwfoOQrpPRRraAqTlLAaAaNoKjwyYWRRBbtTOoisSXxlLjMissCiiXZcCxGgoOkcXOoLlAabfjJEOFfGgVUCcuMFGTMvVmJIijyzZTtvOoVZzvVbBmSsleEOobTXxfPiYyJeEiIEecSMmQcGvVPzZGNHhCcOjJuEkgGzuCcmDZzvVOLloALxdDDdenjiOtJjAGgmunNmWLllVjJvRrIkKhSsayYCLltTCBbVvfqQEaHhXsSpNfFjMmJyYnxYmFfxnNXMGgTtsSyNnhHWDiIyoOYyKIiUMnWwnlXUuxBbVOUuoMluULeEmXRjGgJJguUGgxXJjwSOoVvJjpPKMJjhUuTkjcJGGgxZWwUvfiISCzEuFrtcCezNfFRrGosSOPeMOBpFQYyqzbSsSsMTdDtcCmPEeMzZmjCcduXxUFfTtOIiotTcCCJCMsJjLvVlCcEJmyUIJPpeAmMnRrzzZuJuRQqrRaArfWSsWOokKRxMbBmuaAOokKolBbLrlDdSsFfBMoWSOoxXsaAmMpPwOCcMTAbjrRJNHPpoTzWwVrRvIjZrpTWeEwmBPQQqqnCctZzTrYHhyVPpWwIiwWsSiIfUYQkOoKAvlgGwAILlBDdbFLlrRFUuBjjhtIiJjTHyFHhlLDdoLikKPpxkKXYWwaXNSFvnXxNVrYcCyayYAhHGgovVPbedqIJhHwXxWDLlbBzZBfFuUrQqaARbtTqgGQlLRrdDdXNnCcxjEeFfoOaqfkpeEPKFTtSsoJtJLGglNnmMhzXVcCMcrFwnNnGgSsImUuyYUuGgMfFPMmpMAGgdDawtTWmiYyeJjEHhnNCQqQQekfFKEIkxXEWyRrzVRrvhHLVvlUIgGiuBzDuuUFrRfJvAaTdDrlLYevDcCnwqnXlzZnNnuUcCNkdlLKkvrRDVvgIRrnNFlLVCcnxXEeNpyOqhyYrRDarcCuUoORNnsSfhHeEYJjHyYnkKeFNGgJHaAIiprRZjpPkArLlrjUGzZgEYlvVSsWOoZmVNhHkYyTtKqQEeueEUYtTMmXnEeNPpvwWdgSvVsGkKbqQqQBDFFWwtTipKWKCLlOTtTwSsWrKlzZrRPpbBPCYCcyZpPzchHEaAvSsyMmJUPAQzRUqsEDfgRroOHGhqQKCxXclLkHBbljJXjJFIwtnTtNpAazZPrxXpxXDdkNnsSQAaAPmxXfWxTtXlLwlfSsTtSUMgYvVTgGtWwhHgGqeEAGIOoiAKkxJLTyYiIZHtjKkJzqpPrRQPjtyGNcCnhHdDrRIpZzSNnxnrRlLoONXsTtsSQPWfFRuUNQZFjklLppGUjJlUujdjUiIyYsAZzaCcuUAahHEeAaQqAUhexXEFXXWwxnNnNOoruUcLbCoOlAajrRJDdYyLcBlvWCOoEeAgvVvTtxMgawWSsAuULACzZcnNEeUtCSgLlzsSZGsfWwRpeEgGPwWIieeEiIECcbEeJtTjpNnJZieQoyCcUuBbTtYlZzgGLcMzDdhkxXKHZGpPaADfFdaAsqQKuUZuUuCcqvgZhHaqQydDxIIiVvlQqPFfSJqQhfFSTUqQucjJCtBbUPpIJjeLMmIcCiiqQvZDGTtyJBvbjHhDrRWedstTdDGWwgnNeKDdlobfFBOhwWiGgIiIyGgYLzZVCupPBbNxSlLsEsjwnuUPmMyYVvdUfFCcjHuUiIrkXFYyfLyPpYlWVFokblLBBSsbKZEBPpakajJXqQGSzsSZiIsgCcOBbTCvVmOWwKkpPokPpQqdLvfFTKPpqksIXXlFfaAGgMmgwgGkKacuURrCypPDlvFghcdnNwFfzfPZqQzFughHGGVeVvyYvmAaunNUkvVtZzMfypVvZlLhuWwUGzmBiIbiYqQxXjFVuUbBEokKwdDyCxXkhhHPoYUuyYWmMAzZVWwkQqnICOowWuBfFbwWXxGgAKMGVUwsqQtTqoNLSTlLtRtTBUDeEOojJtEOoeTdrRCGgRrwnsZzSxbBJAKkNneEgWRrwRrolDPShHspfuUgGcLLDmOoHGiIFvKkedsxvVXvXvVKkRrxOoBbbMqIiBbbBGFMmVmMvnNfRrMchHMgGQpZzMyCcYnNGgvNpPpqZzqUuYWwlLPvVzlLZxFfXbeUBbaAuPpPnNLOolyYlLTyuUHhkTtUuxgcZzoOMmgHpPhLITKGgktUupvVvVPBXxTfTtRLlcCrjJKpwWmzZgwMmkKvVxXIvVDplROoeqlLdFfDQLaAwhHnZzOHhPpZLEeVtTvWxZzZQqcCnNAZzddDBXxmMigGVecJjVNUBXTxYQWGgwvVOoqysvVAYWwUujAaJlAEAataAVvTBQXxqRrbmxnYdUuFfjJTXxDOoBqQbzMsQgGbLyYVPbpPTgQTlLeUuEtRrQSoOVvNWUuPMXxJGqQgTTtLiIlJJpPCiAMPplDdbdxXeuUKeEkYyEYyjJZoOQiIHhYyWCcwGgNujJoOwWKkkyYfFSmMmMSsFuUNGgnIifYcXxfAaFiRABbjJXlObBeEozFfhuIisSoeEOUuMmiITtISBPpbEtTFMmfmdDXxinNIUuBbyWwjWwJKkGQyIiVvYKnbBvTYVvuLnNrIqwyYcCjxwhTuWwUuYBbywWUkeScuUqjlhxXgdDgfAaqRrQsovVrGgdvNgqQjUuJAaEOYypPoNnbtTtTHHROOoiIiVvUJaAxDdHQiVvGUEeuEeYyjJsSZzpuTtJldDLCVVvvLDWthRrksIfckKuoOnwAaWNnrRvItLlTtTAgzHhZbTZzrRZzgHhwyINHSfvyYtAaUHpPuatTAgQqOoPLKcCDSTeEFfiIsSFNPDdknjCRrdRriXgGwWxQeeErbKbBkBAacnKkNCOhhHHcCuJlYdzPEaAeuFsXVvxSRrfUDdwWeKkvVrRcOLFWPpEewCYtmMqnaAMmNhgGAwWaIiHxclacCUuvVAgGVXzPhUOoMwWmdoIjJuBDXxWdDqQePpEwFfeEZOnNkIXxcyFAafaaYlPyBbvXxAukKfmgIizZcZKkWwmPpaAcaSsALDTtfFXxYxFfNFfsbnNJjBqevTtLlDdLldDwWSkKYyqoIiSSsODUuIMqQwHkKajJFfjCcLlOdDGIiSsGggFvVfoGKnNKkyYJuRANHSsqDdMrRGgnNEeMibxKDXxVhHqxNAaaAnqQWwKOLlokNdDpcSYyvVedGkKIjJDrhHMaAFoOfFfwWCPpbPphHBPTtpcwWqHhKEeXxJjQqAzLmePUeEJIcCHhiDxXdgGIQqBFfsSidDcpBjgGpTMDVzZnNWRDddDVvsSeNAbSVVvLTenNEKkCcvJOoepPiIiIjJrRuSsBgGbjMhHmjJgmivOopIincCNdnNcLTtlCklCcxXovVOLRygGeSskKECQqcjJPEyYeaFfubBUMnyYrUuPpmMSsRNPpnqzZduUDOXxoeEKayYEtDWoOwdTeXxdDkZzLlrULZzIigPpVvGGgwWlNrRJhHjDZzWPiIUuUmyyYHhctfCVOovKVvfbuUjJBFjueEQEeqSdDjUmGbBgGTteLlEJjgUmMHTthEiqQnNTeVvoQqdiIDDdfBbrRnMmxLPplCbBcCZybYaBRukKXLRkFfKryQmiItDdZzsSsSiIFfRulaALTDPpRfTBOohHSXxgGfFZzBpfzZXxwPpdNwPnNpbBWvBbdXxfFDnSrRsRsSrZKkzXEexPpfFOaAQqFZWwLTtlWhGgAyCiIFDdZzbCcPcCpfKzZdcrRByYbxAaznNZpYyQdkvVTUDtdJbBDQqNnValLlLVvAtBbIgGoOiTvdjhHDbEeUuCcKznrHhQSJtTMYyNnmPTrRBbPpqQeWEKPpWNnQLOoPpzicAXxzlBywgDdOoQZKkYqDdQvVvVvVPRrpPZVPgmMfsSFGSjJcCiSEeCcdIpZGVNhqnNQuUHkKrmCcgAahMmHGZRrzmMMeENsSZzjfFRkKknAsiDSmTMTtmLnNfdDIicCwvVfAnaAfFNmpPHhnmFKWUYyuRroOFfwCcTtrBbRgPptTJQDlokbUearRJjjAkMmKlIiwiIWKkLaJgdDjJTLlXiIBdKrQsZzbmMzpPZBSUuYyCcpjOoTsQqSogGOgceeEnNwrvVRYyTtWJqhOojJIYyvvtJjdDUOgxXrREhRrMVvmHGsSEesgGSgQiIPJhHYwHbsSBHBhHuLlgGijLlEeJXTtcClLZzXbaAHrRhFEesTtpPzRUMmQZqQDQqgGYVvyCGgadDBbAXxNnhtrkSmMsIzPPpBbDdoNBbnBbNvMmVnfUHhuFOoOpQqRgNgnEGgeNKkjEkKlrKkqbBQcCRzZqoOQLeotohVTmMtEsuUHhomMTZzcBrCcRfRYeEyDBbdrQgGaIuUqQpPhHXxivVQhHeEJiHFavVMKVvFeEuUlASsYkiGzLlkEKkeOoAuoDdQyJbSuUscziIwfFJgGLWQdDNnVvqrRyYymKkZzWwMFHiInYyTvVXxtTtfkKFUukeEKyYIijiSbBlwWGgRTcCpIqmMQvViPOyhsSsSHqeEQYyYARrXxauUHhrRKkGmMgZwWBbZCcIYZIiLlHVmMvnFFDpPtMoODVvdMUVvuQqlmfhHFepPGvVNnRrEegFnNcChHnNfNnOhehHETtHoHUQebIixeEEvVLBYyTtefhmMFCcfrRlLuUTTtAzZvTtrxXdVCQqcHhvPpDeWwCcHhEgACGgjJFwWecCBbEfMYWwwJjLFflZbBjJwWWfFTtNhHnwtTwWfIoFVVWXJzZuGYlLZzLlyeEpPgQqUDdjfYCGgTtIZzKyYDNnvVkKfblaAhEFtiwVvWIUuZtEemMVvYytEeTTkpPlLRAarjszZYyzNgJjGpPgFVSDLloOIinNRrloOTtJjbnNkKBVdDXwWNSsphuDdUHkPpBbnTZFrVdDfCcFvCcbZreoTEemMwWJeEjEZVvsSAaSFNnfyYzLpPWzqHoOhuUQecgGfKkFLWaARrIOoxXyswWxXqQpNIisBswWAaRrchHCSbXErRwXxWeiIXrRQcxGAusSspyYhHMmPBbIkvVKGgZzlLvVuizkKvgQcJHhhHjRrymMYEdDeCOZQvVdKkDqkBbswmMWSNnZjJuUFlIuCcFWwvVfUpPiaPaOZBWwbGgzQiIqjmLlLIbBYVvyAauiIdDjpPJDdiSatTANrtkKvmEeuUiIQqVhZqQkgGjmMJwrAuUaFfZIizYytxrtTRrCXcCjJBbsrhKJjkHTuURrtjZzEPZhHzpalLcCTuUQVvVIpYWAawfFefiuUIFZPpzsSEFZgGwiIWzBAtWEewpFHhfPKDvGCcvVOXxoTJjezZPpEHVvfFPuUnZzgVvTtamqQiFYsUmHhsYRryJWwIjsSjJKXxOueEUokKENOQqoaAnZzIRsSlrRWpPAawqQPpLEWwNnbBcCwVOaAoOozZvVnqoOIitJudiIUALlSpaAaWYysSmNXyYxiIjJuZGgaAEaTVNnuUAaNnBsvVZGgyYqQwpPiwWAaIDBbCcdQqcCDxXdqQGkKsSmMkXOoWUumMxXeEJfIKTmMuUxfIiMVvMmyYCcoBVvPppPbOVAhEcCeLqGOceEOonCMpjJkKTbBtJDDLwJEewWiFlLDdXxzfCJjYlLXUlgGOoDdkgGKhAaZiIzOvUuRrQqrQGCTtcKIQqihtTiIgHhGBbHCcMKkGSeEFfjJsSsSsCyChWwHcUaNCISsiuDaWRTFbXhHIiwLlFYyDYHhydfLsqQrRFxUumKrRmzwDdbfJjUQquKkFXxdDLlRrWwNLbRYyXlLTMpPpPQqmpPCcrsWwrRSggGwskKmMbBgMmwWwWGHhSiIrRWwmZzMXxWGsFfptppNEZeuUEPpfFpqLlEEONUuFqLTtAalQfsHedlmMDRCcLmMIiXgGuXxUCoOWkKIiZNuZxXzDdSsYKfFMmQqkzZRZrRzryHBlSsRQhxXHGgKQqkMmSBHQqdDOasSMmAohVRrvtTTtIwWwWiwdDSsdEeHZAatFfWgGwTzElZJjVlbNnwdgmKkMydkKDYuUyYGvgGkKVEekKrnNRCjJcAamsSMDgKkhPRXxVjaKKoOPHhXxnsEeQqfTKkELlFgGdBLQSAaszpFdDVQxXqvVQMQqeEVUuOoQWfciICEeFfNnGbbBBduOofFFsSBbqQrRfNBbnUnCZzczjJjLplLdDquNnURrsSdAxuUXtTaDtrRTKntqQUuTNknHEkKFZzfSrXxMSrRsSdcPpbmMkKTtBbgGkHEehzZGscCBiIbjJwlLIiWPpSNnIwWieDipCOtjJJjVTtUuLWwlrRLBblWMsruHLlFfhniIkSsmMUPdDZzwBbNFfSWEefFtVvfFzZBbTdDpKBsSmMsqPpWTCctqKkQSBbBqNnfDdFmYymMcsTtyYbBskKuUQrNKknyqOfFouUBxBJcCkKSUYTtyTQHTHhtXxATtUTtFfoORXxuiIUaeMhHHbzZPqXfCcvVgGFrhjJOaVdkKXxrkdOoDpPLfBbnNFeQqoOxeTdbBDtjlEIWSswiZQZzqPKkXyYGiIgtTQLlqxIifWeEwTtiIsSoOFGDdSQqsVvuNTtFXjJxgGBNAaYeEExXlLPpYyHPphHpOoPSTKBbxXzZfHGEFfemFfBjSOaAQqajJsSjZqQBblLLlzdDhHIiMDiDAlEyYtsSRoIpfFrnNjJRPlEDYWgGwFTtpPgcKkFfCGjJnCPasSALtTVvfFnkTubcCBipgCfuUFcGSslLVvFAhHfFazZfFfFfAdNnvTtNoQqzZDdOjCcJAdBbqQnNdDDYyODNdoODndxzQqZBvPxXYyGgEepVbLXxDdZdGVCQwWtTqcoDYzukAEeaKATHhVsSoOydKLlkYyOoLGgSUuqkKQsJjWpgGXfFxJjlxYyRMjJqWwmMyshalGgLAarRAkKHfWwrAtGXxbaVvAMmaTtgdDGWhBbHwoOAFjPpJfEehHGgVAIGoVBevVZzENncCLlpUsSsSuiIPMmHhTtCuUnpPpzQqZipoOcczZCLlYbBypDyiIqQRLlrOocCBSqQqWwYmMEeyylLYjfpyYPztcCyOoYgGTyaAYbBIzjIXnNxRVvrRIiiiwWIPpgTHrRxUrRuHZzKkfcCFhHhpPyYNnnNjvvVSsVSsOoRSsrJHDdLrRlfFiINnUjcpPCHqQbBGAaGgMdDAFcCvVhHfGpPgaxXTtsACsSsScjJjJsSaXxPpqHXCcwkKsmMSsIiWnNwMmssJcCdDJIiAatTjGTtcRrtuUUiRgiIlLGWLlsSoOQqoOwrJJjdfHXIzZuGMPpmgkfTrRPIiSsiYyIUurRHhJvcCeEVseuiIvIMcCnNmgCxXcDdVvgXxGWDtcCTOodFfCMXpfiwqYjJOornNkthHhBbHmOoMKKBbnfLEeaAovFfGghHNnlLweEjvVmMHhwWgGcbBCMmwWMUpPuljmMJBbJjLLjvVhtTHMmJmGgXMpPmgZAFSsHhfoOdFfDnmkKjhHJZPpBwWyYEeOrAaRdXUudDqQIistiIYyTSRcCrsFIpPpPTTPBZzZzpEefKkxsSXFRrWwnpPEeTFftlqQOosdDSZzLImMiSsdokKOIOJluUWnGIxXjzWwcPpBbFfCOQPMmpiIHzZgABIioECwmMEeWjJoAJjaoxXmUUuqbTLWwKjJkltbuUGgBbBgVvhHWxLGCcOoggsSLlGeaKCQJjNqRRGgQqlqQiagGUBbFsiEeIuRQqgaTtAPpMEeVQPpfokKpXxfFcCbuMhLVzZvWwlVKbBkNnPHQqzseESiSCGgPsfFsWwSYyJhlIiLiIrRHjuwWUfsgGEUuvVAsPkKaGAaqQQqgAWwpiISTtLlkaAKTDdHhNnSoBbYlLGLlkKgQvVEpUEeyYUqQuoOrRsJjHhiISuUpPyEeYQFfquNVqQvvjwWJOqydDYpPDdYDdwLqurSkKEMyYQnpKfFHhzZkibxXBIyYJCcjJhEeGrMZizStGSsdDOOIQqqkvVsiKBpPbVakKgGIXxijJTtXFfUuPvVxhZnNHcbBsSChGbBlLNRrnDdjUuoOmMcpqhtDzwYsSfJjPOEeksOoofMmFOAKNnkjJaRegGEPocCOMtxXeEEeiJxXCXxcxhnNtissSdDsJmMBjfpPVvVvRTzHhZbBQqzZOoFfOAaRrBbeiIEfFBRrkJjKZgOosSGGShHsDdoRrOSsRrrfaARpxxXXJjPpPMBSqQNFfnFqsSyYNZGEkKLlDmMEeqQJjgGdDpPBhHbKksBbGQqvTtgMmGozZkKzZAPkKlLpRrFhhHHfLlIKSsoMgGgGtTnNmvkKLIpPBbinNmJXmXxOfFhfFCcfLtuUTrmMwWRlgrswWlLlLSYyKMmIiRrsSSskYgYJjyHhgGGeEprRPpErRePSsoOjJAaSeEHhsDdfAaFRWXEBbyDMmjQqJdLlYmMRhHxbBkcCZzkhHKLlcCBbestSsAKkgGMmDnNSsqQlLdaxPyYpFfXpWwBVvxypPYQyEeJjQqwWNnYEeJjAnAiKseErRdrWwvRrhHyGJNEeyYCZxXzHhpKkIiqQEerxXihHxiIXpuUYcCoOyaAWVPpxWwQjJHhqSsNYyDgGYysrRmwWwWvkDdFHdDhGgQqbBnnZWOQqowTLSVYGcLJOoLlbCXxyRyHrXxTNjCcHhJjtTgGhoOdKkrieEIDdRClLAGgTlLuUtaLOolrRJjoOyPpBuKtzZqQTUpPpPukUYSnYyraARIiKkNzZsgFfMfFmRrRfxyWwYAXxabUuPQqfFZdWlLFmwaAaApKkPWKZzURrkAaeiIETMmMuUTtmtxXHhAdaMmfOoFYseTXxtUubqQtTFWOowfgoOGUupPLliKkYDdysQqoNnOrRcCbpPXaAxVvBDHhoOZhHcCzSsqdDQvxsCQVvnRrNZcOBbqTONnXRrPpOoxiIaAJjUBbsSUuNLLllFfoXxOGcChHcMmLtTeRrLlGEeglZzpPNisSITNntvVtUuTvbuFfhdqQkYykKKXxDejJjjJoQqHXNUuGXtNnaJjeMSdDeEgquUEcgcCjhHQqKoOJmjJCcZysSYlOcCoHhLSeEaAOfxXFoxXWwzZPfMmwWQqfFaAIioOEeufFGgFfcXGgxCEZkKVLFfyYlUuvtTIiGgiOkKUrnkKNlLIuUYmMywTtHhKnULluNkdmfFdqIidYyDQwWeEoDMMOOaAWwsSoeMWwDddDDdxXIizZrRJjavVENnehHvHhbBKPIiUuTIiWCcwWHhuqQMmyYIzZysSYiRrmFcCfFfRrMcKhHkyziDdIyJjJFBXxblLBbDdFsvVimMgcCGCOWwBbRFfeVvEYymeEQqMQqiIUuHhkWcCTtuUsSrRmUuMVvxVvfFXTgPpxXvVsUuSRrRShHHPmyYMpEeLlrlLiTteEeXxwMtXxsEexXqDdUuUuMmGgZzQhhHNkUpPcXNnxdDCsSwoOWjIiShHsgKjoOwWmMUXGgxuZzJjvVzkKnISUuMxAaXmsiliPwGtTgWmMwWJKkkpPxmMXqQEKXxXxfenNEFkMmelLvIiwgGyYJjWHhwyhTtHoOUTDsxXmFfaFfCcPpsBbSFaSVvsAPpKkxXyYtTiPOopJQqoCqQcSsVJjWwjJYyWQqwPppGgPNfFZznPjJpywDdcCTtOokKLlJwmMbBcrRCzRtTpPAarZSyYYyeTMmqbBZzhHQqHhdKkDychIiHLyYJnGdNQqnccCCDgJiIfiUXTttWwKkgGtTStTsXrRxmlLMyLPhHplJrBbtTZzRGjJlIFfioOcqQCLlSsLaNnAcCmxXMJjCHZzNncwVYyoOGPbBnNBhCcHtTzWwYyZzZHTthlLqQCXyYylLbxXBgGzZclCxXohHOnNbGhoOwYsSCBbYyXCBLlwWpdDPFfbcCAhHaFcpyYPiHhICFeEEzZcCdqQPmWwBblLMAaeEgGtlazZeEwWrrRcjJCnMmMmQqAaTUuEesSteEiuUsSxXPpIOhDdHoLHKYyWaDFfdAcCNnnNQgtuUTyHhYkZBNrRxXAaRrjJBbtTCcOokKnUuQqZzINyYuzZhkKHNnWwuUrcCRUxXGLlEeoOGFPpfwWQrlLRnRrNlNnxXsSLcqMNnmQnZxrRQqIHhiIiTtXPZzWqQwKfFLTdziLlDdLUulIWXxwweEbBWMmZDdmMDFnfFKhkKHWwIigMjJqhHPnJjxkKXdMmyYmWfFCWwceECcqTtRUuRrmMPjsSJXximdDsYwWyglZkKLUulzKkFkbBLYyxdvVuUKkDIidDSliILsnWcCwNuUXohHjNnJqQNlaANVvnDEnNvVJjQqPpmVoOvyaAAlYyLacCNnnPXFCcTbBIitfrcCexXElLvVweEZkuyTtjHMmkmMrRMmcnXtxXTBbsSxwWZzdIiEiIAaHaAhHJlLUujWvVbBhaOvVLlBbIiSspPopTtPcCcCBbVmMJjvEHyuUxXIiJzzZkKAauUtTZnBEedDbMWQqwmsQlLqTtgPpdDKkGTIiccamVvMNjAtToONxXBbCcnaAtTHlsSLmMCcjuUJHhpPRsSrTtBbAcxXQqdDCEepPayngGNYeEskbBRrRBbILlNsPpSXJjvVxCuhDdzZuUwfrRBUuYybAIAaivVcCGgaGTtgxTtXfvnNVpSsGPpHhgPfFmMFkKmtxXkKfxXMgkKHjJhGzZaAmGtNOVvCcrkQTRrtqKdDLltTeETIDAOoadDnnNNPpdiUWqayTtYAkKTtmMkKfFUJyYwAaJPBFXlLGTnNlLuUtYypELleewWaAjJYzZysVkpcCPlLqaAsoOkBbrJjRKMscCjJSiGgImSoOuVvmMCcjYqgjimyYMILlJMmEebRrXVvxiPpuUIJjYyPYypIiYnNPIipdQqDyoOVKJjsSkvGgOobWwBVEeFfmMIBbXFfDrRKvDdkyYKZzdDSiIOoWEBbewQgoOBKkaAoskKSFfEaBbAoOluUtTTkKthrgGRwzZWAbBalyYVMZJjztdDXXxxTmfFSsSsaaAoOrRtTVvHHhgGRriIhAKFfXxqQkdDOolLEeTtWRfKkFrwvuUvzocCODcCceECdXxsSYbBZzXxmMGgkKTqdDQlgAOoJjaKuhSsEeDdHKkFnCcQqhNnsSoqJovVNnVvOzZdDjJMKkqQkKIizZXpCqIiQyYtTjKkJjJqjJIIimaAMSsqCcQEeRmMWwmMSjoOCsScsFfSBbAaoIiOIljJLiJGgAadcCAaPoOoytXyYjJxUUugGuUNnnDdNIRJNdDyYnrLJjlfCcFLlAaMmRHhBbYxXyYdkwWWwCuUcLlJjEegGrjgGRrCBbJCRrMDWwyVfAaFRrvLXJjxmMkgoVxVMmEnDTterHhVvpyYBxXtdDagGJFfjAHhTtwWUwdDWnNyOovHhVTmMbzjJZBnjJiIPRrCctTaAUuICcipDdjWwgGjZzrTOotIiOZzoWwEeXnNxMmBQgGjJOxXWwRodDYyOrCKkuUgAamqBbewwSsTtGiuWwUvEgGFAapPQqiIfMjgAaGbBWwsSFfQZXxsSOoZzWDdMYKkNnpPXdDlLUVvuhBbRruUDDLlzZddsSxXwWjAaJEeBgGbfFGgzZHMmYykKZlLGgXxsevVaAvVwWUuWwaAPhHWwjJhHJxXiiIIjpxupPUPAapRrZhHSsGgvVzaAXItThAaKktTxXjjXxJUFvVuUEewWiIuUGakKjJdDXShHCcjfGgIYSsTtyiQqFJGNngsGeEMdvVDmgoIYyJjUuiPrRpCchgTtqQGHUusacjdDJCcsSuUpPyYjJVvMcKklLQqQaAnNsJjSoZzOLlzZxXqQqvVRYtbAaBbBTyuUmMgGKGglLciznNZICdDuUkKNngGKjJdDHhkBUuiQwWfFmMcIbBXxiOcCgxXsSqQrzZLfFlPpPpmMAEeubBzZGfnNaMmAZSsYEdBbDSIiBnUumMNMmbsyVVvpTtPwWvYzqQnAuRryYHhUzZOojWdDNtTnPpuUwAaIiZOoZzLlQqbbBrRNntaAqQTvbBqbBKkQGgOoVqgpkhHKbgcCGdDZvVWwWwsKkdzZMxXUuzZvqmMQVUumDdJjOqQiIoQEelLhfFHeErRCPpcqaAaAfUuUuFTVdDHqQhAauUvKkpIiPcjJCLlJcCJjwyYGgrRRbmxGgvVXcCoOyYxXGQFfDOZzRrlKrRkFfEnNeNIirGgRnxGgqQvQqVkKQmxvvVcEemMCAauUxXSNnnNLzZlfFgHPphrRPpGgvQqVGMmjJXvVxeEaqQAsrRTODdoIieQqbBSsEoOtsTtSIeQqHqLkVvKcCnTtCcfOoFNzZSkKpPgGdVvTVvDUcCudrRtbBGxXgpPDnNdTtrEeNCcoOlEeeELUGgWwnNiUuIzlyYLLlYyCBblLNqQnOcWHhwaACrRoOopPVvdnNDbNnBzEeqQCuUDdeEVvcZNncTttzZTMDdmiIQXMUumxzZtTgGVXxDdvVeEWwfMUucCbBnUOgGoiIuwWUAGRtBbTSsKZzQqCcWwKkkGZzgteElrRiAaIZzRMmrQqMJjJjumMUmHhjJwWmMSjdDpYypPfFyYzZkMKkKMmkmkKXCcRrxLuHhvVUPpPpAafYHlLhpPdAaDPoOlGgLlLgCpJjPcrRGOopRQqeEmMjJEKXxkebBDDfFyYdZjJJIijdDzGgMmKkKkrRvICcIiiVGgwZDdztxXxXNnBOoSZzmMpyYPbBSDnEeyKkOUXxtRruUTzZupPoYycCQqHhHgGnNMmLlNnMyYAaGgnNmAQqWwjJaJkKikKIcSEeoVvOLlsLlQPpqfFuUYyxyYiJjIqQXCjyYHoOvVvVkKhUuyPpeEIiRrUtTOovVuMQQqqQqmWwcClSuUwbBRCLleoOEcfYnNyqQBBbCcbfFaAyqdiItTDQYDdnXxNiLlOoIIiJuUuRroxXEeOrRowWVvOqQTeEtpgGoZQSsqXxzeEaAKLYylqQVxXvhsSsSpWFfwiUuIbyYBPdDSsTtnNGgHkKkKWwiIkFfgGPUupvqQsSAjJaYyVrsSDdRwixXIkwWOMmRrsSSsWwuUwGkKgCcWGgZQtjUuJTqFTtlyYLcgGCPUFfupGZHjSOoLlrRhHsjgGwWWwtTrRjKzZkJEehSiIIiSxXsJjZzkKEelYyLVvNLlhauUAHeEiInsHkKHNWDdwnhfFPDdIiDdpQNkKnbbBBqPoOKiiGqQCcLlgzZDdrRGCcgtWwqRrQjJLwMtwWJjcpPCcCTgGhCcJjHniIlLNJZzjmWDSsqQNndqQMmmMqNlLnEeNnTyYuUbeEBMWwmdeEDNnYFfRrRryHhzZPpvVGgGDEYSsyedsShHSsVWwAaJjmeEMiFftTyZzjCJwWdjKkJDKvtsSTVhDdKxFEefXkqQHpFfRrMfFlLmOnNoPJtTjNvVnaYcCrRNnLlFmeEMfTlLIvByLlYuUgGGJxdDXjbLlBwWgbzCJjcZVrRXxOoeEBiIbcBbCDrRaIYgiffNaAnGZzeMmEJaqUuQBxXUGwWwwWqQWyYJeEjqjmPUmMsSSsUEeiviIjJVBbDFfdrzoOwqQpLlPIDdiWwKkWWGgwxXXuUxqQnCctThIHhiZzNjJeyYEJjBbBUUOoqQsoOSuUuvwWYyOocCpPVjJLlcxXCEehHJKKkuULlhHBOobkQqRhHDdGyYwWGguUgxXbZzBPCckKFMmftTgGWLmRrmMQqBbLpPCcOouzZUzZlMNYAamMyJjKgZzYyYyHhvVdALllLaDtnUurKkRdDNqQkKvVnDdtXxTBfaAzUuZzZKkFwWWVPENnqQqwWneEQWwMbBfFvVEywWoOYvViIeRrlLVvFfRwlLWXiUuHeEhlLEerxDVuUvdXlhHtTRrLRIbBqQisdrhHRKkNngXrRsbBSRrmMkKbBWwnaAhHDtTXxezRrlBMmAazUrRurRhjJHZdDbUarEPpebBBdDbcEeFfnNhtTexXEXxSsXxaAqDdQstUuTPpSfFqQjMmhHjJGgWwYyYyJvSsOAaorRGiEeeDlLKsSJjMmkyYdPpxXEUmMGgpKkZzgkKgWwGNdrRDLlJjnqQGOtTopPyaAqQgGaAYAYGgyYyZJjdDpPzUXxzVvlLZAbBajTtJmMEeuLaAJjLIuUillTBbtTaAtSsjfFJHFfPpEaAeAlLOOzZLlhHooOotapPKjJkUwWuMmtTCVvIisSQqSaAsNzXvOomMxXxGgalLAlLbKkBXDyYLqMmQHDSsdSsvyYVOJjohoZqQIitxXaAxXEcCuRrUcCbBeDdLlBSsbPpBbKkYNYeqQEqQynJjyhxXHHYytTWiIwYyWwZiIrRSszKFfZaAAcCapKkPlSFfXxOlLuUsHhiHhkKvVCcVCaDdzZhHrRkKfFINxXnWwiIXxivVvVAdDceEvIxEeSsFOofXxfNnFqQkKDKMKkmgGkdRSUuPpiAGBbgwgGDdSstTKhHsSknoOeENtnNTKkDsnNSdWmpPMBUqQLbKkBNnOotTtrRMmLllLTHhUHfFhbBIiEeCcOTLZRpPIJaaAjJeEAjuIWwiICAaciUCBLQJjKKkQqkhHqpPlbYWwyWKkyYEewMABbVvaEemMbBGbBJxXjgRrAQMXxmpPQqDVvEeHhvVdqyYFYyfaGgJQqjvJjVVvgBuUKkbfFPpdDhHmMGDAYyAaaXxxETyYtexXxoOxXWwRrHhTngGNLlYylLuUtnNRrNnXolLieoUuOLlzZEAamMmBbeENbByYnFfYyYXxyMfFxXIcCLfFpPJveEMsSYZzyRrGgIiTWwGOoMmgOocCNoRrOHhnCccgNKkcRrJjEeCnGNMmqQsSNnnJjwpYyPNnndDdAaDPCLgGlqQWhHwtTqxWDdhHwXjjJRrJFfyYUuNnqQCFfnNcQqQVvqOoqCcYyQCeyYAaQaAqEedUdsSDaAfFupPrRqQHhDEHhvaAajsSJAKkVJjxXGgcVvkKVVUuPpGPpxhRrHkKvVKMmMmLlfFkqTpcAaAaCHhPcCGglLVvtvrRVvHhrRVLlcgGXZTtzxyYIiCFfARriIaZzTtHhuUZuUuuUUTYytjQYyqJJAjCclLZzZzxXLlvwWhhHMmHNnpfFDdPVJjHhtTIaxXSsAOoiPpsSwyYxkKXvVWrSEesRkKOwKCjJBbzZIhHTbByLlYsSjTtTtfKkFwWuYyPpwWmMeEXxeEvVTtDdKkygNnGvVvVsSaZBbzAiIHhQCcqEhIJjilLlkEeWJjwXxoOOobBvVvVJjKVKkYyVvwqwWQgGdDvNnVHiIhPpgWLlGgTJjtwpgGPFQqfUSuWwuOotTpPhHUukwWAaMSsxXcCyYmQCcNnqOpPowWsRrSvVFIifaAbBrncCVvSsNgGfOoFnNRiIKKfFkJjsSHhCcHhOopPcEeuUCYFfYyNnPpdDyvVjPqQpxrRXhFfHhXxIiHQqhHPmNnaAzvVdDZMoOnNpomMZzTUutuDrRdIHhiZzUTfFPprRtpPdDZkKmMzNnaLlsSWwAuYyVvrRNnUVUuviIsrRzXxEeZqgGOjJCcoLlNneEpPCcpPRrWwpPqqQXxIiQLlelsSeELwWXxlbdDOyKkYmMsMmiISoBLfpYlLyVvPFoOjiIJQagGARmWwiTtqOoQIvSsjJcMmCFAawBbWnNiIKkOvVPklLKbKkBpoZxdDXqQlLzVsSvBZzBbtTUuYmMydWwXxDnYpPyxXNTPDdpzZzZiIbBVvIiAatqQOoVveErbCVvFfcBRbRZzOoreEiFfaNnTtAUuhmFfMFfNnrRZzYyHIJJjjpneENxXjlLwWJeEWHhKkwbhjJbBoCcZwWzZzOlLyYHmMBVJjkIiKbBveSseAWwaiIQIiqGgJjWwSskzZolLHhOaAkKEeoOhvVxXHVgGvOVvovDwfWKkwFuUkKkkKjJtTQqwVMmUulLvPpvnRrNTtNnIGtTgesSEGgCgGDdrRhWwHciIibByYaAQqHSshDdJCcjVOoWCaAIbBircCRnCXxxXcNcjYyfFUuDlLXxdwWJqjMmJYStTsCcTtDEedbBIiAapPEekKQqNnxjJXJjrRyhrRHTbBmMpRPCcZzpeEfFrTTNnttfFPfFEefFxXNAaTtdnNDaAnCcjJKkPgGpWwdjJDDLldtTGgJjrRGgGgFfWKkkKwZzgSRrgGcCsldmMDLxXmMqQmMeETWwUzZeEuBbGvVbBuUgQqOxxXXdDPXxFfmdDMpWCcwGgCcoKwWLldCcDnNkKxXkUutpPnNeEpoOJjPLlcCQWwBbkpQqmTtMPEeMmzZveEVFfMmXmMxqQeEArRQqaqSvVszSYyyYsEeErRVxoOXvMbzZBecCEYyGgDdvVmuxXUPxXYypeZzFDaGgIiAmBbMcCdFfXxPpdJjDfoOrRKnNkchHFLlfCSIiDdPpAaHxXZUuMmBbffEekDdKPpFIiKkYyHelLEhqrRQxmMjCczfFZXxqJjTCctQnNQIilLqmTuUtfQiIqgGFMHMFWwfWwBbkKmXKmMkNnxXxhmdDdDPpMJjEfFTtedDQqheEjJvtjJBbTVPcCphHmlxXLNDvVdttTTnMNnqQHtTtTXDdxiFfXxIEeQqclYyLvVPCcpChHobBOxBIibXdDyDdjDdJveEVKYyCylLYKkUuCPbBpoOcJmMjYybLPQaAqplBTtYyUuoOBEeIiUBbsSZzNnEerRxOIioXXxKdDRrxXkrRKkHbQqBhkGuUgjJNUunKPcCyoOYXqWNnwQxVvZzxMmYyGjJglwWSHhtTsLJjvVTeEbjJfFbBBuPpUGgmMJjtggGmAZzaMClLcqQwCcWuULlBbTGxXOoglLpPtzoOzZZGQqaxXAQqmyYMkKTqXxkKQyBbYQqsSJbQqBqQUIiuuUXMbBwWjJmvVRRrgQOoYyyYqUDZZzlLzvbBaAWwVTtsSNnXBGgmCchzZHBbMbWwBbwEeLlQyPpEeYqfFOoHhocCpPdDzOoIkHhMmKxXYyiZODdvVkKojJOjCcGgJLlULNnxXOHhomqkKQzzZZlFfLQWwqWwqQCNnBblLbBaRrAcOcCyYoDZzPpeElLdZzjJQHhqhHwWeFfUedDEjcCJzZujPpvrRVdcCDryYRZzlLoOJKfFYyHhvVeujJGgUHhnrGwbNnBWgxXRIhHVsSFtffFAaNnGRrnNRLsjJSlCcrRrgbBtTFgGhHTlmMSsLrRsHhAaSaAflOowgFqQfCchzZlqQLvVApPgGXxgUJjuGgGDdaibBiIlLvTmMmpPMzZoDdOmMtrRsoOSpRZzvVryYPdDSfFsDdpPqdOoDwWQikKIvKTtuUkVhkeoOEKdDHPpVvSwWszZYECcTtgGyYeyYytQqTUurTiIPkKeEhmMHpdDtRJFfBEebiIjlJjZzdAaDMmcChRWSswrHLIiJAajAaSNcDNndCnsIBbiKkmMrLlRrRDdVqQRrcCMmoOlLfSWwsHqQSsbBAaZzbBPpGgIiRreuUqXxQNnXxEhBMSsmaOoxXiIWwYybBvVARrVZzvHYyXxhTtqXxgGQRrkfFJjaAJjKuURgGMmrKktTmMcCFfsCcSMmLhCcqQHXxlbRrTtNnYuUjJTtCcyUQqQqCiIcuCiIsSEbBwWeuUtHhTLZcVvCHZzVvrRVJjvhadDNnbPBxXbHhRrYyVvpwWazZAbBHhhHskaAKSDtTdBXxAQkKcCqbBxXxbBkKXrRdDSiYyIDdswWbbBxrRXiItIijVvUupPcCeEmMhHJkKAauUDkKoOdghgGHyoOoOYsSHOohmMRrbBHLeElbTtIiBhvUuVGFftTgSQqWwQtTZzqKBbLlkMjJfrRFmkAaTtKzZpQGoOOogqdDPjJpPfsSZzFHhrRPpPpyYsSh diff --git a/AdventOfCode2018/5thDay/challenge2/main.cpp b/AdventOfCode2018/5thDay/challenge2/main.cpp new file mode 100644 index 0000000..e69de29 From 6e77b7a8a510f702d984a1b34312126248001970 Mon Sep 17 00:00:00 2001 From: Ben Date: Fri, 7 Dec 2018 13:08:52 +0000 Subject: [PATCH 6/7] day 6 --- AdventOfCode2018/6thDay/a.out | Bin 0 -> 58720 bytes AdventOfCode2018/6thDay/challenge.txt | 81 ++++++++++++++++ AdventOfCode2018/6thDay/input.txt | 50 ++++++++++ AdventOfCode2018/6thDay/main.cpp | 131 ++++++++++++++++++++++++++ 4 files changed, 262 insertions(+) create mode 100755 AdventOfCode2018/6thDay/a.out create mode 100644 AdventOfCode2018/6thDay/challenge.txt create mode 100644 AdventOfCode2018/6thDay/input.txt create mode 100644 AdventOfCode2018/6thDay/main.cpp diff --git a/AdventOfCode2018/6thDay/a.out b/AdventOfCode2018/6thDay/a.out new file mode 100755 index 0000000000000000000000000000000000000000..e0636ce325aa73c93de9570878de0d923b31244f GIT binary patch literal 58720 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 LT2X1_xwZZ;$FEs6 literal 0 HcmV?d00001 diff --git a/AdventOfCode2018/6thDay/challenge.txt b/AdventOfCode2018/6thDay/challenge.txt new file mode 100644 index 0000000..7ec1abd --- /dev/null +++ b/AdventOfCode2018/6thDay/challenge.txt @@ -0,0 +1,81 @@ +--- Day 6: Chronal Coordinates --- +The device on your wrist beeps several times, and once again you feel like you're falling. + +"Situation critical," the device announces. "Destination indeterminate. Chronal interference detected. Please specify new target coordinates." + +The device then produces a list of coordinates (your puzzle input). Are they places it thinks are safe or dangerous? It recommends you check manual page 729. The Elves did not give you a manual. + +If they're dangerous, maybe you can minimize the danger by finding the coordinate that gives the largest distance from the other points. + +Using only the Manhattan distance, determine the area around each coordinate by counting the number of integer X,Y locations that are closest to that coordinate (and aren't tied in distance to any other coordinate). + +Your goal is to find the size of the largest area that isn't infinite. For example, consider the following list of coordinates: + +1, 1 +1, 6 +8, 3 +3, 4 +5, 5 +8, 9 +If we name these coordinates A through F, we can draw them on a grid, putting 0,0 at the top left: + +.......... +.A........ +.......... +........C. +...D...... +.....E.... +.B........ +.......... +.......... +........F. +This view is partial - the actual grid extends infinitely in all directions. Using the Manhattan distance, each location's closest coordinate can be determined, shown here in lowercase: + +aaaaa.cccc +aAaaa.cccc +aaaddecccc +aadddeccCc +..dDdeeccc +bb.deEeecc +bBb.eeee.. +bbb.eeefff +bbb.eeffff +bbb.ffffFf +Locations shown as . are equally far from two or more coordinates, and so they don't count as being closest to any. + +In this example, the areas of coordinates A, B, C, and F are infinite - while not shown here, their areas extend forever outside the visible grid. However, the areas of coordinates D and E are finite: D is closest to 9 locations, and E is closest to 17 (both including the coordinate's location itself). Therefore, in this example, the size of the largest area is 17. + +What is the size of the largest area that isn't infinite? + +--- Part Two --- +On the other hand, if the coordinates are safe, maybe the best you can do is try to find a region near as many coordinates as possible. + +For example, suppose you want the sum of the Manhattan distance to all of the coordinates to be less than 32. For each location, add up the distances to all of the given coordinates; if the total of those distances is less than 32, that location is within the desired region. Using the same coordinates as above, the resulting region looks like this: + +.......... +.A........ +.......... +...###..C. +..#D###... +..###E#... +.B.###.... +.......... +.......... +........F. +In particular, consider the highlighted location 4,3 located at the top middle of the region. Its calculation is as follows, where abs() is the absolute value function: + +Distance to coordinate A: abs(4-1) + abs(3-1) = 5 +Distance to coordinate B: abs(4-1) + abs(3-6) = 6 +Distance to coordinate C: abs(4-8) + abs(3-3) = 4 +Distance to coordinate D: abs(4-3) + abs(3-4) = 2 +Distance to coordinate E: abs(4-5) + abs(3-5) = 3 +Distance to coordinate F: abs(4-8) + abs(3-9) = 10 +Total distance: 5 + 6 + 4 + 2 + 3 + 10 = 30 +Because the total distance to all coordinates (30) is less than 32, the location is within the region. + +This region, which also includes coordinates D and E, has a total size of 16. + +Your actual region will need to be much larger than this example, though, instead including all locations with a total distance of less than 10000. + +What is the size of the region containing all locations which have a total distance to all given coordinates of less than 10000? + diff --git a/AdventOfCode2018/6thDay/input.txt b/AdventOfCode2018/6thDay/input.txt new file mode 100644 index 0000000..77b84b5 --- /dev/null +++ b/AdventOfCode2018/6thDay/input.txt @@ -0,0 +1,50 @@ +194, 200 +299, 244 +269, 329 +292, 55 +211, 63 +123, 311 +212, 90 +292, 169 +359, 177 +354, 95 +101, 47 +95, 79 +95, 287 +294, 126 +81, 267 +330, 78 +202, 165 +225, 178 +266, 272 +351, 326 +180, 62 +102, 178 +151, 101 +343, 145 +205, 312 +74, 193 +221, 56 +89, 89 +242, 172 +59, 138 +83, 179 +223, 88 +297, 234 +147, 351 +226, 320 +358, 338 +321, 172 +54, 122 +263, 165 +126, 341 +64, 132 +264, 306 +72, 202 +98, 49 +238, 67 +310, 303 +277, 281 +222, 318 +357, 169 +123, 225 \ No newline at end of file diff --git a/AdventOfCode2018/6thDay/main.cpp b/AdventOfCode2018/6thDay/main.cpp new file mode 100644 index 0000000..374d7ec --- /dev/null +++ b/AdventOfCode2018/6thDay/main.cpp @@ -0,0 +1,131 @@ +#include +#include +#include +#include +#include +#include + +struct Point +{ + int64_t x, y; + Point(const int64_t &X, const int64_t &Y) : x(X), y(Y) {} + Point() = default; +}; + +int64_t distance(const Point &a, const Point &b) +{ + return std::abs(a.x - b.x) + std::abs(a.y - b.y); +} + +std::istream &operator>>(std::istream &is, Point &p) +{ + char c; + is >> p.x >> c >> p.y; + return is; +} + +std::ostream &operator<<(std::ostream &os, Point &p) +{ + char c; + os << p.x << ", " << p.y; + return os; +} + +size_t min_index(const size_t &invalid, const Point &point, + const std::vector &points) +{ + size_t result; + int64_t min_dist(std::numeric_limits::max()); + for(size_t p = 0; p < points.size(); ++p) + { + int64_t d(distance(point, points[p])); + if(min_dist > d) + { + min_dist = d; + result = p; + } + else if(min_dist == d) + { + result = invalid; + } + } + return result; +} + +int main(int argc, char *argv[]) +{ + std::ifstream infile(argv[1]); + std::vector points(std::istream_iterator(infile), {}); + + int64_t min_x(std::numeric_limits::max()), min_y(min_x), + max_x(std::numeric_limits::min()), max_y(max_x); + for(auto &p : points) + { + min_x = std::min(min_x, p.x); + min_y = std::min(min_y, p.y); + max_x = std::max(max_x, p.x); + max_y = std::max(max_y, p.y); + } + + int64_t width(max_x - min_x + 1), height(max_y - min_y + 1); + const size_t invalid(points.size()); + std::vector num_claimed(points.size() + 1, 0); + std::set invalid_points; + + for(int64_t x = min_x; x <= max_x; ++x) + { + invalid_points.insert(min_index(invalid, Point(x, min_y), points)); + invalid_points.insert(min_index(invalid, Point(x, max_y), points)); + } + for(int64_t y = min_y; y <= max_y; ++y) + { + invalid_points.insert(min_index(invalid, Point(min_x, y), points)); + invalid_points.insert(min_index(invalid, Point(max_x, y), points)); + } + + for(int64_t x = 0; x < width; ++x) + for(int64_t y = 0; y < height; ++y) + { + int64_t min_dist(std::numeric_limits::max()); + size_t min_index; + for(size_t p = 0; p < points.size(); ++p) + { + int64_t d(distance(Point(x + min_x, y + min_y), points[p])); + if(min_dist > d) + { + min_dist = d; + min_index = p; + } + else if(min_dist == d) + { + min_index = invalid; + } + } + if(invalid_points.find(min_index) == invalid_points.end()) + ++num_claimed[min_index]; + } + std::cout << "Part 1: " + << *std::max_element(num_claimed.begin(), num_claimed.end()) + << "\n"; + + int64_t area(0); + constexpr int64_t cutoff(10000); + const int64_t padding(cutoff / points.size() + 1); + + const int64_t x_lower(min_x - padding), x_upper(max_x + 1 + padding), + y_lower(min_y - padding), y_upper(max_y + 1 + padding); + for(int64_t x = x_lower; x < x_upper; ++x) + for(int64_t y = y_lower; y < y_upper; ++y) + { + int64_t total_dist(0); + for(auto &point : points) + { + total_dist += distance(Point(x, y), point); + if(total_dist > cutoff) + break; + } + if(total_dist < cutoff) + ++area; + } + std::cout << "Part 2: " << area << "\n"; +} \ No newline at end of file From a867c8d6e98e042052dfa5a44a065176f3ad13de Mon Sep 17 00:00:00 2001 From: Ben Date: Sat, 15 Dec 2018 13:30:39 +0000 Subject: [PATCH 7/7] Brainfuck emulator --- C++/brainfuckemulator/.vscode/settings.json | 37 +++++++++ C++/brainfuckemulator/a.out | Bin 0 -> 22128 bytes C++/brainfuckemulator/fml.bf | 2 + C++/brainfuckemulator/main.cpp | 87 ++++++++++++++++++++ 4 files changed, 126 insertions(+) create mode 100644 C++/brainfuckemulator/.vscode/settings.json create mode 100755 C++/brainfuckemulator/a.out create mode 100644 C++/brainfuckemulator/fml.bf create mode 100644 C++/brainfuckemulator/main.cpp diff --git a/C++/brainfuckemulator/.vscode/settings.json b/C++/brainfuckemulator/.vscode/settings.json new file mode 100644 index 0000000..def3d8b --- /dev/null +++ b/C++/brainfuckemulator/.vscode/settings.json @@ -0,0 +1,37 @@ +{ + "files.associations": { + "fstream": "cpp", + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "cstddef": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "array": "cpp", + "*.tcc": "cpp", + "cstdint": "cpp", + "deque": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "initializer_list": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "new": "cpp", + "optional": "cpp", + "ostream": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "type_traits": "cpp", + "tuple": "cpp", + "typeinfo": "cpp", + "utility": "cpp" + } +} \ No newline at end of file diff --git a/C++/brainfuckemulator/a.out b/C++/brainfuckemulator/a.out new file mode 100755 index 0000000000000000000000000000000000000000..3c9937436edecac2fb8abd8481f574888e7214c6 GIT binary patch literal 22128 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 literal 0 HcmV?d00001 diff --git a/C++/brainfuckemulator/fml.bf b/C++/brainfuckemulator/fml.bf new file mode 100644 index 0000000..f767b69 --- /dev/null +++ b/C++/brainfuckemulator/fml.bf @@ -0,0 +1,2 @@ +>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>> +++++++++[<++++>-]<.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+. diff --git a/C++/brainfuckemulator/main.cpp b/C++/brainfuckemulator/main.cpp new file mode 100644 index 0000000..4a08e79 --- /dev/null +++ b/C++/brainfuckemulator/main.cpp @@ -0,0 +1,87 @@ +#include +#include +#include +#include + +// > Increment the pointer. +// < Decrement the pointer. +// + Increment the byte at the pointer. +// - Decrement the byte at the pointer. +// . Output the byte at the pointer. +// , Input a byte and store it in the byte at the pointer. +// [ Jump forward past the matching ] if the byte at the pointer is zero. +// ] Jump backward to the matching [ unless the byte at the pointer is zero. + +class BrainFuck { +public: + char stack[30000]; + int programCounter = 0; + char* ptr; + std::string program; + + BrainFuck(std::string program) { + this->program = program; + this->ptr = (char*)this->program.c_str(); + } + + bool tick() { + if (programCounter >= 30000) return false; + int bal; + switch((char)program[programCounter]) { + case '>': ++ptr; break; + case '<': --ptr; break; + case '+': ++*ptr; break; + case '-': --*ptr; break; + case '.': programPrint(*ptr); break; + case ',': break; // TODO GETS(); + case '[': + bal = 1; + if (*ptr == '\0') { + do { + programCounter++; + if (program[programCounter] == '[') bal++; + else if (program[programCounter] == ']') bal--; + } while (bal != 0); + } + break; + case ']': + bal = 0; + do { + if (program[programCounter] == '[') bal++; + else if (program[programCounter] == ']') bal--; + programCounter--; + } while (bal != 0); + break; + } + programCounter++; + return true; + } + + void programPrint(char toPrint) { + std::cout << "OUTPUT AT POSITION " << programCounter << ": "; + putchar(toPrint); + putchar('\n'); + } +}; + +int main(int argc, char** argv) { + if (argc < 2) {std::cout << "No input file specified" << std::endl; exit(0); } + + std::ifstream input(*(argv + 1)); + std::string programStream; + + for (std::string line; std::getline(input, line); ) + programStream += line; + + programStream.erase(std::remove(programStream.begin(), programStream.end(), '\n'), programStream.end()); + + BrainFuck CPU(programStream); + + while (1) { + if (!CPU.tick()) { + exit(0); + } + } + + std::cout << programStream << std::endl; +}