From 2383898f0151c1dd236733c51b13472d776454a4 Mon Sep 17 00:00:00 2001 From: Sarcodian Date: Wed, 11 Jan 2017 15:26:33 +0300 Subject: [PATCH 1/2] challenge 5 in python --- challenge_5/python/sarcodian/README.md | 29 +++++++++ .../python/sarcodian/src/challenge_5.py | 18 +++++ .../unittest-from-mjuiuc/FindTheDifference.py | 16 +++++ .../src/unittest-from-mjuiuc/test.py | 65 +++++++++++++++++++ 4 files changed, 128 insertions(+) create mode 100644 challenge_5/python/sarcodian/README.md create mode 100644 challenge_5/python/sarcodian/src/challenge_5.py create mode 100644 challenge_5/python/sarcodian/src/unittest-from-mjuiuc/FindTheDifference.py create mode 100644 challenge_5/python/sarcodian/src/unittest-from-mjuiuc/test.py diff --git a/challenge_5/python/sarcodian/README.md b/challenge_5/python/sarcodian/README.md new file mode 100644 index 000000000..3a897de01 --- /dev/null +++ b/challenge_5/python/sarcodian/README.md @@ -0,0 +1,29 @@ +# Find the Difference + +## Premise + +- Given two strings s and t which consist of only lowercase letters. String t is generated by random shuffling string s and then add one more letter at a random position. Find the letter that was added in t. + +Example: + +Input: +s = "abcd" +t = "abcde" + +Output: +e + +Explanation: +'e' is the letter that was added. + +- I wrote a unit test for python users to accompany this challenge. Feel free to write your own unit tests so that others can use it to better their code! The test is under the folder mjuiuc + +## Unit testing! + +- Name your solution.py file FindTheDifference.py +- Encapsulate your code into a Solution class +- In that class, write all of your logic in a function named: findTheDifference(s,t) where s and t are the two strings as prev stated. + +If you did all of that correctly, then you should be able to use my test.py file. All you have to do is run that instead of you solution.py + +This is the first unit test I've written in python so go easy on the criticism ;) but it is still indeed welcome. \ No newline at end of file diff --git a/challenge_5/python/sarcodian/src/challenge_5.py b/challenge_5/python/sarcodian/src/challenge_5.py new file mode 100644 index 000000000..5a8eb4239 --- /dev/null +++ b/challenge_5/python/sarcodian/src/challenge_5.py @@ -0,0 +1,18 @@ +def find_the_diff(s, t): + + t_dict = {} + s_dict = {} + + for i in s: + s_dict[i] = s_dict.get(i, 0) + 1 + + for i in t: + t_dict[i] = t_dict.get(i, 0) + 1 + + for i in t_dict.keys(): + if t_dict[i] > s_dict.get(i, 0): + return i + +s = "aaaaab" +t = "aaaaaab" +print(find_the_diff(s,t)) diff --git a/challenge_5/python/sarcodian/src/unittest-from-mjuiuc/FindTheDifference.py b/challenge_5/python/sarcodian/src/unittest-from-mjuiuc/FindTheDifference.py new file mode 100644 index 000000000..78f15abdc --- /dev/null +++ b/challenge_5/python/sarcodian/src/unittest-from-mjuiuc/FindTheDifference.py @@ -0,0 +1,16 @@ +class Solution(object): + def findTheDifference(self, s, t): + t_dict = {} + s_dict = {} + + for i in s: + s_dict[i] = s_dict.get(i, 0) + 1 + + for i in t: + t_dict[i] = t_dict.get(i, 0) + 1 + + for i in t_dict.keys(): + if t_dict[i] > s_dict.get(i, 0): + return i + + \ No newline at end of file diff --git a/challenge_5/python/sarcodian/src/unittest-from-mjuiuc/test.py b/challenge_5/python/sarcodian/src/unittest-from-mjuiuc/test.py new file mode 100644 index 000000000..705b1b6b0 --- /dev/null +++ b/challenge_5/python/sarcodian/src/unittest-from-mjuiuc/test.py @@ -0,0 +1,65 @@ +import unittest +import time +import random +from FindTheDifference import Solution + +class OutcomesTest(unittest.TestCase): + + # Simple test cases for this problem + + def test_case1(self): + case1in = Solution() + t1 = time.time() + case1out = case1in.findTheDifference("abcd","abcde") + t2 = time.time() + print ('Runtime of Case1: ' + str(t2-t1) + ' seconds') + self.assertEqual( case1out, 'e' ) + + def test_case2(self): + case2in = Solution() + t1 = time.time() + case2out = case2in.findTheDifference("abcd","dcabe") + t2 = time.time() + print ('Runtime of Case2: ' + str(t2-t1) + ' seconds') + self.assertEqual( case2out, 'e' ) + + def test_case3(self): + case3in = Solution() + t1 = time.time() + case3out = case3in.findTheDifference("abcdefghijklmno","abcdefghijklmnop") + t2 = time.time() + print ('Runtime of Case3: ' + str(t2-t1) + ' seconds') + self.assertEqual( case3out, 'p') + + def test_case4(self): + case4in = Solution() + t1 = time.time() + case4out = case4in.findTheDifference(" ", " ") + t2 = time.time() + print ('Runtime of Case4: ' + str(t2-t1) + ' seconds') + self.assertEqual( case4out, None) + + def test_case5(self): + finalTestStringS = 'yipsqffxmqafnrlnkwrnvspeekejbsuuvuhanlxmgkyjlgmloxmpyxuvqeabmycqycwkzvhyviaavwryyhtepqacfuzggcoctviibhbcwzmkbsivtjywienaojkcekvgsyylliasczuzoivipcsqknbshavzwyufkeaxjiunbyiuvxvpfokrfphcxbaljktkiygrboihqczhxnreigzhsinustzzrzstbpkfrqsenhrnkrfbekfwaozenxqabbhhsaxyrubmtzmvtclatncfkkvplvuwzfggfnprinyjblutbovtmxxvacouiwgrkgjvszkwswvnwaggsiwzymixwmhmujmuckgyiwcwrigtshqeuguytpjjsrmijmxikeraqqgjymbvmvcugxubuxmlzoiqzfjwpzpqnwalcxczzxaitpmjsorwzmwzgjcgpztaynujqqmhvyscupqjflrnjqseeapavmakvexuvkntgcvkvonjqoivimybahutpjtzubamihhbyhspgtmjwexylkqqjvmtpxxcjnlpbkaiiekjlxkrewthipzhfljcfyuclowlptfhksrngxpzijabhfjhwtlbfuouqskheybgoqinmhnjzciqvscvneokfqrghekuzkahlyosemcgqipimjaypxkkwvtqztcexlhogjqfxvfihqqcriaimioaezfrbaxwfuwbiylpztmxovutxwhqrlrxfwpfcppazjsztewupvarsqcizlneiomljrbufbuhljmgnlqkofsersqhfucsvfswqxnmqlthjcopeaseqmsghvqpnmxmuvuoteoqsaneknirsjrleslfsiceoypypbijhmtmesxpxcurnxjzwjclcesyfmffbcsxvnlhtnmwgxaywahyhqqfuevmwhhovxrqsslemlpxeiuqipmtqmeqosghyvgyexblvnsbofvtjqfhcowmfvhyyerktinhggqamtykvntxyywn' + finalTestStringT = ''.join(random.sample(finalTestStringS,len(finalTestStringS))) + finalTestStringT += 'p' + case5in = Solution() + t1 = time.time() + case5out = case5in.findTheDifference( finalTestStringS, finalTestStringT ) + t2 = time.time() + print ('Runtime of Case5: ' + str(t2-t1) + ' seconds') + self.assertEqual( case5out, 'p') + + def test_case6(self): + finalTestStringS = 'gxtjprzwtvcouwkeiolonsrijhsajpohwkusigzntvwgpqxppqrvxmzieqvfemiakfuakrfevgvjbfssenotnhmigkvrkjizsncfcbcmkynavxtiuhkoinsyocreohxmgrbmilazqxpxthemhvfvafcbbtpweivittjvvomfewmiznohflukxptwuikouwcufjyjbhqfibpttsznrmernupssimsineiuabomsfmygpkmluynxyormlenupaxryjykfmhahuxmmhclrkomfkeqmjqponrgrhqnpvlxelsnftojwyvsqzegfaxupylqaqfabgramcaqfcmolmicollputqyhqwkxbnaqalfqckxrkhxkkvnyhuozytojtabcxtjbmuuqpjzbpaozrmrpoohwjyhisirbrsgorunsxsaimangvqxcszuuettxiwcnripmtykijopatsrusjupolrmacravejotqlglzmbrvzuymjwhzxruvjrxqlpvjcubagcmabgpschaiswwoaqstpwiirnyurebooubwzqgitfallsiomjcrpientnzzjafaxschxnbbslovootsbzykygvypycfkalsjsocmxhztolfebjfqbnzemkflfeymzlpgwpocrbpruqmjhjmewlzrcfgxhvzqcomppgiuhhoaxxyrmksyrsqsjwiqxtfzegboelnptvacgxpvlvmljgkkmzjvjltqraszmesmtawlarritbbhazyjtqgmnarlorbekxnglpetmmgttnjhmnrcjlwrgscwjifgoocmqjznzzkjxxrkqnhvewljibtfgeefyzmgomhieoqcawmxzeqvbcgxjubqsnbwlozjewnwwftktkwkgxqzsuwvnvefferivjabmqxurbfwtgegmewsbhzojntjhibxqbisealvhukhuvpmuqplwrsseixcmrkgmkglcrazgniivsxkkambpeyetsmzznbyosojvqpcztcphbowvtetxrlghcgfbwannqxlplcalvgynjnqftwfwgnhkuveucroefmeoqzqevzqkgerccoeluavrelbtprvwotxmbkojhlabftuxvlrtyvcrrnnixwxgasfquhzyuyfgtttcauzijkylgvsvevlmujrwqwijuiqphgpoaxgspcqnrnnretuskbguzvjzyivwseaopzzxrnqinefzoebgrzenlrqtkilswsijzfazokeuxazaqqsrelkvbgnhcgquotchkncyipnhmistuutvqbawbyitxcufpzjlnvrxxjholqkzgcejbtngwopixehkfewkkallshkbrtczwvqoahopctftugflkepapqvwaetguscutsjvhkpeiniiewobokpmhpileyualjkvgnnssljkvrxzfjvpaegntfrczjgkuttwwnfuejbltsnbfbgirlgrficztljaffzqvicbhinqqhlfurnjwisqeymilgkyacsibwysxzufksqapppoehurffiutjnccgeyoyeneworcaxkbofscougvrpkvecyrqeyysjnhvxkcsmzjcivwimlowzyacjqujkszpxkxgjglqweftqrasucfjeczqhocgylcwfnrqbttsnheaxhhmsfgzntcgrgcefmcbbkowqvlbbbhwsinhlxjiiisujfzagueaksuhwfejivgboylinskougvepmtknrqlfzhxaeinivrprwzxxoigmpqyxuvszpailszflollfholfvfmbjouiiurpmfpbbgejhehunjzrjalycnopljfvbuolevzwttqbgunwxklppccltmllwevtqjvzmqabhcnyyurgtkqbwwbgpnvzpzxfpcomqckvqqqicgowgiphapavyqqambfgowgnzfejrqavgqyvetgjsnkfqzrqfysmjvknfwcrcuhjmsqakilakqutmxcgyziutqikmhytanprafvohbizebmepztqpgeqrfpxvxrsjecibkbrcogrkqulyvgfjgjaypgfthqrbnnirojztbsosxktovrxzrrtlmbprhcelclrsphetxfussztlguxtyrbnnyfgiprtfncpmemebxobblmbrwnmaxzyhxijjizsiwoltmkwzqnlbrbrhopoaahvtljnanzymriqklyerzysrujkjoutuuvmnnwnywcreeguflrsufucvrjycpqastrmqhixzoatmqcvbiqexxbefkjssqiphgyrlhtjgmsusbnypbjqfbpljhrqjvvzhfmpuyoyenaumjnuszcoxyzgchrvfaejieoevvbimypyaamnilxtbkvmzfnofoqwhymjjjxeoyfvxqmlyangzualsjogsfrwxpwixuptklbzkukarnscuxaesnjrhuwuqrtlolgzorhgznbvobgchrmtfcgqqkeylqbnqzmuesgbjmfaozfhhfoysxlroqlvpgaaoxmlrousscutkuznylmciqhbatmrytjfaetfxgcxwshhmzpghsokqncorukrfpwyhhcztckzuwctoqxjbycyflexslqpilevypgczfvyxbvqpjsrnsylzjiffpzzvqfvxonbeqlblsfhqxpzehzlssuzyecvkkewjbrabsikictffakpyiwtwztmwotlwugupbsmzkajelhrsmceclacpxupvfbgbbrfthkfbloyumujcutgrfptmuwhcpxlwmtpjccbrfkhsysytztzgtfeonyzayaqzmybbqpuxkojavgjxxeabgnmqwphkhuwpysvyuhvoykaemycpzlwwabnrxxkwcgplknfyxhowllxbjjuhfjkfzmpgglauksazjfqlomluqqzecnugatghnygrlfalynqblzunlhetgugimqvffbcwfvbwtitclbgnpbcpaqfyexjeicsqsqfqqfirlopapbsigekbklyblxojsecgbewpmtggqcetitsrxvozosphjxcllgmfanmuszevrrnsaixrofaipjnhielexxhxysfzyohetglscczymspgvvbceebuijhgshqjfnnmsxxtggrrnzwkcpgkyjyqevxvwyuymomzmkhqoqwzkeljoxzjgzttiqsgraybkygzupapeetcemwviksiqlitgshccucawgjtmntmynflrsmasbxcuvahkstufveatvmmbbagmvuphqnughpnffztrrewjvxnsfhjugmxwfefrapffgazmtoecpltrvnapvkwsxtnrqlgzqymfycpkmwtgkkothuquafbxovwxtreeoinjlgoavebstbkesajlujvcmprucobjljpbhzxtkqkiwaggurgijtwvhgsebchbaweahjchbmmouzpahnbopvlalxaxxyfyiwtpnrvytgjazpgtgfblnytecyvknxuuzgoyowboqqtgubjweiyrwgfbeukoaptblvzbvihmuulpbaxeagqthbegquxliuasxapmperaqtyafvttevvasizqzctepjbpavmlycqonrahfursavytirzlyjvpvmpeioaeebwtgxunmnlmuscgcqgmpklwkabrotxfveomimhaylmrqmyotzymikqfnhpfetlaronvtyvfwqmjtywqzwyqvqkvkpcopzkefctbxfvqpnnacfgafvmvbwugyznkafygpubjmmqhujkvvbotlebykytjfjrjhwrstliribbkzcqiexgxysfxnieqwcorgrcwqcyvkulbcnceusrekfqwetxybxktriaabbjhzhflluabaklpckujegptbafpogbtebkcjofmkhvjufarwujcfgzvfmgriyithveypbjnivvfzvymptzcolquszvqvpubamasieobgcywywyunfqfgcqtifvvczmhelnyltkjimevntuuyplqecxhzzkbbjmtiqncmbnxvtpmjkearpthnvwuwxfyteiyezqixuzhlhlbfcwhwsnuubwzfmeaepjamfrennflngbyfggstuzigitytfrtmqaorhuoiqtwntzotgofbfashibvxwvwbnmbgxrwqayfsmmvqhqjoskmahthopsznxuejrmfejuhhnbiugkczpapqchoglpsggixkzysnxfpmvpkzezntygfmbenqwkejluefphmjmbbqzunzpfbxnvmraexbpuzvotaqbukirigxcuohqlvovmlkcrqchfbmtsxcqvwaojlwlcsmeviyqexwvprenyssssowvaqfcrqbhhibbjozagrnqzoushkocsctnylepotxbubzrcjhmapzfakbrrewbscgubaqvofwnbfvmsylfwheueyobaiwgvzwkknqsylnfufszmzmpefyxenfksxoizjkfkffnkbvvmyopolaqorycvtvacckcwyejfcxezugwbpbiywkyqttzjttqanuoxsgwnfrnmowhrrgpmyvngrzfnytcnuscontonjwmflhxhgfzrhtpiooghsmhgkataofisoajsquqqqcwovnzfvhjimecxwinzphxfcfcwlckmyscxiqczbeohzhtqsozntyqfneriucaoukbwncuoggnmicsnjttajzyyblftpnhzzhhqfnwtleiaqmwawlvivczmutkfqkumqsqrusmcoxotwarvpibofwqqshwrzlrwvsqxpbrijfipbpazrjojxfenirxigqmsetxcxtkxwukqkawmjqryypjvgkzeixmoetumhtrxtbhgkigxfrrwgtirlpemtmenlrokkosmuouhqwbmxtvsqljtszbzqryfkpvnkjrgpucotbepwoaksvlmwpfzfxxcpkomqhrotrzwjhslyktynfbaxuihvmqktlurcbhueewpkhpjissxqghegqonissltqxknbwtnuhbzwsmrpgtwuuvosibgpjohcuygaarjcjzhkkcrxzjkinsjgoepnctltetjhzoqeeopywgczemmsoxtbhlorlqrzzxqqutwwuowelulptixwgwczrbvbszjwawjntmbvhyvpuotgeoucjhzwmzfmltpnswptohqwjzbvfyzlllpanorcazemhqqsnocevmuuzchsaccvithqbsagmxsjhkhhkylgycnujabelrpavsehppbmcsnshvikompigameprrqmfrqnmirkjvfqzpwsuegceeaqjnmiyvpgjtntnlmfzlgtkkrcgzwlxnevxnkwnovmjthvzohzqykxjubtgbajepkjoiyrlzljqyxoxxsigagzylvgtsaufftoslvlhtbfxcxeopuoiwqsicbmwpyagiqlagzjewntpguthluvrjflalxrugfwikiutawxpweivgalupynqmzbwexorjyylqhwcqynnyielfofjgmmufxybkgiqzyozjufpohawxlcpfiltsbsairsyeiuuofhywahklwolnwgiupnsyasizaaiqwexpbetjzzzjmeatjfehqgkxkknuoekhszlljktkubuzskiwebzbinccyxgcrqrnxncngjlovsolvhwgupkiyuenplkgwkerqnsastpgthcyzgtqunyxczjyatwtibnwntefnftyjeojmfchashlziqftbkfpqqqszraywioaypaogxnrcjnmporvcnhpopyoutziuushmtfzzpofahcsvjypmuprgyiavxmpcmjkbitfazgcaorrmphhjtgxxllwnukwbhgwhxxbpqshezegribzipssvqgzysqvwtuznrjomvusxyguqjnkvrscftaawqhtjwsesoqsvbxypkccvmzvhonhihspbgsghbqqfrwvxlihjlsiczesxwgzsfkkugirecymmweqyofyxffmgxtgxpqwykgqcfjtijjzuxktxjeeyinpvvsuzxtfrqobtnyabgfpvjqrkyxhvchnijjgyesvjawtcwqacatkeegzftzahjthtqruzjpwjzcbfgsiqzipurmxvjswktbgixwokbmuinessabfjmlklxnrorzvaobehzfacijmbjwruiwkgmbzkpnuebgpiaslvybipgnoibnvqqzulamagsrcnnvgeaaolpnfmfflqumsxarflgmsgbicaposvaoafyalpelemwwhmisvblxzvuvtbfwwupgeeiamwrklgbjwhqmpqyfvbaktybtpasgkzslbkhjvmyfahngnolqpofzhgriljtptczmhefrhrhjwuqsiqozolnncpigwrlxtrimlgyzfysfechllzuiwqoojfbicghhimqlhlczzueybbpcojsnitejuqtlgzfplhmxghzptelrhmforskzrpkqofqbwwobznarimmmzfzffrpsimrlghviuilyryaqmqjimqelzzmzoooiwbimjlqarkymbtasvwxorrbxybwueqqxgklvoysktvflmfgsxwnxbyopocsimqhpzwaaxxxlokxpmfbgjaifcevoulqngntbrulpxazfyoqvpugzscjunprbzjyupsosnxyavhzsmztcozqxcygrpemhxniqrcuvoymmflovqgwpljtpxryksjnqgljokbrkppxmtrajselzqsmkyefseieujusxgkcgsbaatuwtpynbeufqpzjyzylhrswmyzczmigeywpxqkamohbvvrspqmymkbrnocmbtfisreavlqoozpkfgtaecanehptsmpfhomspwgcafvaupebqvqwaznvviiafahgtqtajjhyywgirsalratcksijfhaxxwrmfkxvvmtrysozmnayjxcjaiolokeovslolffmcqynjagucakkktiowsnmzjnkhkjbthzpeuhsivgskmtyrgxfnsriarpokpsycktbikzyulsshkzwixebkajleceysjqoqgoluirbvbkbwbhnletnkuooyryemogkxeeycfhjpmxumhevpxlxapjjbfbkqqeilfgjmzntzbhmqrezbltwjbpnfighwyovcjrltgoqzzfxawhsranwuhlcvjwiiykuleqlafyoqlsgcxqymiflcgigmcghkywreyjvvqscctzmbvvurwcmgxokpmmkurkgfxjcfazqfxcqtrosnhaguwmztghejohjcpbtrgkvyanrbqbglvqmovqqvnnalbyawvbvpbulflcmlknvyoctylxiajurkhsrqvsxcvapuerrtyjfjpzyyyfqvjfghbsllpgaashngbnrphhesbycpubhzvpfakfotqhcpkkqufsfgfvxmfapgmntzlpoyimjjhnqmeigeaglbcwivwnapgpthxikspupxkbsvrakgchahhwsaphupfgcmxizqvzltzufkceifureuyoiglrcpvaipthzzrgctbokkkzqkiuegbqioymrupltmmotbcorpfccbnzewoeuauoqcxajliuzxwjgplqkoojumlawyzqqiastsbqlahrlhpvczgfuygqggaijeswtkrayrlsvvnlvzqggpukreffncjcarvzwbhpqpvqxbhukmwtyrbbefmeryzoqvcithqxrpwkwbnggbinnbkhgpjlpcjubhelotgwvatlcjqlufbgpaxgrlewfxgrmjmuophcyglgjugjwtvscfahbiqxksbwjukikprtfjmixcwzpjbfigfhknitniismvclzixihzpkjcrheqvvipktxfbpeuqpkuxrcenxlotlhknipysntkscggplkfiumtqzagcfpxzvwqqagijmwvapuwkapczxtynkygtvhxjzwiotvqqlkiyntvqlumgrqpfjacimgnehnfjetnleqlwoxlbppvsxxyzwxqabzfxamlnnlpsktlazwnztqfqfnfcqpnscyisrvqzhofrwrujtorvjfjnjnsiezgmmuyghpclzxrmkqfhvppbvnoueqcjlqklepqjcvsblxoetpexexiggwhojtxqxanreryfeajaqzcicqpvktwqwgtkrhqvplkojqbnkohkevnsgbivnppjmbjrgiwwzhcptcqjbgmsxrklqtwojpeqyjvfxvtxhtkghghjygvqegsxnfzviimjhpgjcmwuwrsiwjgtqyunwpofnomapbwcezenvzpopphlmtpeznfaeqynietolvktcgqiyfvttfgleshbvjqabyxcvftifqgkulsubezyuvhwlxxvrjlfvsxreueycblnoxjwjsayubhktkjugzlspxtkvawcziikurwfilmiolcsbrhxjlfrqyjaquglnnhtmehizcqpakicoqefjuyixxmwyvmwfinvlwylsibnauphgcsmwykhcyipteqqkyrhxswvahubgvoyjulboetbzgotesxwuomrqyjmkiqnrcgshrwoaporeqroihubygptuatigizacsbqpxcoyiiffecjnflmewhxrzjjovqzohlpsigmxnvhvlhurfergnflwlbmhrkgkwtmwioxwfqqnmcbrqeacfzqtcphuhfzhxeaocbavlrbumqpmkyhncepsccwbbpoaarnarzapaofgykvzastvagferryzmvekpmxcosiezilyebvovgfyefleokwsqwnrbjlpraisumoymxytjcfjnhsbscfggnkqjvteeitoceefkfqfqsbhsgifxhrhqbkblvrinncfktfjcccghyclofixvjifckrzvsewrbzsjimuazjpqctjcnuqbwtvugpghwkisohxqwtmoqoxyfnhxwibvysblamlbjpfwrivawxvmtqkjzwolhyscmqxoecvqpohmbjsrtvqwmquyqtpwbwsngzzgglyhtmfzpkevuokfvjxgfgykyybqpkelkwhicbnmiikxhzixsirvihxbswcyycgozgrfpnbxvgwlgjivvbiwrqjgiyrabhomnrstetqioglbpgfwgrhxbsrieqjblqyrpbjyunzotjvmvqowxmotexkqembxfjnpowxtgwxpbnsjlsqjbujewbwxvjbppjlvyfxggujtbkhmfxjzhsrjlnqyizizyjttvtwsjtxbtrsgxyqqeakcajuebqsjjazpebszlsmrlkxmoyuuztbbrrqfprhkksphgggnpahrhnmznbhozcrqkurmftxzrbmqobuvuvwpguulkbmmcgvqobcbilljumbhrtzjtswjswauqnnhrrzkjnihwriercowmeshahkoqzrunkeeexpchmgbcuphhlukjzyrvcvtaesbneetreyaytqvtwqxrkquzqoqvmgghtmhnvvywjsrbvoviquwrmqjappxmzqbkvscvqayhvpxkvjgusajnslwqhoknvgooycmxpbjuuyxvpocazvgwkrxkllwuwhkxqibasesksstyelhnpvvqfajxklgyuceanbnnrnjvtyoiwkyqlgaenlugrltsvokmunkgrxjmgazaapzzqlxwsacyicpjcoonykztrtskzjaqxouhmzmwgfivjzigrncwoyjwwpjxwasewegqjlxcsmblpkbjeqplqutiartlgnekqkjenhvyowalymzlknqoguryyqogbgkfoshsbqyergszgjrmiynqfpghkvnzoxygbwmgvafxeaqpmstbzpkcfhnsxrfuaeqybtufesajkbyfqctjfjrxxoiwuqxrrgtyieqegneaqlztxihlqtbtmujyvjpsyekuojqiugsjqogvjbamxescbtngjwehgyomnrmcqwhvqgmmzxvfkrhliuobubwpueaefpfmpnieiszytavsbsrlnergfkeesalokmnyouwqrybmerhylbyfpwoirwkzqcxllbbjvlxoukkkleiehowtftjronnzewxyrykayzuvopevcvqyrbifcoqlbcnrevyopyzcwqhnjhequmkbjameqviwkovjyuqryjpveqjteeztouxctmtmirtsfuthgfewlflglzosapgtwaznjwypgrigntkmammcryrxvhnehcbipzfyfqsaqmukcejzivvjcfvsqetoxhkmkltinuwnwmpejvvxohczpgzeyvxhfbmarxjtzlvarbvryhyxyliwobtcbogubfyqflowebjwwkyflstgayuvaizkmfjusgefuvgtulqshbagemunuttviyecgvnqzwthffyctjmjzunyylipaxjpmmsucmcbmwiwhfuigwbvmztvorprzbhknoqkbwowebcjwagpbspibmqupiyfyiyvwjqkejrqowfmklbbsarwysbkwueueiuqhtfgfjgphnfkmpscuhsewwtorcxfqrvixlwwlhxxkcaajtfirjlrxnlvfxjlwvfhxhpxsebjuejbzhsaploxxlnentataugvwlzfxhjhtjgwjibsrvqfiftxgoylqyahrsyekippflwncwqhlpgrbhprxvhmeltuqxpilzcmjinxqmovoryhuxtopsyvfztvkinguicgjhmowcanqtwocjvotuvnbnsaiifnxtvywyjxeqwttmimmezwlkfxntbbgfcazfwtmxmnacmsrxxjczokbmiwhlhltohizkmnsehowbknjsjooxppsyvucpjvxljhreejcjczfsyaxzvbuckbauojacaxqjurchjscwyafjofyklbexmjqmrjqnfglatgisrgfwshhvczzpwrbklrgynkauwbrxhokpstuxrviruastkzchxetwgtcaieugkgjmbikbinemicwshsiweevvlmgcvkjtoyqukswmneecxiwiuvkorxkqwulofesqvsmsesoonskbnbzlnbcuwtanrxsmfspmeenuazjitknjpppubsyrqjmgksttbeoyheigbbaoqvmiprqrfwbgjzsviroexabvriozxjajnrkalqwuzcfvzjnyifmfaqvinvhhwoaryrsuzihkskibcrxjjqxjxaaypaoatptmwkozhnbagpgyijwftobpxmznnfecsrvgryhfgcgxwfmmxlmybaetfesvpfpzfaehpzhmcyltsxoavcmwzkukooktkiahpufbsisnmsozmmcrapisujfljfszkucgxxurhhmrivssmjcfeefgnaxencnqwcbqeqezqwtthcersurhcqsrljnfwvmkpgstbfarqlvmgrhthlqgximbgackltxwhofojvspsuwhzqfxteqfxbgfnoobusugwfxcnhaixrtskqslmquowssqcewqehhaqfiogrkaxjifmyglpzpesxvrhgrtbouelgxlmsxntsthfmvrbawanfkrbcbzztnsezggyxmkgmvaglovyzkiyustucmcrjlhspfygokuvoauizbbguafwejbxhlkvlmxpteswajpjhofchlcwaklxsfpghmynpjlxxeqgafpvnqmctriwtarknjhlcopkayzosjztmvyxbrkpxvewhwlhscjvmbazmkmeaqjfakfbwffgyxfukwpsqiookzpxubwpnfuzriprwaoeophvitwqxwukecjotoewpgvflfkrraaqjbkkrkgkfzitchvljokxarcnfxgwaqpjcevcmzkiywjeoqigeaqrxnjqhgnnhgknwwxkthbphjpqxkzlnewxwkwlqghbryqkcsfzikayrfkbojjzywkvfsxicmuijlppjgugbvyncwuembzjvhqovffcizkpezvgkzpstrgubmicexnqsxzvjtpujxbfgititqxghfblvzygbgsfuakvleopixhbphjgjauhomfsgvpxcyvnnoghiyovrzfgmrxuwyrrkmunjfatcbbinbexjcxzwqnpeenshupugswaghsfyrbaofpxraxgzkxhfulbtkwqxtejkcrzazbptmuilqqyxczzpgmntyfekswsnbfzafayzantclwfzkmtkbbormhfehznfghklvipkrcrlsqxkhtabbqthwljyfbveamvwioehqrtecqfhqfnrzvepjuyexxrbnxsazmwvormbsreexvknxwpbmpnuqjppxebtnkbsrmtzycvsgccliwszyqmwrirolmzuvsnhzabhhsejcjqlhnrkktfmsogfhtveclmvznansvwcbwiozfaobryqxjitkxnwozqkusuajnvnpbfntumlbvzacuouigpggcabjszrrotcqxqhjbouusrkxcctzawignvfrfhoyocnfrlsssufnqucebvxwvqlgctopcjqmkhxzwukinwzuwwjuwhlghbzfsfbunfuzuiwsfpvkewfuhmomrskvhwgnwtbivggtjmwugpfhshogsijcekisyiatnywfoleagjwanwysqyoccvrbojopomzzcktigikakwxsxeawjokykwynilnijbirsvywmswcjnwbitagmfxpeifcggzxohkhtovhwxcqjqtcbtuurxrfgocylfxvtomcunkycyyfzgotzulsuemunyqahpomkkpocxrnkavuvcvofguermjblpbttxmggucputynunqnfptnarnytgnhqrcjesfbkylmkhyluhavxpajethrgixonnckxqzjbkqoxirhmtvhjhlgytcaznfxtawizlcfuhrkbecznjwpzshqweppjmchwyzviyfoamucsfhftnpkjohktygyfvkhzqraeiprtxoyllbhtejjxisilqqpbmagnxnapeztxleoltvwyhxnffnbhahumykqssikgoezrrcmgrslukvkhplbyacpqknskrsueekpcqhivmzjyxippbpgzcpikqoarbbrfecfrwxhvufeinptzcyztuhosmsfasbxoxauzmzkqhvqqenqpqycakbqplykqsrbxniopyyxqetjnrkjghngmqnsknurrcgjuuxsgzcsipnjhbbstswrlkjvxbhclwnyhvymookwyhsuvxsszzupbeikwzoycbrwymyrxhlvxmpvyikfhypmgklrgiwsbuapqlezwkjeokwsaqokeovvzxpzwthvnqnyyaayrnxsfigtxqirovnkhsniqnmyretbjonowazninmmhksfwyarvlxquwwkgfkoccseehvlfqgolpibcmpehlmjrafemlzsysflzysoieoryqofeekxqjefglajlltwshejaylssqwwltmwjhkqjlzqyhetzwcbiwrlmqzcceyjircvhzffknycwjegbspxhybejjowhchhbgpejewtwohcjtwgcirmvjemwckqzltugfqaxkovuqnucwcygoynhkaeanaxhetiaozmgepiczaklyqvnaejaaariqnhyelmykhimrllcztlwsstaqynwlawsnjznfbwclawqjvlypsrbznisqwczmmumtjtmunibohykgktpnmwrxxfpzwxwmotbcvfiqkjrqcouanfztmzqbqcnatfpgxszilncvyhziinbaeczjxlggjmzlholksorfhlywbiuwzvkkssatvjxfjpcubwkvuwzjzqsrfzscgwsrvuinwafwsppturcyxpwttifroemvsupggwfqqtxiivgnvykzerxnujkujjiecbzvuamlmejasvnlavksuelnbhpsblhaxbcfiwzflaqieecbavrmhsvjvluoqyfyvwhhacyevcikyeqmpxekkvscqkwkrkjlynfzufacmfyczbfbwmtarxnuxvwnwqmnyypjckgnktsfybcrmlsqpvxwomkbxawkypebzwthxitlnjaeaolvjxqkfnlglbhopnpnmactsbfqsiczqjvbpxwemncozjuebveanmzrgkpqvcshvrcvjvrkeqewyqzsoevcepleyiwepvvlgqyqynjsmkjrmcgtfbspueylqzrtstetkxitpkwpxkvipwzzlmwexmvzzchyrighsitozquyvzhjezplhgtlvwkhwjhmxcckiqsricehgsocxjgauyxarihrbjlxoojvcmtnyktpzktaniuaapcsoaevctbmzoeccstgktewpolkcensazvojompzbkpfopmxefhjazjkznoyuqcyshbnzitckvrnvupvisjzcqanvweujvraycltxgszwaniaycxmfmpfeurbhtqxnvjwjhpybvekqvrqsoqwllxopxxunaqmsnmxvobfowhkwhclfrxkneloagmajqqnoazkskfhrfhsfwjkiwapatqplhpynocbrzernegvubpqeqfmxojyszmlvqgcgqhamjwwyihpuqjvfmrzyifqqsvmxnfixtvumepwavywqaabxxangnelpaqeyaqtjibfwampitnqbwoaipoicpkaemzyeeaqvhbbrbaipivuapocxnfhxvvxtakoqvrcvoavugaazqoushvyoebzinngtljtlfwaqrscvrahyirlmmfyehzyichmwhlqnqzxfmoawtgvomckjuaobjpsqpxuobvejccaubyxqhvvlcpvysoaexwfnpariwltcmbywffnuklpxlilspqkwzbavywonlvlvoxaqkelizoiutfgmlegfhsnuamaeglnpztgonlknxpyjskmrpqkafahwowoikazbvssqskgnlcbrovvgfctfowphrjkwrirpgurpyizkjrhoqqqqzhmsjqmymfvhtulysokyhwcjpextokahazvrpwbbvhmojpsqtocvrtruzflpmjwpxauirlpomwcncpsstmnsecpygxekqrkiaipvmkvjeiggeseaeyscwlrhhffgflxlxumefutnwkinrkwvjqynoqrjrqbpcxxpiswpujvcqyvfolznlgzrbmvtpravkmuwfabylkajajxtebkzqhnkwlpmsxumiytekuksitxbtfffcozruhlkfcjaqztgtaotnphgibacpxtwsisvmlervzkktoxsnmqcijosscvnnjkgfjmxozmcpiqglxtvmcxejceqnihneukkfamntpmxskxecomhatyvmvsnygikugetbrrvofjckbjbpbllhyyhabeeelpsteghrijjtkvlbsrcgfvlabtlgkiatmfouiykamwjqprvrmhjqpwtkxgfpyenipgtqbolunzcwkvtvilzaqzxqamiqwgbptasisyxpmhesmykvfjmchynktmvgozwckqsovsyrgugsgzjavcwozcsqfjeyzithpfoklmwfemitpwjphcluysoigwqoyfwalowlfhijxeykazqgemevkuvqbkfhjwofzhmwlpyaomczucmbamujionacizanrkogwoscsokmxjexvakipcmghzyemgizgosziqrfatvzzngzxoilzxrutkocfxyfnhpxksubbtohuvenryiqagrfqhzxklnayslfeveehhqknaegcxmylvtwnilvogoppsxchhghvjboblqomvqkrslgyvhrpvceivxvejnawfeywyspejaqtzprlevuntjuohzzgngobmwlvtvrneuymnyiobytfpasrrpselsrcqwoysavcetcnotjycpparvptyyqznpkbhatpunbkywojwwsgqllqjktmzclrjrvhoihkguxmhecpaxbwuxbkuislowtcxmjlgxaixwfqiocrrtqjjhtognhgusmatmkisyejnjjqftbtjmicoffjoyyegutppgcizwncygjgsphobpblpgixqtavgreueryebzqcpjoprfpuqiuaecfvjgrfnizqhtsqiwcucggkobxszlzomxhyhoamvakisnqlhiogouobgpwuvtlhlyosywpnpuahehyyqkkpcxayjlicxypqcwlknyrenfzwrocjeytzecmgzcktrehygzpjepqwjkgmmezweucvarfccwwnohxvnngmlcaompgimcgfzrazsympazzrichuvsrkeklnbbgymvmiszmvvtrjwfzjocovngzcrgtffjlkizxvvmhtnrqbuppfoaynkfryvakurqvblrzhpneucnyflcvacnierfzujfyonpqmwqnvsytlzhrfmlfncyyurpliuacacbvuyqeragtjxvppeiuvvqyiovvhmqxgoonxrzgnhkyzwewnokirinnaeqjhpeknmnegbzqpecsmapjgcbwcsefnvsosmugjxlmnnnnnsesxxhuujmwkhczemewzbpplzanlfltguymxjiqnfuxmagppwpvhhuenyeinozuaqaqqxcezscfmwlxusylqwpgmlurxcytereaazlplcyhaxfcmhwwzcahietrepewfthlpqfpbbfbynxlenszejyfgekkyyajkxofhqxtakcmqtfzwtyptcclxpuyenxlixjfnpmyqjmoaghupxngfapmegwqsrjxpbhkpurwcmrtmelwzobnwecznfavnotmezpnnuhrqtchzrfthkwptiycramgbzczqrerfyheefhkypsnpmrtyztihwesonwqsghyuvyaplvzguonyqlbpqkifeopjuuvqqsygwthfevobanjyrsegnxpawbphulwixiukunppwxevbvgugntvyrulrcherhazmejwwhjjqnjgwqijblvexisamyraxhhflgpehwpxyraxkmialboegsszshiewanlxggfnniwpoogzgqwpcscejyptwltzsrtoyfkshvzguawoyhmccaqjwskxbcbnmzgoubnvvciilyncmrkcynslpewiwzemcpsjkxcqiuzlwxsquaegcfnskbllmrrqzhrvtbwjjyunxflcrsaxjsocsefkqzqbzuoapgnoxtbygkhpvatjciirrvcytppjbgklvxjpyexhofegxumuroiriwofmzejjbblfxhxifhxubimsatjcqvrhoegcfinajpkrbglowujyzeeoaivqfguzjxhhuyazhpjobfojrexmnvxvglptcokuojluknixlihzkisxqutgtayonlocmwzbhlsxnimllmmncvybmalwbakerucnbgbsenawjlyoaqmstaxrwnplyeitmekhczyqgcvutjiztmpqkmxhmhqxnrjkpljvyzjwnioqpxnwfmyqmgcnzlskvvtaewnlkllqeaygpctrspqoxtfrqmgfesekrsrmnxqollqibbmyuzpecunvcifwpykllrttmiibulohryaorjnzhcjgnrfjlgapunrfgjnnrywqpakoqbpcrymyoiqcltalesxpiquhspwxoyngyhepwtarerukyxjoxwawwvijbckvznxqrltrybhpwhijyubucrxsghxfnovewcyuklmxmhwcnqbkavvbavgpwahtpsphyckihfzquckzoggbsbyovfteyghyrvmefsusuymyrqvucpnsavsucujljeutqgcusfclytaofbrohejquqaworhtvabmstsghgbnwryneccppbvsfrkmejzoccitzifqjrbmamwppsgazexbeibzzikmnyppkxsnzcibukwrqxuptksbhcwrkmnefmxiqpctkkfelwciafgnqomonrzehkhrgxvjwgmfyxzwtjjayegvkohvizmthsgvaskkihtuulyflvafjppblfiuszauwlftubozsptvcamrxqvjgrovzphnqamqmkeoptjencpsxoyhggzpzqplxwwrcajekwwklqgixfjvaktfshoelpqgrckcvfvmuxaerjikinjugygstfyxzwitkqukftgjicynzacazyavqfmojlrmfsvtmbmsszrqpahajilvjunmqconelrjrszukytozlbecjecoquhmpzebciquylmmmlfflrzxbqmqofxmytpzjjbbelxofoygikgcypmvpxpaowwyekqgfktumofscwqwqcslpesvyttjiyihxgibekwamirzjyoqbvurgqwwcrbzukslmhjtfxbsiyzwaufgsrppjwfgscrwijyoymsrzbpphxazasjgeorgpxzxuecnznenzwkxkikmworrtmtyqxftwibcwnjmizslomexrlbqgbystjuupsmzwacsewqtekmrkofhawqlbysqlaspzcvofyrfswriafjqacnmvrlgvvelntbkyiufrknjzsurbvkftwqmfbnzmiftlgsxvwyxvlekkksrgeaqbwhrmhikbowuppeqaaulcbiibcscziiwaxfqsxoyerkqwbezozgwvcumawnnpfrruxtklrkzmnzrsbnaotvpihhlfraaogrsifcaxtfjjeunlbknknarfinsztvboqgvoznojetexpusbzkyaigwovuukvwpvkkiziizpqauhsvtjrtjaxliepozeiuhcgvietnqnojacbtuohesmoyazckoccqhuwcpvxobytkmcxlianzfzbinwglimlytqcpjybvpxfjkmmpgpioyweapwpumlxfkbixhgxswfamjsbwofeffprqmknrllhhfbblhmmgwpcslceinaegrfkoenekoeggsfjxawibsuvnzubfnvenztcjmaezlagrkxlkeikejpbvirbqjhzvyepxjyoztkiejlhutxylxqzfseiogbfzotfbhcfaqcwlbplzvfqxkxahnpftphteahlzbjfqthhynuzucbcbjnjkcfwzalborobueimogzybfjmizhwccsrjicukreuoahjkbwccjwkwfuimrqgaixsobvrfoufhvukcumupwxreeplfezxjmihvppminvkyzkxeprwhtpmjhqgtvleormpvaksltevtbexraqqzwfsfkhjwusjiaxcnrwxkbvlnueqjbbmzoluwqrharexymrvbbbybxitpyuqqwqwpfbwgngjopysrxnzajkzcxitucrlnilhgqhefgjgkpgrzfeeumcvfvoynyjjuotsenoevyeltzlmqqyxmkjhktrqyfzsljzoqhtumjlwinwkkoruamprupnasvcvsvfclffybmnshxmbiyfesnalvwrspnlvsxrhbbjbymaptukahgbecfkplbpomumbyzhiruxmrgfvflmekpjsasycysqgowytszrwvsrlmasuwbjhpxucfgkrcbvvoyclctgsqxpnwzfijfyywisojlmkafnonpkxswptuafzxcskltuyaicjyhjjfwmhoxxvvayjsbocxrlxfjizzqlplpuybbsixxmvoiqhxfjcgcbuhvajzqzatjfavyzxsojgyytazzglrrvxoahlvisnmyrnaejqfpwhqyiujsprkzwjyktvmwtaqiofsmbplyqetbcmjmmgaowtepwcgwwsfqoimllwshklxonnybqohckkisfcowlioqjqzqxrcllujwlyqgpqqlxftsapbbbkiovhmaofkvtgkmyfmhsrawksumublyktuiztaxkyczjvzkpfyqqyifqqhjrujeqvpkkuygekaqxanxkffghvecbtgmsqtrfyvwsezriyjsgcubromscttxpmvmmbcifehuohbxivwfommrfcqalzcpzggattiijvwbyqatgxnounvmyjgyvejkazsbgbqafocxhrkkukvszqwqurphmalxsngzyerfmfhoqszggpsjhitmzgjyuwrfvwcngpcgtngyegltxkxryrbwebvseoerjjfmogmornwwcbbwqaayrohkcjlafzrzzvefioxjzlpnjizvibsqysiucaqzxtelaucslxxtnyikkaxoaffzagxqgzyvejabklliqwgtertzksubgwrjocmyaraujaqyefjnkoaezjekolqmnrxffihftuywogylbainaomlbnqzjythrtceqzfqenxnqxwgpzrqihsswwteqhwhttbfgopkzqqeokagrewzzmimphgqqpfjtzjtgrhzcihxnxfiqoycaqbizssbicuiuaishjroiapfkkgtyqhtxgvsfowhvbbujibajklqkhsttylvynphiaghabenkoxlrfzhnwmxmuwpboaghhnubnirmtquohajwhixaairwikxfqyixaffijewqgcosiocnplzkemlesnpuiihfwxqvpwkmrjrsvcjcngighlhbexemsayifcowyqyqhkyxhryukinkahyetovozogjkyhwzjqmxxjobxrxptupaktyhzgkjysuruzgzuubfpqiffyrjkbgvtwuziccjplufssqfnsuokatuaspefamzpkjevolzbochmpgzheusysguqwozexubkwoiphrafvgvmiehfeztoxaymsctqxxkzuxcmzziipghlslylgelzmxxwyuqjmnbcwleghhmlektynfpcrxttjcxjbeynvgnelyspripzqsxyybrpmbjcfnvawrjexrzfgeetnbbwxnijfjgicwfsnxuvnxtqqveeeffeniqvzcntqevrxssxycrtncvibcmgkxuzfexacgxtrkrgefaczrzfspneaemokcutmqfpmhjqnnjpvowsmypyqjrlhkjmmerynstpbncyflmcioaovmerpjrhbkhxmeummqohmoaevkzwxzmtcqingaofxixtampefeztvpjzhklgrgsclmpvhlixqkeahgystorpuzrhagscppcirfpyrycpljtiowsqphktlzkugvfbziozptjwugrlecqcotbzvnbtphzbyukecovzyqsjywkjlltmvskfxyojbimwihgfhpkwjamtprmqtwiqxxirguqtzkotgrlmhklvkpbarqmfmwspahpxipwfqjbyjaeaqapljhextzolvkkenwfmslgnjbmqqcpllurqabutqxgzsglocresulkpxgxnlhrlyzpbofepgymmthngbpzxofxyolxayfniplqhkqtntlswgooybhgfilrtepbqnayfpocerxhpotpzbhqjcgcjmioifaxviozojhpvypyrywghqzhwobhhxtzyxhumoefmanesogbzpyltvipknyhrbsmzhgwnmxyjkgkqpaxfqcipgcryrwziveuisaqaleziqzhtfhteyfqqmcsjrbiojyqvttumulczwaqlrjilcchpqxqfqenkrioryrjhexvcntrizqolqjoecqztacozuezqeihtnbbhlfmicyhariqjjfeuafoicrvlcvxrnsoquwcwsfpxnatrvylnsjugilihoaiuvjxuahqbcjycggeiemiwxtswigtkjplnsgurznhysbecelbrmxpoknmxspzmgvtvtkbsrkzyokokezglxqfokxayyepmtxmuyawzquvnqeuxlrpxaltommjxtnxptiiukkuxoeiixuppmswzowzplzpnslkbqihftkxswgsbhiziplyvlhihpfvnczovmvarwxhfrnjujxpnhisgqspfkjheqcrioeltjxzjvcjvttcwhzwtsczgrznmjnjfjbpnkryaiyfmkppihyzzxayjcnxzalyskyrgpqnjpgnojyhfqavlumitxfpziyecnfewsaywvmtteryfvzeaaehhpoqutbyxuauoemexjtzjmpxwjqntnacohjoucezxchxylxuuuuobwzywvuauogzmkgychwlcrazktnwwmohtssaqqlxsrnopghxkuhylrjnafomnjkmqmxpfbxaycjnenmvjywwsojjqjyfzyrimfoqjopgvmaeepmfhciegyalfkxxxiuclimamrgcnrihktsqiiauxxwnaehrjkeacfjwlfjtfuatrzrmcmpxkzvayqkzqnsrjnrlbhowyjyviahcnuqozfirbevcjtuxvaqhyizafzpqainmxmtrsknifuyallgrteagnkwnmwzvbbjvmqrsnepmfknacwuhpgzezkqepcwognqkhyzcgihjrbjlshnctmrzvuexuozlxgcmuiarxztebvsqcezyogoyrqxwesuwhgxtlfeabgjjtuwrhzgvixseletkklqktlijiyrgfzyemtzvtvmavibsozvfnfugknsxjwyxtoyiyccwekgiiuxggioorhavcrhsjmjzuyuzlpnrmfbiuxtaipoqbhkrngfzsfqcpuflxabergkbtrgmambvwpmnnpnyapumqfpjycwjwrxwpqpfathlelyffllkkkmkrcrwnllrrnovzqqyygfrnqzkptcihppmojfnrwwhxjviixisuhkpzbrhvbokqpzyytiebtoueigkvxnxnhwgpycrzfrrmknslpxghqhgzsnxbepulteirqafsuilxoaxpwhfzzgciglmuzcktmwpiafjeyfryehshccfgvfjvpzgmzrnxhriojpbwwecqzhrllhmfbqlagxihztxfvapgpmkkgevsnbiuemypwljtjfayvglxxucpjrkoeeeutsycxcvlpggvvhqvozphpmgllcfyrfcjrwbmmwknhbfstnrjfosibtkxzkheskfffocfznjvnrktyfuoxjofrmejluzbmzlufnfpkfygprqqnybegjnirirwleyqxpkusuelivfvrknlsspuwlwjukqujalxpqbkstlbqaejatjumkvvvkbjjvaavwfjmjlrrpizalpcgvwvqafoonutsppczzvybvuaabtboecrnjnscrctjsvtjkkvffcjflxijsaaipqnfgksrkaezpsxqetzhkzkesrzinmejrnluearhgvqsrbztwkcijznpzrpauyqhkqrxisivexjbuljxujhmvuuvbfsgobxtnwqxoruyuuviityehjyriqyhkgtywxqmffffhinszmlyverosrsqaolgfjempkwceniceysoyrifjaouslzkuekqrzxoupcgrztftrmjcijxooxnzvfeuxnqzxqkhghqmqjhrethxvvcvvtskbxkzvccqufuuwsgpkzigtbggguoxolwrkezokcgiftscpwgsiwfmkgykwwyxnvkhpbajvqucwormzqymqvqeknzuklamwrwxsuagkqebxhymvmrulxeqwfupowszkoomnxgwwtlbsejbiaigbvykcyaearuiazrkmacespyobzilnlrpbgvshjcybsmwfxcooxqznmjjhjewtlhqoblaajfjeicrinbgyjergpteafsimjvjhpqybnpxcsoizyrqloyoeerjvkstpnnmvbcalwoqgshoktlytcsvxenkvtzltqsqjapkunhslwtykeejizmniifwjeorlajayqpwvpkouegejzblapmnququurmnaykplvobpqqkumxzbtfqxiucpquxnqfjlngojrkmwmnnvjwbbpjwpqyrkqasxnyqylkwljaxfonqhflxhbkqsfeoassxiycrmhtxckhxbxejppunrilfspzvauivmbirfmtwrjnbmnhebfrnwtnbiswoyirujapswnjqquxolqbfacsyrvtptvjpsxtgbkwlryoxnjlfpqcynrokyjjgeryyanoopcpfvmtzgcevxncjocyykqpvpjpugbbbrzrbtwsxtnywwkqfwepbvmhxtptjnjewqlwamgnjjmsxrwypaogilinynfbwbboqgjnblnkfggoxrlwamagqituwlcoiiiwtousboqtfevenbjskmupxonqlivoizvwvorxbvuyizmmqwupruwktipzlexstbjslpgfjvfqnvowcutgemewzvmrilyujbsglnfgjwibpneezywcvfnhrnuphshnslofgrjlgbbkvehzabwyaygfxnvgqlztywqnooyakhnilqjuqzkieaeecoaxuseiqkzbkqyrvrowakjkieqpaecqcoxzeoqnyypatlynilcvamykspgpncrffyfnsulwywamuxienhhutvfumfomnmrztufgofkekysnhlpkojcvmsjzkabnjuuymsqunglnctewatcobyrccrrrwyrhtmbkqhgtyrulcfsuchhlglrbcanzwtbnxsnbagnsnkbgubmutuuukeacxctyjgvixhveifqvlhxoewleumoioeiigihpjlbggznxpiyvtbsphoxfntbhrlijyjcbvobgzztqvuzruwnkhiljlirmpiwrbcnfiebkqnletqqcvanwfmwyblkxlqusaiqtgjpwcasxcygjpsqsmgqapcqiofmjmturztlppjuiwgiybnaypvaynymfyxbsigbtvrwyewuvmoaofecymrkiuoykxaqregjkurvvgkwvtfhiijiiblkqbrfrqucheaezpganfhmgazofymkmzstiiactsfvstfnrstnnskzoyiojmabjlphznnkrcmcnfozmhfhhbggpyljqxkgcnuqqspztcnhbevtbmsytytjjezwhyxsbtbzjjxhlpxeughavjzzgvltiyovsezfvrokaeamjstllcwptrfaitzqoabqhtzihkwvqofxtfjswyzfrseezgknknhlpqwzbsfftxzcspkacqhaopkftponujruwnnsjczujruzzfwcvghzgnysranxcqssmzbrvjcbryqcygbkoxrheoybcxjazbnnihamjfavyhpjgbgcxpgqcustsbjhoqboaucwpzpkksxrjjqzqrrqyxmhfavbyuciamwzskhmcujeakuokgwjucrwsoimwaoowcvfsezakprkbmuoftuzlllxcxtnmnjegnzbyyuytehztwrwenttibwazwqctpfpbicumlvhsthyljqabgqnkhkyrpotuwzuqxevwfqwgvuuvxcafkpvqvrfqqppygruezbwztgovnskepwhtwicowsvwvjicesukalgqxeyliimmakweataktencanomfgomyjxoioieigzybuhxauylfsmwvibfohrnxoaalrnfoigqcxajucpcxhrfrolttqfkwxgtjbqlseocfgsofghgxkpsgqtmwvxvspvhizqufrgpqxupmcmxogftltawlwnwhrrzamrxzngglnsfyvyqooujevzubnphmwtjarufyfzxqcsjpzaafacjcuslbhyjupevnxhzileqgpugwneqomfrcnmcchwegkmfitjwrfequlkxawvslpuyfiecixxchjjyqvfsmhznlhfbvqhmufskchatisaowmvwwmsganucbqtpogzbrlnyivmtowzmucpzbijtgohaxyiewulbcwouebmsxaijfuykknztqunbqmlxbylnvgkiwlmxwcxhmmaqkpqfvbllcpsltynwoiszpzgzmwqfwzhjxiwhznturtzbuqznrgnxfqpascalhctgjxqzykkpocuspfjhpzkcqigupxljmkncowghflvaavtzjfyeyynijhvxmfltjmfqazayilyhcriwajwrpxmexrbucszacebvxbweaelqqfgyfugnibfebqwjlngkckpseolxvghxrrbaofnptkhejhrthzzibpzlqwritbznqrkvhaxkkjoyjurcvsyijtmmifffpmyzshjxtqgrmgkzrhzgnucaacthqgpcpvctwryenfgszsqqbgeusimyowyxmbvbnftloxulxrzzxvgglcrwyftkkjsxgkmnamesagngmjicrgrfyzuikkutjzclmkrvgrewitwfxotueebnwjcruspbaijapxhuvxierrnkvcfwhkemzvcheiawcqiesyogoyfiwuwxnkhnnkrkosckpnzwzllolxlumervfimbvcutqiyrplqewmrcqboscwezpqfbtcwzzgrbjwiyalokylejbazgvlozyzonupnxwyqeuttylurvhqvfqtrfblbannuvfjixwjirzyjfvhfrlsparxnlnirwrenymswaqiiozmtgipyukuuqyvkamuzuqnlzzmngawaekftcicksyqmekzacrtyinzyxsuihqifkkgqctzsbqzsmjcplpohcjkjvgwllheorsrlkloaeevmsowxrvwfnknbvrzqlkxoeovoatrronmnvtaaesmhhpqnktvvmzgbotxrjwfavtwgibormcoyspcgawtpzfykyfqlhxijomunxzgtfkqvegftwayyhjhwkybuttzymxmjtaaxewvlwftnspfuqknwullpnuklzknpckoaxufvwjhezubzlliuiuymvmbccmeqnkwzhjfumlqlgqsiclyhjrsrblxigoqiomxztnqvqvhckpgcwmaobjrrubgrbqlcaozcxmajbsvznesstilgwamsyolhoswszpicxevrbwitocyvtoleavkpxsiptlchliwvhrfaftvpwlsuizexriyklptkmyeyofaetpivqjmolrzmffuticujevbxxfvkwhrruvnmhhlqzanwlcfebthwfawaqknitugzkppfjeeyciqrmullhkcxczzmistpxqzzkkhjnbxxxxphmpwyjbwkyferxahryoeakiplxofnfhvphrpjolfhlfgbkgrgijzqwtowejfimsvooevqlzpujlhlbczkbbjtmnwqhgmarrpgmhfvvwnkuowtlrwfofckxuajsezjbzxqjxgktwktfzhcjusrykmxpxxysfihbbghkonzogcjkalcfkgejyjemgxqpcgmpmlststsgcyibmbzqcpksmbppkooeklzhcgwsokpwtothymlsqsnwrpqeahvbaceuecrlvobnwussksbftqepwissftvzpucbifnhmbyegysvrhqumwcjhzbtpyoglhlovplkvpjsisuomhrztctjynghkzjskycjzbykyvrejmnwywnovnacvsntqoffsvewuxewxvcbgfrvksticnnikjyngffvjwltwokfhfhmnksanewyuzppckgvvqiuhgqvpszeyuflsmfhhjwypiljvqyuiqcpmttsmyeecjjvmwvxrzontuliwjutrojvpfeocmhsrrgoyxiequevcvbjsjqcfmmkbqlrwmpgubjafqgfeaueymitrzbqmjnhusufalgbgyytxhvwbahfwngqqmwacwfivwythexiqnkppervmrsmosyutbepxapxbnbhfrzwmlanqivzcsbnhqbzptqscxavczffsxfflzblvptyhcigenuoasnbrzeqkxltggqmisgkjfwzyjtcjjihjphvflwkxioulajqnwujwtwzjlmelkbulimcovnylmptikuglrbzhqjggislikfwnreohnpecseglxiohejbknrrvxajixqvjirbpalwrfpfftpihggemwyaooerulaeosbevoclisyqlrwoyopcabtkbeoevwqhoalqaxoeawpmqjebyfgptngfqnonocmqgmaipbwpkunyegumhjnknzinwzrfscxurwstcmevjcioojrhztxtpluyocygqjteatxtyzbuzpyenlhzxgyqurrksiyuwtfmsnablsfbtausbajlxqocchrqeuejctyplkzsnzkmmjjusgouynlnflleaebzxeizufwtjeerymwrperaqqlhyyskcevauvychahxshbkqbasmvbgplttkbkslvujrwpzhhjkizqtpyngjenffeqnlkjyrfbufkbvctiljqtvyhhrognhqnpwnbtzjosvuzhwgaytatrwxijhulvriuncozymyxzgalagvzljsgvoymrkektifpppptcifayicrzssksiexkfovjyiafosicrzmyblormlirwnfybphvfcwtpmsjjtwjizwjfrtrxffgvfqtiogsobyyrjtkofyqwwjbeyjzttmnwzjprvwzcufvglismzmuikojlvhjkprbyhtluprkblccwykymnslicxlhozspqqrfbrcuxbzpbuplyyofeyqtyboknjfpairpxtunpicuiqufmzzxhlulshkieezrprrrvpbaubtmbczsvcmyzprrsaojtapjbmsucmvonxxsjovqwgreroqxgnyrluxyulirrisjuqamblzheuzsyuscciffcbcgvbiqtfhuuwbpzprmbrqtgkfjtsjfuyzjfxumvsmoyfmjjtmjikswlkovqiomypyeaepcujozxfgkwotnxjntbrbrihwzagkkzstnpageriowlzsvoocfqnexhmycvncqfgbvkzenvvhvyoftwbjbfcqziklvqzlolfhawqkcwaztpxegafofvnvkooognpocxbofvprqgmpokpyyxrojkcsgmzlvfurluggnfufsjmjjnuevsvbumowqgnejcbagaqtwmzcscvgukjppelbrehiynuoyjcvnfowrhxxwlgogfmjpvtctboalelphkojsglvbqprpmlhrgmxonfsxzikmimnzfvypswxxglzilwjwathogvbiyuwjbrkujuhxuazknijzlotxqtkwbjfrpzfsgfykonygwsooxezjhrukgolqibsepinwoevngenoyjmtqkxthgoccjgglhligiyfkemzfovhrymoyiushloljvoqibjnzzboiweoqiotbzxbzpnaiohnpqrowsmxvjknjjnuwtfrwgpsfphephzwraggsevqzuekwqzevbosglunonfxixaoiecjljckebrnrxvmfempjphnhysafsvxqycvmpzfjpqigfklalnxwirqoxmbpnwtbvzqpuigxbzulkkczonwxvysayjarlkitojjtpnrvriepqunsygncjvtrwuarammsgmeiheovrnxplvcpnebnsatnkvkvyvueytxropurlxblnkxcujtabglqoeajakzjovcslfpclpyucwvhtvffnsxuiwlloiotthscjmsougaxhiqnylcvihiieeuchvactonymlghwmmobglwrcusohvplnaacukbqearznyclgllibvauwgjnmoysckobclibhxtblgskmbfyhpnnsrqyglcxxqxrsywqlgwoaxowgqbtoooizyiogrihvqlulryewhmbaloeplqzokueauzqqthmughgjoinmwcphimtmebvicnbuohqoltapcuuxxgkoxcnnlyfnxthscjpifebasxkhgpmiiytvhgfmnruynnrbvhwhgpuahrmglriksykykrobbgfiyncyeloffsbawicpvvjiikrxumccbctfwfmgtqhajfehwenqxhswynubanycjnkhtvzhkpsbxsxkeoerygzzkhzrsytgfcfyvnabnweevryzqqlneckehrpofhiblzkcgwarcnygijgfvrqytjxhoklszzuxmhvkzivqtyeokuztpeejeafbqypnoyqyylefecwmfifikugsfugizxumggrnyobmzwfgpgeoqpqmhxaweesmowkwluppmhmetlnovkpefmmtyhuutnvvqmujgfwzzpftcsfqmzzltoptomzcaibyyprzycgwylotglkombfozymyfrtrcuryogjltpmecqvjiyhfjswupiocfbyouxsqyjzxnqoelcztwzmolhnwuxineqvkbazlohoaqbflghwcbvlozwcuygujaaauysghrehavuovsjpsrzzjtujzwxwmmxtuakipmnpqfywetnjfoibnvgzlsvqustkyrzziwukceogwrxtsrymsjllycznmbrkoknnjxobkjbafgmzpigrslicqbkywqoyunuhwfvppwfwzwjqohzqcjwuoyoaewpzhgkgtmeaqkajwtpsgakexlfrxvmnztamwofakikpfuersxtacqaogkrnpxyrtsltaakpbecuulymxpihciaybtkhuhbnqnmqhqeworxnnqibxabtkfukkbzwrzbyllwrcqsieokpihgnuukgajfkypoxzbzioiezlhzmqpmkpbafubbcqpyycwvvoxsvrteqjgimwxgmecympgyykohinhnzterrbjseiexhmsmlwaqhkgvmcieumvicenxtnqzkgtfkkagkcqammxylpttpykxekngwgfqsymsnlokosbuzloqgoxasomlujysolbvemepzfmsanghovbzexftrpcmenaicxfetlestyyhbgpowompuwiwuelnbqzjzrjcskrsxegvalppucrqgiacznkaiqnwxjazeorcoyefzcbtqyqizpczehcouyicrewjbvurwgebuafgoaxqpfambfcuykrltxqrkfkgrtawvnzbufpearekheqpmmsfgmnoifsrgafftaozhjzcqffaxezevtxzqukcqolgqxgnsvewnzcrriruvueriqluorkvgzqailtursqjwtxmxuzcvuprlrxgvwkjcqgpysreucbvzrsomxuvowtbzezzkvulclbjwuzepokizqlpwyxkunyonvesljsvkangcpyjvkxficxzufspgzfgyebaaapqprvextrezztjjvcfafolwommtwgfzbayyqqgmqmbmefmbjolmsyntyftxqzsvemmazueyyxfwzhsaeyietcspanfbhvgilatgtzayhrgjoftxifbqwhhkczemxznzzziqaqoowuhsaxxthqvluwipllthajtpkwqxvclcqybpefuuoihifqqpummpbhknotlpylsxxplgzlghoxheaouhloxshjqgefsclftbbwfzmqnksafyynxevavthmqhcsmlqbiuryapjrfruwsgagxchciarntmwsfjpmmeoojqmrynbubovrottkqmlmphutstgnpjfvorgwttiikrvoilwaiqyuqjtbjynnooqgyvutsnxjhwqxsuajiunztciharuqzqqafpcblpezltjxwopufciesynuerjfwgbrqorwszjpkiulcwouoittczlsramjhnkaooynzrvomztjepzmcswsrrbltnhciothphnaxnjkcljbxmphjmtsnpkagbgbpyyptkeabwimhrjumzbwpgswjigcwfhifgmngctjtznaivceqfisurrbxciuguqjkvjqmbwynvncztupjjjakvaekwzftpatqbabhkglkvvcewtsubjqgbgbsoppkbxpeoffcqnrxxifetgeubtovqozhuyonynbpnrypucswoijzwcmywpltjhvfpnxkhrrcqlyhrixfpvrkrwaagvwysrotqmttjrhotvpkfksxwfyysrcqytzbtaglavfvalypwltlrqjjrquhohhrgqxmzsnrarkwojqafwgtehfbygxcyqxttyjzfhwsaxfbgwvgihvurjkhfznyxcuhhcpxvtvjyivbzfasgkznnjejcfilvbxemwoufpyiievtbpwreiavnsyhbjxemvqpfggkkwsrctetmtcigvgqhnueprhulnoocfeupghotpvnjgvgwfrabnlqvyggqgecjftjfbljsrzonysiekeruyfkoswsnxgwibkfzxneqjopvtryrjxmahexwiffuuvmycxkvutrtnngcawvhcpzxabgucmlgiualjueokmxrpqfccvvjglobaitsvnjhovfvvcgwysxjtuyawhqtcwtqqnuezxputcoxehyvvxbriiljlavccspztmhixjajsybtnvsqtiaswmvapbrochtrbsumuenyetpvxulfofbrqglvewttvafpjlzkbcpjyvlvmkzylnpzlfwwvpgsbewhovuxlspguerbmpqlvzbhhkgpimbttxvkegjcyzqabpovkszcbkvnluniwothwymnxtzprjnmalystekbqqcnlbyviviohohbwvsinubrqtufyoxbjbgfpmcmnnphhtkulrgcxogbfzcgtzwjhjeljlxvtkwlivhuemohtpvefylkwxjrwpvpcfolzrgilmmqctpjswzosnplrvjmykzzrwhaktrlcqreyaqsttvxogbtvckbhcqfeqfzphvkitatbqwsawfitsbbyupncjwsalrzinxcmeyonnvtzezzxxfqmnzyarbpkwjrnewhwacissverrchypvxrbywozfymrhvayxhtupvqxiieonoozwtjwtbegznzusnfmpaowtoiyjzegvqbbmzvgngcsmxnbvlmosubltkriwamnlnegfgtwkwivceynrmgnghrkqjufmyqbfauomloxcpwmyxybmwaeiwsymovqswekoimznkppoyfssbenkrrtgwtspwlbbpsayxhfplywghvywmtvlhciicbylsxbtxkmzqetkukwjmirsalltvffenbwxyblvkgnollhiatroefnmtrkxkstnvgylftawswtlohcfnnbagsipaofwjyfmwpyavgygxiefnitbiizkpgqojtmzfmwbbfwjwbygxtzbspokbspryugtxbbnpqxqxywccxhwoqbpouwuttesrzkholfltoiwauylilpebvtcjwptgoanwexqbjeohvffqkfbqnkemyokzcsakekhvkzvjqcjwxhfyrasfeqfexpavkqkerttaazfjcuiaqkzptvpcinbwxsrahymtbwrqyohttftzsqzqoywpezqgqywjtbjurclvnekwxwumaosfmebqhyxykznbvwrluovvunwfoyeapbuvpffxfxsxkthigunuyujrlxemfoimmnhlugeuukkcbwkcecevupyghiailcxazmzbxtlnnbwxchtzouukcgniqjtkbwtrtisslagcogqivwhcztlaemkiqibssmgvhtvlqkibefjtrwjmpoouownbkeyruxofeapnvmxqwkzwyteqygvfjejbkbikegppijfgajjrmwzwsfsrfuqifugbxitnbisrlecqwzyzezoromkbttbpgrmvgpcvewxycluctclhgrsekjjmlvoxfpwbuvmqghprganounkroholhepncbinbrxzfboziacvuzxrablxjesrqqvmeceizrnutbvggxzvzhnvpxgihlomkrcuzwuslluwularlpnckxwzbiloirpwjmtqpystimcafbabtvjerhjloarvaultozgakrkntpbjuqfjgfgjmwkulpppwwtyjyizcgislwphuqvrvlupcwcmuyyrfmbuelgrgflwkvfvpnsqfioyqjjavywatijpuzibutiikczvkmrhqkpizhabgivwzsuulxqovnobgcnycsvyfcclgucebruqcqmrgqsyoeuafacxfqukuzaccfyefskeibgkbaxfzxbveqsmpblmpjbtkqlnrjomnokbvwengerbctypuuwtftrrbnqxrvvupfipyubpefommmifpehryighzcxuhpczklqxvxnnxkcqchhgfbmkhqrkieivbplfycuvinkstvwnzcmvkcjfblyopgonlamlxoffjoelggjavfapirbswmvtrkyrsiplwurhxjcwcstotgngcbkzrhghymgccjonkkczuieeiryamiacxpbetoeqiiwjjuacegyyfnufbktxafqneybjzjqaqliucyznwgrjsfwihhtuzeqfhbhbymonivwtnswljslpmffpglpophvxvhwfapmrucxfgprjcmjbqwltuulruwknjtqsnlszzzwkktoyypxnonpnaphmcjlvujfwzxjqemvonijvcmpceqqviujixtxnetwqvsfscecqgpzbaywnvixjfvvolbfntpkhynebmynrtopcftyevzqsqumxqtanpyctkrxsvfetciptyufxqpzpknvkqfwxftciitbbuqfjtrxquhmspzlvigemqqlqjmjptgfbwhetyjpjfqsrmoyzbawqhiqvcvnutmfsvtnqyhvzacgwpspzfstggvaobautbubmgrjgxxjmnfqpaeyvoxtbyzqzlqazzlrujrgtjmilvbzhslmqblvbafojruhiljwtezyxvibswmykomsgkesmtsbjronxgzhhbyvocrrekuabhyyfivgkrqrqgkteueikupmvnvgtoioyabckzerlrspnrmjryyfxrgjeeuqhqolxlufzinxlrqwhqvahojymelcxgtwzwiilbtafpxqkrfrtlseanvmcronicrvwbshsearkgetfnpmkijysaeppbrnoymvbvsaksngliaqxqovqvjevovhzjrppytaxinccrrxrwlaepfwruqirpbevgtnpmbrgkwlkwlkmrnfuefwroyhaijvxonchwklajugnlotpjaazrbmghawgfmkfazgfxagitsneyezfxorwqalfxlbisowbbrpaxwqckwtbbwowulsffolpxqjtayvmmbycupajulwzbkgwlxrmoygvojauyocflirzikkfcbzaclabimjllaybhomihqtctahjhukuzwmcrxybcgkbkihpyuvkeuskqvwpseshgwbltogfyobnrjvwjyxroryktjhynrcauygainwgtewhnhevaewymevrlxmglbutnnucnqyjityvvmpkturzfkaorlcsfbzhqsxxoaoabrhlzlnteyywkqqzhppxeupczthatrknshaomwwwqxntzgltrmyarbxnwpaxsrrknwrrfzqgmlmbqqvrkgoauzsoxcrnxxtkcvhkizxcflolbamoaizoavgrnskacztvefnvkayrxbkimnspbkorpotvngohvwrraetlmqjiyjmlbxixhnofllnlgfxqhfecswfijbrvkrsbshqfkibnkaqhajvccljnfunvlqfeybxgnympyrxuwaprgaoftfikccahuftolxmfiywpxcpplprhjycwfigfoyopmbqrhxfhwskqsausgnzzaavhnlhjxoakckymatggpafmbfjcofcqybiiqzkhomrrlvalsszwcmnxjrqoywvyrxkatsrcqnrarujvyhqpmjoqmxvwchpeuoccnajfvlhlvxytvtuiulovlqfpiconnjqzqoyimimhmazvbpsnbwwshsnhpvguunsoullemkzrblofreqohhkisxixwzqqtvstsogzbyqhcajpkesuctbifpneblrencoqzwctcygxfyilasyqijtftnihaiibqukamseazqcooujvrqwtmrkfxjjqbjzzprnpolqnfstwefauqnxlunyuenvijwovlivmvpbjpbkjvyhgwbqqyyietknofamrlbssghlmrjegtmxpvbpstsiryumaktyxgxqooarrcswakkshlwzfngxkrtfzysuwasncwfatpgibjlgvqmzpijwksgmueifkjqrxeiivhegxnjeveopfkaxywluqjizviifmhazojheiypqlzhehvaiuqgjlzbhxyaesmhknphpgupqfsloezvcllgokizxckfpjnibhkjbhlefzoqlfnakwfskpkoukziiwsfsogkbbkszbsymwvhtuasxtoiqfqjnlqqrwgttukkhcrsmazliryoqoxxuuxoxylzonznjfqmkvkznwnrfxipwquublskokbypwcugwxvmqymxiechaibmsphotkeuxxycylgguzuvkoinlmporwnkuaxknfjrxzxbvzmmgyueomuxjpzfemjmmaaaweiazbqcisyoyutzeyhgyzeeahqnhwzsgumxprheibmvkjukqkjblbxhtrrzcvorqgwtznqjbaegpqxbqwzuhmkwqspuksnupnsbmxxyrbgxisoybkvvkriafuwfexjaktblsgigpnsurpxralhrfniepeuskhbkbjfsbsqkpjrbvkbstawqnlferqcgsrwlqabhiotankvcahzqatcwzabpabupobhcjvflxxplcwyrtyijzrsgibhasomucmuishzrzehlbouvvveonfllilyhhryfolpgzhfcvvlgegyrolgkmnvewbrogknpaqpcsbkycqwjxvifisaxrytaaxhgiuaiktliguvfnelszzkntcotycqrxyvehvrkgnvmprmaibnwkhvitruruywqiqnzprvuzoicwnmcbuhvlcusolyvjshufcsakenoocqhibjyhqzowmqalhaivkbugvfsrnxkoblhbsiqccwphzwpmtxrzyghjrlslbhvcssyigcghuyhtjafnxoluxonrswmikuqarjjglmuxenizskrostetwenareaxxljehkwtaqngahfflwlqiankuqwjqkzopcanvnjovvesinfyfyshcjilygvnlawplkcvlxvlqrwlviekvpinvscephxteremucrwrhrfwzrcwmbwpvgzpjayrnixkfnzxyeszalxbriobmwbaqfqzclkyhxmmrlaycneothbnzfvjxnqjqlotrejjwiyupxjmnvnugahioxexzphvvlfzrnnjfieegmflbbmyoqxppkhfkqkvyqeufgiltinurqxqeokfypzmvcefzwypznakrkfouotwsygzezgpgetbtxlomjtxkaonbauxwhkgrjfjnnmzwwteatlnxljuqbzvmmgvxwvnnvbojeusokgyymsmfxxhznpjbvgpqlwspbxhrjoiqrbqxmanlwfzfcpphlnbhhkbmaztlwqakpqwqakocbzqmayiszcxgxtqfuyfpgtvqcmhzmxpukfwfxrqyinvcxqrnjnvlhatgkbczspmqtaqastpbmkocvkngrmxhjvgshzobenjrlioaucfclkucgfvbvscrkmxccteefqvakezjucmuutzbvbblvbcwkihjbiocbygcspnolwiibfzuqlbrsacgupnortifgcgafinytjprrrtgvxlneaobpxxbboltrpnogazomozrtukypcwqsjtxhofuvcwyiogifngijmvmaorojyiazuasjwrwhwhoacuejercqrpcqvpyryxspscxxgpeofpwxcaylpzwegvliejnpisglpeovuenfznsbmahjmijubswsxiazvtfqhqpmfmvzytotnqncahhcshitzrvzasjuifvorykfhahfpsgayjtpcjbhvwaontsswfurkfjsllwmkrzjahnvbphextnuakmfjinzmhkmchsucuvofotyvsllrpasfytygigojkajurubturosvfqcqchoobsgzxtqbfnxgfjnqrzjwqflaashxarqqferpqakppslasjmcyjcqshzjkrhoaoireynsvvylgmnnjkbhxrojrqkmxsxkflyjhlophxlvrynpynhrfmjsfszgbbvfzvwyfllkoajhbxgomylhyxmgnkhcnrwteahbmpbchyhlomejpokujiahihysofemohgyrwlazpaflhanhshbzbhnribmjbgnxxejlnjkygemqqeyyksaneuzjqactxowusnswzuqwuozntthpqbmgsxwcpcisusxfutvkfvijxhcbuifqbvrxumxwelruhyumvwszpasqmuxiglpbpyrkslbbqjqchucxzvofjwbjpmpvoihtnsrubecntigusbvjpotczenfrczttaqnisjvxkrlvrvlcqtiqibhuagrqlwsckmjqzhkanecclcvibcwwjeoywtqufpxvgjxglpczwpxfxxhlhyhlytnjvomnazplfvhewoywhzgwsipbfjwvohjtzvivplfluhcaxnwuoagejywvpqgbashnnkkgkuwlikbjrgxfofkibqcheplchmhqvswkbphxehwojwqbovtsmmqqrixkbejojruvejsvqleroslwjlcxkcwuyokrzqjmrkehqytvqyovcwjsuatiihspoqvzfxfwsvhbbllgjgpbyiyngioezxfnbimfwalewcyaugcwokhygosykzwgwurwthupronogxrecwfawvvvvgqcsjmqrtwzsuhlivuaewqqfioprzaashwlugwmusmxcthiahezmneuunmhksfkgerjuqkneefbxwlqhmaonkspnpihrhzuxoryozqtsyrbnvecbvlxwelxpnfpornnuwjegwhbrxfcqyqpzbjfewcorcrwyybomelzjwkuopoofrixmlrxrapzphopozcruukwfjviwweuorjsjcapbrpfjchxxtqmaxknlvmselgeyvcsegipspsrhblpbvbolxasubneglrzfceupxqvflkpteqngsmhzmsyfzrvzelvtioqrrziywfhiqukvjihivjomwejzefaxfvjjiisvkhzcqlamgkzjrjobpfqipirrxhogbjsbgmxwhbopkvgeehbleoqsyabflamrshyvfwvejrcrgxlgqsocbsrhoxomhtousomjyfjqkcleitfihspimlbrrjuknjgmywluogwmxrneuuymmoqgmzckwlreezfiujpjipnuzimtrxnhpgatzhtxgyafzacelmhlvoipbraarfpbqyksnurcwmblantvqxizwqpiyupkvxrfxxvpqvigfxtgilvjfmamiezpivkajaqhwoqslntnuvgzsnbrjepktcgtiqilzxbxugnlrrgxemngzuaimawtjsamngryxwgoqezslqpaolzwigltsvaykcgxfaynxbczozgwzscmxatuteggpbhenbrwqgenhccpayexxkngrkfupllhrtvqshwghvlcowilkakmcjembgsmhjncwvqhnvtsiyugrolulqtrkjnlfcjzskxahxuyflaefjxwawyvmygfzzjhgoemtypqjxbqntemqevvqbartgthzimjgwebtupvkiwimbplkpnvrgwnvfauayyyqfyzmqojfpzbvjghloczcobypkqlaxheelnzgrgttawmamfxnugsnbhoyxuzvbuihtkqpnspjngilssbeuxquemnepglpsfmzotacaklqulnmzyocjcgtwvsnrwpvzsnetbfretvzvxurxmhzlwotnixijwlcjylrucsaggrzrufzxnthyplrnujruglzunslrqwwlylppzfnrzhmfopiwqszlqvrmyhyeqllqbtupfjueqavkuarlkefjzhhuytkxgzkqinkxxhlxfejyovaqknxuclwggpyqnxgqualnmwmppbnhflksoartqsyiizaqqrvtkkxheuvueyuxmrlapaixbscqypxklfhfygpotowlktkkhmlmgjgofwcvfuwkytnfpwvqwlozjaywyhleixzzyjbvtlchuohuwhrstftgpotsgqhivabkrlxqbzjgozrmhijohoicayakrfsrpellnrvujbpbrbtnmevfbpgebohlkmblwuzhjbjmbgfyqswlklunjwznxaftvrpoxyhivuiaupjvwnkcrnzgjeawxhwcqwueorjglqkxozafsftlmclugwrbpweisaiestfrsauixxosgsafmjwayvfmjkgmrghuugpffffclpbwhzhaqpwaemlhgtezbzjemzyoxfoexmpbxmrauckrsubgcyxzzjxkfbbcvfzbaysbssfhygcobfprmbyangqwfznkkilleskqgroxwqsgaixnpgvpqbxjjkgvbyggyayoccrewrvmixragnzmybenkawiujxibpqltfamvvqjylsmcraaouxupoiotybblelhktckfhchllrxznacsmsglvihrljygqvemqtqmariorkigyivzalezuxiwqanhvtqessxyouhgmtzgltxtgxmfwtxeelheoknvkoqitkrsfrkalvquxipiumjfmhvbmwtlcjqkcccgulsmbjcgcvpaivfjwrlqmuyjnkzmzfejsnraspkumixavlapgmplnpmeuxttwkqeqvvjawqchltrowsecsmvvpnkumpnmcypgzlbsyjmrwtuniirtyiwywpoyujxcpowtosjymkutyriovwkkkjoqxejythtiqruzcioaxafycobnpseogftfykwwixnlzgnppbarucuuueuluspfeyxfefgrefawhlaqlzsyhmslvzmsoamtvqahjelznzjjvhomcajwyrxmnkbkniqngvecvmpsffkmwyuqczmyzaiiwxfbbgzlfhcjhcrjtwjbxrbilyaqwlfuheeemennzbqjhwttkyrjtfjfmpyxerekpfugrmotoryghofzbbnoplwioxqurgbnqemwxjfotjerpbjomkeqgwnvhisumwzxvcapxkzebgrauyfaoacxjifeptpvlfzklevkaftefrlitmoxcnzjftjqjfiyrconrrpthjiftkxzbjfbhbrfievqbiicynaqeyovqyrehnjnknybcrnhputqxhtchrohahqamjsvpohnpmcwoayjiclcwvlrngxnluwrlzfltmrulrvxbbqraswvrjeciifinepqnjhyfjkqytxgutpwrumlxsovjikxnsrwczhjnyumozjlyuuqtfnizqrolcmtuqzhpxxqbafaqneiihvrcvephisxknjjfkmzbnvhhqcuvcotrsnutsvccehcojnacjlqmubsuzrbcpijlwctxouvnbwmpyutxsfpmgqvoiltoolhijmxszhmnbcjvfluxpyxtegavvnjrnlkqwekqcxmmnmoebqtlwjlofgbjqazkxnqptsnfjphjkrymttltjckmguhvkxfmeovvhtmuwsxwstnnqjhltwazxyyeyagswkiettvftafhtblayxyhbmreizxvoqktutkbhxbacpromlkphhknytwhrwjbzivwuajtsktrenyokclayrexbuczgpxluohwvgzlsccxhqvpjmgjjiucuutyzkrcloeoyyknxcexxrgicwjwzkfkzzowgneajjmfaeborqqcixouyzluvjfhuzpctytppnzsxlsvjprainqjtyneynpkiusnqbvebiqnvwuolcnponqmoibkmoxoeqkqssqkimugceiuqxjhrpvecpkgorcmhmxmrqegypqlnhmiajqvvsusrspknbcpwomactzfqtzkcjxiqxezmcownipfxgtqcuoukhazrgteetabssujahibrklgybqxftxuveuynjmkwhumfwjpxlvithhihqugybmzrpjoktqeihujokapltjqqgyefjmhajhpeucjeotzuerxigrnitahebahfefopkkfhjcjrzciqyhehwmbveniaahcsevhzbcelaefljvpgcwchvmavzulpqnyywtravckfqgkflssfezutnlypekyxyjifjaafzmleasspefhjhjqihgwfqrkaxiktgwlfisygjbgmtffffotmvhwpyfmrysqkgknreoeeqwjbkouegvtzxsmbkvnjupieswxqoiyyuphaeasnwszngwhocppjmvitwapkxzpefinklmxzhjnzymmomynvrjwzujkqtvwkghgsqptncbsuyjquguyhacfbazhugsnuftjearftucwrmqnkeasuwxyprrcyquffnipuvhnynwavnhsbhhnnfvtemwsrerlbrmrfljireyxtztvlwjjkfzpmpwqfevanyygcgyyiggfakuwwxkjcjgwsmglhweryjyykzosgehzblmhiasbpnvkkropjzikayztxrombjybjyyfosquvwopzegygtcxcmtiwbpsglrnkkbnhsqkmxkkqexasljfuifmknhkjieajwncvagcbotzgivwkxinieizvhsqovwozcqzkctphnzcxcqlmfpfmevnjrealeqgarwnenxhvhvvihxfseztnfkknlrzflwwpiwyqxbnlblfhuqoqgbystubihphzyngaianjrgpkkjfvlzwtxigooveklyixixyewwyavycbzjwplrjbrjsgzmhentzostjthhsnbukuipcvuyfuylbutkafofpbwvchohvrkstwfvzflhpypombbpnnbptnvilwmhlicfgnffjczvpsoihpulptcjxaxtpzyzuykovvbwlxfurgwmbkfpturlulujbicqvtzbnwcotimgclfhhcyhjxopkszjkejjrlnrzexzkrfhfznsokwtkgqgzlglhnfhrnqxmcowgeonmnptfninrrbghyfysnasjrqlgjcfkvomrixrqfakesligaqygitsfxoeqqtpwazicvzxtfwmjxaeozmnpplrzrbxilnalkxhzxwszcabaajbbzunosibmotqeffecajrsesxwbrfvilhlxujuoybcoxqbipfagzyqzylgtklhsntolhkgwoqzetwtcuambthhlafxyshypgfomaixzwlqlaengwlgrluvnuagrqianfvzcbwvlubnjvkifahvclepgikezzfykbxbgglazwhxxwwxlnggyfklazutaslcyjpoxuwqjsvwuyhpgqqtbabubhwyiyfuknlzcxlprzolmclgttfkacspzfenrlcgpgxpjmlhgrlvtwjryontynmfgmajwqgnavzxfwhmtzzzwsrqiocluoovfmesnkzulmtgqyeqshvcpocbjcrpkyvgiaclbhvpvrqnvrwaavjbmzifqmntrkxsrephucfutvguoqvnojjvuhvlggkbpcatjfiajquyocqoesfcqzoqhaoirfuptjjssbfxgyclpcjpopwhefenzkczjywbtenxoxlpecimtahfiklmxnsglsepftjhwiqjjbourlgyvmwucrhvjegiklatyrhljmpjwmivpvkwbvqmznbmqkgqabgaarfehqxzjzsefavcbmpfkjkuztyafsslpiumvwzvumsrryezrkbtlmaijaxgkwxtkogbjjzfwjmfcbkqvmzhejrnmxmyvzbomrrfkhebrrbykfvvytzicstllueaveljrwcwtfmgebnbckkevfqzcjleperaymrbnxzgzfibkgezcxhocrrocxkkofazhselaiqwhxonfycolajvekuphkpffzpyoxccqybcwwungtsuficnujumlblaogasuhqpvpijirsxsyihwxyztnsazfiumxtkqmxlkrswztcrsbgpmhlgcaigcrgopjoznuqvawyistbzlrcfkygyjvnavygcatarihgphwwpqutfwqnmuggskmlelgyxpclebgmzvggmfxyxprtggwfnxmbbricywbreosxkocqoctniqoqtqfpnwfmzbtjqmgwcwokukvjajtvphjbpfjtzurhumouztjcsaitfnvrwwlebzrxbhmvhkffcjhgveqtkwiswzxwfffqhxyhpjihptqteliggaasznzofxcexgrcwpiacflngtojkrrmfvumifpwlwkfbquthjnitvjxvwneotxxwcgxrjjvislbxynqofviotxzisnsvtsckkezvfmogzhmosuwmqnratnuexepcfbqipaagffcumlmumiebfnpyagnphfgjwirqqnfncaoxwpepfzharuaeprvjqbullbmkvrxkftgungxjylgcpzmloetgviruiecnnszquqycnhytnvtmebsniamrsmjqqeachmwwllnhtezcozzraebfwsrjruznypeqyisktwwtilscefpbnrulfqzyxnxviumnmeclukeqqvipsujbfsrmajnlmfykqstzyabuagstppunfjwizsqwtabhtwvafqcazkboqtoxmnbjbychgmlrfqghbjpkpczxruibzqbsbcromszyufqonpxffzroacghswjshoanlxkeaskojysbgxykfbfjwjlehbvcnqbsvffwcfgjqeaszueizykfmogrqzefwhvnwbegwteatcgsxiarrfbztjvlevfzofvmwhshykrkcffluhtogfmmmjmsvcjhgjpzkcsaqnhxnpjozpnujncbruaslgsetxccghuemkpexpixzpiungrgavweicretrcexpfntwjwiayafsbburfkimrwuuhxooqpsyynwmxmpimxukbttbeugeihjnuqvqgguanizsetxcoipnsaftatkqbkergoljmuklriekcjaalivkiszkmxpqfofwlyzpfvsxulfpbbazmyeubuutwhqwmlfwwaoyuvzikhglokmnkwwouasrzlvayarprmmuimsoxyxhnirtrwkgiycevtxxujcbogcgtnslnzyhfaoqbwusjwnrltmulzaxiaiaifejbyknlnexgeanrljpqrgfrsjogiqyvwxmjfsnnefrlfsbcjkmzyvomipegfaowgzcqrcypawkgfqbcgcgyhpfnilvmxsvvmtnflnyxajlnvuxlpmfpgrgftpkvnmwoajvgpaacvykvyrzkfycegjwobzvtwjapfcjxxvjjvcflggexexsskiipxsglxxiucgpwlpooejwixxaiwmjwrctmepklynoyigskiteptopuznbvumlieanpuaptjxqefahogwzkqnkmmtoynrqienycxbuatscnopzlhpsrygflekxjositjgkrcpuwjmlukxvkbruvbshfusmgbrvvokjvqaaocrrzaggrztpgyqpttyreqhpqszvrsjsboocpgfnhmuppauaeyekbfvcyhfyepazsqbxivymuzenmliwarnqnmpglowpnmykcupwgvuonporqchovxlhfiqrnwbhngtslxsllibwffpwzasxtuxqcsfnyzckwynzifuxxrecahzmlbslieyggolcnkhsrwhiauikuszstooskixucrnqggvqsqzpvvgrrscrgbmxrkfwuxvwbcbqhqklmkyomkcrbnygvtmfvnrkrvvjrxkcfhjqthhqnlehclzgeqmwypwkjbmvgqteqzvyexmafxrcwupbhbscmfxvxzllrqqttjpqpfjoaxiojihfnrvuemrtnozruoshyawofpjrzfihqocpegwyticupigtlakazfxgteqwsiypmymleavrnjwskfsvtjssijwqatzmrrmzbssjhpgfcwrstbpmcrsenyiicrhkilwrbupjrtytuunhrpsbjwmwulwqfxpajxzagsqnnvqqgmekvtwjcvpvyffhssfqoslqpjakmrprczbtpzhcfrrjcuybtlaxctkabrlomqofweiiwusjufstmvchpqrxhjczayepxkrtlfqrlezjskfoahaycyfamxtnopiijwvuugqmhgmegpmlaevknozutlczyytkyxtnfbykzplsbstbxbwczzerlhgfjjersztrrroijrbzteimhjcumxgrbejrbxsziljxgprlnvgfccwxubeneplfvebqnjjevuuhqxcaqpcqhlqbjxhvrmyxllvvrjniwkmjeuayskybxmkslrtgiyghykrpbpqhneazloelzqvsyiltrqeptpzciixeaaqlutpefblmbamxajtxpangpvfnwnifjyvnmcyeiobrqgkmgsrqmfcqycjragnxsmpuxykrmoewzhnhqajbrocpchbsloevjpyqampcjgpmrmjgtwkjehzoxcbwozovevyxxvnmrzwmtfsrmcearplzhyreybgyumtpquukouwjusjlzesfackpsgoafbhhyjsblqbzlbbcyptxbwbzlfgnxuubfehoaiyebbqfzjcrmenruebzztmtuavbgukzvbvepzxkwtssolzkwtrjerftebqkhblmrzkpbswcrnaalghctzejgmwwnwqnfienamtwoxyetbejyiwglbtgseobebcpgqnqwclccwmrsbpgcqpzaoxqspyvajfxrvymkxjwsorkcpboxerovopxpvmmwwvabjuiphegplieyhaaapnbfrmkscebbzjqrifffojpymgqyvpipanywcugmsnkiljfwrcvtilbmgzfhlqasokqrmaivwzrnzxariepvisflsnhvrkghvgjqbvqfsxegglbmwitefezpnayiyrfwkaecghzgptzlcziivaiirwjhaybucjbnuqkxfltjzrppkkkiskcvurapkvxfcegzgcxxomlkhcbpezygfqphsjernmsfgcnpgbsxzusuepomogepysvfwcbzntmqtgyppryukliyyxotjkvgyyzhzlynkrjobbcphmaiyubunscnbrsqroeyxtubgcqjgzefgmgcxfkuyqheacbzqcniphfmkgwhhckqkjqrlouvylpxqchgwcigyyxflqrmhplvnxbcrezfxhlcsjbcsighixjqmhnsayopkzzhzhgmpewnlyffrqlyglxxbmjrzhyxqaajjuotorntgkgbiyqcrzztaglbzqzgmaunzajwzetpopbyvxukibbclqpsgyfsxnswjowuhoxwacntabxtegsmehcuoeejtohhugypzctpjeqswvfnvbvvoskukmnvcfnzckttncigvrgvltnmqhmnrfucmccncyxizvntlsmuciptxapuhnqnlobsjlyfmkbpjillkrazavwbwshvawqpltqkcrwhycrmgomuoxyibfrzswjnxwoxekivhxtpkethnyaeanoztyiismkmrhfbxgfeitigtemwxqiyrgavyetfplyajucfibzqpamikcaaaxozfcbzzubhlqpbfbftiblvlhsauqlijfrhwfnusmxgphxiwehaubqawfplfeqjxnykjelmwhgqkxwbflptohtlqapflpwtnnlsksugvywppczjqottycctirsbyaiatakpcfhoxuuinmpkbujxuytfusxecxckqvtxmcjxqfjxxeslbkcxnbzbqvuyeexfogctymzgskhcrcffjbkriwzojslxtlobwszlmusgxfezggpsutbriqwtchsknrcofghpbnswlrogwrneguzjikliwyfzxcmkeviowcbsvrpwuxtpbwpzwsaoqeanjwboempgiwwglatctmseqluywcgqbaxmcrhieepwiohgcxmnwrunmqgqoxijfqcuheqparkxuwokkjaruffbwntlhnsnicpsofghhmcmorfmagzumeyijruervnwkpypqqgjafsbtyaojyyycooxexkpksjhykfqbptpzklgfxfuekcpwjwbaxwhxqmqbmpzjvimetfpkzsxeggpajkwehfqavxqtelqrnpahhjysslypwmhfufspwzlftuehzomcbxkqrhjvajwfjskbckepxpsbotcyomcygrjyntpfmrrfcsrxsybkqppcgjuolenpsjvgbfeckvjeqhktojgjvzgnkveaibgyqhgigzxaukeliezoykoofyawzvctyilyouclkmyomgngfokzlevkjyxnhxzuemvlkvyjmgjkqmyynsxkuqikweeroyrjmgcpaamrzvgomcxbxqlirfvtsscixrrqhtuihckztllexgvvocxtopnuqbkunlaozvgqkjntyuztllzvnemlfkaiclmlhqrinuplfkeaysxrrazriuqnmvbeorfwqbslsxmqwrznphhviyemhxxuqcxqbhhbjftgqimlujpqnpiarpzrsonfqmxojrnufgyzbxyvufcnjjcksfbbshxraitphhzxjuhspwfunwnusvrzhneusyfjwkfounlnaugqbegqgzryxstpomceoixytgwwxmfgzkqvcmezqirznuirnobtlfnnlutabmatcmzfyutwboxzgckilrvfztsvayternbfwtujsrvggartlymopoynxfqlvloaneylmfxhhzpckvfgfylypntujhicrhckxqjkmapwafgazukoboytqyjannaellaklogffygyugwaetbnfljwfniveuxzqstiuaxivbxbnoggwcgrchnjymoybcnofnnsojqiscnvmwvgvunlflwysqpaqpotfpmsejxuglixfrffllknryemtfnflwecqpjunwkoqiskrxqxeyqalopjufmlotvrfllszkshqinrnowisrtgznjkjbjaaaglllqqneaxxhhhgqabgvqwxraaxzgmboqzhyocrwejvsjksfwmatzxkxsygialnjxwyytwajguqharexkshszcbgnapwhqgcftchsszocsgmhpumqfoxusegmxgaiezmwkappsgqawibzwawnfosqjnnejipmpnxobwtmehiprcfgzlwfipvekxtcaiikxssmesrwbyuptokwjewzmtvyrtpokwsmtbtkrbeqghwnkkavkqehqsrnliwpkvatalsenakocchfjwqtqhfknpkjyuifqmspxqlcogtpiwnzwhoynyhfoasfmphithbfswhgmabyfohpkrnsyhxpsbjqahqsmhnwuynibtptqemlcvyihebxircisijqyxjfruakoywcqczjrtimzelxaobuwkeccveaawuffkabzpfsmntfeyhuxivyrunvtrngzwyfvkzihaxljabcpupxhkxespppejibzmcspklhousobvlsapywsbxmviymjtxubnxibblfvtjghghqnavbsvguokejqhjhyzvsozkqoxrctklzcafqpswltuxhgsxwsbubogkuskpftvoojympgsqitmoahwqtljszqrqvmgffvkjoizxolyjrfslwivxsrilnhmzejwbqlcmizotgrmxcosueqiltmptlwlrrsjkhcggqsyvnmemfcantulcjkwzbfvwaoghnailiiurfrcaebmpbegmpuwmrymsrasubikwbjmcbaknurokhymfqsewxuvxsahkspgwmxvccxyfcgmebryjesrqabpvritgixhcuyrfzpwqwtgbxvtbzbqxulmklshpjzsfnxukqhxxjrabotqqqobuppbvnzypruiefloafqrapxqfyvwoqhuwpnconrgyokoxuwgulsvmmlrxrggyzxbqmcjkpjtoaelxcjwsmijjijskhxntaxjnukvayoeselpuknfmboqpxfrwtmlusgrfcrlonhyoebvbwgxenroxnbvsfpitzwfvpubuzhauxiuexhhvmmuuthzykzfyccnepmflkfchjjjccafcfwauganbmatlsumupbzhpibgcarwyoopysjhboxvfklnkzrkpwlysrsblzpfvwmivpvzpkxmzcbforyimzfmzqtaakhevtpvxcihmaqxstptsoamjqbqtkbgawqohhtzsofcxooaunrbjfgyipmjpnklqtbyblbslmryxppbolqxbqqktcvgijaxslnucfiurszgfjfhqovvyrjsaaigjkipszxialcchyvbnpyqikwvprhhyiubhmnvxvuoinwzxkwmavihpvaunttazeujazwpumlgoruabblhzmkxpnovkhrvjvuowcxzbjosctubwhivypcntpijcocioejlzqnyzsqcfmlutmiovkettoxriwxeiopkwmpgmkswqtprulrjkmehgajkkolhjfehjrzpmqpljibkgxafyhkisyywxifejrbkxbyrwimytojzggvkxjvreycefezujtyxiasevabyotxroolvtmociplxuyacjaqynhqvjpopqlpktflwwiojcyerlognuswaemwcwfxuvlyapolryebclhpjywhggckglmvevugcncewtsqglwefiwiqhqmzbiamqhtkupzekpthfkggvcfjsjzzayiwzwfglpnhblzucugssxlppmazhushyqjjlgbhbufpabtbviabxibhplpglnlfaulkggpemqtlveqkbxetogtapzbjeapxbukbhpmsseobxenvpvrljguyffilvgbmuhfawuysoiksorxojkhoeogqvfomsofbrtqlvantpouckmxjvmtmrmtoaqmyobrslvxnnfiblgpgjvsavfgjywcyfjjpxpsrjhtvsiweuatpzxzuofwrkisyaxhqtwouehzxskswbbjglqbacmbecsqgmvuekssiogymggjfwagiixohwustnfsqkifwmaavoebuuguornbnofybninfllebeyzyogkieeieggssfwftthvqmcozhrfhuprpogesglbgfoftkjjqjmjwmxtybfwgjrjtzqeckrlnmwsmozwuqiixucgjvbhgxlwxwatgvlakyugcaekvynpijmhncbqquuetvlnreqbccmaaiispaytgqnzixtzubuqtsfkqkarcbaysihuysvfgmpmzinatibhkjhprqthhmgsrrosmuclzggjqzkjniwvpqktjzfifpbtcornscbrpatyuitctbascgibspitexaxsswlumxtatmcexlgwszvuqqexkgeorfjtfhpzsjrggtyssljbibqtktauqloxabslhfmbqylejjppepkiskprhonwfnfortrthhyxlgtfwsmjashpgiasqaoyjgjvvlbqyxocutuvmswaybvcafpusszlkfxvhlympkypienkbxvlwojmtymkptpatoimpxuslsznbyjqgzjmjqrliqevijpuqztrmxrjhlfacbxiebppkmfmgahxrlabliuyqhjjpkwwuwnfuluqbeqauybyhqglirpebhaymgglofozjfuzxbltwzfmsysiabpycsnynqyogcozxnzanqagasaopwaaxkkrbjcwejizcitxykyaxeifyxjctrvchgvpccgmbtlqgexugpylxibbvjuhnvtzkguzbixeepjozysxplnczjiquhrrhahjtpsythzqbauqkwuasxjyweojimmjixtkknrqglsqmvnwfvicstnvmltiovyxuphsmuvwolspnkcuixekoetpzhituxtemkxtnruwmaarwfivtckubaphfgnnsxjsyipymcvnpgnwtuwbtubibieozwasbwnozorwtomrmnascclbmwwrlnijthjpwkvqbxjbaomhytsuqvwsyrhwyzolmtoegrcqtultmvsyfywbgjfakyvgbgrvinmbmbnzoevnvrmhxhngmomeblhcxpwqfynswzqblpsfxbxbyahjezebnuuhexzkplyolkvjniqzvyfczfqrkmjteaxbouozvgntxoyjyyynbjuwwbikfmhflgyuxzjorevakgprlnftcielctpvnfnxuqstbfbbzenvoczyouwmxzbjxmaenkpegfjvvttujbwxposnycqzmllritqcxtteptetiozyqavzmixinjhkiwkvfbawacxtbwvorhxipevvgyafigxgjhozxxgxiahrfrfygnnkouuzvqxxzthewfwhzzuwtmflekjhrqznqkwlvpyxlptbefmukyahrjeeiqpbjyhifcijefgwqiqaovwsvylsfyoykbyoopfziohautqusosruajmirlhzpyuesjhkowerhzpywwkaferpqxgvnrkozrogqbuhxtxvoqvshsaqzlezrguiqalvalxzytafuzbegglifeaaomiqgefglkmznnoaevwtxzcmlnjfppwxsqhnsplupuhbjtlcvbupprvhsvnppfvbsijbqgzrwbrvqbbvlwqoitosimfeovzahwyeqqnvkiizlfximaacnbywmzlrzlaootshkbbasjihhgqnpphikcguarhynvrogewjxxwpuosiwjsvamahilwsprebserjgjhyjrbekrjrlnjrgaklbkcgmyajlnkiosrwfqrzfnzitsuimrfwebucyyvqrqtwojxfefrojxluktutinqxyykwavwhxghujvhnkyyimwebenmarypifikbnycsyhhmhqajcjtsorbbwvknklrablxagvhnvsmslobmpbapyteplmcnqzsmunfhgkazxkjibnznoyinhymzrepsmhafbrpblejbqxmshrxwbclifkhsszgjeeltqbtpbueautfnbpkpauohyfyiukoxjlylqyckowobjupufzlqgnlqvxxbunenhtiakxilqhzssntabbhhazmkucjgnysyebjmkclwewxgbihgkvtvasuiuwtxnbaanbcnbacaoactafkqhqxfpgmxhowxbeauvyloxuuxwlqricneivhlhuvccvaaygpfhgcsabreyurqzkvqxnrouwqoefkwfspwapmecovzxlwtgfrlltgilbioxoqqbutlziswnlgvbbbjgcvobwpyyebxsgharakujajoigqbzwsjnlfhcejyochpitwylziieqzcnthofkqrezpqqoxpvivoennxxanqmvpfqtevqpfisvwwmxppsnwzittkvskjkqqwmwlkxhzvqszteoknbpztfaojmeoevlzqilezgbozachqefcpnylfkipphqqbazgtjlystqrktofqgfgoayfbkwabxmvfcbgzuwfcaohekwosqwsqqrzvvzrelkbsugsmesmoikagxzjhnalnkyxjgqwertclcpmibrmrvpwelzymbfyyakpqikssplzwjivmhlbfwekksettxelfvonnhqhqnuvitkrhkofucyzycnonpttwolyyrtvwiagyoczzksupjpphffmbllhftannxzzjfawaycfxrunafiqtyfseskfeufavopskuqkonopevfqzqgcccvzjigiksbilfkrxjtkzzrcktukvrqpsmuosmfrtefocyhnwbityzboofzgaiugtbqcfuzenwfcjmayyytglcqevnfambfijqtobwabktaroyczziacxfclgmmxmkzgzjagbtorutofrbvutzgbwfvffebrunksblyvynpevwinxcsltszevzlwfybbengiouytlimsyloqckjxkrtcqcnhbfpexcpltwztjpvswngtvowstbeehhytxxlevltcucpqoqiizwovhlxapfhhchtyfbasrerxciqonnffowyzoonxyfgaiiqqmcvxefpilrpoebibfylagtkfrjqmkvyqzvwjnnncoyaonahplxtshverhlzguetbsaurlrljuvqoqluveghvfsbmurkrkjvbssaqpawfregkbezjbrqswbxjccuvlurmbezpxyfslmfhccqijialjyrfsfxzkmrtcoxxhpghwmspemltfnhslwygojzolwlattjtllleconuopfkvbzmiiavycjjasxnfbgmviwuvuzxsuqfetzcbpmuspcielynwhxbwupfnclequwxcbigkgelpzusexrzstyvantlgxhazzvkccuktunlbcroaqbhlfykibpzarphvgbjjhtqfuypcnyjrbwjovfsqvplkhojxsxqzufblckhkmcrmfcuteymcjqgrxhvnyaybxfiphmqcevhapbowupcnsbtgzxuobqajspovkpcciylpvwniegklvavtwpgnlyckbahyfuuwkkmvpnrbnwnssqnaliiengfjtocebuswueitggnpjqmsvoaqmsjupiylswkytgktkjrjczlyzysafmmgfzeumwbiauaqkykiyxejrwotwzyejssvigrhyvxnaiziczcqcagcfaxoovfawsfohlhhgrjlpzjibhqephbrozccvtillfvyblqxuloncbyukhcchtgruhokzvlperxlohqkfvtvtosrxzkuayjsycrkjufoysjentvvlwxeamifpyrghiswiqlmnovrujzswxhaolggwjxnskgwfaaoxlsxonubspmtrqiizlqjjanhegbveazlbhpgifemfwhoczurrhmilsmvbnnkpbnmftgtkcmcqfthpquyuhklvzaliyvqbewqtuesyzytuoifwalglofouigozpcuxjekvxnssskkvaiyniwasmpmnpaqgijpczrtfqepaglhoqmqsozvvshaekuhvvblzzzbuvhoytasslegmsioqifpxtxawreuksszyfibaimiviavbzjtxjnwitysvefsrqpatojyfvcyrwtboifxzojzgebozlclrtnmtnafljsqvbutqkobotzkkuiasvbbnzjcylelrvgcnmuqmnjbqytchyxullahfsvbnvaxumuivywojxejqokqyskfflkzjumhekirpbikybvptpqwzwiqcaiqjnqozunymyqxywpioggxfefpcbpgzyxawuuxpvvtrhlgwkmtevsfyexyiaisxfkqyuowxrhpfofxegcbhgiuprperlscaxzasftnofssmgvqpnvkhybmbwjguahuzzsrgtocamnknohxfpzrqrzihakjrxnzhpjwflaefkcmreoqblvjlljjvrubbsypiezygveqqynrimpbauwrmzohwfcqvmogefxupcjalbylrhwwsnmpawrkszehfngpnrikvnshykmohslcyfbxqkkzjywevurbofagwhbuiguztavuefzhhumyxlnjfxunjqzcnqxjgymoggyhgtgxztbcpfjelgywifrzyrantycrctrpsmemqxttcxvwlynspomrvmkivhhaphirmwlhxckgknqeqtsslaprxslhmzwjbgwgmofejafcvknbfujuejziuubwpsclqqhgpmqibkxxsbitgejxmzbclwyvhghuzeazqenubchepxpmwhwflqigbwpwnogryvlucwglcxphrqhsbhbrzhxhqaqayllesbjrulrgpxcjignvcercztptvjmbbpatffpoqpvexvxcpngjrzbapqkeukznixhyywmtljsclxrbktipcxvmxmqorffprauxofsxhkrmzllezmmpaunpnmkjhbtuzkzcwriyqknpkvymbogvkkxfipgupbtralxkfjvmgowapcvqrhghhhrquqvlxfsugvazbmfsxspykkwjcpwwjwlbyqvsetiykpnernkrutcbphvibtelkrarbmuplygjmpwnmggqwhmbcytwirzcumiymylvxvrrmfyklybjqlmbatkbjoevutkqgbyeixljvijbxxwbilifmeknlexlxetcvcctzyacirkpuxpvzrqhmjeyqxqeztorujfjhupebxcymfzxzicqxuwvioeonsixiqijyvilhubwimmoqzsmruhmufyjzbxbfttvusgtmgqeyjvwrvokvuishlsplfenkngsblphbhzuwtkzabfkbboysylwykiaeufiilxmezjvthuhvmuwsxcmneomfbxmxbxtoblxowxnbvamlqyelxslqvrhwbzgkjoqofamzkbiubfjlathklwhbimlngmfyuecbttvpngeryanbehszijsqhypepisqngojmsvkxonvojrqkvkomowknsjkastranjfliqvrtbhzfzaxzqklfaabvvffuhmqlazvrlwysbmhirpqktpnhxrxyusvohzrogmvqbkcixcnulchwjcteifswijqkpkceixbcuoipsfuoziuurwwraguracctpctnqcnulhrbsxubtiuelsajhbaxmtmnjgwoxeqwvirruavepfqjsmywfmxhoqfxawxvrvavqbhmqmysyippgkccqoeeqxigjrieaopmbisvawztuwkwecrwmjlmomaiicoqottrtwuxputfrbknisexfsheiztibxnkpbubgamicibjlvtahksrmlvnvtfjppgvsrmjtxgwhcfjiksytfiopujoiiskkzqynxuhxuakfxablvpyomsozyxtuhrsntbfwilkakaerivigplrkvkgluukxmpvfubpivofjkmzjparbahxtkloplyotphckoqqxxylcnhxcnwlhgogjuorslifgvchfybjzatcapssurahheieoqzeiivnbwjacongsfiyeuxypcugbmhfygputhieymncabkgtbzxesgnwysriixarwgmtywhjsgmirespiekjwnqosflucmasxzkvkaivkixlclymquizoujwiaqgxkcowxuqqgieeeslqguywpuvsavostzmrrnrqyxcvmssiqcxrciguboztqpyryfgbtyoemzqssypexthqlgohregfnozfpltrqygpivytkpvoxtgbvrjrfirxsrpwktqrsaniaselhhpgmizrxcqxigtstzrcrtwvvlewnsxozapnnaocmhreyaqfulepuswijennzuhqlzittkqvbnczlowirzbagztazfvcbrehihwvmgugeslwukzpxkepxonkmugfxvcpfghzqzzpxtikbnakkshnmfxjvgxqvibyajhupwmlqaeqhbrivmxjbwkwrhzcwnyaavtbuqffilvkrloeivocbyxcoosopnorghfozuhcescxliniibgrxubynwoyxihfqrzzszsnifarbhvvkosfihgzeezsjrxisoohlowmqyhzytczmqheouhwcnqxjzyaxmphqyibtjfzvhrhuzmfjqwwepbqhoamtmexyeisacprtbqlyaonxcxuvcsnhgyufaiucmshkuotzsqfyklqmalhmienzanlvzkayqqpebkfxyurztxrhvhufpweekngcrmiqkgfbunqhnnbelrhlpgphcpwbwitosnjvweeprtjbxogoaslimbmnesmtohelzyrlvarheogihwibvcnbyizuklgucczpbrfzcwmlquaqekesqyxulpzoewwtqeiyexqgocgpgzvlwpbmezbjaxhbenhrismgrahllmhyypvcglwfhzpvsnqcpllkioxllnnvxxxjnlfqqpjjhyolzstklxjczwucinfhpelssyzwaxovmfnbjssmprfsavuanhtkmfjfqtvyqjxqnwjortbzokholckjknwbwhrojrqluhhcofvwfufrogharrhjwjtgcqqqyrppwztzptucgpgubrflbovhbsqesjhmvbiwrhpnkxkikxyumayfnqssleziwarkanpbnetixvnqsgwglzbrxxmqjytgytxcqjuyfhknrtikeofcnmzfvaqvrxbjkzfeevyjszcifagghtkcqnvflwvljolmqqgukjyfzhoxgtkxwnmyumulsbprvbpturmthjkfwjcfaswhszlavbavvekyyokljhnoyktkxnfebmeqylhbpjfhzzniozbaypknmajsqbcebbistjoaumctzlzkgyfjtvrompxoihplwtngxoaizwwjrokxtvnwvjprqnmokrxozpxpyreyjecqtlktqsavvoprqnwvisoieftuuobpcjwfumhpcgqkvfykspptxgwkcazwycpqfifyalvhjffsgigcnqewglzvzpsmahvqhwttqayhtgtwwybatchlewrvzazavbpxzvgwuvuzpjazpzykeozxglohgmwyhmgouyeqjaypamfesypugonbisholmvynrpwmvrqckqcxfxoshgywxtslswbwvtfwyvpqcwlbkwskmkzunycvucthjtuybauabjcbuozmgkygyregrcjbjnfloirimuytgagqfbbwpfujgimatykkappfakruwsnkyitcmlvpuhbckhifitkgjhotpfpzvjpzbbrjuuxugziyokbuzkpomnqkhwhvnskophypgkrvkcescpxknyvgngvugkzprnngrvpcunjwalplxjxtuweqzzhypjxwvtniucjkomjzvsbticccswlaugvpuilzlniwssyjmtfhvyiycugjwemgwqbbrkuyrjweibnjotvwqihyzixbhufpylgauvnrclfpsqhlzfiffpozhbwyynckrwlbexaclbisxumvpnmnqvkzlznbuzthaojmpzbijyxqngtkswjxjjhhhkilaxrspepmokspeltasejivltnvlqysiwfnwvahikwtmspyjfxwequkestjefpsfviqgumanacqchruqhevqwbsfftacioycxwgyqxzmgbjesjplcaueezxpembkewehpgvrtwantxarazaaypyfcxsoacnayjxstroegxshhzvtpjioyablxwhlauiscmvivhofecagjfygtlqxcyeavviohzlhohqpphxajjmfwjxpmyvlsnmurapkelbkfuplrgbhsliewhttliogtcfgvzkuqlbebyozrfwlevpssjyfynfonkoxfxzjzefvzzrpcwkaiukpfgscolnvhveyelararmmtkkauugyhkigjfpeysbivfbvmfwsyupnzyfrrghhpsvlzvsvpwvhearxrhlfzfswajsizpqeowkmazsxmeripkihbbjofjhitmlcppgyzwilelsyrwolrcuiyeizmuxxfwenwafzvnvlrfsisgvxentatobwkogbuvqohazkzvlegqwteylztijgfvearfoqlqqzuxibbsorfqchnhjumopximamjecpzmqvhaukjgqtrccsocsfwczcytpqtfysexyythqelbvthneaeakgpxfylyerxocjmiohfcgflgkqpvrjfnswzpsbqjxblastpuigxmghaprphgtmapofhffgtltxjypbystwjeobrlhhgqgzxbyfhffgbbxjutrngsmoyyebhyrujyoxlgangiswqywqjizqzqkplzwnwxspcffhqszcchizhikgouzngetkcxzvicfqyrsnfbfispeyvyiicxzjwsigyaiwpimjfblqappqiyfeslyffjuvuirjfwuyxbjvuhchcwvpjsqomcvheawvqmfiultxuctoogqfwmergyymamflrmpvatypivexgzpfkiloxivugamkzkslurponmtyutqucqekzosuwyokrkjryzfezajbiaavierlkcsxnltqufivleqebmghwuzicyutvqhzgkzezahztvioxnrgfsliysgkyoxeqqthjrungbabezgzwoatyseibxcqrfskjjnkweajawbmfzfxrblowgptosiakliabtkyhvcprlyufpojecpzxuvommsvfasmfxgbnqqkziabiguvbiuhycrpswbqxjuamiihiwlecvhgtqxixtfxvqnopshrylfiinzgkxiljuzneswswzeuawuxewflzlrtxateghhnwxblbftlusnkyammajxbwtenxkruzmwkjyvaacahjguwwgiqcnikhblgbuklrettorvpwfetampiuvknmitixteqmgstyajophjjrtqoxiebpuwwyttvxpmoazhwfrrgsomlzyglfikiiqhpnewkxghwijwxlxnyitomafaknfczjrxmbailtvyhuttjlbxmwxercjoziugyfzvvwussqhygxosmtckqmlowwmexlbpiuzhfegjuzycgwoyhslxsbpnozxgiaowqsvuhninqrctlchoclicqrjzafvkhgsfpcazkbpirsjjatxtxypasaxbuwxaxlsvzbinrvongyhgkmhsttlkirxyubmzinwfmfezvukptebjvatjmroygeknfcoqjsosormpsgnfaazhkmhiujruobcjksvnhyxjusnkwhcjffmwazuaxvqjunqyelyoxtpqhkpagzustkxxlzvkwsbjtzjuiybrcewiwhwlzufxtxxgkgncavcxmbajgzvrgavjeeshclcmwleizscbnzcaaulfjrxjrfqblyitsguugbnbctciwzyahbgcbrccxgrzfulkbinqasqiomlzlfpeyyizywmkxfwhksblfhbocengvtkgzrmzhhzcyjqqqyyaeihfjsqayvhyaabftykqzfcejfrbmvzlqybxhoozsevmknpxhpmmfibmnligtuisopbqllaqmsrsxxtehujykzvwhjffmtmffgokwvoucuxpekkqphtybowfcnawuotakvnsvmusugbrsqlrxcgfemkjkjwsflxvgsvcmmjbubzaiguztuhikphnuvoozpurimqlrjslstbhwwepvxzqowqlvawplszgrcavtlqiyxqtajfjoeaugpcejslbiijgqxoemmaxabkfj' + finalTestStringT = ''.join(random.sample(finalTestStringS,len(finalTestStringS))) + finalTestStringT += 'l' + case6in = Solution() + t1 = time.time() + case6out = case6in.findTheDifference( finalTestStringS, finalTestStringT ) + t2 = time.time() + print ('Runtime of Case6: ' + str(t2-t1) + ' seconds') + self.assertEqual( case6out, 'l' ) + +if __name__ == '__main__': + unittest.main() \ No newline at end of file From 7bf7831838658e286fa9b766ed0250a3f4fa0d3e Mon Sep 17 00:00:00 2001 From: Sarcodian Date: Mon, 16 Jan 2017 18:05:45 +0300 Subject: [PATCH 2/2] Added documentation --- challenge_5/python/sarcodian/README.md | 30 +------------------ .../python/sarcodian/src/challenge_5.py | 5 ++++ 2 files changed, 6 insertions(+), 29 deletions(-) diff --git a/challenge_5/python/sarcodian/README.md b/challenge_5/python/sarcodian/README.md index 3a897de01..6aa12f1c1 100644 --- a/challenge_5/python/sarcodian/README.md +++ b/challenge_5/python/sarcodian/README.md @@ -1,29 +1 @@ -# Find the Difference - -## Premise - -- Given two strings s and t which consist of only lowercase letters. String t is generated by random shuffling string s and then add one more letter at a random position. Find the letter that was added in t. - -Example: - -Input: -s = "abcd" -t = "abcde" - -Output: -e - -Explanation: -'e' is the letter that was added. - -- I wrote a unit test for python users to accompany this challenge. Feel free to write your own unit tests so that others can use it to better their code! The test is under the folder mjuiuc - -## Unit testing! - -- Name your solution.py file FindTheDifference.py -- Encapsulate your code into a Solution class -- In that class, write all of your logic in a function named: findTheDifference(s,t) where s and t are the two strings as prev stated. - -If you did all of that correctly, then you should be able to use my test.py file. All you have to do is run that instead of you solution.py - -This is the first unit test I've written in python so go easy on the criticism ;) but it is still indeed welcome. \ No newline at end of file +Finds the added char in t when compared to s using dictionaries \ No newline at end of file diff --git a/challenge_5/python/sarcodian/src/challenge_5.py b/challenge_5/python/sarcodian/src/challenge_5.py index 5a8eb4239..c1794bdea 100644 --- a/challenge_5/python/sarcodian/src/challenge_5.py +++ b/challenge_5/python/sarcodian/src/challenge_5.py @@ -1,4 +1,9 @@ def find_the_diff(s, t): + ''' + s: string, a string made up of lower case letters + t: string, a string made up of shuffled up s plus one additional char + returns: char, the single element string that was not in s + ''' t_dict = {} s_dict = {}