From b232e57ec4a3c0b8ac9d8126e5fd648016a6019a Mon Sep 17 00:00:00 2001 From: davpapp Date: Thu, 15 Mar 2018 20:52:57 -0400 Subject: [PATCH] World hopping working but very hacky --- src/Constants.java | 23 ++++++- src/InventoryItem.java | 2 +- src/IronMiner.java | 37 ++++++----- src/MiningSuccessHistory.java | 2 +- src/MultiThreadingExample.java | 13 ---- src/RandomDetector.java | 3 + src/WorldHopper.java | 68 ++++++++------------- target/classes/Constants.class | Bin 2213 -> 2780 bytes target/classes/InventoryItem.class | Bin 2633 -> 2633 bytes target/classes/IronMiner.class | Bin 6613 -> 6898 bytes target/classes/MiningSuccessHistory.class | Bin 1750 -> 1750 bytes target/classes/MultiThreadingExample.class | Bin 563 -> 0 bytes target/classes/RandomDetector.class | Bin 4063 -> 4145 bytes target/classes/WorldHopper.class | Bin 1646 -> 1541 bytes 14 files changed, 75 insertions(+), 73 deletions(-) delete mode 100644 src/MultiThreadingExample.java delete mode 100644 target/classes/MultiThreadingExample.class diff --git a/src/Constants.java b/src/Constants.java index bc80a71..b1d32e1 100644 --- a/src/Constants.java +++ b/src/Constants.java @@ -36,7 +36,7 @@ public class Constants { public static final int INVENTORY_ICON_HEIGHT = 25; public static final int LOGOUT_ICON_OFFSET_X = 728; - public static final int LOGOUT_ICON_OFFSET_Y = 528; + public static final int LOGOUT_ICON_OFFSET_Y = 545; public static final int LOGOUT_ICON_WIDTH = 25; public static final int LOGOUT_ICON_HEIGHT = 25; @@ -47,6 +47,19 @@ public class Constants { public static final int MINING_XP_STAT_WIDTH = 50; public static final int MINING_XP_STAT_HEIGHT = 23; + + // ----------------------------------- OTHER ----------------------------------------- + + public static final int WORLD_SWITCH_BUTTON_OFFSET_X = 674; + public static final int WORLD_SWITCH_BUTTON_OFFSET_Y = 454; + public static final int WORLD_SWITCH_BUTTON_WIDTH = 130; + public static final int WORLD_SWITCH_BUTTON_HEIGHT = 23; + + public static final int WORLD_LISTING_OFFSET_X = 665; + public static final int WORLD_LISTING_OFFSET_Y = 320; + public static final int WORLD_LISTING_WIDTH = 150; + public static final int WORLD_LISTING_HEIGHT = 187; + public static Point getCharacterLocation() { return new Point(CHARACTER_CENTER_X, CHARACTER_CENTER_Y); } @@ -63,6 +76,14 @@ public class Constants { return new Rectangle(LOGOUT_ICON_OFFSET_X, LOGOUT_ICON_OFFSET_Y, LOGOUT_ICON_WIDTH, LOGOUT_ICON_HEIGHT); } + public static Rectangle getWorldSwitchButtonRectangle() { + return new Rectangle(WORLD_SWITCH_BUTTON_OFFSET_X, WORLD_SWITCH_BUTTON_OFFSET_Y, WORLD_SWITCH_BUTTON_WIDTH, WORLD_SWITCH_BUTTON_HEIGHT); + } + + public static Rectangle getWorldListingRectangle() { + return new Rectangle(WORLD_LISTING_OFFSET_X, WORLD_LISTING_OFFSET_Y, WORLD_LISTING_WIDTH, WORLD_LISTING_HEIGHT); + } + public static Rectangle getMiningXPRectangle() { return new Rectangle(MINING_XP_STAT_OFFSET_X, MINING_XP_STAT_OFFSET_Y, MINING_XP_STAT_WIDTH, MINING_XP_STAT_HEIGHT); } diff --git a/src/InventoryItem.java b/src/InventoryItem.java index 1d96735..9e024a4 100644 --- a/src/InventoryItem.java +++ b/src/InventoryItem.java @@ -11,7 +11,7 @@ public class InventoryItem { public InventoryItem(String itemDirectoryPath, String itemName) throws IOException { initializeImage(itemDirectoryPath, itemName); - this.minimumNumberOfMatchingPixels = 200; + this.minimumNumberOfMatchingPixels = 250; } private void initializeImage(String itemDirectoryPath, String itemName) throws IOException { diff --git a/src/IronMiner.java b/src/IronMiner.java index a27fa20..863a0ff 100644 --- a/src/IronMiner.java +++ b/src/IronMiner.java @@ -34,7 +34,6 @@ public class IronMiner { HumanBehavior humanBehavior; CameraCalibrator cameraCalibrator; RandomDetector randomDetector; - WorldHopper worldHopper; MiningSuccessHistory miningSuccessHistory; ObjectDetectionHistory objectDetectionHistory; @@ -48,7 +47,6 @@ public class IronMiner { robot = new Robot(); humanBehavior = new HumanBehavior(); randomDetector = new RandomDetector(); - worldHopper = new WorldHopper(); cameraCalibrator = new CameraCalibrator(targetNumberOfDetectedOres); miningSuccessHistory = new MiningSuccessHistory(); objectDetectionHistory = new ObjectDetectionHistory(targetNumberOfDetectedOres); @@ -56,9 +54,10 @@ public class IronMiner { public void run() throws Exception { long startTime = System.currentTimeMillis(); + int worldHopCounter = 0; int count = 0; - while (((System.currentTimeMillis() - startTime) / 1000.0 / 60) < 85) { + while (((System.currentTimeMillis() - startTime) / 1000.0 / 60) < 93) { BufferedImage screenCapture = objectDetector.captureScreenshotGameWindow(); ArrayList detectedObjects = objectDetector.getObjectsInImage(screenCapture, 0.30); ArrayList ironOres = objectDetector.getIronOres(detectedObjects); @@ -68,11 +67,13 @@ public class IronMiner { DetectedObject closestIronOre = getClosestObjectToCharacter(ironOres); if (closestIronOre != null) { + Thread.sleep(Randomizer.nextGaussianWithinRange(20, 40)); cursor.moveAndLeftClickAtCoordinatesWithRandomness(closestIronOre.getCenterForClicking(), 10, 10); int ironOreInInventory = inventory.getFirstIronOreInInventory(); + int numberOfOresInInventoryBefore = inventory.getNumberOfItemsOfTypeInInventory("ironOre"); - int numberOfOresInInventoryAfter = 0; + boolean miningSuccess = false; if (ironOreInInventory > -1) { int ironOreInInventoryColumn = ironOreInInventory % 7; @@ -89,27 +90,30 @@ public class IronMiner { trackerThread.waitTillDone(); dropperThread.waitTillDone(); - - Point rightClickLocation = cursor.getCurrentCursorPoint(); cursorTask.leftClickDropOption(cursor, rightClickLocation, 0); - numberOfOresInInventoryAfter = inventory.getNumberOfItemsOfTypeInInventory("ironOre") + 1; + if (inventory.getNumberOfItemsOfTypeInInventory("ironOre") >= numberOfOresInInventoryBefore) { + miningSuccess = true; + } } else { TrackerThread trackerThread = new TrackerThread(screenCapture, closestIronOre, objectDetector); trackerThread.start(); trackerThread.waitTillDone(); - numberOfOresInInventoryAfter = inventory.getNumberOfItemsOfTypeInInventory("ironOre"); + if (inventory.getNumberOfItemsOfTypeInInventory("ironOre") > numberOfOresInInventoryBefore) { + miningSuccess = true; + } } count++; - boolean miningSuccess = (numberOfOresInInventoryAfter > numberOfOresInInventoryBefore); - //System.out.println("Ores in inventory: " + numberOfOresInInventoryBefore + ". Mining success? " + miningSuccess); - hopWorldsIfMiningSuccessRateIsLow(miningSuccess); - - System.out.println(count + ", time: " + ((System.currentTimeMillis() - startTime) / 1000 / 60)); + System.out.println("Ores in inventory: " + numberOfOresInInventoryBefore + ". Mining success? " + miningSuccess); + boolean worldHopped = hopWorldsIfMiningSuccessRateIsLow(miningSuccess); + if (worldHopped) { + worldHopCounter++; + } + System.out.println(count + ", time: " + ((System.currentTimeMillis() - startTime) / 1000 / 60) + ". Hops: " + worldHopCounter); } humanBehavior.randomlyCheckMiningXP(cursor); randomDetector.dealWithRandoms(screenCapture, cursor); @@ -117,12 +121,15 @@ public class IronMiner { } } - private void hopWorldsIfMiningSuccessRateIsLow(boolean miningSuccess) { + private boolean hopWorldsIfMiningSuccessRateIsLow(boolean miningSuccess) throws Exception { boolean hopWorld = miningSuccessHistory.updateHistory(miningSuccess); if (hopWorld) { - //System.out.println("Hopping worlds (Theoretically)"); + System.out.println("Hopping worlds"); + WorldHopper.hopWorld(cursor); miningSuccessHistory.resetQueue(); + return true; } + return false; } private void readjustCameraIfObjectsAreNotBeingDetected(int detectedObjectsSize) throws Exception { diff --git a/src/MiningSuccessHistory.java b/src/MiningSuccessHistory.java index 81aadf2..aaacec6 100644 --- a/src/MiningSuccessHistory.java +++ b/src/MiningSuccessHistory.java @@ -29,7 +29,7 @@ public class MiningSuccessHistory { } private boolean isMiningRateSufficient() { - return numberOfTruesInQueue < (queueSize * 0.6); + return numberOfTruesInQueue < (queueSize * 0.8); } public void resetQueue() { diff --git a/src/MultiThreadingExample.java b/src/MultiThreadingExample.java deleted file mode 100644 index af7dcb9..0000000 --- a/src/MultiThreadingExample.java +++ /dev/null @@ -1,13 +0,0 @@ - -public class MultiThreadingExample { - - public static void main(String[] args) { - // TODO Auto-generated method stub - System.out.println("Starting multithreading..."); - TrackerThread trackerThread = new TrackerThread(); - trackerThread.start(); - DropperThread dropperThread = new DropperThread(); - dropperThread.start(); - } - -} diff --git a/src/RandomDetector.java b/src/RandomDetector.java index 9f3cc15..3dbe999 100644 --- a/src/RandomDetector.java +++ b/src/RandomDetector.java @@ -29,6 +29,9 @@ public class RandomDetector { cursor.moveAndLeftClickAtCoordinatesWithRandomness(cursor.getOffsetPoint(getDismissOptionClickLocation(speakerPoint)), 40, 10, 6); Thread.sleep(1743, 2313); } + else { + cursor.moveCursorToCoordinatesWithRandomness(new Point(Constants.GAME_WINDOW_OFFSET_X, Constants.GAME_WINDOW_OFFSET_Y), 20, 20); + } } } diff --git a/src/WorldHopper.java b/src/WorldHopper.java index bf241fb..272e8c9 100644 --- a/src/WorldHopper.java +++ b/src/WorldHopper.java @@ -1,52 +1,36 @@ +import java.awt.AWTException; +import java.awt.Point; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; +import java.util.Random; +import java.util.Set; public class WorldHopper { - int numberOfOresMined; - int queueSize; - //int numberOfFramesWithOtherPlayers; - //Queue frames; - Queue oresMined; + //Set visitedWorlds; - public WorldHopper() { - numberOfOresMined = 0; - queueSize = 30; - //numberOfFramesWithOtherPlayers = 0; - //frames = new LinkedList(); - /*for (int i = 0; i < 600; i++) { - frames.add(false); - }*/ - oresMined = new LinkedList(); - for (int i = 0; i < queueSize; i++) { - oresMined.add(true); - } - } - - public void hopWorldsIfMiningRateLow() { - updateOresMinedSuccessTracking(); - if (areOtherPlayersLikelyPresent()) { - hopWorld(); - } - } - - - public void updateOresMinedSuccessTracking(boolean success) { - oresMined.add(success); - if (success) { - numberOfOresMined++; - } - if (oresMined.poll()) { - numberOfOresMined--; - } - } - - private boolean areOtherPlayersLikelyPresent() { - return numberOfOresMined < (queueSize * 0.6); - } - - private void hopWorld() { + public static void hopWorld(Cursor cursor) throws Exception { + cursor.moveAndLeftClickInBoundingRectangle(Constants.getLogoutIconRectangle()); + Thread.sleep(650, 900); + //cursor.moveAndLeftClickInBoundingRectangle(Constants.getWorldSwitchButtonRectangle()); + Thread.sleep(2150, 3080); + Random random = new Random(); + int x = random.nextInt(Constants.WORLD_LISTING_WIDTH) + Constants.WORLD_LISTING_OFFSET_X; + int y = random.nextInt(Constants.WORLD_LISTING_HEIGHT) + Constants.WORLD_LISTING_OFFSET_Y; + cursor.moveAndLeftClickAtCoordinates(new Point(x, y)); + Thread.sleep(4300, 5320); + cursor.moveAndLeftClickInBoundingRectangle(Constants.getInventoryIconRectangle()); System.out.println("Hopping worlds!"); } + + public static void main(String[] args) throws Exception { + Cursor cursor = new Cursor(); + for (int i = 0; i < 5; i++) { + WorldHopper.hopWorld(cursor); + Thread.sleep(2500); + } + System.out.println("Done hopping..."); + Thread.sleep(10000); + } } diff --git a/target/classes/Constants.class b/target/classes/Constants.class index 7f9c0519ef7e6745173a288a4d14947539c41a02..57b416ec0c90b355dc74b53855e2f8153ae4c38b 100644 GIT binary patch delta 1079 zcmaJ-O>YuW6g_vKD1;?p*!P3Ozln+Ddl5E5fG*V)fPuUI*5?yXqS`pFN|r@ zEs2Rs8y6&!n7HY}U(kiWLlYOqJAmWRfNybM&b{ZHd)|95zF!D@`~CR~fOWh)4*Za4 z)gn*dTq);^*<`I$R@6>j}tEav4n6TK^-fA&z--s1@de;bG8#^{(*UETrN1qXv973^KH?(f6(+ogE!zMMY zzIWs1)mGCe_g-}xrG4F~?qCwZ4zXPo)DZYNz>|;Mk?_wYK5~(`>qpJR z(}{SEm)K`%2(2olcLKjckx*oS`dNdd%i#Gu{pozY?9!X9`3BPJoB&yu!JebPHF-dI z{D8io6M=)!r5P_MI0mL4y5q1uaabNZ90`gG9109)Sg4MLA8p5B`V&2VLDA6K%m|gS NKFB{#c)?Xd=MSiSxh4Pr delta 513 zcmca3x>S(s)W2Q(7#J8#7-BYZePd!2n9Rt$X!0Bu2{soV1_uVm$-7vxWPBJI__7kq z67>_yOY{TsGxJKg7`z$$KnnaPJFr?S1T!)S!4(9hCYL1UrRSt_F$6J$f)s^Kp3Ukw zS)9#=QDJik8zWOa8v`TAa3JXfv|ArYGXiN=t?dlX8-WZa23H^nQpCW(!r%rZc_0cH z+!;K8JWd8r1}~rpNV6VL1qkr%X7G*_WK0oc_`aRNcLPua*%V{2DNI07PKE%6`aq~= zBcLT9AheqyC{mDViXg);0Z9SL?F=F42ACrm5YB)@{|(&wt&#Lc)Z;dQNdSif?2!zJ f#G#*=Q;<pa#Cc2I2+@y%@S;eEC48R1c?9u delta 14 VcmX>pa#Cc2I2+@M%@S;eEC44(1Xln6 diff --git a/target/classes/IronMiner.class b/target/classes/IronMiner.class index 8c43e8ef7752d71064a0c6ef1b36c7dd5ec69a0c..9832e161edf11d8f97ded6dff3369592088ac578 100644 GIT binary patch delta 3833 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 delta 3576 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 diff --git a/target/classes/MiningSuccessHistory.class b/target/classes/MiningSuccessHistory.class index 3199de93a58dbab2926dd7126f63dcdbbab761f6..594bf11103c92ccc147fa4f9f5d29efc3db70318 100644 GIT binary patch delta 20 Zcmcb{dyRKPHxv8InIJH0^CTu0764@q2^s(Z delta 20 Ycmcb{dyRKPHxv6~V=&k}iOGcp08nlQuK)l5 diff --git a/target/classes/MultiThreadingExample.class b/target/classes/MultiThreadingExample.class deleted file mode 100644 index 10024f56ea0e61058d24d22a9bd58cf0d7845cb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 563 zcmZ`$Jx>Bb5Pi#s2PX=m;74_KKp~Bl7#qb3wE#(s)pEDO;@$3L?~YjcpR7nU(cT|r zoI?`|v69u5sm9$W9)!NIkYlJ!`HZ)HuEy<~ z(NwrG!`i7-GCpI-Hkw0*+`0CIjVy{KBz`QlqVi&6Ynqk!ssykk8PuZ zS}H}Igl()Eox$$w#JJ*8rs^E56yPXb4Tm6^=~6(3UL-GBi=sApMn2z~qwunTZL%qx wQrF3rehB0@C@NwTWy++VTU0XT*>9-aRjYICd{C6ZvVyg!kfAIcXo2m010kV^5dZ)H diff --git a/target/classes/RandomDetector.class b/target/classes/RandomDetector.class index bbbcafd18648b6e2211587a84564d56ce84c889f..5fdd8515dfa36e9e08528ade9ea215e56824be31 100644 GIT binary patch delta 1689 zcmZuxTXz#x7~Q9t3rUA`LYdam))ZPwnWT*r34*OlK!hl5X`w(tAh8+RAWg6dH*ZD3 zD^Sr9wc@q1R$q94WmoHxrH{Inf58X;fj;u0=su?x(d9}q`OeHY-`U^Z`+UDfZ#RT~ zzW3b^03ODT+oA2+0TX=!;p3UpnMCGHDY3hd%a=mv#a;_0`UUisRBG+M5Y}S9g#%b8 zuzI9$+S_(&v{)G3Ti8}8jAnEBOvx+m&y|MzGWl#_B<~fAevjs_cvhfNmCh9ssh;g; z2fdS}Tp@2F>)U#DM=y?97{aiCILluu$bFAncuw6p7s4P$B#OL%NfdK9Dsa-m^BDC9 z^`2k}r%jv^sPo4}U4w-)U>#$~EA{QzIuAV+g1`$FUc^iOUHzDN%|Bu^E)lqB;dQ*> zUpJbKw=BGkcl@7>E#itFG>_GNfDcVvTcG7cCO?$u%9MsJe1wm`xny>VX2I(G0H@s8 z4C=bwSnCWLHfuH7kI1?;+ANwTaLE5{$tuz0M}iMFO`$q|2fYLKkljCvJ@#^Y`3&~$ zzs(W>Ea$Zi<$g!7aV&~7R-%L^I7%h8393-d6}Q6x4zeK`9l|pxgMk7L;|QySN##*S z8Y=)6%Kk*!L@&RU%zFZBcn$K2!T$_G%z%*Zo4j}U4hD%WHoX~M+OEmk{jq7}()Lk% z<19{exzkt{pFyEJkkqCS3ncX^)V4aBqtBq2G+f7+#W}wsmP3!F4b1AHq8SNT_f~A=CbNdDR%b#a75C#tAyW|8}=_78knQ zc%UsnZr+^0N;j^xMex_$s?v??|EzTFX5c2@nsY*xGS(I%-il?|h6ZZa##s8HVXpcj z%644B@Ct5jkmbv`LYQf$ErIw051APEJFVy@?=i|2pN1!8+sq)BG^P-ZIl5y={Y=*} z6=^|7m#G&G;TST_zh*_pylhf;bi3mQ8XY|%u1=y>ax3dOx_%-p6YZKbnZ6}%EjIBa zB8+#Ejuf%&qIz94Xg6)#!zOksFRVu&Mc6|zdYHKnPxJX<((cg(CHmwtSB}4asnfM! z`fl()8!?9wUvSq?AxP<&7z!4DM2)gfdxkE#7CIPRXtB<72Pg4>w7cD(j^M7kwR;l(7R4aP;IWY+R1pDKd*M*J>evZZZU{$L_71R?r|PvS zR+w9+j`&;+&rgS|H%%z_m&w61Z=Ive(wG~rt&L|@y%Rec6C-Z` delta 1710 zcmZuyTT@$A6#h2JImd()PJlzDzz|9s;Uo}CYihYvnJEQYZmmKaTAGAwq1?2wrQT9) z>!m8K9&dP;afX*Zz{o(yjz0R}jK4vB>Q8W-spz*i5YaIS$=>U%>$kqOSPuMB=KX2? zyB`1?z}L&(X1BBGcG7(UIpfJo$w=~YD$+eYHkC4PRv=%=#-<}}UCpzD!!xO|=_v!} z1oASjbafSBc9o0JUsFsvk3yy(ZM4+hQ)7?o{&RrPw2i*X+= zWMRTt)VlO3%ovz<9%$vRXYi~O&@DaX!*jUg)axVSMQ1^;*cHRe(o0%EqZjEz;1wTU z#Wm+=J*eOC;WfPO{Gm6An@+tkQt~bw1Mh9sH^E#Z9m&*rAKu3Y-+pg2iXeW2#y4=z z4y~f3(+*XyB2ecpa{q`9yU4wUJ@Yu?1U$RL<>9arG_Ru4tTer*zKYgU1!(tsJa^H# zOeZcB@H+^PbHh`SE{CO{R_;-VoxCv+PT(Z-mZzuiG_s)MGl}3B6i;qSfNY3A z(QhEe57my~5q^94KD;P|ear59BMmp>j z^y9cG%%Nl|RGhi($(SRy6!$u45 zCn!II8fVG7vsGp)sQn}^W0oleaS&Hnn~VCjk_@aPg58n?gt&qAJkOJ?7DPr{N7#_% zO*y&QrQ!vrI=jr8jJj=$pkJKFj(dp3N=n!8l9S91#%gJ}pA{b<#E&s(l*#PJJ_f2s z-8P^bGe9?P0`0=%DjA7grAkJ&DPJW+pq*c{3)7?-OCg?^W701E*4o8uxY}WdT{SLZ zbA2A=cGz9x$6p(_d^@cDbJN^+Tz6=-L4ZQVsKdBLiI7)mTf_Q*O4ZP*t@|7KmA7G)7ovoy2e8&p`DU))|mvBXyTvoviYAr;M{1d(16OPL~$!q0Ov z;W*0N+St8gJ32cpH7N2I%Ij;_Y0f z>bcAi%u%VAMQ7t0-XT5Y5L{&!BzX!LR?Y9w&KbN{;g))O+PS|YnvR>J z3BMQ`x{KRp-vS=yC=8lC2|s>UqV5I!yGuGjmqRGKQpgNI-&;d!t1%R+6)uQMK5juZ z4J1Wcn2=P@mnh1CQ<2g&3PH-V)E3xqKd{Yxe#U)1K2)=lCHK{)*EsFmw9Y9mk@=SX zf4U>epS_`(@t1>-5FAkT>9bcVb^l^w;r1nPhjwxWn12oKrodq3xoSe>VwaTGA|I`ahkq`U{ZRa?Y0~@ zFY~Ck_9|x6vmCpnU_@Z_C9>X*iZ~Jq#sne-`gw-!wKTkja{`H)>FG|*X?w+rW3Q13 zIZ1GdR9g2#8Be`j&z@H?fk_3glWzxvh9u4l%r=}|bJ?!y=C)U;Ta_n8`-aoDtCn5s z9Tu2Ny((s3qE*MTz5D=6&tKph6*G84!R)DmukW~~QPuD!<^%>>b<=EePOTKvD>#lz+JZ#uR) z#VaCNX0zF@`+Ss6hFg=3ctsZCuz1r-o>6&n*JySxpjvX;ZpFN9$y*TZyMxen2uvUriHmUM*86)7W9P}zCFNOvB3A6i(DVewYa{ylsU$whm*-e zymNqeO2%kR-h{^B||NJTOeo4G>d`+uF9rO!3L%hHw$0W;np13a%W0K=EGtb~6 pW__enoh&f0MgK77e9ZiAl3B$^TBTh@;4cg*m=Ll_CM^MM{|j5*N+|#U literal 1646 zcmaJ>&2tlF9Dd#;berv#reC2nwJZpjL}`_xe54c=L8>V!q?Rcsx5?Xf>1KD`k23Y_ z3RAfdy`)_#jj}V`C6ViZ=*~#v{zwhVy{eJt$-@p6{;2i22QUU{a zyufMR@O)ne8ZrX8d)AIM>sapQY;FCXY(xUXZroazL2aWJ$Z*MaWm7;b3S>WvWi0FV z=aTQnZd>TS$`hCU5>z8<8n+U~Y&R_!p-F^-%vJZhjHSsewu zqG5{Y4ghy@8<@s10d2=}Vp-b|$QSRH{-eYJ9LK8~P6!MgWJ~}XIEhm%+iH@k@nVl} zo6}0^E}dAMyqQqDVy!zQW~AyhEN9gUY<2DkGtrhE3Jg|zIz?`TO<6s%8rw^j-!Yxo z^8CaqT-;!vYau&#~GYeJ)V1sy?PWdPel#G^#9kwX<^e=Rg2CW zxPXfk_@3i%I*Pr$?DRv8L&d;6E(;hP7^|xN$?UONTG+-);(3~~0$C%%VA-*DWe`^F zZRzYTlSxA8yYlB;@)PKP-jFP=;X@7AU)ZnuZWzgyfg9j5rM;M|Hr^f;+nZe`(ujDa z)vEO4W42E%Dbbtv)y9U$bu6K#;ikZ7GJP-l7+6;9X}${MxB`0Ji-U%|ZmU7d^)zKh zd6OoV!0&?kbE9~N+Nb2nb)i=0dkO>8k|GT9ewdQ)=#k>{VtF4!<@6qg%em=2jFz8b zd~F{`_Ars2{{ds=N0`X`jL9c3Q@Hbm5Cuv`zkl}Ek91DsH18+4mtf!w17|VBYaElv z;~0)`9`bDBQM^Wrd^;hEDDgDKtIR?LUgzmBQqSm+(jWwoqx6k#sppu7Lg-I%W^H74 zA8-A}Q!2@={8cO!-)LKP;tPH%-=;)?{jv*|XbN34g>NueUVDV$%%=)Jbx-h)!0#wL z#-*;VN!xt?g*E@`(C%iI3|F~eip