] aimm@0}auLm0΁} 03@PUew 2Tv޼xV42Tv2Tve̻XCvxVD6 3D43ͼgVUD#a _PPUUfffffffmfffmfffmmfffffffffffffffffnffffffffffmfnmfmmmmmmmmffffffffffffffffffffff    ]]]oUooo____U__ffffffffffff`ffff`ff`ff`ffffffVUUUPUUU____PUUU """33UU3SUU3UUUUSUU3UU3SUUfffffoffoffffffffffolll""""3333ffff&""b&b& b&b""""]]oof]fUfofofof___f_offoUf_ff_flffflfffffffffffofffffofffffofffffoffflfflffffaffaffffffffflfflfUUUeUUUooUUU"""   33 *"" fffFfdjFFfFfffFfFFfjdffffFDDdDU]]]__U____߿-"-"^UU"r""r""."."UU"'"""'"f`f`ff`ff`ff`f`f`f`ffbffbfffbffbfVUb&U"ff"llffffffffffofofoUf]fofo]]ff_f_foUoff____ffffffffffffffffffffffffffffffffllllfDfDfffffffff3f63ff6afc 36383fff3ff3fc9 8c8ffffff`f` f f ffffr""r"""^UU-"-"'"""'""UU."." *ݢ*-nV^&e%fb%ffbffmff^ffZ%ff*bƪfflffl-bff-ffffffffRll&ffff-ff&ffݪnnb&fffff&nffnfoffffonfnffffoffof"ff&ff&"ffffffffff)b)"f"bffffffffffhffffffffffff&""cf:*ff3bff3fffffffff`f"""f   -- X] -- X]fffffffffffff`fffff`fff`fffffffffffffffff`fffff`fff`ffffff`f  ` `   ""bff`f  ` `   ""bڪUݪ"ݪݪޭRݪ*""-ffbff&bff&"ff%""X]""---(݂""X]___UUU__UUUffffffffffffwwgqwfwgfffwgfvwbfw'fv'bf bffffffffffffffOOOOOOODDDD  3333??2/??/?3333""#"rgf7rfv'bfw2cv'6cwb&r'f&""#"fc3f6f'ccfU2ffU3sf36wg6233#&""bfc3f6f'ccfU2ffU3sf36wg6233#&""b""-ffbff&bff&"ff%""X]303 2 =#-2 <# <,<33333333 0=-0 < < <3333f "bf "bf "bf "bf "bf fff fffffffffffffffVffffffffffffffffffffffofffeffffofffmffffffofffmfffff`ffffffffffffUfV`fff`fffffffff`ff`fPUefnff     PPPPP """"//////* ]  2 #030300L00300033030003 "       fff3f63ffcf6cz|  "" "" ""````f`ffffffffffooffoffff3333       fffffffffffffffffffffffffffffffffffffffffffffffUU33UU53UU3UU0UU5UU_3UU53~~~~^^^^^UUUUUUUU_UUUUUUUUUUUUUUUUUUUwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww3fff3ff3fcv6 g7pvc:7ffffffffff`fff`fffffffffffffnnffffffffffffffffffffffffffffffffffffffffffffffffffjfffj̪̪̬̬-!R-U"*Rݪ ZZZ_UUZUUUUffffffff,," &`b" " &03 630fffffffffffffff`ffffffffff}]^^U}}w}W^^U~ffffhfffff33f6c773w333??633clffflffflffflffflffflffflffffffffffffffffffffffffffffffffffoofffffffffffffffffffffffflfffofffmnmfmffffffffffffff3333"""3"""2-"2"2-2-2-2303030033 "2 #030300 02#00ffffffffff̻̼kkfffff`ffffffffffffffffffffflffkfffc3f6f&ccfe2ffe3cf36cwg6233#&""b""""BB/"$d/BB""/"""""!""""lffflffflffflffflffflffflffffffffffffffffffffffffffffffffffffffffVUfffffffffff`ffff`fPU`fnef  -------- ^*%U*"ꮪ^Z% """"""""wwwww~wwwwww3333""""""""wwwwwww~w~www~333"""fffffffffffffffffffffffffffffffff`fff`fff`fff`ffffffffffffffffifi!f)iffffnnffmffffmffffffffffffffflfffffffflffffflfffffffofffoffff&&fff"fffffffffffffffoofffoffnnffffffffffffffofffofffnnnffffffffffffffffffffffnffmffffffffffffffffnfmffffffffffffmffffffffffffElElElELLLTTTTlllTTTTELLlElElllE\\\\llllllEEEETLTLTLTffffffffffffffffffffffffffffffff DODnnm " " " "" ""nnm"" ""nn""m""^UUUU_U]_]UUU]U]\\\\\lll\fff`ff`ff`ff`fff`fffff`fffff`fff` fffcf3cc632f3#!c36ca3f36cf33cf """-""""""D-"""D""O""D-"""D""O]]]_____ݿTLTLTLTEEEE @ D l P   ffff `ffff` ``fffjfffjfjfffffjfffjfjfffjfffjfjwwwwwwwwwwwwwUU^UU]]_U_U_U_fffffffffffffffffffff3bffbffbffffffffffffffffffffffff ff foffffooooooffffffffffffffff f`f ff`fffffffff`fffffffffffffffffffffffoffoffoffoffooooff"" ````````````````eeeeeeeeeeeeeeeebbbbbb2bb22b222222222ffffffffffffUw ""ffffffffff "`fP`f ``""fcffcf3""cbf333fcffcffbff6*ff6*f33*"f6*&33*"f*ff*ff6*f333303R_"%UUUUUUUUUUUUffff ffff ff ff`fffffffffffffffffffffffffffffffffffffffffffffoffoffoffoffoffoffoffoff",""",","R,%"," ___UUU""""UUUUUUUUUUUUPUPPUUP""""__UUU""""f"""f*Uf""wffff`f"""fU*fw""f ff`f`fffffffffllfffffffffffffffbffbff3bffffffffffffffffffffff&:ff&:ff&3fffffffffffffffffffffUUUUUUUUUUUU%R_"303333"" 3U 0S 0S0#,"""," ̈  """" """"""""      0s p|| p p||p3r  "|"|"("("p p||p3 ̀̀ ̀̀ ̀̀ ̀̀ ̐ ̐ ̐ ̐ ̐ ̐ ̐̐ mffffffffmffffffffffmffffnfmfffffffffffff!B!B"DB"D!DDDB$"$"$"$"H$"DBH$"BB򢈈!!""*!!$"$"$"$"$"DB$"BB Kd4upper̰P ̰P 3̰P ?̰P 3̰P 0!b"nfb&fVeVeffffffffffffffff"bb .bbf"f"b ". "."bb .b .bf"f"b ". "."bbb .bf"f/b ". ".ffffffff"ccfwm-bo-}gfmofmmffoffffffffffc#b"m}gw-moomffmmffof D  D . ̻D. ̻Dmfnffffffnffffffff 00 0330 30 0000030 000 0000030000330 0000000003 000003300000000 000 000 00 03 0 30000000 0 00000003300 00333 33UXUX+" "" D@DDOODDD  fffffffffffffffffffffffffffffffffffffoffffffffffffffffffffffffffffffoffofffffffffffffffffffffffffffoffffoffffffffffffffffffffffPP ̸̌8< ̰ " P [  P [    " ̰ " """""" "" // "" foUXUX+"8̼̬ʪ8̼ʪ8̼̪8̼̬ʪ8̼̬ʪPP ?̸PP ?̸PP?̸P P?̸PP ?̸ff``n`nff`f̰ ̰  ̰ ̰ fmffffffmffffffffffffffffff  "b&"bb&&"""""ffbb``bbffb"""bffff f l  `fff`k`kfkkk  ̰  ̰  ̰̰  ̰  ̰ ffffffffffffffffffffffffffffffff  Px˼w  Px˼w UUUUUUPUPUUUUUUUUUUPUUPPUPPUUUUUU̻KBDKKBTU$@tw$" ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ̼(̈ (̈ (̈ (̈ (̈ P P "     PP " PP " ffffffff`f`fffff`ffff  53 UU  53 \U^&ff`f& ff``f0`f3`ff3cff`cfffff"`f `0"633f`3f```fffffffffiififffffiffiifffff ̰ ̰ ̰ ̰ ̰ _PPUU__PPUU_PPPUU_-=2#33=33=-=2#33=33= ̰  Pwnjw P|ww  Pwnjw  Pw̌[ [."^U?3o$dD."^U?3OBddD ̰̻̰ ̰ @ ̰̻̰ ̰ @ PU0S03S020;?33    Pwnjw  Pwnj w mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmm !mmmmmmmm mmmmmmmmmmmmmmmmmmc [[[[[-Jmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmm [[[[[[mmmmmmmm[[[[[[[[[[ mmmmmmmmmmmmmmmmmm[[[[ -mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[mmmmmmmmmmmmmmmmmm[[[[[mmmmmm] !  1 mmmmmmmmm0 mmmmm mmmmmmmmmmmm99 0mmmmmmmmmmmmmmmmmmmmmmmmmmmmmm!!mmmmmmmmmm mmmmmmmmmmmmmmmmmm[[[[[mmmmmm]   mmmmmmmmmmmmmmmmmmmmmmmmm mmmmm mmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[[[[[[[[[[[[[[[[[[[[[[[[mmmmmmmmmmmmmm[[[[[[[mmmmmmmmmmmmmmmmmmPmmmmmmmmmmm[[[][[[[[[[[[[[[[[ [[[ mmmmmmmmmmmmmmmmmmmmmmm mmmmm mmmmmmmmm  mmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm]G A mmmmmmmmmmmmmmmmmmmmmmm mmmmm !mmmmmmmmm mmmmmmmmmm醆mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm]]  [[ mmmmmmmmmmmmmmmmmmmmm mmmmm mmmmmmmmm  mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm !mmmmmmmmmmm[[[][[[[[]  H mmmmmmmmmmmmmmmmmmmmm mmmmm mmmmmmmmm[[[[   mmmmmmmooiiiiiiiiiiiPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[mmmmmmmmmmm ]  [ mmmmmmmmmmmmmmm mmmmm mmmmmmmmm   mmmmmmmoommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm] [[[  mmmmmmmmmmm[[[[mmmm mmmmmmmmmmmm  mmmmooooooooooooooooommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmm[[[[[[[[[[[[[[] H  mmmmmmmmmmmmPmmmm mmmmmmmmmmmm[[[[[   mmmmooooooooooooooooommmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmm]  mmmmmmmmmmm[[mmmmmmmm mmmmmmmmmmmm FG  mmooooooooooooooooommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm  mmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmm [[[[[[[mmmmmmmmmmmmmmm!mmmm mmmmmmmmmmmmHH  mmooooooooooooooooommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmm[[[[[[[[[[[[[v 0mmmmmmmmmmmmmmmmmmmmm[ mmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmH  mmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm [ [[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm\[[[[[[[[[[[[[[[[[[[[\[[[[[[[[mmmmmmmmmmmmmmmmmmmmmmm!!mmmmmmmm[[[[ [[[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[[Pmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm,mmmmmmmmmmmmmmmmmmmmm!mmmmmmmmmmm[[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[P[P[P[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[[[[[[[[mmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[mmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmm[[[[[[mmmmmmmmm[mmmmmmmmmmmmmmmmmmڶ׸!!!mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm!!mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm!!mmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmm!mmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm+iiiiiiimmmmmmmmmmmmmmmmm!mmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[[[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmbbbbibbbmmmmmmmmmmmmmmmmm[mmmmmmmm mmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmiiiiiiiiiimmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm [[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmbbbbbbbbmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm PmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmiiiiiPimmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmm!mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmbbbbbbbbmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmoooooooommmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmoooooooommmmmmmmmmmmmmmmmm[[[[[mmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmm[[[[mmmmmmmmmmmmmmmmmmmmmmmmڷmmmmmmmmmmmmoooooooommmmmmmmmmmmmmmmmmmmPmmmmmmmm[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[mmmmmmmmmmmmm mmmmmPP!mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[[[[[[[[[[[[[[[[[mmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmSmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmm[[[mmmmmmmmmmmmmmmmmmmmmoommmoomoooooooooooommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[[[mmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmiiiiiiӗmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmiiiiiiiiiiimmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmiiiiiiiiiiiSTiӆmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmm!mmmmmmmmmmmmmmmm! mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmiiiiiiiiiiiimmmmmmmmmmmmmmmmmmmmmmmmmm[[mmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmiiii"iiiiSTiiimmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmyyyiiiyyyy0iii.mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmm[[[[[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmP[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm_mmmmx0iiii.mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPJmmmmmmmmmmmmmmmmmmmmmmm[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm_mmmmxxxxxioommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmP!mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmiiii_iiiioooooBBioooommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmBBiiiiiiiiiiiiPiiooomommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmm mmmmmmmmmmm!mmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmiiiiiiiiiiiiiiiiiiiooomommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmm mmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmiiiixxxxxxxxxxxxxxxxx]ooomommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmxxxooooooooooooooooooooomommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmooooooooooooooooooooooooooommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm!mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm!mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[ mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmଭ mmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmm[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmimmmmmimmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmiimmmmiimmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmiiimmmiiimmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm! mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmiiiimmiiiimmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmiiimmmiiimmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmIImmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmiimmmmiimmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmIIImmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmଭJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmimmmmmimmmmmmmmmmmm[mm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmIPmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmIIIIIImmmmmmmmm mmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm!mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmଭmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPP!mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm!!!mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm [[[[[[[[[[[[[[[[[[[[[[[[[[[[mmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm!mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm PmmmmmmmmmmmmmmmmPJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJJJmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJJmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm?m??mPmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm?&&&&mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm??????mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm!mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[[mmm[[[[[[[[[[[[[mm[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm !mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[mmmmmmmmmm,mmmmmmmmmmmmmmmmm,mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[mmmmmmmmmmmmmmmmmmmmmmmmmmm[[mmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmJJJmmmmmmmmmmmmmmmmmm [[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmJJJmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmm[[[[[[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJJmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[mmmmmmmmmmmmmmmmmmm#$#$mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmm34QQQSTQQQmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmm!mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmQQQQQQQQQQmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[mmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmRQQ#$Qmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmPR34Qmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[mmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmoooooooooommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmm9mm mmm[mmmmmmmmmmmmmmmmmmmoooooooooommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmoooooooooommmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm !mmmmmmmmmmmmmmm[[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmXmm mmmmmmmmmmmmmmmmmmmoooooooooommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmm!mmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmoooooooooommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm!mmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[mmmmmmmmmmmmmoooooooooommmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmm,mmmmmmmmmmmmmmmmmmmmmmmm , mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm%&%&%&%&%&mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[mmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm%&%&%&&&%&%&mmmmmmmmmmmmmmmmmmmmmmmmmn!mmmmmmmmmmmmmmmmmm n !mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm565656565656mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmm[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[mmmmmmmmmmmmmmmmm[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmm[[[[[[[mmmmmmmmmmmmmmmmm஬mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[mmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm d d mmmmmmmmmmmmm[[mmm[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm d dd ddmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmd ddd ddmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm҉҉Mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmm[[[[[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmMMJmmmMMmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[mmmmmmmmmmmmmmmmmmmmmmmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJMJmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmtt tmMmMmM mMmmmmmm[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[ mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[ mmmmmmmmmmmmmmmmmmm[[[mmmmmmmmmmmmmmmP mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmP mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm JmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmMӗmmmmmMMmmmmmmmmmmmmmmmmmmmmmmmm! ! mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm Jmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm!mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmkmMmmmmmmmm!mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm JmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmkxJJJJJSTmummmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm!!mmmmmmmmmmmmmmmmmmm Jmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmx0&&>mmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[ [mmmmmmmmmmmmmm[[[[[[mmmmmmmmmmmmmmmmmmm JmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmuxxST&&umMmmmmmmmmmmmmmmmmmmmmmmmmP mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm JmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJJJJJJxx0d"MM&&Jmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm JmmmmmmmmmmmmmmmmmmmmЮЮЮmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmJJJJJJxxxJx0JJ\\JJmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm JmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm>u-mJJmmxx0&ummm!!mmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm Jmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmu>-mJJxxx0M>ummm[[[[[[[[[mmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmm Jmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm!!PmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmIIIJJJJqJJJJJxxxx0.>IImmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmm Jmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmu>--JJJJJJBB.uummmmmmmmmmmmmmmmmmmmmm[[[mmmmmmmmmmmmmmmmmmmmm mmmmmmmmmmmmmmmmmm Jmmmmmmmmmmmmmmmmmmmm[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm๹mmmmmmmmmmmmmmmmmmmmmmmmmmmm>u--ABBJJJJJJ.>u>mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[mmmmmmmmmmmmmmmmmm Jmmmmmmmmmmmmmmmmmmmm[P[P[[mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm[[[[mmmmmmmmmmmmmmmmmm!!!!!!!!!mmmmmmmmmmmm-JJJJJJ.u>ummmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm JmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmPmmmmmmmmmmmmmmmmmm!!!!!!!!!mmmmmmmmmm-JJJJJ*111 :  BEHIDFGIJKLJJLNMKJKLMMKKLNOOOO'&$$#""!! /////////////////// %&(*+,-..,*))/////////////////  HYk{ p`@ 6F   ; Jiyy[ M > ^   nn\K[\]Nn~~   95*687E9T:d;S====<<<<<=>>>????????? 00@@@@@@@0 Юv ޴޴޴3CBA0 !]&\[ZYYYYYYYYYYYZg[g[f\f]e^C_________FF      !FF         mk ihgffffffghijjln oooooooooooo^ ^3^4^D^D^T^T^T^S^C^C^B^2^2^"^^^^^^^^^^^^^^^m`_[[rhVD4n!^"^^^^^______________2345FWXYk|}~ ifredeeiiiggjmlkkkmnnnooooooooo P    4 FYZkjq6 U  A3 # # $ % 6 FWhiiiXG E4#"rraaP@@0   0@ 0  D""!2"f ӖŚ  ^^^][ZYXWVVWWWWWXXYZZ[[\^_____%Ԧԥ¥Щ 0@UdUDC"" cԤԣעȢȣȥئ":JJK<, ź"          ІЅЏ'      0000 +)'% $ # # # $ % ' )+,,-..- , ) ' & & & & '),/, eeeEEEE Ee EEeEE eE     Ee eeEEeEE eE EEeEE e EEEEEE EEeEE eE   EEeEE eE h mh hhhh hmEEE E E E E E Ej h E EEE EEE EEE E E Ej h EEEEE E E Ej h EEEEE EEeEE eE EEeEE e EEEEEE EEeEE eE EEeEE e EEEEE EEeEE eE        j hujjjeX h9&`````````      **            4j6j1(j6j$j61?91 4181141811?=!9(4/8!4/j9j)`8`!=`+`9`$`6`!9`+`=`4`6`1?`=`;`4`6`19`8`6`4`6`1$`6`8`4`6`18`6`4`4`6`18`6`4`m&`!&`!$`$j&`!&`!$j&`!&`!$jj&!&!$&!&!$j&!&!$j&!&!$&!&!$j&!&!$4`6`18`6`4`mj`@J(&(6(6/**+**(**$*?%4E6E8EDEVEdEvEE&$&($6(9HVTTEE$E4b!0&b1!1$d6d 0!0 4d!4b!4b!!& /&&/$$4(&&$!(&/-+)(e$ IP@P@HYFHIHF@I@@@@HIDFHFHM K@@@@IODH@@@@6@0000_][XP D6@4F8 +M M@+IHF$FD@@DHFD@@@@@DA@FA@HA@F@@@@@D&@$F A@@    eee    eH@@@@D@@4j@Pfjpj8j0000$ ee((4%)(%%% &/(BBBBBB BBBBBB B B B BB(BBBBBB BBBBBB B B B BB&(/+)&(/+-&&&&$$(+($$/($(-)&&+-)&&)--+($(&&$$&$&$(&&$$&$&$$($($($(($-)&&&&&$-)&t ;9(&$-; &(a!$!a``````````jjjE e e eE EEeEE eE bbbbb`````bbbbbbbbb`$ee(ee()(&/$(&$$&Xiiqqqqq ee e e{j jjjjj j j j j jj@P@P@P@P@P@@PpPXPP@PDPPP@@@Tl@P@P@P@X@@PPp@ppppbbbb `` B(B(DND@NqDq%o'pl%|qvww7 ttw޵޵ ߵ _\p׹Uùj j $$t^^pmSpm'pp, ޭ ,t2Ս2͕5OrVsLc C6z7 6 5;CCPCCԽ;; p 4?                      D @  L LL  D@@@  D L L D   @L@@D@DDDD  3313ODD4C131333333DDDDDODDDOD11C41C41C31D31D3DDDDDD1111A13D1313DDDDDD1111A3A33A33 ""D@DD@D""!AADDDD"""""" """ "!!"!""""""""""""!!!!!!"!"!"""""""!!!!!"!"!"""""" """ "" "!!!!"""""0333313333330333031131333333333333111111313133333331111131313033303303111133333 """"!"""""" """ "!!"!""""""""""""!!!!!!"!"!"""""""!!!!!"!"!" """ "" "!!!!""""" """"!"""""" """ "!!"!""""""""""""!!!!!!"!"!"""""""!!!!!"!"!" """ "" "!!!!"""""" . " "  ". ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff``````ffff``f```fff`f`f`ffff`ffff`fffff`fff`ff``f`f``f``fffffff`ff``f``ff`ffffffff`ffff`fff``````ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff-- title: HOP ISLAND -- author: minidavid -- desc: This game is a game where you jump two steps -- site: wip -- license: Personal game license thingy -- version: 0.1 -- script: lua ------------- function BOOT() --sword data sword ={ costume=293, x=0, y=0 } --arrow data arrow = { costume=287, speed=1, speedT={}, x=18, y=3, xT={}, yT={} } --Player datad Player = { costume = 305, x = 10.2, y = 8.2, hasKey = false, hasKeyT = {}, animateSplasht = 0, animateSplash = false, speed = .25, stamina = 1.25 } Undox = {} Undoy = {} Undocostume = {} --tables for doing undos to rain undoRainx = {} undoRainy = {} undoAll = false undoAllFaster = false keepMoving = false Player.moveNext = {"right","up","down"} Player.moves = 1 --counts moves Player.movesCounter = 1000--moves caps out at this counter = {} undoMusicStarted = false movet = 0 movetT = {} move = {} steppedOnIce = {} song1 = {} rockMoveDir = {}-- slidet = 0 --timer for sliding on glass --map data xMap = 0 yMap = 0 screenPosition = 0 screenEffects = "drunk" --it is used to identify a certain --color on the map to spawn an object colorUsed = { [0]=9,--red [1]=4--brown } --water data drawWaterY = 80 startDrawWaterx = 0 startDrawWatery = 20 endDrawWaterx = 250 endDrawWatery = 139 --lightmap data lightMap = { startX = 11*8, endX = 12*8-1, startY = 4, endY = 83 } --water reflection data drk = {[0]= 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15} lvlTimer = 0 windSpeed = 0 animatePlayerSpeed = 0 staticWindSpeed = 15 ----rain rain = {} for iRain = 0,8 do rain[iRain] = { x = math.random(0,240*8), y = math.random(0,136), color = math.random(2,3), costume = 347, speed = math.random(1,2)/10, span = math.random(2,10) } end -- snow = {} --fire fire = {} for iFire = 0,2 do fire[iFire]={ x = 2, y = math.random(-5,5), size = math.random(2,3), speed = math.random(1,2)/10 } end ----------- level = 1 transitionTimer=0 end -------------- waterSfx = 1 function waterSplashSfx() waterSfx = waterSfx+11 sfx(15+11,math.random(1,13)+waterSfx,15,waterSplashChannels,1,5) end ------------- function RockClass() Rock = { costume = 0, x = 15, y = 10, slidet = 0, startSliding = false, undoAll = false, onWhatTile = {},--checks for tile undoExists = {}, undoCostume = {}, exists = true, move = {}, sunkInWater = {} } --rock class methods function Rock:Draw() if mget(self.x+xMap,self.y+yMap+1)==18 or mget(self.x+xMap,self.y+yMap+1)==34 or mget(self.x+xMap,self.y+yMap+1)==49 or mget(self.x+xMap,self.y+yMap+1)==50 or mget(self.x+xMap,self.y+yMap+1)==165 or mget(self.x+xMap,self.y+yMap+1)==166 or mget(self.x+xMap,self.y+yMap+1)==38 or mget(self.x+xMap,self.y+yMap+1)==84 then spr(316,self.x*8,8*self.y+6,6) end spr(self.costume+time()/10%60//30,self.x*8,self.y*8,6,1,1,self.rotate*8) --animation of movement --Shadow if self.startSliding then if self.move[#self.move]=="left" then spr(395,self.x*8+8,self.y*8,0) elseif self.move[#self.move]=="right" then spr(395,self.x*8-8,self.y*8,0) elseif self.move[#self.move]=="up" then spr(395,self.x*8,self.y*8+8,0) elseif self.move[#self.move]=="down" then spr(395,self.x*8,self.y*8-8,0) end end end --move rock function Rock:ChangeRockColor() --change rock color if mget(self.x+xMap,self.y+yMap)==205 or mget(self.x+xMap,self.y+yMap)==206 or mget(self.x+xMap,self.y+yMap)==207 then self.costume = 60 end if mget(self.x+xMap,self.y+yMap)==205 and self.movet==0 then self.costume = 58 end end function Rock:Move() if (mget(self.x+xMap,self.y+yMap)==51 or mget(self.x+xMap,self.y+yMap)==151 or mget(self.x+xMap,self.y+yMap)==208 or mget(self.x+xMap,self.y+yMap)==209 or mget(self.x+xMap,self.y+yMap)==52 or mget(self.x+xMap,self.y+yMap)==66 or mget(self.x+xMap,self.y+yMap)==65 or mget(self.x+xMap,self.y+yMap)==98 or mget(self.x+xMap,self.y+yMap)==97 or mget(self.x+xMap,self.y+yMap)==118 or mget(self.x+xMap,self.y+yMap)==117 or mget(self.x+xMap,self.y+yMap)==231 or mget(self.x+xMap,self.y+yMap)==232 or mget(self.x+xMap,self.y+yMap)==62 or mget(self.x+xMap,self.y+yMap)==233 or mget(self.x+xMap,self.y+yMap)==247 or mget(self.x+xMap,self.y+yMap)==10 or mget(self.x+xMap,self.y+yMap)==19 or mget(self.x+xMap,self.y+yMap)==13 or mget(self.x+xMap,self.y+yMap)==34 or mget(self.x+xMap,self.y+yMap)==248 or mget(self.x+xMap,self.y+yMap)==211 or mget(self.x+xMap,self.y+yMap)==48 or mget(self.x+xMap,self.y+yMap)==137 or mget(self.x+xMap,self.y+yMap)==120 or mget(self.x+xMap,self.y+yMap)==66 or mget(self.x+xMap,self.y+yMap)==65 or mget(self.x+xMap,self.y+yMap)==250 or mget(self.x+xMap,self.y+yMap)==251 or mget(self.x+xMap,self.y+yMap)==249) then if self.move[#self.move]=="left" and self.startSliding~=true then table.insert(self.move,"right") self.startSliding = true self.slidet = 0 end if self.move[#self.move]=="right" and self.startSliding~=true then table.insert(self.move,"left") self.startSliding = true self.slidet = 0 end if self.move[#self.move]=="up" and self.startSliding~=true then table.insert(self.move,"down") self.startSliding = true self.slidet = 0 end if self.move[#self.move]=="down" and self.startSliding~=true then table.insert(self.move,"up") self.startSliding = true self.slidet = 0 end --up stairs if self.move[#self.move]=="upleft" and self.startSliding~=true then table.insert(self.move,"downright") self.startSliding = true self.slidet = 0 end if self.move[#self.move]=="downright" and self.startSliding~=true then table.insert(self.move,"upleft") self.startSliding = true self.slidet = 0 end end -- --if you touch rock, it moves --and you move if (math.floor(self.x)==math.floor(Player.x) and math.floor(self.y)==math.floor(Player.y)) and movet == 0 and (self.costume == 75 --rock isn't sunk or self.costume == 76 or self.costume == 456 or self.costume == 434 or self.costume == 60) and Player.moves%Player.movesCounter~=0 then sfx(26,math.random(41,51),333,3,1) --fixes immediate movement --if you move left --end of stairway push --normal push if move[#move]=="left" and mget(self.x+xMap,self.y+yMap)~=17 and mget(self.x+xMap,self.y+yMap)~=160 then move[#move]="right" keepMoving = true --these identify whether rocks are next --to each other self.startSliding = true table.insert(self.move,"left") -- elseif move[#move]=="left" and (mget(self.x+xMap,self.y+yMap)==17 or mget(self.x+xMap,self.y+yMap)==160) then move[#move]="right" keepMoving = true --these identify whether rocks are next --to each other self.startSliding = true table.insert(self.move,"upleft") elseif move[#move]=="right" and mget(self.x+xMap,self.y+yMap)~=17 and mget(self.x+xMap,self.y+yMap)~=160 then move[#move]="left" keepMoving = true --these identify whether rocks are next --to each other self.startSliding = true table.insert(self.move,"right") --go down stairs when pushed horizontally elseif move[#move]=="right" and (mget(self.x+xMap,self.y+yMap)==17 or mget(self.x+xMap,self.y+yMap)==160) then move[#move]="left" keepMoving = true --these identify whether rocks are next --to each other self.startSliding = true table.insert(self.move,"downright") elseif move[#move]=="up" and mget(self.x+xMap,self.y+yMap)~=17 and mget(self.x+xMap,self.y+yMap)~=160 then move[#move]="down" keepMoving = true self.startSliding = true table.insert(self.move,"up") elseif move[#move]=="up" and (mget(self.x+xMap,self.y+yMap)==17 or mget(self.x+xMap,self.y+yMap)==160) then move[#move]="down" keepMoving = true self.startSliding = true table.insert(self.move,"upleft") elseif move[#move]=="down" and mget(self.x+xMap,self.y+yMap)~=17 and mget(self.x+xMap,self.y+yMap)~=160 then move[#move]="up" keepMoving = true self.startSliding = true table.insert(self.move,"down") elseif move[#move]=="down" and (mget(self.x+xMap,self.y+yMap)==17 or mget(self.x+xMap,self.y+yMap)==160) then move[#move]="up" keepMoving = true self.startSliding = true table.insert(self.move,"downright") -- try to move up stairs elseif move[#move]=="upleft" and (mget(self.x+xMap,self.y+yMap)==17 or mget(self.x+xMap,self.y+yMap)==160) then move[#move]="downright" keepMoving = true self.startSliding = true table.insert(self.move,"upleft") elseif move[#move]=="upleft" and mget(self.x+xMap,self.y+yMap)~=17 and mget(self.x+xMap,self.y+yMap)~=160 then move[#move]="downright" keepMoving = true self.startSliding = true table.insert(self.move,"left") --try to move down stairs elseif move[#move]=="upleft" then move[#move]="downright" keepMoving = true self.startSliding = true table.insert(self.move,"downright") --you proceed on right after moving down righ elseif move[#move]=="downright" and (mget(self.x+xMap,self.y+yMap)==17 or mget(self.x+xMap,self.y+yMap)==160) then move[#move]="upleft" keepMoving = true self.startSliding = true table.insert(self.move,"downright") elseif move[#move]=="downright" and mget(self.x+xMap,self.y+yMap)~=17 and mget(self.x+xMap,self.y+yMap)~=160 then move[#move]="upleft" keepMoving = true self.startSliding = true table.insert(self.move,"right") else self.startSliding = false self.slidet = 0 end --fixes certain bug --where you move left after moving --right end ---------- --start sliding if self.startSliding and mget(self.x+xMap,self.y+yMap)~=109 and mget(self.x+xMap,self.y+yMap)~=134 and mget(self.x+xMap,self.y+yMap)~=111 then self.slidet = self.slidet+0.21 self.stationaryTimer = 0 self.rotate = self.rotate+0.1 if self.move[#self.move]=="right" then self.x = self.x + 0.21 elseif self.move[#self.move]=="left" then self.x = self.x - 0.21 elseif self.move[#self.move]=="up" then self.y = self.y - 0.21 elseif self.move[#self.move]=="down" then self.y = self.y + 0.21 elseif self.move[#self.move]=="downright" then self.y = self.y + 0.21 self.x = self.x + 0.21 elseif self.move[#self.move]=="upleft" then self.y = self.y - 0.21 self.x = self.x - 0.21 end else self.slidet = 0 self.stationaryTimer = self.stationaryTimer+1 end --- if self.slidet>=2 then self.startSliding = false self.x = math.floor(self.x)+0.2 self.y = math.floor(self.y)+0.2 end ------------ --this fixes a bug where if you --move left and right the --another rock pushes you --and you go the opposite direction if self.stationaryTimer~=0 then self.move[#self.move]="nil" end end ---- function Rock:SinkInWater() print(self.sunkInWater[#self.sunkInWater],111,41) --ANIMATE WATER SPLASH EFFECT if mget(self.x+xMap,self.y+yMap)==63 or mget(self.x+xMap,self.y+yMap)==109 or mget(self.x+xMap,self.y+yMap)==134 or mget(self.x+xMap,self.y+yMap)==77 and self.slidet==0 then self.animateSplasht = self.animateSplasht+.5 else self.animateSplasht = 0 end if self.animateSplasht>0 and self.animateSplasht<15 then waterSplashSfx() end if self.animateSplasht>8 then waterSfx = 51 end if self.animateSplasht>0 and self.animateSplasht<20 then self.animateSplash = true else self.animateSplash = false end if self.animateSplash then spr(379+self.animateSplasht*2%60//10,self.x*8-math.sin(self.animateSplasht/18)*3,self.y*8-1,0) end --SINK IN WATER if (self.costume==rock() ) and (mget(self.x+xMap,self.y+yMap)~=109 or mget(self.x+xMap,self.y+yMap)~=111 or mget(self.x+xMap,self.y+yMap)~=134 or mget(self.x+xMap,self.y+yMap)~=109 or mget(self.x+xMap,self.y+yMap)~=133 or mget(self.x+xMap,self.y+yMap)~=149 or mget(self.x+xMap,self.y+yMap)~=153 or mget(self.x+xMap,self.y+yMap)~=152 ) then self.exists = false else self.exists = true end if (mget(self.x+xMap,self.y+yMap)==109 or mget(self.x+xMap,self.y+yMap)==111 or mget(self.x+xMap,self.y+yMap)==152 or mget(self.x+xMap,self.y+yMap)==133 or mget(self.x+xMap,self.y+yMap)==149 or mget(self.x+xMap,self.y+yMap)==153) then if not self.undoAll then table.insert(self.sunkInWater,true) mset(self.x+xMap,self.y+yMap,63) else table.insert(self.sunkInWater,false) end --if costume is not sunk then it is sunk if self.costume ~=60 and self.costume ~=456 then self.costume = 63 else self.costume = 56 mset(self.x+xMap,self.y+yMap,56) end table.insert(self.undoSunkInWaterx,self.x) table.insert(self.undoSunkInWatery,self.y) end if mget(Player.x+xMap,Player.y+yMap)==56 then mset(Player.x+xMap,Player.y+yMap,109) end if self.undoRockPosx[#self.undoRockPosx]~=nil then table.insert(self.onWhatTile, mget(math.floor(self.undoRockPosx[#self.undoRockPosx]+xMap)+0.2, math.floor(self.undoRockPosy[#self.undoRockPosy]+yMap ))) end end function Rock:Slide() if mget(self.x+xMap,self.y+yMap)==73 or mget(self.x+xMap,self.y+yMap)==74 or mget(self.x+xMap,self.y+yMap)==115 then if self.move[#self.move]=="left" or self.move[#self.move]=="upleft" then self.slidet = 1.2 end if self.move[#self.move]=="right" or self.move[#self.move]=="downright" then self.slidet = 1.2 end if self.move[#self.move]=="up" then self.slidet = 1.2 end if self.move[#self.move]=="down" then self.slidet = 1.2 end end end function Rock:WrapAround() if self.x>=26 and self.costume~=63 then self.x = 5.2 self.slidet = 0 end if self.x<5 and self.costume~=63 then self.x = 25.2 self.slidet = 0 end if self.y<=2.1 and self.costume~=63 then self.y = 15 self.slidet = 0 end if self.y>=15.1 and self.costume~=63 then self.y = 2.2 self.slidet = 0 end end -- function Rock:Undo() --print(reflectiveRock.onWhatTile[#reflectiveRock.onWhatTile],100,100) --not undo if not self.undoAll then table.insert(self.undoRockPosx,self.x) table.insert(self.undoRockPosy,self.y) table.insert(self.undoCostume,self.costume) table.insert(self.undoExists,self.exists) end --undo if self.undoAll and self.undoRockPosx[#self.undoRockPosx]~=nil and self.undoRockPosy[#self.undoRockPosy]~=nil and self.undoExists[#self.undoExists]~=nil and self.onWhatTile[#self.onWhatTile]~=nil then self.startSliding = false --undoes the rock sinking in ice if mget(self.x+xMap,self.y+yMap)==63 and self.sunkInWater[#self.sunkInWater] then table.remove(self.sunkInWater,#self.sunkInWater) mset(self.x+xMap,self.y+yMap,111) end --undo rock costume when sunk in water if mget(self.x+xMap,self.y+yMap)==63 or mget(self.x+xMap,self.y+yMap)==56 then mset(self.x+xMap,self.y+yMap,109) self.costume = self.undoCostume[#self.undoCostume] end --undoes the rock burning if mget(self.x+xMap,self.y+yMap)==205 then self.costume = self.undoCostume[#self.undoCostume] end self.x = self.undoRockPosx[#self.undoRockPosx] self.y = self.undoRockPosy[#self.undoRockPosy] self.exists = self.undoExists[#self.undoExists] self.costume = self.undoCostume[#self.undoCostume] table.remove(self.onWhatTile,#self.onWhatTile) table.remove(self.undoRockPosx,#self.undoRockPosx) table.remove(self.undoRockPosy,#self.undoRockPosy) table.remove(self.undoCostume,#self.undoCostume) table.remove(self.undoExists,#self.undoExists) --faster undo if btnp(5,1,1) then table.remove(self.onWhatTile,#self.onWhatTile) table.remove(self.undoRockPosx,#self.undoRockPosx) table.remove(self.undoRockPosy,#self.undoRockPosy) table.remove(self.undoCostume,#self.undoCostume) end else self.undoAll = false end -- if btnp(5) then self.undoAll = true end --undoes everything end -- function Rock:new(t) t = t or {} setmetatable(t,self) self.__index = self return t end --constructor reflectiveRock = Rock:new({ costume = 75, animTimer = time(), x = 13.2, y = 9.2, rotate = 0, slidet = 0, slidetTable = {}, undoAll = false, sunkInWater = {}, animateSplash = false, animateSplasht = 0, onWhatTile = {}, startSliding = false, exists = true, undoExists = {}, undoCostume = {}, move = {}, stationaryTimer = 0, undoRockPosx = {}, undoRockPosy = {}, undoRockCostume = {}, undoSunkInWaterx = {}, undoSunkInWatery = {} }) rockInWater = Rock:new({ costume = 76, animTimer = 0, x = 13.2, y = 4.2, slidet = 0, slidetTable = {}, undoAll = false, onWhatTile = {}, animateSplash = false, sunkInWater = {}, animateSplasht = 0, startSliding = false, exists = true, rotate = 0, undoExists = {}, undoCostume = {}, move = {}, stationaryTimer = 0, undoRockPosx = {}, undoRockPosy = {}, undoRockCostume = {}, undoSunkInWaterx = {}, undoSunkInWatery = {} }) nonreflectiveRock = Rock:new({ costume = 75, animTimer = 0, x = 21.2, y = 6.2, rotate = 0, slidet = 0, slidetTable = {}, undoAll = false, onWhatTile = {}, animateSplash = false, sunkInWater = {}, animateSplasht = 0, startSliding = false, exists = true, undoExists = {}, undoCostume = {}, move = {}, stationaryTimer = 0, undoRockPosx = {}, undoRockPosy = {}, undoRockCostume = {}, undoSunkInWaterx = {}, undoSunkInWatery = {} }) end RockClass() -- function IsRock1() end function RocksCollidingWithEachOther() return math.floor(reflectiveRock.x)==math.floor(nonreflectiveRock.x) and math.floor(reflectiveRock.y)==math.floor(nonreflectiveRock.y) and reflectiveRock.costume~=77 and reflectiveRock.costume~=63 and reflectiveRock.costume~=472 and reflectiveRock.costume~=58 and nonreflectiveRock.costume~=472 and nonreflectiveRock.costume~=58 and nonreflectiveRock.costume~=77 and nonreflectiveRock.costume~=63 end ---- function rock() return 77 or 63 end -- function BounceBackRocks() ------ROCK I---------------------- if RocksCollidingWithEachOther() then sfx(26,math.random(41,51),333,3,1) --turn burned rock to ash if nonreflectiveRock.costume == 60 then nonreflectiveRock.costume = 58 end if reflectiveRock.move[#reflectiveRock.move]=="up" then nonreflectiveRock.move[#nonreflectiveRock.move]="up" nonreflectiveRock.startSliding= true elseif reflectiveRock.move[#reflectiveRock.move]=="down" then nonreflectiveRock.move[#nonreflectiveRock.move]="down" nonreflectiveRock.startSliding= true elseif reflectiveRock.move[#reflectiveRock.move]=="left" then nonreflectiveRock.move[#nonreflectiveRock.move]="left" nonreflectiveRock.startSliding= true elseif reflectiveRock.move[#reflectiveRock.move]=="right" then nonreflectiveRock.move[#nonreflectiveRock.move]="right" nonreflectiveRock.startSliding= true elseif reflectiveRock.move[#reflectiveRock.move]=="downright" then nonreflectiveRock.move[#nonreflectiveRock.move]="downright" nonreflectiveRock.startSliding= true elseif reflectiveRock.move[#reflectiveRock.move]=="upleft" then nonreflectiveRock.move[#nonreflectiveRock.move]="upleft" nonreflectiveRock.startSliding= true end end -- end function BounceBackRocks2() if RocksCollidingWithEachOther() then sfx(26,math.random(41,51),333,3,3) if reflectiveRock.costume == 60 then reflectiveRock.costume = 58 end --up if nonreflectiveRock.move[#nonreflectiveRock.move]=="down" then reflectiveRock.move[#reflectiveRock.move]="down" reflectiveRock.startSliding = true elseif nonreflectiveRock.move[#nonreflectiveRock.move]=="up" then reflectiveRock.move[#reflectiveRock.move]="up" reflectiveRock.startSliding = true elseif nonreflectiveRock.move[#nonreflectiveRock.move]=="left" then reflectiveRock.move[#reflectiveRock.move]="left" reflectiveRock.startSliding = true elseif nonreflectiveRock.move[#nonreflectiveRock.move]=="right" then reflectiveRock.move[#reflectiveRock.move]="right" reflectiveRock.startSliding = true elseif nonreflectiveRock.move[#nonreflectiveRock.move]=="downright" then reflectiveRock.move[#reflectiveRock.move]="downright" reflectiveRock.startSliding= true elseif nonreflectiveRock.move[#nonreflectiveRock.move]=="upleft" then reflectiveRock.move[#reflectiveRock.move]="upleft" reflectiveRock.startSliding= true end end end function RockType() return reflectiveRock or nonreflectiveRock end function EnemiesClass() --tables for undoing undoStompx = {} undoStompy = {} stompOnTile = {} --parent class Enemies = {} Enemies.__index = Enemies --arrow enemies class ArrowEnemies = {} ArrowEnemies.__index = ArrowEnemies setmetatable(ArrowEnemies,Enemies) --footstep enemies class WalkingEnemies = {} WalkingEnemies.__index = WalkingEnemies setmetatable(WalkingEnemies,ArrowEnemies) --add variables here function WalkingEnemies.new(costume,x,y,steps,move,flip,rotate,undoStomp) local instance = setmetatable({},WalkingEnemies) instance.costume = costume instance.x = x instance.y = y instance.steps = steps instance.undoStomp = undoStomp instance.move = move instance.rotate = rotate instance.flip = flip return instance end --method to draw enemies function Enemies:Draw(costume,x,y,down,move,steps,flip,rotate) spr(self.costume,self.x*8,self.y*8,6,1) if self.move=="up" then self.costume = 32 self.rotate = 1 end if self.move=="down" then self.costume = 32 self.rotate = 0 end if self.move=="left" then self.costume = 32 self.rotate = 0 end if self.move=="right" then self.costume = 32 self.rotate = 1 end end -- function Enemies:ChangeStuff(costume,x,y,steps,move,undoStomp) --if enemy touches anything, it changes invisible if mget(self.x+xMap,self.y+yMap)==111 or mget(self.x+xMap,self.y+yMap)==109 or mget(self.x+xMap,self.y+yMap)==134 or mget(self.x+xMap,self.y+yMap)==231 or mget(self.x+xMap,self.y+yMap)==232 or mget(self.x+xMap,self.y+yMap)==137 or mget(self.x+xMap,self.y+yMap)==247 or mget(self.x+xMap,self.y+yMap)==248 or mget(self.x+xMap,self.y+yMap)==249 or mget(self.x+xMap,self.y+yMap)==120 or mget(self.x+xMap,self.y+yMap)==62 or mget(self.x+xMap,self.y+yMap)==117 or mget(self.x+xMap,self.y+yMap)==84 or mget(self.x+xMap,self.y+yMap)==83 or mget(self.x+xMap,self.y+yMap)==211 or mget(self.x+xMap,self.y+yMap)==48 or mget(self.x+xMap,self.y+yMap)==233 or mget(self.x+xMap,self.y+yMap)==232 or mget(self.x+xMap,self.y+yMap)==66 or mget(self.x+xMap,self.y+yMap)==151 or mget(self.x+xMap,self.y+yMap)==34 then if not self.undoStomp then table.insert(stompOnTile,mget(self.x+xMap,self.y+yMap)) mset(self.x+xMap,self.y+yMap,173) end end --turn stairs invisible if mget(self.x+xMap,self.y+yMap)==17 and not self.undoStomp then table.insert(stompOnTile,mget(self.x+xMap,self.y+yMap)) mset(self.x+xMap,self.y+yMap,160) end --change glass slider invisible if mget(self.x+xMap,self.y+yMap)==74 or mget(self.x+xMap,self.y+yMap)==73 or mget(self.x+xMap,self.y+yMap)==115 then if not self.undoStomp then table.insert(stompOnTile,mget(self.x+xMap,self.y+yMap)) mset(self.x+xMap,self.y+yMap,115) end end end --move enemies function Enemies:Move(costume,x,y,steps,move,undoStomp) --enemy turns surfaces to obstacles if mget(self.x+xMap,self.y+yMap)==74 or mget(self.x+xMap,self.y+yMap)==115 then if self.move=="up" then self.y = self.y + 1 end if self.move=="down" then self.y = self.y - 1 end if self.move=="left" then self.x = self.x - 1 end if self.move=="right" then self.x = self.x + 1 end end --move stomp normally not on ground if mget(self.x+xMap,self.y+yMap)~=77 then if (btnp(0,8,8) or keyp(23,8,8)) and not self.undoStomp then self.y = self.y + self.steps self.move = "up" end if (btnp(1,7,7) or keyp(19,7,7)) and not self.undoStomp then self.y = self.y - self.steps self.move = "down" end if (btnp(2,8,8) or keyp(1,8,8)) and not self.undoStomp then self.x = self.x + self.steps self.move = "right" end if (btnp(3,8,8) or keyp(4,8,8)) and not self.undoStomp then self.x = self.x - self.steps self.move = "left" end --move normally elseif mget(self.x+xMap,self.y+yMap)==77 then if (btnp(0) or keyp(23)) and not self.undoStomp then self.y = self.y + self.steps self.move = "up" end if (btnp(1) or keyp(19)) and not self.undoStomp then self.y = self.y - self.steps self.move = "down" end if (btnp(2) or keyp(1)) and not self.undoStomp then self.x = self.x + self.steps self.move = "left" end if (btnp(3) or keyp(4)) and not self.undoStomp then self.x = self.x - self.steps self.move = "right" end end end function Enemies:ScreenWrap(costume,x,y,steps) if self.x < 0 then self.x = 29 end if self.x > 29 then self.x = 0 end if self.y < 0 then self.y = 16 end if self.y > 16 then self.y = 0 end end ----------------------------------- function Enemies:CollideWithPlayer(costume,x,y,steps) if (math.sqrt((Player.x-self.x)^2+ (Player.y-self.y)^2)<=1) and not keepMoving then undoAll = true reflectiveRock.undoAll = true nonreflectiveRock.undoAll = true movet = 0 move[#move]=nil Player.costume = 434 end end -- function Enemies:Undo(costume,x,y,steps,undoStomp) print(stompOnTile[#stompOnTile],111,51) if not self.undoStomp then table.insert(undoStompx,self.x) table.insert(undoStompy,self.y) end if btnp(5) or undoAll then self.undoStomp = true end if self.undoStomp and undoStompx[#undoStompx]~=nil and undoStompy[#undoStompy]~=nil then self.x = undoStompx[#undoStompx] self.y = undoStompy[#undoStompy] table.remove(undoStompx,#undoStompx) table.remove(undoStompy,#undoStompy) --if you step on something then undo if stompOnTile[#stompOnTile]~=nil and (mget(self.x+xMap,self.y+yMap)==173 or mget(self.x+xMap,self.y+yMap)==74 or mget(self.x+xMap,self.y+yMap)==73 or mget(self.x+xMap,self.y+yMap)==115 or mget(self.x+xMap,self.y+yMap)==160) then mset(self.x+xMap,self.y+yMap,stompOnTile[#stompOnTile]) table.remove(stompOnTile,#stompOnTile) end else self.undoStomp = false end end ------------------- function Enemies:CollideWithRocks(costume,x,y,steps) if (math.sqrt((nonreflectiveRock.x-self.x)^2+ (nonreflectiveRock.y-self.y)^2)<=1) and (nonreflectiveRock.costume == 75 --rock isn't sunk or nonreflectiveRock.costume == 76 or nonreflectiveRock.costume == 456 or nonreflectiveRock.costume == 434 or nonreflectiveRock.costume == 60) then nonreflectiveRock.costume = 434 end if (math.sqrt((reflectiveRock.x-self.x)^2+ (reflectiveRock.y-self.y)^2)<=1) and (reflectiveRock.costume == 75 --rock isn't sunk or reflectiveRock.costume == 76 or reflectiveRock.costume == 456 or reflectiveRock.costume == 434 or reflectiveRock.costume == 60) then reflectiveRock.costume = 434 end end ----constructor------------ --Carl is an archer Stomp = WalkingEnemies.new(9,11-1,5,1) ----------------------- end EnemiesClass() songArrNumPosition = 1 songArrNumPositionReverse = 1 function CreateSongs() --this function stores sound effect music song1 = { 'A-4','C-4','D-5','C-4','D-5','E-2','C-5','E-4' } songArrNumPosition = songArrNumPosition - 1 songArrNumPositionReverse = songArrNumPositionReverse+1 if songArrNumPosition>0 then songArrNumPositionReverse = 8 songArrNumPosition = 0 end if songArrNumPosition<0 then songArrNumPosition = 8 songArrNumPositionReverse = 0 end end --------------------------- function XScreen() --this draws waves for x=0,240 do for y=0,135,30 do cl=math.sin(x/30+lvlTimer/4)+math.sin(y/120)+math.cos(x/50+y/3)/2 rect(x*2,cl*1+x/1,10,10,17) rect(240-x*2,cl*1+x/1,10,10,17) end end end function UndoColor() end function GrassAlightLighting() --lighting for cloud shadows for i = 200,277,1+1 do for j =0,i/3 do for k = -1,1,1+1 do if pix(i-j,j)==6 then pix(i-j,j,pix(i-j+k,j+(k)/2)) end end end end for i = 110,134,1+1 do for j =0,i/2 do for k = -1,1,1+1 do if pix(i-j,j)==6 then pix(i-j,j,pix(i-j+k,j+(k)/2)) end end end end --darker blur for i = 42,240 do for j = 21,28 do pix(i,j,13+pix(i,j)*0.01+j/90) end end --blur on top for i = 42,240 do for j = 28,35 do pix(i,j,13+pix(i,j)*(0.1)) end end --blur at bottom for i = 42,220 do for j = 101,135 do pix(i,j,13+pix(i,j)*(0.1)) end end --top light for i = 210,284+math.sin(time()/555),6 do for j = 21,26 do pix(i-j,j,1+pix(i-j,j)) end end --undo --for i = 20,210 do -- for j = 20,120 do --pix(i,j,8+pix(i,j)*0.1) --pix(i,j,14+pix(i,j)*0.1) -- pix(i,j,12+pix(i,j)*0.1) -- --,2,pix(i,j,8+pix(i,j)*0.2) --pix(i,j,5+pix(i,j)*0.3) -- end -- end --tile 35 is burning grass --it uses a particle system --for every sixteenth tile for i = 0,3 do spr(49,i*16+12*8,10*8,6,1,1,0,2,1) end --draw tree spr(67,16*8,48,6,1,0,0,3-1,1) --draw umbrella for i = 10,240 do for j = 0,100,2 do --draw decoration on streets --house --if you spot brown on the screen --lighting effect around the sprite if pix(i,j)==colorUsed[1] then for iAmbientColor = i-2,i+2 do for jAmbientColor = j-2,j+2,2 do if math.sqrt((i-iAmbientColor)^2+(jAmbientColor-j)^2)>=15+math.sin(time()/3000)*2 then pix(iAmbientColor,jAmbientColor,2-pix(iAmbientColor,jAmbientColor)) pix(iAmbientColor,jAmbientColor,pix(i,j)) end end end --draw fire for iA = 0,#fire do circb(fire[iA].x+i,fire[iA].y+j,fire[iA].size-1,8+pix(i,j)) circb(fire[iA].x+i,fire[iA].y+j,fire[iA].size-1,10-pix(i,j)) circ(fire[iA].x+i,fire[iA].y+j,fire[iA].size-2,8+pix(i,j)) end --update fire for iA = 0,#fire do fire[iA].y = fire[iA].y-fire[iA].speed/109 fire[iA].size = fire[iA].size-1/100 if fire[iA].size<=0 then fire[iA].y = math.random(-8,-1) fire[iA].x = 2 fire[iA].size = math.random(2,3) end end end--check red pixel end--i end--j end ------- function ReplayLeaves() if not undoAll then for i = 0,#rain do table.insert(undoRainx,rain[i].x) table.insert(undoRainy,rain[i].y) end end if undoAll and undoRainx[#undoRainx]~=nil and undoRainy[#undoRainy]~=nil then for i = 0,#rain do rain[i].x = undoRainx[#undoRainx] rain[i].y = undoRainy[#undoRainy] table.remove(undoRainx,#undoRainx) table.remove(undoRainy,#undoRainy) end end end -- function ReplayPlayer() if not undoAll then table.insert(Undox,Player.x) table.insert(Undoy,Player.y) table.insert(Undocostume,Player.costume) screenEffects = "drunk" else screenEffects = "undo" end if btnp(5) then undoAll = true Player.moves = 1 end --when you undo completely if undoAll and Undox[#Undox]~=nil and Undoy[#Undoy]~=nil and Undocostume[#Undocostume]~=nil then if mget(Player.x+xMap,Player.y+yMap)==111-3+1 then mset(Player.x+xMap,Player.y+yMap,38) end if mget(reflectiveRock.x+xMap,reflectiveRock.y+yMap)==111-3+1 then mset(Player.x+xMap,Player.y+yMap,38) end Player.x = Undox[#Undox] Player.y = Undoy[#Undoy] Player.costume = Undocostume[#Undocostume] table.remove(Undox,#Undox) table.remove(Undoy,#Undoy) table.remove(Undocostume,#Undocostume) --increase the speed of undo if btnp(5,1,1) then table.remove(Undox,#Undox) table.remove(Undoy,#Undoy) move[#move] = nil end move[#move]=nil movet = 10 keepMoving = true else undoAll = false end --undo music if undoAll and not undoMusicStarted and not Stomp.undoStomp then --music(0,0,0,0,0,-1,5) sfx(-1) undoMusicStarted = true end --end undo music if not undoAll and not reflectiveRock.undoAll and not nonreflectiveRock.undoAll then music() undoMusicStarted = false end --save point if mget(Player.x+xMap,Player.y+yMap)==100 then if undoAll then Player.x = math.floor(Player.x)+.2 Player.y = math.floor(Player.y)+.2 sfx(41+1) Player.costume = 305 end undoAll = false end end ---- function PlayerSplashWater() if mget(Player.x+xMap,Player.y+yMap)==63 or mget(Player.x+xMap,Player.y+yMap)==109 or mget(Player.x+xMap,Player.y+yMap)==77 and movet==0 and not keepMoving then Player.animateSplasht = Player.animateSplasht+.5 else Player.animateSplasht = 0 Player.animateSplash = false end --water sound effect if Player.animateSplasht>0 and Player.animateSplasht<1 then waterSplashSfx() end if Player.animateSplasht>1 then waterSfx = 51 end --animate water splash if Player.animateSplasht>0 and Player.animateSplasht<20 then Player.animateSplash = true else Player.animateSplash = false end if Player.animateSplash then spr(379+Player.animateSplasht*2%60//10, Player.x*8-math.sin(Player.animateSplasht/18)*3,Player.y*8-1,0) end --- end -------------- function PlayerAct() PlayerSplashWater() DrawPlayer() MovePlayer() ReplayLeaves() MoveAuto() PlayerSinkIceGround() FactoryMove() KeyDoor() ReplayPlayer() end function KeyDoor() --collect key if mget(Player.x+xMap,Player.y+yMap)==43 and not keepMoving then Player.hasKey=true mset(Player.x+xMap,Player.y+yMap,1) table.insert(Player.hasKeyT,Player.hasKey) end if mget(Player.x+210,Player.y+68)==236 and not keepMoving then Player.hasKey=true mset(Player.x+210,Player.y+68,1) end --draw key if Player.hasKey then spr(28,Player.x*8+math.sin(time()/100),Player.y*8-20,6) end --use key if Player.hasKey and mget(Player.x+xMap,Player.y+1+yMap)==228 and not keepMoving and (btnp(1,1,1) or keyp(19,1,1)) then mset(Player.x+xMap,Player.y+1+yMap,240) Player.hasKey=false end end function notPass() return mget(Player.x+xMap,Player.y+yMap)==228 end function FactoryMove() if mget(Player.x+xMap,Player.y+yMap)==255 and not undoX and movet==0 then table.insert(move,"down") keepMoving = true end if mget(Player.x+xMap,Player.y+yMap)==239 and not undoX and movet==0 then table.insert(move,"up") keepMoving = true end if mget(Player.x+xMap,Player.y+yMap)==106 and not undoX and movet==0 then table.insert(move,"right") keepMoving = true end --right if mget(Player.x+xMap,Player.y+yMap)==11 and not undoX and movet==0 then table.insert(move,"left") keepMoving = true end end function Arrow() raycast() whatIsxsRaycast() DrawArrow() MoveArrow() end function Map() map(210,68,30,17,0,0,13) map(210,17,30,17,0,0,13) map(180,119,30,17,0,0,13) end function TIC() --timer for each level if mget(Player.x+xMap,Player.y+yMap)==205 then undoAll = true end lvlTimer = lvlTimer + 1 ---- poke(0x3FFB,0) --mouse disappears if level>1.1 then poke(0x3FF8,15) --white background end if level == 1 then animatePlayerSpeed = time()/30 windSpeed = time()/60 end --StartMusic() --DrawMap() --PushBoxesPlayer() if reflectiveRock.costume~=63 then reflectiveRock:Draw() end --reflectiveRock:Move() --reflectiveRock:Undo() --reflectiveRock:ChangeRockColor() --reflectiveRock:SinkInWater() --reflectiveRock:WrapAround() --reflectiveRock:Slide() --if nonreflectiveRock.costume~=63 then --nonreflectiveRock:Draw() --end --nonreflectiveRock:Move() --nonreflectiveRock:Undo() --nonreflectiveRock:ChangeRockColor() --nonreflectiveRock:SinkInWater() --nonreflectiveRock:Slide() --nonreflectiveRock:WrapAround() --if not reflectiveRock.undoAll --and not nonreflectiveRock.undoAll --then --BounceBackRocks() --BounceBackRocks2() --end --DrawPlayer() --PlayerSplashWater() --MovePlayer() --ReplayPlayer() --ReplayLeaves() --MoveAuto() --PlayerSinkIceGround() --Stomp:Draw() --Stomp:Move() --Stomp:Undo() --Stomp:ChangeStuff() --Stomp:ScreenWrap() --Stomp:CollideWithPlayer() --Stomp:CollideWithRocks() --DrawRain() CollidePlayer() -- GrassAlightLighting() -- DrawLights() --DrawWater() --RotateMap() --DrawFog() --DrawNight() -- zoomScreenDown() -- ScreenTransition() --for i = 0,0,1 do --pix(i,10,12) --end --PlayerBurnedChangeColor() --CreateSongs() --map(210,17,30,17,0,0,13) --map(180,119,30,17,0,0,13) font("YES INDEED",90,112,0) --arrow functions --will refactor if level == 1 then cls() for i = 0, 2490,4 do for j = 0, 52,4 do -- Calculate the distance from (i, j) to the center pix(i, j, i/j) -- Draws the pixel at (i, j) with color 1 end end rect(150,0,50,135,1) rect(0,52,290,2,1) print('Chrono Thread',110,60) print('Chrono Thread',110,61,4) print('Chrono Thread',110,65,2) print('Chrono Thread',110,72,3) print('Chrono Thread',110,81,2) print('Chrono Thread',110,95,2) print('Chrono Thread',110,110,11) print(' Thread',110,60,3) circ(10,10,10,12) circ(10,10,9,15) tri(95,40,80,52,110,52,12) tri(82,42,68,52,110,52,12) tri(112,42,68,52,120,52,12) --clouds pix(20,20,12) pix(20,100,2) pix(49,50,12) pix(49,55,2) print(' mini\ndavid',212,41,20) print(' mini\ndavid',212,40,12) for i=70,120 do for j=58,58 do pix(i,j,10) end end for i=90,100 do for j=69,69 do pix(i,j,2) end end spr(Player.costume+time()/10%30//10,10,108,6) rect(2,115,236,18,0) rectb(2,115,236,18,time()/500) print('Press Z to Start',98,122,time()/500) if btnp(4) then level = 1.1 end end if level == 1.1 then cls() if btnp(5) then level = 2 end spr(Player.costume+animatePlayerSpeed%30//10,10,108,6) --circle rotator for i = 0,240,5 do for j = 0,135,5 do pix(20+i,j+10,(j-i)/(j+i)*3) end end print("Controls:\nArrows/wasd",58,60) print("X to proceed",90,90,1) end if level==2 then LevelFu() end if level==3 then yMap = 17 LevelFu() end if level==4 then yMap = 34 LevelFu() end if level==5 then yMap = 51 LevelFu() end if level==6 then yMap = 68 LevelFu() end if level==7 then yMap = 85 LevelFu() PushBoxesPlayer() if reflectiveRock.costume~=63 then reflectiveRock:Draw() end reflectiveRock:Move() reflectiveRock:Undo() reflectiveRock:SinkInWater() end if level==8 then map(0,0) Map() print('Thanks!',95,120,0) XScreen() end end function LevelFu() DrawMap() PlayerAct() DrawRain() --Arrow() spr(447,100-math.cos(time()/2000)*50,50-math.sin(time()/2000)*100,6,1,1,math.cos(time()/2000)*10) DrawWater() Map() Win() end function Transition() if transitionTimer==125 then transitionTimer=transitionTimer+1 end rect(120,0,TransitionTimer,135,0) end function Win() if mget(Player.x+xMap,Player.y+yMap)==80 and not keepMoving then level = level + 1 end end function DrawArrow() --draw arrow --now I need to trigger the arrow thrown spr(arrow.costume,arrow.x*8,arrow.y*8,11+1) --draw bow spr(285+time()/10%60//30,111,41,11+1) end function MoveArrow() if undoAll then -- Undo arrow position and speed if available if #arrow.xT > 0 and #arrow.yT > 0 and #arrow.speedT > 0 then arrow.x = table.remove(arrow.xT) arrow.y = table.remove(arrow.yT) arrow.speed = table.remove(arrow.speedT) end else if keepMoving then -- Update arrow position and record its state while moving arrow.x = arrow.x - 0.1 arrow.y = arrow.y + 0.1 table.insert(arrow.xT, arrow.x) table.insert(arrow.yT, arrow.y) table.insert(arrow.speedT, arrow.speed) elseif PlayerCollideNotMoveableAreas() then -- Adjust arrow position if colliding with non-moveable areas arrow.x = arrow.x + 1.699 arrow.y = arrow.y - 1.699 table.insert(arrow.xT, arrow.x) table.insert(arrow.yT, arrow.y) table.insert(arrow.speedT, arrow.speed) end end local distanceThreshold = 1.4 -- Adjust this value to whatever makes sense in your game local dx = arrow.x+1/8 - Player.x+4/8 local dy = arrow.y+6/8 - Player.y-2/8 if math.sqrt(dx^2 + dy^2) < distanceThreshold then undoAll = true Player.moves = 1 end -- Draw Player's collider --circ(Player.x*8+4, Player.y*8-2, distanceThreshold, 15) -- Color 12 for collider -- Draw the Arrow pix(arrow.x*8, arrow.y*8, 11) -- Draw a small pixel for Arrow (color code 11) -- Draw Arrow's collider -- circ(arrow.x*8+1, arrow.y*8+6, distanceThreshold, 11) end ------------------- function DrawRain() --draw rain for i = 0,#rain do spr(rain[i].costume,rain[i].x-math.sin(time()/300)*rain[i].span*2,rain[i].y+math.sin(time()/100)*2,11,1,0) end --move rain for i = 0,#rain do if not undoAll then rain[i].y = rain[i].y-movet/3 end if rain[i].y<0 then rain[i].y = 185 rain[i].x = math.random(0,130+110) end if rain[i].y<61 then rain[i].costume = 368 else rain[i].costume = 347 end end end -- function DrawPlayer() --SHADOW if mget(Player.x+xMap,Player.y+yMap+1)~=231 and mget(Player.x+xMap,Player.y+yMap+1)~=232 and mget(Player.x+xMap,Player.y+yMap+1)~=233 and mget(Player.x+xMap,Player.y+yMap+1)~=234 and mget(Player.x+xMap,Player.y+yMap+1)~=235 then spr(289,Player.x*8,8*Player.y+8,6) end --PARTICLES AFTER PLAYER if move[#move]=="right" and keepMoving then spr(391+time()/40%60//15,8*Player.x-8,8*Player.y-1,0) elseif move[#move]=="left" and keepMoving then spr(391+time()/40%60//15,8*Player.x+5,8*Player.y-1,0) elseif move[#move]=="up" and keepMoving then spr(391+time()/40%60//15,8*Player.x-2,8*Player.y+5,0) elseif move[#move]=="down" then spr(391+time()/40%60//15,8*Player.x-2,8*Player.y-10,0) end --PLAYER-- spr(Player.costume+time()/20%30//10,8*Player.x,8*Player.y-8,6) spr(304,8*Player.x,8*Player.y,6) --hat spr(257,8*Player.x,8*Player.y-14,12,1) --hat spr(sword.costume,8*sword.x-9,8*sword.y+math.cos(time()/140),8) sword.x = Player.x sword.y = Player.y --sword --print(reflectiveRock.costume,100,80,0) end -------------------- function PlayerBurnedChangeColor() end -------------------- function PushBoxesPlayer() PushRockRight() end function PushRockRight() end ------------ function PlayerCollideNotMoveableAreas() return mget(Player.x+xMap,Player.y+yMap)==118 or mget(Player.x+xMap,Player.y+yMap)==51 or mget(Player.x+xMap,Player.y+yMap)==52 or mget(Player.x+xMap,Player.y+yMap)==228 or mget(Player.x+xMap,Player.y+yMap)==111 or mget(Player.x+xMap,Player.y+yMap)==34 or mget(Player.x+xMap,Player.y+yMap)==98 or mget(Player.x+xMap,Player.y+yMap)==97 or mget(Player.x+xMap,Player.y+yMap)==211 or mget(Player.x+xMap,Player.y+yMap)==48 or mget(Player.x+xMap,Player.y+yMap)==173 or mget(Player.x+xMap,Player.y+yMap)==21 or mget(Player.x+xMap,Player.y+yMap)==135 or mget(Player.x+xMap,Player.y+yMap)==136 or mget(Player.x+xMap,Player.y+yMap)==137 or mget(Player.x+xMap,Player.y+yMap)==120 or mget(Player.x+xMap,Player.y+yMap)==138 or mget(Player.x+xMap,Player.y+yMap)==61 or mget(Player.x+xMap,Player.y+yMap)==82 or mget(Player.x+xMap,Player.y+yMap)==83 or mget(Player.x+xMap,Player.y+yMap)==84 or mget(Player.x+xMap,Player.y+yMap)==91 or mget(Player.x+xMap,Player.y+yMap)==92 or mget(Player.x+xMap,Player.y+yMap)==93 or mget(Player.x+xMap,Player.y+yMap)==94 or mget(Player.x+xMap,Player.y+yMap)==73 or mget(Player.x+xMap,Player.y+yMap)==74 or mget(Player.x+xMap,Player.y+yMap)==115 or mget(Player.x+xMap,Player.y+yMap)==21 or mget(Player.x+xMap,Player.y+yMap)==152 or mget(Player.x+xMap,Player.y+yMap)==109 or mget(Player.x+xMap,Player.y+yMap)==134 or mget(Player.x+xMap,Player.y+yMap)==133 or mget(Player.x+xMap,Player.y+yMap)==149 or mget(Player.x+xMap,Player.y+yMap)==152 or mget(Player.x+xMap,Player.y+yMap)==21 or mget(Player.x+xMap,Player.y+yMap)==208 or mget(Player.x+xMap,Player.y+yMap)==209 or mget(Player.x+xMap,Player.y+yMap)==231 or mget(Player.x+xMap,Player.y+yMap)==232 or mget(Player.x+xMap,Player.y+yMap)==233 or mget(Player.x+xMap,Player.y+yMap)==247 or mget(Player.x+xMap,Player.y+yMap)==13 or mget(Player.x+xMap,Player.y+yMap)==10 or mget(Player.x+xMap,Player.y+yMap)==248 or mget(Player.x+xMap,Player.y+yMap)==151 or mget(Player.x+xMap,Player.y+yMap)==117 or mget(Player.x+xMap,Player.y+yMap)==62 or mget(Player.x+xMap,Player.y+yMap)==65 or mget(Player.x+xMap,Player.y+yMap)==121 or mget(Player.x+xMap,Player.y+yMap)==119 or mget(Player.x+xMap,Player.y+yMap)==234 or mget(Player.x+xMap,Player.y+yMap)==235 or mget(Player.x+xMap,Player.y+yMap)==66 or mget(Player.x+xMap,Player.y+yMap)==249 or mget(Player.x+xMap,Player.y+yMap)==250 or mget(Player.x+xMap,Player.y+yMap)==251 end function collideUp() return mget(Player.x+xMap,Player.y-2+yMap)~=109 and mget(Player.x+xMap,Player.y-2+yMap)~=21 and mget(Player.x+xMap,Player.y-1+yMap)~=21 and mget(Player.x+xMap,Player.y-2+yMap)~=111 and mget(Player.x+xMap,Player.y-2+yMap)~=16 and mget(Player.x+xMap,Player.y-1+yMap)~=16 and mget(Player.x+xMap,Player.y-1+yMap)~=206 end function collideDown() return mget(Player.x+xMap,Player.y+2+yMap)~=109 and mget(Player.x+xMap,Player.y+2+yMap)~=134 and mget(Player.x+xMap,Player.y+2+yMap)~=21 and mget(Player.x+xMap,Player.y+1+yMap)~=21 and mget(Player.x+xMap,Player.y+2+yMap)~=111 and mget(Player.x+xMap,Player.y+2+yMap)~=16 and mget(Player.x+xMap,Player.y+1+yMap)~=16 and mget(Player.x+xMap,Player.y+1+yMap)~=206 end function collideLeft() return mget(Player.x-2+xMap,Player.y+yMap)~=109 and mget(Player.x-2+xMap,Player.y+yMap)~=134 and mget(Player.x-2+xMap,Player.y+yMap)~=21 and mget(Player.x-1+xMap,Player.y+yMap)~=21 and mget(Player.x-2+xMap,Player.y+yMap)~=111 and mget(Player.x-2+xMap,Player.y+yMap)~=16 and mget(Player.x-1+xMap,Player.y+yMap)~=16 and mget(Player.x-1+xMap,Player.y+yMap)~=206 end function collideRight() return mget(Player.x+2+xMap,Player.y+yMap)~=109 and mget(Player.x+2+xMap,Player.y+yMap)~=21 and mget(Player.x+1+xMap,Player.y+yMap)~=21 and mget(Player.x+2+xMap,Player.y+yMap)~=111 and mget(Player.x+2+xMap,Player.y+yMap)~=0 and mget(Player.x+2+xMap,Player.y+yMap)~=16 and mget(Player.x+1+xMap,Player.y+yMap)~=16 and mget(Player.x+1+xMap,Player.y+yMap)~=206 end ------------------ function FailActivity() return (mget(Player.x+xMap,Player.y+yMap)==109 or mget(Player.x+xMap,Player.y+yMap)==149 or mget(Player.x+xMap,Player.y+yMap)==152 or mget(Player.x+xMap,Player.y+yMap)==133) and movet == 0 end -------------- function CollidePlayer() if (mget(Player.x+xMap,Player.y+yMap)==231 or mget(Player.x+xMap,Player.y+yMap)==232 or mget(Player.x+xMap,Player.y+yMap)==231) and not keepMoving then sfx(18,'F-3',61,1,3) end if (mget(Player.x+xMap,Player.y+yMap)==247 or mget(Player.x+xMap,Player.y+yMap)==248 or mget(Player.x+xMap,Player.y+yMap)==118 or mget(Player.x+xMap,Player.y+yMap)==10 or mget(Player.x+xMap,Player.y+yMap)==19 or mget(Player.x+xMap,Player.y+yMap)==13 or mget(Player.x+xMap,Player.y+yMap)==66 or mget(Player.x+xMap,Player.y+yMap)==249) and not keepMoving then sfx(17,'F-3',61,1,3) end--house if (mget(Player.x+xMap,Player.y+yMap)==98 or mget(Player.x+xMap,Player.y+yMap)==97) and not keepMoving then sfx(16,'F-3',61,1,3) end--rock if mget(Player.x+xMap,Player.y+yMap)==34 and not keepMoving then sfx(19,'F-3',61,1,3) end--rock if (mget(Player.x+xMap,Player.y+yMap)==83 or mget(Player.x+xMap,Player.y+yMap)==51 or mget(Player.x+xMap,Player.y+yMap)==52 or mget(Player.x+xMap,Player.y+yMap)==84) and not keepMoving then end if PlayerCollideNotMoveableAreas() and movet == 0 then if move[#move]=="up" then keepMoving = true move[#move] = "down" elseif move[#move]=="down" then keepMoving = true move[#move] = "up" arrow.x = arrow.xT[#arrow.xT-1] arrow.y = arrow.xT[#arrow.xT-1] elseif move[#move]=="left" then keepMoving = true move[#move] = "right" elseif move[#move]=="right" then keepMoving = true move[#move] = "left" elseif move[#move]=="downright" then keepMoving = true move[#move] = "upleft" elseif move[#move]=="upleft" then keepMoving = true move[#move] = "downright" end end end function PlayerSinkIceGround() --break ice if mget(Player.x+xMap,Player.y+yMap)==38 then table.insert(steppedOnIce,true) else table.insert(steppedOnIce,false) end if steppedOnIce[#steppedOnIce] and movet%10==0 then if (btnp(0,1,1) or keyp(19,1,1)) and steppedOnIce[#steppedOnIce] then Player.moves = Player.moves+1 move[#move]="up" mset(Player.x+xMap,Player.y+yMap,111-3+1) end if (btnp(1,1,1) or keyp(23,1,1)) and steppedOnIce[#steppedOnIce] then Player.moves = Player.moves+1 move[#move]="down" mset(Player.x+xMap,Player.y+yMap,111-3+1) end if (btnp(3,1,1) or keyp(4,1,1)) and steppedOnIce[#steppedOnIce] then Player.moves = Player.moves+1 move[#move]="left" mset(Player.x+xMap,Player.y+yMap,111-3+1) end if (btnp(2,1,1) or keyp(1,1,1)) and steppedOnIce[#steppedOnIce] then Player.moves = Player.moves+1 move[#move]="right" mset(Player.x+xMap,Player.y+yMap,111-3+1) end end end function MoveAuto() --count the steps --undo --if you get to certain time, do action if Player.moves%Player.movesCounter==0 and movet==0 then move[#move] = Player.moveNext[#Player.moveNext] end end --------------------- function MovePlayer() --attracted to enemy tile for i = 1,29,2 do for j = 1,13,2 do --attract player if mget(Player.x+xMap+i,Player.y+yMap)==32 then move[#move]="right" end if mget(Player.x+xMap,Player.y+j+yMap)==32 then move[#move]="down" end if mget(Player.x+xMap,Player.y-j+yMap)==32 then move[#move]="up" end if mget(Player.x-i+xMap,Player.y+yMap)==32 then move[#move]="left" end --attract enemies if mget(Stomp.x+xMap+i,Stomp.y+yMap)==32 then Stomp.x = Stomp.x+1 end if mget(Stomp.x+xMap,Stomp.y+j+yMap)==32 then Stomp.y = Stomp.y+2 end if mget(Stomp.x+xMap,Stomp.y-j+yMap)==32 then Stomp.y = Stomp.y-2 end if mget(Stomp.x-i+xMap,Stomp.y+yMap)==32 then Stomp.x = Stomp.x-2 end end end --enemies if mget(Player.x+xMap,Player.y+yMap)==158 or mget(Player.x+xMap,Player.y+yMap)==159 or mget(Player.x+xMap,Player.y+yMap)==174 or mget(Player.x+xMap,Player.y+yMap)==175 then rect(50,50,150,100,0) print("YOU WON!",100,100) end BufferMovementPlayer() ScreenWrappingPlayer() if mget(Player.x+xMap,Player.y+yMap)==206 then xMap = 0 yMap = 0 end --step on glass if mget(Player.x+xMap,Player.y+yMap)==73 or mget(Player.x+xMap,Player.y+yMap)==74 or mget(Player.x+xMap,Player.y+yMap)==115 then if move[#move]=="down" and collideDown() then movet = 9.2 elseif move[#move]=="up" and collideUp() then movet = 6.3 elseif move[#move]=="left" and collideLeft() then movet = 5.4 elseif move[#move]=="right" and collideRight() then movet = 9.4 end end --step on breakable glass if mget(Player.x+xMap,Player.y+yMap)==78 then if move[#move]=="down" and collideDown() then movet = 4.2 elseif move[#move]=="up" and collideUp() then movet = 7 elseif move[#move]=="left" and collideLeft() then movet = 8 elseif move[#move]=="right" and collideRight() then movet = 9.2 end end --break the breakable glass if move[#move]=="down" and mget(Player.x+xMap,Player.y-1+yMap)==78 then mset(Player.x+xMap,Player.y-1+yMap,109) end if move[#move]=="up" and mget(Player.x+xMap,Player.y+1+yMap)==78 then mset(Player.x+xMap,Player.y+1+yMap,109) end if move[#move]=="left" and mget(Player.x+1+xMap,Player.y+yMap)==78 then mset(Player.x+xMap+1,Player.y+yMap,109) end if move[#move]=="right" and mget(Player.x-1+xMap,Player.y+yMap)==78 then mset(Player.x+xMap-1,Player.y+yMap,109) end ----actual player movement --without stepping on wet tile --up if mget(Player.x+xMap,Player.y+yMap)~=rock() and mget(Player.x+xMap,Player.y+yMap)~=63 and not PlayerCollideNotMoveableAreas() and not undoAll -- not undoing and not rockInWater.undoAll and mget(reflectiveRock.x,reflectiveRock.y)~=98 and mget(reflectiveRock.x,reflectiveRock.y)~=97 and mget(nonreflectiveRock.x,nonreflectiveRock.y)~=98 and mget(nonreflectiveRock.x,nonreflectiveRock.y)~=97 and reflectiveRock.slidet==0 and nonreflectiveRock.slidet==0 and movet==0 and not reflectiveRock.startSliding and not nonreflectiveRock.startSliding --and not collide with rock and not ((math.floor(Player.x)==math.floor(nonreflectiveRock.x) and math.floor(Player.y)==math.floor(nonreflectiveRock.y) and nonreflectiveRock.costume~=63 ) or ( math.floor(Player.x)==math.floor(reflectiveRock.x) and math.floor(Player.y)==math.floor(reflectiveRock.y) and reflectiveRock.costume~=63 ) ) then --if you are on stairs then move --diagonally if mget(Player.x+xMap,Player.y+yMap)==17 or mget(Player.x+xMap,Player.y+yMap)==161-1 then --move up left if (btnp(0,1,1) or keyp(23,1,1) or btnp(2,1,1) or keyp(1,1,1) ) and not keepMoving then Player.moves = Player.moves+1 table.insert(move,"upleft") keepMoving = true --move down right elseif (btnp(1,1,1) or keyp(19,1,1) or btnp(3,1,1) or keyp(4,1,1)) and not keepMoving then Player.moves = Player.moves+1 table.insert(move,"downright") keepMoving = true end end --regular movement if (btnp(0,1,1) or keyp(23,1,1)) and not keepMoving and mget(Player.x+xMap,Player.y+yMap)~=17 and mget(Player.x+xMap,Player.y+yMap)~=160 and mget(Player.x+xMap,Player.y-1+yMap)~=228 and mget(Player.x+xMap,Player.y-1+yMap)~=98 then Player.moves = Player.moves+1 table.insert(move,"up") keepMoving = true --down elseif ((btnp(1,1,1) or keyp(19,1,1)) and not keepMoving) and mget(Player.x+xMap,Player.y+1+yMap)~=228 and mget(Player.x+xMap,Player.y+1+yMap)~=98 and mget(Player.x+xMap,Player.y+1+yMap)~=97 and mget(Player.x+xMap,Player.y+1+yMap)~=121 then Player.moves = Player.moves+1 table.insert(move,"down") keepMoving = true --left elseif (btnp(2,1,1) or keyp(1,1,1)) and mget(Player.x-1+xMap,Player.y+yMap)~=228 and mget(Player.x-1+xMap,Player.y+yMap)~=98 and mget(Player.x-1+xMap,Player.y+yMap)~=97 and mget(Player.x-1+xMap,Player.y+yMap)~=121 and not keepMoving then Player.moves = Player.moves+1 table.insert(move,"left") keepMoving = true --right elseif (btnp(3,1,1) or keyp(4,1,1)) and mget(Player.x+1+xMap,Player.y+yMap)~=228 and mget(Player.x+1+xMap,Player.y+yMap)~=98 and mget(Player.x+1+xMap,Player.y+yMap)~=97 and mget(Player.x+1+xMap,Player.y+yMap)~=121 and not keepMoving then Player.moves = Player.moves+1 table.insert(move,"right") keepMoving = true end end --hop slower on wet tile if (mget(Player.x+xMap,Player.y+yMap)==77 or mget(Player.x+xMap,Player.y+yMap)==63 or mget(Player.x+xMap,Player.y+yMap)==64 ) and not undoAll -- not undoing --and not collide with rock and not ((math.floor(Player.x)==math.floor(nonreflectiveRock.x) and math.floor(Player.y)==math.floor(nonreflectiveRock.y) and nonreflectiveRock.costume~=63 ) or ( math.floor(Player.x)==math.floor(reflectiveRock.x) and math.floor(Player.y)==math.floor(reflectiveRock.y) and reflectiveRock.costume~=63 ) ) and not keepMoving then if (btnp(0) or keyp(23)) then Player.moves = Player.moves+1 table.insert(move,"up") keepMoving = true --down elseif (btnp(1) or keyp(19)) then Player.moves = Player.moves+1 table.insert(move,"down") keepMoving = true --let me fix this bug --left elseif (btnp(2) or keyp(1)) then Player.moves = Player.moves+1 table.insert(move,"left") keepMoving = true --right elseif (btnp(3) or keyp(4)) then Player.moves = Player.moves+1 table.insert(move,"right") keepMoving = true end end end ----------------------- function ScreenWrappingPlayer() if Player.y<=0 then Player.y = 16 movet = 0 end if Player.y>=16.1 then Player.y = 0.2 movet = 0 end if Player.x<5 then Player.x = 27.2 movet = 0 end if Player.x>27.2 then Player.x = 5.2 movet = 0 end end ------------------------ function BufferMovementPlayer() if keepMoving and mget(Player.x+xMap,Player.y+yMap)~=73 and mget(Player.x+xMap,Player.y+yMap)~=74 and mget(Player.x+xMap,Player.y+yMap)~=115 and mget(Player.x+xMap,Player.y+yMap)~=78 then --movet = movet+2 but with tweening movet = movet+Player.stamina end if movet > 10 then keepMoving = false movet = 0 if mget(Player.x+xMap,Player.y+yMap)==18 or mget(Player.x+xMap,Player.y+yMap)==1 or mget(Player.x+xMap,Player.y+yMap)==2 or mget(Player.x+xMap,Player.y+yMap)==165 or mget(Player.x+xMap,Player.y+yMap)==166 then sfx(36,math.random(34,36),122,2,2) end if mget(Player.x+xMap,Player.y+yMap)==163 then sfx(26,math.random(34,36),122,2,2) end if mget(Player.x+xMap,Player.y+yMap)==45 or mget(Player.x+xMap,Player.y+yMap)==46 or mget(Player.x+xMap,Player.y+yMap)==29 then sfx(27,math.random(24,26),50,2,1) end if mget(Player.x+xMap,Player.y+yMap)==62 or mget(Player.x+xMap,Player.y+yMap)==117 or mget(Player.x+xMap,Player.y+yMap)==151 then sfx(27,math.random(24,26),50,2,2) end end if slidet> 20 then keepMoving = false end --corrects player movement when stationary PlayerClimbStairs() --down if move[#move]=="down" then if movet>0 and movet<=10 then Player.y = Player.y + Player.speed end end --up if move[#move]=="up" then if movet>0 and movet<=10 then Player.y = Player.y - Player.speed end end --left if move[#move]=="left" then if movet>0 and movet<=10 then Player.x = Player.x - Player.speed end end --right if move[#move]=="right" then if movet>0 and movet<=10 then Player.x = Player.x + Player.speed end end end ------------ function PlayerClimbStairs() --stairs movement if move[#move]=="upleft" then if movet>0 and movet<=10 then Player.y = Player.y - Player.speed Player.x = Player.x - Player.speed end end if move[#move]=="downright" then if movet>0 and movet<=10 then Player.y = Player.y + Player.speed Player.x = Player.x + Player.speed end end end ------------------ function DrawMap() cls() --draw map if level == 1 then xMap = 0 yMap = 0 end map(210,0,30,17) map(xMap,yMap,30,17) end ------------------- function ScaleScreenUp() --fez vibes for i = 20,240,2 do for j = 0,110,2 do pix(i//2+100,j//2,pix(i//5+Player.x*8-30,j//5-25+Player.y+Player.y*8)+(i+j)%(1)) --if level == 1 then --pix(i/2,j/2,pix(i,j)+(i+j)%4) --end end end end function zoomScreenDown() for i = 20,240,2 do for j = 0,110,2 do pix(i//2+100,j//2,pix(i,j)+(i+j)%(1)) --if level == 1 then pix(i/2,j/2,pix(i,j)+(i+j)%4) --end end end end -------------------- function DrawWater() --draw Water for i = startDrawWaterx, endDrawWaterx do for j = startDrawWatery, endDrawWatery do -- Fixed this loop range if pix(i, j) == 7 then local y01 = drawWaterY -(j-drawWaterY+math.sin(i-time()/100)/2) -- Adjusted the wave effect pix(i, j, drk[pix(i, y01)]) end end end --sparkles on water circ(138-11,85,1+math.sin(time()/111),15) circ(115+5,81,1+math.sin(time()/91),15) circ(65,91,1+math.sin(time()/91),15) --sparkles on glass circ(68,84,1+math.sin(time()/91),15) circ(99,86,1+math.sin(time()/155),15) circ(115-8,91,1+math.sin(time()/155),15) end --------------------- function DrawLights() --draw a collumn of light showing the --campfire for i = lightMap.startX,lightMap.endX+1 do for j = lightMap.startY,lightMap.endY do if pix(i,j)==13 then pix(i,j,15) else pix(i,j,3+pix(i,j)) end end end end -------------------- function RotateMap() for i = 0,240 do for j = 0,136 do pix(i,j,pix(i/1.1+j/4,j)) end end end -------------------- function DrawNight() for i = 0,240 do for j = 0,136 do pix(i,j,pix(i,j)*.1-1) end end end ---- --globals for raycast --launching position for arrows x1 = 9 y1 = 0 x2 = 9 y2 = 30 x3 = 10 y3 = 10 x4 = 0 y4 = 10 function raycast() --line(x1,y1,x2,y2,15) --line(x3,y3,x4,y4,15) local den = (x1-x2)*(y3-y4)-(y1-y2)*(x3-x4) local t = ((x1-x3)*(y3-y4)-(y1-y3)*(x3-x4))/den local u = -((x1-x2)*(y1-y3)-(y1-y2)*(x1-x3))/den if (t>0 and t<1 and u>0) then -- print("true",100,71) return true else -- print("false",100,71,1) return nil --we return nil as no collision has happened between the ray line and the wall line. end --NOW, if the denominator is zero, --it would be an error. Thus we return nil. if den == 0 then return nil end end function whatIsxsRaycast() x1 = Player.x*8-8 y1 = Player.y*8-8 x2 = Player.x*8+8 y2 = Player.y*8+8 x3 = arrow.x*8-5 y3 = arrow.y*8+16 x4 = arrow.x*8-170 y4 = arrow.y*8+144 end ------------ function scanline(row) if (screenEffects=="drunk") then poke(0x3ff9,math.sin(time()/1113+row/188)*2) elseif (screenEffects=="undo") then poke(0x3ff9,math.sin(time()/113+row/1.1)*2) elseif (screenEffects=="wah2") then poke(0x3ff9,math.sin(time()/113+row/4)*20) else poke(0x03FF9,88) --scrolling world end end